--- linux-lts-raring-3.8.0.orig/dropped.txt +++ linux-lts-raring-3.8.0/dropped.txt @@ -0,0 +1,50 @@ +x86, mce: Xeon75xx specific interface to get corrected memory error information +x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll +x86, mce: Make xeon75xx memory driver dependent on PCI +UBUNTU: SAUCE: (no-up) PM report driver and device suspend/resume times. +UBUNTU: SAUCE: vt -- maintain bootloader screen mode and content until vt switch +UBUNTU: SAUCE: vt -- allow grub to request automatic vt_handoff +UBUNTU: SAUCE: headers_install: fix #include "..." usage for userspace +UBUNTU: SAUCE: Remove redundant sun/cassini firmware +UBUNTU: SAUCE: Yama: add link restrictions +UBUNTU: SAUCE: security: unconditionally chain to Yama LSM +UBUNTU: SAUCE: firmware: Remove cxgb3 files duplicated in linux-firmware +UBUNTU: SAUCE: firmware: Remove matrox files duplicated in linux-firmware +UBUNTU: SAUCE: firmware: Remove r128 files duplicated in linux-firmware +UBUNTU: SAUCE: firmware: Remove radeon files duplicated in linux-firmware +UBUNTU: SAUCE: drm/i915: Explicitly disable RC6 for certain models + +Dropped for 3.8-rc1 rebase: +UBUNTU: SAUCE: async_populate_rootfs: move rootfs init earlier +UBUNTU: SAUCE: async_populate_rootfs: fix build warnings +UBUNTU: SAUCE: input: add a key driver for highbank +UBUNTU: SAUCE: Remove redundant emi26 firmware +UBUNTU: SAUCE: Remove redundant 3com/typhoon.bin firmware +UBUNTU: SAUCE: ata_piix: add a disable_driver option +UBUNTU: SAUCE: net: calxedaxgmac: use relaxed i/o accessors in rx and tx paths +UBUNTU: SAUCE: net: calxedaxgmac: drop some unnecessary register writes +UBUNTU: SAUCE: net: calxedaxgmac: rework transmit ring handling +Revert "UBUNTU: SAUCE: input: add a key driver for highbank" +Revert "UBUNTU: SAUCE: async_populate_rootfs: fix build warnings" +Revert "UBUNTU: SAUCE: async_populate_rootfs: move rootfs init earlier" +UBUNTU: ubuntu: AUFS +UBUNTU: SAUCE: omap3 clocks .dev_id = NULL +UBUNTU: SAUCE: efi: Add support for a UEFI variable filesystem +UBUNTU: SAUCE: efi: add efivars kobject to efi sysfs folder +UBUNTU: SAUCE: efivars: efivarfs_create() ensure we drop our reference on inode on error +Revert "UBUNTU: ubuntu: AUFS" +UBUNTU: ubuntu: AUFS (no-squash) -- aufs3-standalone.patch + - apw: this is needed, wiggled a version of this back on +Revert "UBUNTU: SAUCE: omap3 clocks .dev_id = NULL" +UBUNTU: SAUCE: Remove emi62 files duplicated in linux-firmware +UBUNTU: SAUCE: Remove whiteheat files duplicated in linux-firmware +UBUNTU: SAUCE: firmware: Remove last vestiges of dabusb +UBUNTU: SAUCE: fsnotify: use reference counting for groups +UBUNTU: SAUCE: fsnotify: pass group to fsnotify_destroy_mark() +UBUNTU: SAUCE: fsnotify: introduce locked versions of fsnotify_add_mark() and fsnotify_remove_mark() +UBUNTU: SAUCE: drm: Fix possible EDID memory allocation oops +UBUNTU: SAUCE: i915: intel_set_mode: Reduce stack allocation from 500 bytes to 2 pointers +Revert "[SCSI] sd: Implement support for WRITE SAME" +Revert "Revert "[SCSI] sd: Implement support for WRITE SAME"" +exec: use -ELOOP for max recursion depth + --- linux-lts-raring-3.8.0.orig/Makefile +++ linux-lts-raring-3.8.0/Makefile @@ -1,8 +1,8 @@ VERSION = 3 PATCHLEVEL = 8 -SUBLEVEL = 0 -EXTRAVERSION = -NAME = Unicycling Gorilla +SUBLEVEL = 13 +EXTRAVERSION = .11 +NAME = Remoralised Urchins Update # *DOCUMENTATION* # To see a list of typical targets execute "make help" @@ -349,6 +349,12 @@ AFLAGS_KERNEL = CFLAGS_GCOV = -fprofile-arcs -ftest-coverage +# 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 := \ @@ -361,12 +367,16 @@ # Use LINUXINCLUDE when you must reference the include/ directory. # Needed to be compatible with the O= option LINUXINCLUDE := \ + $(UBUNTUINCLUDE) \ -I$(srctree)/arch/$(hdr-arch)/include \ -Iarch/$(hdr-arch)/include/generated \ $(if $(KBUILD_SRC), -I$(srctree)/include) \ -Iinclude \ $(USERINCLUDE) +# UBUNTU: Include our third party driver stuff too +LINUXINCLUDE += -Iubuntu/include $(if $(KBUILD_SRC),-I$(srctree)/ubuntu/include) + KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ @@ -518,7 +528,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/ @@ -912,6 +922,7 @@ $(error Headers not exportable for the $(SRCARCH) architecture)) $(Q)$(MAKE) $(hdr-inst)=include/uapi $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) + $(Q)$(MAKE) $(hdr-inst)=ubuntu/include dst=include oldheaders= PHONY += headers_check_all headers_check_all: headers_install_all @@ -921,6 +932,7 @@ headers_check: headers_install $(Q)$(MAKE) $(hdr-inst)=include/uapi HDRCHECK=1 $(Q)$(MAKE) $(hdr-inst)=arch/$(hdr-arch)/include/uapi/asm $(hdr-dst) HDRCHECK=1 + $(Q)$(MAKE) $(hdr-inst)=ubuntu/include dst=include oldheaders= HDRCHECK=1 # --------------------------------------------------------------------------- # Modules --- linux-lts-raring-3.8.0.orig/MAINTAINERS +++ linux-lts-raring-3.8.0/MAINTAINERS @@ -5666,6 +5666,13 @@ F: include/scsi/osd_* F: fs/exofs/ +OVERLAYFS FILESYSTEM +M: Miklos Szeredi +L: linux-fsdevel@vger.kernel.org +S: Supported +F: fs/overlayfs/* +F: Documentation/filesystems/overlayfs.txt + P54 WIRELESS DRIVER M: Christian Lamparter L: linux-wireless@vger.kernel.org --- linux-lts-raring-3.8.0.orig/debian/control +++ linux-lts-raring-3.8.0/debian/control @@ -0,0 +1,486 @@ +Source: linux-lts-raring +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386], libelf-dev, libnewt-dev, binutils-dev, rsync, libdw-dev, dpkg (>= 1.16.0~ubuntu4), util-linux, pkg-config, flex, bison, openssl +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-raring.git + +Package: linux-headers-3.8.0-33 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Description: Header files related to Linux kernel version 3.8.0 + This package provides kernel header files for version 3.8.0, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-lts-raring-headers-3.8.0-33/debian.README.gz for details + +Package: linux-tools-3.8.0-33 +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel version specific tools for version 3.8.0-33 + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version 3.8.0-33 on + 32 bit x86. + + +Package: linux-image-3.8.0-33-generic +Architecture: i386 amd64 armhf +Section: kernel +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-3.0, fuse-module, +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1) +Recommends: grub-pc [amd64 i386] | grub-efi-amd64 [amd64 i386] | grub-efi-ia32 [amd64 i386] | grub [amd64 i386] | lilo (>= 19.1) [amd64 i386] | flash-kernel [armhf] +Suggests: fdutils, linux-lts-raring-doc-3.8.0 | linux-lts-raring-source-3.8.0, linux-lts-raring-tools, linux-headers-3.8.0-33-generic +Description: Linux kernel image for version 3.8.0 on 32 bit x86 SMP + This package contains the Linux kernel image for version 3.8.0 on + 32 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 Generic processors. + . + Geared toward desktop and server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-image-extra-3.8.0-33-generic +Architecture: i386 amd64 armhf +Section: kernel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-3.8.0-33-generic, crda (>=1.1.1-1ubuntu2) | wireless-crda +Description: Linux kernel image for version 3.8.0 on 32 bit x86 SMP + This package contains the Linux kernel image for version 3.8.0 on + 32 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 Generic processors. + . + Geared toward desktop and server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-3.8.0-33-generic +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends}, linux-headers-3.8.0-33, ${shlibs:Depends} +Provides: linux-headers, linux-headers-3.0 +Description: Linux kernel headers for version 3.8.0 on 32 bit x86 SMP + This package provides kernel header files for version 3.8.0 on + 32 bit x86 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-3.8.0-33/debian.README.gz for details. + +Package: linux-image-3.8.0-33-generic-dbgsym +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 3.8.0 on 32 bit x86 SMP + This package provides a kernel debug image for version 3.8.0 on + 32 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: kernel-image-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: kernel-image +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: Linux kernel binary image for the Debian installer + This package contains the kernel image for the Debian installer + boot images. It does _not_ provide a usable kernel for your full + Debian system. + +Package: nic-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: nic-modules +Depends: kernel-image-3.8.0-33-generic-di, nic-shared-modules-3.8.0-33-generic-di, virtio-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Network interface support + +Package: nic-shared-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: nic-shared-modules +Depends: kernel-image-3.8.0-33-generic-di, crypto-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: nic shared modules + This package contains modules which support nic modules + +Package: serial-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: serial-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Serial port support + +Package: ppp-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: ppp-modules +Depends: kernel-image-3.8.0-33-generic-di, nic-shared-modules-3.8.0-33-generic-di, serial-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: PPP (serial port) networking support + +Package: pata-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: pata-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: PATA support modules + +Package: firewire-core-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: firewire-core-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Firewire (IEEE-1394) Support + +Package: scsi-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: scsi-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: SCSI storage support + +Package: plip-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: plip-modules +Depends: kernel-image-3.8.0-33-generic-di, nic-shared-modules-3.8.0-33-generic-di, parport-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: PLIP (parallel port) networking support + +Package: floppy-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: floppy-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Floppy driver support + +Package: fat-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: fat-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: FAT filesystem support + This includes Windows FAT and VFAT support. + +Package: nfs-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: nfs-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: NFS filesystem drivers + Includes the NFS client driver, and supporting modules. + +Package: md-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: md-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Multi-device support (raid, device-mapper, lvm) + +Package: multipath-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: multipath-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: DM-Multipath support + This package contains modules for device-mapper multipath support. + +Package: usb-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: usb-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Core USB support + +Package: pcmcia-storage-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: pcmcia-storage-modules +Depends: kernel-image-3.8.0-33-generic-di, scsi-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: PCMCIA storage support + +Package: fb-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: fb-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Framebuffer modules + +Package: input-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: input-modules +Depends: kernel-image-3.8.0-33-generic-di, usb-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Support for various input methods + +Package: mouse-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: mouse-modules +Depends: kernel-image-3.8.0-33-generic-di, input-modules-3.8.0-33-generic-di, usb-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: Mouse support + This package contains mouse drivers for the Linux kernel. + +Package: irda-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: irda-modules +Depends: kernel-image-3.8.0-33-generic-di, nic-shared-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Support for Infrared protocols + +Package: parport-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: parport-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Parallel port support + +Package: nic-pcmcia-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: nic-pcmcia-modules +Depends: kernel-image-3.8.0-33-generic-di, nic-shared-modules-3.8.0-33-generic-di, nic-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: PCMCIA network interface support + +Package: pcmcia-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: pcmcia-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: PCMCIA Modules + +Package: nic-usb-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: nic-usb-modules +Depends: kernel-image-3.8.0-33-generic-di, nic-shared-modules-3.8.0-33-generic-di, usb-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: USB network interface support + +Package: sata-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: sata-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: SATA storage support + +Package: crypto-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: crypto-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: crypto modules + This package contains crypto modules. + +Package: squashfs-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: squashfs-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: squashfs modules + This package contains squashfs modules. + +Package: speakup-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: speakup-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: speakup modules + This package contains speakup modules. + +Package: virtio-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: virtio-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: VirtIO Modules + Includes modules for VirtIO (virtual machine, generally kvm guests) + +Package: fs-core-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: fs-core-modules, jfs-modules, reiserfs-modules, xfs-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Base filesystem modules + This includes jfs, reiserfs and xfs. + +Package: fs-secondary-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: fs-secondary-modules, ntfs-modules, hfs-modules +Depends: kernel-image-3.8.0-33-generic-di, fat-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Extra filesystem modules + This includes support for Windows NTFS and MacOS HFS/HFSPlus + +Package: storage-core-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: storage-core-modules, loop-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +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: block-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: block-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di, parport-modules-3.8.0-33-generic-di, virtio-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Block storage devices + This package contains the block storage devices, including DAC960 and + paraide. + +Package: message-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: message-modules +Depends: kernel-image-3.8.0-33-generic-di, storage-core-modules-3.8.0-33-generic-di, scsi-modules-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: Fusion and i2o storage modules + This package containes the fusion and i2o storage modules. + +Package: vlan-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: vlan-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: extra +Description: vlan modules + This package contains vlan (8021.Q) modules. + +Package: ipmi-modules-3.8.0-33-generic-di +XC-Package-Type: udeb +Provides: ipmi-modules +Depends: kernel-image-3.8.0-33-generic-di +Architecture: i386 +XB-Kernel-Version: 3.8.0-33-generic +Section: debian-installer +Priority: standard +Description: ipmi modules --- linux-lts-raring-3.8.0.orig/debian/copyright +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/compat +++ linux-lts-raring-3.8.0/debian/compat @@ -0,0 +1 @@ +5 --- linux-lts-raring-3.8.0.orig/debian/rules +++ linux-lts-raring-3.8.0/debian/rules @@ -0,0 +1,252 @@ +#!/usr/bin/make -f +# +# $(DEBIAN)/rules for Ubuntu linux +# +# Use this however you want, just give credit where credit is due. +# +# Copyright (c) 2007 Ben Collins +# + +DEBIAN=$(shell awk -F= '($$1 == "DEBIAN") { print $$2 }' $$new; \ + done + flavours="$(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 + cp $(DEBIAN)/control.stub $(DEBIAN)/control + +.PHONY: debian/control +debian/control: $(DEBIAN)/control.stub + rm -rf $(builddir)/modules $(builddir)/firmware \ + $(builddir)/kernel-versions $(builddir)/package-list \ + $(builddir)/$(DEBIAN) + mkdir -p $(builddir)/modules/$(arch)/ + cp $(DEBIAN)/d-i/modules/* $(builddir)/modules/$(arch)/ + mkdir -p $(builddir)/firmware/$(arch)/ + cp $(DEBIAN)/d-i/firmware/* $(builddir)/firmware/$(arch)/ + cp $(DEBIAN)/d-i/package-list $(DEBIAN)/d-i/kernel-versions $(builddir)/ + touch $(builddir)/modules/$(arch)/kernel-image + # kernel-wedge needs to poke around in $(DEBIAN)/ + ln -nsf $(CURDIR)/debian $(builddir)/debian + + # Some files may need to differ between architectures + if [ -d $(DEBIAN)/d-i/modules-$(arch) ]; then \ + cp $(DEBIAN)/d-i/modules-$(arch)/* \ + $(builddir)/modules/$(arch)/; \ + fi + if [ -d $(DEBIAN)/d-i/firmware-$(arch) ]; then \ + cp $(DEBIAN)/d-i/firmware-$(arch)/* \ + $(builddir)/firmware/$(arch)/; \ + fi + + # Remove unwanted stuff for this architecture + if [ -r "$(DEBIAN)/d-i/exclude-modules.$(arch)" ]; then \ + (cat $(DEBIAN)/d-i/exclude-modules.$(arch); \ + ls $(builddir)/modules/$(arch)/) | sort | uniq -d | \ + (cd $(builddir)/modules/$(arch)/; xargs rm -f); \ + fi + if [ -r "$(DEBIAN)/d-i/exclude-firmware.$(arch)" ]; then \ + (cat $(DEBIAN)/d-i/exclude-firmware.$(arch); \ + ls $(builddir)/firmware/$(arch)/) | sort | uniq -d | \ + (cd $(builddir)/firmware/$(arch)/; xargs rm -f); \ + fi + + # Per flavour module lists + flavour_modules=`ls $(DEBIAN)/d-i/modules.$(arch)-* 2>/dev/null` \ + || true; \ + if [ "$$flavour_modules" != "" ]; then \ + for flav in $$flavour_modules; do \ + name=`echo $$flav | sed 's/.*\/modules.$(arch)-//'`; \ + mkdir $(builddir)/modules/$(arch)-$$name; \ + (cd $(builddir)/modules/; tar cf - `cat ../$$flav`) | \ + (cd $(builddir)/modules/$(arch)-$$name/; tar xf -); \ + touch $(builddir)/modules/$(arch)-$$name/kernel-image; \ + done; \ + fi + flavour_firmware=`ls $(DEBIAN)/d-i/firmware.$(arch)-* 2>/dev/null` \ + || true; \ + if [ "$$flavour_firmware" != "" ]; then \ + for flav in $$flavour_firmware; do \ + name=`echo $$flav | sed 's/.*\/firmware.$(arch)-//'`; \ + mkdir $(builddir)/firmware/$(arch)-$$name; \ + (cd $(builddir)/firmware/; tar cf - `cat ../$$flav`) | \ + (cd $(builddir)/firmware/$(arch)-$$name/; tar xf -);\ + touch $(builddir)/firmware/$(arch)-$$name/kernel-image; \ + done; \ + fi + + # Some files may need to differ between flavours + flavour_module_dirs=`ls -d $(DEBIAN)/d-i/modules-$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_module_dirs" ]; then \ + for flav in $$flavour_module_dirs; do \ + name=`echo $$flav | sed 's/.*\/modules-$(arch)-//'`; \ + [ -d $(builddir)/modules/$(arch)-$$name ] || \ + cp -a $(builddir)/modules/$(arch) \ + modules/$(arch)-$$name; \ + cp $$flav/* $(builddir)/modules/$(arch)-$$name/; \ + done; \ + fi + flavour_firmware_dirs=`ls -d $(DEBIAN)/d-i/firmware-$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_firmware_dirs" ]; then \ + for flav in $$flavour_firmware_dirs; do \ + name=`echo $$flav | sed 's/.*\/firmware-$(arch)-//'`; \ + [ -d $(builddir)/firmware/$(arch)-$$name ] || \ + cp -a $(builddir)/firmware/$(arch) \ + firmware/$(arch)-$$name; \ + cp $$flav/* $(builddir)/firmware/$(arch)-$$name/; \ + done; \ + fi + + # Remove unwanted stuff for each flavour + flavour_exclude=`ls $(DEBIAN)/d-i/exclude-modules.$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_exclude" ]; then \ + for flav in $$flavour_exclude; do \ + name=`echo $$flav | sed 's/.*\/exclude-modules.$(arch)-//'`;\ + [ -d $(builddir)/modules/$(arch)-$$name ] || \ + cp -a $(builddir)/modules/$(arch) \ + $(builddir)/modules/$(arch)-$$name; \ + (cat $$flav; \ + ls $(builddir)/modules/$(arch)-$$name) | \ + sort | uniq -d | \ + (cd $(builddir)/modules/$(arch)-$$name/; \ + xargs rm -f); \ + done; \ + fi + flavour_exclude=`ls $(DEBIAN)/d-i/exclude-firmware.$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_exclude" ]; then \ + for flav in $$flavour_exclude; do \ + name=`echo $$flav | sed 's/.*\/exclude-firmware.$(arch)-//'`;\ + [ -d $(builddir)/firmware/$(arch)-$$name ] || \ + cp -a $(builddir)/firmware/$(arch) \ + $(builddir)/firmware/$(arch)-$$name; \ + (cat $$flav; \ + ls $(builddir)/firmware/$(arch)-$$name) | \ + sort | uniq -d | \ + (cd $(builddir)/firmware/$(arch)-$$name/; \ + xargs rm -f); \ + done; \ + fi + + if [ ! -d $(builddir)/modules/$(build_arch) ]; then \ + mkdir -p $(builddir)/modules/$(build_arch); \ + cp $(builddir)/modules/$(arch)/* \ + $(builddir)/modules/$(build_arch); \ + fi + if [ ! -d $(builddir)/firmware/$(build_arch) ]; then \ + mkdir -p $(builddir)/firmware/$(build_arch); \ + cp $(builddir)/firmware/$(arch)/* \ + $(builddir)/firmware/$(build_arch); \ + fi + + cp $(DEBIAN)/control.stub debian/control.stub + cd $(builddir) && kernel-wedge gen-control > $(CURDIR)/debian/control --- linux-lts-raring-3.8.0.orig/debian/changelog +++ linux-lts-raring-3.8.0/debian/changelog @@ -0,0 +1,12437 @@ +linux-lts-raring (3.8.0-33.48~precise1) precise; urgency=low + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #1243887 + + [ Maximiliano Curia ] + + * SAUCE: (no-up) Only let characters through when there are active + readers. + - LP: #1208740 + + [ Upstream Kernel Changes ] + + * cciss: fix info leak in cciss_ioctl32_passthru() + - LP: #1188355 + - CVE-2013-2147 + * cpqarray: fix info leak in ida_locked_ioctl() + - LP: #1188355 + - CVE-2013-2147 + * mount: consolidate permission checks + - LP: #1226726 + * get rid of full-hash scan on detaching vfsmounts + - LP: #1226726 + * Smack: Fix the bug smackcipso can't set CIPSO correctly + - LP: #1236743 + * ipvs: add backup_only flag to avoid loops + - LP: #1238494 + * tuntap: correctly handle error in tun_set_iff() + - LP: #1229975 + - CVE-2013-4343 + * htb: fix sign extension bug + - LP: #1240580 + * net: avoid to hang up on sending due to sysctl configuration overflow. + - LP: #1240580 + * net: check net.core.somaxconn sysctl values + - LP: #1240580 + * macvlan: validate flags + - LP: #1240580 + * neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup + - LP: #1240580 + * bonding: modify only neigh_parms owned by us + - LP: #1240580 + * fib_trie: remove potential out of bound access + - LP: #1240580 + * bridge: don't try to update timers in case of broken MLD queries + - LP: #1240580 + * tcp: cubic: fix overflow error in bictcp_update() + - LP: #1240580 + * tcp: cubic: fix bug in bictcp_acked() + - LP: #1240580 + * ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not + match + - LP: #1240580 + * 8139cp: Fix skb leak in rx_status_loop failure path. + - LP: #1240580 + * tun: signedness bug in tun_get_user() + - LP: #1240580 + * ipv6: remove max_addresses check from ipv6_create_tempaddr + - LP: #1240580 + * ipv6: Store Router Alert option in IP6CB directly. + - LP: #1240580 + * ipv6: drop packets with multiple fragmentation headers + - LP: #1240580 + * tcp: set timestamps for restored skb-s + - LP: #1240580 + * net: usb: Add HP hs2434 device to ZLP exception table + - LP: #1240580 + * tcp: initialize rcv_tstamp for restored sockets + - LP: #1240580 + * ipv4: sendto/hdrincl: don't use destination address found in header + - LP: #1240580 + * tcp: tcp_make_synack() should use sock_wmalloc + - LP: #1240580 + * tipc: set sk_err correctly when connection fails + - LP: #1240580 + * net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for + max_delay + - LP: #1240580 + * ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO + - LP: #1240580 + * tg3: Don't turn off led on 5719 serdes port 0 + - LP: #1240580 + * vhost_net: poll vhost queue after marking DMA is done + - LP: #1240580 + * net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv + - LP: #1240580 + * drm/radeon/si: Add support for CP DMA to CS checker for compute v2 + - LP: #1240580 + * sfc: Fix efx_rx_buf_offset() for recycled pages + - LP: #1240580 + * cfq: explicitly use 64bit divide operation for 64bit arguments + - LP: #1240580 + * drm/radeon/atom: workaround vbios bug in transmitter table on rs880 + (v2) + - LP: #1240580 + * drm/ast: fix the ast open key function + - LP: #1240580 + * sched/fair: Fix small race where child->se.parent,cfs_rq might point to + invalid ones + - LP: #1240580 + * tg3: Expand led off fix to include 5720 + - LP: #1240580 + * HID: provide a helper for validating hid reports + - LP: #1240580 + * HID: zeroplus: validate output report details + - LP: #1240580 + - CVE-2013-2889 + * HID: LG: validate HID output report details + - LP: #1240580 + - CVE-2013-2893 + * HID: lenovo-tpkbd: validate output report details + - LP: #1240580 + - CVE-2013-2894 + * HID: validate feature and input report details + - LP: #1240580 + - CVE-2013-2897 + * HID: logitech-dj: validate output report details + - LP: #1240580 + - CVE-2013-2895 + * HID: multitouch: validate indexes details + - LP: #1240580 + - CVE-2013-2897 + * HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails + - LP: #1240580 + * drm/radeon: fix panel scaling with eDP and LVDS bridges + - LP: #1240580 + * cifs: fix filp leak in cifs_atomic_open() + - LP: #1240580 + * net: usb: cdc_ether: Use wwan interface for Telit modules + - LP: #1240580 + * usb: gadget: fix a bug and a WARN_ON in dummy-hcd + - LP: #1240580 + * drm/i915: do not update cursor in crtc mode set + - LP: #1240580 + * drm/i915: Don't enable the cursor on a disable pipe + - LP: #1240580 + * drm/ttm: fix the tt_populated check in ttm_tt_destroy() + - LP: #1240580 + * PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup + - LP: #1240580 + * serial: pch_uart: fix tty-kref leak in dma-rx path + - LP: #1240580 + * x86, efi: Don't map Boot Services on i386 + - LP: #1240580 + * ALSA: compress: Fix compress device unregister. + - LP: #1240580 + * dm snapshot: workaround for a false positive lockdep warning + - LP: #1240580 + * dm-snapshot: fix performance degradation due to small hash size + - LP: #1240580 + * drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2) + - LP: #1240580 + * ARM: 7837/3: fix Thumb-2 bug in AES assembler code + - LP: #1240580 + * x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically + - LP: #1240580 + * drm/radeon: disable tests/benchmarks if accel is disabled + - LP: #1240580 + * xhci: Fix oops happening after address device timeout + - LP: #1240580 + * xhci: Ensure a command structure points to the correct trb on the + command ring + - LP: #1240580 + * drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER + - LP: #1240580 + * staging: vt6656: [BUG] main_usb.c oops on device_close move flag + earlier. + - LP: #1240580 + * staging: vt6656: [BUG] iwctl_siwencodeext return if device not open + - LP: #1240580 + * USB: UHCI: accept very late isochronous URBs + - LP: #1240580 + * USB: OHCI: accept very late isochronous URBs + - LP: #1240580 + * USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd + - LP: #1240580 + * usb/core/devio.c: Don't reject control message to endpoint with wrong + direction bit + - LP: #1240580 + * hwmon: (applesmc) Check key count before proceeding + - LP: #1240580 + * fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy + - LP: #1240580 + * driver core : Fix use after free of dev->parent in device_shutdown + - LP: #1240580 + * USB: Fix breakage in ffs_fs_mount() + - LP: #1240580 + * usb: dwc3: pci: add support for BayTrail + - LP: #1240580 + * usb: dwc3: add support for Merrifield + - LP: #1240580 + * ASoC: max98095: a couple array underflows + - LP: #1240580 + * ASoC: ab8500-codec: info leak in anc_status_control_put() + - LP: #1240580 + * ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st() + - LP: #1240580 + * Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012. + - LP: #1240580 + * Bluetooth: Fix security level for peripheral role + - LP: #1240580 + * Bluetooth: Fix encryption key size for peripheral role + - LP: #1240580 + * Bluetooth: Add support for BCM20702A0 [0b05, 17cb] + - LP: #1240580 + * Bluetooth: Introduce a new HCI_RFKILLED flag + - LP: #1240580 + * rtlwifi: Align private space in rtl_priv struct + - LP: #1240580 + * p54usb: add USB ID for Corega WLUSB2GTST USB adapter + - LP: #1240580 + * mwifiex: fix hang issue for USB chipsets + - LP: #1240580 + * mwifiex: fix NULL pointer dereference in usb suspend handler + - LP: #1240580 + * fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from + Oopsing + - LP: #1240580 + * nilfs2: fix issue with race condition of competition between segments + for dirty blocks + - LP: #1240580 + * mm: avoid reinserting isolated balloon pages into LRU lists + - LP: #1240580 + * USB: serial: option: Ignore card reader interface on Huawei E1750 + - LP: #1240580 + * gpio/omap: maintain GPIO and IRQ usage separately + - LP: #1240580 + * gpio/omap: auto-setup a GPIO when used as an IRQ + - LP: #1240580 + * ib_srpt: Destroy cm_id before destroying QP. + - LP: #1240580 + * powerpc: Fix parameter clobber in csum_partial_copy_generic() + - LP: #1240580 + * powerpc: Restore registers on error exit from + csum_partial_copy_generic() + - LP: #1240580 + * powerpc/sysfs: Disable writing to PURR in guest mode + - LP: #1240580 + * powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in + iommu_init_table() + - LP: #1240580 + * powerpc/vio: Fix modalias_show return values + - LP: #1240580 + * ib_srpt: always set response for task management + - LP: #1240580 + * xen/hvc: allow xenboot console to be used again + - LP: #1240580 + * net: Update the sysctl permissions handler to test effective uid/gid + - LP: #1240580 + * Linux 3.8.13.11 + - LP: #1240580 + + -- Brad Figg Mon, 21 Oct 2013 12:04:49 -0700 + +linux (3.8.0-32.47) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1233777 + + [ Upstream Kernel Changes ] + + * Revert "net/core/sock.c: add missing VSOCK string in + af_family_*_key_strings" + - LP: #1233227 + * Input: cypress_ps2 - Return zero finger count if palm is detected. + - LP: #1229361 + * isofs: Refuse RW mount of the filesystem instead of making it RO + - LP: #1228751 + * udf: Standardize return values in mount sequence + - LP: #1228751 + * udf: Refuse RW mount of the filesystem instead of making it RO + - LP: #1228751 + * ARM: update FIQ support for relocation of vectors + - LP: #1233227 + * ARM: Fix FIQ code on VIVT CPUs + - LP: #1233227 + * regmap: Add another missing header for !CONFIG_REGMAP stubs + - LP: #1233227 + * ALSA: hda - Add inverted digital mic fixup for Acer Aspire One + - LP: #1233227 + * mac80211: add missing channel context release + - LP: #1233227 + * iwl4965: fix rfkill set state regression + - LP: #1233227 + * ath9k_htc: Restore skb headroom when returning skb to mac80211 + - LP: #1233227 + * ath9k: Enable PLL fix only for AR9340/AR9330 + - LP: #1233227 + * ALSA: hda - Fix NULL dereference with CONFIG_SND_DYNAMIC_MINORS=n + - LP: #1233227 + * lparcfg: don't bother saving pointer to proc_dir_entry + - LP: #1233227 + * powerpc/pseries/lparcfg: Fix possible overflow are more than 1026 + - LP: #1233227 + * powerpc: Don't Oops when accessing /proc/powerpc/lparcfg without + hypervisor + - LP: #1233227 + * powerpc: Work around gcc miscompilation of __pa() on 64-bit + - LP: #1233227 + * powerpc/hvsi: Increase handshake timeout from 200ms to 400ms. + - LP: #1233227 + * net: Check the correct namespace when spoofing pid over SCM_RIGHTS + - LP: #1233227 + * ALSA: opti9xx: Fix conflicting driver object name + - LP: #1233227 + * SUNRPC: Fix memory corruption issue on 32-bit highmem systems + - LP: #1233227 + * drivers/base/memory.c: fix show_mem_removable() to handle missing + sections + - LP: #1233227 + * memcg: check that kmem_cache has memcg_params before accessing it + - LP: #1233227 + * workqueue: cond_resched() after processing each work item + - LP: #1233227 + * drm/i915: ivb: fix edp voltage swing reg val + - LP: #1233227 + * drm/vmwgfx: Split GMR2_REMAP commands if they are to large + - LP: #1233227 + * af_key: initialize satype in key_notify_policy_flush() + - LP: #1233227 + * Linux 3.8.13.9 + - LP: #1233227 + * zram: allow request end to coincide with disksize + - LP: #1233227 + * mtd: nand: fix NAND_BUSWIDTH_AUTO for x16 devices + - LP: #1233227 + * HID: hidraw: correctly deallocate memory on device disconnect + - LP: #1233227 + * xen-gnt: prevent adding duplicate gnt callbacks + - LP: #1233227 + * ath9k: always clear ps filter bit on new assoc + - LP: #1233227 + * ceph: Don't forget the 'up_read(&osdc->map_sem)' if met error. + - LP: #1233227 + * libceph: unregister request in __map_request failed and nofail == false + - LP: #1233227 + * usb: config->desc.bLength may not exceed amount of data returned by the + device + - LP: #1233227 + * USB: cdc-wdm: fix race between interrupt handler and tasklet + - LP: #1233227 + * powerpc: Handle unaligned ldbrx/stdbrx + - LP: #1233227 + * intel-iommu: Fix leaks in pagetable freeing + - LP: #1233227 + * drivers/misc/hpilo: Correct panic when an AUX iLO is detected + - LP: #1233227 + * USB: handle LPM errors during device suspend correctly + - LP: #1233227 + * xhci-plat: Don't enable legacy PCI interrupts. + - LP: #1233227 + * ath9k: fix rx descriptor related race condition + - LP: #1233227 + * ath9k: avoid accessing MRC registers on single-chain devices + - LP: #1233227 + * brcmsmac: Fix WARNING caused by lack of calls to dma_mapping_error() + - LP: #1233227 + * ext4: simplify truncation code in ext4_setattr() + - LP: #1233227 + * ext4: fix lost truncate due to race with writeback + - LP: #1233227 + * ASoC: wm8960: Fix PLL register writes + - LP: #1233227 + * rculist: list_first_or_null_rcu() should use list_entry_rcu() + - LP: #1233227 + * USB: mos7720: use GFP_ATOMIC under spinlock + - LP: #1233227 + * USB: mos7720: fix big-endian control requests + - LP: #1233227 + * arm64: perf: fix group validation when using enable_on_exec + - LP: #1233227 + * arm64: perf: fix ARMv8 EVTYPE_MASK to include NSH bit + - LP: #1233227 + * staging: comedi: dt282x: dt282x_ai_insn_read() always fails + - LP: #1233227 + * usb: ehci-mxc: check for pdata before dereferencing + - LP: #1233227 + * mmc: tmio_mmc_dma: fix PIO fallback on SDHI + - LP: #1233227 + * proc: Restrict mounting the proc filesystem + - LP: #1233227 + * usb: xhci: Disable runtime PM suspend for quirky controllers + - LP: #1233227 + * USB: OHCI: Allow runtime PM without system sleep + - LP: #1233227 + * pinctrl: at91: fix get_pullup/down function return + - LP: #1233227 + * ACPI / EC: Add HP Folio 13 to ec_dmi_table in order to skip DSDT scan + - LP: #1233227 + * ACPI / EC: Add ASUSTEK L4R to quirk list in order to validate ECDT + - LP: #1233227 + * HID: validate HID report id size + - LP: #1233227 + - CVE-2013-2888 + * cpuidle: coupled: abort idle if pokes are pending + - LP: #1233227 + * cpuidle: coupled: disable interrupts after entering safe state + - LP: #1233227 + * cpuidle: coupled: fix race condition between pokes and safe state + - LP: #1233227 + * of: Fix missing memory initialization on FDT unflattening + - LP: #1233227 + * leds: wm831x-status: Request a REG resource + - LP: #1233227 + * USB: fix build error when CONFIG_PM_SLEEP isn't enabled + - LP: #1233227 + * clk: wm831x: Initialise wm831x pointer on init + - LP: #1233227 + * drm/edid: add quirk for Medion MD30217PG + - LP: #1233227 + * drm/radeon: fix endian bugs in hw i2c atom routines + - LP: #1233227 + * drm/radeon: update line buffer allocation for dce4.1/5 + - LP: #1233227 + * drm/radeon: update line buffer allocation for dce6 + - LP: #1233227 + * drm/radeon: fix LCD record parsing + - LP: #1233227 + * drm/radeon: fix resume on some rs4xx boards (v2) + - LP: #1233227 + * drm/radeon: fix handling of variable sized arrays for router objects + - LP: #1233227 + * radeon kms: fix uninitialised hotplug work usage in r100_irq_process() + - LP: #1233227 + * pidns: Fix hang in zap_pid_ns_processes by sending a potentially extra + wakeup + - LP: #1233227 + * x86, smap: Handle csum_partial_copy_*_user() + - LP: #1233227 + * Introduce [compat_]save_altstack_ex() to unbreak x86 SMAP + - LP: #1233227 + * drm: fix DRM_IOCTL_MODE_GETFB handle-leak + - LP: #1233227 + * HID: picolcd: Prevent NULL pointer dereference on _remove() + - LP: #1233227 + * HID: battery: don't do DMA from stack + - LP: #1233227 + * ALSA: hda - hdmi: Fallback to ALSA allocation when selecting CA + - LP: #1233227 + * fuse: postpone end_page_writeback() in fuse_writepage_locked() + - LP: #1233227 + * fuse: invalidate inode attributes on xattr modification + - LP: #1233227 + * media: coda: Fix DT driver data pointer for i.MX27 + - LP: #1233227 + * s5p-g2d: Fix registration failure + - LP: #1233227 + * DocBook: upgrade media_api DocBook version to 4.2 + - LP: #1233227 + * v4l2: added missing mutex.h include to v4l2-ctrls.h + - LP: #1233227 + * hdpvr: fix iteration over uninitialized lists in hdpvr_probe() + - LP: #1233227 + * exynos-gsc: Register v4l2 device + - LP: #1233227 + * fuse: readdir: check for slash in names + - LP: #1233227 + * MIPS: ath79: Fix ar933x watchdog clock + - LP: #1233227 + * libceph: use pg_num_mask instead of pgp_num_mask for pg.seed calc + - LP: #1233227 + * HID: pantherlord: validate output report details + - LP: #1233227 + - CVE-2013-2892 + * HID: ntrig: validate feature report details + - LP: #1233227 + - CVE-2013-2896 + * HID: sensor-hub: validate feature report details + - LP: #1233227 + - CVE-2013-2898 + * HID: picolcd_core: validate output report details + - LP: #1233227 + - CVE-2013-2899 + * HID: check for NULL field when setting values + - LP: #1233227 + * ARM: PCI: versatile: Fix map_irq function to match hardware + - LP: #1233227 + * ARM: PCI: versatile: Fix PCI I/O + - LP: #1233227 + * ARM: PCI: versatile: Fix SMAP register offsets + - LP: #1233227 + * net: mvneta: properly disable HW PHY polling and ensure adjust_link() + works + - LP: #1233227 + * drm/i915: try not to lose backlight CBLV precision + - LP: #1233227 + * crypto: api - Fix race condition in larval lookup + - LP: #1233227 + * cifs: ensure that srv_mutex is held when dealing with ssocket pointer + - LP: #1233227 + * CIFS: Fix a memory leak when a lease break comes + - LP: #1233227 + * ALSA: hda - Add Toshiba Satellite C870 to MSI blacklist + - LP: #1233227 + * lguest: Point to the right directory for the lguest launcher + - LP: #1233227 + * powerpc: Default arch idle could cede processor on pseries + - LP: #1233227 + * ASoC: mc13783: add spi errata fix + - LP: #1233227 + * sd: Fix potential out-of-bounds access + - LP: #1233227 + * pidns: fix vfork() after unshare(CLONE_NEWPID) + - LP: #1233227 + * ocfs2: fix the end cluster offset of FIEMAP + - LP: #1233227 + * mm/huge_memory.c: fix potential NULL pointer dereference + - LP: #1233227 + * mm: fix aio performance regression for database caused by THP + - LP: #1233227 + * memcg: fix multiple large threshold notifications + - LP: #1233227 + * Linux 3.8.13.10 + - LP: #1233227 + + -- Steve Conklin Tue, 01 Oct 2013 12:43:12 -0500 + +linux (3.8.0-31.46) raring; urgency=low + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #1223406 + + * UBUNTU: [Config] KUSER_HELPERS=y for armhf + + [ Upstream Kernel Changes ] + + * Revert "cpuidle: Quickly notice prediction failure in general case" + - LP: #1221794 + * Revert "cpuidle: Quickly notice prediction failure for repeat mode" + - LP: #1221794 + * Revert "zram: use zram->lock to protect zram_free_page() in swap free + notify path" + - LP: #1215513 + * x86 thermal: Delete power-limit-notification console messages + - LP: #1215748 + * x86 thermal: Disable power limit notification interrupt by default + - LP: #1215748 + * mwifiex: do not create AP and P2P interfaces upon driver loading + - LP: #1212720 + * ARM: 7810/1: perf: Fix array out of bounds access in + armpmu_map_hw_event() + - LP: #1216442 + - CVE-2013-4254 + * ARM: 7809/1: perf: fix event validation for software group leaders + - LP: #1216442 + - CVE-2013-4254 + * veth: reduce stat overhead + - LP: #1201869 + * veth: extend device features + - LP: #1201869 + * veth: avoid a NULL deref in veth_stats_one + - LP: #1201869 + * veth: fix a NULL deref in netif_carrier_off + - LP: #1201869 + * veth: fix NULL dereference in veth_dellink() + - LP: #1201869 + * Bluetooth: Add support for Atheros [0cf3:3121] + - LP: #1202477 + * uvcvideo: quirk PROBE_DEF for Dell SP2008WFP monitor. + - LP: #1217957 + * usb: dwc3: gadget: don't prevent gadget from being probed if we fail + - LP: #1221794 + * usb: dwc3: fix wrong bit mask in dwc3_event_type + - LP: #1221794 + * ASoC: max98088 - fix element type of the register cache. + - LP: #1221794 + * ata: Fix DVD not dectected at some platform with Wellsburg PCH + - LP: #1221794 + * Tools: hv: KVP: Fix a bug in IPV6 subnet enumeration + - LP: #1221794 + * ALSA: usb-audio: 6fire: return correct XRUN indication + - LP: #1221794 + * usb: serial: cp210x: Add USB ID for Netgear Switches embedded serial + adapter + - LP: #1221794 + * USB: storage: Add MicroVault Flash Drive to unusual_devs + - LP: #1221794 + * USB: misc: Add Manhattan Hi-Speed USB DVI Converter to sisusbvga + - LP: #1221794 + * USB: option: append Petatel NP10T device to GSM modems list + - LP: #1221794 + * usb: cp210x support SEL C662 Vendor/Device + - LP: #1221794 + * USB: cp210x: add MMB and PI ZigBee USB Device Support + - LP: #1221794 + * USB: EHCI: Fix resume signalling on remote wakeup + - LP: #1221794 + * drm/radeon: fix endian issues with DP handling (v3) + - LP: #1221794 + * drm/radeon: Another card with wrong primary dac adj + - LP: #1221794 + * drm/radeon: improve dac adjust heuristics for legacy pdac + - LP: #1221794 + * drm/radeon: fix combios tables on older cards + - LP: #1221794 + * ARM: footbridge: fix overlapping PCI mappings + - LP: #1221794 + * [SCSI] isci: Fix a race condition in the SSP task management path + - LP: #1221794 + * [SCSI] qla2xxx: Properly set the tagging for commands. + - LP: #1221794 + * [SCSI] sd: fix crash when UA received on DIF enabled device + - LP: #1221794 + * nfsd: nfsd_open: when dentry_open returns an error do not propagate as + struct file + - LP: #1221794 + * USB: option: add D-Link DWM-152/C1 and DWM-156/C1 + - LP: #1221794 + * staging: comedi: COMEDI_CANCEL ioctl should wake up read/write + - LP: #1221794 + * staging: comedi: fix a race between do_cmd_ioctl() and read/write + - LP: #1221794 + * staging: android: logger: Correct write offset reset on error + - LP: #1221794 + * usb: option: add TP-LINK MA260 + - LP: #1221794 + * USB: ti_usb_3410_5052: fix dynamic-id matching + - LP: #1221794 + * usb: serial: option: Add ONYX 3G device support + - LP: #1221794 + * md/raid10: remove use-after-free bug. + - LP: #1221794 + * md/raid5: fix interaction of 'replace' and 'recovery'. + - LP: #1221794 + * drm/i915: initialize gt_lock early with other spin locks + - LP: #1221794 + * xhci: Avoid NULL pointer deref when host dies. + - LP: #1221794 + * usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with + xhci 1.0 + - LP: #1221794 + * xhci: fix null pointer dereference on ring_doorbell_for_active_rings + - LP: #1221794 + * usb: serial: option: blacklist ONDA MT689DC QMI interface + - LP: #1221794 + * usb: serial: option: add Olivetti Olicard 200 + - LP: #1221794 + * usb: serial: option.c: remove ONDA MT825UP product ID fromdriver + - LP: #1221794 + * USB: mos7840: fix memory leak in open + - LP: #1221794 + * usb: Clear both buffers when clearing a control transfer TT buffer. + - LP: #1221794 + * nl80211: fix mgmt tx status and testmode reporting for netns + - LP: #1221794 + * mac80211: fix ethtool stats for non-station interfaces + - LP: #1221794 + * mac80211: fix duplicate retransmission detection + - LP: #1221794 + * iwlwifi: mvm: refuse connection to APs with BI < 16 + - LP: #1221794 + * iwlwifi: add DELL SKU for 5150 HMC + - LP: #1221794 + * ath9k_htc: do some initial hardware configuration + - LP: #1221794 + * ath9k_htc: reboot firmware if it was loaded + - LP: #1221794 + * ARM: 7790/1: Fix deferred mm switch on VIVT processors + - LP: #1221794 + * ARM: 7791/1: a.out: remove partial a.out support + - LP: #1221794 + * mwifiex: Add missing endian conversion. + - LP: #1221794 + * USB: mos7840: fix race in register handling + - LP: #1221794 + * USB: mos7840: fix device-type detection + - LP: #1221794 + * USB: mos7840: fix race in led handling + - LP: #1221794 + * serial/mxs-auart: fix race condition in interrupt handler + - LP: #1221794 + * serial: mxs: fix buffer overflow + - LP: #1221794 + * serial/mxs-auart: increase time to wait for transmitter to become idle + - LP: #1221794 + * serial: arc_uart: Fix module alias + - LP: #1221794 + * firewire: fix libdc1394/FlyCap2 iso event regression + - LP: #1221794 + * USB: mos7840: fix pointer casts + - LP: #1221794 + * ixgbe: Fix Tx Hang issue with lldpad on 82598EB + - LP: #1221794 + * ALSA: compress: fix the return value for SNDRV_COMPRESS_VERSION + - LP: #1221794 + * rt2x00: fix stop queue + - LP: #1221794 + * USB: serial: ftdi_sio: add more RT Systems ftdi devices + - LP: #1221794 + * drm/nouveau: fix semaphore dmabuf obj + - LP: #1221794 + * ACPI / battery: Fix parsing _BIX return value + - LP: #1221794 + * drm/radeon/atom: initialize more atom interpretor elements to 0 + - LP: #1221794 + * drm/i915: fix missed hunk after GT access breakage + - LP: #1221794 + * ARM: poison the vectors page + - LP: #1221794 + * ARM: poison memory between kuser helpers + - LP: #1221794 + * ARM: move vector stubs + - LP: #1221794 + * ARM: use linker magic for vectors and vector stubs + - LP: #1221794 + * mm: mempolicy: fix mbind_range() && vma_adjust() interaction + - LP: #1221794 + * powerpc/windfarm: Fix noisy slots-fan on Xserve (rm31) + - LP: #1221794 + * drm/i915: Make data/link N value power of two + - LP: #1221794 + * virtio/console: Quit from splice_write if pipe->nrbufs is 0 + - LP: #1221794 + * virtio/console: Add pipe_lock/unlock for splice_write + - LP: #1221794 + * x86/iommu/vt-d: Expand interrupt remapping quirk to cover x58 chipset + - LP: #1221794 + * s390/bitops: fix find_next_bit_left + - LP: #1221794 + * x86, fpu: correct the asm constraints for fxsave, unbreak mxcsr.daz + - LP: #1221794 + * ext4: make sure group number is bumped after a inode allocation race + - LP: #1221794 + * ext4: destroy ext4_es_cachep on module unload + - LP: #1221794 + * virtio: console: fix race with port unplug and open/close + - LP: #1221794 + * virtio: console: fix race in port_fops_open() and port unplug + - LP: #1221794 + * virtio: console: clean up port data immediately at time of unplug + - LP: #1221794 + * virtio: console: fix raising SIGIO after port unplug + - LP: #1221794 + * virtio: console: return -ENODEV on all read operations after unplug + - LP: #1221794 + * KVM: s390: move kvm_guest_enter,exit closer to sie + - LP: #1221794 + * ext4: fix retry handling in ext4_ext_truncate() + - LP: #1221794 + * spi: spi-davinci: Fix direction in dma_map_single() + - LP: #1221794 + * [SCSI] megaraid_sas: megaraid_sas driver init fails in kdump kernel + - LP: #1221794 + * ACPI / PM: Fix /proc/acpi/wakeup for devices w/o bus or parent + - LP: #1221794 + * ACPI / PM: Walk physical_node_list under physical_node_lock + - LP: #1221794 + * regmap: Add missing header for !CONFIG_REGMAP stubs + - LP: #1221794 + * userns: unshare_userns(&cred) should not populate cred on failure + - LP: #1221794 + * userns: limit the maximum depth of user_namespace->parent chain + - LP: #1221794 + * drm/cirrus: Invalidate page tables when pinning a BO + - LP: #1221794 + * drm/mgag200: Invalidate page tables when pinning a BO + - LP: #1221794 + * drm/ast: invalidate page tables when pinning a BO + - LP: #1221794 + * drm/i915: do not disable backlight on vgaswitcheroo switch off + - LP: #1221794 + * ALSA: 6fire: fix DMA issues with URB transfer_buffer usage + - LP: #1221794 + * drm: Don't pass negative delta to ktime_sub_ns() + - LP: #1221794 + * ALSA: usb-audio: do not trust too-big wMaxPacketSize values + - LP: #1221794 + * hwmon: (adt7470) Fix incorrect return code check + - LP: #1221794 + * powerpc: On POWERNV enable PPC_DENORMALISATION by default + - LP: #1221794 + * Btrfs: release both paths before logging dir/changed extents + - LP: #1221794 + * sched: Ensure update_cfs_shares() is called for parents of + continuously-running tasks + - LP: #1221794 + * cifs: extend the buffer length enought for sprintf() using + - LP: #1221794 + * perf/x86: Fix intel QPI uncore event definitions + - LP: #1221794 + * cifs: don't instantiate new dentries in readdir for inodes that need to + be revalidated immediately + - LP: #1221794 + * ext4: allow the mount options nodelalloc and data=journal + - LP: #1221794 + * ext4: fix mount/remount error messages for incompatible mount options + - LP: #1221794 + * microblaze: fix clone syscall + - LP: #1221794 + * fs/proc/task_mmu.c: fix buffer overflow in add_page_map() + - LP: #1221794 + * arcnet: cleanup sizeof parameter + - LP: #1221794 + * sysctl net: Keep tcp_syn_retries inside the boundary + - LP: #1221794 + * ipv6: take rtnl_lock and mark mrt6 table as freed on namespace cleanup + - LP: #1221794 + * usbnet: do not pretend to support SG/TSO + - LP: #1221794 + * net_sched: Fix stack info leak in cbq_dump_wrr(). + - LP: #1221794 + * af_key: more info leaks in pfkey messages + - LP: #1221794 + * atl1c: use custom skb allocator + - LP: #1221794 + * net_sched: info leak in atm_tc_dump_class() + - LP: #1221794 + * ndisc: Add missing inline to ndisc_addr_option_pad + - LP: #1221794 + * 8139cp: Add dma_mapping_error checking + - LP: #1221794 + * net/mlx4_core: VFs must ignore the enable_64b_cqe_eqe module param + - LP: #1221794 + * Linux 3.8.13.7 + - LP: #1221794 + * mac80211: fix infinite loop in ieee80211_determine_chantype + - LP: #1221794 + * cfg80211/mac80211: disconnect on suspend + - LP: #1221794 + * cfg80211: fix P2P GO interface teardown + - LP: #1221794 + * iwl4965: set power mode early + - LP: #1221794 + * iwl4965: reset firmware after rfkill off + - LP: #1221794 + * ASoC: cs42l52: Reorder Min/Max and update to SX_TLV for Beep Volume + - LP: #1221794 + * can: pcan_usb: fix wrong memcpy() bytes length + - LP: #1221794 + * ALSA: 6fire: make buffers DMA-able (pcm) + - LP: #1221794 + * ALSA: 6fire: make buffers DMA-able (midi) + - LP: #1221794 + * jbd2: Fix use after free after error in jbd2_journal_dirty_metadata() + - LP: #1221794 + * USB: EHCI: accept very late isochronous URBs + - LP: #1221794 + * USB-Serial: Fix error handling of usb_wwan + - LP: #1221794 + * USB: mos7840: fix big-endian probe + - LP: #1221794 + * USB: adutux: fix big-endian device-type reporting + - LP: #1221794 + * USB: ti_usb_3410_5052: fix big-endian firmware handling + - LP: #1221794 + * m68k/atari: ARAnyM - Fix NatFeat module support + - LP: #1221794 + * m68k: Truncate base in do_div() + - LP: #1221794 + * usb: add two quirky touchscreen + - LP: #1221794 + * USB: mos7720: fix broken control requests + - LP: #1221794 + * USB: keyspan: fix null-deref at disconnect and release + - LP: #1221794 + * ASoC: tegra: fix Tegra30 I2S capture parameter setup + - LP: #1221794 + * ALSA: hda - Add a fixup for Gateway LT27 + - LP: #1221794 + * mm: fix the TLB range flushed when __tlb_remove_page() runs out of + slots + - LP: #1221794 + * arch, mm: Remove tlb_fast_mode() + - LP: #1221794 + * Fix TLB gather virtual address range invalidation corner cases + - LP: #1221794 + * s390: Fix broken build + - LP: #1221794 + * x86 get_unmapped_area: Access mmap_legacy_base through mm_struct member + - LP: #1221794 + * Bluetooth: Add support for Foxconn/Hon Hai [0489:e04d] + - LP: #1221794 + * Bluetooth: ath3k: Add support for Fujitsu Lifebook UH5x2 [04c5:1330] + - LP: #1221794 + * Bluetooth: ath3k: Add support for ID 0x13d3/0x3402 + - LP: #1221794 + * Bluetooth: Add support for Atheros [0cf3:e003] + - LP: #1221794 + * iwlwifi: dvm: fix calling ieee80211_chswitch_done() with NULL + - LP: #1221794 + * iwlwifi: pcie: disable L1 Active after pci_enable_device + - LP: #1221794 + * zd1201: do not use stack as URB transfer_buffer + - LP: #1221794 + * Hostap: copying wrong data prism2_ioctl_giwaplist() + - LP: #1221794 + * ARM: at91/DT: fix at91sam9n12ek memory node + - LP: #1221794 + * drm/i915: Move num_pipes to intel info + - LP: #1221794 + * drm/i915: Don't deref pipe->cpu_transcoder in the hangcheck code + - LP: #1221794 + * drm/i915: Invalidate TLBs for the rings after a reset + - LP: #1221794 + * libata: apply behavioral quirks to sil3826 PMP + - LP: #1221794 + * ARM: davinci: nand: specify ecc strength + - LP: #1221794 + * ARM: allow kuser helpers to be removed from the vector page + - LP: #1221794 + * ARM: 7816/1: CONFIG_KUSER_HELPERS: fix help text + - LP: #1221794 + * arm64: perf: fix array out of bounds access in armpmu_map_hw_event() + - LP: #1221794 + * arm64: perf: fix event validation for software group leaders + - LP: #1221794 + * sata_fsl: save irqs while coalescing + - LP: #1221794 + * xen/events: initialize local per-cpu mask for all possible events + - LP: #1221794 + * xen/events: mask events when changing their VCPU binding + - LP: #1221794 + * block: Add bio_for_each_segment_all() + - LP: #1221794 + * [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a + signal + - LP: #1221794 + * of: fdt: fix memory initialization for expanded DT + - LP: #1221794 + * [SCSI] zfcp: fix lock imbalance by reworking request queue locking + - LP: #1221794 + * [SCSI] zfcp: fix schedule-inside-lock in scsi_device list loops + - LP: #1221794 + * drivers/platform/olpc/olpc-ec.c: initialise earlier + - LP: #1221794 + * nilfs2: remove double bio_put() in nilfs_end_bio_write() for + BIO_EOPNOTSUPP error + - LP: #1221794 + * nilfs2: fix issue with counting number of bio requests for + BIO_EOPNOTSUPP error detection + - LP: #1221794 + * Linux 3.8.13.8 + - LP: #1221794 + * drm/nouveau: fix reclocking on nv40 + - LP: #1222898 + * mfd: rtsx: Read vendor setting from config space + - LP: #1201698 + + [ Wen-chien Jesse Sung ] + + * SAUCE: Bluetooth: use hci_send_cmd instead of usb_control_msg + - LP: #1065400 + + -- Tim Gardner Fri, 23 Aug 2013 09:00:39 -0600 + +linux (3.8.0-30.44) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1215596 + + [ Upstream Kernel Changes ] + + * Don't attempt to send extended INQUIRY command if skip_vpd_pages is set + - LP: #1215155 + + -- Steve Conklin Thu, 22 Aug 2013 15:04:40 -0500 + +linux (3.8.0-30.43) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1215095 + + [ Andy Whitcroft ] + + * [Packaging] supply perf with appropriate prefix to ensure use of local + config + - LP: #1206200 + - CVE-2013-1060 + + [ Brad Figg ] + + * Start new release + + [ John Johansen ] + + * Revert "SAUCE: (no-up) AppArmor: Disable Add PR_{GET,SET}_NO_NEW_PRIVS + to prevent execve from granting privs" + - LP: #1202161 + + [ Joseph Salisbury ] + + * SAUCE: (no-up) intel_ips: blacklist ASUSTek G60JX laptops + - LP: #1210848 + + [ Kamal Mostafa ] + + * SAUCE: (no-up) Revert "SAUCE: (no-up) drm/i915: quirk no PCH_PWM_ENABLE + for Dell XPS13 backlight" + + [ Tim Gardner ] + + * [Config] Include rbd and kvm in the virtual inclusion list + - LP: #1206961 + + [ Upstream Kernel Changes ] + + * Revert "drm/i915: Workaround incoherence between fences and LLC across + multiple CPUs" + - LP: #1207977 + * xen/blkback: Check device permissions before allowing OP_DISCARD + - LP: #1207977 + * ASoC: sglt5000: Fix the default value of CHIP_SSS_CTRL + - LP: #1207977 + * ASoC: sglt5000: Fix SGTL5000_PLL_FRAC_DIV_MASK + - LP: #1207977 + * drm/i915: Correct obj->mm_list link to + dev_priv->dev_priv->mm.inactive_list + - LP: #1207977 + * drm/i915: fix up ring cleanup for the i830/i845 CS tlb w/a + - LP: #1207977 + * Partially revert "drm/i915: unconditionally use mt forcewake on + hsw/ivb" + - LP: #1207977 + * drm/i915: Fix write-read race with multiple rings + - LP: #1207977 + * drm/i915: merge {i965, sandybridge}_write_fence_reg() + - LP: #1207977 + * drm/i915: Fix incoherence with fence updates on Sandybridge+ + - LP: #1207977 + * drm/i915: rename sdvox_reg to hdmi_reg on HDMI context + - LP: #1207977 + * drm/i915: don't setup hdmi for port D edp in ddi_init + - LP: #1207977 + * drm/i915: Preserve the DDI_A_4_LANES bit from the bios + - LP: #1207977 + * drm/radeon/hdmi: make sure we have an afmt block assigned + - LP: #1207977 + * drm/radeon: allocate SA bo in the requested domain + - LP: #1207977 + * drm/radeon: allow selection of alignment in the sub-allocator + - LP: #1207977 + * ACPI / memhotplug: Fix a stale pointer in error path + - LP: #1207977 + * PM / Sleep: avoid 'autosleep' in shutdown progress + - LP: #1207977 + * ext4: fix error handling in ext4_ext_truncate() + - LP: #1207977 + * radeon kms: do not flush uninitialized hotplug work + - LP: #1207977 + * ALSA: asihpi: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: atiixp: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: 6fire: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: ua101: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: usx2y: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: pxa2xx: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ASoC: atmel: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ASoC: s6000: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * saa7134: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * staging: line6: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * x86, suspend: Handle CPUs which fail to #GP on RDMSR + - LP: #1207977 + * ALSA: hda - Add new GPU codec ID to snd-hda + - LP: #1207977 + * drm/i915: fix long-standing SNB regression in power consumption after + resume v2 + - LP: #1207977 + * ACPI / video: ignore BIOS initial backlight value for Fujitsu E753 + - LP: #1207977 + * arm64: mm: don't treat user cache maintenance faults as writes + - LP: #1207977 + * Btrfs: fix lock leak when resuming snapshot deletion + - LP: #1207977 + * Btrfs: re-add root to dead root list if we stop dropping it + - LP: #1207977 + * drm/i915: inverted brightness quirk for Acer Aspire 4736Z + - LP: #1207977 + * drm/i915: quirk no PCH_PWM_ENABLE for Dell XPS13 backlight + - LP: #1162026, #1163720, #1207977 + * drm/i915: Serialize almost all register access + - LP: #1207977 + * drm/i915: fix up gt init sequence fallout + - LP: #1207977 + * powerpc/modules: Module CRC relocation fix causes perf issues + - LP: #1207977 + * sparc32: vm_area_struct access for old Sun SPARCs. + - LP: #1207977 + * sparc64 address-congruence property + - LP: #1207977 + * sparc: tsb must be flushed before tlb + - LP: #1207977 + * bridge: fix switched interval for MLD Query types + - LP: #1207977 + * ipv4: Fixed MD5 key lookups when adding/ removing MD5 to/ from TCP + sockets. + - LP: #1207977 + * ipv6: don't call addrconf_dst_alloc again when enable lo + - LP: #1207977 + * macvtap: fix recovery from gup errors + - LP: #1207977 + * ipv6: ip6_sk_dst_check() must not assume ipv6 dst + - LP: #1207977 + * af_key: fix info leaks in notify messages + - LP: #1207977 + * sh_eth: fix unhandled RFE interrupt + - LP: #1207977 + * neighbour: fix a race in neigh_destroy() + - LP: #1207977 + * x25: Fix broken locking in ioctl error paths. + - LP: #1207977 + * net: Swap ver and type in pppoe_hdr + - LP: #1207977 + * vti: remove duplicated code to fix a memory leak + - LP: #1207977 + * ipv6,mcast: always hold idev->lock before mca_lock + - LP: #1207977 + * l2tp: add missing .owner to struct pppox_proto + - LP: #1207977 + * ipv6: call udp_push_pending_frames when uncorking a socket with AF_INET + pending data + - LP: #1207977 + * ipv6: ip6_append_data_mtu did not care about pmtudisc and frag_size + - LP: #1207977 + * sunvnet: vnet_port_remove must call unregister_netdev + - LP: #1207977 + * ifb: fix rcu_sched self-detected stalls + - LP: #1207977 + * tuntap: correctly linearize skb when zerocopy is used + - LP: #1207977 + * macvtap: correctly linearize skb when zerocopy is used + - LP: #1207977 + * ipv6: in case of link failure remove route directly instead of letting + it expire + - LP: #1207977 + * 9p: fix off by one causing access violations and memory corruption + - LP: #1207977 + * dummy: fix oops when loading the dummy failed + - LP: #1207977 + * ifb: fix oops when loading the ifb failed + - LP: #1207977 + * atl1e: fix dma mapping warnings + - LP: #1207977 + * atl1e: unmap partially mapped skb on dma error and free skb + - LP: #1207977 + * ipv4: set transport header earlier + - LP: #1207977 + * tuntap: do not zerocopy if iov needs more pages than MAX_SKB_FRAGS + - LP: #1207977 + * macvtap: do not zerocopy if iov needs more pages than MAX_SKB_FRAGS + - LP: #1207977 + * vlan: fix a race in egress prio management + - LP: #1207977 + * Linux 3.8.13.6 + - LP: #1207977 + * Fix HDIO_DRIVE_* ioctl() Linux 3.9 regression + - LP: #1182247 + * block/partitions: optimize memory allocation in check_partition() + - LP: #1206837 + * ALSA: hda - Add power state filtering + - LP: #1183125 + * ALSA: hda - Yet another fix for broken HSW HDMI pin connections + - LP: #1183125 + * ALSA: hda - Apply pin-enablement workaround to all Haswell HDMI codecs + - LP: #1183125 + + -- Steve Conklin Wed, 21 Aug 2013 14:33:20 -0500 + +linux (3.8.0-29.42) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1211934 + + [ Upstream Kernel Changes ] + + * Revert "veth: avoid a NULL deref in veth_stats_one" + * Revert "veth: extend device features" + * Revert "veth: reduce stat overhead" + + -- Brad Figg Tue, 13 Aug 2013 11:53:26 -0700 + +linux (3.8.0-28.41) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1205373 + + [ Andy Whitcroft ] + + * [Config] add iwldvm to nic-modules + - LP: #1204194 + + [ Brad Figg ] + + * [Config] added qlcnic driver to d-i modules + - LP: #1196597 + + [ Rob Herring ] + + * SAUCE: ARM: highbank: Only touch common coherency control register + fields + - LP: #1196946 + + [ Upstream Kernel Changes ] + + * hp-wmi: add more definitions for new event_id's + - LP: #1152458 + * MFD: rtsx_pcr: Fix probe fail path + - LP: #1201321 + * mfd: rtsx: Add support for RTL8411B + - LP: #1201321 + * veth: reduce stat overhead + - LP: #1201869 + * veth: extend device features + - LP: #1201869 + * veth: avoid a NULL deref in veth_stats_one + - LP: #1201869 + * Input: elantech - fix for newer hardware versions (v7) + - LP: #1166442 + * UBIFS: correct mount message + - LP: #1204666 + * zfcp: fix adapter (re)open recovery while link to SAN is down + - LP: #1204666 + * zfcp: block queue limits with data router + - LP: #1204666 + * zfcp: status read buffers on first adapter open with link down + - LP: #1204666 + * ahci: Add AMD CZ SATA device ID + - LP: #1204666 + * i2c-piix4: Add AMD CZ SMBus device ID + - LP: #1204666 + * sata_highbank: increase retry count but shorten duration for Calxeda + controller + - LP: #1204666 + * clocksource: dw_apb: Fix error check + - LP: #1204666 + * zram: avoid invalid memory access in zram_exit() + - LP: #1204666 + * zram: use zram->lock to protect zram_free_page() in swap free notify + path + - LP: #1204666 + * zram: destroy all devices on error recovery path in zram_init() + - LP: #1204666 + * zram: avoid access beyond the zram device + - LP: #1204666 + * zram: protect sysfs handler from invalid memory access + - LP: #1204666 + * pcmcia: at91_cf: fix gpio_get_value in at91_cf_get_status + - LP: #1204666 + * PCI: Fix refcount issue in pci_create_root_bus() error recovery path + - LP: #1204666 + * ahci: remove pmp link online check in FBS EH + - LP: #1204666 + * usb: gadget: f_mass_storage: add missing memory barrier for + thread_wakeup_needed + - LP: #1204666 + * x86, efi: retry ExitBootServices() on failure + - LP: #1204666 + * libata: skip SRST for all SIMG [34]7x port-multipliers + - LP: #1204666 + * ASoC: wm8962: Remove remaining direct register cache accesses + - LP: #1204666 + * xen/pcifront: Deal with toolstack missing 'XenbusStateClosing' state. + - LP: #1204666 + * ACPICA: Do not use extended sleep registers unless HW-reduced bit is + set + - LP: #1204666 + * ALSA: hda - Cache the MUX selection for generic HDMI + - LP: #1204666 + * cgroup: fix umount vs cgroup_cfts_commit() race + - LP: #1204666 + * cgroup: fix umount vs cgroup_event_remove() race + - LP: #1204666 + * xhci: check for failed dma pool allocation + - LP: #1204666 + * powerpc/eeh: Fix fetching bus for single-dev-PE + - LP: #1204666 + * ata_piix: IDE-mode SATA patch for Intel Coleto Creek DeviceIDs + - LP: #1204666 + * ahci: AHCI-mode SATA patch for Intel Coleto Creek DeviceIDs + - LP: #1204666 + * ARM: 7765/1: perf: Record the user-mode PC in the call chain. + - LP: #1204666 + * mpt2sas: Fix for issue Missing delay not getting set during system + bootup + - LP: #1204666 + * mpt2sas: Fix for device scan following host reset could get stuck in a + infinite loop + - LP: #1204666 + * mpt2sas: fix firmware failure with wrong task attribute + - LP: #1204666 + * usb: host: xhci-plat: release mem region while removing module + - LP: #1204666 + * USB: option,qcserial: move Novatel Gobi1K IDs to qcserial + - LP: #1204666 + * powerpc/hw_brk: Fix setting of length for exact mode breakpoints + - LP: #1204666 + * crypto: algboss - Hold ref count on larval + - LP: #1204666 + * x86: Fix /proc/mtrr with base/size more than 44bits + - LP: #1204666 + * futex: Take hugepages into account when generating futex_key + - LP: #1204666 + * pch_uart: Add uart_clk selection for the MinnowBoard + - LP: #1204666 + * perf: Disable monitoring on setuid processes for regular users + - LP: #1204666 + * sd: Fix parsing of 'temporary ' cache mode prefix + - LP: #1204666 + * Handle big endianness in NTLM (ntlmv2) authentication + - LP: #1204666 + * sd: Update WRITE SAME heuristics + - LP: #1204666 + * aacraid: Fix for arrays are going offline in the system. System hangs + - LP: #1204666 + * genirq: Fix can_request_irq() for IRQs without an action + - LP: #1204666 + * timer: Fix jiffies wrap behavior of round_jiffies_common() + - LP: #1204666 + * xen/time: remove blocked time accounting from xen "clockchip" + - LP: #1204666 + * UBIFS: prepare to fix a horrid bug + - LP: #1204666 + * UBIFS: fix a horrid bug + - LP: #1204666 + * powerpc/smp: Section mismatch from smp_release_cpus to __initdata + spinning_secondaries + - LP: #1204666 + * ext4: fix corruption when online resizing a fs with 1K block size + - LP: #1204666 + * jbd2: move superblock checksum calculation to jbd2_write_superblock() + - LP: #1204666 + * ext3,ext4: don't mess with dir_file->f_pos in htree_dirblock_to_tree() + - LP: #1204666 + * jbd2: fix theoretical race in jbd2__journal_restart + - LP: #1204666 + * tick: Prevent uncontrolled switch to oneshot mode + - LP: #1204666 + * md/raid10: fix two bugs affecting RAID10 reshape. + - LP: #1204666 + * HID: apple: Add support for the 2013 Macbook Air + - LP: #1204666 + * Input: bcm5974 - add support for the 2013 MacBook Air + - LP: #1204666 + * drivers/dma/pl330.c: fix locking in pl330_free_chan_resources() + - LP: #1204666 + * ocfs2: xattr: fix inlined xattr reflink + - LP: #1204666 + * block: do not pass disk names as format strings + - LP: #1204666 + - CVE-2013-2851 + * crypto: sanitize argument for format string + - LP: #1204666 + * mm/memory-hotplug: fix lowmem count overflow when offline pages + - LP: #1204666 + * drivers/rtc/rtc-rv3029c2.c: fix disabling AIE irq + - LP: #1204666 + * nbd: correct disconnect behavior + - LP: #1204666 + * hpfs: better test for errors + - LP: #1204666 + * ext3: fix data=journal fast mount/umount hang + - LP: #1204666 + * netfilter: xt_TCPOPTSTRIP: fix possible mangling beyond packet boundary + - LP: #1204666 + * netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path + - LP: #1204666 + * netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 + - LP: #1204666 + * ipvs: Fix reuse connection if real server is dead + - LP: #1204666 + * netfilter: xt_LOG: fix mark logging for IPv6 packets + - LP: #1204666 + * ipvs: info leak in __ip_vs_get_dest_entries() + - LP: #1204666 + * netfilter: nfnetlink_cttimeout: fix incomplete dumping of objects + - LP: #1204666 + * netfilter: nfnetlink_acct: fix incomplete dumping of objects + - LP: #1204666 + * netfilter: xt_TCPMSS: Fix violation of RFC879 in absence of MSS option + - LP: #1204666 + * netfilter: xt_TCPOPTSTRIP: don't use tcp_hdr() + - LP: #1204666 + * netfilter: xt_TCPMSS: Fix missing fragmentation handling + - LP: #1204666 + * netfilter: xt_TCPMSS: Fix IPv6 default MSS too + - LP: #1204666 + * ipvs: SCTP ports should be writable in ICMP packets + - LP: #1204666 + * tracing: Use current_uid() for critical time tracing + - LP: #1204666 + * ext4: fix overflow when counting used blocks on 32-bit architectures + - LP: #1204666 + * ext4: fix data offset overflow in ext4_xattr_fiemap() on 32-bit archs + - LP: #1204666 + * ext4: fix overflows in SEEK_HOLE, SEEK_DATA implementations + - LP: #1204666 + * ext4: fix data offset overflow on 32-bit archs in + ext4_inline_data_fiemap() + - LP: #1204666 + * iommu/vt-d: add quirk for broken interrupt remapping on 55XX chipsets + - LP: #1204666 + * iommu: Fix compile warnings with forward declarations + - LP: #1204666 + * dma: tegra: avoid channel lock up after free + - LP: #1204666 + * drivers/cdrom/cdrom.c: use kzalloc() for failing hardware + - LP: #1204666 + * printk: Fix rq->lock vs logbuf_lock unlock lock inversion + - LP: #1204666 + * charger-manager: Ensure event is not used as format string + - LP: #1204666 + * drm/radeon: add backlight quirk for hybrid mac + - LP: #1204666 + * b43: ensue that BCMA is "y" when B43 is "y" + - LP: #1204666 + * ath9k_hw: Assign default xlna config for AR9485 + - LP: #1204666 + * ath9k: Do not assign noise for NULL caldata + - LP: #1204666 + * iwlwifi: pcie: fix race in queue unmapping + - LP: #1204666 + * iwlwifi: pcie: wake the queue if stopped when being unmapped + - LP: #1204666 + * rtlwifi: rtl8192cu: Add new USB ID for TP-Link TL-WN8200ND + - LP: #1204666 + * media: dmxdev: remove dvb_ringbuffer_flush() on writer side + - LP: #1204666 + * MIPS: Octeon: Don't clobber bootloader data structures. + - LP: #1204666 + * iommu/amd: Only unmap large pages from the first pte + - LP: #1204666 + * rt2x00: read 5GHz TX power values from the correct offset + - LP: #1204666 + * rtlwifi: rtl8723ae: Fix typo in firmware names + - LP: #1204666 + * writeback: Fix periodic writeback after fs mount + - LP: #1204666 + * drm/i915: Fix context sizes on HSW + - LP: #1204666 + * drm/i915: Only clear write-domains after a successful wait-seqno + - LP: #1204666 + * nfsd4: fix decoding of compounds across page boundaries + - LP: #1204666 + * svcrpc: fix handling of too-short rpc's + - LP: #1204666 + * svcrpc: don't error out on small tcp fragment + - LP: #1204666 + * ARM: shmobile: emev2 GIO3 resource fix + - LP: #1204666 + * Btrfs: fix unlock after free on rewinded tree blocks + - LP: #1204666 + * Btrfs: hold the tree mod lock in __tree_mod_log_rewind + - LP: #1204666 + * Btrfs: only do the tree_mod_log_free_eb if this is our last ref + - LP: #1204666 + * uprobes: Fix return value in error handling path + - LP: #1204666 + * module: do percpu allocation after uniqueness check. No, really! + - LP: #1204666 + * libceph: Fix NULL pointer dereference in auth client code + - LP: #1204666 + - CVE-2013-1059 + * use sensible file nlink values if unprovided + - LP: #1204666 + * drm/nouveau: use vmalloc for pgt allocation + - LP: #1204666 + * drm/nva3/disp: Fix HDMI audio regression + - LP: #1204666 + * ACPI / power: add missing newline to debug messages + - LP: #1204666 + * megaraid_sas: fix memory leak if SGL has zero length entries + - LP: #1204666 + * iscsi-target: Fix tfc_tpg_nacl_auth_cit configfs length overflow + - LP: #1204666 + * mpt3sas: fix for kernel panic when driver loads with HBA conected to + non LUN 0 configured expander + - LP: #1204666 + * mpt3sas: Infinite loops can occur if MPI2_IOCSTATUS_CONFIG_INVALID_PAGE + is not returned + - LP: #1204666 + * parisc: Fix gcc miscompilation in pa_memcpy() + - LP: #1204666 + * ARM: 7778/1: smp_twd: twd_update_frequency need be run on all online + CPUs + - LP: #1204666 + * dm mpath: fix ioctl deadlock when no paths + - LP: #1204666 + * dm ioctl: set noio flag to avoid __vmalloc deadlock + - LP: #1204666 + * dm verity: fix inability to use a few specific devices sizes + - LP: #1204666 + * CIFS: Fix a deadlock when a file is reopened + - LP: #1204666 + * perf: Clone child context from parent context pmu + - LP: #1204666 + * perf: Remove WARN_ON_ONCE() check in __perf_event_enable() for valid + scenario + - LP: #1204666 + * perf: Fix perf_lock_task_context() vs RCU + - LP: #1204666 + * x86, efivars: firmware bug workarounds should be in platform code + - LP: #1204666 + * x86, efi: remove duplicate code in setup_arch() by using, + efi_is_native() + - LP: #1204666 + * x86,efi: Implement efi_no_storage_paranoia parameter + - LP: #1204666 + * Modify UEFI anti-bricking code + - LP: #1204666 + * x86/efi: Fix dummy variable buffer allocation + - LP: #1204666 + * lockd: protect nlm_blocked access in nlmsvc_retry_blocked + - LP: #1204666 + * ext4: don't show usrquota/grpquota twice in /proc/mounts + - LP: #1204666 + * ext4: don't allow ext4_free_blocks() to fail due to ENOMEM + - LP: #1204666 + * svcrdma: underflow issue in decode_write_list() + - LP: #1204666 + * Linux 3.8.13.5 + - LP: #1204666 + * fanotify: info leak in copy_event_to_user() + - LP: #1188356 + - CVE-2013-2148 + * ipv6: only static routes qualify for equal cost multipathing + - LP: #1202990 + - CVE-2013-4125 + * vhost-net: fix use-after-free in vhost_net_flush + - LP: #1202992 + - CVE-2013-4127 + + -- Brad Figg Fri, 26 Jul 2013 08:14:02 -0700 + +linux (3.8.0-27.40) raring; urgency=low + + [Brad Figg] + + * UBUNTU: [Config] CONFIG_ARM_ERRATA_643719=y + + -- Brad Figg Mon, 08 Jul 2013 16:06:32 -0700 + +linux (3.8.0-27.39) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1199128 + + [ Brad Figg ] + + * [Config] CONFIG_ATH9K_LEGACY_RATE_CONTROL=y + + [ Seth Forshee ] + + * SAUCE: Work around broken ACPI backlight on ThinkPad T430 + - LP: #1183856 + + [ Stefan Bader ] + + * (d-i) Add dm-snapshot to md-modules + - LP: #1191726 + + [ Tim Gardner ] + + * [Config] CONFIG_SUNRPC_DEBUG=y + - LP: #1127319 + + [ Upstream Kernel Changes ] + + * Revert "ath9k_hw: Update rx gain initval to improve rx sensitivity" + - LP: #1193126 + * Revert "serial: 8250_pci: add support for another kind of NetMos + Technology PCI 9835 Multi-I/O Controller" + - LP: #1190967 + * mac80211: close AP_VLAN interfaces before unregistering all + - LP: #1193126 + * ath9k: use correct OTP register offsets for AR9550 + - LP: #1193126 + * regulator: palmas: Fix "enable_reg" to point to the correct reg for + SMPS10 + - LP: #1193126 + * net: can: kvaser_usb: fix reception on "USBcan Pro" and "USBcan R" type + hardware. + - LP: #1193126 + * tg3: Add read dma workaround for 5720 + - LP: #1193126 + * xhci-mem: init list heads at the beginning of init + - LP: #1193126 + * xhci: fix list access before init + - LP: #1193126 + * xhci - correct comp_mode_recovery_timer on return from hibernate + - LP: #1193126 + * xhci: Disable D3cold for buggy TI redrivers. + - LP: #1193126 + * usb: dwc3: pci: PHY should be deleted later than dwc3 core + - LP: #1193126 + * usb: dwc3: gadget: free trb pool only from epnum 2 + - LP: #1193126 + * usb: musb: make use_sg flag URB specific + - LP: #1193126 + * USB: revert periodic scheduling bugfix + - LP: #1193126 + * USB: serial: fix Treo/Kyocera interrrupt-in urb context + - LP: #1193126 + * USB: visor: fix initialisation of Treo/Kyocera devices + - LP: #1193126 + * USB: mos7720: fix DMA to stack + - LP: #1193126 + * USB: mos7840: fix DMA to stack + - LP: #1193126 + * USB: ark3116: fix control-message timeout + - LP: #1193126 + * USB: iuu_phoenix: fix bulk-message timeout + - LP: #1193126 + * USB: mos7720: fix message timeouts + - LP: #1193126 + * USB: zte_ev: fix control-message timeouts + - LP: #1193126 + * USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device + - LP: #1193126 + * USB: serial: Add Option GTM681W to qcserial device table. + - LP: #1193126 + * USB: zte_ev: fix broken open + - LP: #1193126 + * USB: keyspan: fix bogus array index + - LP: #1193126 + * USB: mos7720: fix hardware flow control + - LP: #1193126 + * x86/PCI: Map PCI setup data with ioremap() so it can be in highmem + - LP: #1193126 + * USB: whiteheat: fix broken port configuration + - LP: #1193126 + * USB: option: blacklist network interface on Huawei E1820 + - LP: #1193126 + * USB: option,zte_ev: move most ZTE CDMA devices to zte_ev + - LP: #1193126 + * ecryptfs: fixed msync to flush data + - LP: #1193126 + * dmaengine: ste_dma40: fix pm runtime ref counting + - LP: #1193126 + * cifs: fix off-by-one bug in build_unc_path_to_root + - LP: #1193126 + * ACPI video: ignore BIOS backlight value for HP dm4 + - LP: #1193126 + * ACPI video: ignore BIOS initial backlight value for HP 1000 + - LP: #1193126 + * ACPI / video: ignore BIOS initial backlight value for HP m4 + - LP: #1193126 + * ACPI / video: ignore BIOS initial backlight value for HP Pavilion g6 + - LP: #1193126 + * ALSA: usb-audio: fix Roland/Cakewalk UM-3G support + - LP: #1193126 + * drm: fix a use-after-free when GPU acceleration disabled + - LP: #1193126 + * drm/mgag200: Add missing write to index before accessing data register + - LP: #1193126 + * drm/i915: no lvds quirk for hp t5740 + - LP: #1193126 + * radeon: Fix system hang issue when using KMS with older cards + - LP: #1193126 + * drm/radeon: don't allow audio on DCE6 + - LP: #1193126 + * ALSA: usb-audio - Apply Logitech QuickCam Pro 9000 quirk only to audio + iface + - LP: #1193126 + * drm/i915/sdvo: Use &intel_sdvo->ddc instead of intel_sdvo->i2c for DDC. + - LP: #1193126 + * ALSA: usb-audio - Fix invalid volume resolution on Logitech HD webcam + c270 + - LP: #1193126 + * eCryptfs: Check return of filemap_write_and_wait during fsync + - LP: #1193126 + * acpi-cpufreq: set current frequency based on target P-State + - LP: #1193126 + * ARM: 7742/1: topology: export cpu_topology + - LP: #1193126 + * ARM: 7743/1: compressed/head.S: work around new binutils warning + - LP: #1193126 + * ARM: 7747/1: pcpu: ensure __my_cpu_offset cannot be re-ordered across + barrier() + - LP: #1193126 + * hwmon: (adm1021) Strengthen chip detection for ADM1021, LM84 and + MAX1617 + - LP: #1193126 + * hpfs: fix warnings when the filesystem fills up + - LP: #1193126 + * powerpc/eeh: Don't check RTAS token to get PE addr + - LP: #1193126 + * xen/smp: Fixup NOHZ per cpu data when onlining an offline CPU. + - LP: #1193126 + * ceph: fix statvfs fr_size + - LP: #1193126 + * libceph: must hold mutex for reset_changed_osds() + - LP: #1193126 + * ceph: add cpu_to_le32() calls when encoding a reconnect capability + - LP: #1193126 + * ceph: ceph_pagelist_append might sleep while atomic + - LP: #1193126 + * rbd: don't destroy ceph_opts in rbd_add() + - LP: #1193126 + * drm/gma500/psb: Unpin framebuffer on crtc disable + - LP: #1193126 + * drm/gma500/cdv: Unpin framebuffer on crtc disable + - LP: #1193126 + * drm/i915: prefer VBT modes for SVDO-LVDS over EDID + - LP: #1193126 + * Bluetooth: Fix missing length checks for L2CAP signalling PDUs + - LP: #1193126 + * Bluetooth: Fix mgmt handling of power on failures + - LP: #1193126 + * ath9k: Disable PowerSave by default + - LP: #1193126 + * ath9k: Use minstrel rate control by default + - LP: #1193126 + * b43: stop format string leaking into error msgs + - LP: #1193126 + - CVE-2013-2852 + * x86: Fix typo in kexec register clearing + - LP: #1193126 + * CPU hotplug: provide a generic helper to disable/enable CPU hotplug + - LP: #1193126 + * reboot: rigrate shutdown/reboot to boot cpu + - LP: #1193126 + * kmsg: honor dmesg_restrict sysctl on /dev/kmsg + - LP: #1193126 + * audit: wait_for_auditd() should use TASK_UNINTERRUPTIBLE + - LP: #1193126 + * cciss: fix broken mutex usage in ioctl + - LP: #1193126 + * drivers/rtc/rtc-twl.c: fix missing device_init_wakeup() when booted + with device tree + - LP: #1193126 + * swap: avoid read_swap_cache_async() race to deadlock while waiting on + discard I/O completion + - LP: #1193126 + * mm/page_alloc.c: fix watermark check in __zone_watermark_ok() + - LP: #1193126 + * mm: migration: add migrate_entry_wait_huge() + - LP: #1193126 + * md/raid1: consider WRITE as successful only if at least one non-Faulty + and non-rebuilding drive completed it. + - LP: #1193126 + * md/raid1,raid10: use freeze_array in place of raise_barrier in various + places. + - LP: #1193126 + * md/raid1,5,10: Disable WRITE SAME until a recovery strategy is in place + - LP: #1193126 + * Linux 3.8.13.3 + - LP: #1193126 + * mfd: lpc_ich: Add support for Intel Avoton SoC + - LP: #1196658 + * tg3: Add support for new 5762 ASIC + - LP: #1178899 + * tg3: Add NVRAM support for 5762 + - LP: #1178899 + * tg3: missing break statement in tg3_get_5720_nvram_info() + - LP: #1178899 + * tg3: Fix 5762 NVRAM sizing + - LP: #1178899 + * tg3: Fix data corruption on 5725 with TSO + - LP: #1178899 + * Drivers: hv: Execute shutdown in a thread context + - LP: #1180419 + * usb: dwc3: gadget: req->queued must be forced to false in cleanup + - LP: #1199100 + * idr: fix top layer handling + - LP: #1199100 + * Bluetooth: Add support for atheros 04ca:3004 device to ath3k + - LP: #1199100 + * Bluetooth: Device 0cf3:3008 should map AR 3012 + - LP: #1199100 + * regulator: fixed regulator_bulk_enable unwinding code + - LP: #1199100 + * perf: Fix error return code + - LP: #1199100 + * netrom: fix invalid use of sizeof in nr_recvmsg() + - LP: #1199100 + * r8169: honor jumbo settings when chipset is requested to start. + - LP: #1199100 + * nfsd4: don't allow owner override on 4.1 CLAIM_FH opens + - LP: #1199100 + * net: qmi_wwan: fixup missing ethernet header (firmware bug workaround) + - LP: #1199100 + * net: qmi_wwan: fixup destination address (firmware bug workaround) + - LP: #1199100 + * net: qmi_wwan: prevent duplicate mac address on link (firmware bug + workaround) + - LP: #1199100 + * Kirkwood: Enable PCIe port 1 on QNAP TS-11x/TS-21x + - LP: #1199100 + * ARM: plat-orion: Fix num_resources and id for ge10 and ge11 + - LP: #1199100 + * staging:iio:light:tsl2x7x: fix the error handling in tsl2x7x_probe() + - LP: #1199100 + * tg3: Skip powering down function 0 on certain serdes devices + - LP: #1199100 + * jfs: fix a couple races + - LP: #1199100 + * reiserfs: fix deadlock with nfs racing on create/lookup + - LP: #1199100 + * reiserfs: fix problems with chowning setuid file w/ xattrs + - LP: #1199100 + * reiserfs: fix spurious multiple-fill in reiserfs_readdir_dentry + - LP: #1199100 + * xen-netback: remove skb in xen_netbk_alloc_page + - LP: #1199100 + * xen-netback: fix sparse warning + - LP: #1199100 + * xen-netback: coalesce slots in TX path and fix regressions + - LP: #1199100 + * xen-netback: don't disconnect frontend when seeing oversize packet + - LP: #1199100 + * xen-netback: remove redundent parameter in netbk_count_requests + - LP: #1199100 + * xen-netback: avoid allocating variable size array on stack + - LP: #1199100 + * xen-netback: better names for thresholds + - LP: #1199100 + * xen-netfront: reduce gso_max_size to account for max TCP header + - LP: #1199100 + * iommu/amd: Re-enable IOMMU event log interrupt after handling. + - LP: #1199100 + * xen/events: Handle VIRQ_TIMER before any other hardirq in event loop. + - LP: #1199100 + * klist: del waiter from klist_remove_waiters before wakeup waitting + process + - LP: #1199100 + * drm/gma500: Increase max resolution for mode setting + - LP: #1199100 + * libceph: clear messenger auth_retry flag when we authenticate + - LP: #1199100 + * libceph: fix authorizer invalidation + - LP: #1199100 + * libceph: add update_authorizer auth method + - LP: #1199100 + * libceph: wrap auth ops in wrapper functions + - LP: #1199100 + * libceph: wrap auth methods in a mutex + - LP: #1199100 + * MODSIGN: do not send garbage to stderr when enabling modules signature + - LP: #1199100 + * Input: cyttsp - fix memcpy size param + - LP: #1199100 + * clk: remove notifier from list before freeing it + - LP: #1199100 + * USB: f81232: fix device initialisation at open + - LP: #1199100 + * USB: spcp8x5: fix device initialisation at open + - LP: #1199100 + * USB: pl2303: fix device initialisation at open + - LP: #1199100 + * drm/radeon: do not try to uselessly update virtual memory pagetable + - LP: #1199100 + * tg3: Wait for boot code to finish after power on + - LP: #1199100 + * target/iscsi: don't corrupt bh_count in iscsit_stop_time2retain_timer() + - LP: #1199100 + * tcm_qla2xxx: Fix residual for underrun commands that fail + - LP: #1199100 + * powerpc: Fix stack overflow crash in resume_kernel when ftracing + - LP: #1199100 + * powerpc: Fix emulation of illegal instructions on PowerNV platform + - LP: #1199100 + * powerpc: Fix missing/delayed calls to irq_work + - LP: #1199100 + * tilepro: work around module link error with gcc 4.7 + - LP: #1199100 + * ALSA: usb-audio: work around Android accessory firmware bug + - LP: #1199100 + * ALSA: usb-audio: Fix invalid volume resolution for Logitech HD Webcam + c310 + - LP: #1199100 + * ARM: 7752/1: errata: LoUIS bit field in CLIDR register is incorrect + - LP: #1199100 + * ARM: 7754/1: Fix the CPU ID and the mask associated to the PJ4B + - LP: #1199100 + * ARM: 7755/1: handle user space mapped pages in flush_kernel_dcache_page + - LP: #1199100 + * KVM: x86: remove vcpu's CPL check in host-invoked XCR set + - LP: #1199100 + * x86: fix build error and kconfig for ia32_emulation and binfmt + - LP: #1199100 + * x86: kvmclock: zero initialize pvclock shared memory area + - LP: #1199100 + * USB: serial: ti_usb_3410_5052: new device id for Abbot strip port cable + - LP: #1199100 + * perf: arm64: Record the user-mode PC in the call chain. + - LP: #1199100 + * drm/radeon: update lockup tracking when scheduling in empty ring + - LP: #1199100 + * tcp: fix tcp_md5_hash_skb_data() + - LP: #1199100 + * gianfar: add missing iounmap() on error in gianfar_ptp_probe() + - LP: #1199100 + * vxlan: Update vxlan fdb 'used' field after each usage + - LP: #1199100 + * ipv6: fix possible crashes in ip6_cork_release() + - LP: #1199100 + * netlabel: improve domain mapping validation + - LP: #1199100 + * r8169: fix offloaded tx checksum for small packets. + - LP: #1199100 + * 8139cp: reset BQL when ring tx ring cleared + - LP: #1199100 + * tcp: bug fix in proportional rate reduction. + - LP: #1199100 + * tcp: xps: fix reordering issues + - LP: #1199100 + * ip_tunnel: fix kernel panic with icmp_dest_unreach + - LP: #1199100 + * net: phy: fix a bug when verify the EEE support + - LP: #1199100 + * ipv4: fix redirect handling for TCP packets + - LP: #1199100 + * net: Block MSG_CMSG_COMPAT in send(m)msg and recv(m)msg + - LP: #1199100 + * net/core/sock.c: add missing VSOCK string in af_family_*_key_strings + - LP: #1199100 + * tuntap: forbid changing mq flag for persistent device + - LP: #1199100 + * net: force a reload of first item in hlist_nulls_for_each_entry_rcu + - LP: #1199100 + * ipv6: assign rt6_info to inet6_ifaddr in init_loopback + - LP: #1199100 + * vhost_net: clear msg.control for non-zerocopy case during tx + - LP: #1199100 + * net: sctp: fix NULL pointer dereference in socket destruction + - LP: #1199100 + * tuntap: set SOCK_ZEROCOPY flag during open + - LP: #1199100 + * team: check return value of team_get_port_by_index_rcu() for NULL + - LP: #1199100 + * team: move add to port list before port enablement + - LP: #1199100 + * packet: packet_getname_spkt: make sure string is always 0-terminated + - LP: #1199100 + * l2tp: Fix PPP header erasure and memory leak + - LP: #1199100 + * l2tp: Fix sendmsg() return value + - LP: #1199100 + * sctp: fully initialize sctp_outq in sctp_outq_init + - LP: #1199100 + * net: sh_eth: fix incorrect RX length error if R8A7740 + - LP: #1199100 + * hw_breakpoint: Fix cpu check in task_bp_pinned(cpu) + - LP: #1199100 + * hw_breakpoint: Use cpu_possible_mask in {reserve,release}_bp_slot() + - LP: #1199100 + * s390/ipl: Fix FCP WWPN and LUN format strings for read + - LP: #1199100 + * ARM: 7772/1: Fix missing flush_kernel_dcache_page() for noMMU + - LP: #1199100 + * libata-acpi: add back ACPI based hotplug functionality + - LP: #1199100 + * iwlwifi: dvm: fix chain noise calibration + - LP: #1199100 + * rt2800: fix RT5390 & RT3290 TX power settings regression + - LP: #1199100 + * Bluetooth: Fix crash in l2cap_build_cmd() with small MTU + - LP: #1199100 + * Bluetooth: Fix invalid length check in l2cap_information_rsp() + - LP: #1199100 + * ath9k_htc: Handle IDLE state transition properly + - LP: #1199100 + * dlci: acquire rtnl_lock before calling __dev_get_by_name() + - LP: #1199100 + * dlci: validate the net device in dlci_del() + - LP: #1199100 + * KVM: x86: fix deadlock in clock-in-progress request handling + - LP: #1199100 + * Linux 3.8.13.4 + - LP: #1199100 + + -- Brad Figg Thu, 20 Jun 2013 13:15:35 -0700 + +linux (3.8.0-26.38) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1191955 + + [ Dave Chiluk ] + + * SAUCE: ncpfs: fix rmdir returns Device or resource busy + - LP: #1035226 + + [ Upstream Kernel Changes ] + + * ARM: S5PV210: Fix PL330 DMA controller clkdev entries + - LP: #1187551 + * NFSv4: Handle NFS4ERR_DELAY and NFS4ERR_GRACE in + nfs4_lock_delegation_recall + - LP: #1187551 + * blkcg: fix "scheduling while atomic" in blk_queue_bypass_start + - LP: #1187551 + * audit: Syscall rules are not applied to existing processes on non-x86 + - LP: #1187551 + * menuconfig: Fix memory leak introduced by jump keys feature + - LP: #1187551 + * iommu/amd: Workaround for ERBT1312 + - LP: #1187551 + * drivers/rtc/rtc-at91rm9200.c: fix missing iounmap + - LP: #1187551 + * drm/mm: fix dump table BUG + - LP: #1187551 + * ASoC: wm8994: missing break in wm8994_aif3_hw_params() + - LP: #1187551 + * tile: support new Tilera hypervisor + - LP: #1187551 + * sd: fix array cache flushing bug causing performance problems + - LP: #1187551 + * ath9k: fix key allocation error handling for powersave keys + - LP: #1187551 + * target: Use FD_MAX_SECTORS/FD_BLOCKSIZE for blockdevs using fileio + - LP: #1187551 + * ext4: limit group search loop for non-extent files + - LP: #1187551 + * xen/vcpu/pvhvm: Fix vcpu hotplugging hanging. + - LP: #1187551 + * ALSA: HDA: Fix Oops caused by dereference NULL pointer + - LP: #1187551 + * iscsi-target: Fix processing of OOO commands + - LP: #1187551 + * audit: vfs: fix audit_inode call in O_CREAT case of do_last + - LP: #1187551 + * ACPICA: Fix possible buffer overflow during a field unit read operation + - LP: #1187551 + * qmi_wwan, cdc-ether: add ADU960S + - LP: #1187551 + * qmi_wwan/cdc_ether: add device IDs for Dell 5804 (Novatel E371) WWAN + card + - LP: #1187551 + * B43: Handle DMA RX descriptor underrun + - LP: #1187551 + * mwifiex: clear is_suspended flag when interrupt is received early + - LP: #1187551 + * mwifiex: fix memory leak issue when driver unload + - LP: #1187551 + * mwifiex: fix setting of multicast filter + - LP: #1187551 + * ARM: OMAP: RX-51: change probe order of touchscreen and panel SPI + devices + - LP: #1187551 + * hp_accel: Ignore the error from lis3lv02d_poweron() at resume + - LP: #1187551 + * KVM: VMX: fix halt emulation while emulating invalid guest sate + - LP: #1187551 + * nfsd: fix oops when legacy_recdir_name_error is passed a -ENOENT error + - LP: #1187551 + * shm: fix null pointer deref when userspace specifies invalid hugepage + size + - LP: #1187551 + * dm stripe: fix regression in stripe_width calculation + - LP: #1187551 + * dm snapshot: fix error return code in snapshot_ctr + - LP: #1187551 + * mm: teach mm by current context info to not do I/O during memory + allocation + - LP: #1187551 + * dm bufio: avoid a possible __vmalloc deadlock + - LP: #1187551 + * dm table: fix write same support + - LP: #1187551 + * tick: Cleanup NOHZ per cpu data on cpu down + - LP: #1187551 + * ACPI / EC: Restart transaction even when the IBF flag set + - LP: #1187551 + * drm/mgag200: Fix writes into MGA1064_PIX_CLK_CTL register + - LP: #1187551 + * drm/mgag200: Fix framebuffer base address programming + - LP: #1187551 + * drm/radeon: check incoming cliprects pointer + - LP: #1187551 + * arm64: debug: clear mdscr_el1 instead of taking the OS lock + - LP: #1187551 + * ARM: 7720/1: ARM v6/v7 cmpxchg64 shouldn't clear upper 32 bits of the + old/new value + - LP: #1187551 + * powerpc/kexec: Fix kexec when using VMX optimised memcpy + - LP: #1187551 + * powerpc: Bring all threads online prior to migration/hibernation + - LP: #1187551 + * arm64: mm: Fix operands of clz in __flush_dcache_all + - LP: #1187551 + * timer: Don't reinitialize the cpu base lock during CPU_UP_PREPARE + - LP: #1187551 + * target: close target_put_sess_cmd() vs. core_tmr_abort_task() race + - LP: #1187551 + * tracing: Fix leaks of filter preds + - LP: #1187551 + * usermodehelper: check subprocess_info->path != NULL + - LP: #1187551 + * drivers/char/ipmi: memcpy, need additional 2 bytes to avoid memory + overflow + - LP: #1187551 + * ipmi: ipmi_devintf: compat_ioctl method fails to take ipmi_mutex + - LP: #1187551 + * btrfs: don't stop searching after encountering the wrong item + - LP: #1187551 + * watchdog: Fix race condition in registration code + - LP: #1187551 + * pch_dma: Use GFP_ATOMIC because called from interrupt context + - LP: #1187551 + * ARM: EXYNOS5: Fix kernel dump in AFTR idle mode + - LP: #1187551 + * drivers/rtc/rtc-pcf2123.c: fix error return code in pcf2123_probe() + - LP: #1187551 + * tcp: force a dst refcount when prequeue packet + - LP: #1187551 + * sfc: Fix naming of MTD partitions for FPGA bitfiles + - LP: #1187551 + * net: tun: release the reference of tun device in tun_recvmsg + - LP: #1187551 + * net: mac802154: comparision issue of type cast, finding by + EXTRA_CFLAGS=-W + - LP: #1187551 + * tcp: reset timer after any SYNACK retransmit + - LP: #1187551 + * 3c509.c: call SET_NETDEV_DEV for all device types (ISA/ISAPnP/EISA) + - LP: #1187551 + * net_sched: act_ipt forward compat with xtables + - LP: #1187551 + * net: use netdev_features_t in skb_needs_linearize() + - LP: #1187551 + * net: vlan,ethtool: netdev_features_t is more than 32 bit + - LP: #1187551 + * bridge: fix race with topology change timer + - LP: #1187551 + * packet: tpacket_v3: do not trigger bug() on wrong header status + - LP: #1187551 + * virtio: don't expose u16 in userspace api + - LP: #1187551 + * 3c59x: fix freeing nonexistent resource on driver unload + - LP: #1187551 + * 3c59x: fix PCI resource management + - LP: #1187551 + * if_cablemodem.h: Add parenthesis around ioctl macros + - LP: #1187551 + * macvlan: fix passthru mode race between dev removal and rx path + - LP: #1187551 + * ipv6: do not clear pinet6 field + - LP: #1187551 + * ipv6,gre: do not leak info to user-space + - LP: #1187551 + * xfrm6: release dev before returning error + - LP: #1187551 + * drm/i915: add HAS_DDI check + - LP: #1187551 + * drm/i915: don't intel_crt_init on any ULT machines + - LP: #1187551 + * Linux 3.8.13.1 + - LP: #1187551 + * drbd: fix memory leak + - LP: #1191065 + * drbd: Fix build error when CONFIG_CRYPTO_HMAC is not set + - LP: #1191065 + * drbd: fix for deadlock when using automatic split-brain-recovery + - LP: #1191065 + * Input: egalax_ts - ABS_MT_POSITION_Y not reported well + - LP: #1191065 + * cifs: only set ops for inodes in I_NEW state + - LP: #1191065 + * staging: vt6656: use free_netdev instead of kfree + - LP: #1191065 + * hwmon: fix error return code in abituguru_probe() + - LP: #1191065 + * avr32: fix relocation check for signed 18-bit offset + - LP: #1191065 + * crypto: caam - fix inconsistent assoc dma mapping direction + - LP: #1191065 + * ARM: at91/dt: fix macb node declaration + - LP: #1191065 + * ARM: at91/trivial: fix model name for SAM9X25-EK + - LP: #1191065 + * USB: xHCI: override bogus bulk wMaxPacketSize values + - LP: #1191065 + * USB: UHCI: fix for suspend of virtual HP controller + - LP: #1191065 + * USB: fix latency in uhci-hcd and ohci-hcd + - LP: #1191065 + * USB: OHCI: fix logic for scheduling isochronous URBs + - LP: #1191065 + * cfg80211: fix wiphy_register error path + - LP: #1191065 + * mac80211: fix AP-mode frame matching + - LP: #1191065 + * staging: vt6656: [bug] Fix missing spin lock in iwctl_siwpower. + - LP: #1191065 + * usb, chipidea: fix link error when USB_EHCI_HCD is a module + - LP: #1191065 + * USB: reset resume quirk needed by a hub + - LP: #1191065 + * usb: option: Add Telewell TW-LTE 4G + - LP: #1191065 + * USB: Blacklisted Cinterion's PLxx WWAN Interface + - LP: #1191065 + * USB: option: add device IDs for Dell 5804 (Novatel E371) WWAN card + - LP: #1191065 + * i2c: designware: fix RX FIFO overrun + - LP: #1191065 + * i2c: designware: always clear interrupts before enabling them + - LP: #1191065 + * ath9k_hw: Use helper routines to simplify ar9003_hw_init_cal() + - LP: #1191065 + * ath9k_hw: Enable manual peak calibration for AR9485 + - LP: #1191065 + * USB: ftdi_sio: Add support for Newport CONEX motor drivers + - LP: #1191065 + * virtio_console: fix uapi header + - LP: #1191065 + * drm/nouveau/bios: fix thinko in ZM_MASK_ADD opcode + - LP: #1191065 + * drm/nvc0/ce: disable ce1 on a number of chipsets + - LP: #1191065 + * drm/radeon: Fix VRAM size calculation for VRAM >= 4GB + - LP: #1191065 + * USB: cxacru: potential underflow in cxacru_cm_get_array() + - LP: #1191065 + * TTY: Fix tty miss restart after we turn off flow-control + - LP: #1191065 + * drm/i915: add more VLV IDs + - LP: #1191065 + * drm/i915: Adding more reserved PCI IDs for Haswell. + - LP: #1191065 + * SUNRPC: Prevent an rpc_task wakeup race + - LP: #1191065 + * ARM: 7626/1: arm/crypto: Make asm SHA-1 and AES code Thumb-2 compatible + - LP: #1191065 + * ARM: 7723/1: crypto: sha1-armv4-large.S: fix SP handling + - LP: #1191065 + * perf: net_dropmonitor: Fix trace parameter order + - LP: #1191065 + * perf: net_dropmonitor: Fix symbol-relative addresses + - LP: #1191065 + * ACPI / video: Add "Asus UL30A" to ACPI video detect blacklist + - LP: #1191065 + * ARM: at91/dt: fix macb pinctrl_macb_rmii_mii_alt definition + - LP: #1191065 + * cifs: fix potential buffer overrun when composing a new options string + - LP: #1191065 + * fat: fix possible overflow for fat_clusters + - LP: #1191065 + * wait: fix false timeouts when using wait_event_timeout() + - LP: #1191065 + * mm: mmu_notifier: re-fix freed page still mapped in secondary MMU + - LP: #1191065 + * mm: memcg: remove incorrect VM_BUG_ON for swap cache pages in uncharge + - LP: #1191065 + * rapidio/tsi721: fix bug in MSI interrupt handling + - LP: #1191065 + * mm compaction: fix of improper cache flush in migration code + - LP: #1191065 + * mm/rmap: rename anon_vma_unlock() => anon_vma_unlock_write() + - LP: #1191065 + * mm/THP: use pmd_populate() to update the pmd with pgtable_t pointer + - LP: #1191065 + * drivers/leds/leds-ot200.c: fix error caused by shifted mask + - LP: #1191065 + * drivers/block/brd.c: fix brd_lookup_page() race + - LP: #1191065 + * nilfs2: fix issue of nilfs_set_page_dirty() for page at EOF boundary + - LP: #1191065 + * drivers/char/random.c: fix priming of last_data + - LP: #1191065 + * random: fix accounting race condition with lockless irq entropy_count + update + - LP: #1191065 + * ocfs2: goto out_unlock if ocfs2_get_clusters_nocache() failed in + ocfs2_fiemap() + - LP: #1191065 + * mm/pagewalk.c: walk_page_range should avoid VM_PFNMAP areas + - LP: #1191065 + * ata_piix: add PCI IDs for Intel BayTail + - LP: #1191065 + * libata: make ata_exec_internal_sg honor DMADIR + - LP: #1191065 + * cgroup: fix a subtle bug in descendant pre-order walk + - LP: #1191065 + * ASoC: wm5110: Correct DSP4R Mixer control name + - LP: #1191065 + * ASoC: cs42l52: fix default value for MASTERA_VOL. + - LP: #1191065 + * drm/radeon: fix typo in cu_per_sh on verde + - LP: #1191065 + * drm/radeon: fix card_posted check for newer asics + - LP: #1191065 + * NFSv4: Fix a thinko in nfs4_try_open_cached + - LP: #1191065 + * ib_srpt: Call target_sess_cmd_list_set_waiting during shutdown_session + - LP: #1191065 + * xfs: kill suid/sgid through the truncate path. + - LP: #1191065 + * x86: Allow FPU to be used at interrupt time even with eagerfpu + - LP: #1191065 + * m68k/mac: Fix unexpected interrupt with CONFIG_EARLY_PRINTK + - LP: #1191065 + * arm64: don't kill the kernel on a bad esr from el0 + - LP: #1191065 + * powerpc/32bit:Store temporary result in r0 instead of r8 + - LP: #1191065 + * powerpc/pseries: Always enable CONFIG_HOTPLUG_CPU on PSERIES SMP + - LP: #1191065 + * Linux 3.8.13.2 + - LP: #1191065 + + -- Steve Conklin Mon, 17 Jun 2013 14:48:54 -0500 + +linux (3.8.0-25.37) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1187857 + + [ Upstream Kernel Changes ] + + * iwlwifi: dvm: fix zero LQ CMD sending avoidance + - LP: #1186932 + + -- Steve Conklin Wed, 05 Jun 2013 11:21:20 -0500 + +linux (3.8.0-24.35) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1186236 + + [ Joseph Salisbury ] + + * SAUCE: uvcvideo: quirk PROBE_DEF for Alienware X51 OmniVision webcam + - LP: #1180409 + + [ Upstream Kernel Changes ] + + * drm/i915: Use MLC (l3$) for context objects + * xhci: Don't warn on empty ring for suspended devices. + - LP: #1177865 + * USB: serial: option: Added support Olivetti Olicard 145 + - LP: #1178361 + * USB: option: add a D-Link DWM-156 variant + - LP: #1178361 + * staging: zsmalloc: Fix link error on ARM + - LP: #1178361 + * ARM: omap3: cpuidle: enable time keeping + - LP: #1178361 + * ARM: u300: fix ages old copy/paste bug + - LP: #1178361 + * ARM: at91/at91sam9260.dtsi: fix u(s)art pinctrl encoding + - LP: #1178361 + * ARM: at91: remove partial parameter in bootargs for at91sam9x5ek.dtsi + - LP: #1178361 + * ARM: at91: Fix typo in restart code panic message + - LP: #1178361 + * ARM: at91/trivial: fix model name for SAM9G15-EK + - LP: #1178361 + * ARM: at91/trivial: typos in compatible property + - LP: #1178361 + * powerpc: Add isync to copy_and_flush + - LP: #1178361 + * powerpc: Fix hardware IRQs with MMU on exceptions when HV=0 + - LP: #1178361 + * powerpc/power8: Fix secondary CPUs hanging on boot for HV=0 + - LP: #1178361 + * powerpc/spufs: Initialise inode->i_ino in spufs_new_inode() + - LP: #1178361 + * iwlwifi: fix freeing uninitialized pointer + - LP: #1178361 + * iwlwifi: dvm: don't send zeroed LQ cmd + - LP: #1178361 + * mwifiex: Use pci_release_region() instead of a pci_release_regions() + - LP: #1178361 + * mwifiex: Call pci_release_region after calling pci_disable_device + - LP: #1178361 + * mac80211: fix station entry leak/warning while suspending + - LP: #1178361 + * usb/misc/appledisplay: Add 24" LED Cinema display + - LP: #1178361 + * USB: add ftdi_sio USB ID for GDM Boost V1.x + - LP: #1178361 + * USB: ftdi_sio: correct ST Micro Connect Lite PIDs + - LP: #1178361 + * USB: ftdi_sio: enable two UART ports on ST Microconnect Lite + - LP: #1178361 + * usbfs: Always allow ctrl requests with USB_RECIP_ENDPOINT on the ctrl + ep + - LP: #1178361 + * usb: chipidea: udc: fix memory access of shared memory on armv5 + machines + - LP: #1178361 + * usb: chipidea: udc: fix memory leak in _ep_nuke + - LP: #1178361 + * usb: remove redundant tdi_reset + - LP: #1178361 + * usb-storage: CY7C68300A chips do not support Cypress ATACB + - LP: #1178361 + * s390/memory hotplug: prevent offline of active memory increments + - LP: #1178361 + * xen/time: Fix kasprintf splat when allocating timer%d IRQ line. + - LP: #1178361 + * xen/smp: Fix leakage of timer interrupt line for every CPU + online/offline. + - LP: #1178361 + * xen/smp/spinlock: Fix leakage of the spinlock interrupt line for every + CPU online/offline + - LP: #1178361 + * serial_core.c: add put_device() after device_find_child() + - LP: #1178361 + * arm: set the page table freeing ceiling to TASK_SIZE + - LP: #1178361 + * gianfar: do not advertise any alarm capability. + - LP: #1178361 + * tty: fix up atime/mtime mess, take three + - LP: #1178361 + * fbcon: when font is freed, clear also vc_font.data + - LP: #1178361 + * tracing: Use stack of calling function for stack tracer + - LP: #1178361 + * tracing: Fix stack tracer with fentry use + - LP: #1178361 + * tracing: Remove most or all of stack tracer stack size from + stack_max_size + - LP: #1178361 + * tracing: Fix off-by-one on allocating stat->pages + - LP: #1178361 + * tracing: Check return value of tracing_init_dentry() + - LP: #1178361 + * tracing: Reset ftrace_graph_filter_enabled if count is zero + - LP: #1178361 + * i2c: xiic: must always write 16-bit words to TX_FIFO + - LP: #1178361 + * crypto: crc32-pclmul - Use gas macro for pclmulqdq + - LP: #1178361 + * sysfs: fix use after free in case of concurrent read/write and readdir + - LP: #1178361 + * Fix initialization of CMCI/CMCP interrupts + - LP: #1178361 + * PCI / ACPI: Don't query OSC support with all possible controls + - LP: #1178361 + * PCI/PM: Fix fallback to PCI_D0 in pci_platform_power_transition() + - LP: #1178361 + * rt2x00: Fix transmit power troubles on some Ralink RT30xx cards + - LP: #1178361 + * Wrong asm register contraints in the futex implementation + - LP: #1178361 + * Wrong asm register contraints in the kvm implementation + - LP: #1178361 + * fs/fscache/stats.c: fix memory leak + - LP: #1178361 + * mm: allow arch code to control the user page table ceiling + - LP: #1178361 + * TPM: Retry SaveState command in suspend path + - LP: #1178361 + * ALSA: emu10k1: Fix dock firmware loading + - LP: #1178361 + * ALSA: snd-usb: try harder to find USB_DT_CS_ENDPOINT + - LP: #1178361 + * ALSA: usb: Add quirk for 192KHz recording on E-Mu devices + - LP: #1178361 + * ALSA: usb-audio: disable autopm for MIDI devices + - LP: #1178361 + * ALSA: usb-audio: Fix autopm error during probing + - LP: #1178361 + * ALSA: USB: adjust for changed 3.8 USB API + - LP: #1178361 + * ALSA: hda - Add the support for ALC286 codec + - LP: #1178361 + * ASoC: max98088: Fix logging of hardware revision. + - LP: #1178361 + * hrtimer: Fix ktime_add_ns() overflow on 32bit architectures + - LP: #1178361 + * hrtimer: Add expiry time overflow check in hrtimer_interrupt + - LP: #1178361 + * swap: redirty page if page write fails on swap file + - LP: #1178361 + * mm: swap: mark swap pages writeback before queueing for direct IO + - LP: #1178361 + * drivers/rtc/rtc-cmos.c: don't disable hpet emulation on suspend + - LP: #1178361 + * libata: acpi: make ata_ap_acpi_handle not block + - LP: #1178361 + * ACPI: Fix wrong parameter passed to memblock_reserve + - LP: #1178361 + * ACPI / thermal: do not always return THERMAL_TREND_RAISING for active + trip points + - LP: #1178361 + * cgroup: fix an off-by-one bug which may trigger BUG_ON() + - LP: #1178361 + * cgroup: fix broken file xattrs + - LP: #1178361 + * localmodconfig: Process source kconfig files as they are found + - LP: #1178361 + * clockevents: Set dummy handler on CPU_DEAD shutdown + - LP: #1178361 + * sata_highbank: Rename proc_name to the module name + - LP: #1178361 + * inotify: invalid mask should return a error number but not set it + - LP: #1178361 + * fs/dcache.c: add cond_resched() to shrink_dcache_parent() + - LP: #1178361 + * exec: do not abuse ->cred_guard_mutex in threadgroup_lock() + - LP: #1178361 + * LOCKD: Ensure that nlmclnt_block resets block->b_status after a server + reboot + - LP: #1178361 + * md: bad block list should default to disabled. + - LP: #1178361 + * MD: ignore discard request for hard disks of hybid raid1/raid10 array + - LP: #1178361 + * NFSv4: Handle NFS4ERR_DELAY and NFS4ERR_GRACE in + nfs4_open_delegation_recall + - LP: #1178361 + * nfsd4: don't close read-write opens too soon + - LP: #1178361 + * nfsd: don't run get_file if nfs4_preprocess_stateid_op return error + - LP: #1178361 + * nfsd: Decode and send 64bit time values + - LP: #1178361 + * wireless: regulatory: fix channel disabling race condition + - LP: #1178361 + * ipc: sysv shared memory limited to 8TiB + - LP: #1178361 + * ixgbe: fix EICR write in ixgbe_msix_other + - LP: #1178361 + * ext4/jbd2: don't wait (forever) for stale tid caused by wraparound + - LP: #1178361 + * jbd2: fix race between jbd2_journal_remove_checkpoint and + ->j_commit_callback + - LP: #1178361 + * ext4: fix journal callback list traversal + - LP: #1178361 + * ext4: fix big-endian bug in metadata checksum calculations + - LP: #1178361 + * ext4: fix online resizing for ext3-compat file systems + - LP: #1178361 + * ext4: fix Kconfig documentation for CONFIG_EXT4_DEBUG + - LP: #1178361 + * mmc: at91/avr32/atmel-mci: fix DMA-channel leak on module unload + - LP: #1178361 + * Give the OID registry file module info to avoid kernel tainting + - LP: #1178361 + * KVM: X86 emulator: fix source operand decoding for 8bit mov[zs]x + instructions + - LP: #1178361 + * x86: Eliminate irq_mis_count counted in arch_irq_stat + - LP: #1178361 + * mmc: core: Fix bit width test failing on old eMMC cards + - LP: #1178361 + * mmc: atmel-mci: pio hang on block errors + - LP: #1178361 + * rcutrace: single_open() leaks + - LP: #1178361 + * mfd: adp5520: Restore mode bits on resume + - LP: #1178361 + * Linux 3.8.12 + - LP: #1178361 + * xen/arm: actually pass a non-NULL percpu pointer to request_percpu_irq + - LP: #1179514 + * powerpc: Emulate non privileged DSCR read and write + - LP: #1179514 + * powerpc: fix numa distance for form0 device tree + - LP: #1179514 + * pwm: spear: Fix checking return value of clk_enable() and clk_prepare() + - LP: #1179514 + * autofs - remove autofs dentry mount check + - LP: #1179514 + * hugetlbfs: fix mmap failure in unaligned size request + - LP: #1179514 + * iommu/amd: Properly initialize irq-table lock + - LP: #1179514 + * net/eth/ibmveth: Fixup retrieval of MAC address + - LP: #1179514 + * perf/x86/intel: Add support for IvyBridge model 58 Uncore + - LP: #1179514 + * perf/x86/intel: Fix unintended variable name reuse + - LP: #1179514 + * perf/x86/intel/lbr: Fix LBR filter + - LP: #1179514 + * perf/x86/intel/lbr: Demand proper privileges for + PERF_SAMPLE_BRANCH_KERNEL + - LP: #1179514 + * PCI/PM: Clear state_saved during suspend + - LP: #1179514 + * e1000e: fix runtime power management transitions + - LP: #1179514 + * e1000e: fix accessing to suspended device + - LP: #1179514 + * ipvs: ip_vs_sip_fill_param() BUG: bad check of return value + - LP: #1179514 + * netfilter: nf_nat: fix race when unloading protocol modules + - LP: #1179514 + * netfilter: ipset: list:set: fix reference counter update + - LP: #1179514 + * netfilter: nf_ct_sip: don't drop packets with offsets pointing outside + the packet + - LP: #1179514 + * netfilter: ipset: "Directory not empty" error message + - LP: #1179514 + * netfilter: nf_ct_helper: don't discard helper if it is actually the + same + - LP: #1179514 + * netfilter: ctnetlink: don't permit ct creation with random tuple + - LP: #1179514 + * netfilter: xt_rpfilter: skip locally generated broadcast/multicast, too + - LP: #1179514 + * netfilter: ip6t_NPT: Fix translation for non-multiple of 32 prefix + lengths + - LP: #1179514 + * ext4: add check for inodes_count overflow in new resize ioctl + - LP: #1179514 + * r8169: fix 8168evl frame padding. + - LP: #1179514 + * RDMA/cxgb4: Fix SQ allocation when on-chip SQ is disabled + - LP: #1179514 + * arm64: Ignore the 'write' ESR flag on cache maintenance faults + - LP: #1179514 + * block: fix max discard sectors limit + - LP: #1179514 + * drm/cirrus: deal with bo reserve fail in dirty update path + - LP: #1179514 + * drm/mgag200: deal with bo reserve fail in dirty update path + - LP: #1179514 + * drm/gma500: fix backlight hotkeys behaviour on netbooks + - LP: #1179514 + * drm/prime: keep a reference from the handle to exported dma-buf (v6) + - LP: #1179514 + * drm/ast: deal with bo reserve fail in dirty update path + - LP: #1179514 + * drm/i915: Fix detection of base of stolen memory + - LP: #1179514 + * drm/i915: Fix sdvo connector get_hw_state function + - LP: #1179514 + * drm/i915: Add no-lvds quirk for Fujitsu Esprimo Q900 + - LP: #1179514 + * drm/i915: Fix SDVO connector and encoder get_hw_state functions + - LP: #1179514 + * drm/i915: Workaround incoherence between fences and LLC across multiple + CPUs + - LP: #1179514 + * drm/i915: set CPT FDI RX polarity bits based on VBT + - LP: #1179514 + * drm/i915: ensure single initialization and cleanup of backlight device + - LP: #1179514 + * drm/i915: Fixup Oops in the pipe config computation + - LP: #1179514 + * drm/i915: Fall back to bit banging mode for DVO transmitter detection + - LP: #1179514 + * drm/radeon: don't use get_engine_clock() on APUs + - LP: #1179514 + * drm/radeon: use frac fb div on RS780/RS880 + - LP: #1179514 + * drm/radeon: fix typo in rv515_mc_resume() + - LP: #1179514 + * drm/radeon/dce6: add missing display reg for tiling setup + - LP: #1179514 + * drm/radeon: update wait_for_vblank for r5xx-r7xx + - LP: #1179514 + * drm/radeon: update wait_for_vblank for evergreen+ + - LP: #1179514 + * drm/radeon: properly lock disp in mc_stop/resume for evergreen+ + - LP: #1179514 + * drm/radeon: properly lock disp in mc_stop/resume for r5xx-r7xx + - LP: #1179514 + * drm/radeon: update wait_for_vblank for r1xx-r4xx + - LP: #1179514 + * drm/radeon: disable the crtcs in mc_stop (evergreen+) (v2) + - LP: #1179514 + * drm/radeon: add some new SI PCI ids + - LP: #1179514 + * drm/radeon/evergreen+: don't enable HPD interrupts on eDP/LVDS + - LP: #1179514 + * drm/radeon: cleanup properly if mmio mapping fails + - LP: #1179514 + * drm/radeon: fix hdmi mode enable on RS600/RS690/RS740 + - LP: #1179514 + * drm/radeon: fix typo in si_select_se_sh() + - LP: #1179514 + * drm/radeon: Always flush the VM + - LP: #1179514 + * drm/radeon: disable the crtcs in mc_stop (r5xx-r7xx) (v2) + - LP: #1179514 + * drm/radeon: fix endian bugs in atom_allocate_fb_scratch() + - LP: #1179514 + * drm/radeon: fix possible segfault when parsing pm tables + - LP: #1179514 + * drm/radeon: add new richland pci ids + - LP: #1179514 + * drm/radeon: fix handling of v6 power tables + - LP: #1179514 + * tracing: Fix ftrace_dump() + - LP: #1179514 + * Btrfs: compare relevant parts of delayed tree refs + - LP: #1179514 + * Btrfs: fix extent logging with O_DIRECT into prealloc + - LP: #1179514 + * EDAC: Don't give write permission to read-only files + - LP: #1179514 + * NFSv4.x: Fix handling of partially delegated locks + - LP: #1179514 + * kernel/audit_tree.c: tree will leak memory when failure occurs in + audit_trim_trees() + - LP: #1179514 + * x86/mm: account for PGDIR_SIZE alignment + - LP: #1179514 + * Linux 3.8.13 + - LP: #1179514 + * iwlwifi: add new pci id for 6x35 series + - LP: #1180256 + * be2net: fix re-loaded PF driver to re-gain control of its VFs + - LP: #1180217 + * be2net: update driver version to 4.6.x + - LP: #1180217 + * be2net: remove BUG_ON() in be_mcc_compl_is_new() + - LP: #1180217 + * benet: Wait f/w POST until timeout + - LP: #1180217 + * be2net: use CSR-BAR SEMAPHORE reg for BE2/BE3 + - LP: #1180217 + * be2net: Update copyright year + - LP: #1180217 + * be2net: enable interrupts in be_probe() (RoCE and other ULPs need them) + - LP: #1180217 + * be2net: Use new F/W mailbox cmd to manipulate interrupts. + - LP: #1180217 + * be2net: remove unused variable 'sge' + - LP: #1180217 + * be2net: take care of __vlan_put_tag return value + - LP: #1180217 + * be2net: Use TXQ_CREATE_V2 cmd + - LP: #1180217 + * be2net: Don't log "Out of MCCQ wrbs" error + - LP: #1180217 + * be2net: Avoid flashing BE3 UFI on BE3-R chip. + - LP: #1180217 + * be2net: Use GET_PROFILE_CONFIG V1 cmd for BE3-R + - LP: #1180217 + * be2net: enable IOMMU pass through for be2net + - LP: #1180217 + * be2net: Add support for setting and getting rx flow hash options + - LP: #1180217 + * be2net: Renamed rx_address_mismatch_errors to rx_address_filtered + - LP: #1180217 + * be2net: Avoid diagnostic test in certain versions of firmware to avoid + NIC freeze. + - LP: #1180217 + * be2net: Fixed memory leak + - LP: #1180217 + * be2net: Fix to show wol disabled/enabled state correctly. + - LP: #1180217 + * be2net: Use GET_FUNCTION_CONFIG V1 cmd + - LP: #1180217 + * be2net: FLR must be first cmd issued to Lancer FW + - LP: #1180217 + * be2net: Fix to use version 2 of cq_create for SkyHawk-R devices + - LP: #1180217 + * be2net: Fix to use 32-bit stats to report rx_drops_no_fragment + - LP: #1180217 + * be2net: Fix to show tx priority pause counter in ethtool -S + - LP: #1180217 + * be2net: Fix to receive Multicast Packets when Promiscuous mode is + enabled on certain devices + - LP: #1180217 + * be2net: Fix firmware download for Lancer + - LP: #1180217 + * be2net: avoid napi_disable() when it has not been enabled + - LP: #1180217 + * be2net: Fix to fail probe if MSI-X enable fails for a VF + - LP: #1180217 + + -- Steve Conklin Fri, 31 May 2013 07:58:43 -0500 + +linux (3.8.0-23.34) raring-proposed; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1185136 + + [ Upstream Kernel Changes ] + + * iscsi-target: fix heap buffer overflow on error + - CVE-2013-2850 + + -- Steve Conklin Tue, 28 May 2013 13:19:38 -0500 + +linux (3.8.0-22.33) raring-proposed; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1180483 + * merged back all changes which were in 20.31 + + -- Steve Conklin Wed, 15 May 2013 14:00:19 -0500 + +linux (3.8.0-21.32) raring-proposed; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1180058 + * Based on 3.8.0-19.30 release + - entire delta from 19.30 to 20.31 removed + - CVE release is based on updates+fix + + [ Upstream Kernel Changes ] + + * perf: Treat attr.config as u64 in perf_swevent_init() + - LP: #1179943 + - CVE-2013-2094 + + -- Steve Conklin Tue, 14 May 2013 14:19:21 -0500 + +linux (3.8.0-20.31) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1176953 + + [ AceLan Kao ] + + * SAUCE: (no-up) alx: disables MSI generation + - LP: #927782 + + [ David Henningsson ] + + * SAUCE: (no-up) Fix oops in patch_hdmi due to missing hda_gen_spec + struct + - LP: #1169984 + + [ Kamal Mostafa ] + + * SAUCE: (no-up) drm/i915: revert PCH_PWM_ENABLE quirk for XPS13-FHD + - LP: #1169376 + + [ Seth Forshee ] + + * SAUCE: (no-up) ACPI: Disable Windows 8 compatibility for some Lenovo + ThinkPads + - LP: #1098216 + + [ Tim Gardner ] + + * SAUCE: (no-up) alx: Don't check netif_running() before powering up + - LP: #1172415 + * enable tools build for armhf + - LP: #1171580 + * [packaging] Bump ABI for every new release + + [ Upstream Kernel Changes ] + + * Revert "MIPS: page.h: Provide more readable definition for PAGE_MASK." + - LP: #1173170 + * tg3: Add 57766 device support. + - LP: #1162665 + * powerpc: add a missing label in resume_kernel + - LP: #1173170 + * kvm/powerpc/e500mc: fix tlb invalidation on cpu migration + - LP: #1173170 + * ARM: Do 15e0d9e37c (ARM: pm: let platforms select cpu_suspend support) + properly + - LP: #1173170 + * kthread: Prevent unpark race which puts threads on the wrong cpu + - LP: #1173170 + * hrtimer: Don't reinitialize a cpu_base lock on CPU_UP + - LP: #1173170 + * can: mcp251x: add missing IRQF_ONESHOT to request_threaded_irq + - LP: #1173170 + * can: sja1000: fix handling on dt properties on little endian systems + - LP: #1173170 + * hugetlbfs: stop setting VM_DONTDUMP in initializing vma(VM_HUGETLB) + - LP: #1173170 + * hugetlbfs: add swap entry check in follow_hugetlb_page() + - LP: #1173170 + * fs/binfmt_elf.c: fix hugetlb memory check in vma_dump_size() + - LP: #1173170 + * kernel/signal.c: stop info leak via the tkill and the tgkill syscalls + - LP: #1173170 + * hfsplus: fix potential overflow in hfsplus_file_truncate() + - LP: #1173170 + * md: raid1,10: Handle REQ_WRITE_SAME flag in write bios + - LP: #1173170 + * KVM: Allow cross page reads and writes from cached translations. + - LP: #1173170 + * ARM: i.MX35: enable MAX clock + - LP: #1173170 + * ARM: clk-imx35: Bugfix iomux clock + - LP: #1173170 + * sched: Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s + - LP: #1173170 + * sched/debug: Fix sd->*_idx limit range avoiding overflow + - LP: #1173170 + * ARM: 7696/1: Fix kexec by setting outer_cache.inv_all for Feroceon + - LP: #1173170 + * ARM: 7698/1: perf: fix group validation when using enable_on_exec + - LP: #1173170 + * ath9k_htc: accept 1.x firmware newer than 1.3 + - LP: #1173170 + * ath9k_hw: change AR9580 initvals to fix a stability issue + - LP: #1173170 + * mac80211: fix cfg80211 interaction on auth/assoc request + - LP: #1173170 + * ssb: implement spurious tone avoidance + - LP: #1173170 + * crypto: algif - suppress sending source address information in recvmsg + - LP: #1173170 + * perf: Treat attr.config as u64 in perf_swevent_init() + - LP: #1173170 + * perf/x86: Fix offcore_rsp valid mask for SNB/IVB + - LP: #1173170 + * vm: add vm_iomap_memory() helper function + - LP: #1173170 + * vm: convert snd_pcm_lib_mmap_iomem() to vm_iomap_memory() helper + - LP: #1173170 + * vm: convert fb_mmap to vm_iomap_memory() helper + - LP: #1173170 + * vm: convert HPET mmap to vm_iomap_memory() helper + - LP: #1173170 + * vm: convert mtdchar mmap to vm_iomap_memory() helper + - LP: #1173170 + * Btrfs: make sure nbytes are right after log replay + - LP: #1173170 + * s390: move dummy io_remap_pfn_range() to asm/pgtable.h + - LP: #1173170 + * Linux 3.8.9 + - LP: #1173170 + * Linux 3.8.10 + - LP: #1175391 + * aio: fix possible invalid memory access when DEBUG is enabled + - LP: #1175391 + * TTY: fix atime/mtime regression + - LP: #1175391 + * sparc64: Fix race in TLB batch processing. + - LP: #1175391 + * atm: update msg_namelen in vcc_recvmsg() + - LP: #1175391 + * ax25: fix info leak via msg_name in ax25_recvmsg() + - LP: #1175391 + * Bluetooth: fix possible info leak in bt_sock_recvmsg() + - LP: #1175391 + * Bluetooth: RFCOMM - Fix missing msg_namelen update in + rfcomm_sock_recvmsg() + - LP: #1175391 + * Bluetooth: SCO - Fix missing msg_namelen update in sco_sock_recvmsg() + - LP: #1175391 + * caif: Fix missing msg_namelen update in caif_seqpkt_recvmsg() + - LP: #1175391 + * irda: Fix missing msg_namelen update in irda_recvmsg_dgram() + - LP: #1175391 + * iucv: Fix missing msg_namelen update in iucv_sock_recvmsg() + - LP: #1175391 + * l2tp: fix info leak in l2tp_ip6_recvmsg() + - LP: #1175391 + * llc: Fix missing msg_namelen update in llc_ui_recvmsg() + - LP: #1175391 + * netrom: fix info leak via msg_name in nr_recvmsg() + - LP: #1175391 + * NFC: llcp: fix info leaks via msg_name in llcp_sock_recvmsg() + - LP: #1175391 + * rose: fix info leak via msg_name in rose_recvmsg() + - LP: #1175391 + * tipc: fix info leaks via msg_name in recv_msg/recv_stream + - LP: #1175391 + * cbq: incorrect processing of high limits + - LP: #1175391 + * net IPv6 : Fix broken IPv6 routing table after loopback down-up + - LP: #1175391 + * net: count hw_addr syncs so that unsync works properly. + - LP: #1175391 + * atl1e: limit gso segment size to prevent generation of wrong ip length + fields + - LP: #1175391 + * bonding: fix bonding_masters race condition in bond unloading + - LP: #1175391 + * bonding: IFF_BONDING is not stripped on enslave failure + - LP: #1175391 + * bonding: fix l23 and l34 load balancing in forwarding path + - LP: #1175391 + * af_unix: If we don't care about credentials coallesce all messages + - LP: #1175391 + * netfilter: don't reset nf_trace in nf_reset() + - LP: #1175391 + * ipv6/tcp: Stop processing ICMPv6 redirect messages + - LP: #1175391 + * rtnetlink: Call nlmsg_parse() with correct header length + - LP: #1175391 + * tcp: incoming connections might use wrong route under synflood + - LP: #1175391 + * tcp: Reallocate headroom if it would overflow csum_start + - LP: #1175391 + * net: mvmdio: add select PHYLIB + - LP: #1175391 + * esp4: fix error return code in esp_output() + - LP: #1175391 + * net: mvneta: fix improper tx queue usage in mvneta_tx() + - LP: #1175391 + * net: cdc_mbim: remove bogus sizeof() + - LP: #1175391 + * tcp: call tcp_replace_ts_recent() from tcp_ack() + - LP: #1175391 + * net: rate-limit warn-bad-offload splats. + - LP: #1175391 + * net: drop dst before queueing fragments + - LP: #1175391 + * tracing: Fix selftest function recursion accounting + - LP: #1175391 + * ARM: 7699/1: sched_clock: Add more notrace to prevent recursion + - LP: #1175391 + * ARM: 7692/1: iop3xx: move IOP3XX_PERIPHERAL_VIRT_BASE + - LP: #1175391 + * Linux 3.8.11 + - LP: #1175391 + + -- Brad Figg Mon, 06 May 2013 08:27:39 -0700 + +linux (3.8.0-19.30) raring; urgency=low + + [ Upstream Kernel Changes ] + + * Add file_ns_capable() helper function for open-time capability checking + (CVE-2013-1959) + - LP: #1174590 + - CVE-2013-1959 + * userns: Don't let unprivileged users trick privileged users into + setting the id_map (CVE-2013-1959) + - LP: #1174590 + - CVE-2013-1959 + * userns: Check uid_map's opener's fsuid, not the current fsuid + (CVE-2013-1959) + - LP: #1174590 + - CVE-2013-1959 + * net: fix incorrect credentials passing (CVE-2013-1979) + - LP: #1174827 + - CVE-2013-1979 + * userns: Changing any namespace id mappings should require privileges + (CVE-2013-1979) + - LP: #1174827 + - CVE-2013-1979 + + -- Tim Gardner Thu, 18 Apr 2013 11:21:24 -0400 + +linux (3.8.0-19.29) raring; urgency=low + + [ Paolo Pisati ] + + * UBUNTU: [Config] disable PL330_DMA + - LP: #1168039 + + [ Rob Herring ] + + * UBUNTU: SAUCE: (no-up) ARM: highbank: fix cache flush ordering for cpu hotplug + - LP: #1169956 + + [ joseph.salisbury@canonical.com ] + + * SAUCE: (no-up) x86: reboot: Make Dell Optiplex 390 use reboot=pci + - LP: #800660 + + [ Kamal Mostafa ] + + * SAUCE: [media] uvcvideo: quirk PROBE_DEF for Dell Studio / OmniVision + webcam + - LP: #1168430 + + [ Upstream Kernel Changes ] + + * Revert "drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR" + - LP: #1168506 + * Revert "PCI/ACPI: Request _OSC control before scanning PCI root bus" + - LP: #1168506 + * Revert "tty/8250_pnp: serial port detection regression since v3.7" + - LP: #1168506 + * ALSA: hda - fixup D3 pin and right channel mute on Haswell HDMI audio + - LP: #1167270 + * ASoC: imx-ssi: Fix occasional AC97 reset failure + - LP: #1168506 + * ASoC: dma-sh7760: Fix compile error + - LP: #1168506 + * ASoC: spear_pcm: Update to new pcm_new() API + - LP: #1168506 + * regmap: Initialize `map->debugfs' before regcache + - LP: #1168506 + * regmap: cache Fix regcache-rbtree sync + - LP: #1168506 + * MIPS: Fix logic errors in bitops.c + - LP: #1168506 + * HID: magicmouse: fix race between input_register() and probe() + - LP: #1168506 + * spi/s3c64xx: modified error interrupt handling and init + - LP: #1168506 + * spi/mpc512x-psc: optionally keep PSC SS asserted across xfer segmensts + - LP: #1168506 + * gpio: stmpe: pass DT node to irqdomain + - LP: #1168506 + * UBIFS: make space fixup work in the remount case + - LP: #1168506 + * reiserfs: Fix warning and inode leak when deleting inode with xattrs + - LP: #1168506 + * ALSA: hda - bug fix on return value when getting HDMI ELD info + - LP: #1168506 + * ALSA: hda - Enabling Realtek ALC 671 codec + - LP: #1168506 + * ALSA: hda - fix typo in proc output + - LP: #1168506 + * drm/nouveau: fix handling empty channel list in ioctl's + - LP: #1168506 + * drm/i915: Be sure to turn hsync/vsync back on at crt enable (v2) + - LP: #1168506 + * drm: correctly restore mappings if drm_open fails + - LP: #1168506 + * mm: prevent mmap_cache race in find_vma() + - LP: #1168506 + * EISA/PCI: Init EISA early, before PNP + - LP: #1168506 + * EISA/PCI: Fix bus res reference + - LP: #1168506 + * ixgbe: fix registration order of driver and DCA nofitication + - LP: #1168506 + * libata: Use integer return value for atapi_command_packet_set + - LP: #1168506 + * libata: Set max sector to 65535 for Slimtype DVD A DS8A8SH drive + - LP: #1168506 + * MIPS: Unbreak function tracer for 64-bit kernel. + - LP: #1168506 + * alpha: Add irongate_io to PCI bus resources + - LP: #1168506 + * PCI/ACPI: Always resume devices on ACPI wakeup notifications + - LP: #1168506 + * PCI/PM: Disable runtime PM of PCIe ports + - LP: #1168506 + * ata_piix: Fix DVD not dectected at some Haswell platforms + - LP: #1168506 + * ftrace: Consistently restore trace function on sysctl enabling + - LP: #1168506 + * powerpc: pSeries_lpar_hpte_remove fails from Adjunct partition being + performed before the ANDCOND test + - LP: #1168506 + * mwifiex: limit channel number not to overflow memory + - LP: #1168506 + * mac80211: fix remain-on-channel cancel crash + - LP: #1168506 + * x86: remove the x32 syscall bitmask from syscall_get_nr() + - LP: #1168506 + * hwspinlock: fix __hwspin_lock_request error path + - LP: #1168506 + * remoteproc/ste: fix memory leak on shutdown + - LP: #1168506 + * remoteproc: fix error path of handle_vdev + - LP: #1168506 + * remoteproc: fix FW_CONFIG typo + - LP: #1168506 + * spinlocks and preemption points need to be at least compiler barriers + - LP: #1168506 + * crypto: ux500 - add missing comma + - LP: #1168506 + * crypto: gcm - fix assumption that assoc has one segment + - LP: #1168506 + * drm/mgag200: Index 24 in extended CRTC registers is 24 in hex, not + decimal. + - LP: #1168506 + * block: avoid using uninitialized value in from queue_var_store + - LP: #1168506 + * SUNRPC: Remove extra xprt_put() + - LP: #1168506 + * NFSv4: Fix a memory leak in nfs4_discover_server_trunking + - LP: #1168506 + * NFSv4/4.1: Fix bugs in nfs4[01]_walk_client_list + - LP: #1168506 + * drm/i915: Fix build failure + - LP: #1168506 + * x86: Fix rebuild with EFI_STUB enabled + - LP: #1168506 + * thermal: return an error on failure to register thermal class + - LP: #1168506 + * msi-wmi: Fix memory leak + - LP: #1168506 + * cpufreq: exynos: Get booting freq value in exynos_cpufreq_init + - LP: #1168506 + * ARM: EXYNOS: Fix crash on soft reset on EXYNOS5440 + - LP: #1168506 + * drm/i915: add quirk to invert brightness on eMachines G725 + - LP: #1168506 + * drm/i915: add quirk to invert brightness on eMachines e725 + - LP: #1168506 + * drm/i915: add quirk to invert brightness on Packard Bell NCL20 + - LP: #1168506 + * r8169: fix auto speed down issue + - LP: #1168506 + * vfio-pci: Fix possible integer overflow + - LP: #1168506 + * NFSv4: Doh! Typo in the fix to nfs41_walk_client_list + - LP: #1168506 + * can: gw: use kmem_cache_free() instead of kfree() + - LP: #1168506 + * mwifiex: complete last internal scan + - LP: #1168506 + * Linux 3.8.7 + - LP: #1168506 + * ALSA: usb-audio: fix endianness bug in snd_nativeinstruments_* + - LP: #1169930 + * ASoC: core: Fix to check return value of snd_soc_update_bits_locked() + - LP: #1169930 + * ASoC: wm5102: Correct lookup of arizona struct in SYSCLK event + - LP: #1169930 + * ASoC: wm8903: Fix the bypass to HP/LINEOUT when no DAC or ADC is + running + - LP: #1169930 + * tracing: Fix double free when function profile init failed + - LP: #1169930 + * ARM: Kirkwood: Fix typo in the definition of ix2-200 rebuild LED + - LP: #1169930 + * ARM: imx35 Bugfix admux clock + - LP: #1169930 + * dmaengine: omap-dma: Start DMA without delay for cyclic channels + - LP: #1169930 + * PM / reboot: call syscore_shutdown() after disable_nonboot_cpus() + - LP: #1169930 + * ipc: set msg back to -EAGAIN if copy wasn't performed + - LP: #1169930 + * GFS2: Fix unlock of fcntl locks during withdrawn state + - LP: #1169930 + * GFS2: return error if malloc failed in gfs2_rs_alloc() + - LP: #1169930 + * SCSI: libsas: fix handling vacant phy in sas_set_ex_phy() + - LP: #1169930 + * cifs: Allow passwords which begin with a delimitor + - LP: #1169930 + * target: Fix incorrect fallthrough of ALUA Standby/Offline/Transition + CDBs + - LP: #1169930 + * vfs: Revert spurious fix to spinning prevention in prune_icache_sb + - LP: #1169930 + * kobject: fix kset_find_obj() race with concurrent last kobject_put() + - LP: #1169930 + * gpio: fix wrong checking condition for gpio range + - LP: #1169930 + * x86-32: Fix possible incomplete TLB invalidate with PAE pagetables + - LP: #1169930 + * tracing: Fix possible NULL pointer dereferences + - LP: #1169930 + * udl: handle EDID failure properly. + - LP: #1169930 + * ftrace: Move ftrace_filter_lseek out of CONFIG_DYNAMIC_FTRACE section + - LP: #1169930 + * sched_clock: Prevent 64bit inatomicity on 32bit systems + - LP: #1169930 + * x86, mm, paravirt: Fix vmalloc_fault oops during lazy MMU updates + - LP: #1169930 + * x86, mm: Patch out arch_flush_lazy_mmu_mode() when running on bare + metal + - LP: #1169930 + * tty: don't deadlock while flushing workqueue + - LP: #1169930 + * Linux 3.8.8 + - LP: #1169930 + + [ Tim Gardner ] + + * Release Tracking Bug + - LP: #1168504 + + -- Tim Gardner Fri, 12 Apr 2013 14:37:27 -0400 + +linux (3.8.0-18.28) raring; urgency=low + + [ Andy Whitcroft ] + + * (debian) fix internal linkage for separated header packages + - LP: #1165259 + + [ Gavin Guo ] + + * SAUCE: Bluetooth: Add support for Broadcom 413c:8143 + - LP: #1166113 + + [ John Johansen ] + + * SAUCE: (no-up) apparmor: Fix quieting of audit messages for network + mediation + - LP: #1163259 + + [ Kamal Mostafa ] + + * SAUCE: (no-up) drm/i915: quirk no PCH_PWM_ENABLE for Dell XPS13 + backlight + - LP: #1162026, #1163720 + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_PARPORT_PC_FIFO + - LP: #339752 + + [ Martin Pitt ] + + * SAUCE: (no-up) mac80211_hwsim: Register and bind to driver + - LP: #1166250 + + [ Paolo Pisati ] + + * [Config] RTC_DRV_PL031=y + + [ Stefan Bader ] + + * (debian) Abort build on unresolved symbols + - LP: #1166197 + + [ Tim Gardner ] + + * [Config] Add libceph to inclusion list + * [Config] Drop all inclusion list modules with unsatisfied dependencies + * SAUCE: (no-up) Remove emi62 files duplicated in linux-firmware + * SAUCE: (no-up) Remove emi26 files duplicated in linux-firmware + * SAUCE: (no-up) Remove whiteheat files duplicated in linux-firmware + * Release Tracking Bug + - LP: #1168040 + + [ Upstream Kernel Changes ] + + * TTY: do not update atime/mtime on read/write + - LP: #1097680 + - CVE-2013-0160 + * KVM: x86: Convert MSR_KVM_SYSTEM_TIME to use gfn_to_hva_cache functions + (CVE-2013-1797) + - LP: #1158258 + - CVE-2013-1797 + * KVM: Fix bounds checking in ioapic indirect register reads + (CVE-2013-1798) + - LP: #1158262 + - CVE-2013-1798 + * drm/i915: HDMI/DP - ELD info refresh support for Haswell + - LP: #1011438 + * ALSA - HDA: New PCI ID for Haswell ULT + - LP: #1011438 + * ALSA: hda - Support rereading widgets under the function group + - LP: #1011438 + * ALSA: hda - Add fixup for Haswell to enable all pin and convertor + widgets + - LP: #1011438 + * libata: fix DMA to stack in reading devslp_timing parameters + - LP: #1031173 + * dmaengine: dw_dmac: remove CLK dependency + - LP: #1031163 + * dmaengine: dw_dmac: Enhance device tree support + - LP: #1031163 + * dmaengine: dw_dmac: amend description and indentation + - LP: #1031163 + * dw_dmac: change dev_printk() to corresponding macros + - LP: #1031163 + * dw_dmac: don't call platform_get_drvdata twice + - LP: #1031163 + * dw_dmac: change dev_crit to dev_WARN in dwc_handle_error + - LP: #1031163 + * dw_dmac: introduce to_dw_desc() macro + - LP: #1031163 + * dw_dmac: absence of pdata isn't critical when autocfg is set + - LP: #1031163 + * dw_dmac: check for mapping errors + - LP: #1031163 + * dw_dmac: remove redundant check + - LP: #1031163 + * dw_dmac: update tx_node_active in dwc_do_single_block + - LP: #1031163 + * dma: dw_dmac: add dwc_chan_pause and dwc_chan_resume + - LP: #1031163 + * dmaengine: introduce is_slave_direction function + - LP: #1031163 + * dmaengine: add possibility for cyclic transfers + - LP: #1031163 + * dma: dw_dmac: check direction properly in dw_dma_cyclic_prep + - LP: #1031163 + * dma: ep93xx_dma: reuse is_slave_direction helper + - LP: #1031163 + * dma: ipu_idmac: reuse is_slave_direction helper + - LP: #1031163 + * dma: ste_dma40: reuse is_slave_direction helper + - LP: #1031163 + * dw_dmac: call .probe after we have a device in place + - LP: #1031163 + * dw_dmac: store direction in the custom channel structure + - LP: #1031163 + * dw_dmac: make usage of dw_dma_slave optional + - LP: #1031163 + * dw_dmac: backlink to dw_dma in dw_dma_chan is superfluous + - LP: #1031163 + * dw_dmac: allocate dma descriptors from DMA_COHERENT memory + - LP: #1031163 + * dw_dmac: don't exceed AHB master number in dwc_get_data_width + - LP: #1031163 + * dw_dmac: move soft LLP code from tasklet to dwc_scan_descriptors + - LP: #1031163 + * dw_dmac: print out DW_PARAMS and DWC_PARAMS when debug + - LP: #1031163 + * dw_dmac: remove unnecessary tx_list field in dw_dma_chan + - LP: #1031163 + * dw_dmac: introduce total_len field in struct dw_desc + - LP: #1031163 + * dw_dmac: fill individual length of descriptor + - LP: #1031163 + * dw_dmac: return proper residue value + - LP: #1031163 + * dw_dmac: apply default dma_mask if needed + - LP: #1031163 + * dw_dmac: add support for Lynxpoint DMA controllers + - LP: #1031163 + * dw_dmac: adjust slave_id accordingly to request line base + - LP: #1031163 + + -- Tim Gardner Tue, 09 Apr 2013 10:08:09 -0400 + +linux (3.8.0-17.27) raring; urgency=low + + [ Adam Lee ] + + * SAUCE: (no-up) Bluetooth: Add support for 04ca:2007 + - LP: #1153448 + * SAUCE: (no-up) Bluetooth: Add support for 105b:e065 + - LP: #1161261 + + [ Len Brown ] + + * SAUCE: (no-up) tools/power turbostat: additional Haswell CPU-id + - LP: #1083993 + + [ Tim Gardner ] + + * Revert "SAUCE: (no-up) seccomp: forcing auditing of kill condition" + Replaced by upstream patch. + * Release Tracking Bug + - LP: #1165746 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.6 + * Revert "brcmsmac: support 4313iPA" + - LP: #1157190 + * tools/power turbostat: support Haswell + - LP: #1083993 + * net: calxedaxgmac: fix rx ring handling when OOM + * cpufreq: check OF node /cpus presence before dereferencing it + * Input: cypress_ps2 - fix trackpadi found in Dell XPS12 + - LP: #1103594 + * ARM: OMAP2+: Limit omap initcalls to omap only on multiplatform kernels + * ARM: OMAP2+: Use omap initcalls + * ARM: OMAP: Fix i2c cmdline initcall for multiplatform + * ARM: OMAP: Fix dmaengine init for multiplatform + * ARM: OMAP2+: Add multiplatform debug_ll support + * ARM: OMAP2+: Disable code that currently does not work with + multiplaform + * ARM: OMAP2+: Enable ARCH_MULTIPLATFORM support + * ARM: OMAP2+: Add minimal support for booting vexpress + * ARM: OMAP2+: Remove now obsolete uncompress.h and debug-macro.S + * davinci: do not include mach/hardware.h + * clk: export __clk_get_name for re-use in imx-ipu-v3 and others + * [SCSI] storvsc: avoid usage of WRITE_SAME + - LP: #1157952 + * ACPICA: Fix possible memory leak in dispatcher error path. + * KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME (CVE-2013-1796) + - LP: #1158254 + - CVE-2013-1796 + + [ Wen-chien Jesse Sung ] + + * SAUCE: (no-up) Bluetooth: Add a load_firmware callback to struct hci_dev + - LP: #1065400 + * SAUCE: (no-up) Bluetooth: Implement broadcom patchram firmware loader + - LP: #1065400 + * SAUCE: (no-up) Bluetooth: Add support for 13d3:3388 and 13d3:3389 + - LP: #1065400 + + -- Tim Gardner Tue, 02 Apr 2013 08:02:43 -0600 + +linux (3.8.0-16.26) raring; urgency=low + + [ Len Brown ] + + * SAUCE: intel_idle: additional Haswell CPU-id + - LP: #1083993 + + [ Nishanth Menon ] + + * SAUCE: cpufreq: OMAP: instantiate omap-cpufreq as a platform_driver + + [ Tim Gardner ] + + * Rebase to 3.8.5 + * Release Tracking Bug + - LP: #1162956 + + [ Upstream Kernel Changes ] + + * iwlwifi: add 7000 series device configuration + - LP: #1011422 + * mac80211: prevent spurious HT/VHT downgrade message + + -- Tim Gardner Thu, 28 Mar 2013 11:24:36 -0400 + +linux (3.8.0-15.25) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotations -- track move to -generic for armhf + * [Config] annotations -- resync with updated armhf -generic flavour + * [Config] annotations -- clean up redundant annotations + * Revert "SAUCE: add option to hand off all kernel parameters to init" + * SAUCE: add option to hand off all kernel parameters to init + Clean up compile warnings. + - LP: #586386 + * Revert "SAUCE: isapnp_init: make isa PNP scans occur async" + * SAUCE: isapnp_init: make isa PNP scans occur async + Clean up compile warnings. + + [ Paolo Pisati ] + + * [Config] HIHGBANK=y + * [Config] SATA_HIGHBANK=y + * [Config] NET_CALXEDA_XGMAC=y + * [Config] EDAC_HIGHBANK_[MC|L2]=y + * SAUCE: cpufreq: check OF /cpus presence before dereferencing it + * [Config] CONFIG_CPU_IDLE_CALXEDA=y, CONFIG_SWP_EMULATE=y + * [Config] ARM_HIGHBANK_CPUFREQ=y + * [Config] CPU_IDLE_MULTIPLE_DRIVERS=y, CPU_FREQ_DEFAULT_GOV_ONDEMAND=y + + [ Rob Herring ] + + * SAUCE: ARM: cache-l2x0: fix masking of RTL revision numbering and + set_debug init + * SAUCE: ahci: remove calxeda ahci controller + * SAUCE: cpuidle: calxeda: disable power gating by default + * SAUCE: net: calxedaxgmac: fix rx ring handling when OOM + + [ Stefan Bader ] + + * SAUCE: dm-raid45: Fix incompatible ptr assignments + Clean up compile warnings. + + [ Tim Gardner ] + + * [Config] Removed modules from ABI + * [Config] CONFIG_SATA_HIGHBANK=n for x86 + * [Config] Remove highbank as a flavour + * [Config] CONFIG_MAILBOX=y + * SAUCE: acpi/video.c: Fix compile warnings + * SAUCE: apparmor: Fix compile warnings + * SAUCE: vesafb: Cleanup compile warnings + * Release Tracking Bug + - LP: #1161054 + + [ Upstream Kernel Changes ] + + * i2c: iSMT: add Intel Avoton DeviceIDs + - LP: #1083965 + * ARM: use device tree to get smp_twd clock + * clk / highbank: Prevent glitches in non-bypass reset mode + * ARM / highbank: add support for pl320 IPC + * cpufreq / highbank: add support for highbank cpufreq + * PM / OPP: switch exported symbols to GPL variant + * PM / OPP: Export more symbols for module usage + * mailbox, pl320-ipc: remove __init from probe function + + [ Xiangliang Yu ] + + * SAUCE: PCI: define macro for marvell vendor ID + - LP: #1159863 + * SAUCE: PCI: fix system hang issue of Marvell SATA host controller + - LP: #1159863 + + -- Tim Gardner Mon, 25 Mar 2013 11:55:34 -0600 + +linux (3.8.0-14.24) raring; urgency=low + + [ Paolo Pisati ] + + * [Config] rename omap flavour to generic + * [Config] USB_MUSB_HDRC=m + + [ Roger Quadros ] + + * SAUCE: mfd: omap-usb-host: Fix clk warnings at boot + + [ Seth Forshee ] + + * SAUCE: Revert "brcmsmac: support 4313iPA" + - LP: #1157190 + + [ Tim Gardner ] + + * [Config] CONFIG_SERIAL_8250_DW=m across all arches + - LP: #1031162 + * [debian] Build extras package only for specific arches + * [config] Set do_extras_package=true for x86en + * Rebase to 3.8.4 + * Release Tracking Bug + - LP: #1158863 + + [ Upstream Kernel Changes ] + + * Input: ALPS - document the alps.h data structures + - LP: #1089413 + * Input: ALPS - copy "model" info into alps_data struct + - LP: #1089413 + * Input: ALPS - move alps_get_model() down below hw_init code + - LP: #1089413 + * Input: ALPS - introduce helper function for repeated commands + - LP: #1089413 + * Input: ALPS - rework detection sequence + - LP: #1089413 + * Input: ALPS - use function pointers for different protocol handlers + - LP: #1089413 + * Input: ALPS - move {addr,nibble}_command settings into + alps_set_defaults() + - LP: #1089413 + * Input: ALPS - rework detection of Pinnacle AGx touchpads + - LP: #1089413 + * Input: ALPS - fix command mode check + - LP: #1089413 + * Input: ALPS - move pixel and bitmap info into alps_data struct + - LP: #1089413 + * Input: ALPS - make the V3 packet field decoder "pluggable" + - LP: #1089413 + * Input: ALPS - add support for "Rushmore" touchpads + - LP: #1089413 + * Input: ALPS - enable trackstick on Rushmore touchpads + - LP: #1089413 + * Input: ALPS - remove unused argument to alps_enter_command_mode() + - LP: #1089413 + * Input: ALPS - add "Dolphin V1" touchpad support + - LP: #1089413 + * serial: 8250_dw: Use ifdef with ACPI + - LP: #1031162 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.4 + + -- Tim Gardner Tue, 19 Mar 2013 07:37:36 -0600 + +linux (3.8.0-13.23) raring; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "drm/i915: enable irqs earlier when resuming" + - LP: #1156310 + * Revert "drm/i915: reorder setup sequence to have irqs for output setup" + - LP: #1156310 + * x86/apic: Remove noisy zero-mask warning from + default_send_IPI_mask_logical() + - LP: #1100202 + * drm/i915: Fix races in gen4 page flip interrupt handling + - LP: #1116587 + * drm/i915: Revert hdmi HDP pin checks + - LP: #1135668 + * signal: always clear sa_restorer on execve + - LP: #1153813 + - CVE-2013-0914 + + -- Tim Gardner Mon, 18 Mar 2013 10:04:33 -0600 + +linux (3.8.0-13.22) raring; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: fireware: add NO_MSI quirks for o2micro controller" + + [ Kamal Mostafa ] + + * SAUCE: alx: use github.com/qca/alx repo + - LP: #1154238 + * [packaging] do not use ../.$(series)-env file + * SAUCE: Convert bnx2x firmware files to ihex format + + [ Qualcomm Atheros, Inc ] + + * SAUCE: alx: Update to heads/master + - LP: #1154238 + + [ Seth Forshee ] + + * SAUCE: efivars: Allow disabling use as a pstore backend + * [Config] Re-enable CONFIG_PSTORE for x86 + + [ Tim Gardner ] + + * Drop efivarfs reverts in favor of 3.8.3 stable updates + Revert "efivarfs: Validate filenames much more aggressively" + Revert "efivarfs: guid part of filenames are case-insensitive" + * [Config] CONFIG_I2C_ISMT=m + - LP: #1011449 + * [Config] CONFIG_SERIAL_8250_DMA=y,CONFIG_SERIAL_8250_DW=m for x86en + - LP: #1031162 + * Release Tracking Bug + - LP: #1155680 + + [ Upstream Kernel Changes ] + + * net/sctp: Validate parameter size for SCTP_GET_ASSOC_STATS + - LP: #1152791 + - CVE-2013-1828 + * mfd: rtsx: Implement driving adjustment to device-dependent callbacks + - LP: #1153618 + * mfd: rtsx: Support RTS5227 + - LP: #1153618 + * mmc: rtsx: remove driving adjustment + - LP: #1153618 + * i2c: Adding support for Intel iSMT SMBus 2.0 host controller + - LP: #1011449 + * i2c: fix i2c-ismt.c printk format warning + - LP: #1011449 + * serial: quatech: add the other serial identifiers and preliminary + control code + - LP: #1031162 + * serial: Remove RM9000 series serial driver. + - LP: #1031162 + * serial: 8250_pci: remove __devexit usage + - LP: #1031162 + * serial: 8250: Allow drivers to deliver capabilities + - LP: #1031162 + * serial: 8250_dw: Don't use UPF_FIXED_TYPE + - LP: #1031162 + * serial: 8250_dw: Map IO memory + - LP: #1031162 + * serial: 8250_dw: Move device tree code to separate function + - LP: #1031162 + * serial: 8250_dw: Set FIFO size dynamically + - LP: #1031162 + * serial: 8250_dw: Add ACPI 5.0 support + - LP: #1031162 + * serial: 8250: Add support for dmaengine + - LP: #1031162 + * serial: 8250_dw: Enable DMA support with ACPI + - LP: #1031162 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.3 + + -- Tim Gardner Mon, 11 Mar 2013 06:53:51 -0600 + +linux (3.8.0-12.21) raring; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_PSTORE=n for x86 + * Release Tracking Bug + - LP: #1152228 + + [ Upstream Kernel Changes ] + + * Revert "efivarfs: guid part of filenames are case-insensitive" + - LP: #1146988 + * Revert "efivarfs: Validate filenames much more aggressively" + - LP: #1146988 + * mfd: rtsx: Optimize card detect flow + - LP: #1148892 + * mfd: rtsx: Fix issue that booting OS with SD card inserted + - LP: #1148892 + + -- Tim Gardner Wed, 06 Mar 2013 06:40:22 -0700 + +linux (3.8.0-11.20) raring; urgency=low + + [ Tim Gardner ] + + * Release Tracking Bug + - LP: #1147659 + * [Config] CONFIG_SPI_PXA2XX_PCI=m + - LP: #1031169 + * CONFIG_SATA_ZPODD=y + - LP: #1031180 + * CONFIG_GPIO_LYNXPOINT=y + - LP: #1031174 + + [ Upstream Kernel Changes ] + + * spi/pxa2xx-pci: switch to use pcim_* interfaces + - LP: #1031169 + * spi/pxa2xx: embed the ssp_device to platform data + - LP: #1031169 + * spi/pxa2xx: allow building on a 64-bit kernel + - LP: #1031169 + * spi/pxa2xx: fix warnings when compiling a 64-bit kernel + - LP: #1031169 + * spi/pxa2xx: convert to the pump message infrastructure + - LP: #1031169 + * spi/pxa2xx: convert to the common clk framework + - LP: #1031169 + * spi/pxa2xx: break out the private DMA API usage into a separate file + - LP: #1031169 + * spi/pxa2xx: add support for DMA engine + - LP: #1031169 + * spi/pxa2xx: add support for runtime PM + - LP: #1031169 + * spi/pxa2xx: add support for SPI_LOOP + - LP: #1031169 + * spi/pxa2xx: add support for Intel Low Power Subsystem SPI + - LP: #1031169 + * spi/pxa2xx: add support for Lynxpoint SPI controllers + - LP: #1031169 + * i2c-designware: always set the STOP bit after last byte + - LP: #1031166 + * i2c-designware: add minimal support for runtime PM + - LP: #1031166 + * i2c-designware: add support for Intel Lynxpoint + - LP: #1031166 + * remove can_power_off flag from scsi_device + - LP: #1031180 + * sr: support runtime pm + - LP: #1031180 + * libata: identify and init ZPODD devices + - LP: #1031180 + * libata: move acpi notification code to zpodd + - LP: #1031180 + * libata: check zero power ready status for ZPODD + - LP: #1031180 + * libata: handle power transition of ODD + - LP: #1031180 + * libata: expose pm qos flags for ata device + - LP: #1031180 + * libata: do not suspend port if normal ODD is attached + - LP: #1031180 + * pm: differentiate system and runtime pm for ata port + - LP: #1031180 + * PM code cleanup for ata port + - LP: #1031180 + * scsi: no poll when ODD is powered off + - LP: #1031180 + * Set proper SK when CK_COND is set. + - LP: #1031180 + * fix smatch warning for zpodd_wake_dev + - LP: #1031180 + * gpio/lynxpoint: add chipset gpio driver. + - LP: #1031174 + + -- Tim Gardner Tue, 05 Mar 2013 05:42:44 -0700 + +linux (3.8.0-10.19) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotate CONFIG_PATA_ACPI + + [ Tim Gardner ] + + * rebase to v3.8.2 + + [ Upstream Kernel Changes ] + + * NFC: Fixed nfc core and hci unregistration and cleanup + - LP: #1083994 + * NFC: Added error handling in event_received hci ops + - LP: #1083994 + * NFC: Changed event_received hci ops result semantic + - LP: #1083994 + * NFC: Fixed skb leak in tm_send() nfc and hci ops implementations + - LP: #1083994 + * NFC: Add HCI quirks to support driver (non)standard implementations + - LP: #1083994 + * USB: Don't use EHCI port sempahore for USB 3.0 hubs. + - LP: #1011415 + * USB: Prepare for refactoring by adding extra udev checks. + - LP: #1011415 + * USB: Rip out recursive call on warm port reset. + - LP: #1011415 + * USB: Fix connected device switch to Inactive state. + - LP: #1011415 + * USB: Use helper function hub_set_port_link_state + - LP: #1011415 + * USB: Refactor hub_port_wait_reset. + - LP: #1011415 + * usb/core: consider link speed while looking at bMaxPower + - LP: #1011415 + * usb/core: update power budget for SuperSpeed + - LP: #1011415 + * usb: Add driver/usb/core/(port.c,hub.h) files + - LP: #1011415 + * usb: fix compilation error and warning of driver/usb/core/port.c on arm + and blackfin + - LP: #1011415 + * usb: Add "portX/connect_type" attribute to expose usb port's connect + type + - LP: #1011415 + * usb: Create link files between child device and usb port device. + - LP: #1011415 + * USB: Set usb port's DeviceRemovable according acpi information + - LP: #1011415 + * USB: fix sign-extension bug in the hub driver + - LP: #1011415 + * usb: add runtime pm support for usb port device + - LP: #1011415 + * usb: add usb port auto power off mechanism + - LP: #1011415 + * usb: expose usb port's pm qos flags to user space + - LP: #1011415 + * usb: enable usb port device's async suspend. + - LP: #1011415 + * drm: add prime helpers + - LP: #1138440 + * drm/nouveau: use prime helpers + - LP: #1138440 + * drm/radeon: use prime helpers + - LP: #1138440 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.2 + - LP: #961286 + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1144449 + + -- Tim Gardner Fri, 01 Mar 2013 07:10:07 -0700 + +linux (3.8.0-9.18) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1135937 + * [Config] CONFIG_PATA_ACPI=m + - LP: #1084783 + + [ Upstream Kernel Changes ] + + * intel_idle: stop using driver_data for static flags + - LP: #1083993 + * intel_idle: support Haswell + - LP: #1083993 + * i2c: i801: SMBus patch for Intel Avoton DeviceIDs + - LP: #1083965 + * ahci: AHCI-mode SATA patch for Intel Avoton DeviceIDs + - LP: #1083965 + * ata_piix: IDE-mode SATA patch for Intel Avoton DeviceIDs + - LP: #1083965 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.1 + - LP: #1011792 + + -- Tim Gardner Wed, 27 Feb 2013 06:10:52 -0700 + +linux (3.8.0-8.17) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1133552 + * Bump ABI to fix armhf FTBS + + [ Herton Ronaldo Krzesinski ] + + * d-i: Add hid-logitech-dj to input-modules + - LP: #975198 + + -- Tim Gardner Tue, 26 Feb 2013 12:12:21 -0700 + +linux (3.8.0-7.16) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] all new menu aligned annotations + * [Config] v3.8 configuration review -- pass 1 + * [Config] v3.8 configuration review -- pass 2 + * [Config] apply v3.8 final configuration review changes + * [Config] annotation: ALX does not build on powerpc + * [Config] CONFIG_DEBUG_INFO=y + + [ Mathias Krause ] + + * SAUCE: sock_diag: Fix out-of-bounds access to sock_diag_handlers[] + - LP: #1132896 + - CVE-2013-1763 + + -- Tim Gardner Sun, 24 Feb 2013 06:38:59 -0700 + +linux (3.8.0-7.15) raring; urgency=low + + [ Kamal Mostafa ] + + * [Config] Add CONFIG_PS2_CYPRESS + * SAUCE: Input: Cypress PS/2 Trackpad simulated multitouch + * SAUCE: Input: fix Cypress PS/2 Trackpad in Dell XPS12 + - LP: #1103594 + + [ Upstream Kernel Changes ] + + * Input: increase struct ps2dev cmdbuf[] to 8 bytes + * Input: add support for Cypress PS/2 Trackpads + - LP: #978807 + + -- Tim Gardner Thu, 21 Feb 2013 11:59:19 -0700 + +linux (3.8.0-7.14) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_RCU_USER_QS=n + * [Config] CONFIG_MTD_ONENAND_SIM=n + * annotations: add annotations for CONFIG_CC_STACKPROTECTOR + + [ Upstream Kernel Changes ] + + * rebase to v3.8 + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1130111 + * UBUNTU: SAUCE: rt2x00: rt2x00pci_regbusy_read() - only print register access failure once + - LP: #1128840 + + -- Tim Gardner Mon, 18 Feb 2013 09:25:56 -0700 + +linux (3.8.0-6.13) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1125364 + * Add ahci modules to d-i + - LP: #1124415 + + + [ Chris Wilson ] + + * SAUCE: drm/i915: Wait for pending flips to complete before tearing down + the encoders + - LP: #1097315 + + -- Tim Gardner Wed, 13 Feb 2013 12:16:48 -0700 + +linux (3.8.0-6.12) raring; urgency=low + + [Tim Gardner] + + * perf: NO_LIBPERL=1 + * Fix linux-headers dependency + * Release Tracking Bug + - LP: #1124362 + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_EXPORT to allow nfs exports + - LP: #1121699 + + [ Daniel Vetter ] + + * SAUCE: drm/i915: write backlight harder + - LP: #954661 + + -- Tim Gardner Wed, 13 Feb 2013 10:25:11 -0700 + +linux (3.8.0-6.11) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1122071 + * rebase to v3.8-rc7 + * Add libaudit-dev as a build dependency + * Build perf with NO_LIBPYTHON=1 to avoid a python build dependency. + + [ Leann Ogasawara ] + + * [Config] Remove CONFIG_SATA_AHCI annotation + + -- Tim Gardner Fri, 08 Feb 2013 07:41:13 -0500 + +linux (3.8.0-5.10) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1118568 + + * Bump ABI to fix install issue with 3.8.0-4.8. + Moving drivers/ata/*ahci* to linux-image caused an + install conflict with linux-image-extras without an + ABI bump. + + [ Jan Beulich ] + + * SAUCE: xen-pciback: rate limit error messages from + xen_pcibk_enable_msi{, x}() + - LP: #1117336 + - CVE-2013-0231 + + -- Tim Gardner Thu, 07 Feb 2013 05:38:12 -0700 + +linux (3.8.0-4.9) raring; urgency=low + + [ Herton Ronaldo Krzesinski ] + + * d-i: Add mellanox ethernet drivers to nic-modules + - LP: #1015339 + + [ Joseph Salisbury ] + + * SAUCE: ACPI: Add DMI entry for Sony VGN-FW41E_H + - LP: #1113547 + + [ Kamal Mostafa ] + + * SAUCE: alx driver import script + + [ Qualcomm Atheros, Inc ] + + * SAUCE: alx: Update to heads/master + + [ Tim Gardner ] + + * Release Tracking Bug + - LP: #1117673 + + * [debian] Remove dangling symlink from headers package + - LP: #1112442 + * [config] CONFIG_ALX=m + * [Config] Add alx to d-i nic-modules + * [Config] CONFIG_SATA_AHCI=m + - LP: #1056563 + + -- Leann Ogasawara Tue, 05 Feb 2013 05:54:32 -0800 + +linux (3.8.0-4.8) raring; urgency=low + + [ Allen Ibara ] + + * SAUCE: imx6: dts: Add IMX6Q AHCI support + + [ Andy Whitcroft ] + + * rebase to v3.8-rc6 + * updateconfigs following rebase to v3.8-rc6 + + [Leann Ogasawara] + + * Release Tracking Bug + - LP: #1112573 + + [ Paolo Pisati ] + + * SAUCE: imx6: enable sata clk if SATA_AHCI_PLATFORM + * [Config] SERIAL_AMBA_PL011=y (vexpress serial console) + * [Config] MMC_ARMMMCI=y (vexpress mmc) + * [Config] FB_ARMCLCD=y (vexpress framebuffer) + + [ Seth Forshee ] + + * [Config] CONFIG_MAC80211_MESSAGE_TRACING=y + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc6 + - LP: #1107477 + + -- Leann Ogasawara Fri, 01 Feb 2013 07:20:59 -0800 + +linux (3.8.0-3.7) raring; urgency=low + + [ Andy Green ] + + * SAUCE: ARM: OMAP2+: add cpu id register to MAC address helper + * SAUCE: ARM: omap2 add mac address allocation register api + * SAUCE: ARM: omap2 panda register ethernet and wlan for automatic mac + allocation + + [ Leann Ogasawara ] + + * rebase to v3.8-rc5 + * Release Tracking Bug + - LP: #1111486 + + [ Paolo Pisati ] + + * SAUCE: davinci: vpss: compilation fix + * [Config] enable TI OMAP4 support (Pandaboard/ES) + * [Config] OMAP_USB2=y (since TWL6030_USB depends on it) + * [Config] enable Freescale IMX6 support (SabreLite) + * [Config] SERIAL_IMX_CONSOLE=y + * [Config] MMC_*_IMX=y + * [Config] disable USB_SUSPEND + * [Config] USB_MXS_PHY=y + * [Config] USB_CHIPIDEA=y + * SAUCE: DTB: add support for multiple DTBs + * SAUCE: DTB: build imx6q-sabrelite + * SAUCE: DTB: build beaglexm + * SAUCE: DTB: build panda/panda es + * [Config] disable CPU_FREQ + * [Config] PANEL_TFP410=y (video DVI output) + * [Config] SND_OMAP_SOC*=y + * [Config] SND_IMX_SOC*=y + * [Config] I2C_IMX=y + * [Config] SPI_IMX=m + + [ Stefan Bader ] + + * [Config] Move 9p modules into generic package + - LP: #1107658 + + [ Tony Lindgren ] + + * SAUCE: ARM: OMAP2+: Limit omap initcalls to omap only on multiplatform + kernels + * SAUCE: ARM: OMAP2+: Use omap initcalls + * SAUCE: ARM: OMAP: Fix i2c cmdline initcall for multiplatform + * SAUCE: ARM: OMAP: Fix dmaengine init for multiplatform + * SAUCE: ARM: OMAP2+: Add multiplatform debug_ll support + * SAUCE: ARM: OMAP2+: Disable code that currently does not work with + multiplaform + * SAUCE: ARM: OMAP2+: Enable ARCH_MULTIPLATFORM support + * SAUCE: ARM: OMAP2+: Add minimal support for booting vexpress + * SAUCE: ARM: OMAP2+: Remove now obsolete uncompress.h and debug-macro.S + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc5 + - LP: #1096789 + + -- Leann Ogasawara Thu, 31 Jan 2013 06:44:52 -0800 + +linux (3.8.0-2.6) raring; urgency=low + + [ Adam Conrad ] + + * Fix up linux-tools -> SRCPKGNAME-tools rename + + [ Andy Whitcroft ] + + * [Config] re-disable CONFIG_SOUND_OSS + - LP: #1105230 + + [ Arend van Spriel ] + + * SAUCE: brcmsmac: fix tx status processing + + [Leann Ogasawara] + + * Release Tracking Bug + - LP: #1105104 + + -- Leann Ogasawara Fri, 25 Jan 2013 11:56:30 -0800 + +linux (3.8.0-1.5) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1101235 + + [ Dudley Du ] + + * SAUCE: Input: add support for Cypress PS/2 Trackpads + - LP: #978807 + + [ Kamal Mostafa ] + + * SAUCE: Input: increase struct ps2dev cmdbuf[] to 8 bytes + * SAUCE: Input: Cypress PS/2 Trackpad simulated multitouch + * [Config] Add CONFIG_PS2_CYPRESS + + [ Tim Gardner ] + + * rebase to v3.8-rc4 + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc4 + - LP: #1095315 + - LP: #886975 + - LP: #1086921 + + -- Leann Ogasawara Thu, 17 Jan 2013 10:50:22 -0800 + +linux (3.8.0-0.4) raring; urgency=low + + [ Leann Ogasawara ] + + * [Config] Update CONFIG_TOUCHSCREEN_EGALAX build annotation + * [Config] Update CONFIG_IIO build annotation + * [Config] Update CONFIG_TOUCHSCREEN_EETI annotation + * [Config] Remove CONFIG_SPI_DW_MMIO annotation + * [Config] Remove CONFIG_SPI_PL022 annotation + * [Config] Update CONFIG_EZX_PCAP annotation + * [Config] Update CONFIG_SENSORS_AK8975 annotation + * [Config] Disable CONFIG_DRM_MGAG200 + - LP: #1042903 + + -- Leann Ogasawara Mon, 14 Jan 2013 10:01:50 -0800 + +linux (3.8.0-0.3) raring; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: (no-up) trace: add trace events for open(), exec() and + uselib()" + + [ Scott James Remnant ] + + * SAUCE: (no-up) trace: add trace events for open(), exec() and uselib() + (for v3.7+) + - LP: #1085766, #462111 + + -- Andy Whitcroft Fri, 11 Jan 2013 16:57:27 +0000 + +linux (3.8.0-0.2) raring; urgency=low + + [ Tim Gardner ] + + * [packaging] Add macro to selectively disable building perf + * [packaging] Cannot depend on universe package libaudit-dev + + -- Tim Gardner Thu, 10 Jan 2013 12:43:24 -0700 + +linux (3.8.0-0.1) raring; urgency=low + + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc3 + - LP: #1096789 + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc2 + - LP: #1082357 + - LP: #1075882 + + -- Andy Whitcroft Mon, 17 Dec 2012 10:35:09 +0000 + +linux (3.7.0-7.15) raring; urgency=low + + [ Chris J Arges ] + + * SAUCE: add eeprom_bad_csum_allow module parameter + - LP: #1070182 + + [ Leann Ogasawara ] + + * Add ceph to linux-image for virtual instances + - LP: #1063784 + + [ Serge Hallyn ] + + * SAUCE: net: dev_change_net_namespace: send a KOBJ_REMOVED/KOBJ_ADD + + [ Tim Gardner ] + + * [Config] CONFIG_SLUB_DEBUG=y + - LP: #1090308 + + [ Upstream Kernel Changes ] + + * Revert "[SCSI] sd: Implement support for WRITE SAME" + - LP: #1089818 + + -- Leann Ogasawara Wed, 12 Dec 2012 06:50:20 -0800 + +linux (3.7.0-6.14) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotations: all new annotations scheme including defaults + * [Configs] apply annotation updates to main configs (top section) + + [ Leann Ogasawara ] + + * Revert "SAUCE: include and for mmc_core arm + build" + * Revert "SAUCE: [arm] fixup __aeabi_uldivmod undefined build error" + * Temporarily disable module check for build + + [ Stefan Bader ] + + * ubuntu: dm-raid45: Adapt to upstream interface changes + * Re-enable build of dm-raid45 + + [ Tim Gardner ] + + * SAUCE: Moved scripts/fw-to-ihex.sh to debian/scripts/misc + * SAUCE: ACPICA: Fix ACPI mutex object allocation memory leak on error + * SAUCE: drm: Fix possible EDID memory allocation oops + * SAUCE: ttm: Fix possible _manager memory allocation oops + * SAUCE: iwlwifi: iwlagn_request_scan: Fix check for priv->scan_request + * SAUCE: i915: intel_set_mode: Reduce stack allocation from 500 bytes to + 2 pointers + + [ Tomas Hozza ] + + * SAUCE: tools: hv: Netlink source address validation allows DoS + - LP: #1084777 + - CVE-2012-5532 + + [ Upstream Kernel Changes ] + + * rebase to v3.7 + + -- Leann Ogasawara Wed, 05 Dec 2012 14:11:12 -0800 + +linux (3.7.0-5.13) raring; urgency=low + + [ Lino Sanfilippo ] + + * SAUCE: inotify, fanotify: replace fsnotify_put_group() with + fsnotify_destroy_group() + - LP: #922906 + * SAUCE: fsnotify: introduce fsnotify_get_group() + - LP: #922906 + * SAUCE: fsnotify: use reference counting for groups + - LP: #922906 + * SAUCE: fsnotify: take groups mark_lock before mark lock + - LP: #922906 + * SAUCE: fanotify: add an extra flag to mark_remove_from_mask that + indicates wheather a mark should be destroyed + - LP: #922906 + * SAUCE: fsnotify: use a mutex instead of a spinlock to protect a groups + mark list + - LP: #922906 + * SAUCE: fsnotify: pass group to fsnotify_destroy_mark() + - LP: #922906 + * SAUCE: fsnotify: introduce locked versions of fsnotify_add_mark() and + fsnotify_remove_mark() + - LP: #922906 + * SAUCE: fsnotify: dont put marks on temporary list when clearing marks + by group + - LP: #922906 + * SAUCE: fsnotify: change locking order + - LP: #922906 + + [ Tim Gardner ] + + * [Config] CONFIG_NFC_LLCP=y + * [Config] get-firmware: Filter new files through fwinfo + * [Config] CONFIG_MTD_NAND_DOCG4=m for all arches + * [Config] CONFIG_DRM_EXYNOS_HDMI=y + * [Config] CONFIG_XEN=y for all arches + * [Config] CONFIG_SND_OMAP_SOC_ZOOM2=m + * [Config] CONFIG_MMC_DW_EXYNOS=m + * [Config] CONFIG_GPIO_ADNP=m + * [Config] find-obsolete-firmware: Use correct path + * rebase to v3.7-rc8 + - LP: #1084640 + + [ Upstream Kernel Changes ] + + * Revert "VFS: don't do protected {sym,hard}links by default" + - LP: #1084192 + + -- Tim Gardner Wed, 28 Nov 2012 16:07:08 +0000 + +linux (3.7.0-4.12) raring; urgency=low + + [ Tim Gardner ] + + * Revert "[Config] Use -j1 for headers_install" + * Revert "[Config] install-arch-headers needs a valid config" + Strayed into the weeds in search of the root cause of the periodic + build failure. + Fixes powerpc FTBS introduced in -4.11. + * [Config] hmake -j1 + The kernel makefile appears to have parallel dependency + problems for the install_headers target. This appears to be root + cause for a periodic build failure on N-way machines. + + -- Leann Ogasawara Tue, 27 Nov 2012 12:33:06 -0800 + +linux (3.7.0-4.11) raring; urgency=low + + [ Tim Gardner ] + + * [Config] Use -j1 for headers_install + Also fixes a powerpc FTBS introduced by + "[Config] install-arch-headers needs a valid config". + + -- Tim Gardner Tue, 27 Nov 2012 10:19:30 -0700 + +linux (3.7.0-4.10) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] add rebuild-test support for autopkgtest + - LP: #1081500 + * [tests] move build tests out of the way + - LP: #1081500 + * [tests] add an autopkgtest rebuild test + - LP: #1081500 + + [ Tim Gardner ] + + * rebase to v3.7-rc7 + * SAUCE: Remove emi62 files duplicated in linux-firmware + * SAUCE: Remove sb16 files duplicated in linux-firmware + * SAUCE: Remove whiteheat files duplicated in linux-firmware + * SAUCE: Remove yamaha files duplicated in linux-firmware + * SAUCE: Remove dsp56k files used only by m68k + * SAUCE: firmware: Remove last vestiges of dabusb + * SAUCE: Remove vicam files duplicated in linux-firmware + * [Config] install-arch-headers needs a valid config + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc7 + - LP: #1076840 + - LP: #1081466 + + -- Leann Ogasawara Wed, 21 Nov 2012 06:07:23 -0800 + +linux (3.7.0-3.9) raring; urgency=low + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_X86_CPUFREQ_NFORCE2=y + - LP: #1079900 + * Add nfsv3 to nfs-modules udeb + + [ Paolo Pisati ] + + * [Config] SND_OMAP_SOC*=y + - LP: #1019321 + + [ Stefan Bader ] + + * SAUCE: (no-up) xen/netfront: handle compound page fragments on transmit + - LP: #1078926 + + [ Tim Gardner ] + + * Revert "SAUCE: SECCOMP: audit: always report seccomp violations" + - LP: #1079469 + * Revert "SAUCE: omap3 clocks .dev_id = NULL" + * rebase to v3.7-rc6 + * SAUCE: script to detect obsolete firmware + * SAUCE: Remove yam files duplicated in linux-firmware + * SAUCE: Remove tehuti files duplicated in linux-firmware + * SAUCE: Remove matrox files duplicated in linux-firmware + * SAUCE: Remove cxgb3 files duplicated in linux-firmware + * SAUCE: Remove r128 files duplicated in linux-firmware + * SAUCE: Remove acenic files duplicated in linux-firmware + * SAUCE: Remove keyspan files duplicated in linux-firmware + * SAUCE: Remove sun files duplicated in linux-firmware + * SAUCE: Remove radeon files duplicated in linux-firmware + * SAUCE: Update bnx2x firmware to 7.8.2.0 + * [Config] generic.inclusion-list: econet has disappeared + + [ Upstream Kernel Changes ] + + * seccomp: forcing auditing of kill condition + - LP: #1079469 + * rebase to v3.7-rc6 + + -- Leann Ogasawara Tue, 20 Nov 2012 12:28:55 -0800 + +linux (3.7.0-2.8) raring; urgency=low + + [ Andy Whitcroft ] + + * Revert "overlayfs: disable until FTBS is fixed" + * Revert "ubuntu: overlayfs" + * Revert "ubuntu: AUFS" + * ubuntu: overlayfs -- overlayfs: add statfs support + * ubuntu: overlayfs -- ovl: switch to __inode_permission() + * ubuntu: overlayfs -- overlayfs: copy up i_uid/i_gid from the underlying + inode + - LP: #944386 + * ubuntu: AUFS (no-squash): basic framework and update machinary + * ubuntu: AUFS (no-squash) -- aufs3-base.patch + * ubuntu: AUFS (no-squash) -- aufs3-standalone.patch + * ubuntu: AUFS: aufs-update -- follow the uapi header changes + * ubuntu: AUFS -- update to f2873474324d0a31af4340554b9715f51331bc7f + * ubuntu: AUFS (no-squash) -- reenable + - LP: #1079193 + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: add i_op->dentry_open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + * ubuntu: overlayfs -- vfs: export __inode_permission() to modules + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Robin Dong ] + + * ubuntu: overlayfs -- overlayfs: fix possible leak in ovl_new_inode + * ubuntu: overlayfs -- overlayfs: create new inode in ovl_link + + -- Andy Whitcroft Thu, 15 Nov 2012 13:35:12 +0000 + +linux (3.7.0-1.7) raring; urgency=low + + [ Tim Gardner ] + + * [Config] Drop dependency on libaudit-dev + Its a universe package which causes an FTBS on the builders. + libaudit-dev is not strictly required for the perf tools build. + + -- Tim Gardner Wed, 14 Nov 2012 10:08:13 -0700 + +linux (3.7.0-1.6) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] enforce -- switch CONFIG_NVRAM to more readable form + * [Config] better encode the CONFIG_NVRAM constaint + * enforcer -- fix debugging output + + [ Ben Collins ] + + * [Config] Add custom_override rule to allow for alternate kernel + file/install + * [Config] Use SRCPKGNAME as prefix for indep linux headers package + + [ Tim Gardner ] + + * [Config] Dropped armel + * Drop highbank from ABI fetch list + * [Config] Use dh_prep instead of 'dh_clean -k' + * [Config] Build depend on libaudit-dev, libunwind8-dev for tools + * [Config] Document binary-indep dependency chain + * rebase to v3.7-rc5 + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc5 + + -- Tim Gardner Tue, 13 Nov 2012 07:13:37 -0500 + +linux (3.7.0-0.5) raring; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_AMD_IOMMU_V2=m + - LP: #1071520 + * [Config] CONFIG_MTD_ONENAND_SIM=n for armel + Fixes FTBS + + -- Tim Gardner Thu, 08 Nov 2012 15:45:39 -0500 + +linux (3.7.0-0.4) raring; urgency=low + + [ Ben Collins ] + + * [Config] Update enforce rule for CONFIG_NVRAM to better suit flavours + + [ Tim Gardner ] + + * [Config] do_tools=false for arm + + -- Tim Gardner Thu, 08 Nov 2012 05:39:51 -0700 + +linux (3.7.0-0.3) raring; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_DRM_EXYNOS_HDMI=n for armhf + * [Config] CONFIG_MTD_NAND_DOCG4=n for armel/armhf + * [Config] Drop highbank harder + + -- Tim Gardner Wed, 07 Nov 2012 18:11:45 +0000 + +linux (3.7.0-0.2) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] add fs/udf to linux-image to support DVD/CD formats in virtual + instances + - LP: #1066921 + * [Config] drop highbank builds + + [ Jeremy Kerr ] + + * SAUCE: efivarfs: Implement exclusive access for {get, set}_variable + - LP: #1063061 + + [ Leann Ogasawara ] + + * Reinstate dropped.txt from Ubuntu-3.7.0-0.1-rc1 + + [ Tim Gardner ] + + * [Config] Dropped powerpc/ppc64 in favour of the community kernel + * [Config] CONFIG_MODULE_SIG=y for amd64,i386, and highbank + * rebase to v3.7-rc4 + * SAUCE: MODSIGN: Emit error for incorrectly signed module + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc4 + + -- Tim Gardner Mon, 05 Nov 2012 05:35:41 -0700 + +linux (3.7.0-0.1) raring; urgency=low + + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc3 + - LP: #1056078 + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc2 + - LP: #1060729 + - LP: #1059523 + - LP: #1006690 + - LP: #1049623 + - LP: #1046512 + - LP: #1052499 + - LP: #1037642 + - LP: #559939 + - LP: #1052460 + - LP: #939161 + - LP: #1046734 + + -- Tim Gardner Tue, 02 Oct 2012 08:13:07 -0600 + +linux (3.6.0-0.1) UNRELEASED; urgency=low + + + [ Upstream Kernel Changes ] + + * rebase to v3.6 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc7 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc6 + - LP: #1000424 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc5 + - LP: #1040077 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc4 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc3 + - LP: #1038651 + - LP: #1034779 + + -- Leann Ogasawara Tue, 24 Jul 2012 06:37:09 -0700 + +linux (3.5.0-6.6) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION enable IPv6 + experimental features + * SAUCE: highbank -- export clock functions for modules + * [Config] highbank -- reenable CONFIG_TOUCHSCREEN_W90X900 + * [Config] highbank -- renenable CONFIG_SERIO_AMBAKMI + * [Config] highbank -- reenable CONFIG_RFKILL_GPIO + * [Config] highbank -- reenable CONFIG_MMC_SDHCI_PXAV3 + * [Config] highbank -- reenable CONFIG_MMC_SDHCI_PXAV3 + * [Config] highbank -- reenable CONFIG_KEYBOARD_SAMSUNG + * [Config] highbank -- reenable CONFIG_FB_ARMCLCD + * [Config] highbank -- reenable CONFIG_DW_DMAC + * [Config] highbank -- reenable CONFIG_USB_R8A66597_HCD + * [Config] highbank -- reenable CONFIG_USB_MV_UDC + * [Config] highbank -- reenable CONFIG_USB_DWC3 + * [Config] highbank -- reenable CONFIG_SATA_MV + * [Config] highbank -- reenable CONFIG_PATA_ARASAN_CF + * [Config] highbank -- CONFIG_CAN_C_CAN_PLATFORM + * [Config] highbank -- reenable CONFIG_MMC_ARMMMCI + * [Config] highbank -- reenable CONFIG_SERIAL_AMBA_PL010 + * [Config] highbank -- reenable CONFIG_ATMEL_PWM + * [Config] highbank -- enable CONFIG_CHECKPOINT_RESTORE + * [Config] highbank -- enable CONFIG_EXPERT + * [Config] highbank -- enable CONFIG_CHECKPOINT_RESTORE + * [Config] enable CONFIG_USB_DYNAMIC_MINORS + * [Config] enable CONFIG_USB_EHCI_TT_NEWSCHED + * [Config] enable CONFIG_USB_ETH_EEM + * [Config] enable CONFIG_USB_HCD_BCMA/CONFIG_USB_HCD_SSB + * [Config] disable CONFIG_USB_M66592 + * [Config] enable CONFIG_USB_NET2272 + * [Config] enable CONFIG_USB_R8A66597 + * [Config] annotate: CONFIG_USB_OMAP not required for our h/w + * [Config] set CONFIG_USB_MUSB_HDRC=m for omap + * [Config] annotate: CONFIG_USB_G_MULTI fix rule + * [Config] CONFIG_USB_GPIO_VBUS=m for OMAP + * [Config] Enable CONFIG_DRM_AST/_CIRRUS_QEMU/_MGAG200 + * [Config] sync configuration armhf omap -> armel omap + * [Config] annotate: CONFIG_IIO triggers build failures on OMAP4 + * [Config] disable CONFIG_OMAP_IOVMM is deprecated + + [ Bryan Wu ] + + * [Config] change default IO scheduler from CFQ to Deadline + + [ Leann Ogasawara ] + + * Revert "[Config] Temporarily disable CONFIG_MV643XX_ETH on powerpc" + * [Config] Disable CONFIG_MOUSE_INPORT + + [ Tim Gardner ] + + * SAUCE: firmware: Update bnx2x to current firmware version 7.2.51 + * [Config] Add bnx2x firmware to nic-modules udeb + * SAUCE: Add script to convert firmware to ihex format + * SAUCE: firmware: Upgrade bnx2 to current versions + * [Config] Add tigon firmware to nic-modules udeb + * [Config] CONFIG_EARLY_PRINTK_DBGP=y + - LP: #1026761 + * SAUCE: Remove redundant cis firmware + * SAUCE: Remove redundant emi26 firmware + * SAUCE: Remove redundant ttusb-budget firmware + * SAUCE: Remove redundant sun/cassini firmware + * SAUCE: Remove redundant ositech/Xilinx7OD firmware + * SAUCE: Remove redundant 3com/typhoon.bin firmware + * SAUCE: Remove redundant yamaha/ds1 firmware + * SAUCE: Remove redundant keyspan_pda firmware + * rebase to v3.5 + + [ Upstream Kernel Changes ] + + * rebase to v3.5 + - LP: #1027828 + + -- Leann Ogasawara Mon, 23 Jul 2012 05:57:04 -0700 + +linux (3.5.0-5.5) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotations: initial import of configuration annotations + + [ Bryan Wu ] + + * [Config] enforcer -- add CONFIG_I2C_DESIGNWARE_PLATFORM enforce checker + + [ Leann Ogasawara ] + + * Rebase to v3.5-rc7 + + [ Manoj Iyer ] + + * SAUCE: Bluetooth: btusb: Add vendor specific ID (0a5c:21f4) BCM20702A0 + - LP: #1010281 + + [ Tim Gardner ] + + * [Config] enable CONFIG_I2C_HELPER_AUTO for all flavours as policy + expects + * [Config] CONFIG_I2O_CONFIG_OLD_IOCTL=n + * [Config] CONFIG_BRIDGE_EBT_ULOG=n + * [Config] CONFIG_IP_NF_QUEUE=n + * [Config] CONFIG_MTD_DOC2000=n + * [Config] CONFIG_PRINT_QUOTA_WARNING=n + * [Config] CONFIG_PRISM54=n + * [Config] CONFIG_SCx200_I2C=n + * [Config] CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc7 + + -- Leann Ogasawara Mon, 16 Jul 2012 15:38:41 -0700 + +linux (3.5.0-4.4) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Packaging] getabis should be extracting all packages + - LP: #1021174 + * [Config] getabis -- series uses linux-image-extra + - LP: #1021174 + * rebase to v3.5-rc6 + + [ Bryan Wu ] + + * [Config] built-in CONFIG_MICREL_PHY as other PHY drivers for all + flavours + * [Config] sync CONFIG_MOUSE_PS2_ config for all flavours + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_RT2800USB_RT35XX and CONFIG_RT2800USB_RT53XX + - LP: #1019561 + + [ Paolo Pisati ] + + * [Config] SND_OMAP_SOC, SND_OMAP_SOC_MCBSP and SND_OMAP_SOC_OMAP3_BEAGLE =y + - LP: #1019321 + + [ Stefan Bader ] + + * SAUCE: (pre-up) net: dont use __netdev_alloc_skb for bounce buffer + - LP: #1018456 + * (config) Disable ACPI_PROCFS_POWER + + [ Tim Gardner ] + + * [Config] CONFIG_ACPI_BGRT=y + * Extract firmware module info during getabi + - LP: #1021174 + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc6 + + -- Leann Ogasawara Mon, 09 Jul 2012 08:50:20 -0700 + +linux (3.5.0-3.3) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_MEMTEST=y + - LP: #1004535 + * [Config] config-check: add support for a cut operation + * [Config] enforcer -- switch to cut where appropriate + + [ Leann Ogasawara ] + + * Rebase to v3.5-rc5 + * [Config] Updateconfigs after rebase to v3.5-rc5 + + [ Luis Henriques ] + + * SAUCE: ocfs2: Fix NULL pointer dereferrence in + __ocfs2_change_file_space + - LP: #1006012 + + [ Seth Forshee ] + + * SAUCE: (drop after 3.5) drm/i915: ignore pipe select bit when checking + for LVDS register initialization + - LP: #1012800 + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc5 + - LP: #1013183 + - LP: #1017017 + - LP: #884652 + + -- Leann Ogasawara Mon, 02 Jul 2012 06:41:58 -0700 + +linux (3.5.0-2.2) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * rebase to v3.5-rc4 + + [ Arend van Spriel ] + + * SAUCE: (drop after 3.5) brcmsmac: fix NULL pointer crash in + brcms_c_regd_init() + - LP: #950320 + + [ Bryan Wu ] + + * [Config] Sync CONFIG_CGROUP_MEM_RES_CTLR_SWAP for ARM + + [ Chris J Arges ] + + * PACKAGING: add .gnu_debuglink sections to .ko files + - LP: #669641 + + [ Leann Ogasawara ] + + * d-i: Add hid-generic to input-modules + - LP: #1017879 + + [ Ming Lei ] + + * SAUCE: Revert "mmc: omap_hsmmc: Enable Auto CMD12" + - LP: #1017717, #225 + + [ Paolo Pisati ] + + * SAUCE: Revert "Fix OMAP EHCI suspend/resume failure (i693)" + - LP: #1017718 + * [Config] Disable generic USB_EHCI_HCD_PLATFORM on omap3 + + [ Seth Forshee ] + + * SAUCE: (drop after 3.5) brcm80211: smac: don't set up tx power limits + during initialization + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: always set channel specified + by mac80211 + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: remove unused code for 40MHz + channels + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: clean up channel.c + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: inform mac80211 of the X2 + regulatory domain + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: enable/disable radio on + regulatory updates + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: use mac80211 channel data for + tx power limits + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: don't validate channels + against internal regulatory data + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: use current regulatory domain + when checking whether OFDM is allowed + - LP: #950320 + + [ Tim Gardner ] + + * [Config] Enable CONFIG_CGROUPS for highbank + - LP: #1014692 + * [Config] FB_OMAP*=y and PANEL_TFP410=y + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc4 + + -- Leann Ogasawara Tue, 26 Jun 2012 06:21:05 -0700 + +linux (3.5.0-1.1) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] highbank -- enable CONFIG_RFKILL=y and CONFIG_CAN=m + + [ Leann Ogasawara ] + + * Rebase to v3.5-rc1 + * [Config] Remove USB_DEVICEFS from the config enforcer + * [Config] Updateconfigs after rebase to v3.5-rc1 + * [Config] Temporarily disable CONFIG_MACH_NOKIA_RX51 on arm + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EETI on arm + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EGALAX on arm + * [Config] Temporarily disable CONFIG_EZX_PCAP on arm + * [Config] Temporarily disable CONFIG_LIS3L02DQ on arm + * [Config] Temporarily disable CONFIG_TI_CPSW on arm + * [Config] Temporarily disable CONFIG_GPIO_EM on arm + * [Config] Temporarily disable CONFIG_SERIAL_8250_EM on armhf + * [Config] Temporarily disable CONFIG_STMMAC_ETH on armhf + * [Config] Temporarily disable CONFIG_HW_RANDOM_ATMEL on armhf + * Rebase to v3.5-rc2 + * [Config] Updateconfigs after rebase to v3.5-rc2 + * [Config] Temporarily disable CONFIG_MV643XX_ETH on powerpc + * Rebase to v3.5-rc3 + * [Config] Updateconfigs after rebase to v3.5-rc3 + + [ Paul Mundt ] + + * SAUCE: fix bug.h's inclusion of kernel.h + + [ Stefan Bader ] + + * SAUCE: Fix compile failures of dm-raid45 + * [Config] Enable dm-raid45 + * Move dependency on crda to extra package + - LP: #657901 + * SAUCE: Mask CR4 writes on older Xen hypervisors + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc3 + - LP: #993162 + - LP: #925577 + * rebase to v3.5-rc2 + * rebase to v3.5-rc1 + - LP: #955892 + - LP: #978038 + - LP: #987371 + - LP: #929545 + - LP: #942316 + - LP: #903853 + + -- Leann Ogasawara Fri, 08 Jun 2012 14:28:46 -0700 + +linux (3.4.0-5.11) quantal-proposed; urgency=low + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_ARM_LPAE + - LP: #1009061 + + [ Oleksij Rempel ] + + * SAUCE: b43: do not call ieee80211_unregister_hw if we are not registred + - LP: #1008905 + + [ Paolo Pisati ] + + * [Config] omap3: MFD_OMAP_USB_HOST is usb host in omap2+. + - LP: #1009061 + + -- Leann Ogasawara Tue, 05 Jun 2012 08:06:28 -0700 + +linux (3.4.0-4.10) quantal; urgency=low + + [ Leann Ogasawara ] + + * Temporarily disable ABI and module check + + -- Leann Ogasawara Mon, 04 Jun 2012 20:27:31 -0700 + +linux (3.4.0-4.9) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] fix config split to avoid the shared config + * [Config] updateconfigs following split config fix + * [Config] linux-image-extras needs full postinst + * [Config] CONFIG_BLK_DEV_NVME commonise across architectures + * [Config] CONFIG_HP_WATCHDOG enable as module + * [Config] CONFIG_PDC_ADMA is not boot essential + * [Config] CONFIG_XEN_ACPI_PROCESSOR should be enabled on x86 + * [Config] CONFIG_VT6655/CONFIG_VT6656=m + * [Config] CONFIG_TRANZPORT=m commonise + * [Config] CONFIG_R3964=m commonise + * [Config] CONFIG_SCSI_DH=m commonise + * [Config] CONFIG_SCSI_IBMVSCSIS=m commonise + * [Config] CONFIG_AMD_PHY=y phys are not autoloadable + * [Config] CONFIG_SCSI_QLA_ISCSI=m commonise + * [Config] CONFIG_SCSI_SPI_ATTR=m commonise + * [Config] CONFIG_USB_SN9C102 is deprecated disable + * [Config] CONFIG_USB_SI470X=m commonise + * [Config] CONFIG_USB_ET61X251=m commonise + * [Config] CONFIG_RTS_PSTOR=m commonise + * [Config] CONFIG_SCANLOG=m commonise + * [Config] CONFIG_SCSI_SYM53C8XX_2=m commonise + * [Config] CONFIG_SM_FTL=m commonise + * [Config] CONFIG_SOLO6X10=m commonise + * [Config] CONFIG_SND_PCM_OSS=n using pulseaudio emulation instead + * [Config] CONFIG_SPI_DESIGNWARE=m commonise + * [Config] CONFIG_SPI_SPIDEV=m commonise + * [Config] CONFIG_TABLET_USB_WACOM=m commonise + * [Config] CONFIG_TPS65010=m commonise + * [Config] CONFIG_STE10XP=y commonise + * [Config] CONFIG_X25_ASY=m commonise + * [Config] CONFIG_USB_MON=m commonise + * [Config] CONFIG_VME_BUS=m commonise + * [Config] CONFIG_W35UND=m commonise + * [Config] -CONFIG_TCG_TPM=y commonise + * [Config] highbank -- commonise filesystems + * [Config] highbank -- commonise subsystems + * [Config] highbank -- commonise network protocols + * [Config] highbank -- commonise input drivers + * [Config] highbank -- commonise CRYPTO options + * [Config] highbank -- commonise HID options + * [Config] highbank -- commonise sensors options + * [Config] highbank -- commonise EXPORTFS/FHANDLE + * [Config] highbank -- commonise CONFIG_CRYPTO_LZO + * [Config] highbank -- commonise ENCRYPTED_KEYS + * [Config] highbank -- commonise CONFIG_ATALK + * [Config] highbank -- commonise INET/INET6 + * [Config] highbank -- commonise NLS + * [Config] highbank -- commonise BLK/CHR + * [Config] highbank -- CONFIG_EXT2_FS=y boot essential on highbank + * [Config] highbank -- commonise INET/INET6 part 2 + * [Config] highbank -- commonise PHY settings + * [Config] highbank -- commonise CRC settings + * [Config] highbank -- commonise BINFMT settings + * [Config] highbank -- commonise DM settings + * [Config] highbank -- commonise RTC_DRV settings + * [Config] highbank -- commonise KEYBOARD/MOUSE settings + * [Config] highbank -- commonise USB settings + * [Config] highbank -- commonise GPIO settings + * [Config] highbank -- commonise I2C settings + * [Config] highbank -- commonise numerous subsystem selectors + * [Config] highbank -- commonise A-C modules missmatches + * [Config] highbank -- commonise D-F modules missmatches + * [Config] CONFIG_AUDIT_LOGINUID_IMMUTABLE incompatible with upstart + * [Config] highbank -- commonise G-I modules missmatches + * [Config] highbank -- commonise J-L modules missmatches + * [Config] highbank -- commonise M modules missmatches + * [Config] highbank -- commonise N-P modules missmatches + * [Config] highbank -- commonise Q-R modules missmatches + * [Config] highbank -- commonise S modules missmatches -- part 1 + * [Config] highbank -- commonise S modules missmatches -- part 2 + * [Config] highbank -- commonise T modules missmatches + * [Config] highbank -- commonise U-Z modules missmatches + + [ Ike Panhc ] + + * [Config] add highbank flavour + - LP: #1000831 + + [ Mark Langsdorf ] + + * SAUCE: arm highbank: add support for pl320-ipc driver + - LP: #1000831 + + [ Rob Herring ] + + * SAUCE: input: add a key driver for highbank + - LP: #1000831 + * SAUCE: ARM: highbank: Add smc calls to enable/disable the L2 + - LP: #1000831 + * SAUCE: force DMA buffers to non-bufferable on highbank + - LP: #1000831 + * SAUCE: net: calxedaxgmac: fix net timeout recovery + - LP: #1000831 + + [ Tim Gardner ] + + * [Config] CONFIG_IWLWIFI_EXPERIMENTAL_MFP=n + * [Config] CONFIG_PCI_REALLOC_ENABLE_AUTO=y + * [Config] CONFIG_CIFS_EXPERIMENTAL has disappeared + * [Config] Homogenize CIFS configs across all arches + * [Config] armhf should not be skipabi or skipmodules + - LP: #1006913 + + -- Leann Ogasawara Mon, 04 Jun 2012 05:52:49 -0700 + +linux (3.4.0-3.8) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] include include/generated/compile.h + - LP: #942569 + * [Config] fix up postinst to ensure we know which error is which + - LP: #1002388 + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: async_populate_rootfs: fix build warnings + - LP: #1003417 + + [ John Johansen ] + + * Revert "SAUCE: AppArmor: Add the ability to mediate mount" + * SAUCE: apparmor: Add the ability to mediate mount + * SAUCE: AppArmor: basic networking rules + * SAUCE: apparmor: fix profile lookup for unconfined + - LP: #978038, #987371 + * SAUCE: apparmor: fix long path failure due to disconnected path + - LP: #955892 + + [ Mario Limonciello ] + + * SAUCE: dell-laptop: rfkill blacklist Dell XPS 13z, 15 + - LP: #901410 + + [ Stefan Bader ] + + * (config) Built-in xen-acpi-processor + + [ Tim Gardner ] + + * [Config] CONFIG_NET_DSA=m + - LP: #1004148 + * [Config] Ensure CONFIG_XEN_ACPI_PROCESSOR=y for amd64 + + -- Leann Ogasawara Fri, 25 May 2012 11:38:33 -0700 + +linux (3.4.0-3.7) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] drop the virtual flavour in favour of a split generic et al + * [Config] enforcer -- drop IDLE enforcement + * [Config] enable CONFIG_SCSI_VIRTIO=m for amd64 + * [Config] updateconfigs following removal of -virtual + + [ Leann Ogasawara ] + + * Rebase to v3.4 + + [ Seth Forshee ] + + * [Config] disable CONFIG_B43_BCMA_EXTRA + + [ Tim Gardner ] + + * [Config] Check for extras when building udebs + * [Config] Collapsed generic-pae into generic [i386] + + [ Upstream Kernel Changes ] + + * rebase to v3.4 + + -- Leann Ogasawara Mon, 21 May 2012 07:23:47 -0700 + +linux (3.4.0-2.6) quantal; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: overlayfs -- overlayfs: update touch_atime() usage" + * Revert "ubuntu: overlayfs -- overlayfs: switch from d_alloc_root() to + d_make_root()" + * Revert "ubuntu: overlayfs -- overlayfs: follow header cleanup" + * Revert "ubuntu: overlayfs -- overlayfs: apply device cgroup and + security permissions to overlay files" + * Revert "ubuntu: overlayfs -- fs: limit filesystem stacking depth" + * Revert "ubuntu: overlayfs -- overlay: overlay filesystem documentation" + * Revert "ubuntu: overlayfs -- overlayfs: implement show_options" + * Revert "ubuntu: overlayfs -- overlayfs: add statfs support" + * Revert "ubuntu: overlayfs -- overlay filesystem" + * Revert "ubuntu: overlayfs -- vfs: introduce clone_private_mount()" + * Revert "ubuntu: overlayfs -- vfs: export do_splice_direct() to modules" + * Revert "ubuntu: overlayfs -- vfs: add i_op->open()" + * Revert "ubuntu: overlayfs -- vfs: pass struct path to __dentry_open()" + * ubuntu: overlayfs -- overlayfs: add statfs support + * ubuntu: overlayfs -- inode_only_permission: export inode level + permissions checks + * ubuntu: overlayfs -- overlayfs: switch to use inode_only_permissions + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: pass struct path to __dentry_open() + * ubuntu: overlayfs -- vfs: add i_op->open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Robin Dong ] + + * ubuntu: overlayfs -- overlayfs: fix possible leak in ovl_new_inode + * ubuntu: overlayfs -- overlayfs: create new inode in ovl_link + + [ Tim Gardner ] + + * [Config] perarch and indep tools builds need separate build directories + * Prevent upgrading a non-PAE CPU + * perf is not parallel build safe + + -- Leann Ogasawara Wed, 16 May 2012 08:43:18 -0700 + +linux (3.4.0-2.5) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] perarch and indep tools builds need separate build directories + + [ Tim Gardner ] + + * Prevent upgrading a non-PAE CPU + * [Config] build debug + * [Config] perf tools are not parallel build safe + + -- Leann Ogasawara Tue, 15 May 2012 11:37:53 -0700 + +linux (3.4.0-2.4) quantal; urgency=low + + [ Leann Ogasawara ] + + * Revert "SAUCE: fsam7400: use UMH_WAIT_PROC consistently" + * Revert "ubuntu: fsam7400 select CHECK_SIGNATURE and depend on X86" + * Revert "ubuntu: fsam7400: Depend on CHECK_SIGNATURE" + * Revert "ubuntu: fsam7400 -- Cleanup Makefile" + * Revert "ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M + 7400" + * Revert "ubuntu: omnibook: fix source file newline" + * Revert "ubuntu: omnibook -- update BOM" + * Revert "SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} + depend on X86" + * Revert "ubuntu: omnibook -- Added missing BOM file" + * Revert "ubuntu: omnibook -- support Toshiba (HP) netbooks" + * Revert "ubuntu: nx-emu - i386: mmap randomization for executable + mappings" + * Revert "SAUCE: disable_nx should not be in __cpuinitdata section for + X86_32" + * Revert "ubuntu: nx-emu - i386: NX emulation" + * Revert "ubuntu: rfkill drivers -- version 1.3" + * Temporarily disable module check + * [Config] Remove CONFIG_FSAM7400 + * [Config] Remove CONFIG_OMNIBOOK + * [Config] Update configs + * Rebase to v3.4-rc7 + * SAUCE: genirq: export handle_edge_irq() and irq_to_desc() + + [ Tim Gardner ] + + * Updated generic-pae description + * Rebase to v3.4-rc6 + * install-tools depends on build targets + + [ Upstream Kernel Changes ] + + * kconfig: in debug mode some 0 length message prints occur + * rebase to v3.4-rc7 + * rebase to v3.3-rc6 + + -- Leann Ogasawara Mon, 14 May 2012 08:22:56 -0700 + +linux (3.4.0-1.3) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] control.stub is an intermediate product not a dependancy + - LP: #992414 + + [ Leann Ogasawara ] + + * remove i386 generic from getabis + + [ Upstream Kernel Changes ] + + * (pre-stable) b43: only reload config after successful initialization + - LP: #950295 + + -- Leann Ogasawara Wed, 02 May 2012 09:48:14 -0700 + +linux (3.4.0-1.2) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] add build depends for flex, bison and pkg-config + + -- Andy Whitcroft Tue, 01 May 2012 13:15:41 +0100 + +linux (3.4.0-1.1) quantal; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: overlayfs -- overlayfs: apply device cgroup and security + permissions to overlay files + - LP: #915941, #918212 + - CVE-2012-0055 + + [ Leann Ogasawara ] + + * Open Q + * Rebase to v3.4-rc5 + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EETI on arm + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EGALAX on arm + * [Config] Temporarily disable CONFIG_EZX_PCAP on arm + * [Config] Temporarily disable CONFIG_MFD_OMAP_USB_HOST on arm + * [Config] Temporarily disable CONFIG_LIS3L02DQ on arm + * [Config] Temporarily disable CONFIG_USB_EHCI_HCD_PLATFORM on arm + * [Config] Temporarily disable CONFIG_TI_CPSW on arm + * [Config] Temporarily disable CONFIG_AX88796 on arm + + [ Upstream Kernel Changes ] + + * vfs: pass struct path to __dentry_open() + * vfs: add i_op->open() + * vfs: export do_splice_direct() to modules + * vfs: introduce clone_private_mount() + * overlay filesystem + * overlayfs: add statfs support + * overlayfs: implement show_options + * overlay: overlay filesystem documentation + * fs: limit filesystem stacking depth + * overlayfs: follow header cleanup + * overlayfs: switch from d_alloc_root() to d_make_root() + * overlayfs: update touch_atime() usage + * rebase to v3.4-rc5 + - LP: #950490 + * rebase to v3.4-rc4 + * rebase to v3.4-rc3 + * rebase to v3.4-rc2 + * rebase to v3.4-rc1 + * rebase to v3.3 + * rebase to v3.3-rc7 + * rebase to v3.3-rc6 + * rebase to v3.3-rc5 + * rebase to v3.3-rc4 + - LP: #900802 + - LP: #930842 + * rebase to v3.3-rc3 + - LP: #924320 + - LP: #923316 + - LP: #923409 + - LP: #918254 + * rebase to v3.3-rc2 + * rebase to v3.3-rc1 + - LP: #795823 + - LP: #909419 + - LP: #910792 + - LP: #878701 + - LP: #724831 + + -- Leann Ogasawara Wed, 25 Jan 2012 06:50:04 -0800 + +linux (3.2.0-10.18) precise; urgency=low + + [ Tim Gardner ] + + * SAUCE: ecryptfs: Print inode on metadata error + + [ Upstream Kernel Changes ] + + * Revert "proc: enable writing to /proc/pid/mem" + - LP: #919115 + - CVE-2012-0056 + * (pre-stable) ALSA: HDA: Use LPIB position fix for Macbook Pro 7, 1 + - LP: #909419 + + -- Andy Whitcroft Tue, 24 Jan 2012 10:15:12 +0000 + +linux (3.2.0-10.17) precise; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: overlayfs -- fs: limit filesystem stacking depth" + * Revert "SAUCE: overlayfs -- overlay: overlay filesystem documentation" + * Revert "SAUCE: overlayfs -- overlayfs: implement show_options" + * Revert "SAUCE: overlayfs -- overlayfs: add statfs support" + * Revert "SAUCE: overlayfs -- overlay filesystem" + * Revert "SAUCE: overlayfs -- vfs: introduce clone_private_mount()" + * Revert "SAUCE: overlayfs -- vfs: export do_splice_direct() to modules" + * Revert "SAUCE: overlayfs -- vfs: add i_op->open()" + * ensure debian/ is not excluded from git by default + * add new scripting to handle buglinks in rebases + * ubuntu: overlayfs -- overlayfs: add statfs support + * ubuntu: overlayfs -- overlayfs: apply device cgroup and security + permissions to overlay files + - LP: #915941, #918212 + - CVE-2012-0055 + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Leann Ogasawara ] + + * Revert "SAUCE: dmar: disable if ricoh multifunction detected" + * [Config] Disable CONFIG_INTEL_IOMMU_DEFAULT_ON + - LP: #907377, #911236 + * [Config] Enable CONFIG_IRQ_REMAP + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: pass struct path to __dentry_open() + * ubuntu: overlayfs -- vfs: add i_op->open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Upstream Kernel Changes ] + + * (pre-stable) x86/PCI: amd: factor out MMCONFIG discovery + - LP: #647043 + * (pre-stable) PNP: work around Dell 1536/1546 BIOS MMCONFIG bug that + breaks USB + - LP: #647043 + + -- Leann Ogasawara Mon, 16 Jan 2012 07:10:08 -0800 + +linux (3.2.0-9.16) precise; urgency=low + + [ Andy Whitcroft ] + + * [Config] Enable numerous CONFIG_VIDEO_* cards on ARM + * [Config] pull ARM sound modules =m + * [Config] CONFIG_RTC_DRV_TEST is for testing only + * [Config] CONFIG_USB_DUMMY_HCD is testing only + * [Config] CONFIG_USB_FILE_STORAGE is deprecated + + [ Leann Ogasawara ] + + * Revert "[Config] Temporarily disable CONFIG_CAN_TI_HECC on armel" + * [Config] Enable CONFIG_HW_RANDOM_PASEMI=m + * [Config] Enable CONFIG_MMC_TMIO=m + * [Config] Enable CONFIG_MTD_NAND_FSL_ELBC=m + * [Config] Enable CONFIG_ISI=m + * [Config] Enable CONFIG_MMC=y + * [Config] Enable CONFIG_LIRC_PARALLEL=m + * [Config] Enable CONFIG_MAC_EMUMOUSEBTN=m + * [Config] Enable CONFIG_CHR_DEV_SG=y + * [Config] Enable CONFIG_GPIO_PCA953X=m + * [Config] Enable CONFIG_GPIO_TWL4030=m + * [Config] Enable CONFIG_INET_DIAG=m + * [Config] Enable CONFIG_NLS_ISO8859_1=m + * [Config] Enable CONFIG_NVRAM=m + * [Config] Enable CONFIG_SLIP=m + * [Config] Enable CONFIG_PC300TOO=m + * [Config] Enable CONFIG_TUN=y + * [Config] Enable CONFIG_NET_CLS_CGROUP=m + * [Config] Enable CONFIG_THERMAL=y + * [Config] Enable CONFIG_PPP=y + * [Config] Enable CONFIG_PCI_STUB=m + * Rebase to v3.2.1 + * [Config] Enable CONFIG_RTL8192E=m + * [Config] Enable CONFIG_RTS5139=m + + [ Stefan Bader ] + + * [Config] Make CONFIG_VIRTIO_(NET|BLK)=y + + [ Upstream Kernel Changes ] + + * ARM: restart: add restart hook to machine_desc record + * ARM: restart: allow platforms more flexibility specifying restart mode + * ARM: restart: move reboot failure handing into machine_restart() + * ARM: restart: remove argument to setup_mm_for_reboot() + * ARM: 7159/1: OMAP: Introduce local common.h files + * ARM: restart: only perform setup for restart when soft-restarting + * ARM: 7189/1: OMAP3: Fix build break in cpuidle34xx.c because of irq + function + * ARM: idmap: populate identity map pgd at init time using .init.text + * ARM: suspend: use idmap_pgd instead of suspend_pgd + * ARM: proc-*.S: place cpu_reset functions into .idmap.text section + * ARM: idmap: use idmap_pgd when setting up mm for reboot + * ARM: head.S: only include __turn_mmu_on in the initial identity mapping + * ARM: SMP: use idmap_pgd for mapping MMU enable during secondary booting + * ARM: 7194/1: OMAP: Fix build after a merge between v3.2-rc4 and ARM + restart changes + * ARM: lib: add call_with_stack function for safely changing stack + * ARM: reset: implement soft_restart for jumping to a physical address + * ARM: stop: execute platform callback from cpu_stop code + * ARM: kexec: use soft_restart for branching to the reboot buffer + * ARM: restart: omap: use new restart hook + * topdown mmap support + - LP: #861296 + + [ Upstream Kernel Changes ] + + * Rebase to v3.2.1 + + -- Leann Ogasawara Fri, 13 Jan 2012 20:32:08 +0100 + +linux (3.2.0-8.15) precise; urgency=low + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_ACPI_PROCFS + * Remove server from getabis + * Temporarily disable module check + * [Config] Disable CONFIG_MTD_TESTS + * [Config] Disable CONFIG_X86_E_POWERSAVER + * [Config] Set CONFIG_ARCNET=m + * [Config] Enable CONFIG_ATM_DUMMY=m + * [Config] Enable CONFIG_BLK_DEV_MD=y + * ubuntu: fsam7400 select CHECK_SIGNATURE and depend on X86 + * [Config] Enable CONFIG_BLK_DEV_SD=y + * [Config] Enable CONFIG_BLK_DEV_SR=y + * [Config] Enable CONFIG_BLK_DEV_UB=m + * [Config] Enable CONFIG_COPS=m + * [Config] Enable CONFIG_DVB_USB_EC168=m + * [Config] Enable CONFIG_ENC28J60=m + * [Config] Enable CONFIG_FB_UVESA=m + * [Config] Enable CONFIG_FB_ATY=m + * [Config] Enable CONFIG_BROADCOM_PHY=y + * [Config] Enable CONFIG_CICADA_PHY=y + * [Config] Enable CONFIG_DAVICOM_PHY=y + * [Config] Enable CONFIG_ICPLUS_PHY=y + * [Config] Enable CONFIG_LSI_ET1011C_PHY=y + * [Config] Enable CONFIG_LXT_PHY=y + * [Config] Enable CONFIG_MARVELL_PHY=y + * [Config] Enable CONFIG_NATIONAL_PHY=y + * [Config] Enable CONFIG_QSEMI_PHY=y + * [Config] Enable CONFIG_SMSC_PHY=y + * [Config] Enable CONFIG_VITESSE_PHY=y + * Add 3w-sas to scsi-modules + - LP: #776542 + + [ Mathieu Trudel-Lapierre ] + + * SAUCE: ipv6: make the net.ipv6.conf.all.use_tempaddr sysctl propagate + to interface settings + + [ Paolo Pisati ] + + * Revert "SAUCE: omap3: beagle: if rev unknown, assume xM revision C" + - LP: #912199 + * Revert "SAUCE: omap3: beagle: detect new xM revision B" + - LP: #912199 + * Revert "SAUCE: omap3: beaglexm: fix DVI initialization" + - LP: #912199 + + [ Upstream Kernel Changes ] + + * Bluetooth: Add support for BCM20702A0 [0a5c:21e3] + - LP: #906832 + + -- Leann Ogasawara Fri, 06 Jan 2012 10:02:03 -0800 + +linux (3.2.0-8.14) precise; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_SND_USB_6FIRE + - LP: #912197 + * rebase to mainline v3.2 final release + * updateconfigs following rebase to v3.2 final + * ubuntu: AUFS -- add BOM and automated update script + * ubuntu: AUFS -- include the aufs_types.h file in linux-libc-headers + - LP: #684666 + * ubuntu: AUFS -- update aufs-update to track new locations of headers + * ubuntu: AUFS -- clean up the aufs updater and BOM + * ubuntu: AUFS -- documentation on updating aufs2 + * ubuntu: AUFS -- aufs3-base.patch + * ubuntu: AUFS -- aufs3-standalone.patch + * ubuntu: AUFS -- fix undefined __devcgroup_inode_permission + * ubuntu: AUFS -- fix undefined security_path_link + * ubuntu: AUFS -- update to 4cf5db36bcd9748e8e7270022f295f84d1fc2245 + * ubuntu: AUFS -- updateconfigs following update + * ubuntu: AUFS -- suppress benign plink warning messages + - LP: #621195 + * ubuntu: AUFS -- enable in config and makefile + * ubuntu: AUFS -- disable in favor of overlayfs + * [Config] linux-virtual -- should include the extX modules + - LP: #912308 + + [ Tyler Hicks ] + + * SAUCE: eCryptfs: Improve statfs reporting + - LP: #885744 + + [ Upstream Kernel Changes ] + + * rebase to upstream v3.2 + + -- Leann Ogasawara Mon, 26 Dec 2011 20:24:30 -0800 + +linux (3.2.0-7.13) precise; urgency=low + + [ Upstream Kernel Changes ] + + * rebase to upstream 3.2-rc7 + + -- Leann Ogasawara Mon, 19 Dec 2011 09:14:34 -0800 + +linux (3.2.0-6.12) precise; urgency=low + + [ Upstream Kernel Changes ] + + * rebase to upstream v3.2-rc6 + + -- Leann Ogasawara Fri, 16 Dec 2011 10:19:02 -0800 + +linux (3.2.0-5.11) precise; urgency=low + + [ Andy Whitcroft ] + + * enforcer -- allow arch and flavour predicates to take lists + * enforcer -- simplify armel/armhf specific options + * enforcer -- fix incorrectly specified flavour matches + + [ Leann Ogasawara ] + + * [Config] Disable IRQ_REMAP + * [Config] Enable CONFIG_SENSORS_LM95245=m + * [Config] Enable CONFIG_SENSORS_MAX1668=m + * [Config] Enable CONFIG_SENSORS_NTC_THERMISTOR=m + * [Config] Enable CONFIG_SENSORS_MAX6639=m + * [Config] Enable CONFIG_SENSORS_MAX6642=m + * [Config] Enable CONFIG_SENSORS_LINEAGE=m + * [Config] Enable CONFIG_CRYPTO_SALSA20=m + * [Config] Enable CONFIG_PATA_TOSHIBA=m + * [Config] Enable CONFIG_POHMELFS=m + * [Config] Enable CONFIG_NET_PACKET_ENGINE=y + * [Config] Enable CONFIG_PATA_OPTI=m + * add overlayfs to virtual inclusion list + - LP: #903897 + * add veth to virtual inclusion list + - LP: #903897 + * SAUCE: resolve WARNING: at drivers/block/floppy.c:2929 do_fd_request + + [ Paolo Pisati ] + + * [Config] DEFAULT_MMAP_MIN_ADDR=32k on arm + - LP: #903346 + + [ Tim Gardner ] + + * [Config] CONFIG_LOCKUP_DETECTOR=y + - LP: #903615 + + [ Upstream Kernel Changes ] + + * rebase to upstream 55b02d2f + + -- Leann Ogasawara Mon, 12 Dec 2011 07:08:10 -0800 + +linux (3.2.0-4.10) precise; urgency=low + + [ Kyle McMartin ] + + * SAUCE: dmar: disable if ricoh multifunction detected + - LP: #894070 + + [ Seth Forshee ] + + * SAUCE: dell-wmi: Demote unknown WMI event message to pr_debug + - LP: #581312 + + [ Tim Gardner ] + + * Start new release, Bump ABI, rebase to 3.2-rc5 + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_SENSORS_AK8975=m + + -- Tim Gardner Sat, 10 Dec 2011 08:57:04 -0700 + +linux (3.2.0-3.9) precise; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: ext4: correct partial write discard size calculation + - LP: #894768 + + [ Leann Ogasawara ] + + * Revert "SAUCE: x86, microcode, AMD: Restrict microcode reporting" + - LP: #892615 + + [ Matthew Garrett ] + + * SAUCE: pci: Rework ASPM disable code + + [ Upstream Kernel Changes ] + + * x86: Fix boot failures on older AMD CPU's + - LP: #892615 + * EHCI : Fix a regression in the ISO scheduler + - LP: #899165 + + -- Leann Ogasawara Mon, 05 Dec 2011 10:37:36 -0800 + +linux (3.2.0-3.8) precise; urgency=low + + [ Andy Whitcroft ] + + * armhf -- add d-i configuration + * armhf -- disable ABI checks for armhf + * armhf -- add arch to getabis config + + -- Andy Whitcroft Sat, 03 Dec 2011 14:22:52 +0000 + +linux (3.2.0-3.7) precise; urgency=low + + [ Stefan Bader ] + + * SAUCE: x86/paravirt: PTE updates in k(un)map_atomic need to be + synchronous, regardless of lazy_mmu mode + - LP: #854050 + + [ Tim Gardner ] + + * rebase to v3.2-rc4 + + -- Leann Ogasawara Fri, 02 Dec 2011 11:53:56 -0800 + +linux (3.2.0-2.6) precise; urgency=low + + [ Andy Whitcroft ] + + * armhf -- fix omap flavour to build on armhf + * [Config] CONFIG_PATA_MACIO=y to fix MAC qemu boot + + [ Borislav Petkov ] + + * SAUCE: x86, microcode, AMD: Restrict microcode reporting + - LP: #892615 + + [ Colin Watson ] + + * Add pata_macio to pata-modules + + [ Tim Gardner ] + + * [Config] Prefer crda over wireless-crda + * [Config] Fix virtual inclusion list. + - LP: #897795 + + -- Leann Ogasawara Wed, 30 Nov 2011 06:09:35 -0800 + +linux (3.2.0-2.5) precise; urgency=low + + [ Paolo Pisati ] + + * [Config] PANEL_DVI=y + + -- Leann Ogasawara Mon, 28 Nov 2011 09:13:24 -0800 + +linux (3.2.0-2.4) precise; urgency=low + + [ Andy Whitcroft ] + + * rebase to v3.2-rc3 + + [ Leann Ogasawara ] + + * Revert "SAUCE: xen: Do not use pv spinlocks on HVM" + * Revert "fix ERROR: __devcgroup_inode_permission undefined" + * Revert "olpc_dcon_xo_1_5 needs delay.h" + * Revert "olpc_dcon_xo_1 needs delay.h" + * rebase to 6fe4c6d4 + * [Config] updateconfigs after rebase to 6fe4c6d4 + + [ Tim Gardner ] + + * [Config] Replace wireless-crda with crda,wireless-regdb + - LP: #856421 + * [Config] Relax the dependencies on crda + + [ Upstream Kernel Changes ] + + * (pre-stable) HID: bump maximum global item tag report size to 96 bytes + - LP: #724831 + * Ubuntu: remove coreutils|fileutils package dependency + - LP: #892814 + * iio: iio_event_getfd -- fix ev_int build failure + + [ Upstream Kernel Changes ] + + * Rebase to v3.2-rc3 + + -- Andy Whitcroft Thu, 24 Nov 2011 16:20:45 +0000 + +linux (3.2.0-1.3) precise; urgency=low + + [ Upstream Kernel Changes ] + + * Ubuntu: Add ext2 to fs-core-modules + - LP: #893395 + + -- Leann Ogasawara Mon, 21 Nov 2011 20:42:33 -0800 + +linux (3.2.0-1.2) precise; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_NFC and associated devices + * SAUCE: allow brcmsmac and b43 to both build + + [ Soren Hansen ] + + * Add ixgbe driver to d-i + - LP: #891969 + + -- Leann Ogasawara Mon, 21 Nov 2011 08:33:46 -0800 + +linux (3.2.0-1.1) precise; urgency=low + [ Andy Whitcroft ] + + * armhf -- enable armhf and create the first flavours + * SAUCE: ensure root is ready before running usermodehelpers in it + * [Config] enforcer -- ensure CONFIG_FAT_FS is built-in on arm + + [ Leann Ogasawara ] + + * Temporarily ignore module check + * [Config] Enable PCI_IOV on powerpc + * [Config] Temporarily disable CONFIG_PASEMI_MAC on powerpc + * rebase to v3.2-rc2 + * SAUCE: include for cpuidle34xx arm build + * SAUCE: include for linux/mtd/map.h arm build + * SAUCE: include and for mmc_core arm build + * SAUCE: select ARM_AMBA if OMAP3_EMU + * [Config] updateconfigs after select ARM_AMBA + * [Config] Temporarily disable CONFIG_KVM_BOOK3S_32 on powerpc + * [Config] Enable CONFIG_EXT2_FS=m + * [Config] Build in CONFIG_SATA_AHCI=y + * Resolve linux-image-extra's install dependency + + [ Seth Forshee ] + + * [Config] Enable EVENT_POWER_TRACING_DEPRECATED=y for powertop + * SAUCE: (drop after 3.2) Input: ALPS - move protocol information to + Documentation + * SAUCE: (drop after 3.2) Input: ALPS - add protocol version field in + alps_model_info + * SAUCE: (drop after 3.2) Input: ALPS - remove assumptions about packet + size + * SAUCE: (drop after 3.2) Input: ALPS - add support for protocol versions + 3 and 4 + * SAUCE: (drop after 3.2) Input: ALPS - add semi-MT support for v3 + protocol + * SAUCE: (drop after 3.2) Input: ALPS - add documentation for protocol + versions 3 and 4 + + [ Stefan Bader ] + + * [Config] Built-in xen-netfront and xen-blkfront + * Fix build of dm-raid45 and re-enable it + + [ Tim Gardner ] + + * [Config] CONFIG_USB_XHCI_HCD=y + - LP: #886167 + * [Config] CONFIG_R6040=m + - LP: #650899 + * SAUCE: Add a new entry (413c:8197) to Bluetooth USB device ID table + - LP: #854399 + * [Config] Consolidated amd64 server flavour into generic + * [Config] updateconfigs after rebase to 3.2-rc1 + * [Config] Disabled dm-raid4-5 + * [Config] Disabled ndiswrapper + * [Config] Disable vt6656 + * [Config] exclude ppp-modules for virtual flavour + * [Config] CONFIG_MEMSTICK_R592=m + - LP: #238208 + + [ Upstream Kernel Changes ] + + * CHROMIUM: seccomp_filter: new mode with configurable syscall filters + - LP: #887780 + * CHROMIUM: seccomp_filter: add process state reporting + - LP: #887780 + * CHROMIUM: seccomp_filter: Document what seccomp_filter is and how it + works. + - LP: #887780 + * CHROMIUM: x86: add HAVE_SECCOMP_FILTER and seccomp_execve + - LP: #887780 + * CHROMIUM: arm: select HAVE_SECCOMP_FILTER + - LP: #887780 + * CHROMIUM: seccomp_filters: move to btrees + * CHROMIUM: enable CONFIG_BTREE + * CHROMIUM: seccomp_filter: kill NR_syscall references + * CHROMIUM: seccomp_filters: guard all ftrace wrapper code + * CHROMIUM: seccomp_filters: clean up warnings; kref mistake + * CHROMIUM: seccomp_filter: remove "skip" from copy and add drop helper + * CHROMIUM: seccomp_filter: allow CAP_SYS_ADMIN management of execve + * CHROMIUM: seccomp_filter: inheritance documentation + * CHROMIUM: seccomp_filter: make inherited filters composable + * CHROMIUM: Fix seccomp_t compile error + - LP: #887780 + * CHROMIUM: Fix kref usage + - LP: #887780 + * CHROMIUM: enable CONFIG_SECCOMP_FILTER and CONFIG_HAVE_SECCOMP_FILTER + * rebase to v3.2-rc2 + + -- Leann Ogasawara Mon, 31 Oct 2011 09:24:39 -0400 + +linux (3.1.0-2.3) precise; urgency=low + + [ Tim Gardner ] + + * Add postinit and postrm scripts to the extras package + - LP: #882120 + + -- Leann Ogasawara Fri, 28 Oct 2011 12:48:33 -0700 + +linux (3.1.0-2.2) precise; urgency=low + + [ Andy Whitcroft ] + + * debian: add locking to protect debian/files from parallel update + + [ Leann Ogasawara ] + + * rebase to v3.1 + + [ Upstream Kernel Changes ] + + * rebase to v3.1 + + -- Leann Ogasawara Wed, 19 Oct 2011 07:12:38 -0700 + +linux (3.1.0-1.1) precise; urgency=low + + [ Andiry Xu ] + + * SAUCE: (drop during 3.2 merge) xHCI: AMD isoc link TRB chain bit quirk + - LP: #872811 + + [ Andy Whitcroft ] + + * Revert "ubuntu: compcache -- follow changes to bd_claim/bd_release" + - LP: #832694 + * Revert "ubuntu: compcache -- version 0.5.3" + - LP: #832694 + * [Config] standardise CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m + * [Config] Enable CONFIG_MACVTAP=m + - LP: #822601 + * record the compiler in the ABI and check for inconsistant builds + * [Config] move ECRYPT_FS back to =y for all architectures + - LP: #827197 + * [Config] enable CONFIG_DRM_VMWGFX=m + - LP: #698009 + * [Config] re-fix ECRYPT_FS=y + - LP: #827197 + * enforcer -- ensure we have CONFIG_ECRYPT_FS=y + - LP: #827197 + * [Config] dropping compcache configuration options + * [Config] standardise on HZ=250 + * SAUCE: headers_install: fix #include "..." usage for userspace + - LP: #824377 + * make module-inclusion selection retain the left overs + * add a new linux-image-extras package for virtual + + [ Colin Watson ] + + * Deliver more Atheros, Ralink, and iwlagn NIC drivers to d-i + + [ edwin_rong ] + + * SAUCE: Staging: add driver for Realtek RTS5139 cardreader + - LP: #824273 + + [ Greg Kroah-Hartman ] + + * SAUCE: staging: rts5139: add vmalloc.h to some files to fix the build. + - LP: #824273 + + [ Jesse Sung ] + + * SAUCE: Unregister input device only if it is registered + - LP: #839238 + + [ Jiri Kosina ] + + * SAUCE: HID: add MacBookAir4, 2 to hid_have_special_driver[] + + [ Joshua V. Dillon ] + + * SAUCE: HID: add support for MacBookAir4,2 keyboard. + + [ Kees Cook ] + + * [Config] enable and enforce SECCOMP_FILTER on x86 + + [ Keng-Yu Lin ] + + * [Config] Enable CONFIG_RTS5139=m on i386/amd64 + - LP: #824273 + + [ Leann Ogasawara ] + + * Revert "ubuntu: overlayfs -- ovl: make lower mount read-only" + * Revert "ubuntu: overlayfs -- fs: limit filesystem stacking depth" + * Revert "ubuntu: overlayfs -- ovl: improve stack use of lookup and + readdir" + * Revert "ubuntu: overlayfs -- ovl: fix overlayfs over overlayfs" + * Revert "ubuntu: overlayfs -- overlayfs: implement show_options" + * Revert "ubuntu: overlayfs -- overlayfs: add statfs support" + * Revert "ubuntu: overlayfs -- overlay filesystem" + * Revert "ubuntu: overlayfs -- overlay: overlay filesystem documentation" + * Revert "SAUCE: ARM: OMAP: Add macros for comparing silicon revision" + * Revert "SAUCE: OMAP: DSS2: check for both cpu type and revision, rather + than just revision" + * Revert "SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX" + * Revert "ubuntu: fsam7400 disable driver" + - LP: #876030 + * rebase to v3.1-rc1 + * [Config] updateconfigs after rebase to v3.1-rc1 + * rebase to v3.1-rc2 + * [Config] Updateconfigs after rebase to v3.1-rc2 + * ubuntu: Yama - update calls to generic_permission() and + inode->i_op->permission() + * ubuntu: ndiswrapper -- remove netdev_priv macro + * ubuntu: aufs -- Temporarily disable due to build failure + * [Config] Diable INTEL_MID_PTI on armel + * [Config] Temporarily disable CONFIG_FTMAC100 on armel + * [Config] Temporarily disable CONFIG_FTGMAC100 on armel + * [Config] Temporarily disable CONFIG_CAN_TI_HECC on armel + * [Config] Temporarily disable CONFIG_VIDEO_OMAP2_VOUT on armel + * [Config] Set CONFIG_DM_MIRROR=m on amd64, i386, and arm + * [Config] Set CONFIG_DM_MULTIPATH=m on amd64, i386, and arm + * [Config] Set CONFIG_DM_SNAPSHOT=m on amd64, i386, and arm + * [Config] Enable CONFIG_EDAC_AMD8111=m on powerpc + * [Config] Enable CONFIG_EDAC_AMD8131=m on powerpc + * [Config] Enable CONFIG_EDAC_CPC925=m on powerpc + * [Config] Enable CONFIG_EDAC_PASEMI=m on powerpc + * [Config] Enable CONFIG_ECHO=m on powerpc + * [Config] Enable CONFIG_ET131X=m on powerpc + * [Config] Set CONFIG_FB_MATROX=m + * [Config] Enable CONFIG_FB_UDL=m on powerpc + * [Config] Set CONFIG_FB_VIRTUAL=n + * [Config] Enable CONFIG_FB_VGA16=m on powerpc + * [Config] Enable CONFIG_GPIO_MAX732X=m on arm + * [Config] Enable CONFIG_GPIO_PCF857X=m on arm + * [Config] Set CONFIG_HOTPLUG_PCI_FAKE=m + * [Config] Enable CONFIG_HOTPLUG_PCI=y on powerpc + * [Config] Enable CONFIG_HOTPLUG_PCI_CPCI=y on powerpc + * [Config] Enable CONFIG_HP_ILO=m on powerpc-smp + * [Config] Enable CONFIG_I2C_PASEMI=m on powerpc + * [Config] Enable CONFIG_IBM_BSR=m on powerpc + * [Config] Enable CONFIG_IBMVETH=m on powerpc + * [Config] Enable CONFIG_IDE_PHISON=m on powerpc + * [Config] Enable CONFIG_IGB=m on powerpc + * [Config] Enable CONFIG_IIO=m on powerpc + * [Config] Enable CONFIG_INFINIBAND_NES=m + * [Config] Enable CONFIG_IPMI_HANDLER=m on arm + * [Config] Enable CONFIG_IWL3945=m on powerpc + * [Config] Disable CONFIG_KVM_BOOK3S_64 + * [Config] Enable CONFIG_LAPBETHER=m on arm + * [Config] Enable CONFIG_LEDS_GPIO=m on powerpc + * [Config] Enable CONFIG_LEDS_CLEVO_MAIL=m all arch's + * [Config] Enable CONFIG_LEDS_PCA9532=m on powerpc + * [Config] Enable CONFIG_LEDS_PCA955X=m on powerpc + * [Config] Enable CONFIG_LEDS_TRIGGER_DEFAULT_ON=m on powerpc + * [Config] Set CONFIG_LEDS_TRIGGER_HEARTBEAT=m on arm and powerpc + * [Config] Set CONFIG_LEDS_TRIGGER_TIMER=m on powerpc + * [Config] Enable CONFIG_LINE6_USB=m on arm and powerpc + * [Config] Enable CONFIG_MEMSTICK=m on arm + * [Config] Enable CONFIG_MTD_AFS_PARTS=m on arm + * [Config] Enable CONFIG_MTD_ALAUDA=m on arm + * [Config] Enable CONFIG_MTD_AR7_PARTS=m on arm + * [Config] Enable CONFIG_MTD_ARM_INTEGRATOR=m on arm + * [Config] Enable CONFIG_MOXA_SMARTIO=m on powerpc + * [Config] Enable CONFIG_MTD_DATAFLASH=m on arm + * [Config] Enable CONFIG_MTD_GPIO_ADDR=m on arm + * [Config] Enable CONFIG_MTD_IMPA7=m on arm + * [Config] Enable CONFIG_MTD_NAND_GPIO=m on arm + * [Config] Enable CONFIG_MTD_NAND_NANDSIM=m on arm + * [Config] Enable CONFIG_MTD_NAND_PASEMI=m on powerpc + * [Config] Enable CONFIG_MTD_NAND_PLATFORM=m on arm + * [Config] Enable CONFIG_MTD_NAND_TMIO=m on arm + * [Config] Enable CONFIG_MTD_SST25L=m on arm + * [Config] Enable CONFIG_NET_CLS_CGROUP=y on arm + * [Config] Enable CONFIG_NET_CLS_FLOW=m on arm + * [Config] Enable CONFIG_NET_CLS_U32=m on arm + * [Config] Enable CONFIG_NET_DCCPPROBE=m on arm + * [Config] Enable CONFIG_NET_SCH_INGRESS=m on arm + * [Config] Enable CONFIG_NET_TCPPROBE=m on arm + * [Config] Enable CONFIG_PASEMI_MAC=m on powerpc + * [Config] Enable CONFIG_PATA_NS87410=m on powerpc + * [Config] Enable CONFIG_I2C_GPIO=m on powerpc64-smp + * [Config] Enable CONFIG_PANEL=m on powerpc + * [Config] Enable CONFIG_PATA_CMD640_PCI=m on powerpc + * SAUCE: x86: reboot: Make Dell Latitude E6520 use reboot=pci + - LP: #833705 + * [Config] Add CONFIG_EFI_VARS=y to the enforcer + - LP: #837332 + * [Config] Update CONFIG_EFI_VARS enforcer check + * [Config] Add aufs to virtual flavor inclusion list + - LP: #844159 + * SAUCE: x86: reboot: Make Dell Optiplex 790 use reboot=pci + - LP: #818933 + * SAUCE: x86: reboot: Make Dell Optiplex 990 use reboot=pci + - LP: #768039 + * SAUCE: x86: reboot: Make Dell Latitude E6220 use reboot=pci + - LP: #838402 + * [Config] Add igbvf to the virtual flavor inclusion list + - LP: #794570 + * [Config] Add ixgbevf to the virtual inclusion list + - LP: #872411 + * [Config] Transition -generic and -server to be identical + * rebase to v3.1-rc10 + + [ Luke Yelavich ] + + * [Config] Disable legacy IDE drivers on powerpc + + [ Ming Lei ] + + * SAUCE: fireware: add NO_MSI quirks for o2micro controller + - LP: #801719 + * SAUCE: ata_piix: make DVD Drive recognisable on systems with Intel + Sandybridge chipsets(v2) + - LP: #737388, #782389, #794642 + + [ Paolo Pisati ] + + * [Config] Compile-in vfat support for armel + - LP: #853783 + + [ Randy Dunlap ] + + * SAUCE: staging: fix rts5139 depends & build + - LP: #824273 + + [ Rene Bolldorf ] + + * SAUCE: (drop after 3.0) ideapad: Check if acpi already handle backlight + power in 'ideapad_backlight_notify_power' to avoid a page fault + + [ Seth Forshee ] + + * SAUCE: (no-up) Input: elantech - Add v3 hardware support + - LP: #681904 + * SAUCE: (drop after 3.1) usb_storage: Don't freeze in usb-stor-scan + - LP: #810020 + + [ Stefan Bader ] + + * (config) Package macvlan and macvtap for virtual + * [Config] Force perf to use libiberty for demangling + - LP: #783660 + * SAUCE: xen: Do not use pv spinlocks on HVM + - LP: #838026 + + [ Tim Gardner ] + + * [Config] Clean up tools rules + * [Config] Package x86_energy_perf_policy and turbostat + - LP: #797556 + * rebase to v3.1-rc3 + * [Config] Simplify binary-udebs dependencies + * [Config] kernel preparation cannot be parallelized + * [Config] Linearize module/abi checks + * [Config] Linearize and simplify tree preparation rules + * [Config] Build kernel image in parallel with modules + * [Config] Set concurrency for kmake invocations + * [Config] Improve install-arch-headers speed + * [Config] Fix binary-perarch dependencies + * [Config] Removed stamp-flavours target + * [Config] Serialize binary indep targets + * [Config] Use build stamp directly + * [Config] Restore prepare-% target + * rebase to v3.1-rc4 + * rebase to v3.1-rc5 + * [Config] Disable makedumpfile for i386/amd64 + * rebase to v3.1-rc6 + * [Config] Fix binary-% build target + * rebase to v3.1-rc7 + * rebase to v3.1-rc8 + * SAUCE: Add a new entry (413c:8197) to Bluetooth USB device ID table + - LP: #854399 + * [Config] Enable ftrace support in the mac80211 layer + - LP: #865171 + * rebase to v3.1-rc9 + * SAUCE: usb/core/devio.c: Check for printer class specific request + - LP: #872711 + + [ Upstream Kernel Changes ] + + * overlay filesystem + * overlayfs: add statfs support + * overlayfs: implement show_options + * overlay: overlay filesystem documentation + * fs: limit filesystem stacking depth + + [ Will Drewry ] + + * SAUCE: seccomp_filter: new mode with configurable syscall filters + * SAUCE: seccomp_filter: add process state reporting + * SAUCE: seccomp_filter: Document what seccomp_filter is and how it + works. + * SAUCE: seccomp_filter: add HAVE_SECCOMP_FILTER and seccomp_execve + + [ Upstream Kernel Changes ] + + * rebase to v3.1-rc1 + * rebase to v3.1-rc2 + * rebase to v3.1-rc3 + +CONFIG_BLK_DEV_BSGLIB=y + +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 + -CONFIG_VIDEO_OMAP2_VOUT_VRFB=y + * rebase to v3.1-rc4 + * rebase to v3.1-rc5 + * rebase to v3.1-rc6 + * rebase to v3.1-rc7 + * rebase to v3.1-rc8 + * rebase to v3.1-rc9 + * rebase to v3.1-rc10 + + -- Leann Ogasawara Wed, 10 Aug 2011 15:43:38 -0700 + +linux (3.1.0-1.0) oneiric; urgency=low + + [ Leann Ogasawara ] + + * Open P-series + + -- Leann Ogasawara Wed, 10 Aug 2011 13:42:40 -0700 + +linux (3.0.0-8.10) oneiric; urgency=low + + [ Adam Jackson ] + + * SAUCE: drm/i915/pch: Fix integer math bugs in panel fitting + - LP: #753994 + + [ John Johansen ] + + * [Config] Enable missing IPv6 options + + [ Leann Ogasawara ] + + * [Config] Disable config IWLWIFI_DEVICE_SVTOOL + - LP: #819925 + * Rebase to 3.0.1 + + [ Upstream Kernel Changes ] + + * x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message + * ALSA: hda - Turn on extra EAPDs on Conexant codecs + - LP: #783582 + * KVM: Remove SMEP bit from CR4_RESERVED_BITS + - LP: #796476 + * KVM: Add SMEP support when setting CR4 + - LP: #796476 + * KVM: Mask function7 ebx against host capability word9 + - LP: #796476 + * KVM: Add instruction fetch checking when walking guest page table + - LP: #796476 + + [ Upstream Kernel Changes ] + + * rebase to v3.0.1 + + -- Leann Ogasawara Fri, 05 Aug 2011 11:32:25 -0700 + +linux (3.0.0-7.9) oneiric; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] add local prefix to oss local change_bits" + * Revert "SAUCE: add tracing for user initiated readahead requests" + * Revert "SAUCE: vfs: Add a trace point in the mark_inode_dirty function" + * Revert "SAUCE: Input: ALPS - Enable Intellimouse mode for Lenovo + Zhaoyang E47" + * Revert "SAUCE: fix documentation strings for struct input_keymap_entry" + * Revert "SAUCE: vt -- fix handoff numbering to 1..n and add range checks + (grub)" + * Revert "SAUCE: vt -- fix handoff numbering to 1..n and add range + checks" + * Revert "SAUCE: vt -- allow grub to request automatic vt_handoff" + * Revert "SAUCE: vt -- maintain bootloader screen mode and content until + vt switch" + * [Config] enable CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 + - LP: #816035 + * ubuntu: Yama: if an underlying filesystem provides a permissions op use + it + * SAUCE: (no-up) add tracing for user initiated readahead requests + * SAUCE: vt -- maintain bootloader screen mode and content until vt + switch + * SAUCE: vt -- allow grub to request automatic vt_handoff + + [ Arjan van de Ven ] + + * SAUCE: (no-up) vfs: Add a trace point in the mark_inode_dirty function + + [ Kees Cook ] + + * Revert "SAUCE: (no-up) Disable building the ACPI debugfs source" + * [Config] enforce ACPI_CUSTOM_METHOD disabled + + [ Keng-Yu Lin ] + + * SAUCE: (no-up) Input: ALPS - Enable Intellimouse mode for Lenovo + Zhaoyang E47 + - LP: #632884, #803005 + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_BLK_DEV_CMD64X=m on powerpc + - LP: #513131 + * [Config] Enable CONFIG_RT2800PCI_RT53XX=y + - LP: #815064 + + [ Rezwanul Kabir ] + + * SAUCE: (no-up) Add support for Intellimouse Mode in ALPS touchpad on + Dell E2 series Laptops + - LP: #632884 + + [ Upstream Kernel Changes ] + + * Revert "yama: if an underlying filesystem provides a permissions op use + it" + * Revert "Add support for Intellimouse Mode in ALPS touchpad on Dell E2 + series Laptops" + * Revert "tty: include linux/slab.h for kfree" + * Revert "gpio/ml_ioh_gpio: include linux/slab.h for kfree" + * Revert "pch_dma: add include/slab.h for kfree" + * mmc: Added quirks for Ricoh 1180:e823 lower base clock frequency + - LP: #773524 + * oss: rename local change_bits to avoid powerpc bitsops.h definition + + -- Leann Ogasawara Mon, 25 Jul 2011 09:08:01 -0700 + +linux (3.0.0-7.8) oneiric; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: overlayfs -- overlayfs: add statfs support + * [Config] enable CONFIG_OVERLAYFS + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_ALIM7101_WDT=m on powerpc + * [Config] Enable CONFIG_ASUS_OLED=m on powerpc + * [Config] Disable CONFIG_ATM_DUMMY on arm + * [Config] Enable CONFIG_BLK_DEV_DRBD=m on powerpc + * Temporarily disable module check on arm + * Rebase to 3.0 final + * [Config] Enable CONFIG_CAN_TI_HECC=m on arm + * [Config] Set CONFIG_CDROM_PKTCDVD=m on amd64 and i386 + * [Config] Enable CONFIG_CRYPTO_CCM=m on powerpc + * [Config] Enable CONFIG_CRYPTO_DEV_HIFN_795X=m on powerpc + * [Config] Enable CONFIG_CRYPTO_GCM=m on powerpc + * [Config] Set CRYPTO_LZO=m on powerpc64-smp + * [Config] Enable CONFIG_DM9000=m on arm + * [Config] Set CONFIG_DISPLAY_SUPPORT=m on arm + * [Config] Enable CONFIG_DL2K=m on amd64 and i386 + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: add i_op->open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- ovl: fix overlayfs over overlayfs + * ubuntu: overlayfs -- ovl: improve stack use of lookup and readdir + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + * ubuntu: overlayfs -- ovl: make lower mount read-only + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Tim Gardner ] + + * [Config] Add enic/fnic to udebs + - LP: #801610 + + [ Upstream Kernel Changes ] + + * yama: if an underlying filesystem provides a permissions op use it + + [ Major Kernel Changes ] + + * Rebase to 3.0 final + + -- Leann Ogasawara Thu, 21 Jul 2011 07:01:32 -0700 + +linux (3.0.0-6.7) oneiric; urgency=low + + [ Eagon Yager ] + + * [Config] Fix misspelled 'skipmodule' in arm makefile. + + [ Keng-Yu Lin ] + + * SAUCE: Input: ALPS - Enable Intellimouse mode for Lenovo Zhaoyang E47 + - LP: #632884, #803005 + + [ Leann Ogasawara ] + + * Revert "[Config] Temporarily disable CONFIG_SMC91X on armel-omap" + * Revert "[Config] Temporarily Disable CONFIG_BRCMSMAC on arm" + * Revert "[Config] Temporarily Disable CONFIG_RTL8192SE on powerpc" + * Revert "[Config] Temporarily Disable CONFIG_RTL8192SE on arm" + * Revert "[Config] Temporarily disable CONFIG_BRCMSMAC on powerpc" + * [Config] Set CONFIG_ACPI_PCI_SLOT=m + * [Config] Set CONFIG_ACPI_SBS=m + * [Config] Set CONFIG_ACPI_WMI=m + * [Config] Set CONFIG_AD7150=m on arm + * [Config] Set CONFIG_AD7152=m on arm + * [Config] Drop CONFIG_GPIO_S5PV210 + * [Config] Drop CONFIG_GPIO_S5PC100 + * [Config] Drop CONFIG_GPIO_PLAT_SAMSUNG + * [Config] Drop CONFIG_GPIO_EXYNOS4 + + [ Stefan Bader ] + + * SAUCE: Re-enable RODATA for i386 virtual + - LP: #809838 + + [ Upstream Kernel Changes ] + + * Revert "Quirk to fix suspend/resume on Lenovo Edge 11,13,14,15" + * (drop after 3.0.0) acer-wmi: Add support for Aspire 1830 wlan hotkey + - LP: #771758 + + -- Leann Ogasawara Wed, 20 Jul 2011 06:36:02 -0700 + +linux (3.0.0-5.6) oneiric; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_RTL8192CU=m + * Rebase to -rc7 + + -- Tim Gardner Mon, 11 Jul 2011 22:13:50 +0100 + +linux (3.0.0-4.5) oneiric; urgency=low + + [ Ming Lei ] + + * SAUCE: fix yama_ptracer_del lockdep warning + - LP: #791019 + + [ Seth Forshee ] + + * SAUCE: (drop after 3.0) asus-wmi: Add callback for hotkey filtering + * SAUCE: (drop after 3.0) eeepc-wmi: Add support for T101MT Home/Express Gate key + * SAUCE: (drop after 3.0) asus-wmi: Enable autorepeat for hotkey input device + * [Config] CONFIG_{ASUS,ASUS_NB,EEEPC}_WMI=m + - LP: #805218 + + [ Tim Gardner ] + + * [Config] updateconfigs after rebase to -rc6+ + Rebased against 4dd1b49c6d215dc41ce50c80b4868388b93f31a3 + * Adopt a 3 digit verion, e.g., 3.0.0-x.x + * Revert "UBUNTU: add dependancies for module-init-tools" + This dependency is no longer required for a 3 digit version. + + -- Tim Gardner Tue, 05 Jul 2011 14:03:04 +0100 + +linux (3.0-3.4) oneiric; urgency=low + + [ Keng-Yu Lin ] + + * SAUCE: Revert: "dell-laptop: Toggle the unsupported hardware + killswitch" + - LP: #775281 + + [ Leann Ogasawara ] + + * rebase to v3.0-rc5 + * [Config] updateconfigs after rebase to 3.0-rc5 + + [ Tim Gardner ] + + * [Config] Remove ubuntu/rtl8192se + * [Config] Added armel ABI files + * [Config] Removed armel versatile flavour + * [Config] CONFIG_INTEL_MEI=m + - LP: #716867 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Enable auto-parser as default for Conexant codecs + + [ Upstream Kernel Changes ] + + * rebase to v3.0-rc5 + + -- Leann Ogasawara Thu, 30 Jun 2011 14:27:10 +0100 + +linux (3.0-2.3) oneiric; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update to 0e2bafab74f0d1463383faeb93f9fc5eb8c2c54e + + [ Leann Ogasawara ] + + * rebase to v3.0-rc4 + * [Config] updateconfigs after rebase to 3.0-rc4 + * fix ERROR: __devcgroup_inode_permission undefined + + [ Stefan Bader ] + + * SAUCE: iscsitarget: Remove driver from the kernel + + [ Tim Gardner ] + + * SAUCE: rtl8192se: Force a build for a 2.6/3.0 kernel + * [Config] Add grub-efi as a recommended bootloader for server and + generic + - LP: #800910 + + [ Upstream Kernel Changes ] + + * Fix node_start/end_pfn() definition for mm/page_cgroup.c + + [ Leann Ogasawara ] + + * rebase to v3.0-rc4 + + -- Leann Ogasawara Fri, 24 Jun 2011 11:51:12 -0700 + +linux (3.0-1.2) oneiric; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_CAN_CALC_BITTIMING + + [ Leann Ogasawara ] + + * rebase to v3.0-rc3 + * [Config] updateconfigs after rebase to 3.0-rc3 + + [ Upstream Kernel Changes ] + + * perf: clear out make flags when calling kernel make kernelver + + [ Leann Ogasawara ] + + * rebase to v3.0-rc3 + + -- Leann Ogasawara Tue, 14 Jun 2011 07:25:35 -0700 + +linux (3.0-0.1) oneiric; urgency=low + + [ Andy Whitcroft ] + + * use the packaging version in the kernel + * use the kernels idea of its version for version_signature + * add dependancies for module-init-tools + * update control files to version 3 + * printchanges/insertchanges allow override of prev_release + * correct Vcs-Git: to point to oneiric + + [ Leann Ogasawara ] + + * rebase to v3.0-rc1 + * [Config] updateconfigs after rebase to 3.0-rc1 + * ubuntu: dm-raid4-5 fix up build failure + * [Config] Temporarily Disable CONFIG_GPIO_EXYNOS4 on arm + * [Config] Temporarily Disable CONFIG_GPIO_PLAT_SAMSUNG on arm + * [Config] Temporarily Disable CONFIG_GPIO_S5PC100 on arm + * [Config] Temporarily Disable CONFIG_GPIO_S5PV210 on arm + * [Config] Temporarily disable CONFIG_BRCMSMAC on powerpc + * [Config] Temporarily Disable CONFIG_BRCMSMAC on arm + * [Config] Temporarily Disable CONFIG_RTL8192SE on arm + * [Config] Temporarily Disable CONFIG_RTL8192SE on powerpc + * [Config] Temporarily disable CONFIG_SMC91X on armel-omap + * rebase to v3.0-rc2 + + [ Manoj Iyer ] + + * SAUCE: mmc: Enable MMC card reader for RICOH [1180:e823] + - LP: #790754 + + [ Upstream Kernel Changes ] + + * Revert "x86 idle: EXPORT_SYMBOL(default_idle, pm_idle) only when APM + demands it" + * drm/i915: fix regression after clock gating init split + + [ Major Kernel Changes ] + + * rebase from v2.6.39 to v3.0-rc1 + * rebase from v3.0-rc1 to v3.0-rc2 + + -- Andy Whitcroft Thu, 09 Jun 2011 15:18:33 +0100 + +linux (2.6.39-3.10) oneiric; urgency=low + + [ Colin Ian King ] + + * SAUCE: S3 early resume debug via keyboard LEDs + + [ Ingo Molnar ] + + * ubuntu: nx-emu - i386: NX emulation + * ubuntu: nx-emu - i386: mmap randomization for executable mappings + + [ Leann Ogasawara ] + + * Revert "[Config] Disable CONFIG_FT1000 on powerpc64-smp" + * Revert "[Config] Disable CONFIG_DM_RAID45" + * [Config] enable CONFIG_BRCMFMAC=y + * [Config] enable CONFIG_MDIO_BITBANG=m across all arch's and flavors + * [Config] enable CONFIG_VIDEO_OUTPUT_CONTROL=m on armel-omap + + [ Robert Nelson ] + + * SAUCE: omap3: beagle: detect new xM revision B + - LP: #770679 + * SAUCE: omap3: beagle: detect new xM revision C + - LP: #770679 + * SAUCE: omap3: beagle: if rev unknown, assume xM revision C + - LP: #770679 + + [ Stefan Bader ] + + * SAUCE: Convert dm-raid45 to new block plugging + + -- Leann Ogasawara Mon, 23 May 2011 11:46:43 -0700 + +linux (2.6.39-3.9) oneiric; urgency=low + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_SCSI_LPFC_DEBUG_FS + * rebase to v2.6.39 + * [Config] enable CONFIG_LLC2=m across all arch's and flavours + * [Config] enable CONFIG_INPUT_APANEL=m + + [ Thomas Schlichter ] + + * SAUCE: vesafb: mtrr module parameter is uint, not bool + - LP: #778043 + * SAUCE: vesafb: enable mtrr WC by default + - LP: #778043 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc7 to v2.6.39 + + -- Andy Whitcroft Fri, 20 May 2011 09:52:32 +0100 + +linux (2.6.39-2.8) oneiric; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-37" + * Revert "ubuntu: AUFS -- aufs2-base.patch aufs2.1-37" + * Revert "[Config] Disable CONFIG_AUFS_FS" + * ubuntu: AUFS -- aufs2-base.patch aufs2.1-39 + * ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-39 + * ubuntu: AUFS -- update to c6b76974311efc5bf3eddf921cd015b6aae46935 + * ubuntu: AUFS -- clean up the aufs updater and BOM + * ubuntu: AUFS -- documentation on updating aufs2 + + [ Kees Cook ] + + * ubuntu: Yama - LSM hooks + * ubuntu: Yama - create task_free security callback + * ubuntu: Yama - add ptrace relationship tracking interface + * ubuntu: Yama - unconditionally chain to Yama LSM + + [ Leann Ogasawara ] + + * Revert "SAUCE: Fix drivers/staging/easycap FTBS" + * Revert "[Config] Disable CONFIG_EASYCAP" + * ubuntu: fsam7400 disable driver + * ubuntu: omnibook disable driver + * ubuntu: rfkill disable driver + + [ Tim Gardner ] + + * SAUCE: Fix extra reference in fb_open() + + -- Leann Ogasawara Mon, 16 May 2011 09:23:56 -0700 + +linux (2.6.39-2.7) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc7 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc6 to v2.6.39-rc7 + + -- Leann Ogasawara Tue, 10 May 2011 10:18:28 +0200 + +linux (2.6.39-1.6) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc6 + * SAUCE: [arm] fixup __aeabi_uldivmod undefined build error + + [ Tim Gardner ] + + * [Config] updateconfigs after rebase to 2.6.39-rc6 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc5 to v2.6.39-rc6 + - LP: #740126 + + -- Leann Ogasawara Thu, 05 May 2011 09:46:12 -0700 + +linux (2.6.39-0.5) oneiric; urgency=low + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: Revert "x86, hibernate: Initialize mmu_cr4_features during boot" + - LP: #764758 + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc5 + * [Config] updateconfigs following rebase to v2.6.39-rc5 + + [ Paolo Pisati ] + + * [Config] s/USB_MUSB_TUSB6010/USB_MUSB_OMAP2PLUS/ on omap3 to get musb + - LP: #759913 + + [ Stefan Bader ] + + * Include nls_iso8859-1 for virtual images + - LP: #732046 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc4 to v2.6.39-rc5 + + -- Leann Ogasawara Wed, 27 Apr 2011 06:39:42 -0700 + +linux (2.6.39-0.4) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc4 + * [Config] updateconfigs following rebase to v2.6.39-rc4 + * fixup powerpc implicit declaration of function + 'crash_kexec_wait_realmode' + * [Config] Disable CONFIG_FT1000 on powerpc64-smp + + [ Tim Gardner ] + + * [Config] CONFIG_TRANSPARENT_HUGEPAGE=y + - LP: #769503 + * [Config] Add cachefiles.ko to virtual flavour + - LP: #770430 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc3 to v2.6.39-rc4 + + -- Leann Ogasawara Tue, 19 Apr 2011 06:25:20 -0700 + +linux (2.6.39-0.3) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc3 + * crash_kexec_wait_realmode() undefined when !SMP + + [ Tim Gardner ] + + * [Config] CONFIG_PM_ADVANCED_DEBUG=y for i386/amd64 + - LP: #632327 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc2 to v2.6.39-rc3 + + -- Leann Ogasawara Tue, 12 Apr 2011 06:52:24 -0700 + +linux (2.6.39-0.2) oneiric; urgency=low + + [ Gustavo F. Padovan ] + + * SAUCE: Revert "Bluetooth: Add new PID for Atheros 3011" + - LP: #720949 + + [ John Johansen ] + + * AppArmor: Fix masking of capabilities in complain mode + - LP: #748656 + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc2 + * [Config] updateconfigs following rebase to v2.6.39-rc2 + * hv_mouse needs delay.h + * olpc_dcon_xo_1 needs delay.h + * olpc_dcon_xo_1_5 needs delay.h + * Update dropped.txt for Oneiric + + [ Steve Langasek ] + + * [Config] Make linux-libc-dev coinstallable under multiarch + - LP: #750585 + + [ Upstream Kernel Changes ] + + * x86, hibernate: Initialize mmu_cr4_features during boot + - LP: #752870 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc1 to v2.6.39-rc2 + + -- Leann Ogasawara Wed, 06 Apr 2011 11:04:15 -0700 + +linux (2.6.39-0.1) oneiric; urgency=low + + [ Brad Figg ] + + * [Config] Set CONFIG_NR_CPUS=256 for amd64 generic + - LP: #737124 + + [ Henrik Rydberg ] + + * SAUCE: HID: hid-ntrig: add support for 1b96:0006 model + * SAUCE: HID: ntrig: fix suspend/resume on recent models + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: (drop after 2.6.39) v4l: make sure drivers supply a zeroed + struct v4l2_subdev + - LP: #745213 + + [ Kees Cook ] + + * [Config] packaging: adjust perms on vmlinuz as well + * SAUCE: nx-emu: further clarify dmesg reporting + - LP: #745181 + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc1 + * [Config] updateconfigs following rebase to v2.6.39-rc1 + * [Config] Disable CONFIG_DM_RAID45 + * [Config] Disable CONFIG_SCSI_ISCSITARGET + * [Config] Disable CONFIG_EASYCAP + * [Config] Disable CONFIG_AUFS_FS + * update bnx2 firmware files in d-i/firmware/nic-modules + * xhci-pci.c resolve implicit declaration of kzalloc + * [Config] Enable CONFIG_DRM_PSB for only x86 + * [Config] Enable CONFIG_RTS_PSTOR for only x86 + * mfd/asic3: Fix typo, s/irq_data/data/ + + [ Luke Yelavich ] + + * [Config] Disable CONFIG_CRASH_DUMP on 32-bit powerpc kernels + - LP: #745358 + * [Config] Disable CONFIG_DRM_RADEON_KMS on powerpc kernels + * [Config] Build some framebuffer drivers as modules for powerpc kernels. + + [ Manoj Iyer ] + + * SAUCE: thinkpad-acpi: module autoloading for newer Lenovo ThinkPads. + - LP: #745217 + + [ Tim Gardner ] + + * SAUCE: INR_OPEN=4096 + - LP: #663090 + * SAUCE: Increase the default hard limit for open FDs to 4096 + - LP: #663090 + + [ Upstream Kernel Changes ] + + * (drop after 2.6.39-rc1) arm: versatile : Fix typo introduced in irq + namespace cleanup + * (drop after 2.6.39-rc1) [media] staging: altera-jtag needs delay.h + * ALSA: pcm: fix infinite loop in snd_pcm_update_hw_ptr0() + + [ Major Kernel Changes ] + + * rebase from v2.6.38 to v2.6.39-rc1 + + -- Leann Ogasawara Thu, 31 Mar 2011 12:50:10 -0700 + +linux (2.6.39-0.0) oneiric; urgency=low + + [ Leann Ogasawara ] + + * Open Oneiric + + -- Leann Ogasawara Thu, 31 Mar 2011 12:29:23 -0700 + +linux (2.6.38-7.39) natty; urgency=low + + [ Leann Ogasawara ] + + * No change upload. This is just to rebuild with gcc-4.5.2-7ubuntu1. + + -- Leann Ogasawara Thu, 24 Mar 2011 09:27:45 -0700 + +linux (2.6.38-7.38) natty; urgency=low + + [ Leann Ogasawara ] + + * No change upload take 2. 2.6.38-7.37 was accidentally uploaded before + gcc-4.5.2-6ubuntu5 finished building on all arches. + + -- Leann Ogasawara Tue, 22 Mar 2011 06:12:47 -0700 + +linux (2.6.38-7.37) natty; urgency=low + + [ Leann Ogasawara ] + + * No change upload. This is just to rebuild with gcc-4.5.2-6ubuntu5. + + -- Leann Ogasawara Sun, 20 Mar 2011 16:02:48 -0700 + +linux (2.6.38-7.36) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: KLUDGE: work around failed 'shrink-wrap' compiler + optimisation" + * purge last vestiges of maverick + * [Config] switch CONFIG_FB_VESA back to module + + [ Chris Wilson ] + + * SAUCE: drm/i915: Fix pipelined fencing + - LP: #717114 + + [ Loïc Minier ] + + * Include nls_cp437 module in virtual for fat + - LP: #732046 + * Support arch= cross-compilation for any arch + * Fix couple of typos in 0-common-vars.mk + * Enforce DEFAULT_MMAP_MIN_ADDR on armhf + * Add armhf to Debian -> Linux arch map + * Add initial armhf.mk + * Enable common packages for armhf + + [ Upstream Kernel Changes ] + + * Yama: fix default relationship to check thread group + - LP: #737676 + + -- Andy Whitcroft Fri, 18 Mar 2011 18:18:02 +0000 + +linux (2.6.38-7.35) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to 2fbfac4e053861925fa3fffcdc327649b09af54c + * rebase fixes bug #715330 + * [Config] disable CONFIG_SCSI_QLA_ISCSI for powerpc 32bit to fix FTBS + * rebase to v2.6.38 final + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: Apply OPTION_BLACKLIST_SENDSETUP also for ZTE MF626 + - LP: #636091 + + [ Tim Gardner ] + + * [Confg] CONFIG_BOOT_PRINTK_DELAY=y + + [ Upstream Kernel Changes ] + + * Yama: use thread group leader when creating match + - LP: #729839 + * (drop after 2.6.38) ahci: AHCI mode SATA patch for Intel Patsburg SATA + RAID controller + - LP: #735240 + * (drop after v2.6.38) x86, quirk: Fix SB600 revision check + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc8 to v2.6.38 final + - LP: #715330 + + -- Andy Whitcroft Tue, 15 Mar 2011 19:04:19 +0000 + +linux (2.6.38-6.34) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] normalise CONFIG_INTEL_TXT + * SAUCE: KLUDGE: work around failed 'shrink-wrap' compiler optimisation + - LP: #730860 + * rebase to mainline v2.6.38-rc8 + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc7 + fb62c00a6d8942775abc23d1621db1252e2d93d1 + to v2.6.38-rc8 + + -- Andy Whitcroft Tue, 08 Mar 2011 11:54:48 +0000 + +linux (2.6.38-6.33) natty; urgency=low + + [ Andy Whitcroft ] + + * d-i -- enable speakup-modules udeb + - LP: #672699 + * rebase to 493f3358cb289ccf716c5a14fa5bb52ab75943e5 + * [Config] debian PPC64 configuration + * [Config] cleanup powerpc config fixing unexpected inconsistancies + * [Config] resync ppc64 configuration + * SAUCE: match up ENTRY/END naming for 32/64 bit + * rebase to fb62c00a6d8942775abc23d1621db1252e2d93d1 + * [Config] update configs after rebase to + fb62c00a6d8942775abc23d1621db1252e2d93d1 + * [Config] pps_gen_parport no longer built + + [ Corentin Chary ] + + * SAUCE: (drop after 2.6.38) eeepc-wmi: reorder keymap + - LP: #689393 + * SAUCE: (drop after 2.6.38) eeepc-wmi: add wlan key found on 1015P + - LP: #689393 + + [ John Johansen ] + + * SAUCE: Fix aufs calling of security_path_mknod + - LP: #724456 + + [ Kees Cook ] + + * SAUCE: proc: hide kernel addresses via %pK in /proc//stack + + [ Tim Gardner ] + + * rebase to 2.6.38-rc7 + + [ Upstream Kernel Changes ] + + * Revert "drm/i915: fix corruptions on i8xx due to relaxed fencing" + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc6 to v2.6.38-rc7 + + fb62c00a6d8942775abc23d1621db1252e2d93d1 + - LP: #721389 + - LP: #722925 + - LP: #723672 + - LP: #723676 + - LP: #715318 + + -- Andy Whitcroft Mon, 07 Mar 2011 15:33:17 +0000 + +linux (2.6.38-5.32) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to mainline 6f576d57f1fa0d6026b495d8746d56d949989161 + * [Config] updateconfigs following rebase to v2.6.38-rc6 + * [Config] enable CONFIG_DMAR + - LP: #552311 + + [ Upstream Kernel Changes ] + + * drm/i915: skip FDI & PCH enabling for DP_A + - LP: #561802, #600453, #681877 + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc5 to v2.6.38-rc6 + - LP: #718402 + - LP: #719524 + - LP: #721126 + - LP: #719691 + - LP: #722689 + - LP: #722310 + + -- Andy Whitcroft Tue, 22 Feb 2011 13:28:39 +0000 + +linux (2.6.38-4.31) natty; urgency=low + + [ Andy Whitcroft ] + + * add in bugs closed by upstream patches pulled in by rebases + * rebase to 795abaf1e4e188c4171e3cd3dbb11a9fcacaf505 + * [Config] enable CONFIG_VSX to allow use of vector instuctions + * resync with maverick 98defa1c5773a3d7e4c524967eb01d5bae035816 + * rebase to mainline v2.6.38-rc5 + * SAUCE: ecryptfs: read on a directory should return EISDIR if not + supported + - LP: #719691 + + [ Colin Ian King ] + + * SAUCE: Dell All-In-One: Remove need for Dell module alias + + [ Manoj Iyer ] + + * SAUCE: (drop after 2.6.38) add ricoh 0xe823 pci id. + - LP: #717435 + + [ Tim Gardner ] + + * [Config] CONFIG_CRYPTO_CRC32C_INTEL=y + + [ Upstream Kernel Changes ] + + * Quirk to fix suspend/resume on Lenovo Edge 11,13,14,15 + - LP: #702434 + * vfs: fix BUG_ON() in fs/namei.c:1461 + + [ Vladislav P ] + + * SAUCE: Release BTM while sleeping to avoid deadlock. + - LP: #713837 + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc4 to v2.6.38-rc5 + - LP: #579276 + - LP: #715877 + - LP: #713769 + - LP: #716811 + * resync with Maverick Ubuntu-2.6.35-27.47 + + -- Andy Whitcroft Fri, 11 Feb 2011 17:24:09 +0000 + +linux (2.6.38-3.30) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.38-rc4 + * ppc64 -- add basic architecture + * ubuntu: AUFS -- update to 65835da20b77c98fb538c9114fc31f5de1328230 + + [ Colin Ian King ] + + * SAUCE: Add WMI hotkeys support for Dell All-In-One series + - LP: #676997 + * SAUCE: Add WMI hotkeys support for another Dell All-In-One series + - LP: #701530 + * SAUCE: Dell WMI: Use sparse keymaps and tidy up code. + - LP: #701530 + + [ Dan Rosenberg ] + + * SAUCE: (drop after 2.6.38) Convert net %p usage %pK + + [ Kees Cook ] + + * Revert "SAUCE: kernel: make /proc/kallsyms mode 400 to reduce ease of + attacking" + * SAUCE: (drop after 2.6.38) use %pK for /proc/kallsyms and /proc/modules + + [ Tim Gardner ] + + * [Config] CONFIG_BLK_CGROUP=y + - LP: #706394 + * [Config] CONFIG_DELL_WMI_AIO=m + + [ Upstream Kernel Changes ] + + * drm/i915/lvds: Restore dithering on native modes for gen2/3 + - LP: #711568 + + [ Upstream Kernel Changes ] + + * rebase from v2.6.38-rc3 to v2.6.38-rc4. + - LP: #701271 + - LP: #708521 + - LP: #710371 + + -- Andy Whitcroft Tue, 08 Feb 2011 02:07:18 +0000 + +linux (2.6.38-2.29) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to 1f0324caefd39985e9fe052fac97da31694db31e + * [Config] updateconfigs following rebase to + 1f0324caefd39985e9fe052fac97da31694db31e + * rebase to 70d1f365568e0cdbc9f4ab92428e1830fdb09ab0 + * [Config] reenable HIBERNATE + - LP: #710877 + * rebase to v2.6.38-rc3 + * [Config] reenable CONFIG_CRASH_DUMP + + [ Kamal Mostafa ] + + * SAUCE: rtl8192se: fix source file perms + * SAUCE: rtl8192se: fix source file newline + * SAUCE: omnibook: fix source file newline + + [ Kees Cook ] + + * [Config] packaging: really make System.map mode 0600 + + [ Ricardo Salveti de Araujo ] + + * SAUCE: OMAP3630: PM: don't warn the user with a trace in case of + PM34XX_ERRATUM + + [ Soren Hansen ] + + * SAUCE: nbd: Remove module-level ioctl mutex + + [ Tim Gardner ] + + * SAUCE: Disable building the ACPI debugfs source + + [ Upstream Kernel Changes ] + + * Set physical start and alignment 1M for virtual i386 + - LP: #710754 + + [ Upstream Kernel Changes ] + + * rebase from v2.6.38-rc2 + c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + to v2.6.38-rc3 + - LP: #707902 + + -- Andy Whitcroft Fri, 28 Jan 2011 16:30:32 +0000 + +linux (2.6.38-1.28) natty; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update to b1cee06249dfa0ab30951e7f06490a75c155b620 + + [ Ricardo Salveti de Araujo ] + + * SAUCE: omap3: beaglexm: fix DVI initialization + * [Config] omap: move CONFIG_PANEL_GENERIC_DPI to build in to make + display work at Beagle + + -- Andy Whitcroft Fri, 28 Jan 2011 10:51:57 +0000 + +linux (2.6.38-1.27) natty; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update aufs-update to track new locations of headers + * ubuntu: AUFS -- update to c5021514085a5d96364e096dbd34cadb2251abfd + * SAUCE: ensure root is ready before running usermodehelpers in it + * correct the Vcs linkage to point to natty + * rebase to linux tip e78bf5e6cbe837daa6ab628a5f679548742994d3 + * [Config] update configs following rebase + e78bf5e6cbe837daa6ab628a5f679548742994d3 + * SAUCE: Yama: follow changes to generic_permission + * ubuntu: compcache -- follow changes to bd_claim/bd_release + * ubuntu: iscsitarget -- follow changes to open_bdev_exclusive + * ubuntu: ndiswrapper -- fix interaction between __packed and packed + * ubuntu: AUFS -- update to 806051bcbeec27748aae2b7957726a4e63ff308e + * update package version to match payload version + * rebase to e6f597a1425b5af64917be3448b29e2d5a585ac8 + * rebase to v2.6.38-rc1 + * [Config] updateconfigs following rebase to v2.6.38-rc1 + * SAUCE: x86 fix up jiffies/jiffies_64 handling + * rebase to linus tip 2b1caf6ed7b888c95a1909d343799672731651a5 + * [Config] updateconfigs following rebase to + 2b1caf6ed7b888c95a1909d343799672731651a5 + * [Config] disable CONFIG_TRANSPARENT_HUGEPAGE to fix i386 boot crashes + * ubuntu: AUFS -- suppress benign plink warning messages + - LP: #621195 + * [Config] CONFIG_NR_CPUS=256 for amd64 -server flavour + * rebase to v2.6.38-rc2 + * rebase to mainline d315777b32a4696feb86f2a0c9e9f39c94683649 + * rebase to c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + * [Config] update configs following rebase to + c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + * [Config] disable CONFIG_AD7152 to fix FTBS on armel versatile + * [Config] disable CONFIG_AD7150 to fix FTBS on armel versatile + * [Config] disable CONFIG_RTL8192CE to fix FTBS on armel omap + * [Config] disable CONFIG_MANTIS_CORE to fix FTBS on armel versatile + + [ Kees Cook ] + + * SAUCE: kernel: make /proc/kallsyms mode 400 to reduce ease of attacking + + [ Stefan Bader ] + + * Temporarily disable RODATA for virtual i386 + - LP: #699828 + + [ Tim Gardner ] + + * [Config] CONFIG_NLS_DEFAULT=utf8 + - LP: #683690 + * [Config] CONFIG_HIBERNATION=n + * update bnx2 firmware files in d-i/firmware/nic-modules + + [ Upstream Kernel Changes ] + + * Revert "drm/radeon/bo: add some fallback placements for VRAM only + objects." + * packaging: make System.map mode 0600 + * thinkpad_acpi: Always report scancodes for hotkeys + - LP: #702407 + * sched: tg->se->load should be initialised to tg->shares + * Input: sysrq -- ensure sysrq_enabled and __sysrq_enabled are consistent + * brcm80211: include linux/slab.h for kfree + * pch_dma: add include/slab.h for kfree + * i2c-eg20t: include linux/slab.h for kfree + * gpio/ml_ioh_gpio: include linux/slab.h for kfree + * tty: include linux/slab.h for kfree + * winbond: include linux/delay.h for mdelay et al + + [ Upstream Kernel Changes ] + + * mark the start of v2.6.38 versioning + * rebase v2.6.37 to v2.6.38-rc2 + c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + - LP: #689886 + - LP: #702125 + - LP: #608775 + - LP: #215802 + - LP: #686333 + - LP: #677830 + - LP: #677652 + - LP: #696493 + - LP: #697240 + - LP: #689036 + - LP: #705323 + - LP: #686692 + + -- Andy Whitcroft Sun, 09 Jan 2011 13:44:52 +0000 + +linux (2.6.37-12.26) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.37-rc8 + * [Config] armel -- reenable omap flavour + * [Config] disable CONFIG_MACH_OMAP3517EVM to fix FTBS on armel omap + * [Config] disable CONFIG_GPIO_VX855 to fix FTBS on omap armel + * [Config] disable CONFIG_WESTBRIDGE_ASTORIA to fix FTBS on omap armel + * [Config] disable CONFIG_TI_DAVINCI_EMAC to fix FTBS on omap armel + * rebase to mainline 989d873fc5b6a96695b97738dea8d9f02a60f8ab + * [Config] track missing modules + * rebase to v2.6.37 final + + [ Chase Douglas ] + + * SAUCE: (drop after 2.6.37) HID: magicmouse: Don't report REL_{X, Y} for + Magic Trackpad + + [ Stefan Bader ] + + * Revert "SAUCE: blkfront: default to sd devices" + - LP: #684875 + + [ Tim Gardner ] + + * Revert "SAUCE: (no-up) libata: Ignore HPA by default." + - LP: #380138 + * [Config] Added autofs4.ko to -virtual flavour + - LP: #692917 + + [ Upstream Kernel Changes ] + + * Add support for Intellimouse Mode in ALPS touchpad on Dell E2 series + Laptops + - LP: #632884 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc8 + * rebase to mainline 989d873fc5b6a96695b97738dea8d9f02a60f8ab + * rebase to v2.6.37 final + + -- Andy Whitcroft Thu, 23 Dec 2010 18:34:13 +0000 + +linux (2.6.37-11.25) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] d-i -- add hpsa to the list of block devices + - LP: #684304 + * [Config] add vmw-balloon driver to -virtual flavour + - LP: #592039 + * rebase to v2.6.37-rc7 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc7 + + -- Andy Whitcroft Tue, 21 Dec 2010 13:35:28 +0000 + +linux (2.6.37-10.24) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.37-rc6 + * updateconfigs following rebase to v2.6.37-rc6 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc6 + + -- Andy Whitcroft Thu, 16 Dec 2010 12:34:19 +0000 + +linux (2.6.37-9.23) natty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: vt -- fix handoff numbering to 1..n and add range checks + - LP: #689606 + * SAUCE: vt -- fix handoff numbering to 1..n and add range checks (grub) + - LP: #689606 + + [ Kees Cook ] + + * SAUCE: RO/NX protection for loadable kernel, fix ftrace + - LP: #690190 + + -- Andy Whitcroft Wed, 15 Dec 2010 19:29:57 +0000 + +linux (2.6.37-9.22) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.35-rc5 + * [Config] updateconfigs following rebase to v2.6.37-rc5 + * (no-up) add support for installed header files to ubuntu directory + - LP: #684666 + * ubuntu: AUFS -- include the aufs_types.h file in linux-libc-headers + - LP: #684666 + * ubuntu: dm-raid4-5 -- follow changes to bio flags + * ubuntu: dm-raid4-5 -- re-enable + * ubuntu: omnibook -- update BOM + * ubuntu: ndiswrapper -- update BOM to match actual version + * ubuntu: ndiswrapper -- follow removal of the BKL and locked ioctl + * ubuntu: ndiswrapper -- re-enable + * ubuntu: iscsitarget -- re-instate copy_io_context + * ubuntu: iscsitarget -- follow changes to semaphore initialisation + * ubuntu: iscsitarget -- convert NIPQUAD to %pI4 + * ubuntu: iscsitarget -- re-enable + + [ Kees Cook ] + + * [Config] update config for CONFIG_DEBUG_SET_MODULE_RONX + + [ Manoj Iyer ] + + * SAUCE: Enable jack sense for Thinkpad Edge 13 + - LP: #685015 + + [ Tim Gardner ] + + * [Config] CONFIG_9P_FSCACHE=y,CONFIG_9P_FS_POSIX_ACL=y + * [Config] CONFIG_CRYPTO_CRC32C=y + - LP: #681819 + * [Config] CONFIG_9P_FSCACHE=n + * [Config] Add nfsd modules to -virtual flavour + - LP: #688070 + + [ Upstream Kernel Changes ] + + * Revert "Staging: zram: work around oops due to startup ordering snafu" + * NFS: Fix panic after nfs_umount() + - LP: #683938 + * x86: Add NX protection for kernel data + * x86: Add RO/NX protection for loadable kernel modules + * x86: Resume trampoline must be executable + * x86: RO/NX protection for loadable kernel, jump_table fix + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc5 + + -- Andy Whitcroft Thu, 09 Dec 2010 18:15:35 +0000 + +linux (2.6.37-8.21) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- include the aufs_types.h file in + linux-libc-headers" + * Revert "(no-up) add support for installed header files to ubuntu + directory" + + -- Andy Whitcroft Sun, 05 Dec 2010 17:33:28 +0000 + +linux (2.6.37-8.20) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] drivers/serial/mfd.c: Fix ARM compile error" + * Revert "SAUCE: Nouveau: Disable acceleration on MacBook Pros" + * Revert "SAUCE: Nouveau: Add quirk framework to disable acceleration" + * Revert "SAUCE: i915 -- disable powersave by default" + * SAUCE: enable Marvell 9128 PCIe SATA controller + - LP: #658521 + * [Config] evtchn has been renamed + * (no-up) add support for installed header files to ubuntu directory + - LP: #684666 + * ubuntu: AUFS -- include the aufs_types.h file in linux-libc-headers + - LP: #684666 + + [ Tim Gardner ] + + * [Config] MISS: evtchn, NEW : xen-evtchn + * rebase to v2.6.37-rc4 + + [ Upstream Kernel Changes ] + + * drm/i915: Clean conflicting modesetting registers upon init + - LP: #683775 + * rebase to v2.6.37-rc4 + + -- Andy Whitcroft Fri, 03 Dec 2010 18:42:07 +0000 + +linux (2.6.37-7.19) natty; urgency=low + + [ Tim Gardner ] + + * [Config] Add bnx2 firmware to nic-modules udeb + - LP: #676245 + + -- Andy Whitcroft Fri, 26 Nov 2010 17:53:45 +0000 + +linux (2.6.37-7.18) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] USB: option: Remove duplicate AMOI_VENDOR_ID" + * Revert "SAUCE: Add extra headers to linux-libc-dev" + * Revert "SAUCE: Enable speedstep for sonoma processors." + * [Config] enable CONFIG_BT_HCIUART_ATH3K + * [Config] enable CONFIG_IWLWIFI_DEBUGFS + * [Config] standardise CONFIG_MII + * [Config] standardise CONFIG_PRISM2_USB + * [Config] standardise CONFIG_SCSI_QLA_ISCSI + * [Config] build in CONFIG_AGP + * [Config] build in CONFIG_AGP_INTEL + * [Config] build in CONFIG_AGP_AMD + * [Config] build in CONFIG_AGP_AMD64 + * [Config] build in CONFIG_AGP_NVIDIA + * [Config] build in CONFIG_AGP_VIA + * [Config] disable CONFIG_SCSI_QLA_ISCSI for FTBS (arm) + * (no-up): document the new ## scheme + * [Config] harmonise CONFIG_SERIAL_8250_NR_UARTS + * [Config] update CONFIG_SERIAL_8250_RUNTIME_UARTS=32 + - LP: #675453 + + [ Mathieu J. Poirier ] + + * SAUCE: ARM: Adding vdd_sdi regulator supply to OMAP3EVM + + [ Upstream Kernel Changes ] + + * nx-emu: fix inverted report of disable_nx + + -- Andy Whitcroft Tue, 23 Nov 2010 21:00:39 +0000 + +linux (2.6.37-6.17) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- aufs2-standalone.patch + aufs2.1-36-UNRELEASED-20101103" + * Revert "ubuntu: AUFS -- aufs2-base.patch + aufs2.1-36-UNRELEASED-20101103" + * [Config] standardise CONFIG_BT + * [Config] standardise CONFIG_IRDA + * [Config] standardise CONFIG_LAPB + * [Config] standardise CONFIG_RDS + * [Config] standardise CONFIG_RFKILL + * [Config] standardise CONFIG_TIPC + * [Config] standardise CONFIG_X25 + * [Config] standardise CONFIG_INPUT_EVDEV + * [Config] standardise CONFIG_INPUT_JOYDEV + * [Config] standardise CONFIG_INPUT_JOYSTICK + * [Config] standardise CONFIG_INPUT_TOUCHSCREEN + * [Config] CONFIG_INPUT_TOUCHSCREEN=n for FTBS (arm) + * [Config] CONFIG_IRDA=n for FTBS (arm) + * ubuntu: AUFS -- aufs2-base.patch aufs2.1-37 + * ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-37 + * ubuntu: AUFS -- update to 097bf62d6f49619359d34bf17f242df38562489a + + [ Tim Gardner ] + + * SAUCE: Fix drivers/staging/easycap FTBS + * [Config] CONFIG_EASYCAP=m after fixing FTBS + + [ Upstream Kernel Changes ] + + * Revert "x86: Add NX protection for kernel data" + + -- Andy Whitcroft Mon, 22 Nov 2010 18:09:10 +0000 + +linux (2.6.37-6.16) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] update config for CONFIG_DEBUG_SET_MODULE_RONX" + * rebase to v2.6.37-rc3 + + [ Tim Gardner ] + + * [Config] CONFIG_SCHED_AUTOGROUP=y + + [ Upstream Kernel Changes ] + + * Revert "x86: Add RO/NX protection for loadable kernel modules" + * sched: automated per session task groups + * rebase to v2.6.37-rc3 + + -- Andy Whitcroft Mon, 22 Nov 2010 10:11:13 +0000 + +linux (2.6.37-6.15) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] standardise CONFIG_CEPH_FS + * [Config] standardise CONFIG_SCSI_LPFC_DEBUG_FS + * [Config] standardise CONFIG_SCSI_PROC_FS + * [Config] standardise CONFIG_UBIFS_FS + * [Config] standardise CONFIG_USB_GADGET_DEBUG_FS + + [ Kees Cook ] + + * [Config] update config for CONFIG_DEBUG_SET_MODULE_RONX + + [ Manoj Iyer ] + + * SAUCE: Enable jack sense for Thinkpad Edge 11 + - LP: #677210 + * SAUCE: enable rfkill for rtl8192se driver + - LP: #640992 + + [ Tim Gardner ] + + * [Config] CONFIG_EASYCAP=n for FTBS + * Rebase to v2.6.32-rc2+git + + [ Upstream Kernel Changes ] + + * x86: Fix improper large page preservation + * x86: Add NX protection for kernel data + * x86: Add RO/NX protection for loadable kernel modules + + [ Upstream Kernel Changes ] + + * Rebase to Linus 2.6.37-rc2+git + + -- Andy Whitcroft Sat, 20 Nov 2010 11:40:00 +0000 + +linux (2.6.37-5.14) natty; urgency=low + + [ Upstream Kernel Changes ] + + * PCI: fix offset check for sysfs mmapped files + - LP: #676963 + + -- Andy Whitcroft Thu, 18 Nov 2010 18:12:27 +0000 + +linux (2.6.37-5.13) natty; urgency=low + + [ Andy Whitcroft ] + + * rebased to v2.6.37-rc2 + * updateconfigs following rebase to v2.6.37-rc2 + + [ Tim Gardner ] + + * [Config] Added NFS and related modules to virtual flavour + - LP: #659084 + + [ Upstream Kernel Changes ] + + * x86, cpu: Rename verify_cpu_64.S to verify_cpu.S + * x86, cpu: Clear XD_DISABLED flag on Intel to regain NX + * x86, cpu: Call verify_cpu during 32bit CPU startup + * x86, cpu: Only CPU features determine NX capabilities + + [ Upstream Changes ] + + * rebased to v2.67.37-rc2 + + -- Andy Whitcroft Tue, 16 Nov 2010 13:13:29 +0000 + +linux (2.6.37-4.12) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] HID: magicmouse: add param for scroll speed" + * Revert "[Upstream] HID: magicmouse: properly account for scroll + movement in state" + * Revert "[Upstream] HID: magicmouse: disable and add module param for + scroll acceleration" + * Revert "[Upstream] HID: magicmouse: scroll on entire surface, not just + middle of mouse" + + [ Henrik Rydberg ] + + * SAUCE: hid: ntrig: remove sysfs nodes + * SAUCE: hid: ntrig: Setup input filtering manually + * SAUCE: hid: ntrig: New ghost-filtering event logic + + [ Manoj Iyer ] + + * SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + - LP: #348861 + + [ Upstream Kernel Changes ] + + * Revert "mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume" + * Revert "[ARM] implement arch_randomize_brk()" + * Revert "ARM: stack protector: change the canary value per task" + * Revert "ARM: initial stack protector (-fstack-protector) support" + * Revert "ALSA: hda - Handle pin NID 0x1a on ALC259/269" + * Revert "ALSA: hda - Handle missing NID 0x1b on ALC259 codec" + * Revert "perf probe: Add kernel source path option" + * hid: ntrig: Support single-touch devices + * hid: ntrig: Mask pen switch events + * net: rtnetlink.h -- only include linux/netdevice.h when used by the + kernel + - LP: #673073 + * Fix userspace build of linux/fs.h + + -- Andy Whitcroft Mon, 15 Nov 2010 19:31:44 +0000 + +linux (2.6.37-3.11) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- update to + b37c575759dc4535ccc03241c584ad5fe69e3b25" + * Revert "ubuntu: AUFS -- track changes to the arguements to fop fsync()" + * Revert "ubuntu: AUFS -- update to standalone 2.6.35-rcN as at 20100601" + * Revert "ubuntu: AUFS -- update to standalone 2.6.34 as at 20100601" + * Revert "ubuntu: AUFS -- aufs2 base patch for linux-2.6.34" + * [Config] Disable intel_idle for -virtual kernels + - LP: #651370 + * [Config] enforcer -- ensure we never enable CONFIG_IMA + * debian -- pass the correct flavour name when checking configs + * [Config] enforcer -- ensure CONFIG_INTEL_IDLE is off for -virtual + * [Config] ensure CONFIG_IPV6=y for powerpc + * [Config] enforcer -- ensure CONFIG_IPV6=y + * ubuntu: AUFS -- aufs2-base.patch aufs2.1-36-UNRELEASED-20101103 + * ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-36-UNRELEASED-20101103 + * ubuntu: AUFS -- update to aufs2.1-36-UNRELEASED-20101103 + * ubuntu: AUFS -- re-enable + * ubuntu: AUFS -- track changes to work queue initialisation + * ubuntu: AUFS -- track changes to llseek in v2.6.37-rc1 + * SAUCE: fbcon -- fix race between open and removal of framebuffers + * SAUCE: fbcon -- fix OOPs triggered by race prevention fixes + - LP: #614008 + * SAUCE: drm -- stop early access to drm devices + + [ Jeremy Kerr ] + + * [Config] Build-in powermac ZILOG serial driver + - LP: #673346 + + [ Kees Cook ] + + * SAUCE: nx-emu: use upstream ASLR when possible + + [ Tim Gardner ] + + * [Config] Use correct be2iscsi module name in d-i/modules/scsi-modules + - LP: #628776 + + [ Upstream Kernel Changes ] + + * i386: NX emulation + * nx-emu: drop exec-shield sysctl, merge with disable_nx + * nx-emu: standardize boottime message prefix + * mmap randomization for executable mappings on 32-bit + * exec-randomization: brk away from exec rand area + + -- Andy Whitcroft Thu, 11 Nov 2010 23:46:37 +0000 + +linux (2.6.37-2.10) natty; urgency=low + + [ Andy Whitcroft ] + + * reinstate armel config changes: + * [Config] CONFIG_GPIO_PCH=n for armel FTBS + * [Config] CONFIG_GPIO_VX855=n for armel FTBS + + -- Andy Whitcroft Wed, 03 Nov 2010 22:20:35 +0000 + +linux (2.6.37-2.9) natty; urgency=low + + [ Andy Whitcroft ] + + * config -- fix genportsconfig + * [Config] move powerpc over from ports to distro + * bump master version number to match contained kernel + * SAUCE: fix documentation strings for struct input_keymap_entry + * usb: gadget: goku_udc: add registered flag bit + + -- Andy Whitcroft Tue, 02 Nov 2010 15:14:11 +0000 + +linux (2.6.36-2.8) natty; urgency=low + + [ Tim Gardner ] + + * [Config]: fix changed CONFIG_SYSFS_DEPRECATED_V2 enforcement rules + * [Config]: TWL4030_CORE=n for FTBS + * [Config]: CONFIG_ATH6K_LEGACY=n for FTBS + * [Config]: CONFIG_SOLO6X10=n for FTBS + * [Config]: CONFIG_GPIO_PCH=n for armel FTBS + * [Config]: CONFIG_GPIO_VX855=n for armel FTBS + * [Config]: CONFIG_DRM_NOUVEAU=n for armel FTBS + * [Config]: CONFIG_LINE6_USB=n for armel FTBS + * [Config]: CONFIG_SENSORS_AK8975=n for armel FTBS + * [Config]: CONFIG_I2C_I801=n for armel FTBS + * UBUNTU: SAUCE: AppArmor: Fix unpack of network tables. + * AppArmor: compatibility patch for v5 interface + * AppArmor: compatibility patch for v5 network controll + * Dropped (pre-stable): input: Support Clickpad devices in ClickZone mode + * Dropped: UBUNTU: SAUCE: libata: Add ALPM power state accounting to the AHCI driver + * Dropped: UBUNTU: SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + * Dropped: hid: 3m: Convert to MT slots + * Dropped: HID: magicmouse: don't allow hidinput to initialize the device + * Dropped: HID: magicmouse: simplify touch data bit manipulation + * Dropped: HID: magicmouse: simplify touch down logic + * Dropped: HID: magicmouse: enable Magic Trackpad support + * Dropped: UBUNTU: SAUCE: hid: ntrig: remove sysfs nodes + * Dropped: UBUNTU: SAUCE: hid: ntrig: Setup input filtering manually + * Dropped: UBUNTU: SAUCE: hid: ntrig: New ghost-filtering event logic + * Dropped: UBUNTU: SAUCE: hid: ntrig: identify firmware version (wiggled) + * Dropped: UBUNTU: (pre-stable): input: Support Clickpad devices in ClickZone mode + * Dropped: UBUNTU: SAUCE: KMS: cache the EDID information of the LVDS + * Dropped: UBUNTU: SAUCE: fbcon -- fix race between open and removal of framebuffers + * Dropped: UBUNTU: SAUCE: fbcon -- fix OOPs triggered by race prevention fixes + * Dropped: UBUNTU: SAUCE: x86: implement cs-limit nx-emulation for ia32 + * Dropped: UBUNTU: SAUCE: x86: more tightly confine cs-limit nx-emulation to ia32 only + * Dropped: UBUNTU: SAUCE: [um] Don't use nx_enabled under UML + * Dropped: UBUNTU: SAUCE: x86: brk away from exec rand area + + [ Upstream Kernel Changes ] + + * rebased against 2.6.27-rc1 + + -- Tim Gardner Fri, 22 Oct 2010 19:35:05 -0600 + +linux (2.6.36-1.7) natty; urgency=low + + [ Andy Whitcroft ] + + * rebased to v2.6.36 final + * [Config] update configs following rebase to v2.6.36 final + * [Config] update ports configs following rebase to v2.6.36 final + + [ Upstream Kernel Changes ] + + * rebased to v2.6.36 final + + -- Andy Whitcroft Thu, 21 Oct 2010 14:28:57 +0100 + +linux (2.6.36-1.6) natty; urgency=low + + [ Upstream Kernel Changes ] + + * drop broadcom staging driver preview: + * Revert "Staging: Add initial release of brcm80211 - Broadcom 802.11n + wireless LAN driver." + + -- Andy Whitcroft Wed, 20 Oct 2010 10:41:25 +0100 + +linux (2.6.36-1.5) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.36-rc8 + * updateconfigs following rebase to v2.6.36-rc8 + * updateportsconfigs following rebase to v2.6.36-rc8 + * config -- simplify the kernelconfig interface + * config -- add new config mode 'dumpconfigs' + + [ Tim Gardner ] + + * Simplify the use of CROSS_COMPILER + + [ Upstream Kernel Changes ] + + * drop broadcom staging driver preview: + * Revert "staging: brcm80211: Make compiling of brcm80211.ko and + brcmfmac.ko mutually exclusive." + * Revert "staging: brcm80211: Fix compile issue when BRCM80211_PCI is not + set." + * Revert "Staging: brcm80211: remove driver specific -W options" + * Revert "Staging: brcm80211: clean up makefile cflag lines" + * Revert "staging: brcm80211: add fullmac driver" + * Revert "staging: brcm80211: use string native library" + * Revert "staging: brcm80211: use native ctype library" + * Revert "staging: brcm80211: fix remaining checkpatch errors." + * Revert "staging: brcm80211: fix "ERROR: trailing whitespace."" + * Revert "staging: brcm80211: fix "ERROR: spaces required around that + ..."" + * Revert "staging: brcm80211: fix "ERROR: spaces prohibited around that + ':' ..."" + * Revert "staging: brcm80211: fix "ERROR: space required before that + ..."" + * Revert "staging: brcm80211: fix "ERROR: space required after that ..."" + * Revert "staging: brcm80211: fix "ERROR: space required after that close + brace"" + * Revert "staging: brcm80211: fix "ERROR: space prohibited before + ...close square bracket"" + * Revert "staging: brcm80211: fix "ERROR: space prohibited after that + ..."" + * Revert "staging: brcm80211: fix "ERROR: need consistent spacing around + '*'"" + * Revert "staging: brcm80211: fix 'ERROR: "(foo*)" should be "(foo *)"'" + * Revert "staging: brcm80211: fix "ERROR: Macros w/ mult. statements ... + do - while loop"" + * Revert "staging: brcm80211: fix "ERROR: Macros w/ complex values ... + parenthesis"" + * Revert "staging: brcm80211: fix "ERROR: do not initialise statics to 0 + or NULL"" + * Revert "staging: brcm80211: fix "ERROR: do not initialise globals to 0 + or NULL"" + * Revert "staging: brcm80211: fix "ERROR: while should follow close brace + '}'"" + * Revert "staging: brcm80211: fix "ERROR: that open brace { ... prev + line"" + * Revert "staging: brcm80211: fix "ERROR: trailing statements should be + on next line"" + * Revert "staging: brcm80211: fix "ERROR: do not use assignment in if + condition"" + * Revert "staging: brcm80211: fix "ERROR: return is not a function, + paren..."" + * Revert "staging: brcm80211: fix "ERROR: open brace '{' following + function dec..."" + * Revert "staging: brcm80211: fix 'ERROR: "foo * bar" should be "foo + *bar"'" + * Revert "staging: brcm80211: Fix URLs for firmware files." + * Revert "staging: brcm80211: use '%pM' format to print MAC address" + * Revert "staging: brcm80211: Add contact info to TODO list." + * Revert "staging: brcm80211: Fix some initialisation failure paths" + * Export dump_{write,seek} to binary loader modules + * rebase to v2.6.36-rc8. + + -- Andy Whitcroft Tue, 19 Oct 2010 18:58:11 +0100 + +linux (2.6.36-0.4) natty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: perf: increase stack footprint to avoid stack-protector warning + (fixes FTBS on powerpc) + + -- Andy Whitcroft Thu, 14 Oct 2010 13:16:16 +0100 + +linux (2.6.36-0.3) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable CONFIG_SCSI_QLA_ISCSI to fix FTBS on powerpc + + -- Andy Whitcroft Thu, 14 Oct 2010 03:01:30 +0100 + +linux (2.6.36-0.2) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] updateportsconfigs following rebase to 2.6.36-rc7 + (fix FTBS on powerpc) + + -- Andy Whitcroft Wed, 13 Oct 2010 23:25:12 +0100 + +linux (2.6.36-0.1) natty; urgency=low + + [ Andy Whitcroft ] + + * reduce disk usage during buildd builds + - LP: #645653 + * [Config] enforcer -- ensure CONFIG_INIT_PASS_ALL_PARAMS is y + * [Config] armel -- drop omap flavour + + [ Tim Gardner ] + + * Added dropped patch list + * more dropped patches + * [Config] Disable aufs, dmraid-4.5, ndis-wrapper + * [Config] Add support for cross compiling armel + * [Config] CONFIG_SCSI_QLA_ISCSI=n for armel + * [Upstream] drivers/serial/mfd.c: Fix ARM compile error + * [Config]: updateconfigs after adding brcm80211 + * staging: brcm80211: Fix Makefile syntax error + * rebased to v2.6.36-rc7 + + [ Upstream Kernel Changes ] + + * (upstream) IPS driver: don't toggle CPU turbo on unsupported CPUs + * (upstream) IPS driver: verify BIOS provided limits + * intel_ips: Print MCP limit exceeded values. + * Staging: Add initial release of brcm80211 - Broadcom 802.11n wireless + LAN driver. + * staging: brcm80211: Fix some initialisation failure paths + * staging: brcm80211: Add contact info to TODO list. + * staging: brcm80211: use '%pM' format to print MAC address + * staging: brcm80211: Fix URLs for firmware files. + * staging: brcm80211: fix 'ERROR: "foo * bar" should be "foo *bar"' + * staging: brcm80211: fix "ERROR: open brace '{' following function + dec..." + * staging: brcm80211: fix "ERROR: return is not a function, paren..." + * staging: brcm80211: fix "ERROR: do not use assignment in if condition" + * staging: brcm80211: fix "ERROR: trailing statements should be on next + line" + * staging: brcm80211: fix "ERROR: that open brace { ... prev line" + * staging: brcm80211: fix "ERROR: while should follow close brace '}'" + * staging: brcm80211: fix "ERROR: do not initialise globals to 0 or NULL" + * staging: brcm80211: fix "ERROR: do not initialise statics to 0 or NULL" + * staging: brcm80211: fix "ERROR: Macros w/ complex values ... + parenthesis" + * staging: brcm80211: fix "ERROR: Macros w/ mult. statements ... do - + while loop" + * staging: brcm80211: fix 'ERROR: "(foo*)" should be "(foo *)"' + * staging: brcm80211: fix "ERROR: need consistent spacing around '*'" + * staging: brcm80211: fix "ERROR: space prohibited after that ..." + * staging: brcm80211: fix "ERROR: space prohibited before ...close square + bracket" + * staging: brcm80211: fix "ERROR: space required after that close brace" + * staging: brcm80211: fix "ERROR: space required after that ..." + * staging: brcm80211: fix "ERROR: space required before that ..." + * staging: brcm80211: fix "ERROR: spaces prohibited around that ':' ..." + * staging: brcm80211: fix "ERROR: spaces required around that ..." + * staging: brcm80211: fix "ERROR: trailing whitespace." + * staging: brcm80211: fix remaining checkpatch errors. + * staging: brcm80211: use native ctype library + * staging: brcm80211: use string native library + * staging: brcm80211: add fullmac driver + * Staging: brcm80211: clean up makefile cflag lines + * Staging: brcm80211: remove driver specific -W options + * staging: brcm80211: Fix compile issue when BRCM80211_PCI is not set. + * staging: brcm80211: Make compiling of brcm80211.ko and brcmfmac.ko + mutually exclusive. + + -- Andy Whitcroft Tue, 12 Oct 2010 16:00:27 +0100 + +linux (2.6.35-22.33) maverick; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: Add support for Intellimouse Mode in ALPS touchpad on + Dell E2 series Laptops" + - LP: #641320 + + [ Brian Rogers ] + + * SAUCE: ir-core: Fix null dereferences in the protocols sysfs interface + - LP: #624701 + + [ Christopher James Halse Rogers ] + + * SAUCE: Nouveau: Add quirk framework to disable acceleration + - LP: #544088, #546393 + * SAUCE: Nouveau: Disable acceleration on MacBook Pros + - LP: #546393 + + [ John Johansen ] + + * Revert "SAUCE: AppArmor: allow newer tools to load policy on older + kernels" + * SAUCE: AppArmor: allow newer tools to load policy on older kernels + - LP: #639758 + + [ Mathieu J. Poirier ] + + * SAUCE: Adding vdd_sdi regulator supply to OMAP3EVM + + [ Upstream Kernel Changes ] + + * ALSA: HDA: Enable internal speaker on Dell M101z + - LP: #640254 + + -- Leann Ogasawara Fri, 17 Sep 2010 13:21:28 -0700 + +linux (2.6.35-22.32) maverick; urgency=low + + [ Arjan van de Ven ] + + * SAUCE: libata: Add ALPM power state accounting to the AHCI driver + + [ David Henningsson ] + + * SAUCE: ALSA: HDA: Enable internal mic on Dell E6410 and Dell E6510 + - LP: #605047, #628961 + + [ John Johansen ] + + * [Upstream] AppArmor: Fix splitting an fqname into separate namespace + and profile names + - LP: #615947 + * [Upstream] AppArmor: Fix locking from removal of profile namespace + - LP: #615947 + * SAUCE: AppArmor: allow newer tools to load policy on older kernels + - LP: #639758 + * SAUCE: Improve Amazon EBS performance for EC2 + - LP: #634316 + + [ Leann Ogasawara ] + + * Revert "SAUCE: i915 KMS -- blacklist i855" + * Revert "SAUCE: i915 KMS -- blacklist i845g" + * Revert "SAUCE: i915 KMS -- blacklist i830" + * Revert "SAUCE: i915 KMS -- support disabling KMS for known broken + devices" + * execute module-inclusion within a subshell + - LP: #621175 + + [ Upstream Kernel Changes ] + + * (pre-stable) bounce: call flush_dcache_page() after bounce_copy_vec() + - LP: #633227 + * (pre-stable) drm/i915: don't enable self-refresh on Ironlake + - LP: #629711 + * (pre-stable) mm: Move vma_stack_continue into mm.h + * x86, hwmon: Fix unsafe smp_processor_id() in thermal_throttle_add_dev + - LP: #601073 + * PM / Runtime: Make runtime_status attribute not debug-only (v. 2) + * PM / Runtime: Add runtime PM statistics (v3) + * compat: Make compat_alloc_user_space() incorporate the access_ok() + - CVE-2010-3081 + * x86-64, compat: Test %rax for the syscall number, not %eax + - CVE-2010-3301 + * x86-64, compat: Retruncate rax after ia32 syscall entry tracing + - CVE-2010-3301 + + -- Leann Ogasawara Tue, 14 Sep 2010 08:46:49 -0700 + +linux (2.6.35-21.31) maverick; urgency=low + + [ Andy Whitcroft ] + + * bodge linux-libc-dev package version due to ti-omap4 error + * linux-libc-dev -- ensure we can only build this on debian.master + + -- Leann Ogasawara Mon, 13 Sep 2010 09:54:31 -0700 + +linux (2.6.35-21.30) maverick; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: fbcon -- fix OOPs triggered by race prevention fixes + - LP: #614008 + + [ Daniel Lezcano ] + + * SAUCE: fix compilation warning when CONFIG_SECURITY is not set + + [ Henrik Rydberg ] + + * SAUCE: Input: wacom - add fuzz parameters to features + * SAUCE: Input: wacom - collect device quirks into single function + * SAUCE: Input: wacom - add support for the Bamboo Touch trackpad + * SAUCE: Input: wacom - add a quirk for low resolution Bamboo devices + * SAUCE: hid: ntrig: Remove unused device ids + * SAUCE: hid: ntrig: remove sysfs nodes + * SAUCE: hid: ntrig: Correct logic for quirks + * SAUCE: hid: ntrig: zero-initialize ntrig struct + * SAUCE: hid: ntrig: Setup input filtering manually + * SAUCE: hid: ntrig: New ghost-filtering event logic + + [ Leann Ogasawara ] + + * SAUCE: ndiswrapper: Initialize buffer index and check its value + - LP: #613796 + + [ Manoj Iyer ] + + * SAUCE: Add support for Intellimouse Mode in ALPS touchpad on Dell E2 + series Laptops + - LP: #632884 + + [ Ping Cheng ] + + * SAUCE: Input: wacom - parse the Bamboo device family + + [ Rafi Rubin ] + + * SAUCE: hid: ntrig: identify firmware version (wiggled) + + [ Tim Gardner ] + + * [Config] CONFIG_NL80211_TESTMODE=n + + [ Upstream Kernel Changes ] + + * Revert "input: mt: Add support for the Bamboo Touch trackpad" + * e1000e: initial support for 82579 LOMs + * e1000e: correct MAC-PHY interconnect register offset for 82579 + * (pre-stable) ALSA: hda - Add a new hp-laptop model for Conexant 5066, + tested on HP G60 + - LP: #587388 + * DSS2: Don't power off a panel twice + - LP: #588243 + * mmc: build fix: mmc_pm_notify is only available with CONFIG_PM=y + * Input: i8042 - reset keyboard controller wehen resuming from S2R + - LP: #86820 + * ALSA: hda - Fix beep frequency on IDT 92HD73xx and 92HD71Bxx codecs + - LP: #414795 + * agp/intel: Support the extended physical addressing bits on + Sandybridge. + - LP: #632488 + * drm/i915,intel_agp: Add support for Sandybridge D0 + - LP: #632488 + * (pre-stable) intel_agp,i915: Add more sandybridge graphics device ids + - LP: #632488 + * mmc: omap: fix for bus width which improves SD card's peformance. + + -- Leann Ogasawara Tue, 07 Sep 2010 09:58:52 -0700 + +linux (2.6.35-20.29) maverick; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: i915 KMS -- support disabling KMS for known broken devices + - LP: #563277 + * SAUCE: i915 KMS -- blacklist i830 + - LP: #542208, #563277 + * SAUCE: i915 KMS -- blacklist i845g + - LP: #541492, #563277 + * SAUCE: i915 KMS -- blacklist i855 + - LP: #511001, #541511, #563277 + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_SENSORS_PKGTEMP=m + - LP: #601073 + * ARM: Temporarily disable module check for armel + * rebase to v2.6.35.4 + * [Config] update configs following rebase to v2.6.35.4 + + [ Ricardo Salveti de Araujo ] + + * [Config] Change CONFIG_LEDS_TRIGGER_HEARTBEAT from module to built-in + in Omap + + [ Tim Gardner ] + + * [Config] Added be2net, be2scsi to udebs + - LP: #628776 + + [ Upstream Kernel Changes ] + + * x86, cpu: Package Level Thermal Control, Power Limit Notification + definitions + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: pkgtemp hwmon driver + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: thermal throttling handler + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: power limit + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: pkgtemp documentation + - LP: #601073 + * hid: 3m: Adjust to sequential MT HID protocol + * hid: 3m: Convert to MT slots + * hid: 3m: Correct touchscreen emulation + * hid: 3m: Adjust major / minor axes to scale + * input: bcm5974: Adjust major / minor to scale + * HID: magicmouse: don't allow hidinput to initialize the device + * HID: magicmouse: simplify multitouch feature request + * HID: magicmouse: simplify touch data bit manipulation + * HID: magicmouse: simplify touch down logic + * HID: magicmouse: remove timestamp logic + * HID: magicmouse: enable Magic Trackpad support + * HID: magicmouse: Adjust major / minor axes to scale + * mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume + - LP: #477106 + * drm/i915: fix VGA plane disable for Ironlake+ + - LP: #602281 + + -- Leann Ogasawara Mon, 30 Aug 2010 08:38:01 -0700 + +linux (2.6.35-19.28) maverick; urgency=low + + [ Leann Ogasawara ] + + * No changes from 2.6.35-19.27. Some armel udebs were accidentally deleted + from the archive and a no-change rebuild was attempted. However, the ABI + did not get bumped and resulted in build failures for 2.6.35-19.27. Fix + up the ABI and re-upload. + + -- Leann Ogasawara Sat, 28 Aug 2010 16:42:27 -0700 + +linux (2.6.35-19.27) maverick; urgency=low + + [ Leann Ogasawara ] + + * No changes from 2.6.35-19.26. Some armel udebs were accidentally deleted + from the archive. + + -- Leann Ogasawara Fri, 27 Aug 2010 08:58:35 -0700 + +linux (2.6.35-19.26) maverick; urgency=low + + [ Upstream Kernel Changes ] + + * ARM: OMAP: Beagle: revision detection + * ARM: OMAP: Beagle: only Cx boards use pin 23 for write protect + * ARM: OMAP: Beagle: no gpio_wp pin connection on xM + + -- Leann Ogasawara Thu, 26 Aug 2010 09:15:09 -0700 + +linux (2.6.35-19.25) maverick; urgency=low + + [ Jarod Wilson ] + + * SAUCE: Bring in staging/lirc from 2.6.36 + - LP: #609234 + * SAUCE: Update ir-core to linuxtv/other which should be merged for + 2.6.36. + - LP: #609234 + * SAUCE: Fix memleaks in imon and mceusb drivers + - LP: #609234 + * SAUCE: Bring in streamzap support from linuxtv/other + - LP: #609234 + + [ Mario Limonciello ] + + * Remove ubuntu/lirc in favor of staging/lirc from 2.6.36 + - LP: #609234 + + [ Mathieu J. Poirier ] + + * SAUCE: ARM: adding i2c eeprom driver to read EDID + - LP: #608279 + + [ Upstream Kernel Changes ] + + * intel_idle: disable module support + - LP: #615265 + * (pre-stable) ALSA: hda - Ensure codec patch files are checked for the + correct codec ID + * (pre-stable) ALSA: hda - Rename iMic to Int Mic on Lenovo NB0763 + - LP: #605101 + * (pre-stable) ALSA: HDA: Use model=auto for LG R510 + - LP: #495134 + * (pre-stable) ALSA: HDA: Add Sony VAIO quirk for ALC269 + - LP: #519066 + * (pre-stable) ALSA: HDA: Fix front mic on Dell Precision M6500 + - LP: #519066 + * input: mt: Initialize slots to unused (rev2) + * input: mt: Add support for the Bamboo Touch trackpad + * hid: Add a hid quirk for input sync override + + -- Leann Ogasawara Mon, 23 Aug 2010 12:42:52 -0700 + +linux (2.6.35-18.24) maverick; urgency=low + + [ Colin Watson ] + + * Pass DEB_MAINT_PARAMS to hook scripts + + [ Leann Ogasawara ] + + * [Config] Add CONFIG_INPUT_UINPUT=y to config enforcer + - LP: #584812 + * rebase to v2.6.35.3 + + [ Upstream Kernel Changes ] + + * (pre-stable) dell-wmi: Add support for eject key on Dell Studio 1555 + - LP: #609234 + * can: add limit for nframes and clean up signed/unsigned variables + - CVE-2010-2959 + * drm: Initialize ioctl struct when no user data is present + - CVE-2010-2803 + * ARM: initial stack protector (-fstack-protector) support + * ARM: stack protector: change the canary value per task + * [ARM] implement arch_randomize_brk() + * [ARM] add address randomization to mmap() + * ARM: fix ASLR of PIE executables + + -- Leann Ogasawara Sun, 22 Aug 2010 19:22:04 -0700 + +linux (2.6.35-17.23) maverick; urgency=low + + [ Jeremy Kerr ] + + * [Config] build-in uinput module + - LP: #584812 + + [ Leann Ogasawara ] + + * Revert "[Config] [FTBS] ia64: Temporarily disable CONFIG_CEPH_FS" + * Revert "[Config] [FTBS] ia64: Temporarily disable gpiolib" + * Revert "[Config] [FTBS] sparc: Temporarily disable + CONFIG_MTD_NAND_DENALI" + * Revert "[Config] [FTBS] sparc: Temporarily disable + CONFIG_MFD_JANZ_CMODIO" + * Revert "[Config] [FTBS] sparc: Temporarily disable + CONFIG_INFINIBAND_QIB" + * [Config] Enable INTEL_IPS + - LP: #601057 + * Remove ia64 support + * [Config] Update portsconfigs after removing ia64 support + * Remove sparc support + * [Config] Update portsconfigs after removing sparc support + + [ Linus Torvalds ] + + * (pre-stable) mm: fix page table unmap for stack guard page properly + + [ Mathieu J. Poirier ] + + * SAUCE: (no-up) ARM: Resetting power_mode to its original value. + - LP: #591941 + + [ Upstream Kernel Changes ] + + * timer: add on-stack deferrable timer interfaces + - LP: #601057 + * x86 platform driver: intelligent power sharing driver + - LP: #601057 + * IPS driver: add GPU busy and turbo checking + - LP: #601057 + * X86: intel_ips, check for kzalloc properly + - LP: #601057 + * ips driver: make it less chatty + - LP: #601057 + + -- Leann Ogasawara Tue, 17 Aug 2010 09:38:08 -0700 + +linux (2.6.35-16.22) maverick; urgency=low + + [ Andy Whitcroft ] + + * debian -- more agressivly clean up after depmod on purge + - LP: #618591 + + [ Henrik Rydberg ] + + * SAUCE: hid: 3m: Simplify touchsreen emulation logic + + [ Leann Ogasawara ] + + * ubuntu: iscsitarget -- version 1.4.20.2 + * ubuntu: rtl8192se -- update to version 0017.0507.2010 + * rebase to v2.6.35.2 + * [Config] update configs following rebase to v2.6.35.2 + * [Config] update ports configs following rebase to v2.6.35.2 + + [ Luke Yelavich ] + + * [Config] Enable new firewire stack on powerpc + + [ Mathieu J. Poirier ] + + * SAUCE: (drop after 2.6.35) ARM: Using gpmc function to init nand flash. + - LP: #608266 + + -- Leann Ogasawara Thu, 12 Aug 2010 09:58:01 -0700 + +linux (2.6.35-15.21) maverick; urgency=low + + [ Luke Yelavich ] + + * [Config] CONFIG_SND_USB_UA101=m for all architectures + + [ Upstream Kernel Changes ] + + * Input: introduce MT event slots + * Input: document the MT event slot protocol + * (pre-stable) sched: Revert nohz_ratelimit() for now + * (pre-stable) drm/radeon/kms: add missing copy from user + - LP: #606081 + + [ Leann Ogasawara ] + + * rebase to v2.6.35.1 + + -- Leann Ogasawara Mon, 09 Aug 2010 09:24:04 -0700 + +linux (2.6.35-14.20) maverick; urgency=low + + [ Andy Whitcroft ] + + * update Vcs-Git to point to maverick repo + * debian -- include the debian packaging in the -source package + - LP: #608674 + * select debian source format 1.0 + * add support for building selected stages of kernel + - LP: #603087 + * cleanup conditional dependancy handling + - LP: #603087 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Handle missing NID 0x1b on ALC259 codec + - LP: #582199, #586418, #588031 + * ALSA: hda - Handle pin NID 0x1a on ALC259/269 + - LP: #582199, #586418, #588031 + * sched: Revert nohz_ratelimit() for now + + -- Leann Ogasawara Tue, 03 Aug 2010 08:46:47 -0700 + +linux (2.6.35-14.19) maverick; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.35 + + -- Leann Ogasawara Sun, 01 Aug 2010 10:35:56 -0700 + +linux (2.6.35-13.18) maverick; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: (no-up) Modularize vesafb -- fix initialisation + * SAUCE: add tracing for user initiated readahead requests + * SAUCE: vt -- maintain bootloader screen mode and content until vt + switch + * SAUCE: vt -- allow grub to request automatic vt_handoff + * SAUCE: fbcon -- fix race between open and removal of framebuffers + * SAUCE: drm -- stop early access to drm devices + + [ Bryan Wu ] + + * CONFIG: compile in OTG driver and Transceiver driver + - LP: #566645 + * remove OTG modules from modules list file + + [ John Johansen ] + + * SAUCE: AppArmor: -- sync to AppArmor mainline 2010-07-27 + - LP: #581525, #599450 + * SAUCE: AppArmor: -- sync to AppArmor mainline 2010-07-29 + * SAUCE: AppArmor 2.4 compatibility patch + * SAUCE: AppArmor: Allow dfa backward compatibility with broken userspace + * SAUCE: fix pv-ops for legacy Xen + * SAUCE: blkfront: default to sd devices + * [Config] Build in drivers required for Xen pv-ops + + [ Leann Ogasawara ] + + * Revert "[Upstream] i915: Use the correct mask to detect i830 aperture + size." + + [ Lee Jones ] + + * SAUCE: ARM: OMAP: Add macros for comparing silicon revision + - LP: #608095 + * SAUCE: OMAP: DSS2: check for both cpu type and revision, rather than + just revision + - LP: #608095 + * SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX + - LP: #608095 + * SAUCE: ARM: OMAP: Beagle: support twl gpio differences on xM + - LP: #608095 + + [ Upstream Kernel Changes ] + + * agp/intel: Use the correct mask to detect i830 aperture size. + - LP: #597075 + + -- Leann Ogasawara Fri, 30 Jul 2010 15:46:59 -0700 + +linux (2.6.35-12.17) maverick; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc6 + * [Config] update configs following rebase to v2.6.35-rc6 + * [Config] update ports configs following rebase to v2.6.35-rc6 + * SAUCE: [FTBS] armel: define KEY_F10 and KEYF11 + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc6 + + -- Leann Ogasawara Fri, 23 Jul 2010 16:16:38 +0200 + +linux (2.6.35-11.16) maverick; urgency=low + + [ Leann Ogasawara ] + + * Bump ABI for new compiler update + + -- Leann Ogasawara Fri, 23 Jul 2010 10:24:58 +0200 + +linux (2.6.35-10.15) maverick; urgency=low + + [ Leann Ogasawara ] + + * Revert "SAUCE: ensure vga16fb loads if no other driver claims the VGA + device" + * [Config] Enable CONFIG_M686=y + - LP: #592495 + + [ Upstream Kernel Changes ] + + * tracing: Add alignment to syscall metadata declarations + + -- Leann Ogasawara Tue, 20 Jul 2010 18:18:49 +0200 + +linux (2.6.35-9.14) maverick; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- add BOM and automated update script + * ubuntu: AUFS -- update to b37c575759dc4535ccc03241c584ad5fe69e3b25 + + [ John Johansen ] + + * [Config] Enable DRBD as a module + + [ Kees Cook ] + + * SAUCE: Yama: verify inode is symlink to avoid bind mounts + - LP: #604407 + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_DRM_VMWGFX (staging driver) + - LP: #606139 + * [Config] ports: Disable CONFIG_DRM_VMWGFX (staging driver) + - LP: #606139 + * [Config] Enable CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y + * [Config] ports: Enable CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y + + [ Lee Jones ] + + * Stop ARM boards crashing when CUPS is loaded + - LP: #601226 + + [ Upstream Kernel Changes ] + + * perf probe: Support tracing an entry of array + * perf probe: Support static and global variables + + -- Leann Ogasawara Fri, 16 Jul 2010 14:38:17 -0700 + +linux (2.6.35-8.13) maverick; urgency=low + + [ Kees Cook ] + + * SAUCE: Yama: check PTRACE using thread group leader + * SAUCE: Yama: search for PTRACE exceptions via thread group leader + - LP: #603716 + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc5 + * [Config] update configs following rebase to v2.6.35-rc5 + + [ Nicolas Pitre ] + + * SAUCE: make ndiswrapper available on X86 only + + [ Tim Gardner ] + + * [Config] Added ums-cypress to udeb + - LP: #576066 + * SAUCE: fix build error with CONFIG_BLK_DEV_INITRD=n + * [Config] CONFIG_NDISWRAPPER=m across all configs + + [ Upstream Kernel Changes ] + + * HID: magicmouse: report last touch up + * rebase to 2.6.35-rc5 + + -- Leann Ogasawara Tue, 13 Jul 2010 18:57:59 -0700 + +linux (2.6.35-7.12) maverick; urgency=low + + [ Tim Gardner ] + + * [Upstream] i915: Use the correct mask to detect i830 aperture size. + - LP: #597075 + + [ Upstream Kernel Changes ] + + * (drop after 2.6.35) drm/radeon/kms: add ioport register access + (squashed) + + -- Tim Gardner Thu, 08 Jul 2010 09:53:13 -0600 + +linux (2.6.35-7.11) maverick; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_X86_MRST=n + + [ Upstream Kernel Changes ] + + * (drop after 2.6.35-rc5) writeback: remove writeback_inodes_wbc + * (drop after 2.6.35-rc5) writeback: split writeback_inodes_wb + * (drop after 2.6.35-rc5) writeback: simplify the write back thread queue + + -- Tim Gardner Tue, 06 Jul 2010 18:39:08 -0600 + +linux (2.6.35-7.10) maverick; urgency=low + + [ Kees Cook ] + + * SAUCE: security: create task_free security callback + * SAUCE: Yama: add PTRACE exception tracking and interface + * SAUCE: security: unconditionally chain to Yama LSM + * Revert "SAUCE: ptrace: restrict ptrace scope to children" + * Revert "SAUCE: fs: block hardlinks to non-accessible sources" + * Revert "SAUCE: fs: block cross-uid sticky symlinks" + * [Upstream] security: Yama LSM + * [Config] Enable CONFIG_SECURITY_YAMA=y + + [ Tim Gardner ] + + * [Config] updateconfigs/updateportsconfigs after rebase to 2.6.35-rc4 + + [ Upstream Kernel Changes ] + + * rebase to 2.6.35-rc4 + + -- Leann Ogasawara Thu, 01 Jul 2010 08:55:57 -0700 + +linux (2.6.35-6.9) maverick; urgency=low + + [ Tim Gardner ] + + * [Upstream] direct_splice_actor() should not use pos in sd + - LP: #588861 + + -- Leann Ogasawara Mon, 28 Jun 2010 12:35:49 -0700 + +linux (2.6.35-6.8) maverick; urgency=low + + [ Mathieu J. Poirier ] + + * ARM: Adding regulator supply for vdds_sdi. + - LP: #597904 + + -- Leann Ogasawara Sun, 27 Jun 2010 16:34:43 -0700 + +linux (2.6.35-6.7) maverick; urgency=low + + [ Alberto Milone ] + + * [Upstream] Add support for the ATIF ACPI method to the radeon driver + + [ Chase Douglas ] + + * [Upstream] HID: magicmouse: scroll on entire surface, not just middle + of mouse + * [Upstream] HID: magicmouse: disable and add module param for scroll + acceleration + * [Upstream] HID: magicmouse: properly account for scroll movement in + state + * [Upstream] HID: magicmouse: add param for scroll speed + * [Upstream] HID: magicmouse: enable horizontal scrolling + + [ Henrik Rydberg ] + + * [Upstream] Input: evdev - convert to dynamic event buffer + * [Upstream] Input: evdev - use driver hint to compute size of event + buffer + * [Upstream] Input: bcm5974 - set the average number of events per MT + event packet + * [Upstream] Input: hid-input - use a larger event buffer for MT devices + * [Upstream] Input: evdev - never leave the client buffer empty after + write + + [ John Johansen ] + + * SAUCE: AppArmor: -- mainline 2010-06-23 + * SAUCE: AppArmor 2.4 compatibility patch + * SAUCE: fs: block hardlinks to non-accessible sources AppArmor portion + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_INTR_REMAP=y + - LP: #597091 + * [Config] Enable CONFIG_X86_X2APIC + - LP: #597091 + + [ Mathieu J. Poirier ] + + * [Config] ARM: Turning off CONFIG_CPU_IDLE on omap + - LP: #594382 + + -- Leann Ogasawara Thu, 24 Jun 2010 12:19:48 -0700 + +linux (2.6.35-5.6) maverick; urgency=low + + [ Amit Kucheria ] + + * [Config] update omap flavour description + + [ Andy Whitcroft ] + + * update to ubuntu-debian:508b7aa34b578c0d1e51bfb571f2bfb824dc65ac + - LP: #570500, #576274 + * SAUCE: add option to hand off all kernel parameters to init + - LP: #586386 + * [Config] enable passing all kernel command line to init + - LP: #586386 + * [Config] disable CONFIG_VMI + - LP: #537601 + * [Config] enable CONFIG_IPV6_SIT_6RD + - LP: #591869 + * [Config] enable CONFIG_VMWARE_BALOON as module + - LP: #592039 + + [ Leann Ogasawara ] + + * Revert "SAUCE: pm: Config option to disable handling of console during + suspend/resume" + - LP: #594885 + * [Config] Remove CONFIG_PM_DISABLE_CONSOLE + * [Config] ports: enable passing all kernel command line to init + - LP: #586386 + * [Config] Enable CONFIG_FB_VESA=y for x86 + * [Config] Add CONFIG_FRAMEBUFFER_CONSOLE=y to config enforcer + * [Config] Add CONFIG_FB_VESA=y for x86 to config enforcer + * [Config] Enable CONFIG_TASK_DELAY_ACCT=y + - LP: #493156 + + [ Mathieu Poirier ] + + * ARM: Adding MosChip MCS7830 to nic-usb + - LP: #584920 + + [ Upstream Kernel Changes ] + + * Revert "[Upstream] docbook: need xmldoclinks for all doc types" + * docbook: need xmldoclinks for all doc types + * perf probe: Add kernel source path option + + -- Leann Ogasawara Thu, 17 Jun 2010 08:05:29 -0700 + +linux (2.6.35-4.5) maverick; urgency=low + + [ Leann Ogasawara ] + + * Revert "[Upstream] (evdev) Use driver hint to compute the evdev buffer + size (rev2)" + * Revert "[Upstream] (evdev) Convert to dynamic event buffer (rev4)" + * Revert "[Upstream] (evdev) Use multi-reader buffer to save space + (rev4)" + * Revert "SAUCE: drivers: Remove some duplicate device entries in various + modules" + * [Upstream] USB: option: Remove duplicate AMOI_VENDOR_ID + * [Upstream] Revert "USB: Adding support for HTC Smartphones to ipaq" + * [Upstream] p54usb: Comment out duplicate Medion MD40900 device id + + [ Tim Gardner ] + + * [Config] CONFIG_NFS_FSCACHE=y + - LP: #440522 + * [Config] CONFIG_FSCACHE_STATS=y, CONFIG_FSCACHE_HISTOGRAM=y + - LP: #440522 + + -- Leann Ogasawara Wed, 16 Jun 2010 08:43:07 -0700 + +linux (2.6.35-3.4) maverick; urgency=low + + [ Andy Whitcroft ] + + * debian -- ensure the version number is clean + + [ Henrik Rydberg ] + + * [Upstream] Introduce MT event slots (rev 5) + * [Upstream] Document the MT event slot protocol (rev5) + * [Upstream] (evdev) Use multi-reader buffer to save space (rev4) + * [Upstream] (evdev) Convert to dynamic event buffer (rev4) + * [Upstream] (evdev) Use driver hint to compute the evdev buffer size + (rev2) + + [ Leann Ogasawara ] + + * Revert "SAUCE: Add MODULE_ALIAS for Dell WMI module" + * Revert "SAUCE: hostap: send events on data interface as well as master + interface" + * Revert "Fix webcam having USB ID 0ac8:303b" + * Revert "SAUCE: toshiba_acpi -- pull in current -dev version of driver" + * rebase to v2.6.35-rc3 + + [ Maxim Levitsky ] + + * [Config] Enable new Smartmedia/xD translation layer + - LP: #202490 + + [ Upstream Kernel Changes ] + + * net: fix deliver_no_wcard regression on loopback device + + [ Upstream changes ] + + * rebased to v2.6.35-rc3 + + -- Leann Ogasawara Thu, 10 Jun 2010 16:15:22 -0700 + +linux (2.6.35-2.3) maverick; urgency=low + + [ Bryan Wu ] + + * CONFIG: enforce -- make sure we disable CONFIG_LOCALVERSION_AUTO + + [ Leann Ogasawara ] + + * [Config] armel: Enable CONFIG_BNX2=m + * [Config] ports: Enable CONFIG_BNX2X=m + * SAUCE: armel: define get_dma_ops to fix FTBS + + [ Tim Gardner ] + + * [Upstream] net: Print num_rx_queues imbalance warning only when there + are allocated queues + - LP: #591416 + + -- Leann Ogasawara Wed, 09 Jun 2010 08:27:41 -0700 + +linux (2.6.35-2.2) maverick; urgency=low + + [ Andy Whitcroft ] + + * [Config] d-i: make armel configuration versatile flavour specific + - LP: #588805 + * [Config] d-i: enable .udebs for omap flavour + - LP: #588805 + + [ Kees Cook ] + + * ptrace: limit scope to attach only (allow read) + - LP: #589656 + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc2 + * [Config] update configs following rebase to v2.6.35-rc2 + * [Config] update port configs following rebase to v2.6.35-rc2 + + [ Lee Jones ] + + * Enable perf to be more helpful when perf_ does not exist. + - LP: #570500 + * 'fdr editconfig' modification. Easily skip over unwanted menuconfigs. + + [ Tim Gardner ] + + * [Config] Update bnx2 udeb firmware files + - LP: #589304 + + [ Upstream changes ] + + * rebased to v2.6.35-rc2 + + -- Leann Ogasawara Mon, 07 Jun 2010 09:45:04 -0700 + +linux (2.6.35-1.1) maverick; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update to standalone 2.6.35-rcN as at 20100601 + - LP: #587888 + * ubuntu: AUFS -- track changes to the arguements to fop fsync() + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc1 + * [Config] update configs following rebase to v2.6.35-rc1 + * [Config] update port configs following rebase to v2.6.35-rc1 + * SAUCE: lirc: rename usb_buffer_alloc() and usb_buffer_free() + * SAUCE: ndiswrapper: rename usb_buffer_alloc() and usb_buffer_free() + * SAUCE: ndiswrapper: convert multicast list to list_head + * [Config] [FTBS] armel: Temporarily disable CONFIG_GPIO_JANZ_TTL + * [Config] [FTBS] ia64: Temporarily disable gpiolib + * [Config] [FTBS] ia64: Temporarily disable CONFIG_CEPH_FS + * [Config] [FTBS] sparc: Temporarily disable CONFIG_INFINIBAND_QIB + * [Config] [FTBS] sparc: Temporarily disable CONFIG_MFD_JANZ_CMODIO + * [Config] [FTBS] armel: Temporarily disable CONFIG_MFD_JANZ_CMODIO + * [Config] [FTBS] armel: Temporarily disable CONFIG_DT3155 + * [Config] [FTBS] sparc: Temporarily disable CONFIG_MTD_NAND_DENALI + * [Config] [FTBS] armel: Temporarily disable bnx2 + * [Config] [FTBS] armel: Temporarily disable CONFIG_SERIAL_UARTLITE + * SAUCE: [FTBS] armel: Don't include asm/agp.h for ttm + * SAUCE: [FTBS] armel: include linux/dma-mapping.h + * SAUCE: [FTBS] armel: replace omap_set_gpio_debounce with + gpio_set_debounce + + [ Upstream Kernel Changes ] + + * of/usb: fix build error due to of_node pointer move + * n2_crypto: Fix build after of_device/of_platform_driver changes. + * powerpc/fsl-booke: fix the case where we are not in the first page + * powerpc/fsl-booke: Move the entry setup code into a seperate file + * powerpc/kexec: Add support for FSL-BookE + * greth: Fix build after OF device conversions. + + [ Upstream changes ] + + * rebased to v2.6.35-rc1 + + -- Leann Ogasawara Fri, 04 Jun 2010 23:01:52 -0700 + +linux (2.6.35-1.0) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * Null entry. + + -- Leann Ogasawara Wed, 02 Jun 2010 15:17:41 -0700 + +linux (2.6.34-5.14) maverick; urgency=low + + [ Tim Gardner ] + + * [Config] Added module inclusion support + * [Config] Added virtual flavour module inclusion list and d-i package + definitions + + -- Leann Ogasawara Wed, 02 Jun 2010 12:58:14 -0700 + +linux (2.6.34-5.13) maverick; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- aufs2 20091209" + * Revert "ubuntu: AUFS -- export various core functions + (aufs2-standalone.patch)" + * Revert "ubuntu: AUFS -- export various core functions + (aufs2-base.patch)" + * ubuntu: AUFS -- aufs2 base patch for linux-2.6.34 + - LP: #587888 + * ubuntu: AUFS -- aufs2 standalone patch for linux-2.6.34 + - LP: #587888 + * ubuntu: AUFS -- update to standalone 2.6.34 as at 20100601 + - LP: #587888 + * [Config] AUFS -- enable aufs options + - LP: #587888 + + -- Leann Ogasawara Tue, 01 Jun 2010 08:56:43 -0700 + +linux (2.6.34-5.12) maverick; urgency=low + + [ Andy Whitcroft ] + + * enforce -- ensure SYSFS compatibility is disabled + + [ Chase Douglas ] + + * build with libdw-dev for perf probe symbol support + * maverick ftrace configuration changes + + [ Kees Cook ] + + * Revert "SAUCE: x86: brk away from exec rand area" + * Revert "SAUCE: [um] Don't use nx_enabled under UML" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: x86: implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: x86: more tightly confine cs-limit nx-emulation to ia32 only + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + * SAUCE: ptrace: restrict ptrace scope to children + + [ Leann Ogasawara ] + + * Add new omap flavour to getabis + * [Config] Enable CONFIG_FRAMEBUFFER_CONSOLE=y for all archs + - LP: #585490 + * build/modules: Temorarily add ignore.modules + * ubuntu: iscsitarget -- version 1.4.20.1 + + [ Loïc Minier ] + + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + + -- Leann Ogasawara Fri, 28 May 2010 08:27:17 -0700 + +linux (2.6.34-4.11) maverick; urgency=low + + [ Amit Kucheria ] + + * SAUCE: omap: remove calls to usb_nop_xceiv_register from board files + * [Config] Add support for OMAP-mainline flavour + + [ Andy Whitcroft ] + + * SAUCE: powerpc: fix compile error when ptrace.h is included from + userspace + - LP: #583733 + + [ Chase Douglas ] + + * Revert "SAUCE: Don't register vga16fb framebuffer if other framebuffers + are present" + * Revert "SAUCE: Disable function tracing after hitting __schedule_bug" + * Revert "SAUCE: drm/i915: don't change DRM configuration when releasing + load detect pipe" + + [ Kees Cook ] + + * SAUCE: fs: block cross-uid sticky symlinks + * SAUCE: fs: block hardlinks to non-accessible sources + + [ Koen Kooi ] + + * SAUCE: board-omap3-beagle: add DSS2 support + + [ Leann Ogasawara ] + + * Revert "staging/go7007 -- disable" + * Revert "[Config] staging/winbond -- disable" + * Revert "Disable 4MB page tables for Atom, work around errata AAE44" + * Revert "SAUCE: sync before umount to reduce time taken by ext4 umount" + * Revert "SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit + controller" + * Revert "SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT" + * Revert "SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros" + * Revert "SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps" + * Revert "SAUCE: r8169: disable TSO by default for RTL8111/8168B + chipsets." + * Revert "[Upstream] b43: Declare all possible firmware files." + * Revert "add Breaks: against hardy lvm2" + * Revert "SAUCE: Guest OS does not recognize a lun with non zero target + id on Vmware ESX Server" + * Revert "SAUCE: Catch nonsense keycodes and silently ignore" + * [Config] Enable CONFIG_ECRYPT_FS=y for ports + * [Config] Enable CONFIG_USB=y for armel and sparc + * [Config] Enable CONFIG_SCSI=y for ia64 and sparc + * [Config] Enable CONFIG_RFKILL=y for ports + * [Config] Enable CONFIG_ATH9K_DEBUGFS=y + * [Config] Enable CONFIG_IWMC3200TOP_DEBUGFS=y + * [Config] Enable CONFIG_RCU_FAST_NO_HZ=y + * [Config] Enable CONFIG_IWLWIFI_DEVICE_TRACING=y + * [Config] Enable CONFIG_LIBERTAS_MESH=y + * [Config] Enable CONFIG_MMC_RICOH_MMC=y + * [Config] CONFIG_RT2800USB_UNKNOWN=y + * [Config] Enable CONFIG_VGA_SWITCHEROO=y + * [Config] Enable CONFIG_CEPH_FS=m + * [Config] Enable CONFIG_CRYPTO_PCRYPT=m + * [Config] Enable CONFIG_EEEPC_WMI=m + * [Config] Enable CONFIG_RT2800PCI=m + * [Config] Enable CONFIG_SCSI_HPSA=m + * [Config] Enable CONFIG_VHOST_NET=m + * [Config] Disable CONFIG_SND_HDA_INPUT_BEEP_MODE by default + - LP: #582350 + * [Config] Disable CONFIG_SOUND_OSS* and CONFIG_SND_*OSS + - LP: #579300 + * [Config] Enable CONFIG_PCIEASPM=y + - LP: #333990 + * [Config] updateconfigs for OMAP flavour + + [ Loïc Minier ] + + * Enable perf tools on armel + + [ Tim Gardner ] + + * SAUCE: Updated ndiswrapper to 1.56 + - LP: #582555 + * [Config] Added virtual flavour + * [Config] Remove support for sub-flavours + * [Config] Removed amd64 preempt flavour + * [Config] updateconfigs, updateportsconfigs after flavour munging + + -- Leann Ogasawara Tue, 25 May 2010 09:34:55 -0700 + +linux (2.6.34-3.10) maverick; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34 + + [ Upstream changes ] + + * rebased to v2.6.34 + + -- Leann Ogasawara Tue, 18 May 2010 17:35:35 -0700 + +linux (2.6.34-2.9) maverick; urgency=low + + [ Leann Ogasawara ] + + * [Config] [FTBS] Disable comedi for armel + + -- Leann Ogasawara Thu, 13 May 2010 23:20:55 +0200 + +linux (2.6.34-2.8) maverick; urgency=low + + [ Leann Ogasawara ] + + * Drop lpia + * [Config] [FTBS] disable KVM + * [Config] [FTBS] disable ipr for armel + + -- Leann Ogasawara Thu, 13 May 2010 16:07:52 +0200 + +linux (2.6.34-2.7) maverick; urgency=low + + [ Leann Ogasawara ] + + * [Config] disable CONFIG_SCSI_IPR on powerpc + * [Config] Remove 386 flavour per UDS discussion + + -- Leann Ogasawara Wed, 12 May 2010 18:26:43 +0200 + +linux (2.6.34-1.6) maverick; urgency=low + + [ Chase Douglas ] + + * enforce CONFIG_TMPFS_POSIX_ACL=y + - LP: #575940 + * don't force module dependency checking + - LP: #577029 + + [ Kees Cook ] + + * SAUCE: mmap_min_addr check CAP_SYS_RAWIO only for write + - LP: #568844 + + [ Leann Ogasawara ] + + * Revert "SAUCE: ata: blacklist FUJITSU MHW2160BH PL" + * rebase to v2.6.34-rc7 + * [Config] update configs following rebase to v2.6.34-rc7 + * [Config] update port configs following rebase to v2.6.34-rc7 + * Add btrfs to the udebs + + [ Tim Gardner ] + + * [Config] Add atl1c to nic-modules udeb + - LP: #557130 + + [ Upstream changes ] + + * rebased to v2.6.34-rc7 + + -- Leann Ogasawara Tue, 11 May 2010 11:29:08 +0200 + +linux (2.6.34-1.5) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc6 + * [Config] update configs following rebase to v2.6.34-rc6 + * [Config] update port configs following rebase to v2.6.34-rc6 + + [ Upstream changes ] + + * rebased to v2.6.34-rc6 + + -- Leann Ogasawara Fri, 30 Apr 2010 15:54:05 +0100 + +linux (2.6.34-1.4) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc5 + * [Config] update ports configs following rebase to v2.6.34-rc5 + + [ Upstream changes ] + + * rebased to v2.6.34-rc5 + + -- Leann Ogasawara Thu, 22 Apr 2010 15:36:12 -0700 + +linux (2.6.34-1.3) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc4 + * [Config] update configs following rebase to v2.6.34-rc4 + * [Config] update port configs following rebase to v2.6.34-rc4 + * ubuntu: dm-raid4-5 -- update to compile with 2.6.34-rc4 + + [ Upstream changes ] + + * rebased to v2.6.34-rc4 + + -- Leann Ogasawara Tue, 13 Apr 2010 18:33:44 -0700 + +linux (2.6.34-1.2) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * Temorarily disable building linux-doc + * rebase to v2.6.34-rc3 + * [Config] update configs following rebase to v2.6.34-rc3 + * [Config] update port configs following rebase to v2.6.34-rc3 + + [ Upstream changes ] + + * rebased to v2.6.34-rc3 + + -- Leann Ogasawara Tue, 30 Mar 2010 16:55:44 -0700 + +linux (2.6.34-1.1) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc2 + * ubuntu: dm-raid4-5 -- update to compile with 2.6.34-rc2 + * [Config] update port configs following rebase to v2.6.34-rc2 + * [Config] update configs following rebase to v2.6.34-rc2 + + [ Upstream changes ] + + * rebased to v2.6.34-rc2 + + -- Leann Ogasawara Wed, 24 Mar 2010 23:00:39 -0700 + +linux (2.6.33-1.1) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * ubuntu: dm-raid4-5 -- update to compile with 2.6.33 + * ubuntu: lirc -- drop explicit include of linux/autoconf.h + * ubuntu: lirc -- pass kfifo to kfifo_alloc and move spinlock + * ubuntu: lirc -- rename kfifo_put and kfifo_get + * ubuntu: iscsitarget -- rename daddr inet_sock field + * rebased to v2.6.33 + * [Config] update configs following rebase to v2.6.33 + * [Config] update ports configs following rebase to v2.6.33 + + [ Upstream changes ] + + * rebased to v2.6.33 + + -- Leann Ogasawara Tue, 23 Mar 2010 03:55:46 -0700 + +linux (2.6.33-0.0) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * Null entry. + + -- Leann Ogasawara Wed, 17 Mar 2010 07:48:56 -0700 + +linux (2.6.32-16.25) lucid; urgency=low + + [ Andy Whitcroft ] + + * linux-tools -- move to Suggests: with explicit seeding + - LP: #534635 + + [ Tim Gardner ] + + * [Config] CONFIG_HID=m + + [ Upstream Kernel Changes ] + + * (pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue() + * KVM: introduce kvm_vcpu_on_spin + * KVM: VMX: Add support for Pause-Loop Exiting + + -- Andy Whitcroft Tue, 09 Mar 2010 14:13:51 +0000 + +linux (2.6.32-16.24) lucid; urgency=low + + [ Andy Whitcroft ] + + * armel -- perf userspace does not support arm + * ia64 -- libelf-dev/binutils-dev to not provide necessary libraries + + -- Andy Whitcroft Sat, 06 Mar 2010 11:42:12 +0000 + +linux (2.6.32-16.23) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: PM report driver and device suspend/resume times -- move config + * update to standards version 3.8.4.0 + * printenv -- expose all of the package selectors + * source package -- cleanup source content control + * doc package -- ensure we do build package content on buildd + * lintian -- correct the address in the debian/copyright + * lintian -- update debhelper package version dependancy + * lintian -- fix ghostscript dependancy + * lintian -- add required misc:Depends + * lintian -- move our debhelper compat level to debian/compat + * perf -- build the kernel carried tools + * perf -- add linux-tools carrying the version switches and manuals + * SAUCE: fix up Kconfig for staging drivers + * [Config] enable NOUVEAU etc following drm backport + * update DRM to mainline v2.6.33 + * [Config] Remove AppArmor config options that no longer exist (ports) + * [Config] updateportsconfigs following drm update + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-03-04 + * SAUCE: AppArmor: Reintroduce AppArmor 2.4 compatibility + * SAUCE: AppArmor: replace strim with strstrip for 2.6.32 kernels + * [Config] Remove AppArmor config options that no longer exist + + [ Manoj Iyer ] + + * ubuntu: rtl8192se -- version 2010-0115,0014 + - LP: #530275 + * [Config] added CONFIG_RTL8192SE module. + - LP: #530275 + + [ Tim Gardner ] + + * [Config] Added vmw_pvscsi to d-i/scsi-modules + - LP: #531017 + * [Upstream] netfilter: xt_recent: Add an entry reaper + + [ Upstream Kernel Changes ] + + * Revert "KVM: x86 emulator: Check CPL level during privilege instruction + emulation" + * Revert "KVM: x86 emulator: Fix popf emulation" + * Revert "KVM: x86 emulator: Check IOPL level during io instruction + emulation" + * Revert "KVM: x86 emulator: Add Virtual-8086 mode of emulation" + * Revert "KVM: fix memory access during x86 emulation." + * Add vlan (8021.Q) module package for d-i. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + * [Upstream] docbook: need xmldoclinks for all doc types + * x86: set_personality_ia32() misses force_personality32 + * lib: Introduce generic list_sort function + * drm/nv50: Implement ctxprog/state generation. + * drm/nv50: Remove redundant/incorrect ctxvals initialisation. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + + -- Andy Whitcroft Fri, 05 Mar 2010 15:40:38 +0000 + +linux (2.6.32-15.22) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT" + * Revert "SAUCE: PM report driver and device suspend/resume times." + * [Config] set CONFIG_SR_REPORT_TIME_LIMIT + + [ Manoj Iyer ] + + * SAUCE: PM report driver and device suspend/resume times. + + -- Andy Whitcroft Tue, 02 Mar 2010 01:35:37 +0000 + +linux (2.6.32-15.21) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/i915: Increase fb alignment to 64k" + * Revert "[Config] lenovo-sl-laptop -- enable" + * Revert "ubuntu: lenovo-sl-laptop -- git tip (b19a08f81f)" + * armel -- cramfs module will no longer be built + * d-i -- make all modules optional + * rename the debug packages to match archive standard + - LP: #527837 + * lenovo-sl-laptop is no longer built + + [ Colin Ian King ] + + * Disable 4MB page tables for Atom, work around errata AAE44 + - LP: #523112 + + [ Colin Watson ] + + * ubuntu: dm-raid4-5: Depend on XOR_BLOCKS + * ubuntu: fsam7400: Depend on CHECK_SIGNATURE + + [ Jesse Barnes ] + + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + + [ Loïc Minier ] + + * [Config] armel Update versatile initrd configs + - LP: #524893 + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + + [ Manoj Iyer ] + + * [Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT + + [ Mario Limonciello ] + + * SAUCE: v3 - Add Dell Business Class Netbook LED driver + + [ Rafael J. Wysocki ] + + * SAUCE: PM report driver and device suspend/resume times. + + [ Surbhi Palande ] + + * Revert "[Upstream] e1000e: enhance frame fragment detection" + - CVE-2009-4538 + * Revert "[Upstream] e1000: enhance frame fragment detection" + - CVE-2009-4536 + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_LEDS_DELL_NETBOOKS=m + * SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow + * SAUCE: (pre-stable) netfilter: xt_recent: fix false match + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) eCryptfs: Add getattr function" + * Fix potential crash with sys_move_pages + * futex_lock_pi() key refcnt fix + * futex: Handle user space corruption gracefully + * futex: Handle futex value corruption gracefully + * Fix race in tty_fasync() properly + * hwmon: (w83781d) Request I/O ports individually for probing + * hwmon: (lm78) Request I/O ports individually for probing + * hwmon: (adt7462) Wrong ADT7462_VOLT_COUNT + * ALSA: ctxfi - fix PTP address initialization + * drm/i915: disable hotplug detect before Ironlake CRT detect + * drm/i915: enable self-refresh on 965 + * drm/i915: Disable SR when more than one pipe is enabled + * drm/i915: Fix DDC on some systems by clearing BIOS GMBUS setup. + * drm/i915: Add HP nx9020/SamsungSX20S to ACPI LID quirk list + * drm/i915: Fix the incorrect DMI string for Samsung SX20S laptop + * drm/i915: Add MALATA PC-81005 to ACPI LID quirk list + * usb: r8a66597-hcd: Flush the D-cache for the pipe-in transfer buffers. + * i2c-tiny-usb: Fix on big-endian systems + * drm/i915: handle FBC and self-refresh better + * drm/i915: Increase fb alignment to 64k + * drm/i915: Update write_domains on active list after flush. + * regulator: Fix display of null constraints for regulators + * ALSA: hda-intel: Avoid divide by zero crash + * CPUFREQ: Fix use after free of struct powernow_k8_data + * freeze_bdev: don't deactivate successfully frozen MS_RDONLY sb + * cciss: Make cciss_seq_show handle holes in the h->drv[] array + * ioat: fix infinite timeout checking in ioat2_quiesce + * resource: add helpers for fetching rlimits + * fs/exec.c: restrict initial stack space expansion to rlimit + * cifs: fix length calculation for converted unicode readdir names + * NFS: Fix a reference leak in nfs_wb_cancel_page() + * NFS: Try to commit unstable writes in nfs_release_page() + * NFSv4: Don't allow posix locking against servers that don't support it + * NFSv4: Ensure that the NFSv4 locking can recover from stateid errors + * NFS: Fix an Oops when truncating a file + * NFS: Fix a umount race + * NFS: Fix a bug in nfs_fscache_release_page() + * NFS: Fix the mapping of the NFSERR_SERVERFAULT error + * md: fix 'degraded' calculation when starting a reshape. + * V4L/DVB: dvb-core: fix initialization of feeds list in demux filter + * Export the symbol of getboottime and mmonotonic_to_bootbased + * kvmclock: count total_sleep_time when updating guest clock + * KVM: PIT: control word is write-only + * tpm_infineon: fix suspend/resume handler for pnp_driver + * amd64_edac: Do not falsely trigger kerneloops + * netfilter: nf_conntrack: fix memory corruption with multiple namespaces + * netfilter: nf_conntrack: per netns nf_conntrack_cachep + * netfilter: nf_conntrack: restrict runtime expect hashsize modifications + * netfilter: xtables: compat out of scope fix + * netfilter: nf_conntrack: fix hash resizing with namespaces + * drm/i915: remove full registers dump debug + * drm/i915: add i915_lp_ring_sync helper + * drm/i915: Don't wait interruptible for possible plane buffer flush + * dasd: remove strings from s390dbf + * crypto: padlock-sha - Add import/export support + * wmi: Free the allocated acpi objects through wmi_get_event_data + * dell-wmi, hp-wmi, msi-wmi: check wmi_get_event_data() return value + * /dev/mem: introduce size_inside_page() + * devmem: check vmalloc address on kmem read/write + * devmem: fix kmem write bug on memory holes + * SCSI: mptfusion : mptscsih_abort return value should be SUCCESS instead + of value 0. + * sh: Couple kernel and user write page perm bits for CONFIG_X2TLB + * ALSA: hda - use WARN_ON_ONCE() for zero-division detection + * dst: call cond_resched() in dst_gc_task() + * ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support + * befs: fix leak + * rtc-fm3130: add missing braces + * Call flush_dcache_page after PIO data transfers in libata-sff.c + * ahci: add Acer G725 to broken suspend list + * pktgen: Fix freezing problem + * x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt + * x86/amd-iommu: Fix deassignment of a device from the pt_domain + * x86: Re-get cfg_new in case reuse/move irq_desc + * Staging: fix rtl8187se compilation errors with mac80211 + * ALSA: usb-audio - Avoid Oops after disconnect + * serial: 8250: add serial transmitter fully empty test + * sysfs: sysfs_sd_setattr set iattrs unconditionally + * class: Free the class private data in class_release + * USB: usbfs: only copy the actual data received + * USB: usbfs: properly clean up the as structure on error paths + * rtl8187: Add new device ID + * ACPI: Add NULL pointer check in acpi_bus_start + * ACPI: fix High cpu temperature with 2.6.32 + * drm/radeon/kms: use udelay for short delays + * NFS: Too many GETATTR and ACCESS calls after direct I/O + * eCryptfs: Add getattr function + * b43: Fix throughput regression + * ath9k: Fix sequence numbers for PAE frames + * mac80211: Fix probe request filtering in IBSS mode + * iwlwifi: Fix to set correct ht configuration + * dm stripe: avoid divide by zero with invalid stripe count + * dm log: userspace fix overhead_size calcuations + * Linux 2.6.32.9 + * sfc: Fix SFE4002 initialisation + * sfc: Fix sign of efx_mcdi_poll_reboot() error in efx_mcdi_poll() + * sfc: SFE4002/SFN4112F: Widen temperature and voltage tolerances + * (pre-stable) HID: handle joysticks with large number of buttons + - LP: #492056 + * (pre-stable) HID: extend mask for BUTTON usage page + - LP: #492056 + * PM: Measure device suspend and resume times + * e1000: enhance frame fragment detection + - CVE-2009-4536 + * e1000e: enhance frame fragment detection + - CVE-2009-4538 + * KVM: fix memory access during x86 emulation. + - CVE-2010-0306 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - CVE-2010-0306 + * KVM: x86 emulator: Fix popf emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - CVE-2010-0306 + * Input: wacom - ensure the device is initialized properly upon resume + * Input: wacom - add defines for packet lengths of various devices + * Input: wacom - add support for new LCD tablets + - LP: #516777 + + -- Andy Whitcroft Mon, 01 Mar 2010 22:56:28 +0000 + +linux (2.6.32-14.20) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebuild following the GCC update to match compiler for out of tree modules + * Revert "[Config] drbd -- enable" + * Revert "ubuntu: drbd -- version 8.3.1" + * SAUCE: khubd -- switch USB product/manufacturer/serial handling to RCU + - LP: #510937 + + -- Andy Whitcroft Fri, 19 Feb 2010 18:47:18 +0000 + +linux (2.6.32-14.19) lucid; urgency=low + + [ Andy Whitcroft ] + + * ensure we build the source package contents when enabled + - LP: #522308 + * [Config] enable CONFIG_X86_MCE_XEON75XX + * SAUCE: AppArmor -- add linux/kref.h for struct kref + * [Config] enable CONFIG_HID_ORTEK + * enable udeb generation for arm versatile flavour + - LP: #522515 + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-02-18 + - LP: #439560, #496110, #507069 + + [ Johnathon Harris ] + + * SAUCE: HID: add support for Ortek WKB-2000 + - LP: #405390 + + [ Upstream Kernel Changes ] + + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #490487 + * x86, mce: Xeon75xx specific interface to get corrected memory error + information + * x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll + * x86, mce: Make xeon75xx memory driver dependent on PCI + * drm/edid: Unify detailed block parsing between base and extension + blocks + - LP: #500999 + * (pre-stable) eCryptfs: Add getattr function + - LP: #390833 + + -- Andy Whitcroft Thu, 18 Feb 2010 19:22:02 +0000 + +linux (2.6.32-13.18) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "enforcer -- make the enforcement configuration common" + * Revert "(pre-stable) Input: ALPS - add interleaved protocol support + (Dell E6x00 series)" + * Revert "(pre-stable) driver-core: fix devtmpfs crash on s390" + * Revert "(pre-stable) Driver-Core: devtmpfs - set root directory mode to + 0755" + * Revert "SAUCE: Adds support for COMPAL JHL90 webcam" + * Revert "SAUCE: fix kernel oops in VirtualBox during paravirt patching" + * Revert "SAUCE: make fc transport removal of target configurable" + * enforcer -- make the enforcement configuration common + * getabis -- add preempt flavour to the list + * [Config] enforce DEVTMPFS options + * [Config] armel -- cleanup to-be builtin modules + * [Config] cleanup ports configs + * [Config] enable CRYPTO_GHASH_CLMUL_NI_INTEL + - LP: #485536 + * add printdebian target to find branch target + * distclean -- do not remove debian.env + * [Config] generic-pae switch to M586TSC + - LP: #519448 + * git-ubuntu-log -- commonise duplicated log handling + * git-ubuntu-log -- tighten up Bug: NNNN matching + * git-ubuntu-log -- sort the bug numbers + + [ Chris Wilson ] + + * (pre-stable) drm/i915: Increase fb alignment to 64k + - LP: #404064 + + [ Eric Miao ] + + * arm -- enable ubuntu/ directory + + [ Huang Ying ] + + * SAUCE: crypto: ghash - Add PCLMULQDQ accelerated implementation + * SAUCE: crypto: ghash-intel - Fix building failure on x86_32 + + [ Loïc Minier ] + + * [Config] cleanup preempt configuration + * [Config] versatile: Fix video output + - LP: #517594 + * [Config] armel DEFAULT_MMAP_MIN_ADDR=32768 + * [Config] Large update to armel/versatile + * [Config] versatile: Add RTC support + * [Config] armel: Enable NEON + * [Config] versatile: Builtin MMC support + * [Config] versatile Builtin SCSI controller + * [Config] armel Disable dma_cache_sync callers + * [Config] armel Disable asm/time.h users + * [Config] armel Disable out of range udelay() + * [Config] armel Disable flush_cache_range() users + * [Config] armel -- Enable ubuntu/ drivers + + [ Steve Conklin ] + + * SAUCE: drm/i915: Add display hotplug event on Ironlake + * SAUCE: drm/i915: Add ACPI OpRegion support for Ironlake + + [ Upstream Kernel Changes ] + + * Revert "[Upstream]: oprofile/x86: add Xeon 7500 series support" + * Revert "Revert "[Bluetooth] Eliminate checks for impossible conditions + in IRQ handler"" + * clockevent: Don't remove broadcast device when cpu is dead + * clockevents: Add missing include to pacify sparse + * ACPI: don't cond_resched if irq is disabled + * be2net: Add support for next generation of BladeEngine device. + * be2net: Add the new PCI IDs to PCI_DEVICE_TABLE. + * mpt2sas: New device SAS2208 support is added + * ar9170: Add support for D-Link DWA 160 A2 + * powerpc/fsl: Add PCI device ids for new QoirQ chips + * davinci: dm646x: Add support for 3.x silicon revision + * Input: ALPS - add interleaved protocol support (Dell E6x00 series) + * Driver-Core: devtmpfs - set root directory mode to 0755 + * driver-core: fix devtmpfs crash on s390 + * vfs: get_sb_single() - do not pass options twice + * ALSA: hda - Add PCI IDs for Nvidia G2xx-series + * V4L/DVB (13569): smsusb: add autodetection support for five additional + Hauppauge USB IDs + * USB: mos7840: add device IDs for B&B electronics devices + * USB: ftdi_sio: add USB device ID's for B&B Electronics line + * V4L/DVB (13168): Add support for Asus Europa Hybrid DVB-T card (SAA7134 + SubVendor ID: 0x1043 Device ID: 0x4847) + * iTCO_wdt: Add support for Intel Ibex Peak + * atl1c:use common_task instead of reset_task and link_chg_task + * atl1e:disable NETIF_F_TSO6 for hardware limit + * V4L/DVB (13680a): DocBook/media: copy images after building HTML + * V4L/DVB (13680b): DocBook/media: create links for included sources + * netfilter: xtables: fix conntrack match v1 ipt-save output + * partitions: read whole sector with EFI GPT header + * partitions: use sector size for EFI GPT + * ALSA: ice1724 - Patch for suspend/resume for ESI Juli@ + * sched: Fix isolcpus boot option + * sched: Fix missing sched tunable recalculation on cpu add/remove + * nohz: Prevent clocksource wrapping during idle + * nfsd: Fix sort_pacl in fs/nfsd/nf4acl.c to actually sort groups + * timers, init: Limit the number of per cpu calibration bootup messages + * PCI: Always set prefetchable base/limit upper32 registers + * iscsi class: modify handling of replacement timeout + * NFS: Revert default r/wsize behavior + * HID: fixup quirk for NCR devices + * scsi_devinfo: update Hitachi entries (v2) + * scsi_dh: create sysfs file, dh_state for all SCSI disk devices + * scsi_transport_fc: remove invalid BUG_ON + * lpfc: fix hang on SGI ia64 platform + * libfc: fix typo in retry check on received PRLI + * libfc: fix ddp in fc_fcp for 0 xid + * fcoe: remove redundant checking of netdev->netdev_ops + * libfc: Fix wrong scsi return status under FC_DATA_UNDRUN + * libfc: lport: fix minor documentation errors + * libfc: don't WARN_ON in lport_timeout for RESET state + * fcoe: initialize return value in fcoe_destroy + * libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data + * libfc: fix memory corruption caused by double frees and bad error + handling + * libfc: fix free of fc_rport_priv with timer pending + * libfc: remote port gets stuck in restart state without really + restarting + * fcoe, libfc: fix an libfc issue with queue ramp down in libfc + * fcoe: Fix checking san mac address + * fcoe: Fix getting san mac for VLAN interface + * qlge: Remove explicit setting of PCI Dev CTL reg. + * qlge: Set PCIE max read request size. + * qlge: Don't fail open when port is not initialized. + * qlge: Add handler for DCBX firmware event. + * qlge: Bonding fix for mode 6. + * PCI: AER: fix aer inject result in kernel oops + * DMI: allow omitting ident strings in DMI tables + * Input: i8042 - remove identification strings from DMI tables + * Input: i8042 - add Gigabyte M1022M to the noloop list + * Input: i8042 - add Dritek quirk for Acer Aspire 5610. + * ALSA: hda - select IbexPeak handler for Calpella + * ALSA: hda - Fix quirk for Maxdata obook4-1 + * ALSA: hda - Add missing Line-Out and PCM switches as slave + * iTCO_wdt.c - cleanup chipset documentation + * iTCO_wdt: add PCI ID for the Intel EP80579 (Tolapai) SoC + * iTCO_wdt: Add Intel Cougar Point and PCH DeviceIDs + * ahci: disable SNotification capability for ich8 + * ata_piix: fix MWDMA handling on PIIX3 + * md: fix small irregularity with start_ro module parameter + * V4L/DVB (13826): uvcvideo: Fix controls blacklisting + * cio: fix double free in case of probe failure + * cio: dont panic in non-fatal conditions + * netiucv: displayed TX bytes value much too high + * ipc ns: fix memory leak (idr) + * ALSA: hda - Fix HP T5735 automute + * hwmon: (fschmd) Fix a memleak on multiple opens of /dev/watchdog + * UBI: fix memory leak in update path + * UBI: initialise update marker + * ASoC: fix a memory-leak in wm8903 + * mac80211: check that ieee80211_set_power_mgmt only handles STA + interfaces. + * cfg80211: fix channel setting for wext + * KVM: S390: fix potential array overrun in intercept handling + * KVM: only allow one gsi per fd + * KVM: Fix race between APIC TMR and IRR + * KVM: MMU: bail out pagewalk on kvm_read_guest error + * KVM: x86: Fix host_mapping_level() + * KVM: x86: Fix probable memory leak of vcpu->arch.mce_banks + * KVM: x86: Fix leak of free lapic date in kvm_arch_vcpu_init() + * KVM: fix lock imbalance in kvm_*_irq_source_id() + * KVM: only clear irq_source_id if irqchip is present + * IPoIB: Clear ipoib_neigh.dgid in ipoib_neigh_alloc() + * x86: Reenable TSC sync check at boot, even with NONSTOP_TSC + * ACPI: enable C2 and Turbo-mode on Nehalem notebooks on A/C + - LP: #516325 + * iwlwifi: Fix throughput stall issue in HT mode for 5000 + * fnctl: f_modown should call write_lock_irqsave/restore + * x86, msr/cpuid: Pass the number of minors when unregistering MSR and + CPUID drivers. + * Linux 2.6.32.7 + * scsi_lib: Fix bug in completion of bidi commands + * mptsas: Fix issue with chain pools allocation on katmai + * mm: add new 'read_cache_page_gfp()' helper function + * drm/i915: Selectively enable self-reclaim + * firewire: ohci: fix crashes with TSB43AB23 on 64bit systems + * S390: fix single stepped svcs with TRACE_IRQFLAGS=y + * x86: Set hotpluggable nodes in nodes_possible_map + * x86: Remove "x86 CPU features in debugfs" (CONFIG_X86_CPU_DEBUG) + * libata: retry FS IOs even if it has failed with AC_ERR_INVALID + * zcrypt: Do not remove coprocessor for error 8/72 + * dasd: fix possible NULL pointer errors + * ACPI: Add a generic API for _OSC -v2 + * ACPI: Add platform-wide _OSC support. + * ACPI: fix OSC regression that caused aer and pciehp not to load + * ACPI: Advertise to BIOS in _OSC: _OST on _PPC changes + * UBI: fix volume creation input checking + * e1000/e1000e: don't use small hardware rx buffers + * drm/i915: Reload hangcheck timer too for Ironlake + * Fix a leak in affs_fill_super() + * Fix failure exits in bfs_fill_super() + * fix oops in fs/9p late mount failure + * fix leak in romfs_fill_super() + * Fix remount races with symlink handling in affs + * fix affs parse_options() + * Fix failure exit in ipathfs + * mm: fix migratetype bug which slowed swapping + * FDPIC: Respect PT_GNU_STACK exec protection markings when creating + NOMMU stack + * Split 'flush_old_exec' into two functions + * sparc: TIF_ABI_PENDING bit removal + * x86: get rid of the insane TIF_ABI_PENDING bit + * Input: winbond-cir - remove dmesg spam + * x86: Disable HPET MSI on ATI SB700/SB800 + * iwlwifi: set default aggregation frame count limit to 31 + * drm/i915: only enable hotplug for detected outputs + * firewire: core: add_descriptor size check + * SECURITY: selinux, fix update_rlimit_cpu parameter + * regulator: Specify REGULATOR_CHANGE_STATUS for WM835x LED constraints + * x86: Add Dell OptiPlex 760 reboot quirk + - LP: #488319 + * x86: Add quirk for Intel DG45FC board to avoid low memory corruption + * x86/amd-iommu: Fix possible integer overflow + * clocksource: fix compilation if no GENERIC_TIME + * tcp: update the netstamp_needed counter when cloning sockets + * sky2: Fix oops in sky2_xmit_frame() after TX timeout + * net: restore ip source validation + * af_packet: Don't use skb after dev_queue_xmit() + * ax25: netrom: rose: Fix timer oopses + * KVM: allow userspace to adjust kvmclock offset + * oprofile/x86: add Xeon 7500 series support + * oprofile/x86: fix crash when profiling more than 28 events + * libata: retry link resume if necessary + * mm: percpu-vmap fix RCU list walking + * mm: purge fragmented percpu vmap blocks + * block: fix bio_add_page for non trivial merge_bvec_fn case + * Fix 'flush_old_exec()/setup_new_exec()' split + * random: drop weird m_time/a_time manipulation + * random: Remove unused inode variable + * block: fix bugs in bio-integrity mempool usage + * usb: r8a66597-hdc disable interrupts fix + * connector: Delete buggy notification code. + * be2net: Bug fix to support newer generation of BE ASIC + * be2net: Fix memset() arg ordering. + * mm: flush dcache before writing into page to avoid alias + * mac80211: fix NULL pointer dereference when ftrace is enabled + * imxfb: correct location of callbacks in suspend and resume + * mx3fb: some debug and initialisation fixes + * starfire: clean up properly if firmware loading fails + * kernel/cred.c: use kmem_cache_free + * uartlite: fix crash when using as console + * pktcdvd: removing device does not remove its sysfs dir + * ath9k: fix eeprom INI values override for 2GHz-only cards + * ath9k: fix beacon slot/buffer leak + * powerpc: TIF_ABI_PENDING bit removal + * NET: fix oops at bootime in sysctl code + * Linux 2.6.32.8 + + -- Andy Whitcroft Wed, 10 Feb 2010 18:56:52 +0000 + +linux (2.6.32-12.17) lucid; urgency=low + + [ Andy Whitcroft ] + + * restore linux-image prefix -- master + * enforce -- we require SELINUX enabled -- master + * enforce -- ensure APPARMOR is our default LSM -- master + * make doc package completely optional -- master + * make source package completely optional -- master + * make linux-libc-dev completly optional -- master + * convert package disable to a deps list -- master + * allow common headers to switch from indep to arch -- master + * convert binary package disable to a deps list -- master + * add configuration option for a full source build tree -- master + * add support for uImage kernels in package control scripts + * getabis -- cleanup and parameterise repository list -- master + * getabis -- move configuration to etc/getabi -- master + * kernelconfig -- move configuration to etc -- master + * rules -- make debian/debian.env master for branch name + * set the current branch name -- master + * pull back common debian.master files into debian -- master + * enforcer -- make the enforcement configuration common + * insert-changes -- correctly link to debian/rules in DROOT + + [ Colin Watson ] + + * future-proof ddeb handling against buildd changes + + [ Eric Miao ] + + * SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} depend on + X86 + + [ Loïc Minier ] + + * Add modules.builtin.bin to prerm rm list + - LP: #516584 + + [ Tim Gardner ] + + * [Config] Implement the amd64 preempt flavour + + [ Upstream Kernel Changes ] + + * syslog: distinguish between /proc/kmsg and syscalls + - LP: #515623 + * sfc: Fix polling for slow MCDI operations + * sfc: Fix conditions for MDIO self-test + * sfc: QT202x: Remove unreliable MMD check at initialisation + * sfc: Add workspace for GMAC bug workaround to MCDI MAC_STATS buffer + * sfc: Use fixed-size buffers for MCDI NVRAM requests + + -- Andy Whitcroft Fri, 05 Feb 2010 07:09:31 +0000 + +linux (2.6.32-12.16) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: acpi battery -- delay first lookup of the battery until + first use" + * SAUCE: acpi battery -- move first lookup asynchronous + - LP: #507211 + * [Config] update configs to cleanup generic configs + * [Config] disable CONFIG_X86_CPU_DEBUG for amd64 + * [Config] enable USER_NS + - LP: #480739, #509808 + + [ Heiko Carstens ] + + * (pre-stable) driver-core: fix devtmpfs crash on s390 + - LP: #512370 + + [ John Johansen ] + + * [Config] for server and virtual flavours make CONFIG_SCSI_SYM53C8XX_2=y + - LP: #494565 + * [Config] VIRTIO=y for server/virtual flavours + - LP: #494565 + + [ Kay Sievers ] + + * (pre-stable) Driver-Core: devtmpfs - set root directory mode to 0755 + - LP: #512370 + + [ Kees Cook ] + + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + + [ Leann Ogasawara ] + + * [Upstream] e1000: enhance frame fragment detection + - CVE-2009-4536 + * [Upstream] e1000e: enhance frame fragment detection + - CVE-2009-4538 + + [ Sebastian Kapfer ] + + * (pre-stable) Input: ALPS - add interleaved protocol support (Dell E6x00 + series) + - LP: #296610 + + [ Upstream Kernel Changes ] + + * inotify: do not reuse watch descriptors + - LP: #485556 + * inotify: only warn once for inotify problems + * revert "drivers/video/s3c-fb.c: fix clock setting for Samsung SoC + Framebuffer" + * memcg: ensure list is empty at rmdir + * drm/i915: remove loop in Ironlake interrupt handler + * block: Fix incorrect reporting of partition alignment + * x86, mce: Thermal monitoring depends on APIC being enabled + * futexes: Remove rw parameter from get_futex_key() + * page allocator: update NR_FREE_PAGES only when necessary + * x86, apic: use physical mode for IBM summit platforms + * edac: i5000_edac critical fix panic out of bounds + * x86: SGI UV: Fix mapping of MMIO registers + * mfd: WM835x GPIO direction register is not locked + * mfd: Correct WM835x ISINK ramp time defines + * ALSA: hda - Fix missing capture mixer for ALC861/660 codecs + * V4L/DVB (13868): gspca - sn9c20x: Fix test of unsigned. + * reiserfs: truncate blocks not used by a write + * HID: add device IDs for new model of Apple Wireless Keyboard + * PCI/cardbus: Add a fixup hook and fix powerpc + * Input: pmouse - move Sentelic probe down the list + * asus-laptop: add Lenovo SL hotkey support + * sched: Fix cpu_clock() in NMIs, on !CONFIG_HAVE_UNSTABLE_SCHED_CLOCK + * sparc64: Fix NMI programming when perf events are active. + * sparc64: Fix Niagara2 perf event handling. + * i2c: Do not use device name after device_unregister + * i2c/pca: Don't use *_interruptible + * serial/8250_pnp: add a new Fujitsu Wacom Tablet PC device + * sched: Fix task priority bug + * vfs: Fix vmtruncate() regression + * Linux 2.6.32.5 + * x86, msr/cpuid: Register enough minors for the MSR and CPUID drivers + * V4L/DVB (13900): gspca - sunplus: Fix bridge exchanges. + * Staging: asus_oled: fix oops in 2.6.32.2 + * Staging: hv: fix smp problems in the hyperv core code + * tty: fix race in tty_fasync + * ecryptfs: use after free + * ecryptfs: initialize private persistent file before dereferencing + pointer + * nozomi: quick fix for the close/close bug + * serial: 8250_pnp: use wildcard for serial Wacom tablets + * usb: serial: fix memory leak in generic driver + * USB: fix bitmask merge error + * USB: Don't use GFP_KERNEL while we cannot reset a storage device + * USB: EHCI: fix handling of unusual interrupt intervals + * USB: EHCI & UHCI: fix race between root-hub suspend and port resume + * USB: add missing delay during remote wakeup + * USB: add speed values for USB 3.0 and wireless controllers + * ACPI: EC: Accelerate query execution + * ACPI: EC: Add wait for irq storm + * SCSI: enclosure: fix oops while iterating enclosure_status array + * drm/i915: Read the response after issuing DDC bus switch command + * drm/i915: try another possible DDC bus for the SDVO device with + multiple outputs + * block: bdev_stack_limits wrapper + * DM: Fix device mapper topology stacking + * x86/PCI/PAT: return EINVAL for pci mmap WC request for !pat_enabled + * USB: fix usbstorage for 2770:915d delivers no FAT + * vmalloc: remove BUG_ON due to racy counting of VM_LAZY_FREE + * perf timechart: Use tid not pid for COMM change + * perf events: Dont report side-band events on each cpu for + per-task-per-cpu events + * perf: Honour event state for aux stream data + * Linux 2.6.32.6 + + -- Andy Whitcroft Wed, 27 Jan 2010 16:40:23 +0000 + +linux (2.6.32-11.15) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/radeon/kms: fix crtc vblank update for r600" + * Revert "(pre-stable) sched: Fix balance vs hotplug race" + * Revert "[Upstream] acerhdf: Limit modalias matching to supported + boards" + * Revert "[Upstream] mmc: prevent dangling block device from accessing + stale queues" + * Revert "SAUCE: Fix nx_enable reporting" + * Revert "SAUCE: [x86] fix report of cs-limit nx-emulation" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: i915 -- disable powersave by default + - LP: #492392 + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Tim Gardner ] + + * [Upstream] b43: Declare all possible firmware files. + - LP: #488636 + * [Config] updateconfigs after adding pvscsi + - LP: #497156 + * [Config] CONFIG_BT=m + + [ Upstream Kernel Changes ] + + * Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu + for pre-Pentium" + * SCSI: ipr: fix EEH recovery + * SCSI: qla2xxx: dpc thread can execute before scsi host has been added + * SCSI: st: fix mdata->page_order handling + * SCSI: fc class: fix fc_transport_init error handling + * sched: Fix task_hot() test order + * x86, cpuid: Add "volatile" to asm in native_cpuid() + * sched: Select_task_rq_fair() must honour SD_LOAD_BALANCE + * clockevents: Prevent clockevent_devices list corruption on cpu hotplug + * pata_hpt3x2n: fix clock turnaround + * pata_cmd64x: fix overclocking of UDMA0-2 modes + * ASoC: wm8974: fix a wrong bit definition + * sound: sgio2audio/pdaudiocf/usb-audio: initialize PCM buffer + * ALSA: hda - Fix missing capsrc_nids for ALC88x + * acerhdf: limit modalias matching to supported + - LP: #435958 + * ACPI: EC: Fix MSI DMI detection + * ACPI: Use the return result of ACPI lid notifier chain correctly + * powerpc: Handle VSX alignment faults correctly in little-endian mode + * ASoC: Do not write to invalid registers on the wm9712. + * drm/radeon: fix build on 64-bit with some compilers. + * USB: emi62: fix crash when trying to load EMI 6|2 firmware + * USB: option: support hi speed for modem Haier CE100 + * USB: Fix a bug on appledisplay.c regarding signedness + * USB: musb: gadget_ep0: avoid SetupEnd interrupt + * Bluetooth: Prevent ill-timed autosuspend in USB driver + * USB: rename usb_configure_device + * USB: fix bugs in usb_(de)authorize_device + * drivers/net/usb: Correct code taking the size of a pointer + * x86: SGI UV: Fix writes to led registers on remote uv hubs + * md: Fix unfortunate interaction with evms + * dma: at_hdmac: correct incompatible type for argument 1 of + 'spin_lock_bh' + * dma-debug: Do not add notifier when dma debugging is disabled. + * dma-debug: Fix bug causing build warning + * cifs: NULL out tcon, pSesInfo, and srvTcp pointers when chasing DFS + referrals + * x86/amd-iommu: Fix initialization failure panic + * ioat3: fix p-disabled q-continuation + * ioat2,3: put channel hardware in known state at init + * KVM: MMU: remove prefault from invlpg handler + * KVM: LAPIC: make sure IRR bitmap is scanned after vm load + * Libertas: fix buffer overflow in lbs_get_essid() + * iwmc3200wifi: fix array out-of-boundary access + * mac80211: fix propagation of failed hardware reconfigurations + * mac80211: fix WMM AP settings application + * mac80211: Fix IBSS merge + * cfg80211: fix race between deauth and assoc response + * ath5k: fix SWI calibration interrupt storm + * ath9k: wake hardware for interface IBSS/AP/Mesh removal + * ath9k: Fix TX queue draining + * ath9k: fix missed error codes in the tx status check + * ath9k: wake hardware during AMPDU TX actions + * ath9k: fix suspend by waking device prior to stop + * ath9k_hw: Fix possible OOB array indexing in gen_timer_index[] on + 64-bit + * ath9k_hw: Fix AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB and its shift value + in 0x4054 + * iwl3945: disable power save + * iwl3945: fix panic in iwl3945 driver + * iwlwifi: fix EEPROM/OTP reading endian annotations and a bug + * iwlwifi: fix more eeprom endian bugs + * iwlwifi: fix 40MHz operation setting on cards that do not allow it + * mac80211: fix race with suspend and dynamic_ps_disable_work + * NOMMU: Optimise away the {dac_,}mmap_min_addr tests + * 'sysctl_max_map_count' should be non-negative + * kernel/sysctl.c: fix the incomplete part of + sysctl_max_map_count-should-be-non-negative.patch + * V4L/DVB (13596): ov511.c typo: lock => unlock + * x86/ptrace: make genregs[32]_get/set more robust + * memcg: avoid oom-killing innocent task in case of use_hierarchy + * e100: Fix broken cbs accounting due to missing memset. + * ipv6: reassembly: use seperate reassembly queues for conntrack and + local delivery + * netfilter: fix crashes in bridge netfilter caused by fragment jumps + * hwmon: (sht15) Off-by-one error in array index + incorrect constants + * b43: avoid PPC fault during resume + * Keys: KEYCTL_SESSION_TO_PARENT needs TIF_NOTIFY_RESUME architecture + support + * sched: Fix balance vs hotplug race + * drm/radeon/kms: fix crtc vblank update for r600 + * drm: disable all the possible outputs/crtcs before entering KMS mode + * S390: dasd: support DIAG access for read-only devices + * xen: fix is_disconnected_device/exists_disconnected_device + * xen: improvement to wait_for_devices() + * xen: wait up to 5 minutes for device connetion + * orinoco: fix GFP_KERNEL in orinoco_set_key with interrupts disabled + * udf: Try harder when looking for VAT inode + * Add unlocked version of inode_add_bytes() function + * quota: decouple fs reserved space from quota reservation + * ext4: Convert to generic reserved quota's space management. + * ext4: fix sleep inside spinlock issue with quota and dealloc (#14739) + * x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus + * cpumask: use modern cpumask style in drivers/edac/amd64_edac.c + * amd64_edac: unify MCGCTL ECC switching + * x86, msr: Add support for non-contiguous cpumasks + * x86, msr: msrs_alloc/free for CONFIG_SMP=n + * amd64_edac: fix driver instance freeing + * amd64_edac: make driver loading more robust + * amd64_edac: fix forcing module load/unload + * sched: Sched_rt_periodic_timer vs cpu hotplug + * ext4: Update documentation to correct the inode_readahead_blks option + name + * lguest: fix bug in setting guest GDT entry + * vmscan: do not evict inactive pages when skipping an active list scan + * ksm: fix mlockfreed to munlocked + * rt2x00: Disable powersaving for rt61pci and rt2800pci. + * generic_permission: MAY_OPEN is not write access + * Linux 2.6.32.3 + * untangle the do_mremap() mess + * fasync: split 'fasync_helper()' into separate add/remove functions + * ASoC: fix params_rate() macro use in several codecs + * modules: Skip empty sections when exporting section notes + * exofs: simple_write_end does not mark_inode_dirty + * nfsd: make sure data is on disk before calling ->fsync + * sunrpc: fix peername failed on closed listener + * SUNRPC: Fix up an error return value in + gss_import_sec_context_kerberos() + * SUNRPC: Fix the return value in gss_import_sec_context() + * sunrpc: on successful gss error pipe write, don't return error + * drm/i915: Update LVDS connector status when receiving ACPI LID event + * drm/i915: fix order of fence release wrt flushing + * drm/i915: Permit pinning whilst the device is 'suspended' + * drm: remove address mask param for drm_pci_alloc() + * drm/i915: Enable/disable the dithering for LVDS based on VBT setting + * drm/i915: Make the BPC in FDI rx/transcoder be consistent with that in + pipeconf on Ironlake + * drm/i915: Select the correct BPC for LVDS on Ironlake + * drm/i915: fix unused var + * rtc_cmos: convert shutdown to new pnp_driver->shutdown + * drivers/cpuidle/governors/menu.c: fix undefined reference to + `__udivdi3' + * cgroups: fix 2.6.32 regression causing BUG_ON() in cgroup_diput() + * lib/rational.c needs module.h + * dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with + DMA_FROM_DEVICE and + * kernel/signal.c: fix kernel information leak with print-fatal-signals=1 + * mmc_block: add dev_t initialization check + * mmc_block: fix probe error cleanup bug + * mmc_block: fix queue cleanup + * ALSA: hda - Fix ALC861-VD capture source mixer + * ALSA: ac97: Add Dell Dimension 2400 to Headphone/Line Jack Sense + blacklist + * ALSA: atiixp: Specify codec for Foxconn RC4107MA-RS2 + - LP: #498863 + * ASoC: Fix WM8350 DSP mode B configuration + * netfilter: ebtables: enforce CAP_NET_ADMIN + * netfilter: nf_ct_ftp: fix out of bounds read in update_nl_seq() + * hwmon: (coretemp) Fix TjMax for Atom N450/D410/D510 CPUs + * hwmon: (adt7462) Fix pin 28 monitoring + * quota: Fix dquot_transfer for filesystems different from ext4 + * xen: fix hang on suspend. + * iwlwifi: fix iwl_queue_used bug when read_ptr == write_ptr + * ath5k: Fix eeprom checksum check for custom sized eeproms + * cfg80211: fix syntax error on user regulatory hints + * iwl: off by one bug + * mac80211: add missing sanity checks for action frames + * drm/i915: remove render reclock support + * libertas: Remove carrier signaling from the scan code + * kernel/sysctl.c: fix stable merge error in NOMMU mmap_min_addr + * mac80211: fix skb buffering issue (and fixes to that) + * fix braindamage in audit_tree.c untag_chunk() + * fix more leaks in audit_tree.c tag_chunk() + * module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y + * ipv6: skb_dst() can be NULL in ipv6_hop_jumbo(). + * agp/intel-agp: Clear entire GTT on startup + * Linux 2.6.32.4 + * ethtool: Add reset operation + * gro: Name the GRO result enumeration type + * gro: Change all receive functions to return GRO result codes + * sfc: 10Xpress: Initialise pause advertising flags + * sfc: 10Xpress: Report support for pause frames + * sfc: Remove redundant header gmii.h + * sfc: Remove redundant hardware initialisation + * sfc: Rename Falcon-specific board code and types + * sfc: Remove boards.h, moving last remaining declaration to falcon.h + * sfc: Remove versioned bitfield macros + * sfc: Move RX data FIFO thresholds out of struct efx_nic_type + * sfc: Update hardware definitions for Siena + * sfc: Rename register I/O header and functions used by both Falcon and + Siena + * sfc: Eliminate indirect lookups of queue size constants + * sfc: Define DMA address mask explicitly in terms of descriptor field + width + * sfc: Move all TX DMA length limiting into tx.c + * sfc: Change order of device removal to reverse of probe order + * sfc: Remove declarations of nonexistent functions + * sfc: Move efx_xmit_done() declaration into correct stanza + * sfc: Move shared members of struct falcon_nic_data into struct efx_nic + * sfc: Maintain interrupt moderation values in ticks, not microseconds + * sfc: Removed kernel-doc for nonexistent member of efx_phy_operations + * sfc: Remove pointless abstraction of memory BAR number + * sfc: Remove incorrect assertion from efx_pci_remove_main() + * sfc: Remove unnecessary tests of efx->membase + * sfc: Move MTD probe after netdev registration and name allocation + * sfc: Remove unused code for non-autoneg speed/duplex switching + * sfc: Rename 'xfp' file and functions to reflect reality + * sfc: Really allow RX checksum offload to be disabled + * sfc: Feed GRO result into RX allocation policy and interrupt moderation + * sfc: Enable heuristic selection between page and skb RX buffers + * sfc: Remove pointless abstraction of memory BAR number (2) + * sfc: Remove redundant gotos from __efx_rx_packet() + * sfc: Remove ridiculously paranoid assertions + * sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro() + * sfc: Record RX queue number on GRO path + * sfc: SFT9001: Reset LED configuration correctly after blinking + * sfc: Use a single blink implementation + * sfc: Rename efx_board::init_leds to init_phy and use for SFN4111T + * sfc: Make board information explicitly Falcon-specific + * sfc: Move definition of struct falcon_nic_data into falcon.h + * sfc: Move struct falcon_board into struct falcon_nic_data + * sfc: Move all I2C stuff into struct falcon_board + * sfc: Gather link state fields in struct efx_nic into new struct + efx_link_state + * sfc: Remove unnecessary casts to struct sk_buff * + * sfc: Remove redundant efx_xmit() function + * sfc: Combine high-level header files + * sfc: Log interrupt and reset type names, not numbers + * sfc: Fix descriptor cache sizes + * sfc: Treat all MAC registers as 128-bit + * sfc: Strengthen EFX_ASSERT_RESET_SERIALISED + * sfc: Comment corrections + * sfc: Remove unused constant + * sfc: Clean up struct falcon_board and struct falcon_board_data + * sfc: Fix bugs in RX queue flushing + * sfc: Remove unused function efx_flush_queues() + * sfc: Only switch Falcon MAC clocks as necessary + * sfc: Hold MAC lock for longer in efx_init_port() + * sfc: Split MAC stats DMA initiation and completion + * sfc: Move Falcon board/PHY/MAC monitoring code to falcon.c + * sfc: Simplify XMAC link polling + * sfc: Change MAC promiscuity and multicast hash at the same time + * sfc: Move inline comment into kernel-doc + * sfc: Do not set net_device::trans_start in self-test + * sfc: Simplify PHY polling + * sfc: QT202x: Reset before reading PHY id + * sfc: Replace MDIO spinlock with mutex + * sfc: Always start Falcon using the XMAC + * sfc: Limit some hardware workarounds to Falcon + * sfc: Remove EFX_WORKAROUND_9141 macro + * sfc: Remove another unused workaround macro + * sfc: Remove some redundant whitespace + * sfc: Decouple NIC revision number from Falcon PCI revision number + * sfc: Move descriptor cache base addresses to struct efx_nic_type + * sfc: Clean up RX event handling + * sfc: Remove redundant writes to INT_ADR_KER + * sfc: Remove duplicate hardware structure definitions + * sfc: Turn pause frame generation on and off at the MAC, not the RX FIFO + * sfc: Move Falcon NIC operations to efx_nic_type + * sfc: Refactor link configuration + * sfc: Generalise link state monitoring + * sfc: Add power-management and wake-on-LAN support + * sfc: Implement ethtool reset operation + * sfc: Add efx_nic_type operation for register self-test + * sfc: Add efx_nic_type operation for NVRAM self-test + * sfc: Add efx_nic_type operation for identity LED control + * sfc: Separate shared NIC code from Falcon-specific and rename + accordingly + * sfc: Fold falcon_probe_nic_variant() into falcon_probe_nic() + * sfc: Extend loopback mode enumeration + * sfc: Remove static PHY data and enumerations + * sfc: Extend MTD driver for use with new NICs + * sfc: Allow for additional checksum offload features + * sfc: Rename falcon.h to nic.h + * sfc: Move shared NIC code from falcon.c to new source file nic.c + * sfc: Add firmware protocol definitions (MCDI) + * sfc: Add support for SFC9000 family (1) + * sfc: Add support for SFC9000 family (2) + * sfc: Implement TSO for TCP/IPv6 + * sfc: Update version, copyright dates, authors + * drivers/net/sfc: Correct code taking the size of a pointer + * sfc: Move PHY software state initialisation from init() into probe() + * sfc: Include XGXS in XMAC link status check except in XGMII loopback + * sfc: Fix DMA mapping cleanup in case of an error in TSO + * sfc: QT2025C: Work around PHY bug + * sfc: QT2025C: Switch into self-configure mode when not in loopback + * sfc: QT2025C: Work around PHY firmware initialisation bug + * sfc: QT2025C: Add error message for suspected bad SFP+ cables + * sfc: Disable TX descriptor prefetch watchdog + * [SCSI] vmw_pvscsi: SCSI driver for VMware's virtual HBA. + - LP: #497156 + + -- Andy Whitcroft Tue, 19 Jan 2010 16:12:47 +0000 + +linux (2.6.32-10.14) lucid; urgency=low + + [ Alex Deucher ] + + * SAUCE: drm/radeon/kms: fix LVDS setup on r4xx + - LP: #493795 + + [ Andy Whitcroft ] + + * Revert "(pre-stable) acpi: Use the ARB_DISABLE for the CPU which model + id is less than 0x0f." + * config-check -- ensure the checks get run at build time + * config-check -- check the processed config during updateconfigs + * config-check -- CONFIG_SECCOMP may not be present + * TUN is now built in ignore + * SAUCE: acpi battery -- delay first lookup of the battery until first + use + * SAUCE: async_populate_rootfs: move rootfs init earlier + * ubuntu: AppArmor -- update to mainline 2010-01-06 + * SAUCE: move RLIMIT_CORE pipe dumper marker to 1 + - LP: #498525 + + [ Dave Airlie ] + + * (pre-stable) drm/radeon/kms: fix crtc vblank update for r600 + + [ Leann Ogasawara ] + + * Add asix to nic-usb-modules file + - LP: #499785 + + [ Peter Zijlstra ] + + * (pre-stable) sched: Fix balance vs hotplug race + + [ Tim Gardner ] + + * [Config] Enable CONFIG_FUNCTION_TRACER + - LP: #497989 + * [Config] Drop lpia from getabis + * [Config] Build in TUN/TAP driver + - LP: #499491 + * [Config] DH_COMPAT=5 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) drm/i915: Avoid NULL dereference with + component_only tv_modes" + * Revert "(pre-stable) drm/i915: Fix sync to vblank when VGA output is + turned off" + * USB: usb-storage: fix bug in fill_inquiry + * USB: option: add pid for ZTE + * firewire: ohci: handle receive packets with a data length of zero + * rcu: Prepare for synchronization fixes: clean up for non-NO_HZ handling + of ->completed counter + * rcu: Fix synchronization for rcu_process_gp_end() uses of ->completed + counter + * rcu: Fix note_new_gpnum() uses of ->gpnum + * rcu: Remove inline from forward-referenced functions + * perf_event: Fix invalid type in ioctl definition + * perf_event: Initialize data.period in perf_swevent_hrtimer() + * perf: Don't free perf_mmap_data until work has been done + * PM / Runtime: Fix lockdep warning in __pm_runtime_set_status() + * sched: Check for an idle shared cache in select_task_rq_fair() + * sched: Fix affinity logic in select_task_rq_fair() + * sched: Rate-limit newidle + * sched: Fix and clean up rate-limit newidle code + * x86/amd-iommu: attach devices to pre-allocated domains early + * x86/amd-iommu: un__init iommu_setup_msi + * x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking + up the PCI tree + * x86: Fix iommu=nodac parameter handling + * x86: GART: pci-gart_64.c: Use correct length in strncmp + * x86: ASUS P4S800 reboot=bios quirk + - LP: #366682 + * x86, apic: Enable lapic nmi watchdog on AMD Family 11h + * ssb: Fix range check in sprom write + * ath5k: allow setting txpower to 0 + * ath5k: enable EEPROM checksum check + * hrtimer: Fix /proc/timer_list regression + * ALSA: hrtimer - Fix lock-up + * ALSA: hda - Terradici HDA controllers does not support 64-bit mode + * KVM: x86 emulator: limit instructions to 15 bytes + * KVM: s390: Fix prefix register checking in arch/s390/kvm/sigp.c + * KVM: s390: Make psw available on all exits, not just a subset + * KVM: fix irq_source_id size verification + * KVM: x86: include pvclock MSRs in msrs_to_save + * x86: Prevent GCC 4.4.x (pentium-mmx et al) function prologue wreckage + * x86: Use -maccumulate-outgoing-args for sane mcount prologues + * x86, mce: don't restart timer if disabled + * x86/mce: Set up timer unconditionally + * x86: SGI UV: Fix BAU initialization + * x86: Fix duplicated UV BAU interrupt vector + * x86: Add new Intel CPU cache size descriptors + * x86: Fix typo in Intel CPU cache size descriptor + * pata_hpt{37x|3x2n}: fix timing register masks (take 2) + * s390: clear high-order bits of registers after sam64 + * V4L/DVB: Fix test in copy_reg_bits() + * bsdacct: fix uid/gid misreporting + * UBI: flush wl before clearing update marker + * jbd2: don't wipe the journal on a failed journal checksum + * USB: xhci: Add correct email and files to MAINTAINERS entry. + * USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again + * USB: option.c: add support for D-Link DWM-162-U5 + * USB: usbtmc: repeat usb_bulk_msg until whole message is transfered + * USB: usb-storage: add BAD_SENSE flag + * USB: Close usb_find_interface race v3 + * pxa/em-x270: fix usb hub power up/reset sequence + * hfs: fix a potential buffer overflow + * SUNRPC: IS_ERR/PTR_ERR confusion + * NFS: Fix nfs_migrate_page() + * md/bitmap: protect against bitmap removal while being updated. + * futex: Take mmap_sem for get_user_pages in fault_in_user_writeable + * devpts_get_tty() should validate inode + * debugfs: fix create mutex racy fops and private data + * Driver core: fix race in dev_driver_string + * Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN + * mac80211: Fix bug in computing crc over dynamic IEs in beacon + * mac80211: Fixed bug in mesh portal paths + * mac80211: Revert 'Use correct sign for mesh active path refresh' + * mac80211: fix scan abort sanity checks + * wireless: correctly report signal value for IEEE80211_HW_SIGNAL_UNSPEC + * rtl8187: Fix wrong rfkill switch mask for some models + * x86: Fix bogus warning in apic_noop.apic_write() + * mm: hugetlb: fix hugepage memory leak in mincore() + * mm: hugetlb: fix hugepage memory leak in walk_page_range() + * powerpc/windfarm: Add detection for second cpu pump + * powerpc/therm_adt746x: Record pwm invert bit at module load time] + * powerpc: Fix usage of 64-bit instruction in 32-bit altivec code + * drm/radeon/kms: Add quirk for HIS X1300 board + * drm/radeon/kms: handle vblanks properly with dpms on + * drm/radeon/kms: fix legacy crtc2 dpms + * drm/radeon/kms: fix vram setup on rs600 + * drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size + * drm/ttm: Fix build failure due to missing struct page + * drm/i915: Set the error code after failing to insert new offset into mm + ht. + * drm/i915: Add the missing clonemask for display port on Ironlake + * xen/xenbus: make DEVICE_ATTR()s static + * xen: re-register runstate area earlier on resume. + * xen: restore runstate_info even if !have_vcpu_info_placement + * xen: correctly restore pfn_to_mfn_list_list after resume + * xen: register timer interrupt with IRQF_TIMER + * xen: register runstate on secondary CPUs + * xen: don't call dpm_resume_noirq() with interrupts disabled. + * xen: register runstate info for boot CPU early + * xen: call clock resume notifier on all CPUs + * xen: improve error handling in do_suspend. + * xen: don't leak IRQs over suspend/resume. + * xen: use iret for return from 64b kernel to 32b usermode + * xen: explicitly create/destroy stop_machine workqueues outside + suspend/resume region. + * Xen balloon: fix totalram_pages counting. + * xen: try harder to balloon up under memory pressure. + * dm exception store: free tmp_store on persistent flag error + * dm snapshot: only take lock for statustype info not table + * dm crypt: move private iv fields to structs + * dm crypt: restructure essiv error path + * dm: avoid _hash_lock deadlock + * dm snapshot: cope with chunk size larger than origin + * dm crypt: separate essiv allocation from initialisation + * dm crypt: make wipe message also wipe essiv key + * slc90e66: fix UDMA handling + * tcp: Stalling connections: Fix timeout calculation routine + * ip_fragment: also adjust skb->truesize for packets not owned by a + socket + * b44 WOL setup: one-bit-off stack corruption kernel panic fix + * sparc64: Don't specify IRQF_SHARED for LDC interrupts. + * sparc64: Fix overly strict range type matching for PCI devices. + * sparc64: Fix stack debugging IRQ stack regression. + * sparc: Set UTS_MACHINE correctly. + * b43legacy: avoid PPC fault during resume + * tracing: Fix event format export + * ath9k: Fix TX hang poll routine + * ath9k: fix processing of TX PS null data frames + * ath9k: Fix maximum tx fifo settings for single stream devices + * ath9k: fix tx status reporting + * mac80211: Fix dynamic power save for scanning. + * drm/i915: Fix sync to vblank when VGA output is turned off + * memcg: fix memory.memsw.usage_in_bytes for root cgroup + * thinkpad-acpi: fix default brightness_mode for R50e/R51 + * thinkpad-acpi: preserve rfkill state across suspend/resume + * ipw2100: fix rebooting hang with driver loaded + * matroxfb: fix problems with display stability + * acerhdf: add new BIOS versions + * asus-laptop: change light sens default values. + * vmalloc: conditionalize build of pcpu_get_vm_areas() + * ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f. + * net: Fix userspace RTM_NEWLINK notifications. + * ext3: Fix data / filesystem corruption when write fails to copy data + * V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added. + * bcm63xx_enet: fix compilation failure after get_stats_count removal + * x86: Under BIOS control, restore AP's APIC_LVTTHMR to the BSP value + * drm/i915: Avoid NULL dereference with component_only tv_modes + * drm/i915: PineView only has LVDS and CRT ports + * drm/i915: Fix LVDS stability issue on Ironlake + * mm: sigbus instead of abusing oom + * ipvs: zero usvc and udest + * jffs2: Fix long-standing bug with symlink garbage collection. + * intel-iommu: Detect DMAR in hyperspace at probe time. + * intel-iommu: Apply BIOS sanity checks for interrupt remapping too. + * intel-iommu: Check for an RMRR which ends before it starts. + * intel-iommu: Fix oops with intel_iommu=igfx_off + * intel-iommu: ignore page table validation in pass through mode + * netfilter: xtables: document minimal required version + * perf_event: Fix incorrect range check on cpu number + * implement early_io{re,un}map for ia64 + * Linux 2.6.32.2 + + -- Andy Whitcroft Thu, 07 Jan 2010 15:28:43 +0000 + +linux (2.6.32-9.13) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_B43_PHY_LP + - LP: #493059 + * include modules.builtin in the binary debs + * config-check -- add a configuration enforcer + * config-check -- add a unit-test suite to the checker + * [Config] Enable CONFIG_SYN_COOKIES for versatile + * [Config] Enable CONFIG_SECURITY_SMACK for ports + * [Config] Enable CONFIG_SECURITY_FILE_CAPABILITIES for ports + * [Config] Disable CONFIG_COMPAT_BRK for ports + * getabis -- add armel versatile to the list + + [ Brad Figg ] + + * SAUCE: Increase the default prealloc buffer for HDA audio devices + (non-modem) + + [ Manoj Iyer ] + + * ubuntu: onmibook -- Added missing BOM file + + [ Tim Gardner ] + + * ubuntu: fsam7400 -- Cleanup Makefile + + [ Upstream Kernel Changes ] + + * Revert "ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT" + * signal: Fix alternate signal stack check + * SCSI: scsi_lib_dma: fix bug with dma maps on nested scsi objects + * SCSI: osd_protocol.h: Add missing #include + * SCSI: megaraid_sas: fix 64 bit sense pointer truncation + * ext4: fix potential buffer head leak when add_dirent_to_buf() returns + ENOSPC + * ext4: avoid divide by zero when trying to mount a corrupted file system + * ext4: fix the returned block count if EXT4_IOC_MOVE_EXT fails + * ext4: fix lock order problem in ext4_move_extents() + * ext4: fix possible recursive locking warning in EXT4_IOC_MOVE_EXT + * ext4: plug a buffer_head leak in an error path of ext4_iget() + * ext4: make sure directory and symlink blocks are revoked + * ext4: fix i_flags access in ext4_da_writepages_trans_blocks() + * ext4: journal all modifications in ext4_xattr_set_handle + * ext4: don't update the superblock in ext4_statfs() + * ext4: fix uninit block bitmap initialization when s_meta_first_bg is + non-zero + * ext4: fix block validity checks so they work correctly with meta_bg + * ext4: avoid issuing unnecessary barriers + * ext4: fix error handling in ext4_ind_get_blocks() + * ext4: make trim/discard optional (and off by default) + * ext4: make "norecovery" an alias for "noload" + * ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT + * ext4: initialize moved_len before calling ext4_move_extents() + * ext4: move_extent_per_page() cleanup + * jbd2: Add ENOMEM checking in and for + jbd2_journal_write_metadata_buffer() + * ext4: Return the PTR_ERR of the correct pointer in + setup_new_group_blocks() + * ext4: Avoid data / filesystem corruption when write fails to copy data + * ext4: wait for log to commit when umounting + * ext4: remove blocks from inode prealloc list on failure + * ext4: ext4_get_reserved_space() must return bytes instead of blocks + * ext4: quota macros cleanup + * ext4: fix incorrect block reservation on quota transfer. + * ext4: Wait for proper transaction commit on fsync + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + * ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem) + * Linux 2.6.32.1 + * kbuild: generate modules.builtin + * (pre-stable) drm/i915: Fix sync to vblank when VGA output is turned off + - LP: #494461 + * (pre-stable) drm/i915: Avoid NULL dereference with component_only + tv_modes + - LP: #494045 + + [ Zhao Yakui ] + + * (pre-stable) acpi: Use the ARB_DISABLE for the CPU which model id is + less than 0x0f. + - LP: #481765 + + -- Andy Whitcroft Thu, 17 Dec 2009 15:41:21 +0000 + +linux (2.6.32-8.12) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: AppArmor -- add linux/err.h for ERR_PTR + + -- Andy Whitcroft Sat, 12 Dec 2009 10:56:16 +0000 + +linux (2.6.32-8.11) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches + up" + * Revert "SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition." + * Revert "SAUCE: AppArmor: Fix refcounting bug causing leak of creds" + * Revert "SAUCE: AppArmor: Fix cap audit_caching preemption disabling" + * Revert "SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds" + * Revert "SAUCE: AppArmor: Fix oops after profile removal" + * Revert "SAUCE: AppArmor: AppArmor disallows truncate of deleted files." + * Revert "SAUCE: AppArmor: AppArmor fails to audit change_hat correctly" + * Revert "SAUCE: AppArmor: Policy load and replacement can fail to alloc + mem" + * Revert "SAUCE: AppArmor: AppArmor wrongly reports allow perms as + denied" + * Revert "SAUCE: AppArmor: Fix mediation of "deleted" paths" + * Revert "SAUCE: AppArmor: Fix off by 2 error in getprocattr mem + allocation" + * Revert "SAUCE: AppArmor: Set error code after structure + initialization." + * Revert "AppArmor -- fix pstrace_may_access rename" + * Revert "ubuntu: AppArmor security module" + * Revert "SAUCE: Add config option to set a default LSM" + * Revert "ubuntu: fsam7400 -- sw kill switch driver" + * Revert "[Config] fsam7400 -- enable" + * Revert "[Config] AUFS -- enable" + * Revert "ubuntu: AUFS -- aufs2-30 20090727" + * Revert "ubuntu: AUFS -- export various core functions -- fixes" + * Revert "ubuntu: AUFS -- export various core functions" + * Revert "[Config] ubuntu/iscsitarget -- disable" + * Revert "[Config] iscsitarget -- enable" + * Revert "ubuntu: iscsitarget -- SVN revision r214" + * update Vcs-Git to point to the correct repository + - LP: #493589 + * update build environment overrides to lucid + - LP: #493589 + * [Config] enable CONFIG_DEVTMPFS + * [Config] update all configs following AppArmor 2009-12-08 update + * SAUCE: isapnp_init: make isa PNP scans occur async + * [Config] fsam7400 -- enable + * [Config] omnibook -- enable + * [Config] cleanup CONFIG_AUDIT + * ubuntu: AUFS -- export various core functions (aufs2-base.patch) + * ubuntu: AUFS -- export various core functions (aufs2-standalone.patch) + * ubuntu: AUFS -- aufs2 20091209 + * [Config] AUFS -- enable + * [Config] iscsitarget -- enable + + [ Arjan van de Ven ] + + * SAUCE: KMS: cache the EDID information of the LVDS + + [ Colin Watson ] + + * bnx2: update d-i firmware filenames + - LP: #494052 + * add cdc_ether to nic-usb-modules udeb + - LP: #495060 + + [ John Johansen ] + + * ubuntu: AppArmor -- mainline 2009-10-08 + + [ Manoj Iyer ] + + * ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M 7400 + * ubuntu: omnibook -- support Toshiba (HP) netbooks + * ubuntu: iscsitarget --- version 1.4.19 + - LP: #494693 + + [ Surbhi Palande ] + + * SAUCE: Make populate_rootfs asynchronous + + [ Tim Gardner ] + + * Parallelize flavour builds and packaging + * [Config] Enable CONFIG_KSM + + [ Upstream Kernel Changes ] + + * Config option to set a default LSM + * LSM: Add security_path_chroot(). + * LSM: Add security_path_chroot(). + * LSM: Move security_path_chmod()/security_path_chown() to after + mutex_lock(). + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + + -- Andy Whitcroft Fri, 11 Dec 2009 17:45:19 +0000 + +linux (2.6.32-7.10) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable CONFIG_THUMB2_KERNEL to fix arm FTBFS + + -- Andy Whitcroft Sun, 06 Dec 2009 12:56:48 +0000 + +linux (2.6.32-7.9) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: set /proc/acpi/video/*/DOS to 4 by default + - LP: #458982 + * SAUCE: ensure vga16fb loads if no other driver claims the VGA device + * [Config] update configs following versatile switch to V7 + * rebased to v2.6.32 + * [Config] update configs following rebase to v2.6.32 + * [Config] update ports configs following rebase to v2.6.32 + * SAUCE: default ATI Radeon KMS to off until userspace catches up + + [ Arjan van de Ven ] + + * SAUCE: vfs: Add a trace point in the mark_inode_dirty function + + [ Leann Ogasawara ] + + * [SCSI] megaraid_sas: remove sysfs poll_mode_io world writeable + permissions + - CVE-2009-3939 + + [ Loic Minier ] + + * SAUCE: select a v7 CPU for versatile + + [ Takashi Iwai ] + + * SAUCE: ALSA: hda - Add power on/off counter + + [ Upstream changes ] + + * rebased to v2.6.32 + + -- Andy Whitcroft Fri, 04 Dec 2009 10:44:50 +0000 + +linux (2.6.32-6.8) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable SSB devices for armel + + -- Andy Whitcroft Sat, 28 Nov 2009 12:16:40 +0000 + +linux (2.6.32-6.7) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches up" + * Revert "SAUCE: Dell XPS710 reboot quirk" + * Revert "SAUCE: Link acpi-cpufreq.o first" + * Revert "SAUCE: LPIA Logical reset of USB port on resume" + * Revert "SAUCE: LPIA Reboot fix for Intel Crownbeach development boards" + * Revert "SAUCE: Enable HDMI audio codec on Studio XPS 1340" + * Revert "SAUCE: Dell laptop digital mic does not work, PCI 1028:0271" + * Revert "Add Dell Dimension 9200 reboot quirk" + * Revert "SAUCE: Correctly blacklist Thinkpad r40e in ACPI" + * Revert "SAUCE: tulip: Define ULI PCI ID's" + * Revert "SAUCE: Lower warning level of some PCI messages" + * Revert "mac80211: fix two issues in debugfs" + Drop a number of known redundant commits as identified in the Ubuntu + delta review blueprint. + + * reenable armel versatile flavour + * [Config] disable CONFIG_USB_DEVICEFS + + [ Tim Gardner ] + + * [Config] udeb: Add squashfs to fs-core-modules + - LP: #352615 + * [Config] Create a real squashfs udeb + - LP: #352615 + + + -- Andy Whitcroft Fri, 27 Nov 2009 17:31:16 +0000 + +linux (2.6.32-5.6) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc8 + * update configs following rebase to v2.6.32-rc8 + * update ports configs since rebase to v2.6.32-rc8 + * [Config] enable cgroup options + - LP: #480739 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc8 + + -- Andy Whitcroft Mon, 23 Nov 2009 11:16:14 +0000 + +linux (2.6.32-4.5) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * rebase to v2.6.32-rc7 + * resync with Karmic proposed + + [ John Johansen ] + + * SAUCE: AppArmor: Fix oops after profile removal + - LP: #475619 + * SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds + - LP: #437258 + * SAUCE: AppArmor: Fix cap audit_caching preemption disabling + - LP: #479102 + * SAUCE: AppArmor: Fix refcounting bug causing leak of creds + - LP: #479115 + * SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition. + - LP: #480112 + + [ Ubuntu Changes ] + + * resync with Karmic proposed (ddbc670a86a3dee18541a3734149f250ff307adf) + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc7 + + -- Andy Whitcroft Fri, 13 Nov 2009 11:35:13 +0000 + +linux (2.6.32-3.4) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * [Upstream] add local prefix to oss local change_bits + + [ Upstream Kernel Changes ] + + * mtd/maps: gpio-addr-flash: pull in linux/ headers rather than asm/ + * mtd/maps: gpio-addr-flash: depend on GPIO arch support + + -- Andy Whitcroft Wed, 11 Nov 2009 14:47:04 +0000 + +linux (2.6.32-3.3) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc6 + * [Config] update configs following rebase to v2.6.32-rc6 + * [Config] update ports configs following rebase to v2.6.32-rc6 + * resync with Karmic Ubuntu-2.6.31-15.49 + * [Config] add module ignores for broken drivers + + [ John Johansen ] + + * SAUCE: AppArmor: AppArmor wrongly reports allow perms as denied + - LP: #453335 + * SAUCE: AppArmor: Policy load and replacement can fail to alloc mem + - LP: #458299 + * SAUCE: AppArmor: AppArmor fails to audit change_hat correctly + - LP: #462824 + * SAUCE: AppArmor: AppArmor disallows truncate of deleted files. + - LP: #451375 + + [ Kees Cook ] + + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Scott James Remnant ] + + * Revert "SAUCE: trace: add trace_event for the open() syscall" + * SAUCE: trace: add trace events for open(), exec() and uselib() + - LP: #462111 + + [ Stefan Bader ] + + * SAUCE: Fix sub-flavour script to not stop on missing directories + - LP: #453073 + + [ Ubuntu Changes ] + + * resync with Karmic Ubuntu-2.6.31-15.49 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc6 + - LP: #464552 + + -- Andy Whitcroft Tue, 10 Nov 2009 15:00:57 +0000 + +linux (2.6.32-2.2) lucid; urgency=low + + [ Andy Whitcroft ] + + * install the full changelog with the binary package + * changelog -- explicitly note rebases and clean history + * reinstate armel.mk with no flavours + - LP: #449637 + * [Upstream] block: silently error unsupported empty barriers too + - LP: #420423 + * [Config] udate configs following karmic resync + * [Config] update ports configs following karmic resync + * [Upstream] lirc -- follow removal of .id element + + [ Colin Watson ] + + * Use section 'admin' rather than 'base' + * Add more e100 firmware to nic-modules + - LP: #451872 + * Add qla1280 firmware to scsi-modules + - LP: #381037 + + [ John Johansen ] + + * SAUCE: AppArmor: Set error code after structure initialization. + - LP: #427948 + * SAUCE: AppArmor: Fix off by 2 error in getprocattr mem allocation + - LP: #446595 + * SAUCE: AppArmor: Fix mediation of "deleted" paths + + [ Kees Cook ] + + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + + [ Leann Ogasawara ] + + * SAUCE: (drop after 2.6.31) input: Add support for filtering input + events + - LP: #430809 + * SAUCE: (drop after 2.6.31) dell-laptop: Trigger rfkill updates on wifi + toggle switch press + - LP: #430809 + + [ Luke Yelavich ] + + * SAUCE: Add sr_mod to the scsi-modules udeb for powerpc + * [Config] Add sd_mod to scsi-modules udeb for powerpc + + [ Mario Limonciello ] + + * SAUCE: Update to LIRC 0.8.6 + - LP: #432678 + * SAUCE: dell-laptop: Store the HW switch status internally rather than + requerying every time + - LP: #430809 + * SAUCE: dell-laptop: Blacklist machines not supporting dell-laptop + - LP: #430809 + + [ Stefan Bader ] + + * [Upstream] acerhdf: Limit modalias matching to supported boards + - LP: #435958 + + [ Tim Gardner ] + + * [Upstream] i915: Fix i2c init message + - LP: #409361 + * [Config] Add sym53c8xx.ko to virtual sub-flavour + - LP: #439415 + * [Config] Add d101m_ucode.bin to d-i/firmware/nic-modules + - LP: #439456 + * [Config] Set default I/O scheduler back to CFQ for desktop flavours + - LP: #381300 + * SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros + - LP: #430694 + * SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915 + - LP: #430694 + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT + - LP: #430694 + * SAUCE: Raise the default console 'quiet' level to 2 + * [Config] CONFIG_X86_PAT=y + * [Config] Add armel arch to linux-libc-dev arches. + - LP: #449637 + * [Config] CONFIG_X86_MCE + * [Upstream] (drop after 2.6.31) Input: synaptics - add another Protege + M300 to rate blacklist + - LP: #433801 + + [ Upstream Kernel Changes ] + + * sgi-gru: Fix kernel stack buffer overrun, CVE-2009-2584 + * drm/i915: Fix FDI M/N setting according with correct color depth + - LP: #416792 + + -- Andy Whitcroft Thu, 22 Oct 2009 16:53:33 +0100 + +linux (2.6.32-1.1) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc3 + * [Config] update configs following rebase to 2.6.32-rc3 + * [Config] update ports configs following rebase to 2.6.32-rc3 + * AppArmor -- fix pstrace_may_access rename + * staging/android -- disable + * ubuntu: dm-raid-45 -- update to compile with 2.6.32 + * ubuntu: drbd -- disable + * staging/comdi -- disable + * staging/go7007 -- disable + * [Config] staging/winbond -- disable + * [Config] ubuntu/iscsitarget -- disable + * [d-i] cbc and ecb are builtin make them optional in udebs + * rebase to v2.6.32-rc5 + * [Config] update configs following rebase to v2.6.32-rc5 + * [Config] update ports configs following rebase to v2.6.31-rc5 + + [ Tim Gardner ] + + * [Config] Add cpio as a build dependency. + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc3 + * rebase to v2.6.32-rc5 + + -- Andy Whitcroft Mon, 05 Oct 2009 15:48:58 +0100 + +linux (2.6.31-11.37) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Increase kernel log buffer to 256K for amd64 flavours + - LP: #424810 + * [Config] Set HZ=100 for amd64 flavours + - LP: #438234 + * [Upstream] e1000e: Emit notice instead of an error when + pci_enable_pcie_error_reporting() fails + - LP: #436370 + + [ Upstream Kernel Changes ] + + * n_tty: honor opost flag for echoes + * n_tty: move echoctl check and clean up logic + - LP: #438310 + + * Revert "[Upstream] drm/i915: Check that the relocation points to within + the target" - Use upstream cherry-pick. + * drm/i915: Check that the relocation points to within the target + - LP: #429241 + + * drm/i915: fix tiling on IGDNG + * drm/i915: add B43 chipset support + * agp/intel: Add B43 chipset support + Intel request from kernel team mailing list. + + * HID: completely remove apple mightymouse from blacklist + - LP: #428111 + + -- Tim Gardner Mon, 28 Sep 2009 11:47:29 -0600 + +linux (2.6.31-11.36) karmic; urgency=low + + [ Brian Rogers ] + + * SAUCE: (drop after 2.6.31) em28xx: ir-kbd-i2c init data needs a + persistent object + * SAUCE: (drop after 2.6.31) saa7134: ir-kbd-i2c init data needs a + persistent object + + [ Takashi Iwai ] + + * [Upstream] ALSA: hda - Add another entry for Nvidia HDMI device + - LP: #416482 + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.31) eCryptfs: Prevent lower dentry from going + negative during unlink + + [ Upstream Kernel Changes ] + + * sg: fix oops in the error path in sg_build_indirect() + * mpt2sas : Rescan topology from Interrupt context instead of work thread + * mpt2sas: Prevent sending command to FW while Host Reset + * mpt2sas: setting SDEV into RUNNING state from Interrupt context + * mpt2sas: Raid 10 Volume is showing as Raid 1E in dmesg + * SCSI: fix oops during scsi scanning + * SCSI: libsrp: fix memory leak in srp_ring_free() + * cfg80211: fix looping soft lockup in find_ie() + * ath5k: write PCU registers on initial reset + * binfmt_elf: fix PT_INTERP bss handling + * TPM: Fixup boot probe timeout for tpm_tis driver + * md: Fix "strchr" [drivers/md/dm-log-userspace.ko] undefined! + * x86/amd-iommu: fix broken check in amd_iommu_flush_all_devices + * fix undefined reference to user_shm_unlock + * perf_counter: Fix buffer overflow in perf_copy_attr() + * perf_counter: Start counting time enabled when group leader gets + enabled + * powerpc/perf_counters: Reduce stack usage of power_check_constraints + * powerpc: Fix bug where perf_counters breaks oprofile + * powerpc/ps3: Workaround for flash memory I/O error + * block: don't assume device has a request list backing in nr_requests + store + * agp/intel: remove restore in resume + * ALSA: cs46xx - Fix minimum period size + * ASoC: Fix WM835x Out4 capture enumeration + * sound: oxygen: work around MCE when changing volume + * mlx4_core: Allocate and map sufficient ICM memory for EQ context + * perf stat: Change noise calculation to use stddev + * x86: Fix x86_model test in es7000_apic_is_cluster() + * x86/i386: Make sure stack-protector segment base is cache aligned + * PCI: apply nv_msi_ht_cap_quirk on resume too + * x86, pat: Fix cacheflush address in change_page_attr_set_clr() + * ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() + with highmem + * KVM guest: do not batch pte updates from interrupt context + * KVM: Fix coalesced interrupt reporting in IOAPIC + * KVM: VMX: Check cpl before emulating debug register access + * KVM guest: fix bogus wallclock physical address calculation + * KVM: x86: Disallow hypercalls for guest callers in rings > 0 + * KVM: VMX: Fix cr8 exiting control clobbering by EPT + * KVM: x86 emulator: Implement zero-extended immediate decoding + * KVM: MMU: make __kvm_mmu_free_some_pages handle empty list + * KVM: x86 emulator: fix jmp far decoding (opcode 0xea) + * KVM: limit lapic periodic timer frequency + * libata: fix off-by-one error in ata_tf_read_block() + * PCI quirk: update 82576 device ids in SR-IOV quirks list + * PCI: Unhide the SMBus on the Compaq Evo D510 USDT + * powerpc/pseries: Fix to handle slb resize across migration + * Linux 2.6.31.1 + + -- Tim Gardner Thu, 24 Sep 2009 13:04:28 -0600 + +linux (2.6.31-10.35) karmic; urgency=low + + [ Amit Kucheria ] + + * Disable CONFIG_UEVENT_HELPER_PATH + + [ Andy Whitcroft ] + + * [Config] Enable CONFIG_USB_GADGET_DUMMY_HCD + * remove the tlsup driver + * remove lmpcm logitech driver support + + [ Bryan Wu ] + + * Add 3 missing files to prerm remove file list + - LP: #345623, #415832 + + [ Chris Wilson ] + + * [Upstream] drm/i915: Check that the relocation points to within the + target + - LP: #429241 + + [ Luke Yelavich ] + + * [Config] Set CONFIG_EXT4_FS=y on ports architectures + + [ Manoj Iyer ] + + * SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + - LP: #348861 + + [ Tim Gardner ] + + * Revert "[Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) white-list" + Upstream suggests that this is not the right approach. + + * [Config] Set default I/O scheduler to DEADLINE + CFQ seems to have some load related problems which are often exacerbated by sreadahead. + - LP: #381300 + + [ ubuntu@tjworld.net ] + + * SAUCE: ipw2200: Enable LED by default + - LP: #21367 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Add support for new AMD HD audio devices + - LP: #430564 + + -- Andy Whitcroft Wed, 16 Sep 2009 15:37:49 +0100 + +linux (2.6.31-10.34) karmic; urgency=low + + [ Ted Tso ] + + * [Upstream] ext3: Don't update superblock write time when filesystem is + read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 16:00:45 -0600 + +linux (2.6.31-10.33) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] dvb-usb: fix tuning with Cinergy T2 + - LP: #421258 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + (really, really fix it this time) + - LP: #423426 + * [Config] Set CONFIG_CACHEFILES=m for all flavours + + [ Upstream Kernel Changes ] + + * ext4: Don't update superblock write time when filesystem is read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 07:50:21 -0600 + +linux (2.6.31-10.32) karmic; urgency=low + + [ Eric Miao ] + + * [Config] enable module support for memory stick + - LP: #159951 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + - LP: #423426 + + -- Tim Gardner Thu, 10 Sep 2009 15:57:55 -0600 + +linux (2.6.31-10.31) karmic; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.31 final + + [ Colin Watson ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + + [ Ike Panhc ] + + * [Upstream] Pull latest update of lenovo-sl-laptop + + [ Peter Feuerer ] + + * [Upstream] (drop after 2.6.31) acerhdf: fix fan control for AOA150 + model + - LP: #426691 + + [ Tim Gardner ] + + * [Config] De-macro some package names. + + [ Upstream Changes ] + + * rebase to 2.6.31 final. + + -- Andy Whitcroft Thu, 10 Sep 2009 09:38:10 +0100 + +linux (2.6.31-10.30) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Enable CONFIG_USB_DEVICEFS + - LP: #417748 + * [Config] Populate the config-update template a bit more + + [ Andy Whitcroft ] + + * rebase to v2.6.31-rc9 + * [Config] update configs following rebase to v2.6.31-rc9 + * [Config] update ports configs following rebase to v2.6.31-rc9 + + [ Colin Ian King ] + + * SAUCE: wireless: hostap, fix oops due to early probing interrupt + - LP: #254837 + + [ Jerone Young ] + + * [Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) + white-list + - LP: #281732 + + [ John Johansen ] + + * SAUCE: AppArmor: Fix profile attachment for regexp based profile names + - LP: #419308 + * SAUCE: AppArmor: Return the correct error codes on profile + addition/removal + - LP: #408473 + * SAUCE: AppArmor: Fix OOPS in profile listing, and display full list + - LP: #408454 + * SAUCE: AppArmor: Fix mapping of pux to new internal permission format + - LP: #419222 + * SAUCE: AppArmor: Fix change_profile failure + - LP: #401931 + * SAUCE: AppArmor: Tell git to ignore generated include files + - LP: #419505 + + [ Stefan Bader ] + + * [Upstream] acpi: video: Loosen strictness of video bus detection code + - LP: #333386 + * SAUCE: Remove ov511 driver from ubuntu subdirectory + + [ Tim Gardner ] + + * [Config] Exclude char-modules from non-x86 udeb creation + * SAUCE: Notify the ACPI call chain of AC events + * [Config] CONFIG_SATA_VIA=m + - LP: #403385 + * [Config] Build in all phylib support modules. + * [Config] Don't fail when sub-flavour files are missing + - LP: #423426 + * [Config] Set CONFIG_LSM_MMAP_MIN_ADDR=0 + - LP: #423513 + + [ Upstream ] + + * Rebased against v2.6.31-rc9 + + -- Andy Whitcroft Mon, 07 Sep 2009 11:33:45 +0100 + +linux (2.6.31-9.29) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] agp/intel: support for new chip variant of IGDNG mobile + - LP: #419993 + * [Config] d-i/modules: Add new char-modules file, initialize with + intel-agp + - LP: #420605 + + [ Upstream ] + + * Rebased against 2.6.31-rc8 plus some inotify regression patches: + up through git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git + adda766193ea1cf3137484a9521972d080d0b7af. + + -- Tim Gardner Fri, 28 Aug 2009 06:31:30 -0600 + +linux (2.6.31-8.28) karmic; urgency=low + + [ Ike Panhc ] + + * [Config] Let nic-shared-modules depends on crypto-modules + - LP: #360966 + + [ Leann Ogasawara ] + + * [Upstream] (drop after 2.6.31) drm/i915: increase default latency + constant + - LP: #412492 + + [ Mario Limonciello ] + + * [Upstream]: (drop after 2.6.31) dell-laptop: don't change softblock + status if HW switch is disabled + - LP: #418721 + * [Upstream]: (drop after 2.6.31) compal-laptop: Add support for known + Compal made Dell laptops + * [Upstream]: (drop after 2.6.31) compal-laptop: Replace sysfs support + with rfkill support + + [ Tim Gardner ] + + * [Config] Add acpiphp to virtual sub-flavour + - LP: #364916 + * Drop KSM patch set for now because of instabilities with encrypted swap. + - LP: #418781 + + -- Tim Gardner Wed, 26 Aug 2009 08:14:26 -0600 + +linux (2.6.31-7.27) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] updateconfigs updateportsconfigs after 2.6.31-rc7 rebase + * SAUCE: (drop after 2.6.31) Added KSM from mmotm-2009-08-20-19-18 + Replaces previous ksm patches from 2.6.31-6.25 + * [Config] KSM=y + + [ Upstream ] + + * Rebased against v2.6.31-rc7 + + -- Tim Gardner Sat, 22 Aug 2009 20:32:11 -0600 + +linux (2.6.31-6.26) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_BR_RAMFS + - LP: #414738 + * split out debian directory ready for abstraction + * add printdebian target to find branch target + * abstracted debian -- debian/files is not abstracted + * abstracted debian -- packages must be built in debian/ + * abstracted debian -- kernel-wedge needs to work in debian/ + * abstracted debian -- ensure we install the copyright file + * abstracted-debian -- drop the debian directories from headers + * abstracted-debian -- drop the debian directories from headers part 2 + * SAUCE: ubuntu-insert-changes -- follow abstracted debian + * [Upstream] aoe: ensure we initialise the request_queue correctly V2 + - LP: #410198 + + [ Luke Yelavich ] + + * [Config] Ports: Disable CONFIG_CPU_FREQ_DEBUG on powerpc-smp + * [Config] Ports: Re-enable windfarm modules on powerpc64-smp + - LP: #413150 + * [Config] Ports: Build all cpu frequency scaling governors into ports + kernels + * [Config] Ports: Build ext2 and ext3 modules into ports kernels + * [Config] Ports: CONFIG_PACKET=y for all ports kernels + * [Config] Ports: Enable PS3 network driver + + [ Stefan Bader ] + + * abstracted debian -- call $(DEBIAN)/rules using make + + [ Tim Gardner ] + + * [Config] Abstract the debian directory + * SAUCE: Improve error reporting in postinst + - LP: #358564 + + -- Tim Gardner Sun, 16 Aug 2009 20:33:28 -0600 + +linux (2.6.31-6.25) karmic; urgency=low + + [ Andy Whitcroft ] + + * script to generate Ubuntu changes from changelog + * [Config] standardise ANDROID options + * [Config] standardise CONFIG_ATM as module + * [Config] standardise CONFIG_LIB80211 as module + * [Config] disable CONFIG_PRINT_QUOTA_WARNING + * [Config] set CONFIG_CRAMFS as module + * [Config] enable CONFIG_DAB and modules + * [Config] set CONFIG_MAC80211_HWSIM as module + * [Config] set CONFIG_NET_CLS_FLOW as module + * [Config] set CONFIG_NF_CONNTRACK_SANE as module + * [Config] set CONFIG_NF_CT_PROTO_DCCP as module + * [Config] set CONFIG_RTC_DRV_DS1511 as module + * [Config] set CONFIG_RTC_DRV_R9701 as module + * [Config] set CONFIG_RTC_DRV_S35390A as module + * [Config] set CONFIG_TOIM3232_DONGLE as module + * [Config] standardise CONFIG_USB_MIDI_GADGET as module + * [Config] standardise CONFIG_USB_G_PRINTER as module + * [Config] standardise CONFIG_USB_SERIAL_IR as module + * [Config] set CONFIG_USB_SERIAL_IUU as module + * [Config] standardise CONFIG_USB_STORAGE_CYPRESS_ATACB as module + * [Config] standardise CONFIG_USB_STORAGE_ONETOUCH as module + * cleanup remains of dm-loop + * drop thinkpad ec and smapi support + * drop appleir + * [Config] update configs following rebase to v2.6.31-rc6 + * rebase to v2.6.31-rc6 + + [ Hugh Dickins ] + + * SAUCE: ksm patch 1, drop after 2.6.31 + * SAUCE: ksm patch 2, drop after 2.6.31 + * SAUCE: ksm patch 3, drop after 2.6.31 + * SAUCE: ksm patch 4, drop after 2.6.31 + * SAUCE: ksm patch 5, drop after 2.6.31 + * SAUCE: ksm patch 7, drop after 2.6.31 + + [ Izik Eidus ] + + * SAUCE: ksm patch 0, drop after 2.6.31 + * SAUCE: ksm patch 6, drop after 2.6.31 + * SAUCE: ksm patch 8, drop after 2.6.31 + * SAUCE: ksm patch 9, drop after 2.6.31 + + [ Luke Yelavich ] + + * [Config] Ports: Re-add PS3 modules to udebs + + [ Michael Casadevall ] + + * [Config] Update SPARC config and d-i files to reflect what can be built + + [ Tim Gardner ] + + * [Config] Removed armel package support + * [Config] Enabled CONFIG_KSM=y + + [ Upstream Kernel Changes ] + + * Rebased against v2.6.31-rc6 + * ARM: Cleanup: Revert "ARM: Add more cache memory types macros" + * ARM: Cleanup: Revert "Do not use OOB with MLC NAND" + * ARM: Cleanup: Revert "ARM: Make ARM arch aware of ubuntu/ drivers" + * ARM: Cleanup: Revert "ARM: IMX51: Make video capture drivers compile" + * ARM: Cleanup: Revert "ARM: IMX51: Fix isl29003 HWMON driver for i2c + changes" + * ARM: Cleanup: Revert "ARM: IMX51: IPU irq handler deadlock fix" + * ARM: Cleanup: Revert "ARM: IMX51: Babbage 2.5 needs a different system + revision" + * ARM: Cleanup: Revert "ARM: IMX51: Compile-in the IMX51 cpufreq driver + by default" + * ARM: Cleanup: Revert "ARM: IMX51: Enable ZONE_DMA for ARCH_MXC" + * ARM: Cleanup: Revert "ARM: IMX51: Make ARCH_MXC auto-enable + ARCH_MXC_CANONICAL" + * ARM: Cleanup: Revert "ARM: IMX51: Unconditionally disable + CONFIG_GPIOLIB" + * ARM: Cleanup: Revert "ARM: IMX51: Minimal changes for USB to work on + 2.6.31" + * ARM: Cleanup: Revert "ARM: IMX51: Fix plat-mxc/timer.c to handle imx51" + * ARM: Cleanup: Revert "ARM: IMX51: Make it compile." + * ARM: Cleanup: Revert "ARM: IMX51: Clean-up the craziness of including + mxc_uart.h _everywhere_" + * ARM: Cleanup: Revert "ARM: IMX51: Move board-mx51* header files to the + correct location" + * ARM: Cleanup: Revert "ARM: IMX51: Changed from snd_card_new to + snd_card_create" + * ARM: Cleanup: Revert "ARM: IMX51: Fix up merge error in Kconfig" + * ARM: Cleanup: Revert "ARM: IMX51: mxc_timer_init prototype" + * ARM: Cleanup: Revert "ARM: IMX51: Removed the mxc_gpio_port structure." + * ARM: Cleanup: Revert "ARM: IMX51: Added external declaration for + mxc_map_io." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: snd_soc_machine structure replaced + with snd_soc_card." + * ARM: Cleanup: Revert "ARM: IMX51: codec structure was moved to the card + structure" + * ARM: Cleanup: Revert "ARM: IMX51: Hack to add defines for + DMA_MODE_READ/WRITE/MASK" + * ARM: Cleanup: Revert "ARM: IMX51: Add SoC and board support for + Freescale mx51 platform" + * Driver core: add new device to bus's list before probing + * [Upstream] (drop after 2.6.31) ALSA: hda - Reduce click noise at + power-saving + - LP: #381693, #399750, #380892 + + -- Andy Whitcroft Fri, 14 Aug 2009 11:32:23 +0100 + +linux (2.6.31-5.24) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Make video capture drivers compile + * [Config] IMX51: Config updates + + [ Andy Whitcroft ] + + * remove leftovers of dm-bbr + + [ Leann Ogasawara ] + + * Add pata_cs5535 to pata-modules + - LP: #318805 + + [ Luke Yelavich ] + + * [Config] CONFIG_PPC64=y for powerpc64-smp + * [Config] Set the maximum number of CPUs to 1024 for powerpc64-smp + * [Config] CONFIG_PPC_PS3=y for powerpc64-smp + * [Config] CONFIG_PPC_MAPLE=y on powerpc64-smp + * [Config] CONFIG_PPC_PASEMI=y on powerpc64-smp + * [Config] CONFIG_CPU_FREQ_PMAC64=y on powerpc64-smp + * [Config] Enable all PS3 drivers in powerpc64-smp + + [ Mario Limonciello ] + + * LIRC -- fix lirc-i2c 2.6.31 compilation + + [ Matthew Garrett ] + + * [Upstream] dell-laptop: Fix rfkill state queries + + [ Tim Gardner ] + + * [Config] Ignore armel ABI and module changes + * [Config] Update configs after rebase against 2.6.31-rc5 + + [ Upstream ] + + * Rebased to 2.6.31-rc5 + + -- Andy Whitcroft Tue, 28 Jul 2009 10:10:09 +0100 + +linux (2.6.31-4.23) karmic; urgency=low + + [ Andy Whitcroft ] + + * AUFS -- update to aufs2-30 20090727 + * [Config] enable AUFS FUSE support + + [ Luke Yelavich ] + + * [Config] CONFIG_JFS_FS=m on sparc + + [ Tim Gardner ] + + * [Upstream] dell-laptop: Fix rfkill state setting. + + -- Andy Whitcroft Mon, 27 Jul 2009 11:11:47 +0100 + +linux (2.6.31-4.22) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Add SoC and board support for Freescale mx51 platform + * ARM: IMX51: Move board-mx51* header files to the correct location + * ARM: IMX51: Clean-up the craziness of including mxc_uart.h _everywhere_ + * ARM: IMX51: Make it compile. + * ARM: IMX51: Unconditionally disable CONFIG_GPIOLIB + * ARM: IMX51: Make ARCH_MXC auto-enable ARCH_MXC_CANONICAL + * ARM: IMX51: Enable ZONE_DMA for ARCH_MXC + * ARM: IMX51: Compile-in the IMX51 cpufreq driver by default + * ARM: IMX51: Fix isl29003 HWMON driver for i2c changes + * ARM: USB: musb: Refer to musb_otg_timer_func under correct #ifdef + * ARM: staging: udlfb: Add vmalloc.h include + * UBUNTU [Config]: Bring imx51 config upto date with other flavours + + [ Brad Figg ] + + * ARM: IMX51: Hack to add defines for DMA_MODE_READ/WRITE/MASK + * ARM: IMX51: codec structure was moved to the card structure + * ARM: IMX51: snd_soc_machine structure replaced with snd_soc_card. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Added external declaration for mxc_map_io. + * ARM: IMX51: Removed the mxc_gpio_port structure. + * ARM: IMX51: mxc_timer_init prototype + * ARM: IMX51: Fix up merge error in Kconfig + * ARM: IMX51: Changed from snd_card_new to snd_card_create + + [ Dinh Nguyen ] + + * ARM: IMX51: Fix plat-mxc/timer.c to handle imx51 + * ARM: IMX51: Minimal changes for USB to work on 2.6.31 + * ARM: IMX51: Babbage 2.5 needs a different system revision + * ARM: IMX51: IPU irq handler deadlock fix + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_CAN=m + - LP: #327243 + * [Config] Enabled CONFIG_SERIAL=m + - LP: #397189 + + -- Tim Gardner Fri, 24 Jul 2009 06:19:10 -0600 + +linux (2.6.31-4.21) karmic; urgency=low + + [ Amit Kucheria ] + + * dm-raid-4-5: Add missing brackets around test_bit() + + [ John Johansen ] + + * AppArmor: Fix change_profile failing lpn401931 + * AppArmor: Fix determination of forced AUDIT messages. + * AppArmor: Fix oops in auditing of the policy interface offset + + -- Andy Whitcroft Thu, 23 Jul 2009 19:18:30 +0100 + +linux (2.6.31-4.20) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: iscsitarget -- update to SVN revision r214 + * SAUCE: iscsitarget -- renable driver + * [Config] consolidate lpia/lpia and i386/generic configs + * [Config] enable CRYPTO modules for all architectures + * [Config] enable cryptoloop + * [Config] enable various filesystems for armel + * [Config] sync i386 generic and generic-pae + * [Config] add the 386 (486 processors and above) flavour + * [Config] re-set DEFAULT_MMAP_MIN_ADDR + - LP: #399914 + * add genconfigs/genportsconfigs to extract the built configs + * updateconfigs -- alter concatenation order allow easier updates + * intelfb -- INTELFB now conflicts with DRM_I915 + * printchanges -- rebase tree does not have stable tags use changelog + * AppArmor: fix argument size missmatch on 64 bit builds + + [ Ike Panhc ] + + * Ship bnx2x firmware in nic-modules udeb + - LP: #360966 + + [ Jeff Mahoney ] + + * AppArmor: fix build failure on ia64 + + [ John Johansen ] + + * AppArmour: ensure apparmor enabled parmater is off if AppArmor fails to + initialize. + * AppArmour: fix auditing of domain transitions to include target profile + information + * AppArmor: fix C99 violation + * AppArmor: revert reporting of create to write permission. + * SAUCE: Add config option to set a default LSM + * [Config] enable AppArmor by default + * AppArmor: Fix NULL pointer dereference oops in profile attachment. + + [ Keith Packard ] + + * SAUCE: drm/i915: Allow frame buffers up to 4096x4096 on 915/945 class + hardware + - LP: #351756 + + [ Luke Yelavich ] + + * [Config] add .o files found in arch/powerpc/lib to all powerpc kernel + header packages + - LP: #355344 + + [ Michael Casadevall ] + + * [Config] update SPARC config files to allow success build + + [ Scott James Remnant ] + + * SAUCE: trace: add trace_event for the open() syscall + + [ Stefan Bader ] + + * SAUCE: jfs: Fix early release of acl in jfs_get_acl + - LP: #396780 + + [ Tim Gardner ] + + * [Upstream] Fix Soltech TA12 volume hotkeys not sending key release + - LP: #397499 + * [Upstream] USB Option driver - Add USB ID for Novatel MC727/U727/USB727 + refresh + - LP: #365291 + * [Config] SSB/B44 are common across all arches/flavours. + + [ Upstream ] + + * Rebased to 2.6.31-rc4 + + -- Andy Whitcroft Thu, 23 Jul 2009 08:41:39 +0100 + +linux (2.6.31-3.19) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] Disabled NDISWRAPPER" + * ndiswrapper -- fix i386 compilation failures on cmpxchg8b + * AUFS -- export various core functions + * AUFS -- export various core functions -- fixes + * AUFS -- core filesystem + * AUFS -- track changes in v2.6.31 + * [Config] Enable AUFS + * droppped 'iwl3945: do not send scan command if channel count zero' as it + is already upstream but failed to auto-drop on rebase. + + [ Eric Paris ] + + * SAUCE: fsnotify: use def_bool in kconfig instead of letting the user + choose + * SAUCE: inotify: check filename before dropping repeat events + * SAUCE: fsnotify: fix inotify tail drop check with path entries + + -- Andy Whitcroft Tue, 14 Jul 2009 12:52:55 +0100 + +linux (2.6.31-3.18) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "Add splice-2.6.23.patch from AUFS to export a symbol needed by + AUFS" + * Revert "Add put_filp.patch from AUFS to export a symbol needed by AUFS" + * Revert "Add sec_perm-2.6.24.patch from AUFS - export + security_inode_permission" + * clear out left over AUFS files and modifications + + [ Luke Yelavich ] + + * [Config] Enable CONFIG_USB_ISP116X_HCD on sparc + * SAUCE: Explicitly include header files to allow apparmor to build on + powerpc + * [Config] Enable CONFIG_BLK_DEV_IDECD on powerpc + + [ Tim Gardner ] + + * [Config] Dropped ubuntu/misc/wireless/acx + * [Config] Disabled NDISWRAPPER until the compile issues are fixed. + + [ Upstream ] + + * Rebased to 2.6.31-rc3 + + -- Andy Whitcroft Fri, 10 Jul 2009 18:59:33 +0100 + +linux (2.6.31-2.17) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_BLK_DEV_CRYPTOLOOP=m for sparc + * compcache -- remove redundant Kconfig entries part 2 + * compcache -- clean up CCFLAGS declarations + * [Config] enable AppArmor + * AppArmor: fix operator precidence issue in as_path_link + + [ John Johansen ] + + * AppArmor security module + * AppArmor: Correct mapping of file permissions. + * AppArmor: Turn auditing of ptrace on + + [ Luke Yelavich ] + + * [Config] disable CONFIG_DM_RAID45 on powerpc + + -- Andy Whitcroft Fri, 10 Jul 2009 15:02:05 +0100 + +linux (2.6.31-2.16) karmic; urgency=low + + [ Andy Whitcroft ] + + * compcache -- remove redundant Kconfig entries + added ignore and ignore.modules for all arches since the compcache update + changes the modules names as well as some compcache ABI values. + + [ Manoj Iyer ] + + * SAUCE: updated dm-raid45 module version to 2009.04.24 (2.6.30-rc3) + * SAUCE: update compcache version to 0.5.3 + + [ Tim Gardner ] + + * [Config]: Fix sparc FTBS by adding ignore.modules + + -- Tim Gardner Mon, 06 Jul 2009 13:35:29 -0600 + +linux (2.6.31-2.15) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: default ATI Radeon KMS to off until userspace catches up + * [Config] Update configs following rebase to 2.6.31-rc2 + * [Config] update ports configs following update to 2.6.31-rc2 + + [ Luke Yelavich ] + + * [Config] powerpc - Disable CONFIG_RDS + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + [ Upstream Kernel Changes ] + + * rebased to mainline 2.6.31-rc2 + + -- Andy Whitcroft Sat, 04 Jul 2009 17:39:13 +0100 + +linux (2.6.31-1.14) karmic; urgency=low + + [ Andy Whitcroft ] + + * update ndiswrapper to 1.55 + * remove leftovers of gfs + * [Config] powerpc: enable CONFIG_PPC_DISABLE_WERROR + + [ Luke Yelavich ] + + * [Config] re-enable and build the ide-pmac driver into powerpc kernels + * [Config] Build the ServerWorks Frodo / Apple K2 SATA driver into the + kernel + + [ Manoj Iyer ] + + * Remove snd-bt-sco ubuntu driver + + [ Michael Casadevall ] + + * [Config] updates ia64 config and d-i folders to allow succesful build + * [Config] Update powerpc and sparc for 2.6.31 + + [ Upstream Kernel Changes ] + + * intel-iommu: fix Identity Mapping to be arch independent + - LP: #384695 + * ACPI: video: prevent NULL deref in acpi_get_pci_dev() + + -- Andy Whitcroft Tue, 30 Jun 2009 17:47:32 +0100 + +linux (2.6.31-1.13) karmic; urgency=low + + [ Andy Whitcroft ] + + * REBASE: rebased to mainline 2.6.31-rc1 + - "UBUNTU: SAUCE: UHCI USB quirk for resume" + no longer applies, using deprecated interfaces, LPIA only, dropped + - "UBUNTU: SAUCE: Mask off garbage in Dell WMI scan code data" + changes now upstream, dropped + * [Config] Update configs following rebase to 2.6.31-rc1 + * [Config] update ports configs following update to 2.6.31-rc1 + + * [Config] disable broken staging driver CONFIG_STLC45XX + * SAUCE: fix compcache to use updates accessors + * [Config] disable staging driver CONFIG_VT6655 + * SAUCE: fix DRDB to use updates accessors + * [Disable] ndiswrapper needs update + * [Disable] LIRC I2C needs update + * [Disable] CONFIG_LENOVO_SL_LAPTOP needs update + * [Config] disable I2C_DESIGNWARE does not compile + * [Config] disable CONFIG_TLSUP for lpia + * [Config] disable CONFIG_FB_UDL for arm + * SAUCE: disable adding scsi headers to linux-libc-dev + + [ Mario Limonciello ] + + * SAUCE: Add LIRC drivers + + -- Andy Whitcroft Thu, 25 Jun 2009 12:06:22 +0100 + +linux (2.6.30-10.12) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] split out the ports configs into their own family + * [Config] update configs following introduction of ports family + + [ Upstream Kernel Changes ] + + * Revert "Rename linux-doc-PKGVER to linux-doc and clean up its + description". Fixes linux-doc package name conflicts for now. + - LP: #382115 + + -- Tim Gardner Mon, 22 Jun 2009 09:17:14 -0600 + +linux (2.6.30-10.11) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Comment splitconfig.pl and misc cleanup + * [Config] Rename all configs to the new naming scheme + * [Config] Splitconfig rework + * [Config] Rename scripts/misc/oldconfig to kernelconfig + * [Config] Fix build system for new config split + * [Config] Run updateconfigs after the splitconfig rework + + [ Andy Whitcroft ] + + * Revert "SAUCE: Default to i915.modeset=0 if CONFIG_DRM_I915_KMS=y" + * [Config] standardise CONFIG_STAGING=y + * [Config] standardise CONFIG_RD_LZMA=y + * [Config] CONFIG_PCI_IOV=y + * [Config] CONFIG_PCI_STUB=m + * [Config] merge kernel configs more agressively + + [ Colin Watson ] + + * [Config] Run kernel-wedge in $(builddir) rather than at the top level + * [Config] Add support for including firmware in udebs + * [Config] Ship bnx2 firmware in nic-modules udeb + - LP: #384861 + + [ Luke Yelavich ] + + * [Config] ports - Import of ports architectures into kernel packaging + infrastructure + * [Config] ports - Do not update ports kernel configurations by default + * [Config] ports - Disable ABI checking for ports architectures + * [Config] ports - Build drivers in ubuntu sub-directory on powerpc + * [Config] ports - Add control.d/vars.* files for ports architectures + * [Config] ports - Add ports architectures for linux-libc-dev + * [Config] ports - Create powerpc specific message-modules and + block-modules udebs + * [Config] ports - Add configuration files for ports architectures + + [ Manoj Iyer ] + + * [Config] Enable CONFIG_BLK_DEV_AEC62XX=m for amd64 and i386 + - LP: #329864 + + [ Michael Casadevall ] + + * [Config] ports - Fix compression of kernels + + [ Stefan Bader ] + + * [Upstream] mmc: prevent dangling block device from accessing stale + queues + - LP: #383668 + + [ Tim Gardner ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + * [Config] Implement i386 generic and generic-pae flavours + * [Config] ports - Add control info after integrating ports arches + * [Config] Removed auto-generated files from git + * [Config] Added netxen_nic to nic-modules + - LP: #389603 + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + -- Tim Gardner Mon, 15 Jun 2009 14:38:26 -0600 + +linux (2.6.30-9.10) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_SECURITY_TOMOYO=y (amd64, i386, lpia) + * [Config] CONFIG_KEXEC_JUMP=y (amd64, lpia) + * [Config] CONFIG_LENOVO_SL_LAPTOP=m (amd64, lpia) + * [Config] CONFIG_POHMELFS_CRYPTO=y (i386, amd64) + * [Config] CONFIG_SERIAL_MAX3100=m (i386, amd64, lpia) + * [Config] CONFIG_VIDEO_GO7007=m (amd64, i386) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30 final + + -- Andy Whitcroft Fri, 05 Jun 2009 11:42:53 +0100 + +linux (2.6.30-8.9) karmic; urgency=low + + [ Andy Whitcroft ] + + * Config update removed the following options: + CONFIG_EDAC_AMD8111=m + CONFIG_EDAC_AMD8131=m + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc8 + + -- Andy Whitcroft Wed, 03 Jun 2009 09:21:13 +0100 + +linux (2.6.30-7.8) karmic; urgency=low + + [ Andy Whitcroft ] + + * Enabled NEW configration options: + Paravirtualization layer for spinlocks (PARAVIRT_SPINLOCKS) [N/y/?] Y + Cisco FNIC Driver (FCOE_FNIC) [N/m/y/?] M + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc7 + + -- Andy Whitcroft Sat, 23 May 2009 23:47:24 +0100 + +linux (2.6.30-6.7) karmic; urgency=low + + [ Andy Whitcroft ] + + * Dropped: UBUNTU: SAUCE: input: Blacklist digitizers from joydev.c (now + upstream) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc6 + + -- Andy Whitcroft Mon, 18 May 2009 18:05:54 +0100 + +linux (2.6.30-5.6) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enable Keyspan USB serial device firmware in kernel module + - LP: #334285 + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc5 + + -- Tim Gardner Mon, 11 May 2009 12:02:16 -0600 + +linux (2.6.30-4.5) karmic; urgency=low + + [ Colin Watson ] + + * Build-Conflict with findutils (= 4.4.1-1ubuntu1), to avoid + /usr/include/asm/* going missing + - LP: #373214 + + -- Stefan Bader Fri, 08 May 2009 11:09:08 +0200 + +linux (2.6.30-3.4) karmic; urgency=low + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + + [ Stefan Bader ] + + * SAUCE: input: Blacklist digitizers from joydev.c + - LP: #300143 + + -- Tim Gardner Fri, 01 May 2009 14:00:42 -0600 + +linux (2.6.30-2.3) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enabled CC_STACKPROTECTOR=y for all x86en + - LP: #369152 + * SAUCE: Default to i915_modeset=0 if CONFIG_DRM_I915_KMS=y + * [Config] CONFIG_DRM_I915_KMS=y + * [Config] Set CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR to appropriate ARCH + minimums + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc4 + + -- Tim Gardner Thu, 30 Apr 2009 09:17:05 -0600 + +linux (2.6.30-1.2) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] armel: disable staging drivers, fixes FTBS + * [Config] armel imx51: Disable CONFIG_MTD_NAND_MXC, fixes FTBS + + [ Upstream Kernel Changes ] + + * mpt2sas: Change reset_type enum to avoid namespace collision. + Submitted upstream. + + -- Tim Gardner Tue, 28 Apr 2009 16:54:41 -0600 + +linux (2.6.30-1.1) karmic; urgency=low + + * Initial release after rebasing against v2.6.30-rc3 + + -- Tim Gardner Thu, 12 Mar 2009 19:16:07 -0600 --- linux-lts-raring-3.8.0.orig/debian/control.stub +++ linux-lts-raring-3.8.0/debian/control.stub @@ -0,0 +1,107 @@ +Source: linux-lts-raring +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386], libelf-dev, libnewt-dev, binutils-dev, rsync, libdw-dev, dpkg (>= 1.16.0~ubuntu4), util-linux, pkg-config, flex, bison, openssl +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-raring.git + +Package: linux-headers-3.8.0-33 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +Description: Header files related to Linux kernel version 3.8.0 + This package provides kernel header files for version 3.8.0, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-lts-raring-headers-3.8.0-33/debian.README.gz for details + +Package: linux-tools-3.8.0-33 +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-tools-common +Description: Linux kernel version specific tools for version 3.8.0-33 + This package provides the architecture dependant parts for kernel + version locked tools (such as perf and x86_energy_perf_policy) for + version 3.8.0-33 on + 32 bit x86. + + +Package: linux-image-3.8.0-33-generic +Architecture: i386 amd64 armhf +Section: kernel +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-3.0, fuse-module, +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1) +Recommends: grub-pc [amd64 i386] | grub-efi-amd64 [amd64 i386] | grub-efi-ia32 [amd64 i386] | grub [amd64 i386] | lilo (>= 19.1) [amd64 i386] | flash-kernel [armhf] +Suggests: fdutils, linux-lts-raring-doc-3.8.0 | linux-lts-raring-source-3.8.0, linux-lts-raring-tools, linux-headers-3.8.0-33-generic +Description: Linux kernel image for version 3.8.0 on 32 bit x86 SMP + This package contains the Linux kernel image for version 3.8.0 on + 32 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 Generic processors. + . + Geared toward desktop and server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-image-extra-3.8.0-33-generic +Architecture: i386 amd64 armhf +Section: kernel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-3.8.0-33-generic, crda (>=1.1.1-1ubuntu2) | wireless-crda +Description: Linux kernel image for version 3.8.0 on 32 bit x86 SMP + This package contains the Linux kernel image for version 3.8.0 on + 32 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 Generic processors. + . + Geared toward desktop and server systems. + . + You likely do not want to install this package directly. Instead, install + the linux-generic meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-3.8.0-33-generic +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends}, linux-headers-3.8.0-33, ${shlibs:Depends} +Provides: linux-headers, linux-headers-3.0 +Description: Linux kernel headers for version 3.8.0 on 32 bit x86 SMP + This package provides kernel header files for version 3.8.0 on + 32 bit x86 SMP. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-3.8.0-33/debian.README.gz for details. + +Package: linux-image-3.8.0-33-generic-dbgsym +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 3.8.0 on 32 bit x86 SMP + This package provides a kernel debug image for version 3.8.0 on + 32 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. --- linux-lts-raring-3.8.0.orig/debian/debian.env +++ linux-lts-raring-3.8.0/debian/debian.env @@ -0,0 +1 @@ +DEBIAN=debian.raring --- linux-lts-raring-3.8.0.orig/debian/tools/x86_energy_perf_policy +++ linux-lts-raring-3.8.0/debian/tools/x86_energy_perf_policy @@ -0,0 +1,16 @@ +#!/bin/bash +full_version=`uname -r` + +# Removing flavour from version i.e. generic or server. +flavour_abi=${full_version#*-} +flavour=${flavour_abi#*-} +version=${full_version%-$flavour} +x86_energy_perf_policy="x86_energy_perf_policy_$version" + +if ! which "$x86_energy_perf_policy" > /dev/null; then + echo "$x86_energy_perf_policy not found" >&2 + echo "You may need to install linux-tools-$version" >&2 + exit 2 +fi + +exec "$x86_energy_perf_policy" "$@" --- linux-lts-raring-3.8.0.orig/debian/tools/turbostat +++ linux-lts-raring-3.8.0/debian/tools/turbostat @@ -0,0 +1,16 @@ +#!/bin/bash +full_version=`uname -r` + +# Removing flavour from version i.e. generic or server. +flavour_abi=${full_version#*-} +flavour=${flavour_abi#*-} +version=${full_version%-$flavour} +turbostat="turbostat_$version" + +if ! which "$turbostat" > /dev/null; then + echo "$turbostat not found" >&2 + echo "You may need to install linux-tools-$version" >&2 + exit 2 +fi + +exec "$turbostat" "$@" --- linux-lts-raring-3.8.0.orig/debian/tools/perf +++ linux-lts-raring-3.8.0/debian/tools/perf @@ -0,0 +1,16 @@ +#!/bin/bash +full_version=`uname -r` + +# Removing flavour from version i.e. generic or server. +flavour_abi=${full_version#*-} +flavour=${flavour_abi#*-} +version=${full_version%-$flavour} +perf="perf_$version" + +if ! which "$perf" > /dev/null; then + echo "$perf not found" >&2 + echo "You may need to install linux-tools-$version" >&2 + exit 2 +fi + +exec "$perf" "$@" --- linux-lts-raring-3.8.0.orig/debian/tools/generic +++ linux-lts-raring-3.8.0/debian/tools/generic @@ -0,0 +1,16 @@ +#!/bin/bash +full_version=`uname -r` + +# 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 + echo "$this not found" >&2 + echo "You may need to install linux-tools-$version" >&2 + exit 2 +fi + +exec "$this" "$@" --- linux-lts-raring-3.8.0.orig/debian/source/format +++ linux-lts-raring-3.8.0/debian/source/format @@ -0,0 +1 @@ +1.0 --- linux-lts-raring-3.8.0.orig/debian/stamps/keep-dir +++ linux-lts-raring-3.8.0/debian/stamps/keep-dir @@ -0,0 +1 @@ +Place holder --- linux-lts-raring-3.8.0.orig/debian/commit-templates/upstream-patch +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/commit-templates/bumpabi +++ linux-lts-raring-3.8.0/debian/commit-templates/bumpabi @@ -0,0 +1,3 @@ +UBUNTU: Bump ABI + +Ignore: yes --- linux-lts-raring-3.8.0.orig/debian/commit-templates/external-driver +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/commit-templates/config-updates +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/commit-templates/newrelease +++ linux-lts-raring-3.8.0/debian/commit-templates/newrelease @@ -0,0 +1,3 @@ +UBUNTU: Start new release + +Ignore: yes --- linux-lts-raring-3.8.0.orig/debian/commit-templates/sauce-patch +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/commit-templates/missing-modules +++ linux-lts-raring-3.8.0/debian/commit-templates/missing-modules @@ -0,0 +1,3 @@ +UBUNTU: build/modules: Add modules that have intentionally gone missing + +Ignore: yes --- linux-lts-raring-3.8.0.orig/debian/scripts/module-check +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/config-check +++ linux-lts-raring-3.8.0/debian/scripts/config-check @@ -0,0 +1,413 @@ +#!/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 $checks = "$commonconfig/enforce"; +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; + +# Predicate execution engine. +sub pred_first { + my ($rest) = @_; + my $depth = 0; + my $off; + my $char; + my $pred; + + for ($off = 0; $off <= length($rest); $off++) { + $char = substr($rest, $off, 1); + if ($char eq '(') { + $depth++; + } elsif ($char eq ')') { + $depth--; + } elsif ($depth == 0 && $char eq '&') { + last; + } elsif ($depth == 0 && $char eq '|') { + last; + } + } + if ($depth > 0) { + die "$P: $rest: missing close parenthesis ')'\n"; + } elsif ($depth < 0) { + die "$P: $rest: missing open parenthesis '('\n"; + } + + ($pred, $rest) = (substr($rest, 0, $off), substr($rest, $off + 1)); + + $pred =~ s/^\s*//; + $pred =~ s/\s*$//; + + #print "pred<$pred> rest<$rest> char<$char>\n"; + ($pred, $rest, $char); +} + +sub pred_do { + my ($pred) = @_; + my (@a) = split(' ', $pred); + my $possible; + + if ($a[0] eq 'arch') { + die "$P: $pred: malformed -- $pred \n" if ($#a < 1); + for $possible (@a[1..$#a]) { + #print " *** ARCH<$flavour ?? $possible>\n"; + return 1 if ($arch eq $possible); + } + return 0; + } elsif ($a[0] eq 'flavour') { + die "$P: $pred: malformed -- $pred \n" if ($#a < 1); + for $possible (@a[1..$#a]) { + #print " *** FLAVOUR<$flavour ?? $possible>\n"; + return 1 if ($flavour eq $possible); + } + return 0; + } elsif ($a[0] eq 'value') { + die "$P: $pred: malformed -- $pred \n" if ($#a != 2); + #print " *** CHECK<$a[1] $a[2] ?? " . $values{$a[1]} . ">\n"; + return ($values{$a[1]} eq $a[2]); + } elsif ($a[0] eq 'exists') { + die "$P: $pred: malformed -- $pred \n" if ($#a != 1); + return (defined $values{$a[1]}); + } else { + die "$P: $pred: unknown predicate\n"; + } + return 1; +} +sub pred_exec { + my ($rest) = @_; + my $pred; + my $cut = 0; + my $res; + my $sep; + + #print "pred_exec<$rest>\n"; + + ($pred, $rest, $sep) = pred_first($rest); + + # Leading ! implies inversion. + if ($pred =~ /^\s*!\s*(.*)$/) { + #print " invert<$1>\n"; + ($cut, $res) = pred_exec($1); + $res = !$res; + + # Leading / implies a CUT operation. + } elsif ($pred =~ /^\s*\/\s*(.*)$/) { + #print " cut<$1>\n"; + ($cut, $res) = pred_exec($1); + $cut = 1; + + # Recurse left for complex expressions. + } elsif ($pred =~ /^\s*\((.*)\)\s*$/) { + #print " left<$1>\n"; + ($cut, $res) = pred_exec($1); + + # Check for common syntax issues. + } elsif ($pred eq '') { + if ($sep eq '&' || $sep eq '|') { + die "$P: $pred$rest: malformed binary operator\n"; + } else { + die "$P: $pred$rest: syntax error\n"; + } + + # A predicate, execute it. + } else { + #print " DO<$pred> sep<$sep>\n"; + $res = pred_do($pred); + } + + #print " pre-return res<$res> sep<$sep>\n"; + if ($sep eq '') { + # + + # Recurse right for binary operators -- note these are lazy. + } elsif ($sep eq '&' || $sep eq '|') { + #print " right<$rest> ? sep<$sep> res<$res>\n"; + if ($rest =~ /^\s*($|\||\&)/) { + die "$P: $pred$rest: malformed binary operator\n"; + } + if ($cut == 0 && (($res && $sep eq '&') || (!$res && $sep eq '|'))) { + #print " right<$rest>\n"; + ($cut, $res) = pred_exec($rest); + } + + } else { + die "$P: $pred$rest: malformed predicate\n"; + } + #warn " return cut<$cut> res<$res> sep<$sep>\n"; + return ($cut, $res); +} + +# +# PREDICATE TESTS +# +my $test_total = 1; +my $test_good = 0; +sub pred_test { + my ($pred, $eres, $eerr) = @_; + my ($cut, $res, $err, $fail); + + $test_total++; + if ($test != 0 && $test != $test_total - 1) { + return; + } + + eval { + ($cut, $res) = pred_exec($pred); + }; + $err = $@; + chomp($err); + + $res = !!$res; + $eres = !!$eres; + + $fail = ''; + if (defined $eres && $res != $eres) { + $fail = "result missmatch, expected $eres returned $res"; + } + if (defined $eerr && $err eq '') { + $fail = "error missmatch, expected '$eerr' returned success"; + } elsif (defined $eerr && $err !~ /$eerr/) { + $fail = "error missmatch, expected '$eerr' returned '$err'"; + } elsif (!defined $eerr && $err ne '') { + $fail = "error missmatch, expected success returned '$err'"; + } + + if ($fail eq '') { + $test_good++; + } else { + print "$pred: $test_total: FAIL: $fail\n"; + } + #print "TEST<$pred> eres<$eres> eerr<$eerr> res<$res> err<$err>\n"; +} +if ($test >= 0) { + $arch = 'MYARCH'; + $flavour = 'MYFLAVOUR'; + %values = ( 'ENABLED' => 'y', 'DISABLED' => 'n' ); + + # Errors. + my $eunkn = 'unknown predicate'; + my $epred = 'malformed'; + my $eclose = 'missing close parenthesis'; + my $eopen = 'missing open parenthesis'; + my $ebinary = 'malformed binary operator'; + + # Basic predicate tests. + print "TEST: $test_total: basic predicate tests ...\n"; + + pred_test('nosuchcommand', undef, $eunkn); + pred_test('arch', undef, $epred); + pred_test('arch MYARCH', 1, undef); + pred_test('arch MYARCH NOTMYARCH', 1, undef); + pred_test('arch NOTMYARCH MYARCH', 1, undef); + pred_test('arch NOTMYARCH NOTMYARCH MYARCH', 1, undef); + pred_test('arch NOTMYARCH MYARCH NOTMYARCH', 1, undef); + pred_test('arch NOTMYARCH', 0, undef); + + pred_test('flavour', undef, $epred); + pred_test('flavour MYFLAVOUR', 1, undef); + pred_test('flavour NOTMYFLAVOUR MYFLAVOUR', 1, undef); + pred_test('flavour NOTMYFLAVOUR NOTMYFLAVOUR MYFLAVOUR', 1, undef); + pred_test('flavour NOTMYFLAVOUR MYFLAVOUR NOTMYFLAVOUR', 1, undef); + pred_test('flavour NOTMYFLAVOUR', 0, undef); + + pred_test('value', undef, $epred); + pred_test('value ENABLED', undef, $epred); + pred_test('value ENABLED ENABLED ENABLED', undef, $epred); + pred_test('value ENABLED y', 1, undef); + pred_test('value ENABLED n', 0, undef); + pred_test('value DISABLED n', 1, undef); + pred_test('value DISABLED y', 0, undef); + + pred_test('exists', undef, $epred); + pred_test('exists ENABLED ENABLED', undef, $epred); + pred_test('exists ENABLED', 1, undef); + pred_test('exists DISABLED', 1, undef); + pred_test('exists MISSING', 0, undef); + + print "TEST: $test_total: inversion tests ...\n"; + pred_test('!exists ENABLED', 0, undef); + pred_test('!exists MISSING', 1, undef); + pred_test('!!exists ENABLED', 1, undef); + pred_test('!!exists MISSING', 0, undef); + pred_test('!!!exists ENABLED', 0, undef); + pred_test('!!!exists MISSING', 1, undef); + + print "TEST: $test_total: parentheses tests ...\n"; + pred_test('(exists ENABLED)', 1, undef); + pred_test('((exists ENABLED))', 1, undef); + pred_test('(((exists ENABLED)))', 1, undef); + pred_test('(exists MISSING)', 0, undef); + pred_test('((exists MISSING))', 0, undef); + pred_test('(((exists MISSING)))', 0, undef); + + pred_test('(!exists ENABLED)', 0, undef); + pred_test('((!exists ENABLED))', 0, undef); + pred_test('(((!exists ENABLED)))', 0, undef); + pred_test('(!exists MISSING)', 1, undef); + pred_test('((!exists MISSING))', 1, undef); + pred_test('(((!exists MISSING)))', 1, undef); + + pred_test('((!(exists ENABLED)))', 0, undef); + pred_test('((!(exists MISSING)))', 1, undef); + pred_test('(!((exists ENABLED)))', 0, undef); + pred_test('(!((exists MISSING)))', 1, undef); + pred_test('!(((exists ENABLED)))', 0, undef); + pred_test('!(((exists MISSING)))', 1, undef); + pred_test('!((!(exists ENABLED)))', 1, undef); + pred_test('!((!(exists MISSING)))', 0, undef); + pred_test('!(!(!(exists ENABLED)))', 0, undef); + pred_test('!(!(!(exists MISSING)))', 1, undef); + + pred_test('(', undef, $eclose); + pred_test('()(', undef, $eclose); + pred_test('(())(', undef, $eclose); + pred_test('((()))(', undef, $eclose); + pred_test('(()', undef, $eclose); + pred_test('((())', undef, $eclose); + pred_test('(((()))', undef, $eclose); + pred_test('(()()', undef, $eclose); + pred_test('((())()', undef, $eclose); + + pred_test(')', undef, $eopen); + pred_test('())', undef, $eopen); + pred_test('(()))', undef, $eopen); + pred_test('((())))', undef, $eopen); + + print "TEST: $test_total: binary and tests ...\n"; + + pred_test('exists ENABLED &', undef, $ebinary); + pred_test('& exists ENABLED', undef, $ebinary); + pred_test('exists ENABLED & & exists ENABLED', undef, $ebinary); + + pred_test('exists MISSING & exists MISSING', 0, undef); + pred_test('exists MISSING & exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists MISSING', 0, undef); + pred_test('exists ENABLED & exists ENABLED', 1, undef); + + pred_test('exists MISSING & exists MISSING & exists MISSING', 0, undef); + pred_test('exists MISSING & exists MISSING & exists ENABLED', 0, undef); + pred_test('exists MISSING & exists ENABLED & exists MISSING', 0, undef); + pred_test('exists MISSING & exists ENABLED & exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists MISSING & exists MISSING', 0, undef); + pred_test('exists ENABLED & exists MISSING & exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists ENABLED & exists MISSING', 0, undef); + pred_test('exists ENABLED & exists ENABLED & exists ENABLED', 1, undef); + + print "TEST: $test_total: binary or tests ...\n"; + + pred_test('exists ENABLED |', undef, $ebinary); + pred_test('| exists ENABLED', undef, $ebinary); + pred_test('exists ENABLED | | exists ENABLED', undef, $ebinary); + + pred_test('exists MISSING | exists MISSING', 0, undef); + pred_test('exists MISSING | exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists MISSING', 1, undef); + pred_test('exists ENABLED | exists ENABLED', 1, undef); + + pred_test('exists MISSING | exists MISSING | exists MISSING', 0, undef); + pred_test('exists MISSING | exists MISSING | exists ENABLED', 1, undef); + pred_test('exists MISSING | exists ENABLED | exists MISSING', 1, undef); + pred_test('exists MISSING | exists ENABLED | exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists MISSING | exists MISSING', 1, undef); + pred_test('exists ENABLED | exists MISSING | exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists ENABLED | exists MISSING', 1, undef); + pred_test('exists ENABLED | exists ENABLED | exists ENABLED', 1, undef); + + print "TEST: $test_total: binary or/and combination tests ...\n"; + + pred_test('exists MISSING | exists MISSING & exists MISSING', 0, undef); + pred_test('exists MISSING | exists MISSING & exists ENABLED', 0, undef); + pred_test('exists MISSING | exists ENABLED & exists MISSING', 0, undef); + pred_test('exists MISSING | exists ENABLED & exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists MISSING & exists MISSING', 1, undef); + pred_test('exists ENABLED | exists MISSING & exists ENABLED', 1, undef); + pred_test('exists ENABLED | exists ENABLED & exists MISSING', 1, undef); + pred_test('exists ENABLED | exists ENABLED & exists ENABLED', 1, undef); + + print "TEST: $test_total: binary and/or combination tests ...\n"; + + pred_test('exists MISSING & exists MISSING | exists MISSING', 0, undef); + pred_test('exists MISSING & exists MISSING | exists ENABLED', 0, undef); + pred_test('exists MISSING & exists ENABLED | exists MISSING', 0, undef); + pred_test('exists MISSING & exists ENABLED | exists ENABLED', 0, undef); + pred_test('exists ENABLED & exists MISSING | exists MISSING', 0, undef); + pred_test('exists ENABLED & exists MISSING | exists ENABLED', 1, undef); + pred_test('exists ENABLED & exists ENABLED | exists MISSING', 1, undef); + pred_test('exists ENABLED & exists ENABLED | exists ENABLED', 1, undef); + + print "TEST: $test_total: cut tests ...\n"; + pred_test('(arch MYARCH & exists MISSING) | exists ENABLED', 1, undef); + pred_test('(arch MYARCH &/ exists MISSING) | exists ENABLED', 0, undef); + + $test_total--; + print "TEST: $test_good/$test_total succeeded\n"; + + exit $exit_val; +} + +# 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); + +# FATAL: Check if we have an enforcement list. +my $pass = 0; +my $total = 0; +my $line = ''; +print "$P: $checks: loading checks\n"; +open(CHECKS, "<$checks") || die "$P: $checks: open failed -- $! -- aborting\n"; +while () { + /^#/ && next; + chomp; + + $line .= $_; + if ($line =~ /\\$/) { + chop($line); + $line .= " "; + next; + } + $line =~ /^\s*$/ && next; + + #print "CHECK: <$line>\n"; + $total++; + my (undef, $result) = pred_exec($line); + if (!$result) { + print "$P: FAIL: $line\n"; + $exit_val = $fail_exit; + } else { + $pass++; + } + + $line = ''; +} +close(CHECKS); + +print "$P: $pass/$total checks passed -- exit $exit_val\n"; +exit $exit_val; --- linux-lts-raring-3.8.0.orig/debian/scripts/abi-check +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/sub-flavour +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/control-create +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/link-headers +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/module-inclusion +++ linux-lts-raring-3.8.0/debian/scripts/module-inclusion @@ -0,0 +1,60 @@ +#!/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 \ +# debian/build/build-virtual-ALL debian/build/build-virtual \ +# debian.master/control.d/virtual.inclusion-list +master=0 +if [ "$1" = "--master" ]; then + master=1 + shift +fi + +ROOT=$1 +NROOT=$2 +ILIST=$3 + +# +# Prep a destination directory. +# +mkdir -p ${NROOT} + +# Copy over the framework... +if [ "$master" -eq 1 ]; then + (cd ${ROOT}; find . ! -name "*.ko" -type f) | \ + while read f + do + mkdir -p ${NROOT}/`dirname $f` + mv ${ROOT}/$f ${NROOT}/$f + done +fi + +cat ${ILIST} |while read i +do + # + # 'find' blurts a warning if it cannot find any ko files. + # + if echo "$i" | grep '\*' > /dev/null + then + (cd ${ROOT}; eval find "${i}" -name "*.ko") |while read f + do + mkdir -p ${NROOT}/`dirname $f` + mv ${ROOT}/$f ${NROOT}/$f + done + else + if [ -f "${ROOT}/$i" ] + then + mkdir -p ${NROOT}/`dirname $i` + mv ${ROOT}/$i ${NROOT}/$i + else + echo Warning: Could not find ${ROOT}/$i + fi + fi + +done + +exit 0 --- linux-lts-raring-3.8.0.orig/debian/scripts/misc/get-firmware +++ linux-lts-raring-3.8.0/debian/scripts/misc/get-firmware @@ -0,0 +1,59 @@ +#!/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` + cp -v $f $CDIR/firmware/`dirname $f` +done --- linux-lts-raring-3.8.0.orig/debian/scripts/misc/insert-mainline-changes +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/misc/git-ubuntu-log +++ linux-lts-raring-3.8.0/debian/scripts/misc/git-ubuntu-log @@ -0,0 +1,232 @@ +#!/usr/bin/perl -w + +use strict; +use Text::Wrap; + +my $kernel_auth = "Upstream Kernel Changes"; + +my (%map, @reverts); +my $pstate = 1; +my $no_kern_log = 0; +my $print_shas = 0; +my $first_print = 1; + +while (@ARGV) { + my $opt = $ARGV[0]; + shift; + if ($opt eq "--no-kern-log") { + $no_kern_log = 1; + } elsif ($opt eq "--print-shas") { + $print_shas = 1; + } else { + print STDERR "Unknown options: $opt\n"; + exit(1); + } +} + +sub check_reverts($) { + my ($entry) = @_; + my ($check); + + foreach $check (reverse @reverts) { + my $desc = "Revert \"" . $entry->{'desc'} . "\""; + if ($check->{'desc'} eq $desc) { + @reverts = grep($_->{'desc'} ne $desc, @reverts); + return 1; + } + } + + return 0; +} + +sub add_entry($) { + my ($entry) = @_; + my $key = $entry->{'author'}; + + # store description in array, in email->{desc list} map + if (exists $map{$key}) { + # grab ref + my $obj = $map{$key}; + + # add desc to array + push(@$obj, $entry); + } else { + # create new array, containing 1 item + my @arr = ($entry); + + # store ref to array + $map{$key} = \@arr; + } +} + +sub shortlog_entry($$$$$) { + my ($name, $desc, $bug, $cve, $commit) = @_; + my $entry; + + $desc =~ s#/pub/scm/linux/kernel/git/#/.../#g; + $desc =~ s#\[PATCH\] ##g; + + $desc =~ s#^\s*##g; + $desc =~ s# *UBUNTU: ##g; + + $entry->{'desc'} = $desc; + if ($bug ne '') { + $entry->{'bugno'} = $bug; + } + $entry->{'cve'} = $cve; + $entry->{'commit'} = $commit; + $entry->{'author'} = $name; + + if ($desc =~ /^Revert "/) { + push(@reverts, $entry); + return; + } + + return if check_reverts($entry); + + add_entry($entry); +} + +# sort comparison function +sub by_name($$) { + my ($a, $b) = @_; + + uc($a) cmp uc($b); +} + +sub shortlog_output { + my ($obj, $key, $entry); + + foreach $key (sort by_name keys %map) { + next if $key eq $kernel_auth and $no_kern_log; + + print "\n" unless $first_print; + $first_print = 0; + + # output author + printf " [ %s ]\n\n", $key; + + # output author's 1-line summaries + $obj = $map{$key}; + foreach $entry (reverse @$obj) { + print wrap(" * ", " ", $entry->{'desc'}) . "\n"; + # For non upstream changes, add other info. + if ($key ne $kernel_auth) { + if ($print_shas) { + print " - GIT-SHA " . $entry->{'commit'} . + "\n"; + } + } + if (defined($entry->{'bugno'})) { + print " - LP: #" . $entry->{'bugno'} . "\n"; + } + if (defined($entry->{'cve'})) { + print " - " . $entry->{'cve'} . "\n"; + } + } + } +} + +sub changelog_input { + my ($author, $desc, $commit, $entry, $cve); + + while () { + # get commit + if ($pstate == 1) { + next unless /^commit (.*)/; + + $commit = $1; + + $pstate++; + } + + # get author and email + elsif ($pstate == 2) { + my ($email); + + next unless /^[Aa]uthor:?\s*(.*?)\s*<(.*)>/; + + $author = $1; + $email = $2; + $desc = undef; + $cve = undef; + + # cset author fixups + if (!$author) { + $author = $email; + } + $pstate++; + } + + # skip to blank line + elsif ($pstate == 3) { + next unless /^\s*$/; + $pstate++; + } + + # skip to non-blank line + elsif ($pstate == 4) { + next unless /^\s*?(.*)/; + my $ignore = 0; + my $do_ignore = 0; + my $bug = undef; + my %bugz = (); + my $k; + + # skip lines that are obviously not + # a 1-line cset description + next if /^\s*From: /; + + chomp; + $desc = $1; + + if ($desc =~ /^ *(Revert "|)UBUNTU:/) { + $do_ignore = 1; + } else { + $do_ignore = 0; + $author = $kernel_auth; + $ignore = 1 if $desc =~ /Merge /; + } + while () { + $ignore = 1 if ($do_ignore && /^ *Ignore: yes/i); + if (/^ *Bug: *(#|)([0-9#,\s]*)\s*$/i) { + foreach $k (split('(,|\s)\s*(#|)', $2)) { + $bugz{$k} = 1 if (($k ne '') and ($k =~ /[0-9]+/)); + } + } + elsif (/^ *BugLink: *http.*:\/\/.*\/([0-9]+)/i) { + $bugz{$1} = 1; + } + elsif (/^ *(CVE-.*)/) { + $cve = $1 + } + last if /^commit /; + } + + $bug = join(", #", sort keys(%bugz)); + if (!$ignore) { + &shortlog_entry($author, $desc, $bug, + $cve, $commit, 0); + } + + $pstate = 1; + if ($_ && /^commit (.*)/) { + $commit = $1; + $pstate++; + } + } + + else { + die "invalid parse state $pstate"; + } + } + + foreach $entry (@reverts) { + add_entry($entry); + } +} + +&changelog_input; +&shortlog_output; + +exit(0); --- linux-lts-raring-3.8.0.orig/debian/scripts/misc/find-obsolete-firmware +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/misc/getabis +++ linux-lts-raring-3.8.0/debian/scripts/misc/getabis @@ -0,0 +1,126 @@ +#!/bin/bash + +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 | awk -F. '{print $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 + (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" | awk ' + ($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 + +compilers=`cat $abidir/*/*.compiler | sort -u | wc -l` +if [ "$compilers" != 1 ]; then + echo "WARNING: inconsistant compiler versions detected" 1>&2 +fi + +sort < $fwinfo | uniq > fwinfo.tmp +mv fwinfo.tmp $fwinfo + +rmdir $tmpdir --- linux-lts-raring-3.8.0.orig/debian/scripts/misc/insert-ubuntu-changes +++ linux-lts-raring-3.8.0/debian/scripts/misc/insert-ubuntu-changes @@ -0,0 +1,58 @@ +#!/usr/bin/perl + +if ($#ARGV != 2) { + die "Usage: $0 \n"; +} +my ($changelog, $end, $start) = @ARGV; + +$end =~ s/.*\.//; +$start =~ s/.*\.//; + +my @changes = (); +my $output = 0; +open(CHG, ") { + if (/^\S+\s+\((.*\.(\d+))\)/) { + if ($2 <= $end) { + last; + } + if ($2 == $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-lts-raring-3.8.0.orig/debian/scripts/misc/fw-to-ihex.sh +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/misc/splitconfig.pl +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/misc/retag +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/misc/insert-changes.pl +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/scripts/misc/kernelconfig +++ linux-lts-raring-3.8.0/debian/scripts/misc/kernelconfig @@ -0,0 +1,172 @@ +#!/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" +sharedconfdir="$kerneldir/debian.master/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) kernarch="powerpc" ;; + amd64) kernarch="x86_64" ;; + lpia) kernarch="x86" ;; + sparc) kernarch="sparc64" ;; + armel|armhf) kernarch="arm" ;; + *) 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* ) + 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" "$sharedconfdir" "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-lts-raring-3.8.0.orig/debian/docs/README.inclusion-list +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/control-scripts/postinst +++ linux-lts-raring-3.8.0/debian/control-scripts/postinst @@ -0,0 +1,1095 @@ +#! /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"; + } +} + + + +# 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'}; + + 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 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 { + if (! -e "initrd.img") { + 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 { + if (! -e "$kimage") { + 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-lts-raring-3.8.0.orig/debian/control-scripts/headers-postinst +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/control-scripts/prerm +++ linux-lts-raring-3.8.0/debian/control-scripts/prerm @@ -0,0 +1,312 @@ +#! /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"; + } +} + + +$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-lts-raring-3.8.0.orig/debian/control-scripts/postrm +++ linux-lts-raring-3.8.0/debian/control-scripts/postrm @@ -0,0 +1,361 @@ +#! /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"; + } +} + +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-lts-raring-3.8.0.orig/debian/control-scripts/preinst +++ linux-lts-raring-3.8.0/debian/control-scripts/preinst @@ -0,0 +1,315 @@ +#! /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 + } +} + +$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-lts-raring-3.8.0.orig/debian/tests/control +++ linux-lts-raring-3.8.0/debian/tests/control @@ -0,0 +1,3 @@ +Tests: rebuild +Depends: +Restrictions: build-needed --- linux-lts-raring-3.8.0.orig/debian/tests/rebuild +++ linux-lts-raring-3.8.0/debian/tests/rebuild @@ -0,0 +1 @@ +#!/bin/true --- linux-lts-raring-3.8.0.orig/debian/tests-build/README +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/tests-build/check-aliases +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian/rules.d/2-binary-arch.mk +++ linux-lts-raring-3.8.0/debian/rules.d/2-binary-arch.mk @@ -0,0 +1,537 @@ +# 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 + +$(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: $@ + +# Do the actual build, including image and modules +$(stampdir)/stamp-build-%: target_flavour = $* +$(stampdir)/stamp-build-%: bldimg = $(call custom_override,build_image,$*) +$(stampdir)/stamp-build-%: dtb_target = $(dtb_files_$*) +$(stampdir)/stamp-build-%: $(stampdir)/stamp-prepare-% + @echo Debug: $@ build_image $(build_image) bldimg $(bldimg) + $(build_cd) $(kmake) $(build_O) $(conc_level) $(bldimg) modules $(dtb_target) + @touch $@ + +# 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-%: 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-%: dtb_files = $(dtb_files_$*) +install-%: checks-% + @echo Debug: $@ kernel_file $(kernel_file) kernfile $(kernfile) install_file $(install_file) instfile $(instfile) + dh_testdir + dh_testroot + dh_clean -k -p$(bin_pkg_name)-$* + dh_clean -k -p$(hdrs_pkg_name)-$* +ifneq ($(skipdbg),true) + dh_clean -k -p$(dbg_pkg_name)-$* +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 ($(arch),amd64) +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 | awk '($$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 +endif + + install -m644 $(builddir)/build-$*/.config \ + $(pkgdir)/boot/config-$(abi_release)-$* + install -m644 $(abidir)/$* \ + $(pkgdir)/boot/abi-$(abi_release)-$* + install -m600 $(builddir)/build-$*/System.map \ + $(pkgdir)/boot/System.map-$(abi_release)-$* + if [ "$(dtb_files)" ]; then \ + install -d $(pkgdir)/lib/firmware/$(abi_release)-$*/device-tree; \ + for dtb_file in $(dtb_files); do \ + install -m644 $(builddir)/build-$*/arch/$(build_arch)/boot/dts/$$dtb_file \ + $(pkgdir)/lib/firmware/$(abi_release)-$*/device-tree/$$dtb_file; \ + 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 \ + INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(pkgdir)/ \ + INSTALL_FW_PATH=$(pkgdir)/lib/firmware/$(abi_release)-$* + +ifeq ($(do_extras_package),true) + # + # Remove all modules not in the inclusion list. + # + if [ -f $(DEBIAN)/control.d/$(target_flavour).inclusion-list ] ; then \ + 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 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 -f $(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/$$script > $(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 \ + 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; \ + 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" + # powerpc seems to need some .o files for external module linking. Add them in. +ifeq ($(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 -s /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)-$*/_ + +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 + dh_clean -k -plinux-libc-dev + + 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-%: 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-%: 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) + $(lockme) dh_gencontrol -p$(pkgimg) + dh_md5sums -p$(pkgimg) + dh_builddeb -p$(pkgimg) -- -Zbzip2 -z9 + +ifeq ($(do_extras_package),true) + 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); \ + $(lockme) dh_gencontrol -p$(pkgimg_ex); \ + dh_md5sums -p$(pkgimg_ex); \ + dh_builddeb -p$(pkgimg_ex) -- -Zbzip2 -z9; \ + fi +endif + + dh_installchangelogs -p$(pkghdr) + dh_installdocs -p$(pkghdr) + dh_compress -p$(pkghdr) + dh_fixperms -p$(pkghdr) + dh_shlibdeps -p$(pkghdr) + 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; \ + 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 +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_tools),true) + rm -rf $(builddirpa) + install -d $(builddirpa) + for i in *; do ln -s $(CURDIR)/$$i $(builddirpa); done + rm $(builddirpa)/tools + rsync -a tools/ $(builddirpa)/tools/ +endif + touch $@ + +$(stampdir)/stamp-build-perarch: $(stampdir)/stamp-prepare-perarch + @echo Debug: $@ +ifeq ($(do_tools),true) +ifeq ($(do_tools_perf),true) + cd $(builddirpa)/tools/perf && \ + make prefix=/usr HAVE_CPLUS_DEMANGLE=1 CROSS_COMPILE=$(CROSS_COMPILE) NO_LIBPYTHON=1 NO_LIBPERL=1 +endif + if [ "$(arch)" = "amd64" ] || [ "$(arch)" = "i386" ]; then \ + 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); \ + if [ "$(do_hyperv)" = "true" ]; then \ + cd $(builddirpa)/tools/hv && make CROSS_COMPILE=$(CROSS_COMPILE); \ + fi; \ + fi +endif + @touch $@ + +install-perarch: toolspkgdir = $(CURDIR)/debian/$(tools_pkg_name) +install-perarch: $(stampdir)/stamp-build-perarch + @echo Debug: $@ + # Add the tools. +ifeq ($(do_tools),true) + install -d $(toolspkgdir)/usr/bin +ifeq ($(do_tools_perf),true) + install -s -m755 $(builddirpa)/tools/perf/perf \ + $(toolspkgdir)/usr/bin/perf_$(abi_release) +endif + if [ "$(arch)" = "amd64" ] || [ "$(arch)" = "i386" ]; then \ + install -s -m755 $(builddirpa)/tools/power/x86/x86_energy_perf_policy/x86_energy_perf_policy \ + $(toolspkgdir)/usr/bin/x86_energy_perf_policy_$(abi_release); \ + install -s -m755 $(builddirpa)/tools/power/x86/turbostat/turbostat \ + $(toolspkgdir)/usr/bin/turbostat_$(abi_release); \ + if [ "$(do_hyperv)" = "true" ]; then \ + install -d $(toolspkgdir)/usr/sbin; \ + install -s -m755 $(builddirpa)/tools/hv/hv_kvp_daemon \ + $(toolspkgdir)/usr/sbin/hv_kvp_daemon_$(abi_release); \ + fi; \ + fi +endif + +binary-perarch: toolspkg = $(tools_pkg_name) +binary-perarch: install-perarch + @echo Debug: $@ +ifeq ($(do_tools),true) + dh_installchangelogs -p$(toolspkg) + dh_installdocs -p$(toolspkg) + dh_compress -p$(toolspkg) + dh_fixperms -p$(toolspkg) + dh_shlibdeps -p$(toolspkg) + dh_installdeb -p$(toolspkg) + $(lockme) dh_gencontrol -p$(toolspkg) + dh_md5sums -p$(toolspkg) + dh_builddeb -p$(toolspkg) +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 ($(arch),amd64) +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 +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-lts-raring-3.8.0.orig/debian/rules.d/1-maintainer.mk +++ linux-lts-raring-3.8.0/debian/rules.d/1-maintainer.mk @@ -0,0 +1,120 @@ +# 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 + +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 "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 "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' | \ + awk '/UBUNTU: '".*Ubuntu-$(prev_fullver)"'$$/ { print $$1; exit }'); \ + git log "$$baseCommit"..HEAD | \ + perl -w -f $(DROOT)/scripts/misc/git-ubuntu-log $(ubuntu_log_opts) + +insertchanges: + @perl -w -f $(DROOT)/scripts/misc/insert-changes.pl $(DROOT) $(DEBIAN) + +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) | awk -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=low\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-lts-raring-3.8.0.orig/debian/rules.d/0-common-vars.mk +++ linux-lts-raring-3.8.0/debian/rules.d/0-common-vars.mk @@ -0,0 +1,230 @@ +# +# 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') + +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 +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 -e 's/\..*//')$(abi_suffix) +prev_abinum := $(shell echo $(prev_revision) | sed -e 's/\..*//')$(abi_suffix) +abi_release := $(release)-$(abinum) + +uploadnum := $(shell echo $(revision) | sed -e 's/.*\.//') +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=linux-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=linux-tools-$(abi_release) +tools_common_pkg_name=$(src_pkg_name)-tools-common + +# The general flavour specific image package. +do_flavour_image_package=true + +# The general flavour specific header package. +do_flavour_header_package=true + +# 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= +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) + +# 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-lts-raring-3.8.0.orig/debian/rules.d/3-binary-indep.mk +++ linux-lts-raring-3.8.0/debian/rules.d/3-binary-indep.mk @@ -0,0 +1,154 @@ +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; \ + mv $(docdir)/$(doc_pkg_name)-tmp/Documentation/DocBook \ + $(docdir)/html; \ + rm -rf $(docdir)/$(doc_pkg_name)-tmp; \ + fi +endif + # Copy the rest + cp -a Documentation/* $(docdir) + rm -rf $(docdir)/DocBook + find $(docdir) -name .gitignore | xargs rm -f +endif + +srcpkg = $(src_pkg_name)-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 -s $(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: install-source $(stampdir)/stamp-build-perarch + @echo Debug: $@ +ifeq ($(do_tools_common),true) + + install -d $(toolsbin) + install -d $(toolsman)/man1 + +ifeq ($(do_tools_perf),true) + install -m755 debian/tools/perf $(toolsbin)/perf +endif + if [ "$(arch)" = "amd64" ] || [ "$(arch)" = "i386" ]; then \ + install -m755 debian/tools/x86_energy_perf_policy $(toolsbin)/x86_energy_perf_policy; \ + install -m755 debian/tools/turbostat $(toolsbin)/turbostat; \ + if [ "$(do_hyperv)" = "true" ]; then \ + install -d $(toolssbin) ; \ + install -m755 debian/tools/generic $(toolssbin)/hv_kvp_daemon; \ + fi; \ + fi + + rm -rf $(builddir)/tools + install -d $(builddir)/tools + for i in *; do ln -s $(CURDIR)/$$i $(builddir)/tools/; done + rm $(builddir)/tools/tools + rsync -a tools/ $(builddir)/tools/tools/ + +ifeq ($(do_tools_perf),true) + cd $(builddir)/tools/tools/perf && make man + install -m644 $(builddir)/tools/tools/perf/Documentation/*.1 \ + $(toolsman)/man1 +endif + if [ "$(arch)" = "amd64" ] || [ "$(arch)" = "i386" ]; then \ + 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; \ + if [ "$(do_hyperv)" = "true" ]; then \ + install -m644 $(CURDIR)/tools/hv/*.8 $(toolsman)/man8; \ + fi; \ + fi +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: install-indep + @echo Debug: $@ + + dh_installchangelogs -i + dh_installdocs -i + dh_compress -i + dh_fixperms -i + dh_installdeb -i + $(lockme) dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i --- linux-lts-raring-3.8.0.orig/debian/rules.d/4-checks.mk +++ linux-lts-raring-3.8.0/debian/rules.d/4-checks.mk @@ -0,0 +1,27 @@ +# 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) + +checks-%: module-check-% abi-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)" "$*" "$(sharedconfdir)" "$(skipconfig)" + --- linux-lts-raring-3.8.0.orig/debian/rules.d/5-udebs.mk +++ linux-lts-raring-3.8.0/debian/rules.d/5-udebs.mk @@ -0,0 +1,44 @@ +# 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: debian/control + @echo Debug: $@ + dh_testdir + dh_testroot + + # unpack the kernels into a temporary directory + mkdir -p debian/d-i-${arch} + + imagelist=$$(cat $(builddir)/kernel-versions | grep ^${arch} | awk '{print $$4}') && \ + for i in $$imagelist; do \ + 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 $(CURDIR)/debian/build/no-modules + + touch ignore-dups + export SOURCEDIR=$(CURDIR)/debian/d-i-${arch} && \ + cd $(builddir) && \ + kernel-wedge install-files && \ + 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 --- linux-lts-raring-3.8.0.orig/init/Kconfig +++ linux-lts-raring-3.8.0/init/Kconfig @@ -79,6 +79,13 @@ Maximum of each of the number of arguments and environment variables passed to init from the kernel command line. +config INIT_PASS_ALL_PARAMS + bool "Pass all (known and unknown) kernel parameters to init" + default n + help + Pass all kernel command line parameters to init, this includes + those consumed by kernel modules. This is useful for upstart + based systems. If in doubt say N. config CROSS_COMPILE string "Cross-compiler tool prefix" @@ -214,6 +221,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-lts-raring-3.8.0.orig/init/version.c +++ linux-lts-raring-3.8.0/init/version.c @@ -42,7 +42,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-lts-raring-3.8.0.orig/init/main.c +++ linux-lts-raring-3.8.0/init/main.c @@ -113,6 +113,11 @@ */ #define MAX_INIT_ARGS CONFIG_INIT_ENV_ARG_LIMIT #define MAX_INIT_ENVS CONFIG_INIT_ENV_ARG_LIMIT +#ifdef CONFIG_INIT_PASS_ALL_PARAMS +#define INIT_PASS_FUNCTION pass_all_bootoptions +#else +#define INIT_PASS_FUNCTION pass_unknown_bootoptions +#endif extern void time_init(void); /* Default late time init is NULL. archs can override this later. */ @@ -200,7 +205,7 @@ static int __init quiet_kernel(char *str) { - console_loglevel = 4; + console_loglevel = 2; return 0; } @@ -227,7 +232,7 @@ early_param("loglevel", loglevel); /* Change NUL term back to "=", to make "param" the whole string. */ -static int __init repair_env_string(char *param, char *val, const char *unused) +static int __init repair_env_string(char *param, char *val, const char *unused, int known) { if (val) { /* param=val or param="val"? */ @@ -244,19 +249,20 @@ } /* - * Unknown boot options get handed to init, unless they look like - * unused parameters (modprobe will find them in /proc/cmdline). + * Select boot options to hand to init. If all is set hand off them all + * otherwise only hand off unused ones which do not apply to modules + * (modprobe will find them in /proc/cmdline). */ -static int __init unknown_bootoption(char *param, char *val, const char *unused) +static int __init pass_bootoption(char *param, char *val, const char *unused, int all) { - repair_env_string(param, val, unused); + repair_env_string(param, val, unused, all); /* Handle obsolete-style parameters */ - if (obsolete_checksetup(param)) + if (obsolete_checksetup(param) && !all) return 0; /* Unused module parameter. */ - if (strchr(param, '.') && (!val || strchr(param, '.') < val)) + if (!all && strchr(param, '.') && (!val || strchr(param, '.') < val)) return 0; if (panic_later) @@ -287,6 +293,16 @@ } return 0; } +static int __init pass_unknown_bootoptions(char *param, char *val, const char *unused, int known) +{ + if (known) + return 0; + return pass_bootoption(param, val, unused, 0); +} +static int __init pass_all_bootoptions(char *param, char *val, const char *unused, int known) +{ + return pass_bootoption(param, val, unused, 1); +} static int __init init_setup(char *str) { @@ -386,10 +402,13 @@ } /* Check for early params. */ -static int __init do_early_param(char *param, char *val, const char *unused) +static int __init do_early_param(char *param, char *val, const char *unused, int known) { const struct obs_kernel_param *p; + if (known) + return 0; + for (p = __setup_start; p < __setup_end; p++) { if ((p->early && parameq(param, p->str)) || (strcmp(param, "console") == 0 && @@ -511,7 +530,7 @@ parse_early_param(); parse_args("Booting kernel", static_command_line, __start___param, __stop___param - __start___param, - -1, -1, &unknown_bootoption); + -1, -1, &INIT_PASS_FUNCTION); jump_label_init(); --- linux-lts-raring-3.8.0.orig/init/noinitramfs.c +++ linux-lts-raring-3.8.0/init/noinitramfs.c @@ -22,6 +22,8 @@ #include #include +LIST_HEAD(populate_rootfs_domain); + /* * Create a simple rootfs that is similar to the default initramfs */ --- linux-lts-raring-3.8.0.orig/virt/kvm/kvm_main.c +++ linux-lts-raring-3.8.0/virt/kvm/kvm_main.c @@ -1476,21 +1476,38 @@ } int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc, - gpa_t gpa) + gpa_t gpa, unsigned long len) { struct kvm_memslots *slots = kvm_memslots(kvm); int offset = offset_in_page(gpa); - gfn_t gfn = gpa >> PAGE_SHIFT; + gfn_t start_gfn = gpa >> PAGE_SHIFT; + gfn_t end_gfn = (gpa + len - 1) >> PAGE_SHIFT; + gfn_t nr_pages_needed = end_gfn - start_gfn + 1; + gfn_t nr_pages_avail; ghc->gpa = gpa; ghc->generation = slots->generation; - ghc->memslot = gfn_to_memslot(kvm, gfn); - ghc->hva = gfn_to_hva_many(ghc->memslot, gfn, NULL); - if (!kvm_is_error_hva(ghc->hva)) + ghc->len = len; + ghc->memslot = gfn_to_memslot(kvm, start_gfn); + ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn, &nr_pages_avail); + if (!kvm_is_error_hva(ghc->hva) && nr_pages_avail >= nr_pages_needed) { ghc->hva += offset; - else - return -EFAULT; - + } else { + /* + * If the requested region crosses two memslots, we still + * verify that the entire region is valid here. + */ + while (start_gfn <= end_gfn) { + ghc->memslot = gfn_to_memslot(kvm, start_gfn); + ghc->hva = gfn_to_hva_many(ghc->memslot, start_gfn, + &nr_pages_avail); + if (kvm_is_error_hva(ghc->hva)) + return -EFAULT; + start_gfn += nr_pages_avail; + } + /* Use the slow path for cross page reads and writes. */ + ghc->memslot = NULL; + } return 0; } EXPORT_SYMBOL_GPL(kvm_gfn_to_hva_cache_init); @@ -1501,8 +1518,13 @@ struct kvm_memslots *slots = kvm_memslots(kvm); int r; + BUG_ON(len > ghc->len); + if (slots->generation != ghc->generation) - kvm_gfn_to_hva_cache_init(kvm, ghc, ghc->gpa); + kvm_gfn_to_hva_cache_init(kvm, ghc, ghc->gpa, ghc->len); + + if (unlikely(!ghc->memslot)) + return kvm_write_guest(kvm, ghc->gpa, data, len); if (kvm_is_error_hva(ghc->hva)) return -EFAULT; @@ -1522,8 +1544,13 @@ struct kvm_memslots *slots = kvm_memslots(kvm); int r; + BUG_ON(len > ghc->len); + if (slots->generation != ghc->generation) - kvm_gfn_to_hva_cache_init(kvm, ghc, ghc->gpa); + kvm_gfn_to_hva_cache_init(kvm, ghc, ghc->gpa, ghc->len); + + if (unlikely(!ghc->memslot)) + return kvm_read_guest(kvm, ghc->gpa, data, len); if (kvm_is_error_hva(ghc->hva)) return -EFAULT; --- linux-lts-raring-3.8.0.orig/virt/kvm/ioapic.c +++ linux-lts-raring-3.8.0/virt/kvm/ioapic.c @@ -73,9 +73,12 @@ u32 redir_index = (ioapic->ioregsel - 0x10) >> 1; u64 redir_content; - ASSERT(redir_index < IOAPIC_NUM_PINS); + if (redir_index < IOAPIC_NUM_PINS) + redir_content = + ioapic->redirtbl[redir_index].bits; + else + redir_content = ~0ULL; - redir_content = ioapic->redirtbl[redir_index].bits; result = (ioapic->ioregsel & 0x1) ? (redir_content >> 32) & 0xffffffff : redir_content & 0xffffffff; --- linux-lts-raring-3.8.0.orig/tools/usb/ffs-test.c +++ linux-lts-raring-3.8.0/tools/usb/ffs-test.c @@ -38,7 +38,7 @@ #include #include -#include "../../include/linux/usb/functionfs.h" +#include "../../include/uapi/linux/usb/functionfs.h" /******************** Little Endian Handling ********************************/ --- linux-lts-raring-3.8.0.orig/tools/power/x86/turbostat/turbostat.c +++ linux-lts-raring-3.8.0/tools/power/x86/turbostat/turbostat.c @@ -1397,6 +1397,10 @@ case 0x2D: /* SNB Xeon */ case 0x3A: /* IVB */ case 0x3E: /* IVB Xeon */ + case 0x3C: /* HSW */ + case 0x3F: /* HSW */ + case 0x45: /* HSW */ + case 0x46: /* HSW */ return 1; case 0x2E: /* Nehalem-EX Xeon - Beckton */ case 0x2F: /* Westmere-EX Xeon - Eagleton */ @@ -1488,6 +1492,10 @@ switch (model) { case 0x2A: case 0x3A: + case 0x3C: /* HSW */ + case 0x3F: /* HSW */ + case 0x45: /* HSW */ + case 0x46: /* HSW */ do_rapl = RAPL_PKG | RAPL_CORES | RAPL_GFX; break; case 0x2D: @@ -1724,6 +1732,10 @@ case 0x2D: case 0x3A: /* IVB */ case 0x3E: /* IVB Xeon */ + case 0x3C: /* HSW */ + case 0x3F: /* HSW */ + case 0x45: /* HSW */ + case 0x46: /* HSW */ return 1; } return 0; @@ -2248,7 +2260,7 @@ cmdline(argc, argv); if (verbose) - fprintf(stderr, "turbostat v3.0 November 23, 2012" + fprintf(stderr, "turbostat v3.1 January 8, 2013" " - Len Brown \n"); turbostat_init(); --- linux-lts-raring-3.8.0.orig/tools/power/x86/turbostat/Makefile +++ linux-lts-raring-3.8.0/tools/power/x86/turbostat/Makefile @@ -6,6 +6,7 @@ turbostat : turbostat.c CFLAGS += -Wall CFLAGS += -I../../../../arch/x86/include/uapi/ +CFLAGS += -I../../../../tools/perf/util/include %: %.c @mkdir -p $(BUILD_OUTPUT) --- linux-lts-raring-3.8.0.orig/tools/perf/Makefile +++ linux-lts-raring-3.8.0/tools/perf/Makefile @@ -276,13 +276,13 @@ $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) -t util/parse-events.l > $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c: util/parse-events.y - $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c + $(QUIET_BISON)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $(OUTPUT)util/parse-events-bison.c -p parse_events_ $(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c $(QUIET_FLEX)$(FLEX) --header-file=$(OUTPUT)util/pmu-flex.h -t util/pmu.l > $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c: util/pmu.y - $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c + $(QUIET_BISON)$(BISON) -v util/pmu.y -d -o $(OUTPUT)util/pmu-bison.c -p perf_pmu_ $(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c $(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c --- linux-lts-raring-3.8.0.orig/tools/perf/scripts/python/net_dropmonitor.py +++ linux-lts-raring-3.8.0/tools/perf/scripts/python/net_dropmonitor.py @@ -40,9 +40,9 @@ def get_sym(sloc): loc = int(sloc) - for i in kallsyms: - if (i['loc'] >= loc): - return (i['name'], i['loc']-loc) + for i in kallsyms[::-1]: + if loc >= i['loc']: + return (i['name'], loc - i['loc']) return (None, 0) def print_drop_table(): @@ -64,7 +64,7 @@ # called from perf, when it finds a correspoinding event def skb__kfree_skb(name, context, cpu, sec, nsec, pid, comm, - skbaddr, protocol, location): + skbaddr, location, protocol): slocation = str(location) try: drop_log[slocation] = drop_log[slocation] + 1 --- linux-lts-raring-3.8.0.orig/tools/perf/util/parse-events.y +++ linux-lts-raring-3.8.0/tools/perf/util/parse-events.y @@ -1,5 +1,4 @@ %pure-parser -%name-prefix "parse_events_" %parse-param {void *_data} %parse-param {void *scanner} %lex-param {void* scanner} --- linux-lts-raring-3.8.0.orig/tools/perf/util/pmu.y +++ linux-lts-raring-3.8.0/tools/perf/util/pmu.y @@ -1,5 +1,4 @@ -%name-prefix "perf_pmu_" %parse-param {struct list_head *format} %parse-param {char *name} --- linux-lts-raring-3.8.0.orig/tools/perf/ui/hist.c +++ linux-lts-raring-3.8.0/tools/perf/ui/hist.c @@ -463,11 +463,15 @@ if (!perf_hpp__format[i].cond) continue; + /* + * If there's no field_sep, we still need + * to display initial ' '. + */ if (!sep || !first) { ret = scnprintf(hpp->buf, hpp->size, "%s", sep ?: " "); advance_hpp(hpp, ret); + } else first = false; - } if (color && perf_hpp__format[i].color) ret = perf_hpp__format[i].color(hpp, he); --- linux-lts-raring-3.8.0.orig/tools/hv/Makefile +++ linux-lts-raring-3.8.0/tools/hv/Makefile @@ -0,0 +1,7 @@ +hv_kvp_daemon: hv_kvp_daemon.c + +clean: + rm -f hv_kvp_daemon + +install: + install hv_kvp_daemon /usr/sbin/ --- linux-lts-raring-3.8.0.orig/tools/hv/hv_kvp_daemon.8 +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/tools/hv/hv_kvp_daemon.c +++ linux-lts-raring-3.8.0/tools/hv/hv_kvp_daemon.c @@ -35,7 +35,7 @@ #include #include #include -#include +#include "../../include/linux/hyperv.h" #include #include #include @@ -1012,9 +1012,10 @@ if (sn_offset == 0) strcpy(sn_str, cidr_mask); - else + else { + strcat((char *)ip_buffer->sub_net, ";"); strcat(sn_str, cidr_mask); - strcat((char *)ip_buffer->sub_net, ";"); + } sn_offset += strlen(sn_str) + 1; } @@ -1423,7 +1424,9 @@ char *if_name; struct hv_kvp_ipaddr_value *kvp_ip_val; +#if 0 /* It's much easier to manage from upstart if we don't fork */ daemon(1, 0); +#endif openlog("KVP", 0, LOG_USER); syslog(LOG_INFO, "KVP starting; pid is:%d", getpid()); /* --- linux-lts-raring-3.8.0.orig/fs/Kconfig +++ linux-lts-raring-3.8.0/fs/Kconfig @@ -67,6 +67,7 @@ source "fs/autofs4/Kconfig" source "fs/fuse/Kconfig" +source "fs/overlayfs/Kconfig" config GENERIC_ACL bool --- linux-lts-raring-3.8.0.orig/fs/namespace.c +++ linux-lts-raring-3.8.0/fs/namespace.c @@ -36,6 +36,7 @@ static int mnt_group_start = 1; static struct list_head *mount_hashtable __read_mostly; +static struct list_head *mountpoint_hashtable __read_mostly; static struct kmem_cache *mnt_cache __read_mostly; static struct rw_semaphore namespace_sem; @@ -52,6 +53,7 @@ * tree or hash is modified or when a vfsmount structure is modified. */ DEFINE_BRLOCK(vfsmount_lock); +EXPORT_SYMBOL(vfsmount_lock); static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry) { @@ -605,6 +607,51 @@ } } +static struct mountpoint *new_mountpoint(struct dentry *dentry) +{ + struct list_head *chain = mountpoint_hashtable + hash(NULL, dentry); + struct mountpoint *mp; + + list_for_each_entry(mp, chain, m_hash) { + if (mp->m_dentry == dentry) { + /* might be worth a WARN_ON() */ + if (d_unlinked(dentry)) + return ERR_PTR(-ENOENT); + mp->m_count++; + return mp; + } + } + + mp = kmalloc(sizeof(struct mountpoint), GFP_KERNEL); + if (!mp) + return ERR_PTR(-ENOMEM); + + spin_lock(&dentry->d_lock); + if (d_unlinked(dentry)) { + spin_unlock(&dentry->d_lock); + kfree(mp); + return ERR_PTR(-ENOENT); + } + dentry->d_flags |= DCACHE_MOUNTED; + spin_unlock(&dentry->d_lock); + mp->m_dentry = dentry; + mp->m_count = 1; + list_add(&mp->m_hash, chain); + return mp; +} + +static void put_mountpoint(struct mountpoint *mp) +{ + if (!--mp->m_count) { + struct dentry *dentry = mp->m_dentry; + spin_lock(&dentry->d_lock); + dentry->d_flags &= ~DCACHE_MOUNTED; + spin_unlock(&dentry->d_lock); + list_del(&mp->m_hash); + kfree(mp); + } +} + static inline int check_mnt(struct mount *mnt) { return mnt->mnt_ns == current->nsproxy->mnt_ns; @@ -633,27 +680,6 @@ } /* - * Clear dentry's mounted state if it has no remaining mounts. - * vfsmount_lock must be held for write. - */ -static void dentry_reset_mounted(struct dentry *dentry) -{ - unsigned u; - - for (u = 0; u < HASH_SIZE; u++) { - struct mount *p; - - list_for_each_entry(p, &mount_hashtable[u], mnt_hash) { - if (p->mnt_mountpoint == dentry) - return; - } - } - spin_lock(&dentry->d_lock); - dentry->d_flags &= ~DCACHE_MOUNTED; - spin_unlock(&dentry->d_lock); -} - -/* * vfsmount lock must be held for write */ static void detach_mnt(struct mount *mnt, struct path *old_path) @@ -664,32 +690,35 @@ mnt->mnt_mountpoint = mnt->mnt.mnt_root; list_del_init(&mnt->mnt_child); list_del_init(&mnt->mnt_hash); - dentry_reset_mounted(old_path->dentry); + put_mountpoint(mnt->mnt_mp); + mnt->mnt_mp = NULL; } /* * vfsmount lock must be held for write */ -void mnt_set_mountpoint(struct mount *mnt, struct dentry *dentry, +void mnt_set_mountpoint(struct mount *mnt, + struct mountpoint *mp, struct mount *child_mnt) { + mp->m_count++; mnt_add_count(mnt, 1); /* essentially, that's mntget */ - child_mnt->mnt_mountpoint = dget(dentry); + child_mnt->mnt_mountpoint = dget(mp->m_dentry); child_mnt->mnt_parent = mnt; - spin_lock(&dentry->d_lock); - dentry->d_flags |= DCACHE_MOUNTED; - spin_unlock(&dentry->d_lock); + child_mnt->mnt_mp = mp; } /* * vfsmount lock must be held for write */ -static void attach_mnt(struct mount *mnt, struct path *path) +static void attach_mnt(struct mount *mnt, + struct mount *parent, + struct mountpoint *mp) { - mnt_set_mountpoint(real_mount(path->mnt), path->dentry, mnt); + mnt_set_mountpoint(parent, mp, mnt); list_add_tail(&mnt->mnt_hash, mount_hashtable + - hash(path->mnt, path->dentry)); - list_add_tail(&mnt->mnt_child, &real_mount(path->mnt)->mnt_mounts); + hash(&parent->mnt, mp->m_dentry)); + list_add_tail(&mnt->mnt_child, &parent->mnt_mounts); } /* @@ -798,6 +827,10 @@ } mnt->mnt.mnt_flags = old->mnt.mnt_flags & ~MNT_WRITE_HOLD; + /* Don't allow unprivileged users to change mount flags */ + if ((flag & CL_UNPRIVILEGED) && (mnt->mnt.mnt_flags & MNT_READONLY)) + mnt->mnt.mnt_flags |= MNT_LOCK_READONLY; + atomic_inc(&sb->s_active); mnt->mnt.mnt_sb = sb; mnt->mnt.mnt_root = dget(root); @@ -1138,7 +1171,8 @@ list_del_init(&p->mnt_child); if (mnt_has_parent(p)) { p->mnt_parent->mnt_ghosts++; - dentry_reset_mounted(p->mnt_mountpoint); + put_mountpoint(p->mnt_mp); + p->mnt_mp = NULL; } change_mnt_propagation(p, MS_PRIVATE); } @@ -1238,6 +1272,14 @@ } /* + * Is the caller allowed to modify his namespace? + */ +static inline bool may_mount(void) +{ + return ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN); +} + +/* * Now umount can handle mount points as well as block devices. * This is important for filesystems which use unnamed block devices. * @@ -1255,6 +1297,9 @@ if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW)) return -EINVAL; + if (!may_mount()) + return -EPERM; + if (!(flags & UMOUNT_NOFOLLOW)) lookup_flags |= LOOKUP_FOLLOW; @@ -1268,10 +1313,6 @@ if (!check_mnt(mnt)) goto dput_and_out; - retval = -EPERM; - if (!ns_capable(mnt->mnt_ns->user_ns, CAP_SYS_ADMIN)) - goto dput_and_out; - retval = do_umount(mnt, flags); dput_and_out: /* we mustn't call path_put() as that would clear mnt_expiry_mark */ @@ -1293,24 +1334,6 @@ #endif -static int mount_is_safe(struct path *path) -{ - if (ns_capable(real_mount(path->mnt)->mnt_ns->user_ns, CAP_SYS_ADMIN)) - return 0; - return -EPERM; -#ifdef notyet - if (S_ISLNK(path->dentry->d_inode->i_mode)) - return -EPERM; - if (path->dentry->d_inode->i_mode & S_ISVTX) { - if (current_uid() != path->dentry->d_inode->i_uid) - return -EPERM; - } - if (inode_permission(path->dentry->d_inode, MAY_WRITE)) - return -EPERM; - return 0; -#endif -} - static bool mnt_ns_loop(struct path *path) { /* Could bind mounting the mount namespace inode cause a @@ -1334,8 +1357,7 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry, int flag) { - struct mount *res, *p, *q, *r; - struct path path; + struct mount *res, *p, *q, *r, *parent; if (!(flag & CL_COPY_ALL) && IS_MNT_UNBINDABLE(mnt)) return ERR_PTR(-EINVAL); @@ -1362,14 +1384,13 @@ q = q->mnt_parent; } p = s; - path.mnt = &q->mnt; - path.dentry = p->mnt_mountpoint; + parent = q; q = clone_mnt(p, p->mnt.mnt_root, flag); if (IS_ERR(q)) goto out; br_write_lock(&vfsmount_lock); list_add_tail(&q->mnt_list, &res->mnt_list); - attach_mnt(q, &path); + attach_mnt(q, parent, p->mnt_mp); br_write_unlock(&vfsmount_lock); } } @@ -1410,6 +1431,24 @@ release_mounts(&umount_list); } +struct vfsmount *clone_private_mount(struct path *path) +{ + struct mount *old_mnt = real_mount(path->mnt); + struct mount *new_mnt; + + if (IS_MNT_UNBINDABLE(old_mnt)) + return ERR_PTR(-EINVAL); + + down_read(&namespace_sem); + new_mnt = clone_mnt(old_mnt, path->dentry, CL_PRIVATE); + up_read(&namespace_sem); + if (!new_mnt) + return ERR_PTR(-ENOMEM); + + return &new_mnt->mnt; +} +EXPORT_SYMBOL_GPL(clone_private_mount); + int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, struct vfsmount *root) { @@ -1424,6 +1463,7 @@ } return 0; } +EXPORT_SYMBOL(iterate_mounts); static void cleanup_group_ids(struct mount *mnt, struct mount *end) { @@ -1516,11 +1556,11 @@ * in allocations. */ static int attach_recursive_mnt(struct mount *source_mnt, - struct path *path, struct path *parent_path) + struct mount *dest_mnt, + struct mountpoint *dest_mp, + struct path *parent_path) { LIST_HEAD(tree_list); - struct mount *dest_mnt = real_mount(path->mnt); - struct dentry *dest_dentry = path->dentry; struct mount *child, *p; int err; @@ -1529,7 +1569,7 @@ if (err) goto out; } - err = propagate_mnt(dest_mnt, dest_dentry, source_mnt, &tree_list); + err = propagate_mnt(dest_mnt, dest_mp, source_mnt, &tree_list); if (err) goto out_cleanup_ids; @@ -1541,10 +1581,10 @@ } if (parent_path) { detach_mnt(source_mnt, parent_path); - attach_mnt(source_mnt, path); + attach_mnt(source_mnt, dest_mnt, dest_mp); touch_mnt_namespace(source_mnt->mnt_ns); } else { - mnt_set_mountpoint(dest_mnt, dest_dentry, source_mnt); + mnt_set_mountpoint(dest_mnt, dest_mp, source_mnt); commit_tree(source_mnt); } @@ -1563,46 +1603,53 @@ return err; } -static int lock_mount(struct path *path) +static struct mountpoint *lock_mount(struct path *path) { struct vfsmount *mnt; + struct dentry *dentry = path->dentry; retry: - mutex_lock(&path->dentry->d_inode->i_mutex); - if (unlikely(cant_mount(path->dentry))) { - mutex_unlock(&path->dentry->d_inode->i_mutex); - return -ENOENT; + mutex_lock(&dentry->d_inode->i_mutex); + if (unlikely(cant_mount(dentry))) { + mutex_unlock(&dentry->d_inode->i_mutex); + return ERR_PTR(-ENOENT); } down_write(&namespace_sem); mnt = lookup_mnt(path); - if (likely(!mnt)) - return 0; + if (likely(!mnt)) { + struct mountpoint *mp = new_mountpoint(dentry); + if (IS_ERR(mp)) { + up_write(&namespace_sem); + mutex_unlock(&dentry->d_inode->i_mutex); + return mp; + } + return mp; + } up_write(&namespace_sem); mutex_unlock(&path->dentry->d_inode->i_mutex); path_put(path); path->mnt = mnt; - path->dentry = dget(mnt->mnt_root); + dentry = path->dentry = dget(mnt->mnt_root); goto retry; } -static void unlock_mount(struct path *path) +static void unlock_mount(struct mountpoint *where) { + struct dentry *dentry = where->m_dentry; + put_mountpoint(where); up_write(&namespace_sem); - mutex_unlock(&path->dentry->d_inode->i_mutex); + mutex_unlock(&dentry->d_inode->i_mutex); } -static int graft_tree(struct mount *mnt, struct path *path) +static int graft_tree(struct mount *mnt, struct mount *p, struct mountpoint *mp) { if (mnt->mnt.mnt_sb->s_flags & MS_NOUSER) return -EINVAL; - if (S_ISDIR(path->dentry->d_inode->i_mode) != + if (S_ISDIR(mp->m_dentry->d_inode->i_mode) != S_ISDIR(mnt->mnt.mnt_root->d_inode->i_mode)) return -ENOTDIR; - if (d_unlinked(path->dentry)) - return -ENOENT; - - return attach_recursive_mnt(mnt, path, NULL); + return attach_recursive_mnt(mnt, p, mp, NULL); } /* @@ -1633,9 +1680,6 @@ int type; int err = 0; - if (!ns_capable(mnt->mnt_ns->user_ns, CAP_SYS_ADMIN)) - return -EPERM; - if (path->dentry != path->mnt->mnt_root) return -EINVAL; @@ -1668,10 +1712,9 @@ { LIST_HEAD(umount_list); struct path old_path; - struct mount *mnt = NULL, *old; - int err = mount_is_safe(path); - if (err) - return err; + struct mount *mnt = NULL, *old, *parent; + struct mountpoint *mp; + int err; if (!old_name || !*old_name) return -EINVAL; err = kern_path(old_name, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &old_path); @@ -1682,17 +1725,19 @@ if (mnt_ns_loop(&old_path)) goto out; - err = lock_mount(path); - if (err) + mp = lock_mount(path); + err = PTR_ERR(mp); + if (IS_ERR(mp)) goto out; old = real_mount(old_path.mnt); + parent = real_mount(path->mnt); err = -EINVAL; if (IS_MNT_UNBINDABLE(old)) goto out2; - if (!check_mnt(real_mount(path->mnt)) || !check_mnt(old)) + if (!check_mnt(parent) || !check_mnt(old)) goto out2; if (recurse) @@ -1705,14 +1750,14 @@ goto out; } - err = graft_tree(mnt, path); + err = graft_tree(mnt, parent, mp); if (err) { br_write_lock(&vfsmount_lock); umount_tree(mnt, 0, &umount_list); br_write_unlock(&vfsmount_lock); } out2: - unlock_mount(path); + unlock_mount(mp); release_mounts(&umount_list); out: path_put(&old_path); @@ -1729,6 +1774,9 @@ if (readonly_request == __mnt_is_readonly(mnt)) return 0; + if (mnt->mnt_flags & MNT_LOCK_READONLY) + return -EPERM; + if (readonly_request) error = mnt_make_readonly(real_mount(mnt)); else @@ -1748,9 +1796,6 @@ struct super_block *sb = path->mnt->mnt_sb; struct mount *mnt = real_mount(path->mnt); - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - if (!check_mnt(mnt)) return -EINVAL; @@ -1764,6 +1809,8 @@ down_write(&sb->s_umount); if (flags & MS_BIND) err = change_mount_flags(path->mnt, flags); + else if (!capable(CAP_SYS_ADMIN)) + err = -EPERM; else err = do_remount_sb(sb, flags, data, 0); if (!err) { @@ -1796,17 +1843,17 @@ struct path old_path, parent_path; struct mount *p; struct mount *old; - int err = 0; - if (!ns_capable(real_mount(path->mnt)->mnt_ns->user_ns, CAP_SYS_ADMIN)) - return -EPERM; + struct mountpoint *mp; + int err; if (!old_name || !*old_name) return -EINVAL; err = kern_path(old_name, LOOKUP_FOLLOW, &old_path); if (err) return err; - err = lock_mount(path); - if (err < 0) + mp = lock_mount(path); + err = PTR_ERR(mp); + if (IS_ERR(mp)) goto out; old = real_mount(old_path.mnt); @@ -1816,9 +1863,6 @@ if (!check_mnt(p) || !check_mnt(old)) goto out1; - if (d_unlinked(path->dentry)) - goto out1; - err = -EINVAL; if (old_path.dentry != old_path.mnt->mnt_root) goto out1; @@ -1845,7 +1889,7 @@ if (p == old) goto out1; - err = attach_recursive_mnt(old, path, &parent_path); + err = attach_recursive_mnt(old, real_mount(path->mnt), mp, &parent_path); if (err) goto out1; @@ -1853,7 +1897,7 @@ * automatically */ list_del_init(&old->mnt_expire); out1: - unlock_mount(path); + unlock_mount(mp); out: if (!err) path_put(&parent_path); @@ -1889,21 +1933,24 @@ */ static int do_add_mount(struct mount *newmnt, struct path *path, int mnt_flags) { + struct mountpoint *mp; + struct mount *parent; int err; mnt_flags &= ~(MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL); - err = lock_mount(path); - if (err) - return err; + mp = lock_mount(path); + if (IS_ERR(mp)) + return PTR_ERR(mp); + parent = real_mount(path->mnt); err = -EINVAL; - if (unlikely(!check_mnt(real_mount(path->mnt)))) { + if (unlikely(!check_mnt(parent))) { /* that's acceptable only for automounts done in private ns */ if (!(mnt_flags & MNT_SHRINKABLE)) goto unlock; /* ... and for those we'd better have mountpoint still alive */ - if (!real_mount(path->mnt)->mnt_ns) + if (!parent->mnt_ns) goto unlock; } @@ -1918,10 +1965,10 @@ goto unlock; newmnt->mnt.mnt_flags = mnt_flags; - err = graft_tree(newmnt, path); + err = graft_tree(newmnt, parent, mp); unlock: - unlock_mount(path); + unlock_mount(mp); return err; } @@ -1933,18 +1980,13 @@ int mnt_flags, const char *name, void *data) { struct file_system_type *type; - struct user_namespace *user_ns; + struct user_namespace *user_ns = current->nsproxy->mnt_ns->user_ns; struct vfsmount *mnt; int err; if (!fstype) return -EINVAL; - /* we need capabilities... */ - user_ns = real_mount(path->mnt)->mnt_ns->user_ns; - if (!ns_capable(user_ns, CAP_SYS_ADMIN)) - return -EPERM; - type = get_fs_type(fstype); if (!type) return -ENODEV; @@ -2258,6 +2300,9 @@ if (retval) goto dput_out; + if (!may_mount()) + return -EPERM; + /* Default to relatime unless overriden */ if (!(flags & MS_NOATIME)) mnt_flags |= MNT_RELATIME; @@ -2360,7 +2405,7 @@ /* First pass: copy the tree topology */ copy_flags = CL_COPY_ALL | CL_EXPIRE; if (user_ns != mnt_ns->user_ns) - copy_flags |= CL_SHARED_TO_SLAVE; + copy_flags |= CL_SHARED_TO_SLAVE | CL_UNPRIVILEGED; new = copy_tree(old, old->mnt.mnt_root, copy_flags); if (IS_ERR(new)) { up_write(&namespace_sem); @@ -2564,10 +2609,11 @@ const char __user *, put_old) { struct path new, old, parent_path, root_parent, root; - struct mount *new_mnt, *root_mnt; + struct mount *new_mnt, *root_mnt, *old_mnt; + struct mountpoint *old_mp, *root_mp; int error; - if (!ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN)) + if (!may_mount()) return -EPERM; error = user_path_dir(new_root, &new); @@ -2583,14 +2629,16 @@ goto out2; get_fs_root(current->fs, &root); - error = lock_mount(&old); - if (error) + old_mp = lock_mount(&old); + error = PTR_ERR(old_mp); + if (IS_ERR(old_mp)) goto out3; error = -EINVAL; new_mnt = real_mount(new.mnt); root_mnt = real_mount(root.mnt); - if (IS_MNT_SHARED(real_mount(old.mnt)) || + old_mnt = real_mount(old.mnt); + if (IS_MNT_SHARED(old_mnt) || IS_MNT_SHARED(new_mnt->mnt_parent) || IS_MNT_SHARED(root_mnt->mnt_parent)) goto out4; @@ -2599,37 +2647,37 @@ error = -ENOENT; if (d_unlinked(new.dentry)) goto out4; - if (d_unlinked(old.dentry)) - goto out4; error = -EBUSY; - if (new.mnt == root.mnt || - old.mnt == root.mnt) + if (new_mnt == root_mnt || old_mnt == root_mnt) goto out4; /* loop, on the same file system */ error = -EINVAL; if (root.mnt->mnt_root != root.dentry) goto out4; /* not a mountpoint */ if (!mnt_has_parent(root_mnt)) goto out4; /* not attached */ + root_mp = root_mnt->mnt_mp; if (new.mnt->mnt_root != new.dentry) goto out4; /* not a mountpoint */ if (!mnt_has_parent(new_mnt)) goto out4; /* not attached */ /* make sure we can reach put_old from new_root */ - if (!is_path_reachable(real_mount(old.mnt), old.dentry, &new)) + if (!is_path_reachable(old_mnt, old.dentry, &new)) goto out4; + root_mp->m_count++; /* pin it so it won't go away */ br_write_lock(&vfsmount_lock); detach_mnt(new_mnt, &parent_path); detach_mnt(root_mnt, &root_parent); /* mount old root on put_old */ - attach_mnt(root_mnt, &old); + attach_mnt(root_mnt, old_mnt, old_mp); /* mount new_root on / */ - attach_mnt(new_mnt, &root_parent); + attach_mnt(new_mnt, real_mount(root_parent.mnt), root_mp); touch_mnt_namespace(current->nsproxy->mnt_ns); br_write_unlock(&vfsmount_lock); chroot_fs_refs(&root, &new); + put_mountpoint(root_mp); error = 0; out4: - unlock_mount(&old); + unlock_mount(old_mp); if (!error) { path_put(&root_parent); path_put(&parent_path); @@ -2684,14 +2732,17 @@ 0, SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL); mount_hashtable = (struct list_head *)__get_free_page(GFP_ATOMIC); + mountpoint_hashtable = (struct list_head *)__get_free_page(GFP_ATOMIC); - if (!mount_hashtable) + if (!mount_hashtable || !mountpoint_hashtable) panic("Failed to allocate mount hash table\n"); printk(KERN_INFO "Mount-cache hash table entries: %lu\n", HASH_SIZE); for (u = 0; u < HASH_SIZE; u++) INIT_LIST_HEAD(&mount_hashtable[u]); + for (u = 0; u < HASH_SIZE; u++) + INIT_LIST_HEAD(&mountpoint_hashtable[u]); br_lock_init(&vfsmount_lock); @@ -2753,6 +2804,51 @@ return check_mnt(real_mount(mnt)); } +bool current_chrooted(void) +{ + /* Does the current process have a non-standard root */ + struct path ns_root; + struct path fs_root; + bool chrooted; + + /* Find the namespace root */ + ns_root.mnt = ¤t->nsproxy->mnt_ns->root->mnt; + ns_root.dentry = ns_root.mnt->mnt_root; + path_get(&ns_root); + while (d_mountpoint(ns_root.dentry) && follow_down_one(&ns_root)) + ; + + get_fs_root(current->fs, &fs_root); + + chrooted = !path_equal(&fs_root, &ns_root); + + path_put(&fs_root); + path_put(&ns_root); + + return chrooted; +} + +void update_mnt_policy(struct user_namespace *userns) +{ + struct mnt_namespace *ns = current->nsproxy->mnt_ns; + struct mount *mnt; + + down_read(&namespace_sem); + list_for_each_entry(mnt, &ns->list, mnt_list) { + switch (mnt->mnt.mnt_sb->s_magic) { + case SYSFS_MAGIC: + userns->may_mount_sysfs = true; + break; + case PROC_SUPER_MAGIC: + userns->may_mount_proc = true; + break; + } + if (userns->may_mount_sysfs && userns->may_mount_proc) + break; + } + up_read(&namespace_sem); +} + static void *mntns_get(struct task_struct *task) { struct mnt_namespace *ns = NULL; --- linux-lts-raring-3.8.0.orig/fs/open.c +++ linux-lts-raring-3.8.0/fs/open.c @@ -33,6 +33,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) { @@ -60,6 +63,7 @@ mutex_unlock(&dentry->d_inode->i_mutex); return ret; } +EXPORT_SYMBOL(do_truncate); long vfs_truncate(struct path *path, loff_t length) { @@ -816,8 +820,7 @@ return ERR_PTR(error); f->f_flags = flags; - f->f_path = *path; - error = do_dentry_open(f, NULL, cred); + error = vfs_open(path, f, cred); if (!error) { error = open_check_o_direct(f); if (error) { @@ -832,6 +835,26 @@ } EXPORT_SYMBOL(dentry_open); +/** + * vfs_open - open the file at the given path + * @path: path to open + * @filp: newly allocated file with f_flag initialized + * @cred: credentials to use + */ +int vfs_open(const struct path *path, struct file *filp, + const struct cred *cred) +{ + struct inode *inode = path->dentry->d_inode; + + if (inode->i_op->dentry_open) + return inode->i_op->dentry_open(path->dentry, filp, cred); + else { + filp->f_path = *path; + return do_dentry_open(filp, NULL, cred); + } +} +EXPORT_SYMBOL(vfs_open); + static inline int build_open_flags(int flags, umode_t mode, struct open_flags *op) { int lookup_flags = 0; @@ -960,6 +983,7 @@ } else { fsnotify_open(f); fd_install(fd, f); + trace_do_sys_open(tmp->name, flags, mode); } } putname(tmp); --- linux-lts-raring-3.8.0.orig/fs/dcache.c +++ linux-lts-raring-3.8.0/fs/dcache.c @@ -1232,8 +1232,10 @@ LIST_HEAD(dispose); int found; - while ((found = select_parent(parent, &dispose)) != 0) + while ((found = select_parent(parent, &dispose)) != 0) { shrink_dentry_list(&dispose); + cond_resched(); + } } EXPORT_SYMBOL(shrink_dcache_parent); @@ -2552,7 +2554,6 @@ bool slash = false; int error = 0; - br_read_lock(&vfsmount_lock); while (dentry != root->dentry || vfsmnt != root->mnt) { struct dentry * parent; @@ -2582,8 +2583,6 @@ if (!error && !slash) error = prepend(buffer, buflen, "/", 1); -out: - br_read_unlock(&vfsmount_lock); return error; global_root: @@ -2600,7 +2599,7 @@ error = prepend(buffer, buflen, "/", 1); if (!error) error = is_mounted(vfsmnt) ? 1 : 2; - goto out; + return error; } /** @@ -2627,9 +2626,11 @@ int error; prepend(&res, &buflen, "\0", 1); + br_read_lock(&vfsmount_lock); write_seqlock(&rename_lock); error = prepend_path(path, root, &res, &buflen); write_sequnlock(&rename_lock); + br_read_unlock(&vfsmount_lock); if (error < 0) return ERR_PTR(error); @@ -2646,9 +2647,11 @@ int error; prepend(&res, &buflen, "\0", 1); + br_read_lock(&vfsmount_lock); write_seqlock(&rename_lock); error = prepend_path(path, &root, &res, &buflen); write_sequnlock(&rename_lock); + br_read_unlock(&vfsmount_lock); if (error > 1) error = -EINVAL; @@ -2712,11 +2715,13 @@ return path->dentry->d_op->d_dname(path->dentry, buf, buflen); get_fs_root(current->fs, &root); + br_read_lock(&vfsmount_lock); write_seqlock(&rename_lock); error = path_with_deleted(path, &root, &res, &buflen); + write_sequnlock(&rename_lock); + br_read_unlock(&vfsmount_lock); if (error < 0) res = ERR_PTR(error); - write_sequnlock(&rename_lock); path_put(&root); return res; } @@ -2871,6 +2876,7 @@ get_fs_root_and_pwd(current->fs, &root, &pwd); error = -ENOENT; + br_read_lock(&vfsmount_lock); write_seqlock(&rename_lock); if (!d_unlinked(pwd.dentry)) { unsigned long len; @@ -2880,6 +2886,7 @@ prepend(&cwd, &buflen, "\0", 1); error = prepend_path(&pwd, &root, &cwd, &buflen); write_sequnlock(&rename_lock); + br_read_unlock(&vfsmount_lock); if (error < 0) goto out; @@ -2900,6 +2907,7 @@ } } else { write_sequnlock(&rename_lock); + br_read_unlock(&vfsmount_lock); } out: --- linux-lts-raring-3.8.0.orig/fs/pnode.c +++ linux-lts-raring-3.8.0/fs/pnode.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "internal.h" #include "pnode.h" @@ -217,9 +218,10 @@ * @source_mnt: source mount. * @tree_list : list of heads of trees to be attached. */ -int propagate_mnt(struct mount *dest_mnt, struct dentry *dest_dentry, +int propagate_mnt(struct mount *dest_mnt, struct mountpoint *dest_mp, struct mount *source_mnt, struct list_head *tree_list) { + struct user_namespace *user_ns = current->nsproxy->mnt_ns->user_ns; struct mount *m, *child; int ret = 0; struct mount *prev_dest_mnt = dest_mnt; @@ -237,6 +239,10 @@ source = get_source(m, prev_dest_mnt, prev_src_mnt, &type); + /* Notice when we are propagating across user namespaces */ + if (m->mnt_ns->user_ns != user_ns) + type |= CL_UNPRIVILEGED; + child = copy_tree(source, source->mnt.mnt_root, type); if (IS_ERR(child)) { ret = PTR_ERR(child); @@ -244,8 +250,8 @@ goto out; } - if (is_subdir(dest_dentry, m->mnt.mnt_root)) { - mnt_set_mountpoint(m, dest_dentry, child); + if (is_subdir(dest_mp->m_dentry, m->mnt.mnt_root)) { + mnt_set_mountpoint(m, dest_mp, child); list_add_tail(&child->mnt_hash, tree_list); } else { /* --- linux-lts-raring-3.8.0.orig/fs/namei.c +++ linux-lts-raring-3.8.0/fs/namei.c @@ -402,6 +402,7 @@ return security_inode_permission(inode, mask); } +EXPORT_SYMBOL(__inode_permission); /** * sb_permission - Check superblock-level permissions @@ -693,8 +694,6 @@ nd->path = *path; nd->inode = nd->path.dentry->d_inode; nd->flags |= LOOKUP_JUMPED; - - BUG_ON(nd->inode->i_op->follow_link); } static inline void put_link(struct nameidata *nd, struct path *link, void *cookie) @@ -705,8 +704,8 @@ path_put(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 @@ -2751,7 +2750,7 @@ if (error) return error; - audit_inode(name, dir, 0); + audit_inode(name, dir, LOOKUP_PARENT); error = -EISDIR; /* trailing slashes? */ if (nd->last.name[nd->last.len]) @@ -2878,9 +2877,12 @@ error = may_open(&nd->path, acc_mode, open_flag); if (error) goto out; - file->f_path.mnt = nd->path.mnt; - error = finish_open(file, nd->path.dentry, NULL, opened); - if (error) { + + BUG_ON(*opened & FILE_OPENED); /* once it's opened, it's opened */ + error = vfs_open(&nd->path, file, current_cred()); + if (!error) { + *opened |= FILE_OPENED; + } else { if (error == -EOPENSTALE) goto stale_open; goto out; --- linux-lts-raring-3.8.0.orig/fs/Makefile +++ linux-lts-raring-3.8.0/fs/Makefile @@ -107,6 +107,7 @@ obj-$(CONFIG_AUTOFS4_FS) += autofs4/ obj-$(CONFIG_ADFS_FS) += adfs/ obj-$(CONFIG_FUSE_FS) += fuse/ +obj-$(CONFIG_OVERLAYFS_FS) += overlayfs/ obj-$(CONFIG_UDF_FS) += udf/ obj-$(CONFIG_SUN_OPENPROMFS) += openpromfs/ obj-$(CONFIG_OMFS_FS) += omfs/ --- linux-lts-raring-3.8.0.orig/fs/file_table.c +++ linux-lts-raring-3.8.0/fs/file_table.c @@ -36,7 +36,8 @@ .max_files = NR_FILE }; -DEFINE_STATIC_LGLOCK(files_lglock); +DEFINE_LGLOCK(files_lglock); +EXPORT_SYMBOL(files_lglock); /* SLAB cache for file structures */ static struct kmem_cache *filp_cachep __read_mostly; @@ -403,6 +404,8 @@ } } +EXPORT_SYMBOL(file_sb_list_del); + #ifdef CONFIG_SMP /* --- linux-lts-raring-3.8.0.orig/fs/inode.c +++ linux-lts-raring-3.8.0/fs/inode.c @@ -56,6 +56,7 @@ static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock); __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock); +EXPORT_SYMBOL(inode_sb_list_lock); /* * Empty aops. Can be used for the cases where the user does not @@ -725,7 +726,7 @@ * inode to the back of the list so we don't spin on it. */ if (!spin_trylock(&inode->i_lock)) { - list_move_tail(&inode->i_lru, &sb->s_inode_lru); + list_move(&inode->i_lru, &sb->s_inode_lru); continue; } @@ -1503,7 +1504,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) { if (inode->i_op->update_time) return inode->i_op->update_time(inode, time, flags); @@ -1519,6 +1520,7 @@ mark_inode_dirty_sync(inode); return 0; } +EXPORT_SYMBOL(update_time); /** * touch_atime - update the access time @@ -1901,3 +1903,7 @@ wake_up_bit(&inode->i_state, __I_DIO_WAKEUP); } EXPORT_SYMBOL(inode_dio_done); + +#define CREATE_TRACE_POINTS +#include + --- linux-lts-raring-3.8.0.orig/fs/compat.c +++ linux-lts-raring-3.8.0/fs/compat.c @@ -558,6 +558,10 @@ } *ret_pointer = iov; + ret = -EFAULT; + if (!access_ok(VERIFY_READ, uvector, nr_segs*sizeof(*uvector))) + goto out; + /* * Single unix specification: * We should -EINVAL if an element length is not >= 0 and fitting an @@ -1080,17 +1084,12 @@ if (!file->f_op) goto out; - ret = -EFAULT; - if (!access_ok(VERIFY_READ, uvector, nr_segs*sizeof(*uvector))) - goto out; - - tot_len = compat_rw_copy_check_uvector(type, uvector, nr_segs, + ret = compat_rw_copy_check_uvector(type, uvector, nr_segs, UIO_FASTIOV, iovstack, &iov); - if (tot_len == 0) { - ret = 0; + if (ret <= 0) goto out; - } + tot_len = ret; ret = rw_verify_area(type, file, pos, tot_len); if (ret < 0) goto out; --- linux-lts-raring-3.8.0.orig/fs/mount.h +++ linux-lts-raring-3.8.0/fs/mount.h @@ -18,6 +18,12 @@ int mnt_writers; }; +struct mountpoint { + struct list_head m_hash; + struct dentry *m_dentry; + int m_count; +}; + struct mount { struct list_head mnt_hash; struct mount *mnt_parent; @@ -40,6 +46,7 @@ struct list_head mnt_slave; /* slave list entry */ struct mount *mnt_master; /* slave is on master->mnt_slave_list */ struct mnt_namespace *mnt_ns; /* containing namespace */ + struct mountpoint *mnt_mp; /* where is it mounted */ #ifdef CONFIG_FSNOTIFY struct hlist_head mnt_fsnotify_marks; __u32 mnt_fsnotify_mask; --- linux-lts-raring-3.8.0.orig/fs/pipe.c +++ linux-lts-raring-3.8.0/fs/pipe.c @@ -863,6 +863,9 @@ { int ret = -ENOENT; + if (!(filp->f_mode & (FMODE_READ|FMODE_WRITE))) + return -EINVAL; + mutex_lock(&inode->i_mutex); if (inode->i_pipe) { --- linux-lts-raring-3.8.0.orig/fs/exec.c +++ linux-lts-raring-3.8.0/fs/exec.c @@ -56,6 +56,8 @@ #include #include +#include + #include #include #include @@ -607,13 +609,13 @@ return -ENOMEM; lru_add_drain(); - tlb_gather_mmu(&tlb, mm, 0); + tlb_gather_mmu(&tlb, mm, old_start, old_end); if (new_end > old_start) { /* * when the old and new regions overlap clear from new_end. */ free_pgd_range(&tlb, new_end, old_end, new_end, - vma->vm_next ? vma->vm_next->vm_start : 0); + vma->vm_next ? vma->vm_next->vm_start : USER_PGTABLES_CEILING); } else { /* * otherwise, clean from old_start; this is done to not touch @@ -622,9 +624,9 @@ * for the others its just a little faster. */ free_pgd_range(&tlb, old_start, old_end, new_end, - vma->vm_next ? vma->vm_next->vm_start : 0); + vma->vm_next ? vma->vm_next->vm_start : USER_PGTABLES_CEILING); } - tlb_finish_mmu(&tlb, new_end, old_end); + tlb_finish_mmu(&tlb, old_start, old_end); /* * Shrink the vma to just the new range. Always succeeds. @@ -772,6 +774,8 @@ fsnotify_open(file); + trace_open_exec(name); + err = deny_write_access(file); if (err) goto exit; @@ -898,11 +902,13 @@ sig->notify_count = -1; /* for exit_notify() */ for (;;) { + threadgroup_change_begin(tsk); write_lock_irq(&tasklist_lock); if (likely(leader->exit_state)) break; __set_current_state(TASK_KILLABLE); write_unlock_irq(&tasklist_lock); + threadgroup_change_end(tsk); schedule(); if (unlikely(__fatal_signal_pending(tsk))) goto killed; @@ -960,6 +966,7 @@ if (unlikely(leader->ptrace)) __wake_up_parent(leader, leader->parent); write_unlock_irq(&tasklist_lock); + threadgroup_change_end(tsk); release_task(leader); } @@ -1133,13 +1140,6 @@ set_dumpable(current->mm, suid_dumpable); } - /* - * Flush performance counters when crossing a - * security domain: - */ - if (!get_dumpable(current->mm)) - perf_event_exit_task(current); - /* An exec changes our domain. We are no longer part of the thread group */ @@ -1203,6 +1203,15 @@ commit_creds(bprm->cred); bprm->cred = NULL; + + /* + * Disable monitoring for regular users + * when executing setuid binaries. Must + * wait until new credentials are committed + * by commit_creds() above + */ + if (get_dumpable(current->mm) != SUID_DUMP_USER) + perf_event_exit_task(current); /* * cred_guard_mutex must be held at least to this point to prevent * ptrace_attach() from altering our determination of the task's --- linux-lts-raring-3.8.0.orig/fs/aio.c +++ linux-lts-raring-3.8.0/fs/aio.c @@ -1027,9 +1027,9 @@ spin_unlock(&info->ring_lock); out: - kunmap_atomic(ring); dprintk("leaving aio_read_evt: %d h%lu t%lu\n", ret, (unsigned long)ring->head, (unsigned long)ring->tail); + kunmap_atomic(ring); return ret; } --- linux-lts-raring-3.8.0.orig/fs/splice.c +++ linux-lts-raring-3.8.0/fs/splice.c @@ -1092,8 +1092,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); @@ -1116,13 +1116,14 @@ return splice_write(pipe, out, ppos, len, flags); } +EXPORT_SYMBOL(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); @@ -1142,6 +1143,7 @@ return splice_read(in, ppos, pipe, len, flags); } +EXPORT_SYMBOL(do_splice_to); /** * splice_direct_to_actor - splices data directly between two non-pipes @@ -1307,6 +1309,7 @@ return ret; } +EXPORT_SYMBOL(do_splice_direct); static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe, struct pipe_inode_info *opipe, --- linux-lts-raring-3.8.0.orig/fs/binfmt_elf.c +++ linux-lts-raring-3.8.0/fs/binfmt_elf.c @@ -1132,6 +1132,7 @@ goto whole; if (!(vma->vm_flags & VM_SHARED) && FILTER(HUGETLB_PRIVATE)) goto whole; + return 0; } /* Do not dump I/O mapped devices or special mappings */ @@ -1402,7 +1403,7 @@ * long file_ofs * followed by COUNT filenames in ASCII: "FILE1" NUL "FILE2" NUL... */ -static void fill_files_note(struct memelfnote *note) +static int fill_files_note(struct memelfnote *note) { struct vm_area_struct *vma; unsigned count, size, names_ofs, remaining, n; @@ -1417,11 +1418,11 @@ names_ofs = (2 + 3 * count) * sizeof(data[0]); alloc: if (size >= MAX_FILE_NOTE_SIZE) /* paranoia check */ - goto err; + return -EINVAL; size = round_up(size, PAGE_SIZE); data = vmalloc(size); if (!data) - goto err; + return -ENOMEM; start_end_ofs = data + 2; name_base = name_curpos = ((char *)data) + names_ofs; @@ -1474,7 +1475,7 @@ size = name_curpos - (char *)data; fill_note(note, "CORE", NT_FILE, size, data); - err: ; + return 0; } #ifdef CORE_DUMP_USE_REGSET @@ -1675,8 +1676,8 @@ fill_auxv_note(&info->auxv, current->mm); info->size += notesize(&info->auxv); - fill_files_note(&info->files); - info->size += notesize(&info->files); + if (fill_files_note(&info->files) == 0) + info->size += notesize(&info->files); return 1; } @@ -1708,7 +1709,8 @@ return 0; if (first && !writenote(&info->auxv, file, foffset)) return 0; - if (first && !writenote(&info->files, file, foffset)) + if (first && info->files.data && + !writenote(&info->files, file, foffset)) return 0; for (i = 1; i < info->thread_notes; ++i) @@ -1795,6 +1797,7 @@ struct elf_note_info { struct memelfnote *notes; + struct memelfnote *notes_files; struct elf_prstatus *prstatus; /* NT_PRSTATUS */ struct elf_prpsinfo *psinfo; /* NT_PRPSINFO */ struct list_head thread_list; @@ -1885,9 +1888,12 @@ fill_siginfo_note(info->notes + 2, &info->csigdata, siginfo); fill_auxv_note(info->notes + 3, current->mm); - fill_files_note(info->notes + 4); + info->numnote = 4; - info->numnote = 5; + if (fill_files_note(info->notes + info->numnote) == 0) { + info->notes_files = info->notes + info->numnote; + info->numnote++; + } /* Try to dump the FPU. */ info->prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs, @@ -1949,8 +1955,9 @@ kfree(list_entry(tmp, struct elf_thread_status, list)); } - /* Free data allocated by fill_files_note(): */ - vfree(info->notes[4].data); + /* Free data possibly allocated by fill_files_note(): */ + if (info->notes_files) + vfree(info->notes_files->data); kfree(info->prstatus); kfree(info->psinfo); @@ -2033,7 +2040,7 @@ struct vm_area_struct *vma, *gate_vma; struct elfhdr *elf = NULL; loff_t offset = 0, dataoff, foffset; - struct elf_note_info info; + struct elf_note_info info = { }; struct elf_phdr *phdr4note = NULL; struct elf_shdr *shdr4extnum = NULL; Elf_Half e_phnum; --- linux-lts-raring-3.8.0.orig/fs/block_dev.c +++ linux-lts-raring-3.8.0/fs/block_dev.c @@ -57,17 +57,24 @@ struct backing_dev_info *dst) { struct backing_dev_info *old = inode->i_data.backing_dev_info; + bool wakeup_bdi = false; if (unlikely(dst == old)) /* deadlock avoidance */ return; bdi_lock_two(&old->wb, &dst->wb); spin_lock(&inode->i_lock); inode->i_data.backing_dev_info = dst; - if (inode->i_state & I_DIRTY) + if (inode->i_state & I_DIRTY) { + if (bdi_cap_writeback_dirty(dst) && !wb_has_dirty_io(&dst->wb)) + wakeup_bdi = true; list_move(&inode->i_wb_list, &dst->wb.b_dirty); + } spin_unlock(&inode->i_lock); spin_unlock(&old->wb.list_lock); spin_unlock(&dst->wb.list_lock); + + if (wakeup_bdi) + bdi_wakeup_thread_delayed(dst); } /* Kill _all_ buffers and pagecache , dirty or not.. */ @@ -551,6 +558,7 @@ ihold(bdev->bd_inode); return bdev; } +EXPORT_SYMBOL(bdgrab); long nr_blockdev_pages(void) { @@ -994,6 +1002,7 @@ mutex_lock(&bdev->bd_mutex); check_disk_size_change(disk, bdev); + bdev->bd_invalidated = 0; mutex_unlock(&bdev->bd_mutex); bdput(bdev); return ret; @@ -1032,7 +1041,9 @@ { unsigned bsize = bdev_logical_block_size(bdev); - bdev->bd_inode->i_size = size; + mutex_lock(&bdev->bd_inode->i_mutex); + i_size_write(bdev->bd_inode, size); + mutex_unlock(&bdev->bd_inode->i_mutex); while (bsize < PAGE_CACHE_SIZE) { if (size & bsize) break; --- linux-lts-raring-3.8.0.orig/fs/pnode.h +++ linux-lts-raring-3.8.0/fs/pnode.h @@ -23,6 +23,7 @@ #define CL_MAKE_SHARED 0x08 #define CL_PRIVATE 0x10 #define CL_SHARED_TO_SLAVE 0x20 +#define CL_UNPRIVILEGED 0x40 static inline void set_mnt_shared(struct mount *mnt) { @@ -31,14 +32,14 @@ } void change_mnt_propagation(struct mount *, int); -int propagate_mnt(struct mount *, struct dentry *, struct mount *, +int propagate_mnt(struct mount *, struct mountpoint *, struct mount *, struct list_head *); int propagate_umount(struct list_head *); int propagate_mount_busy(struct mount *, int); void mnt_release_group_id(struct mount *); int get_dominating_id(struct mount *mnt, const struct path *root); unsigned int mnt_get_count(struct mount *mnt); -void mnt_set_mountpoint(struct mount *, struct dentry *, +void mnt_set_mountpoint(struct mount *, struct mountpoint *, struct mount *); void release_mounts(struct list_head *); void umount_tree(struct mount *, int, struct list_head *); --- linux-lts-raring-3.8.0.orig/fs/fs-writeback.c +++ linux-lts-raring-3.8.0/fs/fs-writeback.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "internal.h" /* @@ -1164,6 +1165,8 @@ if ((inode->i_state & flags) == flags) return; + trace_dirty_inode(inode, current); + if (unlikely(block_dump)) block_dump___mark_inode_dirty(inode); --- linux-lts-raring-3.8.0.orig/fs/direct-io.c +++ linux-lts-raring-3.8.0/fs/direct-io.c @@ -261,9 +261,9 @@ dio->end_io(dio->iocb, offset, transferred, dio->private, ret, is_async); } else { + inode_dio_done(dio->inode); if (is_async) aio_complete(dio->iocb, ret, 0); - inode_dio_done(dio->inode); } return ret; --- linux-lts-raring-3.8.0.orig/fs/internal.h +++ linux-lts-raring-3.8.0/fs/internal.h @@ -42,11 +42,6 @@ extern void __init chrdev_init(void); /* - * namei.c - */ -extern int __inode_permission(struct inode *, int); - -/* * namespace.c */ extern int copy_mount_options(const void __user *, unsigned long *); --- linux-lts-raring-3.8.0.orig/fs/bio.c +++ linux-lts-raring-3.8.0/fs/bio.c @@ -714,7 +714,7 @@ int iov_idx = 0; unsigned int iov_off = 0; - __bio_for_each_segment(bvec, bio, i, 0) { + bio_for_each_segment_all(bvec, bio, i) { char *bv_addr = page_address(bvec->bv_page); unsigned int bv_len = iovecs[i].bv_len; @@ -767,12 +767,22 @@ int bio_uncopy_user(struct bio *bio) { struct bio_map_data *bmd = bio->bi_private; - int ret = 0; + struct bio_vec *bvec; + int ret = 0, i; - if (!bio_flagged(bio, BIO_NULL_MAPPED)) - ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs, - bmd->nr_sgvecs, bio_data_dir(bio) == READ, - 0, bmd->is_our_pages); + if (!bio_flagged(bio, BIO_NULL_MAPPED)) { + /* + * if we're in a workqueue, the request is orphaned, so + * don't copy into a random user address space, just free. + */ + if (current->mm) + ret = __bio_copy_iov(bio, bmd->iovecs, bmd->sgvecs, + bmd->nr_sgvecs, bio_data_dir(bio) == READ, + 0, bmd->is_our_pages); + else if (bmd->is_our_pages) + bio_for_each_segment_all(bvec, bio, i) + __free_page(bvec->bv_page); + } bio_free_map_data(bmd); bio_put(bio); return ret; @@ -896,7 +906,7 @@ return bio; cleanup: if (!map_data) - bio_for_each_segment(bvec, bio, i) + bio_for_each_segment_all(bvec, bio, i) __free_page(bvec->bv_page); bio_put(bio); @@ -1110,7 +1120,7 @@ /* * make sure we dirty pages we wrote to */ - __bio_for_each_segment(bvec, bio, i, 0) { + bio_for_each_segment_all(bvec, bio, i) { if (bio_data_dir(bio) == READ) set_page_dirty_lock(bvec->bv_page); @@ -1216,7 +1226,7 @@ int i; char *p = bmd->sgvecs[0].iov_base; - __bio_for_each_segment(bvec, bio, i, 0) { + bio_for_each_segment_all(bvec, bio, i) { char *addr = page_address(bvec->bv_page); int len = bmd->iovecs[i].bv_len; @@ -1256,7 +1266,7 @@ if (!reading) { void *p = data; - bio_for_each_segment(bvec, bio, i) { + bio_for_each_segment_all(bvec, bio, i) { char *addr = page_address(bvec->bv_page); memcpy(addr, p, bvec->bv_len); @@ -1541,7 +1551,7 @@ if (index >= bio->bi_idx) index = bio->bi_vcnt - 1; - __bio_for_each_segment(bv, bio, i, 0) { + bio_for_each_segment_all(bv, bio, i) { if (i == index) { if (offset > bv->bv_offset) sectors += (offset - bv->bv_offset) / sector_sz; --- linux-lts-raring-3.8.0.orig/fs/hfsplus/extents.c +++ linux-lts-raring-3.8.0/fs/hfsplus/extents.c @@ -533,7 +533,7 @@ struct address_space *mapping = inode->i_mapping; struct page *page; void *fsdata; - u32 size = inode->i_size; + loff_t size = inode->i_size; res = pagecache_write_begin(NULL, mapping, size, 0, AOP_FLAG_UNINTERRUPTIBLE, --- linux-lts-raring-3.8.0.orig/fs/ecryptfs/main.c +++ linux-lts-raring-3.8.0/fs/ecryptfs/main.c @@ -567,6 +567,13 @@ s->s_maxbytes = path.dentry->d_sb->s_maxbytes; s->s_blocksize = path.dentry->d_sb->s_blocksize; s->s_magic = ECRYPTFS_SUPER_MAGIC; + s->s_stack_depth = path.dentry->d_sb->s_stack_depth + 1; + + rc = -EINVAL; + if (s->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { + printk(KERN_ERR "eCryptfs: maximum fs stacking depth exceeded\n"); + goto out_free; + } inode = ecryptfs_get_inode(path.dentry->d_inode, s); rc = PTR_ERR(inode); --- linux-lts-raring-3.8.0.orig/fs/ecryptfs/file.c +++ linux-lts-raring-3.8.0/fs/ecryptfs/file.c @@ -296,6 +296,12 @@ static int ecryptfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) { + int rc; + + rc = filemap_write_and_wait(file->f_mapping); + if (rc) + return rc; + return vfs_fsync(ecryptfs_file_to_lower(file), datasync); } --- linux-lts-raring-3.8.0.orig/fs/notify/mark.c +++ linux-lts-raring-3.8.0/fs/notify/mark.c @@ -115,6 +115,7 @@ mark->free_mark(mark); } } +EXPORT_SYMBOL(fsnotify_put_mark); /* * Any time a mark is getting freed we end up here. @@ -197,6 +198,7 @@ fsnotify_destroy_mark_locked(mark, group); mutex_unlock(&group->mark_mutex); } +EXPORT_SYMBOL(fsnotify_destroy_mark); void fsnotify_set_mark_mask_locked(struct fsnotify_mark *mark, __u32 mask) { @@ -291,6 +293,7 @@ mutex_unlock(&group->mark_mutex); return ret; } +EXPORT_SYMBOL(fsnotify_add_mark); /* * clear any marks in a group in which mark->flags & flags is true @@ -342,6 +345,7 @@ atomic_set(&mark->refcnt, 1); mark->free_mark = free_mark; } +EXPORT_SYMBOL(fsnotify_init_mark); static int fsnotify_mark_destroy(void *ignored) { --- linux-lts-raring-3.8.0.orig/fs/notify/group.c +++ linux-lts-raring-3.8.0/fs/notify/group.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "fsnotify.h" @@ -65,6 +66,7 @@ { atomic_inc(&group->refcnt); } +EXPORT_SYMBOL(fsnotify_put_group); /* * Drop a reference to a group. Free it if it's through. @@ -102,6 +104,7 @@ return group; } +EXPORT_SYMBOL(fsnotify_alloc_group); int fsnotify_fasync(int fd, struct file *file, int on) { --- linux-lts-raring-3.8.0.orig/fs/notify/inotify/inotify_user.c +++ linux-lts-raring-3.8.0/fs/notify/inotify/inotify_user.c @@ -574,10 +574,7 @@ int add = (arg & IN_MASK_ADD); int ret; - /* don't allow invalid bits: we don't want flags set */ mask = inotify_arg_to_mask(arg); - if (unlikely(!(mask & IN_ALL_EVENTS))) - return -EINVAL; fsn_mark = fsnotify_find_inode_mark(group, inode); if (!fsn_mark) @@ -627,10 +624,7 @@ struct idr *idr = &group->inotify_data.idr; spinlock_t *idr_lock = &group->inotify_data.idr_lock; - /* don't allow invalid bits: we don't want flags set */ mask = inotify_arg_to_mask(arg); - if (unlikely(!(mask & IN_ALL_EVENTS))) - return -EINVAL; tmp_i_mark = kmem_cache_alloc(inotify_inode_mark_cachep, GFP_KERNEL); if (unlikely(!tmp_i_mark)) @@ -757,6 +751,10 @@ int ret; unsigned flags = 0; + /* don't allow invalid bits: we don't want flags set */ + if (unlikely(!(mask & ALL_INOTIFY_BITS))) + return -EINVAL; + f = fdget(fd); if (unlikely(!f.file)) return -EBADF; --- linux-lts-raring-3.8.0.orig/fs/notify/fanotify/fanotify_user.c +++ linux-lts-raring-3.8.0/fs/notify/fanotify/fanotify_user.c @@ -121,6 +121,7 @@ metadata->event_len = FAN_EVENT_METADATA_LEN; metadata->metadata_len = FAN_EVENT_METADATA_LEN; metadata->vers = FANOTIFY_METADATA_VERSION; + metadata->reserved = 0; metadata->mask = event->mask & FAN_ALL_OUTGOING_EVENTS; metadata->pid = pid_vnr(event->tgid); if (unlikely(event->mask & FAN_Q_OVERFLOW)) --- linux-lts-raring-3.8.0.orig/fs/jbd2/transaction.c +++ linux-lts-raring-3.8.0/fs/jbd2/transaction.c @@ -500,10 +500,10 @@ &transaction->t_outstanding_credits); if (atomic_dec_and_test(&transaction->t_updates)) wake_up(&journal->j_wait_updates); + tid = transaction->t_tid; spin_unlock(&transaction->t_handle_lock); jbd_debug(2, "restarting handle %p\n", handle); - tid = transaction->t_tid; need_to_start = !tid_geq(journal->j_commit_request, tid); read_unlock(&journal->j_state_lock); if (need_to_start) @@ -1047,9 +1047,12 @@ void jbd2_journal_set_triggers(struct buffer_head *bh, struct jbd2_buffer_trigger_type *type) { - struct journal_head *jh = bh2jh(bh); + struct journal_head *jh = jbd2_journal_grab_journal_head(bh); + if (WARN_ON(!jh)) + return; jh->b_triggers = type; + jbd2_journal_put_journal_head(jh); } void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data, @@ -1101,17 +1104,18 @@ { transaction_t *transaction = handle->h_transaction; journal_t *journal = transaction->t_journal; - struct journal_head *jh = bh2jh(bh); + struct journal_head *jh; int ret = 0; - jbd_debug(5, "journal_head %p\n", jh); - JBUFFER_TRACE(jh, "entry"); if (is_handle_aborted(handle)) goto out; - if (!buffer_jbd(bh)) { + jh = jbd2_journal_grab_journal_head(bh); + if (!jh) { ret = -EUCLEAN; goto out; } + jbd_debug(5, "journal_head %p\n", jh); + JBUFFER_TRACE(jh, "entry"); jbd_lock_bh_state(bh); @@ -1202,6 +1206,7 @@ spin_unlock(&journal->j_list_lock); out_unlock_bh: jbd_unlock_bh_state(bh); + jbd2_journal_put_journal_head(jh); out: JBUFFER_TRACE(jh, "exit"); WARN_ON(ret); /* All errors are bugs, so dump the stack */ --- linux-lts-raring-3.8.0.orig/fs/jbd2/commit.c +++ linux-lts-raring-3.8.0/fs/jbd2/commit.c @@ -382,7 +382,7 @@ int space_left = 0; int first_tag = 0; int tag_flag; - int i, to_free = 0; + int i; int tag_bytes = journal_tag_bytes(journal); struct buffer_head *cbh = NULL; /* For transactional checksums */ __u32 crc32_sum = ~0; @@ -1126,7 +1126,7 @@ journal->j_stats.run.rs_blocks_logged += stats.run.rs_blocks_logged; spin_unlock(&journal->j_history_lock); - commit_transaction->t_state = T_FINISHED; + commit_transaction->t_state = T_COMMIT_CALLBACK; J_ASSERT(commit_transaction == journal->j_committing_transaction); journal->j_commit_sequence = commit_transaction->t_tid; journal->j_committing_transaction = NULL; @@ -1141,38 +1141,44 @@ journal->j_average_commit_time*3) / 4; else journal->j_average_commit_time = commit_time; + write_unlock(&journal->j_state_lock); - if (commit_transaction->t_checkpoint_list == NULL && - commit_transaction->t_checkpoint_io_list == NULL) { - __jbd2_journal_drop_transaction(journal, commit_transaction); - to_free = 1; + if (journal->j_checkpoint_transactions == NULL) { + journal->j_checkpoint_transactions = commit_transaction; + commit_transaction->t_cpnext = commit_transaction; + commit_transaction->t_cpprev = commit_transaction; } else { - if (journal->j_checkpoint_transactions == NULL) { - journal->j_checkpoint_transactions = commit_transaction; - commit_transaction->t_cpnext = commit_transaction; - commit_transaction->t_cpprev = commit_transaction; - } else { - commit_transaction->t_cpnext = - journal->j_checkpoint_transactions; - commit_transaction->t_cpprev = - commit_transaction->t_cpnext->t_cpprev; - commit_transaction->t_cpnext->t_cpprev = - commit_transaction; - commit_transaction->t_cpprev->t_cpnext = + commit_transaction->t_cpnext = + journal->j_checkpoint_transactions; + commit_transaction->t_cpprev = + commit_transaction->t_cpnext->t_cpprev; + commit_transaction->t_cpnext->t_cpprev = + commit_transaction; + commit_transaction->t_cpprev->t_cpnext = commit_transaction; - } } spin_unlock(&journal->j_list_lock); - + /* Drop all spin_locks because commit_callback may be block. + * __journal_remove_checkpoint() can not destroy transaction + * under us because it is not marked as T_FINISHED yet */ if (journal->j_commit_callback) journal->j_commit_callback(journal, commit_transaction); trace_jbd2_end_commit(journal, commit_transaction); jbd_debug(1, "JBD2: commit %d complete, head %d\n", journal->j_commit_sequence, journal->j_tail_sequence); - if (to_free) - jbd2_journal_free_transaction(commit_transaction); + write_lock(&journal->j_state_lock); + spin_lock(&journal->j_list_lock); + commit_transaction->t_state = T_FINISHED; + /* Recheck checkpoint lists after j_list_lock was dropped */ + if (commit_transaction->t_checkpoint_list == NULL && + commit_transaction->t_checkpoint_io_list == NULL) { + __jbd2_journal_drop_transaction(journal, commit_transaction); + jbd2_journal_free_transaction(commit_transaction); + } + spin_unlock(&journal->j_list_lock); + write_unlock(&journal->j_state_lock); wake_up(&journal->j_wait_done_commit); } --- linux-lts-raring-3.8.0.orig/fs/jbd2/journal.c +++ linux-lts-raring-3.8.0/fs/jbd2/journal.c @@ -698,6 +698,37 @@ } /* + * When this function returns the transaction corresponding to tid + * will be completed. If the transaction has currently running, start + * committing that transaction before waiting for it to complete. If + * the transaction id is stale, it is by definition already completed, + * so just return SUCCESS. + */ +int jbd2_complete_transaction(journal_t *journal, tid_t tid) +{ + int need_to_wait = 1; + + read_lock(&journal->j_state_lock); + if (journal->j_running_transaction && + journal->j_running_transaction->t_tid == tid) { + if (journal->j_commit_request != tid) { + /* transaction not yet started, so request it */ + read_unlock(&journal->j_state_lock); + jbd2_log_start_commit(journal, tid); + goto wait_commit; + } + } else if (!(journal->j_committing_transaction && + journal->j_committing_transaction->t_tid == tid)) + need_to_wait = 0; + read_unlock(&journal->j_state_lock); + if (!need_to_wait) + return 0; +wait_commit: + return jbd2_log_wait_commit(journal, tid); +} +EXPORT_SYMBOL(jbd2_complete_transaction); + +/* * Log buffer allocation routines: */ @@ -1272,6 +1303,7 @@ static void jbd2_write_superblock(journal_t *journal, int write_op) { struct buffer_head *bh = journal->j_sb_buffer; + journal_superblock_t *sb = journal->j_superblock; int ret; trace_jbd2_write_superblock(journal, write_op); @@ -1293,6 +1325,7 @@ clear_buffer_write_io_error(bh); set_buffer_uptodate(bh); } + jbd2_superblock_csum_set(journal, sb); get_bh(bh); bh->b_end_io = end_buffer_write_sync; ret = submit_bh(write_op, bh); @@ -1389,7 +1422,6 @@ jbd_debug(1, "JBD2: updating superblock error (errno %d)\n", journal->j_errno); sb->s_errno = cpu_to_be32(journal->j_errno); - jbd2_superblock_csum_set(journal, sb); read_unlock(&journal->j_state_lock); jbd2_write_superblock(journal, WRITE_SYNC); --- linux-lts-raring-3.8.0.orig/fs/hpfs/super.c +++ linux-lts-raring-3.8.0/fs/hpfs/super.c @@ -558,7 +558,13 @@ sbi->sb_cp_table = NULL; sbi->sb_c_bitmap = -1; sbi->sb_max_fwd_alloc = 0xffffff; - + + if (sbi->sb_fs_size >= 0x80000000) { + hpfs_error(s, "invalid size in superblock: %08x", + (unsigned)sbi->sb_fs_size); + goto bail4; + } + /* Load bitmap directory */ if (!(sbi->sb_bmp_dir = hpfs_load_bitmap_directory(s, le32_to_cpu(superblock->bitmaps)))) goto bail4; --- linux-lts-raring-3.8.0.orig/fs/hpfs/file.c +++ linux-lts-raring-3.8.0/fs/hpfs/file.c @@ -109,10 +109,14 @@ { struct inode *inode = mapping->host; + hpfs_lock(inode->i_sb); + if (to > inode->i_size) { truncate_pagecache(inode, to, inode->i_size); hpfs_truncate(inode); } + + hpfs_unlock(inode->i_sb); } static int hpfs_write_begin(struct file *file, struct address_space *mapping, --- linux-lts-raring-3.8.0.orig/fs/hpfs/map.c +++ linux-lts-raring-3.8.0/fs/hpfs/map.c @@ -17,7 +17,8 @@ struct quad_buffer_head *qbh, char *id) { secno sec; - if (hpfs_sb(s)->sb_chk) if (bmp_block * 16384 > hpfs_sb(s)->sb_fs_size) { + unsigned n_bands = (hpfs_sb(s)->sb_fs_size + 0x3fff) >> 14; + if (hpfs_sb(s)->sb_chk) if (bmp_block >= n_bands) { hpfs_error(s, "hpfs_map_bitmap called with bad parameter: %08x at %s", bmp_block, id); return NULL; } --- linux-lts-raring-3.8.0.orig/fs/gfs2/bmap.c +++ linux-lts-raring-3.8.0/fs/gfs2/bmap.c @@ -1286,6 +1286,10 @@ inode_dio_wait(inode); + ret = gfs2_rs_alloc(GFS2_I(inode)); + if (ret) + return ret; + oldsize = inode->i_size; if (newsize >= oldsize) return do_grow(inode, newsize); --- linux-lts-raring-3.8.0.orig/fs/gfs2/file.c +++ linux-lts-raring-3.8.0/fs/gfs2/file.c @@ -924,8 +924,11 @@ cmd = F_SETLK; fl->fl_type = F_UNLCK; } - if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) + if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) { + if (fl->fl_type == F_UNLCK) + posix_lock_file_wait(file, fl); return -EIO; + } if (IS_GETLK(cmd)) return dlm_posix_get(ls->ls_dlm, ip->i_no_addr, file, fl); else if (fl->fl_type == F_UNLCK) --- linux-lts-raring-3.8.0.orig/fs/gfs2/rgrp.c +++ linux-lts-raring-3.8.0/fs/gfs2/rgrp.c @@ -576,7 +576,7 @@ RB_CLEAR_NODE(&ip->i_res->rs_node); out: up_write(&ip->i_rw_mutex); - return 0; + return error; } static void dump_rs(struct seq_file *seq, const struct gfs2_blkreserv *rs) --- linux-lts-raring-3.8.0.orig/fs/btrfs/delayed-ref.c +++ linux-lts-raring-3.8.0/fs/btrfs/delayed-ref.c @@ -36,16 +36,19 @@ * compare two delayed tree backrefs with same bytenr and type */ static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2, - struct btrfs_delayed_tree_ref *ref1) + struct btrfs_delayed_tree_ref *ref1, int type) { - if (ref1->root < ref2->root) - return -1; - if (ref1->root > ref2->root) - return 1; - if (ref1->parent < ref2->parent) - return -1; - if (ref1->parent > ref2->parent) - return 1; + if (type == BTRFS_TREE_BLOCK_REF_KEY) { + if (ref1->root < ref2->root) + return -1; + if (ref1->root > ref2->root) + return 1; + } else { + if (ref1->parent < ref2->parent) + return -1; + if (ref1->parent > ref2->parent) + return 1; + } return 0; } @@ -109,7 +112,8 @@ if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY || ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) { return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2), - btrfs_delayed_node_to_tree_ref(ref1)); + btrfs_delayed_node_to_tree_ref(ref1), + ref1->type); } else if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY || ref1->type == BTRFS_SHARED_DATA_REF_KEY) { return comp_data_refs(btrfs_delayed_node_to_data_ref(ref2), --- linux-lts-raring-3.8.0.orig/fs/btrfs/scrub.c +++ linux-lts-raring-3.8.0/fs/btrfs/scrub.c @@ -541,7 +541,6 @@ eb = path->nodes[0]; ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item); item_size = btrfs_item_size_nr(eb, path->slots[0]); - btrfs_release_path(path); if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) { do { @@ -557,7 +556,9 @@ ret < 0 ? -1 : ref_level, ret < 0 ? -1 : ref_root); } while (ret != 1); + btrfs_release_path(path); } else { + btrfs_release_path(path); swarn.path = path; swarn.dev = dev; iterate_extent_inodes(fs_info, found_key.objectid, --- linux-lts-raring-3.8.0.orig/fs/btrfs/extent_io.c +++ linux-lts-raring-3.8.0/fs/btrfs/extent_io.c @@ -1258,6 +1258,39 @@ GFP_NOFS); } +int extent_range_clear_dirty_for_io(struct inode *inode, u64 start, u64 end) +{ + unsigned long index = start >> PAGE_CACHE_SHIFT; + unsigned long end_index = end >> PAGE_CACHE_SHIFT; + struct page *page; + + while (index <= end_index) { + page = find_get_page(inode->i_mapping, index); + BUG_ON(!page); /* Pages should be in the extent_io_tree */ + clear_page_dirty_for_io(page); + page_cache_release(page); + index++; + } + return 0; +} + +int extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end) +{ + unsigned long index = start >> PAGE_CACHE_SHIFT; + unsigned long end_index = end >> PAGE_CACHE_SHIFT; + struct page *page; + + while (index <= end_index) { + page = find_get_page(inode->i_mapping, index); + BUG_ON(!page); /* Pages should be in the extent_io_tree */ + account_page_redirty(page); + __set_page_dirty_nobuffers(page); + page_cache_release(page); + index++; + } + return 0; +} + /* * helper function to set both pages and extents in the tree writeback */ --- linux-lts-raring-3.8.0.orig/fs/btrfs/inode.c +++ linux-lts-raring-3.8.0/fs/btrfs/inode.c @@ -265,6 +265,7 @@ return 1; } + set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); btrfs_delalloc_release_metadata(inode, end + 1 - start); btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); return 0; @@ -351,6 +352,7 @@ int i; int will_compress; int compress_type = root->fs_info->compress_type; + int redirty = 0; /* if this is a small write inside eof, kick off a defrag */ if ((end - start + 1) < 16 * 1024 && @@ -413,6 +415,17 @@ if (BTRFS_I(inode)->force_compress) compress_type = BTRFS_I(inode)->force_compress; + /* + * we need to call clear_page_dirty_for_io on each + * page in the range. Otherwise applications with the file + * mmap'd can wander in and change the page contents while + * we are compressing them. + * + * If the compression fails for any reason, we set the pages + * dirty again later on. + */ + extent_range_clear_dirty_for_io(inode, start, end); + redirty = 1; ret = btrfs_compress_pages(compress_type, inode->i_mapping, start, total_compressed, pages, @@ -554,6 +567,8 @@ __set_page_dirty_nobuffers(locked_page); /* unlocked later on in the async handlers */ } + if (redirty) + extent_range_redirty_for_io(inode, start, end); add_async_extent(async_cow, start, end - start + 1, 0, NULL, 0, BTRFS_COMPRESS_NONE); *num_added += 1; @@ -2469,6 +2484,7 @@ */ set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM, &BTRFS_I(inode)->runtime_flags); + atomic_inc(&root->orphan_inodes); /* if we have links, this was a truncate, lets do that */ if (inode->i_nlink) { @@ -2491,6 +2507,8 @@ goto out; ret = btrfs_truncate(inode); + if (ret) + btrfs_orphan_del(NULL, inode); } else { nr_unlink++; } @@ -5776,7 +5794,9 @@ * block must be cow'd */ static noinline int can_nocow_odirect(struct btrfs_trans_handle *trans, - struct inode *inode, u64 offset, u64 len) + struct inode *inode, u64 offset, u64 *len, + u64 *orig_start, u64 *orig_block_len, + u64 *ram_bytes) { struct btrfs_path *path; int ret; @@ -5833,8 +5853,12 @@ disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi); backref_offset = btrfs_file_extent_offset(leaf, fi); + *orig_start = key.offset - backref_offset; + *orig_block_len = btrfs_file_extent_disk_num_bytes(leaf, fi); + *ram_bytes = btrfs_file_extent_ram_bytes(leaf, fi); + extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi); - if (extent_end < offset + len) { + if (extent_end < offset + *len) { /* extent doesn't include our full range, must cow */ goto out; } @@ -5858,13 +5882,14 @@ */ disk_bytenr += backref_offset; disk_bytenr += offset - key.offset; - num_bytes = min(offset + len, extent_end) - offset; + num_bytes = min(offset + *len, extent_end) - offset; if (csum_exist_in_range(root, disk_bytenr, num_bytes)) goto out; /* * all of the above have passed, it is safe to overwrite this extent * without cow */ + *len = num_bytes; ret = 1; out: btrfs_free_path(path); @@ -6074,7 +6099,7 @@ em->block_start != EXTENT_MAP_HOLE)) { int type; int ret; - u64 block_start; + u64 block_start, orig_start, orig_block_len, ram_bytes; if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) type = BTRFS_ORDERED_PREALLOC; @@ -6092,10 +6117,8 @@ if (IS_ERR(trans)) goto must_cow; - if (can_nocow_odirect(trans, inode, start, len) == 1) { - u64 orig_start = em->orig_start; - u64 orig_block_len = em->orig_block_len; - + if (can_nocow_odirect(trans, inode, start, &len, &orig_start, + &orig_block_len, &ram_bytes) == 1) { if (type == BTRFS_ORDERED_PREALLOC) { free_extent_map(em); em = create_pinned_em(inode, start, len, --- linux-lts-raring-3.8.0.orig/fs/btrfs/volumes.c +++ linux-lts-raring-3.8.0/fs/btrfs/volumes.c @@ -647,6 +647,7 @@ new_device->writeable = 0; new_device->in_fs_metadata = 0; new_device->can_discard = 0; + spin_lock_init(&new_device->io_lock); list_replace_rcu(&device->dev_list, &new_device->dev_list); call_rcu(&device->rcu, free_device); @@ -680,6 +681,12 @@ __btrfs_close_devices(fs_devices); free_fs_devices(fs_devices); } + /* + * Wait for rcu kworkers under __btrfs_close_devices + * to finish all blkdev_puts so device is really + * free when umount is done. + */ + rcu_barrier(); return ret; } --- linux-lts-raring-3.8.0.orig/fs/btrfs/ioctl.c +++ linux-lts-raring-3.8.0/fs/btrfs/ioctl.c @@ -1767,7 +1767,11 @@ item_off = btrfs_item_ptr_offset(leaf, i); item_len = btrfs_item_size_nr(leaf, i); - if (item_len > BTRFS_SEARCH_ARGS_BUFSIZE) + btrfs_item_key_to_cpu(leaf, key, i); + if (!key_in_sk(key, sk)) + continue; + + if (sizeof(sh) + item_len > BTRFS_SEARCH_ARGS_BUFSIZE) item_len = 0; if (sizeof(sh) + item_len + *sk_offset > @@ -1776,10 +1780,6 @@ goto overflow; } - btrfs_item_key_to_cpu(leaf, key, i); - if (!key_in_sk(key, sk)) - continue; - sh.objectid = key->objectid; sh.offset = key->offset; sh.type = key->type; --- linux-lts-raring-3.8.0.orig/fs/btrfs/extent_io.h +++ linux-lts-raring-3.8.0/fs/btrfs/extent_io.h @@ -329,6 +329,8 @@ unsigned long *map_len); int extent_range_uptodate(struct extent_io_tree *tree, u64 start, u64 end); +int extent_range_clear_dirty_for_io(struct inode *inode, u64 start, u64 end); +int extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end); int extent_clear_unlock_delalloc(struct inode *inode, struct extent_io_tree *tree, u64 start, u64 end, struct page *locked_page, --- linux-lts-raring-3.8.0.orig/fs/btrfs/ctree.c +++ linux-lts-raring-3.8.0/fs/btrfs/ctree.c @@ -651,6 +651,8 @@ if (tree_mod_dont_log(fs_info, NULL)) return 0; + __tree_mod_log_free_eb(fs_info, old_root); + ret = tree_mod_alloc(fs_info, flags, &tm); if (ret < 0) goto out; @@ -736,7 +738,7 @@ static noinline void tree_mod_log_eb_copy(struct btrfs_fs_info *fs_info, struct extent_buffer *dst, struct extent_buffer *src, unsigned long dst_offset, - unsigned long src_offset, int nr_items) + unsigned long src_offset, int nr_items, int log_removal) { int ret; int i; @@ -750,10 +752,12 @@ } for (i = 0; i < nr_items; i++) { - ret = tree_mod_log_insert_key_locked(fs_info, src, - i + src_offset, - MOD_LOG_KEY_REMOVE); - BUG_ON(ret < 0); + if (log_removal) { + ret = tree_mod_log_insert_key_locked(fs_info, src, + i + src_offset, + MOD_LOG_KEY_REMOVE); + BUG_ON(ret < 0); + } ret = tree_mod_log_insert_key_locked(fs_info, dst, i + dst_offset, MOD_LOG_KEY_ADD); @@ -927,7 +931,6 @@ ret = btrfs_dec_ref(trans, root, buf, 1, 1); BUG_ON(ret); /* -ENOMEM */ } - tree_mod_log_free_eb(root->fs_info, buf); clean_tree_block(trans, root, buf); *last_ref = 1; } @@ -1046,6 +1049,8 @@ btrfs_set_node_ptr_generation(parent, parent_slot, trans->transid); btrfs_mark_buffer_dirty(parent); + if (last_ref) + tree_mod_log_free_eb(root->fs_info, buf); btrfs_free_tree_block(trans, root, buf, parent_start, last_ref); } @@ -1118,8 +1123,8 @@ * time_seq). */ static void -__tree_mod_log_rewind(struct extent_buffer *eb, u64 time_seq, - struct tree_mod_elem *first_tm) +__tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct extent_buffer *eb, + u64 time_seq, struct tree_mod_elem *first_tm) { u32 n; struct rb_node *next; @@ -1129,6 +1134,7 @@ unsigned long p_size = sizeof(struct btrfs_key_ptr); n = btrfs_header_nritems(eb); + tree_mod_log_read_lock(fs_info); while (tm && tm->seq >= time_seq) { /* * all the operations are recorded with the operator used for @@ -1182,9 +1188,17 @@ if (tm->index != first_tm->index) break; } + tree_mod_log_read_unlock(fs_info); btrfs_set_header_nritems(eb, n); } +/* + * Called with eb read locked. If the buffer cannot be rewinded, the same buffer + * is returned. If rewind operations happen, a fresh buffer is returned. The + * returned buffer is always read-locked. If the returned buffer is not the + * input buffer, the lock on the input buffer is released and the input buffer + * is freed (its refcount is decremented). + */ static struct extent_buffer * tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct extent_buffer *eb, u64 time_seq) @@ -1218,9 +1232,12 @@ } extent_buffer_get(eb_rewin); + btrfs_tree_read_unlock(eb); free_extent_buffer(eb); - __tree_mod_log_rewind(eb_rewin, time_seq, tm); + extent_buffer_get(eb_rewin); + btrfs_tree_read_lock(eb_rewin); + __tree_mod_log_rewind(fs_info, eb_rewin, time_seq, tm); WARN_ON(btrfs_header_nritems(eb_rewin) > BTRFS_NODEPTRS_PER_BLOCK(fs_info->fs_root)); @@ -1294,7 +1311,7 @@ btrfs_set_header_generation(eb, old_generation); } if (tm) - __tree_mod_log_rewind(eb, time_seq, tm); + __tree_mod_log_rewind(root->fs_info, eb, time_seq, tm); else WARN_ON(btrfs_header_level(eb) != 0); WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(root)); @@ -1755,7 +1772,6 @@ goto enospc; } - tree_mod_log_free_eb(root->fs_info, root->node); tree_mod_log_set_root_pointer(root, child); rcu_assign_pointer(root->node, child); @@ -2797,15 +2813,9 @@ btrfs_clear_path_blocking(p, b, BTRFS_READ_LOCK); } + b = tree_mod_log_rewind(root->fs_info, b, time_seq); p->locks[level] = BTRFS_READ_LOCK; p->nodes[level] = b; - b = tree_mod_log_rewind(root->fs_info, b, time_seq); - if (b != p->nodes[level]) { - btrfs_tree_unlock_rw(p->nodes[level], - p->locks[level]); - p->locks[level] = 0; - p->nodes[level] = b; - } } else { p->slots[level] = slot; unlock_up(p, level, lowest_unlock, 0, NULL); @@ -3000,7 +3010,7 @@ push_items = min(src_nritems - 8, push_items); tree_mod_log_eb_copy(root->fs_info, dst, src, dst_nritems, 0, - push_items); + push_items, 1); copy_extent_buffer(dst, src, btrfs_node_key_ptr_offset(dst_nritems), btrfs_node_key_ptr_offset(0), @@ -3071,7 +3081,7 @@ sizeof(struct btrfs_key_ptr)); tree_mod_log_eb_copy(root->fs_info, dst, src, 0, - src_nritems - push_items, push_items); + src_nritems - push_items, push_items, 1); copy_extent_buffer(dst, src, btrfs_node_key_ptr_offset(0), btrfs_node_key_ptr_offset(src_nritems - push_items), @@ -3223,12 +3233,18 @@ int mid; int ret; u32 c_nritems; + int tree_mod_log_removal = 1; c = path->nodes[level]; WARN_ON(btrfs_header_generation(c) != trans->transid); if (c == root->node) { /* trying to split the root, lets make a new one */ ret = insert_new_root(trans, root, path, level + 1); + /* + * removal of root nodes has been logged by + * tree_mod_log_set_root_pointer due to locking + */ + tree_mod_log_removal = 0; if (ret) return ret; } else { @@ -3266,7 +3282,8 @@ (unsigned long)btrfs_header_chunk_tree_uuid(split), BTRFS_UUID_SIZE); - tree_mod_log_eb_copy(root->fs_info, split, c, 0, mid, c_nritems - mid); + tree_mod_log_eb_copy(root->fs_info, split, c, 0, mid, c_nritems - mid, + tree_mod_log_removal); copy_extent_buffer(split, c, btrfs_node_key_ptr_offset(0), btrfs_node_key_ptr_offset(mid), --- linux-lts-raring-3.8.0.orig/fs/btrfs/tree-log.c +++ linux-lts-raring-3.8.0/fs/btrfs/tree-log.c @@ -318,6 +318,7 @@ unsigned long src_ptr; unsigned long dst_ptr; int overwrite_root = 0; + bool inode_item = key->type == BTRFS_INODE_ITEM_KEY; if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) overwrite_root = 1; @@ -327,6 +328,9 @@ /* look for the key in the destination tree */ ret = btrfs_search_slot(NULL, root, key, path, 0, 0); + if (ret < 0) + return ret; + if (ret == 0) { char *src_copy; char *dst_copy; @@ -368,6 +372,30 @@ return 0; } + /* + * We need to load the old nbytes into the inode so when we + * replay the extents we've logged we get the right nbytes. + */ + if (inode_item) { + struct btrfs_inode_item *item; + u64 nbytes; + + item = btrfs_item_ptr(path->nodes[0], path->slots[0], + struct btrfs_inode_item); + nbytes = btrfs_inode_nbytes(path->nodes[0], item); + item = btrfs_item_ptr(eb, slot, + struct btrfs_inode_item); + btrfs_set_inode_nbytes(eb, item, nbytes); + } + } else if (inode_item) { + struct btrfs_inode_item *item; + + /* + * New inode, set nbytes to 0 so that the nbytes comes out + * properly when we replay the extents. + */ + item = btrfs_item_ptr(eb, slot, struct btrfs_inode_item); + btrfs_set_inode_nbytes(eb, item, 0); } insert: btrfs_release_path(path); @@ -488,7 +516,7 @@ u64 mask = root->sectorsize - 1; u64 extent_end; u64 start = key->offset; - u64 saved_nbytes; + u64 nbytes = 0; struct btrfs_file_extent_item *item; struct inode *inode = NULL; unsigned long size; @@ -498,10 +526,19 @@ found_type = btrfs_file_extent_type(eb, item); if (found_type == BTRFS_FILE_EXTENT_REG || - found_type == BTRFS_FILE_EXTENT_PREALLOC) - extent_end = start + btrfs_file_extent_num_bytes(eb, item); - else if (found_type == BTRFS_FILE_EXTENT_INLINE) { + found_type == BTRFS_FILE_EXTENT_PREALLOC) { + nbytes = btrfs_file_extent_num_bytes(eb, item); + extent_end = start + nbytes; + + /* + * We don't add to the inodes nbytes if we are prealloc or a + * hole. + */ + if (btrfs_file_extent_disk_bytenr(eb, item) == 0) + nbytes = 0; + } else if (found_type == BTRFS_FILE_EXTENT_INLINE) { size = btrfs_file_extent_inline_len(eb, item); + nbytes = btrfs_file_extent_ram_bytes(eb, item); extent_end = (start + size + mask) & ~mask; } else { ret = 0; @@ -550,7 +587,6 @@ } btrfs_release_path(path); - saved_nbytes = inode_get_bytes(inode); /* drop any overlapping extents */ ret = btrfs_drop_extents(trans, root, inode, start, extent_end, 1); BUG_ON(ret); @@ -637,7 +673,7 @@ BUG_ON(ret); } - inode_set_bytes(inode, saved_nbytes); + inode_add_bytes(inode, nbytes); ret = btrfs_update_inode(trans, root, inode); out: if (inode) @@ -1384,7 +1420,10 @@ btrfs_release_path(path); if (ret == 0) { - btrfs_inc_nlink(inode); + if (!inode->i_nlink) + set_nlink(inode, 1); + else + btrfs_inc_nlink(inode); ret = btrfs_update_inode(trans, root, inode); } else if (ret == -EEXIST) { ret = 0; @@ -3281,6 +3320,7 @@ int ret; bool skip_csum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; +insert: INIT_LIST_HEAD(&ordered_sums); btrfs_init_map_token(&token); key.objectid = btrfs_ino(inode); @@ -3296,6 +3336,23 @@ leaf = path->nodes[0]; fi = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_file_extent_item); + + /* + * If we are overwriting an inline extent with a real one then we need + * to just delete the inline extent as it may not be large enough to + * have the entire file_extent_item. + */ + if (ret && btrfs_token_file_extent_type(leaf, fi, &token) == + BTRFS_FILE_EXTENT_INLINE) { + ret = btrfs_del_item(trans, log, path); + btrfs_release_path(path); + if (ret) { + path->really_keep_locks = 0; + return ret; + } + goto insert; + } + btrfs_set_token_file_extent_generation(leaf, fi, em->generation, &token); if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) { @@ -3627,8 +3684,9 @@ } log_extents: + btrfs_release_path(path); + btrfs_release_path(dst_path); if (fast_search) { - btrfs_release_path(dst_path); ret = btrfs_log_changed_extents(trans, root, inode, dst_path); if (ret) { err = ret; @@ -3645,8 +3703,6 @@ } if (inode_only == LOG_INODE_ALL && S_ISDIR(inode->i_mode)) { - btrfs_release_path(path); - btrfs_release_path(dst_path); ret = log_directory_changes(trans, root, inode, path, dst_path); if (ret) { err = ret; --- linux-lts-raring-3.8.0.orig/fs/btrfs/extent-tree.c +++ linux-lts-raring-3.8.0/fs/btrfs/extent-tree.c @@ -4308,7 +4308,7 @@ spin_lock(&sinfo->lock); spin_lock(&block_rsv->lock); - block_rsv->size = num_bytes; + block_rsv->size = min_t(u64, num_bytes, 512 * 1024 * 1024); num_bytes = sinfo->bytes_used + sinfo->bytes_pinned + sinfo->bytes_reserved + sinfo->bytes_readonly + @@ -4601,14 +4601,49 @@ * If the inodes csum_bytes is the same as the original * csum_bytes then we know we haven't raced with any free()ers * so we can just reduce our inodes csum bytes and carry on. - * Otherwise we have to do the normal free thing to account for - * the case that the free side didn't free up its reserve - * because of this outstanding reservation. */ - if (BTRFS_I(inode)->csum_bytes == csum_bytes) + if (BTRFS_I(inode)->csum_bytes == csum_bytes) { calc_csum_metadata_size(inode, num_bytes, 0); - else - to_free = calc_csum_metadata_size(inode, num_bytes, 0); + } else { + u64 orig_csum_bytes = BTRFS_I(inode)->csum_bytes; + u64 bytes; + + /* + * This is tricky, but first we need to figure out how much we + * free'd from any free-ers that occured during this + * reservation, so we reset ->csum_bytes to the csum_bytes + * before we dropped our lock, and then call the free for the + * number of bytes that were freed while we were trying our + * reservation. + */ + bytes = csum_bytes - BTRFS_I(inode)->csum_bytes; + BTRFS_I(inode)->csum_bytes = csum_bytes; + to_free = calc_csum_metadata_size(inode, bytes, 0); + + + /* + * Now we need to see how much we would have freed had we not + * been making this reservation and our ->csum_bytes were not + * artificially inflated. + */ + BTRFS_I(inode)->csum_bytes = csum_bytes - num_bytes; + bytes = csum_bytes - orig_csum_bytes; + bytes = calc_csum_metadata_size(inode, bytes, 0); + + /* + * Now reset ->csum_bytes to what it should be. If bytes is + * more than to_free then we would have free'd more space had we + * not had an artificially high ->csum_bytes, so we need to free + * the remainder. If bytes is the same or less then we don't + * need to do anything, the other free-ers did the correct + * thing. + */ + BTRFS_I(inode)->csum_bytes = orig_csum_bytes - num_bytes; + if (bytes > to_free) + to_free = bytes - to_free; + else + to_free = 0; + } spin_unlock(&BTRFS_I(inode)->lock); if (dropped) to_free += btrfs_calc_trans_metadata_size(root, dropped); @@ -6931,6 +6966,7 @@ int err = 0; int ret; int level; + bool root_dropped = false; path = btrfs_alloc_path(); if (!path) { @@ -6988,6 +7024,7 @@ while (1) { btrfs_tree_lock(path->nodes[level]); btrfs_set_lock_blocking(path->nodes[level]); + path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; ret = btrfs_lookup_extent_info(trans, root, path->nodes[level]->start, @@ -7004,6 +7041,7 @@ break; btrfs_tree_unlock(path->nodes[level]); + path->locks[level] = 0; WARN_ON(wc->refs[level] != 1); level--; } @@ -7099,12 +7137,22 @@ free_extent_buffer(root->commit_root); kfree(root); } + root_dropped = true; out_end_trans: btrfs_end_transaction_throttle(trans, tree_root); out_free: kfree(wc); btrfs_free_path(path); out: + /* + * So if we need to stop dropping the snapshot for whatever reason we + * need to make sure to add it back to the dead root list so that we + * keep trying to do the work later. This also cleans up roots if we + * don't have it in the radix (like when we recover after a power fail + * or unmount) so we don't leak memory. + */ + if (root_dropped == false) + btrfs_add_dead_root(root); if (err) btrfs_std_error(root->fs_info, err); return err; --- linux-lts-raring-3.8.0.orig/fs/ncpfs/dir.c +++ linux-lts-raring-3.8.0/fs/ncpfs/dir.c @@ -1033,15 +1033,6 @@ DPRINTK("ncp_rmdir: removing %s/%s\n", dentry->d_parent->d_name.name, dentry->d_name.name); - /* - * fail with EBUSY if there are still references to this - * directory. - */ - dentry_unhash(dentry); - error = -EBUSY; - if (!d_unhashed(dentry)) - goto out; - len = sizeof(__name); error = ncp_io2vol(server, __name, &len, dentry->d_name.name, dentry->d_name.len, !ncp_preserve_case(dir)); --- linux-lts-raring-3.8.0.orig/fs/fuse/dir.c +++ linux-lts-raring-3.8.0/fs/fuse/dir.c @@ -682,7 +682,14 @@ spin_lock(&fc->lock); fi->attr_version = ++fc->attr_version; - drop_nlink(inode); + /* + * If i_nlink == 0 then unlink doesn't make sense, yet this can + * happen if userspace filesystem is careless. It would be + * difficult to enforce correct nlink usage so just ignore this + * condition here + */ + if (inode->i_nlink > 0) + drop_nlink(inode); spin_unlock(&fc->lock); fuse_invalidate_attr(inode); fuse_invalidate_attr(dir); @@ -1141,6 +1148,8 @@ return -EIO; if (reclen > nbytes) break; + if (memchr(dirent->name, '/', dirent->namelen) != NULL) + return -EIO; over = filldir(dstbuf, dirent->name, dirent->namelen, file->f_pos, dirent->ino, dirent->type); @@ -1541,6 +1550,8 @@ fc->no_setxattr = 1; err = -EOPNOTSUPP; } + if (!err) + fuse_invalidate_attr(inode); return err; } @@ -1670,6 +1681,8 @@ fc->no_removexattr = 1; err = -EOPNOTSUPP; } + if (!err) + fuse_invalidate_attr(inode); return err; } --- linux-lts-raring-3.8.0.orig/fs/fuse/file.c +++ linux-lts-raring-3.8.0/fs/fuse/file.c @@ -1299,7 +1299,6 @@ inc_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK); inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); - end_page_writeback(page); spin_lock(&fc->lock); list_add(&req->writepages_entry, &fi->writepages); @@ -1307,6 +1306,8 @@ fuse_flush_writepages(inode); spin_unlock(&fc->lock); + end_page_writeback(page); + return 0; err_free: --- linux-lts-raring-3.8.0.orig/fs/exofs/ore_raid.c +++ linux-lts-raring-3.8.0/fs/exofs/ore_raid.c @@ -432,7 +432,7 @@ if (!bio) continue; - __bio_for_each_segment(bv, bio, i, 0) { + bio_for_each_segment_all(bv, bio, i) { struct page *page = bv->bv_page; SetPageUptodate(page); --- linux-lts-raring-3.8.0.orig/fs/exofs/ore.c +++ linux-lts-raring-3.8.0/fs/exofs/ore.c @@ -401,7 +401,7 @@ struct bio_vec *bv; unsigned i; - __bio_for_each_segment(bv, bio, i, 0) { + bio_for_each_segment_all(bv, bio, i) { unsigned this_count = bv->bv_len; if (likely(PAGE_SIZE == this_count)) --- linux-lts-raring-3.8.0.orig/fs/sysfs/dir.c +++ linux-lts-raring-3.8.0/fs/sysfs/dir.c @@ -1012,6 +1012,7 @@ enum kobj_ns_type type; const void *ns; ino_t ino; + loff_t off; type = sysfs_ns_type(parent_sd); ns = sysfs_info(dentry->d_sb)->ns[type]; @@ -1020,6 +1021,8 @@ ino = parent_sd->s_ino; if (filldir(dirent, ".", 1, filp->f_pos, ino, DT_DIR) == 0) filp->f_pos++; + else + return 0; } if (filp->f_pos == 1) { if (parent_sd->s_parent) @@ -1028,8 +1031,11 @@ ino = parent_sd->s_ino; if (filldir(dirent, "..", 2, filp->f_pos, ino, DT_DIR) == 0) filp->f_pos++; + else + return 0; } mutex_lock(&sysfs_mutex); + off = filp->f_pos; for (pos = sysfs_dir_pos(ns, parent_sd, filp->f_pos, pos); pos; pos = sysfs_dir_next_pos(ns, parent_sd, filp->f_pos, pos)) { @@ -1041,27 +1047,43 @@ len = strlen(name); ino = pos->s_ino; type = dt_type(pos); - filp->f_pos = pos->s_hash; + off = filp->f_pos = pos->s_hash; filp->private_data = sysfs_get(pos); mutex_unlock(&sysfs_mutex); - ret = filldir(dirent, name, len, filp->f_pos, ino, type); + ret = filldir(dirent, name, len, off, ino, type); mutex_lock(&sysfs_mutex); if (ret < 0) break; } mutex_unlock(&sysfs_mutex); - if ((filp->f_pos > 1) && !pos) { /* EOF */ - filp->f_pos = INT_MAX; + + /* don't reference last entry if its refcount is dropped */ + if (!pos) { filp->private_data = NULL; + + /* EOF and not changed as 0 or 1 in read/write path */ + if (off == filp->f_pos && off > 1) + filp->f_pos = INT_MAX; } return 0; } +static loff_t sysfs_dir_llseek(struct file *file, loff_t offset, int whence) +{ + struct inode *inode = file->f_path.dentry->d_inode; + loff_t ret; + + mutex_lock(&inode->i_mutex); + ret = generic_file_llseek(file, offset, whence); + mutex_unlock(&inode->i_mutex); + + return ret; +} const struct file_operations sysfs_dir_operations = { .read = generic_read_dir, .readdir = sysfs_readdir, .release = sysfs_dir_release, - .llseek = generic_file_llseek, + .llseek = sysfs_dir_llseek, }; --- linux-lts-raring-3.8.0.orig/fs/sysfs/mount.c +++ linux-lts-raring-3.8.0/fs/sysfs/mount.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "sysfs.h" @@ -111,6 +112,9 @@ struct super_block *sb; int error; + if (!(flags & MS_KERNMOUNT) && !current_user_ns()->may_mount_sysfs) + return ERR_PTR(-EPERM); + info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) return ERR_PTR(-ENOMEM); --- linux-lts-raring-3.8.0.orig/fs/ceph/super.h +++ linux-lts-raring-3.8.0/fs/ceph/super.h @@ -21,7 +21,7 @@ /* large granularity for statfs utilization stats to facilitate * large volume sizes on 32-bit machines. */ -#define CEPH_BLOCK_SHIFT 20 /* 1 MB */ +#define CEPH_BLOCK_SHIFT 22 /* 4 MB */ #define CEPH_BLOCK (1 << CEPH_BLOCK_SHIFT) #define CEPH_MOUNT_OPT_DIRSTAT (1<<4) /* `cat dirname` for stats */ @@ -847,8 +847,13 @@ extern int ceph_lock(struct file *file, int cmd, struct file_lock *fl); extern int ceph_flock(struct file *file, int cmd, struct file_lock *fl); extern void ceph_count_locks(struct inode *inode, int *p_num, int *f_num); -extern int ceph_encode_locks(struct inode *i, struct ceph_pagelist *p, - int p_locks, int f_locks); +extern int ceph_encode_locks_to_buffer(struct inode *inode, + struct ceph_filelock *flocks, + int num_fcntl_locks, + int num_flock_locks); +extern int ceph_locks_to_pagelist(struct ceph_filelock *flocks, + struct ceph_pagelist *pagelist, + int num_fcntl_locks, int num_flock_locks); extern int lock_to_ceph_filelock(struct file_lock *fl, struct ceph_filelock *c); /* debugfs.c */ --- linux-lts-raring-3.8.0.orig/fs/ceph/super.c +++ linux-lts-raring-3.8.0/fs/ceph/super.c @@ -71,8 +71,14 @@ /* * express utilization in terms of large blocks to avoid * overflow on 32-bit machines. + * + * NOTE: for the time being, we make bsize == frsize to humor + * not-yet-ancient versions of glibc that are broken. + * Someday, we will probably want to report a real block + * size... whatever that may mean for a network file system! */ buf->f_bsize = 1 << CEPH_BLOCK_SHIFT; + buf->f_frsize = 1 << CEPH_BLOCK_SHIFT; buf->f_blocks = le64_to_cpu(st.kb) >> (CEPH_BLOCK_SHIFT-10); buf->f_bfree = le64_to_cpu(st.kb_avail) >> (CEPH_BLOCK_SHIFT-10); buf->f_bavail = le64_to_cpu(st.kb_avail) >> (CEPH_BLOCK_SHIFT-10); @@ -80,7 +86,6 @@ buf->f_files = le64_to_cpu(st.num_objects); buf->f_ffree = -1; buf->f_namelen = NAME_MAX; - buf->f_frsize = PAGE_CACHE_SIZE; /* leave fsid little-endian, regardless of host endianness */ fsid = *(u64 *)(&monmap->fsid) ^ *((u64 *)&monmap->fsid + 1); --- linux-lts-raring-3.8.0.orig/fs/ceph/mds_client.c +++ linux-lts-raring-3.8.0/fs/ceph/mds_client.c @@ -336,9 +336,9 @@ atomic_read(&s->s_ref), atomic_read(&s->s_ref)-1); if (atomic_dec_and_test(&s->s_ref)) { if (s->s_auth.authorizer) - s->s_mdsc->fsc->client->monc.auth->ops->destroy_authorizer( - s->s_mdsc->fsc->client->monc.auth, - s->s_auth.authorizer); + ceph_auth_destroy_authorizer( + s->s_mdsc->fsc->client->monc.auth, + s->s_auth.authorizer); kfree(s); } } @@ -2445,39 +2445,44 @@ if (recon_state->flock) { int num_fcntl_locks, num_flock_locks; - struct ceph_pagelist_cursor trunc_point; + struct ceph_filelock *flocks; - ceph_pagelist_set_cursor(pagelist, &trunc_point); - do { - lock_flocks(); - ceph_count_locks(inode, &num_fcntl_locks, - &num_flock_locks); - rec.v2.flock_len = (2*sizeof(u32) + - (num_fcntl_locks+num_flock_locks) * - sizeof(struct ceph_filelock)); - unlock_flocks(); - - /* pre-alloc pagelist */ - ceph_pagelist_truncate(pagelist, &trunc_point); - err = ceph_pagelist_append(pagelist, &rec, reclen); - if (!err) - err = ceph_pagelist_reserve(pagelist, - rec.v2.flock_len); - - /* encode locks */ - if (!err) { - lock_flocks(); - err = ceph_encode_locks(inode, - pagelist, - num_fcntl_locks, - num_flock_locks); - unlock_flocks(); - } - } while (err == -ENOSPC); +encode_again: + lock_flocks(); + ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks); + unlock_flocks(); + flocks = kmalloc((num_fcntl_locks+num_flock_locks) * + sizeof(struct ceph_filelock), GFP_NOFS); + if (!flocks) { + err = -ENOMEM; + goto out_free; + } + lock_flocks(); + err = ceph_encode_locks_to_buffer(inode, flocks, + num_fcntl_locks, + num_flock_locks); + unlock_flocks(); + if (err) { + kfree(flocks); + if (err == -ENOSPC) + goto encode_again; + goto out_free; + } + /* + * number of encoded locks is stable, so copy to pagelist + */ + rec.v2.flock_len = cpu_to_le32(2*sizeof(u32) + + (num_fcntl_locks+num_flock_locks) * + sizeof(struct ceph_filelock)); + err = ceph_pagelist_append(pagelist, &rec, reclen); + if (!err) + err = ceph_locks_to_pagelist(flocks, pagelist, + num_fcntl_locks, + num_flock_locks); + kfree(flocks); } else { err = ceph_pagelist_append(pagelist, &rec, reclen); } - out_free: kfree(path); out_dput: @@ -3404,13 +3409,17 @@ struct ceph_auth_handshake *auth = &s->s_auth; if (force_new && auth->authorizer) { - if (ac->ops && ac->ops->destroy_authorizer) - ac->ops->destroy_authorizer(ac, auth->authorizer); + ceph_auth_destroy_authorizer(ac, auth->authorizer); auth->authorizer = NULL; } - if (!auth->authorizer && ac->ops && ac->ops->create_authorizer) { - int ret = ac->ops->create_authorizer(ac, CEPH_ENTITY_TYPE_MDS, - auth); + if (!auth->authorizer) { + int ret = ceph_auth_create_authorizer(ac, CEPH_ENTITY_TYPE_MDS, + auth); + if (ret) + return ERR_PTR(ret); + } else { + int ret = ceph_auth_update_authorizer(ac, CEPH_ENTITY_TYPE_MDS, + auth); if (ret) return ERR_PTR(ret); } @@ -3426,7 +3435,7 @@ struct ceph_mds_client *mdsc = s->s_mdsc; struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth; - return ac->ops->verify_authorizer_reply(ac, s->s_auth.authorizer, len); + return ceph_auth_verify_authorizer_reply(ac, s->s_auth.authorizer, len); } static int invalidate_authorizer(struct ceph_connection *con) @@ -3435,8 +3444,7 @@ struct ceph_mds_client *mdsc = s->s_mdsc; struct ceph_auth_client *ac = mdsc->fsc->client->monc.auth; - if (ac->ops->invalidate_authorizer) - ac->ops->invalidate_authorizer(ac, CEPH_ENTITY_TYPE_MDS); + ceph_auth_invalidate_authorizer(ac, CEPH_ENTITY_TYPE_MDS); return ceph_monc_validate_auth(&mdsc->fsc->client->monc); } --- linux-lts-raring-3.8.0.orig/fs/ceph/locks.c +++ linux-lts-raring-3.8.0/fs/ceph/locks.c @@ -191,27 +191,23 @@ } /** - * Encode the flock and fcntl locks for the given inode into the pagelist. - * Format is: #fcntl locks, sequential fcntl locks, #flock locks, - * sequential flock locks. - * Must be called with lock_flocks() already held. - * If we encounter more of a specific lock type than expected, - * we return the value 1. + * Encode the flock and fcntl locks for the given inode into the ceph_filelock + * array. Must be called with lock_flocks() already held. + * If we encounter more of a specific lock type than expected, return -ENOSPC. */ -int ceph_encode_locks(struct inode *inode, struct ceph_pagelist *pagelist, - int num_fcntl_locks, int num_flock_locks) +int ceph_encode_locks_to_buffer(struct inode *inode, + struct ceph_filelock *flocks, + int num_fcntl_locks, int num_flock_locks) { struct file_lock *lock; - struct ceph_filelock cephlock; int err = 0; int seen_fcntl = 0; int seen_flock = 0; + int l = 0; dout("encoding %d flock and %d fcntl locks", num_flock_locks, num_fcntl_locks); - err = ceph_pagelist_append(pagelist, &num_fcntl_locks, sizeof(u32)); - if (err) - goto fail; + for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) { if (lock->fl_flags & FL_POSIX) { ++seen_fcntl; @@ -219,19 +215,12 @@ err = -ENOSPC; goto fail; } - err = lock_to_ceph_filelock(lock, &cephlock); + err = lock_to_ceph_filelock(lock, &flocks[l]); if (err) goto fail; - err = ceph_pagelist_append(pagelist, &cephlock, - sizeof(struct ceph_filelock)); + ++l; } - if (err) - goto fail; } - - err = ceph_pagelist_append(pagelist, &num_flock_locks, sizeof(u32)); - if (err) - goto fail; for (lock = inode->i_flock; lock != NULL; lock = lock->fl_next) { if (lock->fl_flags & FL_FLOCK) { ++seen_flock; @@ -239,19 +228,51 @@ err = -ENOSPC; goto fail; } - err = lock_to_ceph_filelock(lock, &cephlock); + err = lock_to_ceph_filelock(lock, &flocks[l]); if (err) goto fail; - err = ceph_pagelist_append(pagelist, &cephlock, - sizeof(struct ceph_filelock)); + ++l; } - if (err) - goto fail; } fail: return err; } +/** + * Copy the encoded flock and fcntl locks into the pagelist. + * Format is: #fcntl locks, sequential fcntl locks, #flock locks, + * sequential flock locks. + * Returns zero on success. + */ +int ceph_locks_to_pagelist(struct ceph_filelock *flocks, + struct ceph_pagelist *pagelist, + int num_fcntl_locks, int num_flock_locks) +{ + int err = 0; + __le32 nlocks; + + nlocks = cpu_to_le32(num_fcntl_locks); + err = ceph_pagelist_append(pagelist, &nlocks, sizeof(nlocks)); + if (err) + goto out_fail; + + err = ceph_pagelist_append(pagelist, flocks, + num_fcntl_locks * sizeof(*flocks)); + if (err) + goto out_fail; + + nlocks = cpu_to_le32(num_flock_locks); + err = ceph_pagelist_append(pagelist, &nlocks, sizeof(nlocks)); + if (err) + goto out_fail; + + err = ceph_pagelist_append(pagelist, + &flocks[num_fcntl_locks], + num_flock_locks * sizeof(*flocks)); +out_fail: + return err; +} + /* * Given a pointer to a lock, convert it to a ceph filelock */ --- linux-lts-raring-3.8.0.orig/fs/ceph/ioctl.c +++ linux-lts-raring-3.8.0/fs/ceph/ioctl.c @@ -197,8 +197,10 @@ r = ceph_calc_file_object_mapping(&ci->i_layout, dl.file_offset, &len, &dl.object_no, &dl.object_offset, &olen); - if (r < 0) + if (r < 0) { + up_read(&osdc->map_sem); return -EIO; + } dl.file_offset -= dl.object_offset; dl.object_size = ceph_file_layout_object_size(ci->i_layout); dl.block_size = ceph_file_layout_su(ci->i_layout); --- linux-lts-raring-3.8.0.orig/fs/fat/inode.c +++ linux-lts-raring-3.8.0/fs/fat/inode.c @@ -1165,6 +1165,19 @@ return 0; } +static unsigned long calc_fat_clusters(struct super_block *sb) +{ + struct msdos_sb_info *sbi = MSDOS_SB(sb); + + /* Divide first to avoid overflow */ + if (sbi->fat_bits != 12) { + unsigned long ent_per_sec = sb->s_blocksize * 8 / sbi->fat_bits; + return ent_per_sec * sbi->fat_length; + } + + return sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; +} + /* * Read the super block of an MS-DOS FS. */ @@ -1363,7 +1376,7 @@ sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12; /* check that FAT table does not overflow */ - fat_clusters = sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; + fat_clusters = calc_fat_clusters(sb); total_clusters = min(total_clusters, fat_clusters - FAT_START_ENT); if (total_clusters > MAX_FAT(sb)) { if (!silent) --- linux-lts-raring-3.8.0.orig/fs/fscache/stats.c +++ linux-lts-raring-3.8.0/fs/fscache/stats.c @@ -287,5 +287,5 @@ .open = fscache_stats_open, .read = seq_read, .llseek = seq_lseek, - .release = seq_release, + .release = single_release, }; --- linux-lts-raring-3.8.0.orig/fs/ocfs2/suballoc.c +++ linux-lts-raring-3.8.0/fs/ocfs2/suballoc.c @@ -642,7 +642,7 @@ * cluster groups will be staying in cache for the duration of * this operation. */ - ac->ac_allow_chain_relink = 0; + ac->ac_disable_chain_relink = 1; /* Claim the first region */ status = ocfs2_block_group_claim_bits(osb, handle, ac, min_bits, @@ -1823,7 +1823,7 @@ * Do this *after* figuring out how many bits we're taking out * of our target group. */ - if (ac->ac_allow_chain_relink && + if (!ac->ac_disable_chain_relink && (prev_group_bh) && (ocfs2_block_group_reasonably_empty(bg, res->sr_bits))) { status = ocfs2_relink_block_group(handle, alloc_inode, @@ -1928,7 +1928,6 @@ victim = ocfs2_find_victim_chain(cl); ac->ac_chain = victim; - ac->ac_allow_chain_relink = 1; status = ocfs2_search_chain(ac, handle, bits_wanted, min_bits, res, &bits_left); @@ -1947,7 +1946,7 @@ * searching each chain in order. Don't allow chain relinking * because we only calculate enough journal credits for one * relink per alloc. */ - ac->ac_allow_chain_relink = 0; + ac->ac_disable_chain_relink = 1; for (i = 0; i < le16_to_cpu(cl->cl_next_free_rec); i ++) { if (i == victim) continue; --- linux-lts-raring-3.8.0.orig/fs/ocfs2/suballoc.h +++ linux-lts-raring-3.8.0/fs/ocfs2/suballoc.h @@ -49,7 +49,7 @@ /* these are used by the chain search */ u16 ac_chain; - int ac_allow_chain_relink; + int ac_disable_chain_relink; group_search_t *ac_group_search; u64 ac_last_group; --- linux-lts-raring-3.8.0.orig/fs/ocfs2/dlmglue.c +++ linux-lts-raring-3.8.0/fs/ocfs2/dlmglue.c @@ -2545,6 +2545,7 @@ * everything is up to the caller :) */ status = ocfs2_should_refresh_lock_res(lockres); if (status < 0) { + ocfs2_cluster_unlock(osb, lockres, level); mlog_errno(status); goto bail; } @@ -2553,8 +2554,10 @@ ocfs2_complete_lock_res_refresh(lockres, status); - if (status < 0) + if (status < 0) { + ocfs2_cluster_unlock(osb, lockres, level); mlog_errno(status); + } ocfs2_track_lock_refresh(lockres); } bail: --- linux-lts-raring-3.8.0.orig/fs/ocfs2/extent_map.c +++ linux-lts-raring-3.8.0/fs/ocfs2/extent_map.c @@ -782,7 +782,6 @@ cpos = map_start >> osb->s_clustersize_bits; mapping_end = ocfs2_clusters_for_bytes(inode->i_sb, map_start + map_len); - mapping_end -= cpos; is_last = 0; while (cpos < mapping_end && !is_last) { u32 fe_flags; @@ -791,7 +790,7 @@ &hole_size, &rec, &is_last); if (ret) { mlog_errno(ret); - goto out; + goto out_unlock; } if (rec.e_blkno == 0ULL) { --- linux-lts-raring-3.8.0.orig/fs/ocfs2/xattr.c +++ linux-lts-raring-3.8.0/fs/ocfs2/xattr.c @@ -6499,6 +6499,16 @@ } new_oi = OCFS2_I(args->new_inode); + /* + * Adjust extent record count to reserve space for extended attribute. + * Inline data count had been adjusted in ocfs2_duplicate_inline_data(). + */ + if (!(new_oi->ip_dyn_features & OCFS2_INLINE_DATA_FL) && + !(ocfs2_inode_is_fast_symlink(args->new_inode))) { + struct ocfs2_extent_list *el = &new_di->id2.i_list; + le16_add_cpu(&el->l_count, -(inline_size / + sizeof(struct ocfs2_extent_rec))); + } spin_lock(&new_oi->ip_lock); new_oi->ip_dyn_features |= OCFS2_HAS_XATTR_FL | OCFS2_INLINE_XATTR_FL; new_di->i_dyn_features = cpu_to_le16(new_oi->ip_dyn_features); @@ -7189,7 +7199,7 @@ struct buffer_head *dir_bh = NULL; ret = ocfs2_init_security_get(inode, dir, qstr, NULL); - if (!ret) { + if (ret) { mlog_errno(ret); goto leave; } --- linux-lts-raring-3.8.0.orig/fs/ocfs2/aops.c +++ linux-lts-raring-3.8.0/fs/ocfs2/aops.c @@ -593,9 +593,9 @@ level = ocfs2_iocb_rw_locked_level(iocb); ocfs2_rw_unlock(inode, level); + inode_dio_done(inode); if (is_async) aio_complete(iocb, ret, 0); - inode_dio_done(inode); } /* --- linux-lts-raring-3.8.0.orig/fs/nfsd/nfs4proc.c +++ linux-lts-raring-3.8.0/fs/nfsd/nfs4proc.c @@ -271,6 +271,7 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) { __be32 status; + int accmode = 0; /* We don't know the target directory, and therefore can not * set the change info @@ -284,9 +285,19 @@ open->op_truncate = (open->op_iattr.ia_valid & ATTR_SIZE) && (open->op_iattr.ia_size == 0); + /* + * In the delegation case, the client is telling us about an + * open that it *already* performed locally, some time ago. We + * should let it succeed now if possible. + * + * In the case of a CLAIM_FH open, on the other hand, the client + * may be counting on us to enforce permissions (the Linux 4.1 + * client uses this for normal opens, for example). + */ + if (open->op_claim_type == NFS4_OPEN_CLAIM_DELEG_CUR_FH) + accmode = NFSD_MAY_OWNER_OVERRIDE; - status = do_open_permission(rqstp, current_fh, open, - NFSD_MAY_OWNER_OVERRIDE); + status = do_open_permission(rqstp, current_fh, open, accmode); return status; } @@ -931,14 +942,14 @@ nfs4_lock_state(); status = nfs4_preprocess_stateid_op(SVC_NET(rqstp), cstate, stateid, WR_STATE, &filp); - if (filp) - get_file(filp); - nfs4_unlock_state(); - if (status) { + nfs4_unlock_state(); dprintk("NFSD: nfsd4_write: couldn't process stateid!\n"); return status; } + if (filp) + get_file(filp); + nfs4_unlock_state(); cnt = write->wr_buflen; write->wr_how_written = write->wr_stable_how; --- linux-lts-raring-3.8.0.orig/fs/nfsd/nfs4xdr.c +++ linux-lts-raring-3.8.0/fs/nfsd/nfs4xdr.c @@ -162,8 +162,8 @@ */ memcpy(p, argp->p, avail); /* step to next page */ - argp->p = page_address(argp->pagelist[0]); argp->pagelist++; + argp->p = page_address(argp->pagelist[0]); if (argp->pagelen < PAGE_SIZE) { argp->end = argp->p + (argp->pagelen>>2); argp->pagelen = 0; @@ -264,7 +264,7 @@ iattr->ia_valid |= ATTR_SIZE; } if (bmval[0] & FATTR4_WORD0_ACL) { - int nace; + u32 nace; struct nfs4_ace *ace; READ_BUF(4); len += 4; @@ -344,10 +344,7 @@ all 32 bits of 'nseconds'. */ READ_BUF(12); len += 12; - READ32(dummy32); - if (dummy32) - return nfserr_inval; - READ32(iattr->ia_atime.tv_sec); + READ64(iattr->ia_atime.tv_sec); READ32(iattr->ia_atime.tv_nsec); if (iattr->ia_atime.tv_nsec >= (u32)1000000000) return nfserr_inval; @@ -370,10 +367,7 @@ all 32 bits of 'nseconds'. */ READ_BUF(12); len += 12; - READ32(dummy32); - if (dummy32) - return nfserr_inval; - READ32(iattr->ia_mtime.tv_sec); + READ64(iattr->ia_mtime.tv_sec); READ32(iattr->ia_mtime.tv_nsec); if (iattr->ia_mtime.tv_nsec >= (u32)1000000000) return nfserr_inval; @@ -2386,8 +2380,7 @@ if (bmval1 & FATTR4_WORD1_TIME_ACCESS) { if ((buflen -= 12) < 0) goto out_resource; - WRITE32(0); - WRITE32(stat.atime.tv_sec); + WRITE64((s64)stat.atime.tv_sec); WRITE32(stat.atime.tv_nsec); } if (bmval1 & FATTR4_WORD1_TIME_DELTA) { @@ -2400,15 +2393,13 @@ if (bmval1 & FATTR4_WORD1_TIME_METADATA) { if ((buflen -= 12) < 0) goto out_resource; - WRITE32(0); - WRITE32(stat.ctime.tv_sec); + WRITE64((s64)stat.ctime.tv_sec); WRITE32(stat.ctime.tv_nsec); } if (bmval1 & FATTR4_WORD1_TIME_MODIFY) { if ((buflen -= 12) < 0) goto out_resource; - WRITE32(0); - WRITE32(stat.mtime.tv_sec); + WRITE64((s64)stat.mtime.tv_sec); WRITE32(stat.mtime.tv_nsec); } if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) { --- linux-lts-raring-3.8.0.orig/fs/nfsd/vfs.c +++ linux-lts-raring-3.8.0/fs/nfsd/vfs.c @@ -802,9 +802,10 @@ flags = O_WRONLY|O_LARGEFILE; } *filp = dentry_open(&path, flags, current_cred()); - if (IS_ERR(*filp)) + if (IS_ERR(*filp)) { host_err = PTR_ERR(*filp); - else { + *filp = NULL; + } else { host_err = ima_file_check(*filp, may_flags); if (may_flags & NFSD_MAY_64BIT_COOKIE) @@ -1013,6 +1014,7 @@ int host_err; int stable = *stablep; int use_wgather; + loff_t pos = offset; dentry = file->f_path.dentry; inode = dentry->d_inode; @@ -1025,7 +1027,7 @@ /* Write the data. */ oldfs = get_fs(); set_fs(KERNEL_DS); - host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset); + host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &pos); set_fs(oldfs); if (host_err < 0) goto out_nfserr; --- linux-lts-raring-3.8.0.orig/fs/nfsd/nfs4state.c +++ linux-lts-raring-3.8.0/fs/nfsd/nfs4state.c @@ -210,13 +210,7 @@ { if (atomic_dec_and_test(&fp->fi_access[oflag])) { nfs4_file_put_fd(fp, oflag); - /* - * It's also safe to get rid of the RDWR open *if* - * we no longer have need of the other kind of access - * or if we already have the other kind of open: - */ - if (fp->fi_fds[1-oflag] - || atomic_read(&fp->fi_access[1 - oflag]) == 0) + if (atomic_read(&fp->fi_access[1 - oflag]) == 0) nfs4_file_put_fd(fp, O_RDWR); } } @@ -1060,6 +1054,8 @@ } free_svc_cred(&clp->cl_cred); kfree(clp->cl_name.data); + idr_remove_all(&clp->cl_stateids); + idr_destroy(&clp->cl_stateids); kfree(clp); } --- linux-lts-raring-3.8.0.orig/fs/nfsd/nfs4recover.c +++ linux-lts-raring-3.8.0/fs/nfsd/nfs4recover.c @@ -146,7 +146,7 @@ * then disable recovery tracking. */ static void -legacy_recdir_name_error(int error) +legacy_recdir_name_error(struct nfs4_client *clp, int error) { printk(KERN_ERR "NFSD: unable to generate recoverydir " "name (%d).\n", error); @@ -159,9 +159,7 @@ if (error == -ENOENT) { printk(KERN_ERR "NFSD: disabling legacy clientid tracking. " "Reboot recovery will not function correctly!\n"); - - /* the argument is ignored by the legacy exit function */ - nfsd4_client_tracking_exit(NULL); + nfsd4_client_tracking_exit(clp->net); } } @@ -184,7 +182,7 @@ status = nfs4_make_rec_clidname(dname, &clp->cl_name); if (status) - return legacy_recdir_name_error(status); + return legacy_recdir_name_error(clp, status); status = nfs4_save_creds(&original_cred); if (status < 0) @@ -341,7 +339,7 @@ status = nfs4_make_rec_clidname(dname, &clp->cl_name); if (status) - return legacy_recdir_name_error(status); + return legacy_recdir_name_error(clp, status); status = mnt_want_write_file(nn->rec_file); if (status) @@ -601,7 +599,7 @@ status = nfs4_make_rec_clidname(dname, &clp->cl_name); if (status) { - legacy_recdir_name_error(status); + legacy_recdir_name_error(clp, status); return status; } --- linux-lts-raring-3.8.0.orig/fs/autofs4/expire.c +++ linux-lts-raring-3.8.0/fs/autofs4/expire.c @@ -61,15 +61,6 @@ /* This is an autofs submount, we can't expire it */ if (autofs_type_indirect(sbi->type)) goto done; - - /* - * Otherwise it's an offset mount and we need to check - * if we can umount its mount, if there is one. - */ - if (!d_mountpoint(path.dentry)) { - status = 0; - goto done; - } } /* Update the expiry counter if fs is busy */ --- linux-lts-raring-3.8.0.orig/fs/overlayfs/Kconfig +++ linux-lts-raring-3.8.0/fs/overlayfs/Kconfig @@ -0,0 +1,4 @@ +config OVERLAYFS_FS + tristate "Overlay filesystem support" + help + Add support for overlay filesystem. --- linux-lts-raring-3.8.0.orig/fs/overlayfs/super.c +++ linux-lts-raring-3.8.0/fs/overlayfs/super.c @@ -0,0 +1,685 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlayfs.h" + +MODULE_AUTHOR("Miklos Szeredi "); +MODULE_DESCRIPTION("Overlay filesystem"); +MODULE_LICENSE("GPL"); + +#define OVERLAYFS_SUPER_MAGIC 0x794c764f + +struct ovl_config { + char *lowerdir; + char *upperdir; +}; + +/* private information held for overlayfs's superblock */ +struct ovl_fs { + struct vfsmount *upper_mnt; + struct vfsmount *lower_mnt; + long lower_namelen; + /* pathnames of lower and upper dirs, for show_options */ + struct ovl_config config; +}; + +/* private information held for every overlayfs dentry */ +struct ovl_entry { + /* + * Keep "double reference" on upper dentries, so that + * d_delete() doesn't think it's OK to reset d_inode to NULL. + */ + struct dentry *__upperdentry; + struct dentry *lowerdentry; + union { + struct { + u64 version; + bool opaque; + }; + struct rcu_head rcu; + }; +}; + +const char *ovl_whiteout_xattr = "trusted.overlay.whiteout"; +const char *ovl_opaque_xattr = "trusted.overlay.opaque"; + + +enum ovl_path_type ovl_path_type(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + if (oe->__upperdentry) { + if (oe->lowerdentry && S_ISDIR(dentry->d_inode->i_mode)) + return OVL_PATH_MERGE; + else + return OVL_PATH_UPPER; + } else { + return OVL_PATH_LOWER; + } +} + +static struct dentry *ovl_upperdentry_dereference(struct ovl_entry *oe) +{ + struct dentry *upperdentry = ACCESS_ONCE(oe->__upperdentry); + smp_read_barrier_depends(); + return upperdentry; +} + +void ovl_path_upper(struct dentry *dentry, struct path *path) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + struct ovl_entry *oe = dentry->d_fsdata; + + path->mnt = ofs->upper_mnt; + path->dentry = ovl_upperdentry_dereference(oe); +} + +void ovl_path_lower(struct dentry *dentry, struct path *path) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + struct ovl_entry *oe = dentry->d_fsdata; + + path->mnt = ofs->lower_mnt; + path->dentry = oe->lowerdentry; +} + +enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path) +{ + + enum ovl_path_type type = ovl_path_type(dentry); + + if (type == OVL_PATH_LOWER) + ovl_path_lower(dentry, path); + else + ovl_path_upper(dentry, path); + + return type; +} + +struct dentry *ovl_dentry_upper(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + return ovl_upperdentry_dereference(oe); +} + +struct dentry *ovl_dentry_lower(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + return oe->lowerdentry; +} + +struct dentry *ovl_dentry_real(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + struct dentry *realdentry; + + realdentry = ovl_upperdentry_dereference(oe); + if (!realdentry) + realdentry = oe->lowerdentry; + + return realdentry; +} + +struct dentry *ovl_entry_real(struct ovl_entry *oe, bool *is_upper) +{ + struct dentry *realdentry; + + realdentry = ovl_upperdentry_dereference(oe); + if (realdentry) { + *is_upper = true; + } else { + realdentry = oe->lowerdentry; + *is_upper = false; + } + return realdentry; +} + +bool ovl_dentry_is_opaque(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + return oe->opaque; +} + +void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque) +{ + struct ovl_entry *oe = dentry->d_fsdata; + oe->opaque = opaque; +} + +void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + WARN_ON(!mutex_is_locked(&upperdentry->d_parent->d_inode->i_mutex)); + WARN_ON(oe->__upperdentry); + BUG_ON(!upperdentry->d_inode); + smp_wmb(); + oe->__upperdentry = dget(upperdentry); +} + +void ovl_dentry_version_inc(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); + oe->version++; +} + +u64 ovl_dentry_version_get(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); + return oe->version; +} + +bool ovl_is_whiteout(struct dentry *dentry) +{ + int res; + char val; + + if (!dentry) + return false; + if (!dentry->d_inode) + return false; + if (!S_ISLNK(dentry->d_inode->i_mode)) + return false; + + res = vfs_getxattr(dentry, ovl_whiteout_xattr, &val, 1); + if (res == 1 && val == 'y') + return true; + + return false; +} + +static bool ovl_is_opaquedir(struct dentry *dentry) +{ + int res; + char val; + + if (!S_ISDIR(dentry->d_inode->i_mode)) + return false; + + res = vfs_getxattr(dentry, ovl_opaque_xattr, &val, 1); + if (res == 1 && val == 'y') + return true; + + return false; +} + +static void ovl_entry_free(struct rcu_head *head) +{ + struct ovl_entry *oe = container_of(head, struct ovl_entry, rcu); + kfree(oe); +} + +static void ovl_dentry_release(struct dentry *dentry) +{ + struct ovl_entry *oe = dentry->d_fsdata; + + if (oe) { + dput(oe->__upperdentry); + dput(oe->__upperdentry); + dput(oe->lowerdentry); + call_rcu(&oe->rcu, ovl_entry_free); + } +} + +const struct dentry_operations ovl_dentry_operations = { + .d_release = ovl_dentry_release, +}; + +static struct ovl_entry *ovl_alloc_entry(void) +{ + return kzalloc(sizeof(struct ovl_entry), GFP_KERNEL); +} + +static inline struct dentry *ovl_lookup_real(struct dentry *dir, + struct qstr *name) +{ + struct dentry *dentry; + + mutex_lock(&dir->d_inode->i_mutex); + dentry = lookup_one_len(name->name, dir, name->len); + mutex_unlock(&dir->d_inode->i_mutex); + + if (IS_ERR(dentry)) { + if (PTR_ERR(dentry) == -ENOENT) + dentry = NULL; + } else if (!dentry->d_inode) { + dput(dentry); + dentry = NULL; + } + return dentry; +} + +static int ovl_do_lookup(struct dentry *dentry) +{ + struct ovl_entry *oe; + struct dentry *upperdir; + struct dentry *lowerdir; + struct dentry *upperdentry = NULL; + struct dentry *lowerdentry = NULL; + struct inode *inode = NULL; + int err; + + err = -ENOMEM; + oe = ovl_alloc_entry(); + if (!oe) + goto out; + + upperdir = ovl_dentry_upper(dentry->d_parent); + lowerdir = ovl_dentry_lower(dentry->d_parent); + + if (upperdir) { + upperdentry = ovl_lookup_real(upperdir, &dentry->d_name); + err = PTR_ERR(upperdentry); + if (IS_ERR(upperdentry)) + goto out_put_dir; + + if (lowerdir && upperdentry && + (S_ISLNK(upperdentry->d_inode->i_mode) || + S_ISDIR(upperdentry->d_inode->i_mode))) { + const struct cred *old_cred; + struct cred *override_cred; + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_dput_upper; + + /* CAP_SYS_ADMIN needed for getxattr */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + old_cred = override_creds(override_cred); + + if (ovl_is_opaquedir(upperdentry)) { + oe->opaque = true; + } else if (ovl_is_whiteout(upperdentry)) { + dput(upperdentry); + upperdentry = NULL; + oe->opaque = true; + } + revert_creds(old_cred); + put_cred(override_cred); + } + } + if (lowerdir && !oe->opaque) { + lowerdentry = ovl_lookup_real(lowerdir, &dentry->d_name); + err = PTR_ERR(lowerdentry); + if (IS_ERR(lowerdentry)) + goto out_dput_upper; + } + + if (lowerdentry && upperdentry && + (!S_ISDIR(upperdentry->d_inode->i_mode) || + !S_ISDIR(lowerdentry->d_inode->i_mode))) { + dput(lowerdentry); + lowerdentry = NULL; + oe->opaque = true; + } + + if (lowerdentry || upperdentry) { + struct dentry *realdentry; + + realdentry = upperdentry ? upperdentry : lowerdentry; + err = -ENOMEM; + inode = ovl_new_inode(dentry->d_sb, realdentry->d_inode->i_mode, + oe); + if (!inode) + goto out_dput; + ovl_copyattr(realdentry->d_inode, inode); + } + + if (upperdentry) + oe->__upperdentry = dget(upperdentry); + + if (lowerdentry) + oe->lowerdentry = lowerdentry; + + dentry->d_fsdata = oe; + dentry->d_op = &ovl_dentry_operations; + d_add(dentry, inode); + + return 0; + +out_dput: + dput(lowerdentry); +out_dput_upper: + dput(upperdentry); +out_put_dir: + kfree(oe); +out: + return err; +} + +struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, + unsigned int flags) +{ + int err = ovl_do_lookup(dentry); + + if (err) + return ERR_PTR(err); + + return NULL; +} + +struct file *ovl_path_open(struct path *path, int flags) +{ + path_get(path); + return dentry_open(path, flags, current_cred()); +} + +static void ovl_put_super(struct super_block *sb) +{ + struct ovl_fs *ufs = sb->s_fs_info; + + if (!(sb->s_flags & MS_RDONLY)) + mnt_drop_write(ufs->upper_mnt); + + mntput(ufs->upper_mnt); + mntput(ufs->lower_mnt); + + kfree(ufs->config.lowerdir); + kfree(ufs->config.upperdir); + kfree(ufs); +} + +static int ovl_remount_fs(struct super_block *sb, int *flagsp, char *data) +{ + int flags = *flagsp; + struct ovl_fs *ufs = sb->s_fs_info; + + /* When remounting rw or ro, we need to adjust the write access to the + * upper fs. + */ + if (((flags ^ sb->s_flags) & MS_RDONLY) == 0) + /* No change to readonly status */ + return 0; + + if (flags & MS_RDONLY) { + mnt_drop_write(ufs->upper_mnt); + return 0; + } else + return mnt_want_write(ufs->upper_mnt); +} + +/** + * ovl_statfs + * @sb: The overlayfs super block + * @buf: The struct kstatfs to fill in with stats + * + * Get the filesystem statistics. As writes always target the upper layer + * filesystem pass the statfs to the same filesystem. + */ +static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf) +{ + struct ovl_fs *ofs = dentry->d_sb->s_fs_info; + struct dentry *root_dentry = dentry->d_sb->s_root; + struct path path; + int err; + + ovl_path_upper(root_dentry, &path); + + err = vfs_statfs(&path, buf); + if (!err) { + buf->f_namelen = max(buf->f_namelen, ofs->lower_namelen); + buf->f_type = OVERLAYFS_SUPER_MAGIC; + } + + return err; +} + +/** + * ovl_show_options + * + * Prints the mount options for a given superblock. + * Returns zero; does not fail. + */ +static int ovl_show_options(struct seq_file *m, struct dentry *dentry) +{ + struct super_block *sb = dentry->d_sb; + struct ovl_fs *ufs = sb->s_fs_info; + + seq_printf(m, ",lowerdir=%s", ufs->config.lowerdir); + seq_printf(m, ",upperdir=%s", ufs->config.upperdir); + return 0; +} + +static const struct super_operations ovl_super_operations = { + .put_super = ovl_put_super, + .remount_fs = ovl_remount_fs, + .statfs = ovl_statfs, + .show_options = ovl_show_options, +}; + +enum { + Opt_lowerdir, + Opt_upperdir, + Opt_err, +}; + +static const match_table_t ovl_tokens = { + {Opt_lowerdir, "lowerdir=%s"}, + {Opt_upperdir, "upperdir=%s"}, + {Opt_err, NULL} +}; + +static int ovl_parse_opt(char *opt, struct ovl_config *config) +{ + char *p; + + config->upperdir = NULL; + config->lowerdir = NULL; + + while ((p = strsep(&opt, ",")) != NULL) { + int token; + substring_t args[MAX_OPT_ARGS]; + + if (!*p) + continue; + + token = match_token(p, ovl_tokens, args); + switch (token) { + case Opt_upperdir: + kfree(config->upperdir); + config->upperdir = match_strdup(&args[0]); + if (!config->upperdir) + return -ENOMEM; + break; + + case Opt_lowerdir: + kfree(config->lowerdir); + config->lowerdir = match_strdup(&args[0]); + if (!config->lowerdir) + return -ENOMEM; + break; + + default: + return -EINVAL; + } + } + return 0; +} + +static int ovl_fill_super(struct super_block *sb, void *data, int silent) +{ + struct path lowerpath; + struct path upperpath; + struct inode *root_inode; + struct dentry *root_dentry; + struct ovl_entry *oe; + struct ovl_fs *ufs; + struct kstatfs statfs; + int err; + + err = -ENOMEM; + ufs = kmalloc(sizeof(struct ovl_fs), GFP_KERNEL); + if (!ufs) + goto out; + + err = ovl_parse_opt((char *) data, &ufs->config); + if (err) + goto out_free_ufs; + + err = -EINVAL; + if (!ufs->config.upperdir || !ufs->config.lowerdir) { + printk(KERN_ERR "overlayfs: missing upperdir or lowerdir\n"); + goto out_free_config; + } + + oe = ovl_alloc_entry(); + if (oe == NULL) + goto out_free_config; + + err = kern_path(ufs->config.upperdir, LOOKUP_FOLLOW, &upperpath); + if (err) + goto out_free_oe; + + err = kern_path(ufs->config.lowerdir, LOOKUP_FOLLOW, &lowerpath); + if (err) + goto out_put_upperpath; + + err = -ENOTDIR; + if (!S_ISDIR(upperpath.dentry->d_inode->i_mode) || + !S_ISDIR(lowerpath.dentry->d_inode->i_mode)) + goto out_put_lowerpath; + + err = vfs_statfs(&lowerpath, &statfs); + if (err) { + printk(KERN_ERR "overlayfs: statfs failed on lowerpath\n"); + goto out_put_lowerpath; + } + ufs->lower_namelen = statfs.f_namelen; + + sb->s_stack_depth = max(upperpath.mnt->mnt_sb->s_stack_depth, + lowerpath.mnt->mnt_sb->s_stack_depth) + 1; + + err = -EINVAL; + if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { + printk(KERN_ERR "overlayfs: maximum fs stacking depth exceeded\n"); + goto out_put_lowerpath; + } + + + ufs->upper_mnt = clone_private_mount(&upperpath); + err = PTR_ERR(ufs->upper_mnt); + if (IS_ERR(ufs->upper_mnt)) { + printk(KERN_ERR "overlayfs: failed to clone upperpath\n"); + goto out_put_lowerpath; + } + + ufs->lower_mnt = clone_private_mount(&lowerpath); + err = PTR_ERR(ufs->lower_mnt); + if (IS_ERR(ufs->lower_mnt)) { + printk(KERN_ERR "overlayfs: failed to clone lowerpath\n"); + goto out_put_upper_mnt; + } + + /* + * Make lower_mnt R/O. That way fchmod/fchown on lower file + * will fail instead of modifying lower fs. + */ + ufs->lower_mnt->mnt_flags |= MNT_READONLY; + + /* If the upper fs is r/o, we mark overlayfs r/o too */ + if (ufs->upper_mnt->mnt_sb->s_flags & MS_RDONLY) + sb->s_flags |= MS_RDONLY; + + if (!(sb->s_flags & MS_RDONLY)) { + err = mnt_want_write(ufs->upper_mnt); + if (err) + goto out_put_lower_mnt; + } + + err = -ENOMEM; + root_inode = ovl_new_inode(sb, S_IFDIR, oe); + if (!root_inode) + goto out_drop_write; + + root_dentry = d_make_root(root_inode); + if (!root_dentry) + goto out_drop_write; + + mntput(upperpath.mnt); + mntput(lowerpath.mnt); + + oe->__upperdentry = dget(upperpath.dentry); + oe->lowerdentry = lowerpath.dentry; + + root_dentry->d_fsdata = oe; + root_dentry->d_op = &ovl_dentry_operations; + + sb->s_magic = OVERLAYFS_SUPER_MAGIC; + sb->s_op = &ovl_super_operations; + sb->s_root = root_dentry; + sb->s_fs_info = ufs; + + return 0; + +out_drop_write: + if (!(sb->s_flags & MS_RDONLY)) + mnt_drop_write(ufs->upper_mnt); +out_put_lower_mnt: + mntput(ufs->lower_mnt); +out_put_upper_mnt: + mntput(ufs->upper_mnt); +out_put_lowerpath: + path_put(&lowerpath); +out_put_upperpath: + path_put(&upperpath); +out_free_oe: + kfree(oe); +out_free_config: + kfree(ufs->config.lowerdir); + kfree(ufs->config.upperdir); +out_free_ufs: + kfree(ufs); +out: + return err; +} + +static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags, + const char *dev_name, void *raw_data) +{ + return mount_nodev(fs_type, flags, raw_data, ovl_fill_super); +} + +static struct file_system_type ovl_fs_type = { + .owner = THIS_MODULE, + .name = "overlayfs", + .mount = ovl_mount, + .kill_sb = kill_anon_super, +}; + +static int __init ovl_init(void) +{ + return register_filesystem(&ovl_fs_type); +} + +static void __exit ovl_exit(void) +{ + unregister_filesystem(&ovl_fs_type); +} + +module_init(ovl_init); +module_exit(ovl_exit); --- linux-lts-raring-3.8.0.orig/fs/overlayfs/Makefile +++ linux-lts-raring-3.8.0/fs/overlayfs/Makefile @@ -0,0 +1,7 @@ +# +# Makefile for the overlay filesystem. +# + +obj-$(CONFIG_OVERLAYFS_FS) += overlayfs.o + +overlayfs-objs := super.o inode.o dir.o readdir.o copy_up.o --- linux-lts-raring-3.8.0.orig/fs/overlayfs/inode.c +++ linux-lts-raring-3.8.0/fs/overlayfs/inode.c @@ -0,0 +1,372 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include "overlayfs.h" + +int ovl_setattr(struct dentry *dentry, struct iattr *attr) +{ + struct dentry *upperdentry; + int err; + + if ((attr->ia_valid & ATTR_SIZE) && !ovl_dentry_upper(dentry)) + err = ovl_copy_up_truncate(dentry, attr->ia_size); + else + err = ovl_copy_up(dentry); + if (err) + return err; + + upperdentry = ovl_dentry_upper(dentry); + + if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) + attr->ia_valid &= ~ATTR_MODE; + + mutex_lock(&upperdentry->d_inode->i_mutex); + err = notify_change(upperdentry, attr); + if (!err) + ovl_copyattr(upperdentry->d_inode, dentry->d_inode); + mutex_unlock(&upperdentry->d_inode->i_mutex); + + return err; +} + +static int ovl_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + struct path realpath; + + ovl_path_real(dentry, &realpath); + return vfs_getattr(realpath.mnt, realpath.dentry, stat); +} + +int ovl_permission(struct inode *inode, int mask) +{ + struct ovl_entry *oe; + struct dentry *alias = NULL; + struct inode *realinode; + struct dentry *realdentry; + bool is_upper; + int err; + + if (S_ISDIR(inode->i_mode)) { + oe = inode->i_private; + } else if (mask & MAY_NOT_BLOCK) { + return -ECHILD; + } else { + /* + * For non-directories find an alias and get the info + * from there. + */ + alias = d_find_any_alias(inode); + if (WARN_ON(!alias)) + return -ENOENT; + + oe = alias->d_fsdata; + } + + realdentry = ovl_entry_real(oe, &is_upper); + + /* Careful in RCU walk mode */ + realinode = ACCESS_ONCE(realdentry->d_inode); + if (!realinode) { + WARN_ON(!(mask & MAY_NOT_BLOCK)); + err = -ENOENT; + goto out_dput; + } + + if (mask & MAY_WRITE) { + umode_t mode = realinode->i_mode; + + /* + * Writes will always be redirected to upper layer, so + * ignore lower layer being read-only. + * + * If the overlay itself is read-only then proceed + * with the permission check, don't return EROFS. + * This will only happen if this is the lower layer of + * another overlayfs. + * + * If upper fs becomes read-only after the overlay was + * constructed return EROFS to prevent modification of + * upper layer. + */ + err = -EROFS; + if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) && + (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) + goto out_dput; + } + + err = __inode_permission(realinode, mask); +out_dput: + dput(alias); + return err; +} + + +struct ovl_link_data { + struct dentry *realdentry; + void *cookie; +}; + +static void *ovl_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + void *ret; + struct dentry *realdentry; + struct inode *realinode; + + realdentry = ovl_dentry_real(dentry); + realinode = realdentry->d_inode; + + if (WARN_ON(!realinode->i_op->follow_link)) + return ERR_PTR(-EPERM); + + ret = realinode->i_op->follow_link(realdentry, nd); + if (IS_ERR(ret)) + return ret; + + if (realinode->i_op->put_link) { + struct ovl_link_data *data; + + data = kmalloc(sizeof(struct ovl_link_data), GFP_KERNEL); + if (!data) { + realinode->i_op->put_link(realdentry, nd, ret); + return ERR_PTR(-ENOMEM); + } + data->realdentry = realdentry; + data->cookie = ret; + + return data; + } else { + return NULL; + } +} + +static void ovl_put_link(struct dentry *dentry, struct nameidata *nd, void *c) +{ + struct inode *realinode; + struct ovl_link_data *data = c; + + if (!data) + return; + + realinode = data->realdentry->d_inode; + realinode->i_op->put_link(data->realdentry, nd, data->cookie); + kfree(data); +} + +static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) +{ + struct path realpath; + struct inode *realinode; + + ovl_path_real(dentry, &realpath); + realinode = realpath.dentry->d_inode; + + if (!realinode->i_op->readlink) + return -EINVAL; + + touch_atime(&realpath); + + return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); +} + + +static bool ovl_is_private_xattr(const char *name) +{ + return strncmp(name, "trusted.overlay.", 14) == 0; +} + +int ovl_setxattr(struct dentry *dentry, const char *name, + const void *value, size_t size, int flags) +{ + int err; + struct dentry *upperdentry; + + if (ovl_is_private_xattr(name)) + return -EPERM; + + err = ovl_copy_up(dentry); + if (err) + return err; + + upperdentry = ovl_dentry_upper(dentry); + return vfs_setxattr(upperdentry, name, value, size, flags); +} + +ssize_t ovl_getxattr(struct dentry *dentry, const char *name, + void *value, size_t size) +{ + if (ovl_path_type(dentry->d_parent) == OVL_PATH_MERGE && + ovl_is_private_xattr(name)) + return -ENODATA; + + return vfs_getxattr(ovl_dentry_real(dentry), name, value, size); +} + +ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) +{ + ssize_t res; + int off; + + res = vfs_listxattr(ovl_dentry_real(dentry), list, size); + if (res <= 0 || size == 0) + return res; + + if (ovl_path_type(dentry->d_parent) != OVL_PATH_MERGE) + return res; + + /* filter out private xattrs */ + for (off = 0; off < res;) { + char *s = list + off; + size_t slen = strlen(s) + 1; + + BUG_ON(off + slen > res); + + if (ovl_is_private_xattr(s)) { + res -= slen; + memmove(s, s + slen, res - off); + } else { + off += slen; + } + } + + return res; +} + +int ovl_removexattr(struct dentry *dentry, const char *name) +{ + int err; + struct path realpath; + enum ovl_path_type type; + + if (ovl_path_type(dentry->d_parent) == OVL_PATH_MERGE && + ovl_is_private_xattr(name)) + return -ENODATA; + + type = ovl_path_real(dentry, &realpath); + if (type == OVL_PATH_LOWER) { + err = vfs_getxattr(realpath.dentry, name, NULL, 0); + if (err < 0) + return err; + + err = ovl_copy_up(dentry); + if (err) + return err; + + ovl_path_upper(dentry, &realpath); + } + + return vfs_removexattr(realpath.dentry, name); +} + +static bool ovl_open_need_copy_up(int flags, enum ovl_path_type type, + struct dentry *realdentry) +{ + if (type != OVL_PATH_LOWER) + return false; + + if (special_file(realdentry->d_inode->i_mode)) + return false; + + if (!(OPEN_FMODE(flags) & FMODE_WRITE) && !(flags & O_TRUNC)) + return false; + + return true; +} + +static int ovl_dentry_open(struct dentry *dentry, struct file *file, + const struct cred *cred) +{ + int err; + struct path realpath; + enum ovl_path_type type; + + type = ovl_path_real(dentry, &realpath); + if (ovl_open_need_copy_up(file->f_flags, type, realpath.dentry)) { + if (file->f_flags & O_TRUNC) + err = ovl_copy_up_truncate(dentry, 0); + else + err = ovl_copy_up(dentry); + if (err) + return err; + + ovl_path_upper(dentry, &realpath); + } + + return vfs_open(&realpath, file, cred); +} + +static const struct inode_operations ovl_file_inode_operations = { + .setattr = ovl_setattr, + .permission = ovl_permission, + .getattr = ovl_getattr, + .setxattr = ovl_setxattr, + .getxattr = ovl_getxattr, + .listxattr = ovl_listxattr, + .removexattr = ovl_removexattr, + .dentry_open = ovl_dentry_open, +}; + +static const struct inode_operations ovl_symlink_inode_operations = { + .setattr = ovl_setattr, + .follow_link = ovl_follow_link, + .put_link = ovl_put_link, + .readlink = ovl_readlink, + .getattr = ovl_getattr, + .setxattr = ovl_setxattr, + .getxattr = ovl_getxattr, + .listxattr = ovl_listxattr, + .removexattr = ovl_removexattr, +}; + +struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, + struct ovl_entry *oe) +{ + struct inode *inode; + + inode = new_inode(sb); + if (!inode) + return NULL; + + mode &= S_IFMT; + + inode->i_ino = get_next_ino(); + inode->i_mode = mode; + inode->i_flags |= S_NOATIME | S_NOCMTIME; + + switch (mode) { + case S_IFDIR: + inode->i_private = oe; + inode->i_op = &ovl_dir_inode_operations; + inode->i_fop = &ovl_dir_operations; + break; + + case S_IFLNK: + inode->i_op = &ovl_symlink_inode_operations; + break; + + case S_IFREG: + case S_IFSOCK: + case S_IFBLK: + case S_IFCHR: + case S_IFIFO: + inode->i_op = &ovl_file_inode_operations; + break; + + default: + WARN(1, "illegal file type: %i\n", mode); + iput(inode); + inode = NULL; + } + + return inode; + +} --- linux-lts-raring-3.8.0.orig/fs/overlayfs/dir.c +++ linux-lts-raring-3.8.0/fs/overlayfs/dir.c @@ -0,0 +1,604 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include "overlayfs.h" + +static const char *ovl_whiteout_symlink = "(overlay-whiteout)"; + +static int ovl_whiteout(struct dentry *upperdir, struct dentry *dentry) +{ + int err; + struct dentry *newdentry; + const struct cred *old_cred; + struct cred *override_cred; + + /* FIXME: recheck lower dentry to see if whiteout is really needed */ + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out; + + /* + * CAP_SYS_ADMIN for setxattr + * CAP_DAC_OVERRIDE for symlink creation + * CAP_FOWNER for unlink in sticky directory + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + override_cred->fsuid = GLOBAL_ROOT_UID; + override_cred->fsgid = GLOBAL_ROOT_GID; + old_cred = override_creds(override_cred); + + newdentry = lookup_one_len(dentry->d_name.name, upperdir, + dentry->d_name.len); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_put_cred; + + /* Just been removed within the same locked region */ + WARN_ON(newdentry->d_inode); + + err = vfs_symlink(upperdir->d_inode, newdentry, ovl_whiteout_symlink); + if (err) + goto out_dput; + + ovl_dentry_version_inc(dentry->d_parent); + + err = vfs_setxattr(newdentry, ovl_whiteout_xattr, "y", 1, 0); + if (err) + vfs_unlink(upperdir->d_inode, newdentry); + +out_dput: + dput(newdentry); +out_put_cred: + revert_creds(old_cred); + put_cred(override_cred); +out: + if (err) { + /* + * There's no way to recover from failure to whiteout. + * What should we do? Log a big fat error and... ? + */ + printk(KERN_ERR "overlayfs: ERROR - failed to whiteout '%s'\n", + dentry->d_name.name); + } + + return err; +} + +static struct dentry *ovl_lookup_create(struct dentry *upperdir, + struct dentry *template) +{ + int err; + struct dentry *newdentry; + struct qstr *name = &template->d_name; + + newdentry = lookup_one_len(name->name, upperdir, name->len); + if (IS_ERR(newdentry)) + return newdentry; + + if (newdentry->d_inode) { + const struct cred *old_cred; + struct cred *override_cred; + + /* No need to check whiteout if lower parent is non-existent */ + err = -EEXIST; + if (!ovl_dentry_lower(template->d_parent)) + goto out_dput; + + if (!S_ISLNK(newdentry->d_inode->i_mode)) + goto out_dput; + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_dput; + + /* + * CAP_SYS_ADMIN for getxattr + * CAP_FOWNER for unlink in sticky directory + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + old_cred = override_creds(override_cred); + + err = -EEXIST; + if (ovl_is_whiteout(newdentry)) + err = vfs_unlink(upperdir->d_inode, newdentry); + + revert_creds(old_cred); + put_cred(override_cred); + if (err) + goto out_dput; + + dput(newdentry); + newdentry = lookup_one_len(name->name, upperdir, name->len); + if (IS_ERR(newdentry)) { + ovl_whiteout(upperdir, template); + return newdentry; + } + + /* + * Whiteout just been successfully removed, parent + * i_mutex is still held, there's no way the lookup + * could return positive. + */ + WARN_ON(newdentry->d_inode); + } + + return newdentry; + +out_dput: + dput(newdentry); + return ERR_PTR(err); +} + +struct dentry *ovl_upper_create(struct dentry *upperdir, struct dentry *dentry, + struct kstat *stat, const char *link) +{ + int err; + struct dentry *newdentry; + struct inode *dir = upperdir->d_inode; + + newdentry = ovl_lookup_create(upperdir, dentry); + if (IS_ERR(newdentry)) + goto out; + + switch (stat->mode & S_IFMT) { + case S_IFREG: + err = vfs_create(dir, newdentry, stat->mode, NULL); + break; + + case S_IFDIR: + err = vfs_mkdir(dir, newdentry, stat->mode); + break; + + case S_IFCHR: + case S_IFBLK: + case S_IFIFO: + case S_IFSOCK: + err = vfs_mknod(dir, newdentry, stat->mode, stat->rdev); + break; + + case S_IFLNK: + err = vfs_symlink(dir, newdentry, link); + break; + + default: + err = -EPERM; + } + if (err) { + if (ovl_dentry_is_opaque(dentry)) + ovl_whiteout(upperdir, dentry); + dput(newdentry); + newdentry = ERR_PTR(err); + } else if (WARN_ON(!newdentry->d_inode)) { + /* + * Not quite sure if non-instantiated dentry is legal or not. + * VFS doesn't seem to care so check and warn here. + */ + dput(newdentry); + newdentry = ERR_PTR(-ENOENT); + } + +out: + return newdentry; + +} + +static int ovl_set_opaque(struct dentry *upperdentry) +{ + int err; + const struct cred *old_cred; + struct cred *override_cred; + + override_cred = prepare_creds(); + if (!override_cred) + return -ENOMEM; + + /* CAP_SYS_ADMIN for setxattr of "trusted" namespace */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + old_cred = override_creds(override_cred); + err = vfs_setxattr(upperdentry, ovl_opaque_xattr, "y", 1, 0); + revert_creds(old_cred); + put_cred(override_cred); + + return err; +} + +static int ovl_remove_opaque(struct dentry *upperdentry) +{ + int err; + const struct cred *old_cred; + struct cred *override_cred; + + override_cred = prepare_creds(); + if (!override_cred) + return -ENOMEM; + + /* CAP_SYS_ADMIN for removexattr of "trusted" namespace */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + old_cred = override_creds(override_cred); + err = vfs_removexattr(upperdentry, ovl_opaque_xattr); + revert_creds(old_cred); + put_cred(override_cred); + + return err; +} + +static int ovl_dir_getattr(struct vfsmount *mnt, struct dentry *dentry, + struct kstat *stat) +{ + int err; + enum ovl_path_type type; + struct path realpath; + + type = ovl_path_real(dentry, &realpath); + err = vfs_getattr(realpath.mnt, realpath.dentry, stat); + if (err) + return err; + + stat->dev = dentry->d_sb->s_dev; + stat->ino = dentry->d_inode->i_ino; + + /* + * It's probably not worth it to count subdirs to get the + * correct link count. nlink=1 seems to pacify 'find' and + * other utilities. + */ + if (type == OVL_PATH_MERGE) + stat->nlink = 1; + + return 0; +} + +static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev, + const char *link) +{ + int err; + struct dentry *newdentry; + struct dentry *upperdir; + struct inode *inode; + struct kstat stat = { + .mode = mode, + .rdev = rdev, + }; + + err = -ENOMEM; + inode = ovl_new_inode(dentry->d_sb, mode, dentry->d_fsdata); + if (!inode) + goto out; + + err = ovl_copy_up(dentry->d_parent); + if (err) + goto out_iput; + + upperdir = ovl_dentry_upper(dentry->d_parent); + mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); + + newdentry = ovl_upper_create(upperdir, dentry, &stat, link); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_unlock; + + ovl_dentry_version_inc(dentry->d_parent); + if (ovl_dentry_is_opaque(dentry) && S_ISDIR(mode)) { + err = ovl_set_opaque(newdentry); + if (err) { + vfs_rmdir(upperdir->d_inode, newdentry); + ovl_whiteout(upperdir, dentry); + goto out_dput; + } + } + ovl_dentry_update(dentry, newdentry); + ovl_copyattr(newdentry->d_inode, inode); + d_instantiate(dentry, inode); + inode = NULL; + newdentry = NULL; + err = 0; + +out_dput: + dput(newdentry); +out_unlock: + mutex_unlock(&upperdir->d_inode->i_mutex); +out_iput: + iput(inode); +out: + return err; +} + +static int ovl_create(struct inode *dir, struct dentry *dentry, umode_t mode, + bool excl) +{ + return ovl_create_object(dentry, (mode & 07777) | S_IFREG, 0, NULL); +} + +static int ovl_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) +{ + return ovl_create_object(dentry, (mode & 07777) | S_IFDIR, 0, NULL); +} + +static int ovl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, + dev_t rdev) +{ + return ovl_create_object(dentry, mode, rdev, NULL); +} + +static int ovl_symlink(struct inode *dir, struct dentry *dentry, + const char *link) +{ + return ovl_create_object(dentry, S_IFLNK, 0, link); +} + +static int ovl_do_remove(struct dentry *dentry, bool is_dir) +{ + int err; + enum ovl_path_type type; + struct path realpath; + struct dentry *upperdir; + + err = ovl_copy_up(dentry->d_parent); + if (err) + return err; + + upperdir = ovl_dentry_upper(dentry->d_parent); + mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); + type = ovl_path_real(dentry, &realpath); + if (type != OVL_PATH_LOWER) { + err = -ESTALE; + if (realpath.dentry->d_parent != upperdir) + goto out_d_drop; + + /* FIXME: create whiteout up front and rename to target */ + + if (is_dir) + err = vfs_rmdir(upperdir->d_inode, realpath.dentry); + else + err = vfs_unlink(upperdir->d_inode, realpath.dentry); + if (err) + goto out_d_drop; + + ovl_dentry_version_inc(dentry->d_parent); + } + + if (type != OVL_PATH_UPPER || ovl_dentry_is_opaque(dentry)) + err = ovl_whiteout(upperdir, dentry); + + /* + * Keeping this dentry hashed would mean having to release + * upperpath/lowerpath, which could only be done if we are the + * sole user of this dentry. Too tricky... Just unhash for + * now. + */ +out_d_drop: + d_drop(dentry); + mutex_unlock(&upperdir->d_inode->i_mutex); + + return err; +} + +static int ovl_unlink(struct inode *dir, struct dentry *dentry) +{ + return ovl_do_remove(dentry, false); +} + + +static int ovl_rmdir(struct inode *dir, struct dentry *dentry) +{ + int err; + enum ovl_path_type type; + + type = ovl_path_type(dentry); + if (type != OVL_PATH_UPPER) { + err = ovl_check_empty_and_clear(dentry, type); + if (err) + return err; + } + + return ovl_do_remove(dentry, true); +} + +static int ovl_link(struct dentry *old, struct inode *newdir, + struct dentry *new) +{ + int err; + struct dentry *olddentry; + struct dentry *newdentry; + struct dentry *upperdir; + struct inode *newinode; + + err = ovl_copy_up(old); + if (err) + goto out; + + err = ovl_copy_up(new->d_parent); + if (err) + goto out; + + upperdir = ovl_dentry_upper(new->d_parent); + mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); + newdentry = ovl_lookup_create(upperdir, new); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_unlock; + + olddentry = ovl_dentry_upper(old); + err = vfs_link(olddentry, upperdir->d_inode, newdentry); + if (!err) { + if (WARN_ON(!newdentry->d_inode)) { + dput(newdentry); + err = -ENOENT; + goto out_unlock; + } + newinode = ovl_new_inode(old->d_sb, newdentry->d_inode->i_mode, + new->d_fsdata); + if (!newinode) + goto link_fail; + ovl_copyattr(upperdir->d_inode, newinode); + + ovl_dentry_version_inc(new->d_parent); + ovl_dentry_update(new, newdentry); + + d_instantiate(new, newinode); + } else { +link_fail: + if (ovl_dentry_is_opaque(new)) + ovl_whiteout(upperdir, new); + dput(newdentry); + } +out_unlock: + mutex_unlock(&upperdir->d_inode->i_mutex); +out: + return err; + +} + +static int ovl_rename(struct inode *olddir, struct dentry *old, + struct inode *newdir, struct dentry *new) +{ + int err; + enum ovl_path_type old_type; + enum ovl_path_type new_type; + struct dentry *old_upperdir; + struct dentry *new_upperdir; + struct dentry *olddentry; + struct dentry *newdentry; + struct dentry *trap; + bool old_opaque; + bool new_opaque; + bool new_create = false; + bool is_dir = S_ISDIR(old->d_inode->i_mode); + + /* Don't copy up directory trees */ + old_type = ovl_path_type(old); + if (old_type != OVL_PATH_UPPER && is_dir) + return -EXDEV; + + if (new->d_inode) { + new_type = ovl_path_type(new); + + if (new_type == OVL_PATH_LOWER && old_type == OVL_PATH_LOWER) { + if (ovl_dentry_lower(old)->d_inode == + ovl_dentry_lower(new)->d_inode) + return 0; + } + if (new_type != OVL_PATH_LOWER && old_type != OVL_PATH_LOWER) { + if (ovl_dentry_upper(old)->d_inode == + ovl_dentry_upper(new)->d_inode) + return 0; + } + + if (new_type != OVL_PATH_UPPER && + S_ISDIR(new->d_inode->i_mode)) { + err = ovl_check_empty_and_clear(new, new_type); + if (err) + return err; + } + } else { + new_type = OVL_PATH_UPPER; + } + + err = ovl_copy_up(old); + if (err) + return err; + + err = ovl_copy_up(new->d_parent); + if (err) + return err; + + old_upperdir = ovl_dentry_upper(old->d_parent); + new_upperdir = ovl_dentry_upper(new->d_parent); + + trap = lock_rename(new_upperdir, old_upperdir); + + olddentry = ovl_dentry_upper(old); + newdentry = ovl_dentry_upper(new); + if (newdentry) { + dget(newdentry); + } else { + new_create = true; + newdentry = ovl_lookup_create(new_upperdir, new); + err = PTR_ERR(newdentry); + if (IS_ERR(newdentry)) + goto out_unlock; + } + + err = -ESTALE; + if (olddentry->d_parent != old_upperdir) + goto out_dput; + if (newdentry->d_parent != new_upperdir) + goto out_dput; + if (olddentry == trap) + goto out_dput; + if (newdentry == trap) + goto out_dput; + + old_opaque = ovl_dentry_is_opaque(old); + new_opaque = ovl_dentry_is_opaque(new) || new_type != OVL_PATH_UPPER; + + if (is_dir && !old_opaque && new_opaque) { + err = ovl_set_opaque(olddentry); + if (err) + goto out_dput; + } + + err = vfs_rename(old_upperdir->d_inode, olddentry, + new_upperdir->d_inode, newdentry); + + if (err) { + if (new_create && ovl_dentry_is_opaque(new)) + ovl_whiteout(new_upperdir, new); + if (is_dir && !old_opaque && new_opaque) + ovl_remove_opaque(olddentry); + goto out_dput; + } + + if (old_type != OVL_PATH_UPPER || old_opaque) + err = ovl_whiteout(old_upperdir, old); + if (is_dir && old_opaque && !new_opaque) + ovl_remove_opaque(olddentry); + + if (old_opaque != new_opaque) + ovl_dentry_set_opaque(old, new_opaque); + + ovl_dentry_version_inc(old->d_parent); + ovl_dentry_version_inc(new->d_parent); + +out_dput: + dput(newdentry); +out_unlock: + unlock_rename(new_upperdir, old_upperdir); + return err; +} + +const struct inode_operations ovl_dir_inode_operations = { + .lookup = ovl_lookup, + .mkdir = ovl_mkdir, + .symlink = ovl_symlink, + .unlink = ovl_unlink, + .rmdir = ovl_rmdir, + .rename = ovl_rename, + .link = ovl_link, + .setattr = ovl_setattr, + .create = ovl_create, + .mknod = ovl_mknod, + .permission = ovl_permission, + .getattr = ovl_dir_getattr, + .setxattr = ovl_setxattr, + .getxattr = ovl_getxattr, + .listxattr = ovl_listxattr, + .removexattr = ovl_removexattr, +}; --- linux-lts-raring-3.8.0.orig/fs/overlayfs/readdir.c +++ linux-lts-raring-3.8.0/fs/overlayfs/readdir.c @@ -0,0 +1,566 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlayfs.h" + +struct ovl_cache_entry { + const char *name; + unsigned int len; + unsigned int type; + u64 ino; + bool is_whiteout; + struct list_head l_node; + struct rb_node node; +}; + +struct ovl_readdir_data { + struct rb_root *root; + struct list_head *list; + struct list_head *middle; + struct dentry *dir; + int count; + int err; +}; + +struct ovl_dir_file { + bool is_real; + bool is_cached; + struct list_head cursor; + u64 cache_version; + struct list_head cache; + struct file *realfile; +}; + +static struct ovl_cache_entry *ovl_cache_entry_from_node(struct rb_node *n) +{ + return container_of(n, struct ovl_cache_entry, node); +} + +static struct ovl_cache_entry *ovl_cache_entry_find(struct rb_root *root, + const char *name, int len) +{ + struct rb_node *node = root->rb_node; + int cmp; + + while (node) { + struct ovl_cache_entry *p = ovl_cache_entry_from_node(node); + + cmp = strncmp(name, p->name, len); + if (cmp > 0) + node = p->node.rb_right; + else if (cmp < 0 || len < p->len) + node = p->node.rb_left; + else + return p; + } + + return NULL; +} + +static struct ovl_cache_entry *ovl_cache_entry_new(const char *name, int len, + u64 ino, unsigned int d_type) +{ + struct ovl_cache_entry *p; + + p = kmalloc(sizeof(*p) + len + 1, GFP_KERNEL); + if (p) { + char *name_copy = (char *) (p + 1); + memcpy(name_copy, name, len); + name_copy[len] = '\0'; + p->name = name_copy; + p->len = len; + p->type = d_type; + p->ino = ino; + p->is_whiteout = false; + } + + return p; +} + +static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd, + const char *name, int len, u64 ino, + unsigned int d_type) +{ + struct rb_node **newp = &rdd->root->rb_node; + struct rb_node *parent = NULL; + struct ovl_cache_entry *p; + + while (*newp) { + int cmp; + struct ovl_cache_entry *tmp; + + parent = *newp; + tmp = ovl_cache_entry_from_node(*newp); + cmp = strncmp(name, tmp->name, len); + if (cmp > 0) + newp = &tmp->node.rb_right; + else if (cmp < 0 || len < tmp->len) + newp = &tmp->node.rb_left; + else + return 0; + } + + p = ovl_cache_entry_new(name, len, ino, d_type); + if (p == NULL) + return -ENOMEM; + + list_add_tail(&p->l_node, rdd->list); + rb_link_node(&p->node, parent, newp); + rb_insert_color(&p->node, rdd->root); + + return 0; +} + +static int ovl_fill_lower(void *buf, const char *name, int namelen, + loff_t offset, u64 ino, unsigned int d_type) +{ + struct ovl_readdir_data *rdd = buf; + struct ovl_cache_entry *p; + + rdd->count++; + p = ovl_cache_entry_find(rdd->root, name, namelen); + if (p) { + list_move_tail(&p->l_node, rdd->middle); + } else { + p = ovl_cache_entry_new(name, namelen, ino, d_type); + if (p == NULL) + rdd->err = -ENOMEM; + else + list_add_tail(&p->l_node, rdd->middle); + } + + return rdd->err; +} + +static void ovl_cache_free(struct list_head *list) +{ + struct ovl_cache_entry *p; + struct ovl_cache_entry *n; + + list_for_each_entry_safe(p, n, list, l_node) + kfree(p); + + INIT_LIST_HEAD(list); +} + +static int ovl_fill_upper(void *buf, const char *name, int namelen, + loff_t offset, u64 ino, unsigned int d_type) +{ + struct ovl_readdir_data *rdd = buf; + + rdd->count++; + return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type); +} + +static inline int ovl_dir_read(struct path *realpath, + struct ovl_readdir_data *rdd, filldir_t filler) +{ + struct file *realfile; + int err; + + realfile = ovl_path_open(realpath, O_RDONLY | O_DIRECTORY); + if (IS_ERR(realfile)) + return PTR_ERR(realfile); + + do { + rdd->count = 0; + rdd->err = 0; + err = vfs_readdir(realfile, filler, rdd); + if (err >= 0) + err = rdd->err; + } while (!err && rdd->count); + fput(realfile); + + return 0; +} + +static void ovl_dir_reset(struct file *file) +{ + struct ovl_dir_file *od = file->private_data; + enum ovl_path_type type = ovl_path_type(file->f_path.dentry); + + if (ovl_dentry_version_get(file->f_path.dentry) != od->cache_version) { + list_del_init(&od->cursor); + ovl_cache_free(&od->cache); + od->is_cached = false; + } + WARN_ON(!od->is_real && type != OVL_PATH_MERGE); + if (od->is_real && type == OVL_PATH_MERGE) { + fput(od->realfile); + od->realfile = NULL; + od->is_real = false; + } +} + +static int ovl_dir_mark_whiteouts(struct ovl_readdir_data *rdd) +{ + struct ovl_cache_entry *p; + struct dentry *dentry; + const struct cred *old_cred; + struct cred *override_cred; + + override_cred = prepare_creds(); + if (!override_cred) { + ovl_cache_free(rdd->list); + return -ENOMEM; + } + + /* + * CAP_SYS_ADMIN for getxattr + * CAP_DAC_OVERRIDE for lookup + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + old_cred = override_creds(override_cred); + + mutex_lock(&rdd->dir->d_inode->i_mutex); + list_for_each_entry(p, rdd->list, l_node) { + if (p->type != DT_LNK) + continue; + + dentry = lookup_one_len(p->name, rdd->dir, p->len); + if (IS_ERR(dentry)) + continue; + + p->is_whiteout = ovl_is_whiteout(dentry); + dput(dentry); + } + mutex_unlock(&rdd->dir->d_inode->i_mutex); + + revert_creds(old_cred); + put_cred(override_cred); + + return 0; +} + +static inline int ovl_dir_read_merged(struct path *upperpath, + struct path *lowerpath, + struct ovl_readdir_data *rdd) +{ + int err; + struct rb_root root = RB_ROOT; + struct list_head middle; + + rdd->root = &root; + if (upperpath->dentry) { + rdd->dir = upperpath->dentry; + err = ovl_dir_read(upperpath, rdd, ovl_fill_upper); + if (err) + goto out; + + err = ovl_dir_mark_whiteouts(rdd); + if (err) + goto out; + } + /* + * Insert lowerpath entries before upperpath ones, this allows + * offsets to be reasonably constant + */ + list_add(&middle, rdd->list); + rdd->middle = &middle; + err = ovl_dir_read(lowerpath, rdd, ovl_fill_lower); + list_del(&middle); +out: + rdd->root = NULL; + + return err; +} + +static void ovl_seek_cursor(struct ovl_dir_file *od, loff_t pos) +{ + struct list_head *l; + loff_t off; + + l = od->cache.next; + for (off = 0; off < pos; off++) { + if (l == &od->cache) + break; + l = l->next; + } + list_move_tail(&od->cursor, l); +} + +static int ovl_readdir(struct file *file, void *buf, filldir_t filler) +{ + struct ovl_dir_file *od = file->private_data; + int res; + + if (!file->f_pos) + ovl_dir_reset(file); + + if (od->is_real) { + res = vfs_readdir(od->realfile, filler, buf); + file->f_pos = od->realfile->f_pos; + + return res; + } + + if (!od->is_cached) { + struct path lowerpath; + struct path upperpath; + struct ovl_readdir_data rdd = { .list = &od->cache }; + + ovl_path_lower(file->f_path.dentry, &lowerpath); + ovl_path_upper(file->f_path.dentry, &upperpath); + + res = ovl_dir_read_merged(&upperpath, &lowerpath, &rdd); + if (res) { + ovl_cache_free(rdd.list); + return res; + } + + od->cache_version = ovl_dentry_version_get(file->f_path.dentry); + od->is_cached = true; + + ovl_seek_cursor(od, file->f_pos); + } + + while (od->cursor.next != &od->cache) { + int over; + loff_t off; + struct ovl_cache_entry *p; + + p = list_entry(od->cursor.next, struct ovl_cache_entry, l_node); + off = file->f_pos; + if (!p->is_whiteout) { + over = filler(buf, p->name, p->len, off, p->ino, + p->type); + if (over) + break; + } + file->f_pos++; + list_move(&od->cursor, &p->l_node); + } + + return 0; +} + +static loff_t ovl_dir_llseek(struct file *file, loff_t offset, int origin) +{ + loff_t res; + struct ovl_dir_file *od = file->private_data; + + mutex_lock(&file->f_dentry->d_inode->i_mutex); + if (!file->f_pos) + ovl_dir_reset(file); + + if (od->is_real) { + res = vfs_llseek(od->realfile, offset, origin); + file->f_pos = od->realfile->f_pos; + } else { + res = -EINVAL; + + switch (origin) { + case SEEK_CUR: + offset += file->f_pos; + break; + case SEEK_SET: + break; + default: + goto out_unlock; + } + if (offset < 0) + goto out_unlock; + + if (offset != file->f_pos) { + file->f_pos = offset; + if (od->is_cached) + ovl_seek_cursor(od, offset); + } + res = offset; + } +out_unlock: + mutex_unlock(&file->f_dentry->d_inode->i_mutex); + + return res; +} + +static int ovl_dir_fsync(struct file *file, loff_t start, loff_t end, + int datasync) +{ + struct ovl_dir_file *od = file->private_data; + + /* May need to reopen directory if it got copied up */ + if (!od->realfile) { + struct path upperpath; + + ovl_path_upper(file->f_path.dentry, &upperpath); + od->realfile = ovl_path_open(&upperpath, O_RDONLY); + if (IS_ERR(od->realfile)) + return PTR_ERR(od->realfile); + } + + return vfs_fsync_range(od->realfile, start, end, datasync); +} + +static int ovl_dir_release(struct inode *inode, struct file *file) +{ + struct ovl_dir_file *od = file->private_data; + + list_del(&od->cursor); + ovl_cache_free(&od->cache); + if (od->realfile) + fput(od->realfile); + kfree(od); + + return 0; +} + +static int ovl_dir_open(struct inode *inode, struct file *file) +{ + struct path realpath; + struct file *realfile; + struct ovl_dir_file *od; + enum ovl_path_type type; + + od = kzalloc(sizeof(struct ovl_dir_file), GFP_KERNEL); + if (!od) + return -ENOMEM; + + type = ovl_path_real(file->f_path.dentry, &realpath); + realfile = ovl_path_open(&realpath, file->f_flags); + if (IS_ERR(realfile)) { + kfree(od); + return PTR_ERR(realfile); + } + INIT_LIST_HEAD(&od->cache); + INIT_LIST_HEAD(&od->cursor); + od->is_cached = false; + od->realfile = realfile; + od->is_real = (type != OVL_PATH_MERGE); + file->private_data = od; + + return 0; +} + +const struct file_operations ovl_dir_operations = { + .read = generic_read_dir, + .open = ovl_dir_open, + .readdir = ovl_readdir, + .llseek = ovl_dir_llseek, + .fsync = ovl_dir_fsync, + .release = ovl_dir_release, +}; + +static int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list) +{ + int err; + struct path lowerpath; + struct path upperpath; + struct ovl_cache_entry *p; + struct ovl_readdir_data rdd = { .list = list }; + + ovl_path_upper(dentry, &upperpath); + ovl_path_lower(dentry, &lowerpath); + + err = ovl_dir_read_merged(&upperpath, &lowerpath, &rdd); + if (err) + return err; + + err = 0; + + list_for_each_entry(p, list, l_node) { + if (p->is_whiteout) + continue; + + if (p->name[0] == '.') { + if (p->len == 1) + continue; + if (p->len == 2 && p->name[1] == '.') + continue; + } + err = -ENOTEMPTY; + break; + } + + return err; +} + +static int ovl_remove_whiteouts(struct dentry *dir, struct list_head *list) +{ + struct path upperpath; + struct dentry *upperdir; + struct ovl_cache_entry *p; + const struct cred *old_cred; + struct cred *override_cred; + int err; + + ovl_path_upper(dir, &upperpath); + upperdir = upperpath.dentry; + + override_cred = prepare_creds(); + if (!override_cred) + return -ENOMEM; + + /* + * CAP_DAC_OVERRIDE for lookup and unlink + * CAP_SYS_ADMIN for setxattr of "trusted" namespace + * CAP_FOWNER for unlink in sticky directory + */ + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + old_cred = override_creds(override_cred); + + err = vfs_setxattr(upperdir, ovl_opaque_xattr, "y", 1, 0); + if (err) + goto out_revert_creds; + + mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); + list_for_each_entry(p, list, l_node) { + struct dentry *dentry; + int ret; + + if (!p->is_whiteout) + continue; + + dentry = lookup_one_len(p->name, upperdir, p->len); + if (IS_ERR(dentry)) { + printk(KERN_WARNING + "overlayfs: failed to lookup whiteout %.*s: %li\n", + p->len, p->name, PTR_ERR(dentry)); + continue; + } + ret = vfs_unlink(upperdir->d_inode, dentry); + dput(dentry); + if (ret) + printk(KERN_WARNING + "overlayfs: failed to unlink whiteout %.*s: %i\n", + p->len, p->name, ret); + } + mutex_unlock(&upperdir->d_inode->i_mutex); + +out_revert_creds: + revert_creds(old_cred); + put_cred(override_cred); + + return err; +} + +int ovl_check_empty_and_clear(struct dentry *dentry, enum ovl_path_type type) +{ + int err; + LIST_HEAD(list); + + err = ovl_check_empty_dir(dentry, &list); + if (!err && type == OVL_PATH_MERGE) + err = ovl_remove_whiteouts(dentry, &list); + + ovl_cache_free(&list); + + return err; +} --- linux-lts-raring-3.8.0.orig/fs/overlayfs/overlayfs.h +++ linux-lts-raring-3.8.0/fs/overlayfs/overlayfs.h @@ -0,0 +1,70 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +struct ovl_entry; + +enum ovl_path_type { + OVL_PATH_UPPER, + OVL_PATH_MERGE, + OVL_PATH_LOWER, +}; + +extern const char *ovl_opaque_xattr; +extern const char *ovl_whiteout_xattr; +extern const struct dentry_operations ovl_dentry_operations; + +enum ovl_path_type ovl_path_type(struct dentry *dentry); +u64 ovl_dentry_version_get(struct dentry *dentry); +void ovl_dentry_version_inc(struct dentry *dentry); +void ovl_path_upper(struct dentry *dentry, struct path *path); +void ovl_path_lower(struct dentry *dentry, struct path *path); +enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path); +struct dentry *ovl_dentry_upper(struct dentry *dentry); +struct dentry *ovl_dentry_lower(struct dentry *dentry); +struct dentry *ovl_dentry_real(struct dentry *dentry); +struct dentry *ovl_entry_real(struct ovl_entry *oe, bool *is_upper); +bool ovl_dentry_is_opaque(struct dentry *dentry); +void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque); +bool ovl_is_whiteout(struct dentry *dentry); +void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry); +struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, + unsigned int flags); +struct file *ovl_path_open(struct path *path, int flags); + +struct dentry *ovl_upper_create(struct dentry *upperdir, struct dentry *dentry, + struct kstat *stat, const char *link); + +/* readdir.c */ +extern const struct file_operations ovl_dir_operations; +int ovl_check_empty_and_clear(struct dentry *dentry, enum ovl_path_type type); + +/* inode.c */ +int ovl_setattr(struct dentry *dentry, struct iattr *attr); +int ovl_permission(struct inode *inode, int mask); +int ovl_setxattr(struct dentry *dentry, const char *name, + const void *value, size_t size, int flags); +ssize_t ovl_getxattr(struct dentry *dentry, const char *name, + void *value, size_t size); +ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); +int ovl_removexattr(struct dentry *dentry, const char *name); + +struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, + struct ovl_entry *oe); +static inline void ovl_copyattr(struct inode *from, struct inode *to) +{ + to->i_uid = from->i_uid; + to->i_gid = from->i_gid; +} + +/* dir.c */ +extern const struct inode_operations ovl_dir_inode_operations; + +/* copy_up.c */ +int ovl_copy_up(struct dentry *dentry); +int ovl_copy_up_truncate(struct dentry *dentry, loff_t size); --- linux-lts-raring-3.8.0.orig/fs/overlayfs/copy_up.c +++ linux-lts-raring-3.8.0/fs/overlayfs/copy_up.c @@ -0,0 +1,385 @@ +/* + * + * Copyright (C) 2011 Novell Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlayfs.h" + +#define OVL_COPY_UP_CHUNK_SIZE (1 << 20) + +static int ovl_copy_up_xattr(struct dentry *old, struct dentry *new) +{ + ssize_t list_size, size; + char *buf, *name, *value; + int error; + + if (!old->d_inode->i_op->getxattr || + !new->d_inode->i_op->getxattr) + return 0; + + list_size = vfs_listxattr(old, NULL, 0); + if (list_size <= 0) { + if (list_size == -EOPNOTSUPP) + return 0; + return list_size; + } + + buf = kzalloc(list_size, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + error = -ENOMEM; + value = kmalloc(XATTR_SIZE_MAX, GFP_KERNEL); + if (!value) + goto out; + + list_size = vfs_listxattr(old, buf, list_size); + if (list_size <= 0) { + error = list_size; + goto out_free_value; + } + + for (name = buf; name < (buf + list_size); name += strlen(name) + 1) { + size = vfs_getxattr(old, name, value, XATTR_SIZE_MAX); + if (size <= 0) { + error = size; + goto out_free_value; + } + error = vfs_setxattr(new, name, value, size, 0); + if (error) + goto out_free_value; + } + +out_free_value: + kfree(value); +out: + kfree(buf); + return error; +} + +static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) +{ + struct file *old_file; + struct file *new_file; + int error = 0; + + if (len == 0) + return 0; + + old_file = ovl_path_open(old, O_RDONLY); + if (IS_ERR(old_file)) + return PTR_ERR(old_file); + + new_file = ovl_path_open(new, O_WRONLY); + if (IS_ERR(new_file)) { + error = PTR_ERR(new_file); + goto out_fput; + } + + /* FIXME: copy up sparse files efficiently */ + while (len) { + loff_t offset = new_file->f_pos; + size_t this_len = OVL_COPY_UP_CHUNK_SIZE; + long bytes; + + if (len < this_len) + this_len = len; + + if (signal_pending_state(TASK_KILLABLE, current)) { + error = -EINTR; + break; + } + + bytes = do_splice_direct(old_file, &offset, new_file, this_len, + SPLICE_F_MOVE); + if (bytes <= 0) { + error = bytes; + break; + } + + len -= bytes; + } + + fput(new_file); +out_fput: + fput(old_file); + return error; +} + +static char *ovl_read_symlink(struct dentry *realdentry) +{ + int res; + char *buf; + struct inode *inode = realdentry->d_inode; + mm_segment_t old_fs; + + res = -EINVAL; + if (!inode->i_op->readlink) + goto err; + + res = -ENOMEM; + buf = (char *) __get_free_page(GFP_KERNEL); + if (!buf) + goto err; + + old_fs = get_fs(); + set_fs(get_ds()); + /* The cast to a user pointer is valid due to the set_fs() */ + res = inode->i_op->readlink(realdentry, + (char __user *)buf, PAGE_SIZE - 1); + set_fs(old_fs); + if (res < 0) { + free_page((unsigned long) buf); + goto err; + } + buf[res] = '\0'; + + return buf; + +err: + return ERR_PTR(res); +} + +static int ovl_set_timestamps(struct dentry *upperdentry, struct kstat *stat) +{ + struct iattr attr = { + .ia_valid = + ATTR_ATIME | ATTR_MTIME | ATTR_ATIME_SET | ATTR_MTIME_SET, + .ia_atime = stat->atime, + .ia_mtime = stat->mtime, + }; + + return notify_change(upperdentry, &attr); +} + +static int ovl_set_mode(struct dentry *upperdentry, umode_t mode) +{ + struct iattr attr = { + .ia_valid = ATTR_MODE, + .ia_mode = mode, + }; + + return notify_change(upperdentry, &attr); +} + +static int ovl_copy_up_locked(struct dentry *upperdir, struct dentry *dentry, + struct path *lowerpath, struct kstat *stat, + const char *link) +{ + int err; + struct path newpath; + umode_t mode = stat->mode; + + /* Can't properly set mode on creation because of the umask */ + stat->mode &= S_IFMT; + + ovl_path_upper(dentry, &newpath); + WARN_ON(newpath.dentry); + newpath.dentry = ovl_upper_create(upperdir, dentry, stat, link); + if (IS_ERR(newpath.dentry)) + return PTR_ERR(newpath.dentry); + + if (S_ISREG(stat->mode)) { + err = ovl_copy_up_data(lowerpath, &newpath, stat->size); + if (err) + goto err_remove; + } + + err = ovl_copy_up_xattr(lowerpath->dentry, newpath.dentry); + if (err) + goto err_remove; + + mutex_lock(&newpath.dentry->d_inode->i_mutex); + if (!S_ISLNK(stat->mode)) + err = ovl_set_mode(newpath.dentry, mode); + if (!err) + err = ovl_set_timestamps(newpath.dentry, stat); + mutex_unlock(&newpath.dentry->d_inode->i_mutex); + if (err) + goto err_remove; + + ovl_dentry_update(dentry, newpath.dentry); + + /* + * Easiest way to get rid of the lower dentry reference is to + * drop this dentry. This is neither needed nor possible for + * directories. + */ + if (!S_ISDIR(stat->mode)) + d_drop(dentry); + + return 0; + +err_remove: + if (S_ISDIR(stat->mode)) + vfs_rmdir(upperdir->d_inode, newpath.dentry); + else + vfs_unlink(upperdir->d_inode, newpath.dentry); + + dput(newpath.dentry); + + return err; +} + +/* + * Copy up a single dentry + * + * Directory renames only allowed on "pure upper" (already created on + * upper filesystem, never copied up). Directories which are on lower or + * are merged may not be renamed. For these -EXDEV is returned and + * userspace has to deal with it. This means, when copying up a + * directory we can rely on it and ancestors being stable. + * + * Non-directory renames start with copy up of source if necessary. The + * actual rename will only proceed once the copy up was successful. Copy + * up uses upper parent i_mutex for exclusion. Since rename can change + * d_parent it is possible that the copy up will lock the old parent. At + * that point the file will have already been copied up anyway. + */ +static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, + struct path *lowerpath, struct kstat *stat) +{ + int err; + struct kstat pstat; + struct path parentpath; + struct dentry *upperdir; + const struct cred *old_cred; + struct cred *override_cred; + char *link = NULL; + + ovl_path_upper(parent, &parentpath); + upperdir = parentpath.dentry; + + err = vfs_getattr(parentpath.mnt, parentpath.dentry, &pstat); + if (err) + return err; + + if (S_ISLNK(stat->mode)) { + link = ovl_read_symlink(lowerpath->dentry); + if (IS_ERR(link)) + return PTR_ERR(link); + } + + err = -ENOMEM; + override_cred = prepare_creds(); + if (!override_cred) + goto out_free_link; + + override_cred->fsuid = stat->uid; + override_cred->fsgid = stat->gid; + /* + * CAP_SYS_ADMIN for copying up extended attributes + * CAP_DAC_OVERRIDE for create + * CAP_FOWNER for chmod, timestamp update + * CAP_FSETID for chmod + * CAP_MKNOD for mknod + */ + cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); + cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); + cap_raise(override_cred->cap_effective, CAP_FOWNER); + cap_raise(override_cred->cap_effective, CAP_FSETID); + cap_raise(override_cred->cap_effective, CAP_MKNOD); + old_cred = override_creds(override_cred); + + mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); + if (ovl_path_type(dentry) != OVL_PATH_LOWER) { + err = 0; + } else { + err = ovl_copy_up_locked(upperdir, dentry, lowerpath, + stat, link); + if (!err) { + /* Restore timestamps on parent (best effort) */ + ovl_set_timestamps(upperdir, &pstat); + } + } + + mutex_unlock(&upperdir->d_inode->i_mutex); + + revert_creds(old_cred); + put_cred(override_cred); + +out_free_link: + if (link) + free_page((unsigned long) link); + + return err; +} + +int ovl_copy_up(struct dentry *dentry) +{ + int err; + + err = 0; + while (!err) { + struct dentry *next; + struct dentry *parent; + struct path lowerpath; + struct kstat stat; + enum ovl_path_type type = ovl_path_type(dentry); + + if (type != OVL_PATH_LOWER) + break; + + next = dget(dentry); + /* find the topmost dentry not yet copied up */ + for (;;) { + parent = dget_parent(next); + + type = ovl_path_type(parent); + if (type != OVL_PATH_LOWER) + break; + + dput(next); + next = parent; + } + + ovl_path_lower(next, &lowerpath); + err = vfs_getattr(lowerpath.mnt, lowerpath.dentry, &stat); + if (!err) + err = ovl_copy_up_one(parent, next, &lowerpath, &stat); + + dput(parent); + dput(next); + } + + return err; +} + +/* Optimize by not copying up the file first and truncating later */ +int ovl_copy_up_truncate(struct dentry *dentry, loff_t size) +{ + int err; + struct kstat stat; + struct path lowerpath; + struct dentry *parent = dget_parent(dentry); + + err = ovl_copy_up(parent); + if (err) + goto out_dput_parent; + + ovl_path_lower(dentry, &lowerpath); + err = vfs_getattr(lowerpath.mnt, lowerpath.dentry, &stat); + if (err) + goto out_dput_parent; + + if (size < stat.size) + stat.size = size; + + err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat); + +out_dput_parent: + dput(parent); + return err; +} --- linux-lts-raring-3.8.0.orig/fs/ubifs/super.c +++ linux-lts-raring-3.8.0/fs/ubifs/super.c @@ -1412,7 +1412,7 @@ ubifs_msg("mounted UBI device %d, volume %d, name \"%s\"%s", c->vi.ubi_num, c->vi.vol_id, c->vi.name, - c->ro_mount ? ", R/O mode" : NULL); + c->ro_mount ? ", R/O mode" : ""); x = (long long)c->main_lebs * c->leb_size; y = (long long)c->log_lebs * c->leb_size + c->max_bud_bytes; ubifs_msg("LEB size: %d bytes (%d KiB), min./max. I/O unit sizes: %d bytes/%d bytes", @@ -1568,6 +1568,12 @@ c->remounting_rw = 1; c->ro_mount = 0; + if (c->space_fixup) { + err = ubifs_fixup_free_space(c); + if (err) + return err; + } + err = check_free_space(c); if (err) goto out; @@ -1684,12 +1690,6 @@ err = dbg_check_space_info(c); } - if (c->space_fixup) { - err = ubifs_fixup_free_space(c); - if (err) - goto out; - } - mutex_unlock(&c->umount_mutex); return err; --- linux-lts-raring-3.8.0.orig/fs/ubifs/dir.c +++ linux-lts-raring-3.8.0/fs/ubifs/dir.c @@ -349,31 +349,50 @@ static int ubifs_readdir(struct file *file, void *dirent, filldir_t filldir) { int err, over = 0; + loff_t pos = file->f_pos; struct qstr nm; union ubifs_key key; struct ubifs_dent_node *dent; struct inode *dir = file->f_path.dentry->d_inode; struct ubifs_info *c = dir->i_sb->s_fs_info; - dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, file->f_pos); + dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, pos); - if (file->f_pos > UBIFS_S_KEY_HASH_MASK || file->f_pos == 2) + if (pos > UBIFS_S_KEY_HASH_MASK || pos == 2) /* * The directory was seek'ed to a senseless position or there * are no more entries. */ return 0; + if (file->f_version == 0) { + /* + * The file was seek'ed, which means that @file->private_data + * is now invalid. This may also be just the first + * 'ubifs_readdir()' invocation, in which case + * @file->private_data is NULL, and the below code is + * basically a no-op. + */ + kfree(file->private_data); + file->private_data = NULL; + } + + /* + * 'generic_file_llseek()' unconditionally sets @file->f_version to + * zero, and we use this for detecting whether the file was seek'ed. + */ + file->f_version = 1; + /* File positions 0 and 1 correspond to "." and ".." */ - if (file->f_pos == 0) { + if (pos == 0) { ubifs_assert(!file->private_data); over = filldir(dirent, ".", 1, 0, dir->i_ino, DT_DIR); if (over) return 0; - file->f_pos = 1; + file->f_pos = pos = 1; } - if (file->f_pos == 1) { + if (pos == 1) { ubifs_assert(!file->private_data); over = filldir(dirent, "..", 2, 1, parent_ino(file->f_path.dentry), DT_DIR); @@ -389,7 +408,7 @@ goto out; } - file->f_pos = key_hash_flash(c, &dent->key); + file->f_pos = pos = key_hash_flash(c, &dent->key); file->private_data = dent; } @@ -397,17 +416,16 @@ if (!dent) { /* * The directory was seek'ed to and is now readdir'ed. - * Find the entry corresponding to @file->f_pos or the - * closest one. + * Find the entry corresponding to @pos or the closest one. */ - dent_key_init_hash(c, &key, dir->i_ino, file->f_pos); + dent_key_init_hash(c, &key, dir->i_ino, pos); nm.name = NULL; dent = ubifs_tnc_next_ent(c, &key, &nm); if (IS_ERR(dent)) { err = PTR_ERR(dent); goto out; } - file->f_pos = key_hash_flash(c, &dent->key); + file->f_pos = pos = key_hash_flash(c, &dent->key); file->private_data = dent; } @@ -419,7 +437,7 @@ ubifs_inode(dir)->creat_sqnum); nm.len = le16_to_cpu(dent->nlen); - over = filldir(dirent, dent->name, nm.len, file->f_pos, + over = filldir(dirent, dent->name, nm.len, pos, le64_to_cpu(dent->inum), vfs_dent_type(dent->type)); if (over) @@ -435,9 +453,17 @@ } kfree(file->private_data); - file->f_pos = key_hash_flash(c, &dent->key); + file->f_pos = pos = key_hash_flash(c, &dent->key); file->private_data = dent; cond_resched(); + + if (file->f_version == 0) + /* + * The file was seek'ed meanwhile, lets return and start + * reading direntries from the new position on the next + * invocation. + */ + return 0; } out: @@ -448,15 +474,13 @@ kfree(file->private_data); file->private_data = NULL; + /* 2 is a special value indicating that there are no more direntries */ file->f_pos = 2; return 0; } -/* If a directory is seeked, we have to free saved readdir() state */ static loff_t ubifs_dir_llseek(struct file *file, loff_t offset, int whence) { - kfree(file->private_data); - file->private_data = NULL; return generic_file_llseek(file, offset, whence); } --- linux-lts-raring-3.8.0.orig/fs/ubifs/ubifs.h +++ linux-lts-raring-3.8.0/fs/ubifs/ubifs.h @@ -904,6 +904,8 @@ * @dnext: next orphan to delete * @inum: inode number * @new: %1 => added since the last commit, otherwise %0 + * @cmt: %1 => commit pending, otherwise %0 + * @del: %1 => delete pending, otherwise %0 */ struct ubifs_orphan { struct rb_node rb; @@ -912,7 +914,9 @@ struct ubifs_orphan *cnext; struct ubifs_orphan *dnext; ino_t inum; - int new; + unsigned new:1; + unsigned cmt:1; + unsigned del:1; }; /** --- linux-lts-raring-3.8.0.orig/fs/ubifs/orphan.c +++ linux-lts-raring-3.8.0/fs/ubifs/orphan.c @@ -126,13 +126,14 @@ else if (inum > o->inum) p = p->rb_right; else { - if (o->dnext) { + if (o->del) { spin_unlock(&c->orphan_lock); dbg_gen("deleted twice ino %lu", (unsigned long)inum); return; } - if (o->cnext) { + if (o->cmt) { + o->del = 1; o->dnext = c->orph_dnext; c->orph_dnext = o; spin_unlock(&c->orphan_lock); @@ -172,7 +173,9 @@ last = &c->orph_cnext; list_for_each_entry(orphan, &c->orph_new, new_list) { ubifs_assert(orphan->new); + ubifs_assert(!orphan->cmt); orphan->new = 0; + orphan->cmt = 1; *last = orphan; last = &orphan->cnext; } @@ -299,7 +302,9 @@ cnext = c->orph_cnext; for (i = 0; i < cnt; i++) { orphan = cnext; + ubifs_assert(orphan->cmt); orph->inos[i] = cpu_to_le64(orphan->inum); + orphan->cmt = 0; cnext = orphan->cnext; orphan->cnext = NULL; } @@ -378,6 +383,7 @@ list_for_each_entry(orphan, &c->orph_list, list) { if (orphan->new) continue; + orphan->cmt = 1; *last = orphan; last = &orphan->cnext; cnt += 1; @@ -442,6 +448,7 @@ orphan = dnext; dnext = orphan->dnext; ubifs_assert(!orphan->new); + ubifs_assert(orphan->del); rb_erase(&orphan->rb, &c->orph_tree); list_del(&orphan->list); c->tot_orphans -= 1; @@ -531,6 +538,7 @@ rb_link_node(&orphan->rb, parent, p); rb_insert_color(&orphan->rb, &c->orph_tree); list_add_tail(&orphan->list, &c->orph_list); + orphan->del = 1; orphan->dnext = c->orph_dnext; c->orph_dnext = orphan; dbg_mnt("ino %lu, new %d, tot %d", (unsigned long)inum, --- linux-lts-raring-3.8.0.orig/fs/cifs/cifsencrypt.c +++ linux-lts-raring-3.8.0/fs/cifs/cifsencrypt.c @@ -390,7 +390,7 @@ if (blobptr + attrsize > blobend) break; if (type == NTLMSSP_AV_NB_DOMAIN_NAME) { - if (!attrsize) + if (!attrsize || attrsize >= CIFS_MAX_DOMAINNAME_LEN) break; if (!ses->domainName) { ses->domainName = @@ -415,7 +415,7 @@ int rc = 0; int len; char nt_hash[CIFS_NTHASH_SIZE]; - wchar_t *user; + __le16 *user; wchar_t *domain; wchar_t *server; @@ -440,7 +440,7 @@ return rc; } - /* convert ses->user_name to unicode and uppercase */ + /* convert ses->user_name to unicode */ len = ses->user_name ? strlen(ses->user_name) : 0; user = kmalloc(2 + (len * 2), GFP_KERNEL); if (user == NULL) { @@ -450,7 +450,7 @@ } if (len) { - len = cifs_strtoUTF16((__le16 *)user, ses->user_name, len, nls_cp); + len = cifs_strtoUTF16(user, ses->user_name, len, nls_cp); UniStrupr(user); } else { memset(user, '\0', 2); --- linux-lts-raring-3.8.0.orig/fs/cifs/smb2ops.c +++ linux-lts-raring-3.8.0/fs/cifs/smb2ops.c @@ -744,4 +744,5 @@ .cap_unix = 0, .cap_nt_find = SMB2_NT_FIND, .cap_large_files = SMB2_LARGE_FILES, + .oplock_read = SMB2_OPLOCK_LEVEL_II, }; --- linux-lts-raring-3.8.0.orig/fs/cifs/cifsfs.c +++ linux-lts-raring-3.8.0/fs/cifs/cifsfs.c @@ -91,6 +91,30 @@ __u8 cifs_client_guid[SMB2_CLIENT_GUID_SIZE]; #endif +/* + * Bumps refcount for cifs super block. + * Note that it should be only called if a referece to VFS super block is + * already held, e.g. in open-type syscalls context. Otherwise it can race with + * atomic_dec_and_test in deactivate_locked_super. + */ +void +cifs_sb_active(struct super_block *sb) +{ + struct cifs_sb_info *server = CIFS_SB(sb); + + if (atomic_inc_return(&server->active) == 1) + atomic_inc(&sb->s_active); +} + +void +cifs_sb_deactive(struct super_block *sb) +{ + struct cifs_sb_info *server = CIFS_SB(sb); + + if (atomic_dec_and_test(&server->active)) + deactivate_super(sb); +} + static int cifs_read_super(struct super_block *sb) { @@ -558,6 +582,11 @@ dentry = ERR_PTR(-ENOENT); break; } + if (!S_ISDIR(dir->i_mode)) { + dput(dentry); + dentry = ERR_PTR(-ENOTDIR); + break; + } /* skip separators */ while (*s == sep) --- linux-lts-raring-3.8.0.orig/fs/cifs/sess.c +++ linux-lts-raring-3.8.0/fs/cifs/sess.c @@ -198,7 +198,7 @@ bytes_ret = 0; } else bytes_ret = cifs_strtoUTF16((__le16 *) bcc_ptr, ses->domainName, - 256, nls_cp); + CIFS_MAX_DOMAINNAME_LEN, nls_cp); bcc_ptr += 2 * bytes_ret; bcc_ptr += 2; /* account for null terminator */ @@ -256,8 +256,8 @@ /* copy domain */ if (ses->domainName != NULL) { - strncpy(bcc_ptr, ses->domainName, 256); - bcc_ptr += strnlen(ses->domainName, 256); + strncpy(bcc_ptr, ses->domainName, CIFS_MAX_DOMAINNAME_LEN); + bcc_ptr += strnlen(ses->domainName, CIFS_MAX_DOMAINNAME_LEN); } /* else we will send a null domain name so the server will default to its own domain */ *bcc_ptr = 0; --- linux-lts-raring-3.8.0.orig/fs/cifs/inode.c +++ linux-lts-raring-3.8.0/fs/cifs/inode.c @@ -169,7 +169,8 @@ if (fattr->cf_flags & CIFS_FATTR_DFS_REFERRAL) inode->i_flags |= S_AUTOMOUNT; - cifs_set_ops(inode); + if (inode->i_state & I_NEW) + cifs_set_ops(inode); } void @@ -545,6 +546,11 @@ fattr->cf_mode &= ~(S_IWUGO); fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks); + if (fattr->cf_nlink < 1) { + cFYI(1, "replacing bogus file nlink value %u\n", + fattr->cf_nlink); + fattr->cf_nlink = 1; + } } fattr->cf_uid = cifs_sb->mnt_uid; --- linux-lts-raring-3.8.0.orig/fs/cifs/dir.c +++ linux-lts-raring-3.8.0/fs/cifs/dir.c @@ -488,6 +488,7 @@ if (server->ops->close) server->ops->close(xid, tcon, &fid); cifs_del_pending_open(&open); + fput(file); rc = -ENOMEM; } --- linux-lts-raring-3.8.0.orig/fs/cifs/cifsglob.h +++ linux-lts-raring-3.8.0/fs/cifs/cifsglob.h @@ -44,6 +44,7 @@ #define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1) #define MAX_SERVER_SIZE 15 #define MAX_SHARE_SIZE 80 +#define CIFS_MAX_DOMAINNAME_LEN 256 /* max domain name length */ #define MAX_USERNAME_SIZE 256 /* reasonable maximum for current servers */ #define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */ --- linux-lts-raring-3.8.0.orig/fs/cifs/file.c +++ linux-lts-raring-3.8.0/fs/cifs/file.c @@ -294,6 +294,8 @@ INIT_WORK(&cfile->oplock_break, cifs_oplock_break); mutex_init(&cfile->fh_mutex); + cifs_sb_active(inode->i_sb); + /* * If the server returned a read oplock and we have mandatory brlocks, * set oplock level to None. @@ -343,7 +345,8 @@ struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink); struct TCP_Server_Info *server = tcon->ses->server; struct cifsInodeInfo *cifsi = CIFS_I(inode); - struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb); + struct super_block *sb = inode->i_sb; + struct cifs_sb_info *cifs_sb = CIFS_SB(sb); struct cifsLockInfo *li, *tmp; struct cifs_fid fid; struct cifs_pending_open open; @@ -408,6 +411,7 @@ cifs_put_tlink(cifs_file->tlink); dput(cifs_file->dentry); + cifs_sb_deactive(sb); kfree(cifs_file); } @@ -547,11 +551,10 @@ struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); int rc = 0; - /* we are going to update can_cache_brlcks here - need a write access */ - down_write(&cinode->lock_sem); + down_read(&cinode->lock_sem); if (cinode->can_cache_brlcks) { - /* can cache locks - no need to push them */ - up_write(&cinode->lock_sem); + /* can cache locks - no need to relock */ + up_read(&cinode->lock_sem); return rc; } @@ -562,7 +565,7 @@ else rc = tcon->ses->server->ops->push_mand_locks(cfile); - up_write(&cinode->lock_sem); + up_read(&cinode->lock_sem); return rc; } --- linux-lts-raring-3.8.0.orig/fs/cifs/smb2misc.c +++ linux-lts-raring-3.8.0/fs/cifs/smb2misc.c @@ -469,6 +469,7 @@ queue_work(cifsiod_wq, &cfile->oplock_break); + kfree(lw); spin_unlock(&cifs_file_list_lock); spin_unlock(&cifs_tcp_ses_lock); return true; --- linux-lts-raring-3.8.0.orig/fs/cifs/readdir.c +++ linux-lts-raring-3.8.0/fs/cifs/readdir.c @@ -113,6 +113,14 @@ return; } + /* + * If we know that the inode will need to be revalidated immediately, + * then don't create a new dentry for it. We'll end up doing an on + * the wire call either way and this spares us an invalidation. + */ + if (fattr->cf_flags & CIFS_FATTR_NEED_REVAL) + return; + dentry = d_alloc(parent, name); if (!dentry) return; --- linux-lts-raring-3.8.0.orig/fs/cifs/cifs_unicode.h +++ linux-lts-raring-3.8.0/fs/cifs/cifs_unicode.h @@ -327,14 +327,14 @@ /* * UniStrupr: Upper case a unicode string */ -static inline wchar_t * -UniStrupr(register wchar_t *upin) +static inline __le16 * +UniStrupr(register __le16 *upin) { - register wchar_t *up; + register __le16 *up; up = upin; while (*up) { /* For all characters */ - *up = UniToupper(*up); + *up = cpu_to_le16(UniToupper(le16_to_cpu(*up))); up++; } return upin; /* Return input pointer */ --- linux-lts-raring-3.8.0.orig/fs/cifs/cifsfs.h +++ linux-lts-raring-3.8.0/fs/cifs/cifsfs.h @@ -41,6 +41,10 @@ extern const struct address_space_operations cifs_addr_ops; extern const struct address_space_operations cifs_addr_ops_smallbuf; +/* Functions related to super block operations */ +extern void cifs_sb_active(struct super_block *sb); +extern void cifs_sb_deactive(struct super_block *sb); + /* Functions related to inodes */ extern const struct inode_operations cifs_dir_inode_ops; extern struct inode *cifs_root_iget(struct super_block *); --- linux-lts-raring-3.8.0.orig/fs/cifs/connect.c +++ linux-lts-raring-3.8.0/fs/cifs/connect.c @@ -380,6 +380,7 @@ try_to_freeze(); /* we should try only the port we connected to before */ + mutex_lock(&server->srv_mutex); rc = generic_ip_connect(server); if (rc) { cFYI(1, "reconnect error %d", rc); @@ -391,6 +392,7 @@ server->tcpStatus = CifsNeedNegotiate; spin_unlock(&GlobalMid_Lock); } + mutex_unlock(&server->srv_mutex); } while (server->tcpStatus == CifsNeedReconnect); return rc; @@ -1546,14 +1548,24 @@ } break; case Opt_blank_pass: - vol->password = NULL; - break; - case Opt_pass: /* passwords have to be handled differently * to allow the character used for deliminator * to be passed within them */ + /* + * Check if this is a case where the password + * starts with a delimiter + */ + tmp_end = strchr(data, '='); + tmp_end++; + if (!(tmp_end < end && tmp_end[1] == delim)) { + /* No it is not. Set the password to NULL */ + vol->password = NULL; + break; + } + /* Yes it is. Drop down to Opt_pass below.*/ + case Opt_pass: /* Obtain the value string */ value = strchr(data, '='); value++; @@ -1650,7 +1662,8 @@ if (string == NULL) goto out_nomem; - if (strnlen(string, 256) == 256) { + if (strnlen(string, CIFS_MAX_DOMAINNAME_LEN) + == CIFS_MAX_DOMAINNAME_LEN) { printk(KERN_WARNING "CIFS: domain name too" " long\n"); goto cifs_parse_mount_err; @@ -2311,8 +2324,8 @@ #ifdef CONFIG_KEYS -/* strlen("cifs:a:") + INET6_ADDRSTRLEN + 1 */ -#define CIFSCREDS_DESC_SIZE (7 + INET6_ADDRSTRLEN + 1) +/* strlen("cifs:a:") + CIFS_MAX_DOMAINNAME_LEN + 1 */ +#define CIFSCREDS_DESC_SIZE (7 + CIFS_MAX_DOMAINNAME_LEN + 1) /* Populate username and pw fields from keyring if possible */ static int @@ -3306,8 +3319,8 @@ pos = full_path + unc_len; if (pplen) { - *pos++ = CIFS_DIR_SEP(cifs_sb); - strncpy(pos, vol->prepath, pplen); + *pos = CIFS_DIR_SEP(cifs_sb); + strncpy(pos + 1, vol->prepath, pplen); pos += pplen; } --- linux-lts-raring-3.8.0.orig/fs/cifs/asn1.c +++ linux-lts-raring-3.8.0/fs/cifs/asn1.c @@ -614,53 +614,10 @@ } } - /* mechlistMIC */ - if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) { - /* Check if we have reached the end of the blob, but with - no mechListMic (e.g. NTLMSSP instead of KRB5) */ - if (ctx.error == ASN1_ERR_DEC_EMPTY) - goto decode_negtoken_exit; - cFYI(1, "Error decoding last part negTokenInit exit3"); - return 0; - } else if ((cls != ASN1_CTX) || (con != ASN1_CON)) { - /* tag = 3 indicating mechListMIC */ - cFYI(1, "Exit 4 cls = %d con = %d tag = %d end = %p (%d)", - cls, con, tag, end, *end); - return 0; - } - - /* sequence */ - if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) { - cFYI(1, "Error decoding last part negTokenInit exit5"); - return 0; - } else if ((cls != ASN1_UNI) || (con != ASN1_CON) - || (tag != ASN1_SEQ)) { - cFYI(1, "cls = %d con = %d tag = %d end = %p (%d)", - cls, con, tag, end, *end); - } - - /* sequence of */ - if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) { - cFYI(1, "Error decoding last part negTokenInit exit 7"); - return 0; - } else if ((cls != ASN1_CTX) || (con != ASN1_CON)) { - cFYI(1, "Exit 8 cls = %d con = %d tag = %d end = %p (%d)", - cls, con, tag, end, *end); - return 0; - } - - /* general string */ - if (asn1_header_decode(&ctx, &end, &cls, &con, &tag) == 0) { - cFYI(1, "Error decoding last part negTokenInit exit9"); - return 0; - } else if ((cls != ASN1_UNI) || (con != ASN1_PRI) - || (tag != ASN1_GENSTR)) { - cFYI(1, "Exit10 cls = %d con = %d tag = %d end = %p (%d)", - cls, con, tag, end, *end); - return 0; - } - cFYI(1, "Need to call asn1_octets_decode() function for %s", - ctx.pointer); /* is this UTF-8 or ASCII? */ -decode_negtoken_exit: + /* + * We currently ignore anything at the end of the SPNEGO blob after + * the mechTypes have been parsed, since none of that info is + * used at the moment. + */ return 1; } --- linux-lts-raring-3.8.0.orig/fs/cifs/cifs_dfs_ref.c +++ linux-lts-raring-3.8.0/fs/cifs/cifs_dfs_ref.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "cifsglob.h" #include "cifsproto.h" #include "cifsfs.h" @@ -150,7 +151,8 @@ * assuming that we have 'unc=' and 'ip=' in * the original sb_mountdata */ - md_len = strlen(sb_mountdata) + rc + strlen(ref->node_name) + 12; + md_len = strlen(sb_mountdata) + rc + strlen(ref->node_name) + 12 + + INET6_ADDRSTRLEN; mountdata = kzalloc(md_len+1, GFP_KERNEL); if (mountdata == NULL) { rc = -ENOMEM; --- linux-lts-raring-3.8.0.orig/fs/nilfs2/segment.c +++ linux-lts-raring-3.8.0/fs/nilfs2/segment.c @@ -665,7 +665,7 @@ bh = head = page_buffers(page); do { - if (!buffer_dirty(bh)) + if (!buffer_dirty(bh) || buffer_async_write(bh)) continue; get_bh(bh); list_add_tail(&bh->b_assoc_buffers, listp); @@ -699,7 +699,8 @@ for (i = 0; i < pagevec_count(&pvec); i++) { bh = head = page_buffers(pvec.pages[i]); do { - if (buffer_dirty(bh)) { + if (buffer_dirty(bh) && + !buffer_async_write(bh)) { get_bh(bh); list_add_tail(&bh->b_assoc_buffers, listp); @@ -1579,6 +1580,7 @@ list_for_each_entry(bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) { + set_buffer_async_write(bh); if (bh->b_page != bd_page) { if (bd_page) { lock_page(bd_page); @@ -1592,6 +1594,7 @@ list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) { + set_buffer_async_write(bh); if (bh == segbuf->sb_super_root) { if (bh->b_page != bd_page) { lock_page(bd_page); @@ -1677,6 +1680,7 @@ list_for_each_entry(segbuf, logs, sb_list) { list_for_each_entry(bh, &segbuf->sb_segsum_buffers, b_assoc_buffers) { + clear_buffer_async_write(bh); if (bh->b_page != bd_page) { if (bd_page) end_page_writeback(bd_page); @@ -1686,6 +1690,7 @@ list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) { + clear_buffer_async_write(bh); if (bh == segbuf->sb_super_root) { if (bh->b_page != bd_page) { end_page_writeback(bd_page); @@ -1755,6 +1760,7 @@ b_assoc_buffers) { set_buffer_uptodate(bh); clear_buffer_dirty(bh); + clear_buffer_async_write(bh); if (bh->b_page != bd_page) { if (bd_page) end_page_writeback(bd_page); @@ -1776,6 +1782,7 @@ b_assoc_buffers) { set_buffer_uptodate(bh); clear_buffer_dirty(bh); + clear_buffer_async_write(bh); clear_buffer_delay(bh); clear_buffer_nilfs_volatile(bh); clear_buffer_nilfs_redirected(bh); --- linux-lts-raring-3.8.0.orig/fs/nilfs2/page.c +++ linux-lts-raring-3.8.0/fs/nilfs2/page.c @@ -94,6 +94,7 @@ clear_buffer_nilfs_volatile(bh); clear_buffer_nilfs_checked(bh); clear_buffer_nilfs_redirected(bh); + clear_buffer_async_write(bh); clear_buffer_dirty(bh); if (nilfs_page_buffers_clean(page)) __nilfs_clear_page_dirty(page); @@ -390,6 +391,7 @@ bh = head = page_buffers(page); do { lock_buffer(bh); + clear_buffer_async_write(bh); clear_buffer_dirty(bh); clear_buffer_nilfs_volatile(bh); clear_buffer_nilfs_checked(bh); --- linux-lts-raring-3.8.0.orig/fs/nilfs2/inode.c +++ linux-lts-raring-3.8.0/fs/nilfs2/inode.c @@ -202,13 +202,32 @@ static int nilfs_set_page_dirty(struct page *page) { - int ret = __set_page_dirty_buffers(page); + int ret = __set_page_dirty_nobuffers(page); - if (ret) { + if (page_has_buffers(page)) { struct inode *inode = page->mapping->host; - unsigned nr_dirty = 1 << (PAGE_SHIFT - inode->i_blkbits); + unsigned nr_dirty = 0; + struct buffer_head *bh, *head; - nilfs_set_file_dirty(inode, nr_dirty); + /* + * This page is locked by callers, and no other thread + * concurrently marks its buffers dirty since they are + * only dirtied through routines in fs/buffer.c in + * which call sites of mark_buffer_dirty are protected + * by page lock. + */ + bh = head = page_buffers(page); + do { + /* Do not mark hole blocks dirty */ + if (buffer_dirty(bh) || !buffer_mapped(bh)) + continue; + + set_buffer_dirty(bh); + nr_dirty++; + } while (bh = bh->b_this_page, bh != head); + + if (nr_dirty) + nilfs_set_file_dirty(inode, nr_dirty); } return ret; } --- linux-lts-raring-3.8.0.orig/fs/nilfs2/segbuf.c +++ linux-lts-raring-3.8.0/fs/nilfs2/segbuf.c @@ -345,8 +345,7 @@ if (err == -EOPNOTSUPP) { set_bit(BIO_EOPNOTSUPP, &bio->bi_flags); - bio_put(bio); - /* to be detected by submit_seg_bio() */ + /* to be detected by nilfs_segbuf_submit_bio() */ } if (!uptodate) @@ -377,12 +376,12 @@ bio->bi_private = segbuf; bio_get(bio); submit_bio(mode, bio); + segbuf->sb_nbio++; if (bio_flagged(bio, BIO_EOPNOTSUPP)) { bio_put(bio); err = -EOPNOTSUPP; goto failed; } - segbuf->sb_nbio++; bio_put(bio); wi->bio = NULL; --- linux-lts-raring-3.8.0.orig/fs/proc/version_signature.c +++ linux-lts-raring-3.8.0/fs/proc/version_signature.c @@ -0,0 +1,31 @@ +#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-lts-raring-3.8.0.orig/fs/proc/Makefile +++ linux-lts-raring-3.8.0/fs/proc/Makefile @@ -29,3 +29,4 @@ proc-$(CONFIG_PROC_DEVICETREE) += proc_devtree.o proc-$(CONFIG_PRINTK) += kmsg.o proc-$(CONFIG_PROC_PAGE_MONITOR) += page.o +proc-y += version_signature.o --- linux-lts-raring-3.8.0.orig/fs/proc/inode.c +++ linux-lts-raring-3.8.0/fs/proc/inode.c @@ -445,12 +445,10 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) { - struct inode * inode; + struct inode *inode = new_inode_pseudo(sb); - inode = iget_locked(sb, de->low_ino); - if (!inode) - return NULL; - if (inode->i_state & I_NEW) { + if (inode) { + inode->i_ino = de->low_ino; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; PROC_I(inode)->pde = de; @@ -478,11 +476,10 @@ inode->i_fop = de->proc_fops; } } - unlock_new_inode(inode); } else pde_put(de); return inode; -} +} int proc_fill_super(struct super_block *s) { @@ -499,6 +496,5 @@ return 0; printk("proc_read_super: get root inode failed\n"); - pde_put(&proc_root); return -ENOMEM; } --- linux-lts-raring-3.8.0.orig/fs/proc/namespaces.c +++ linux-lts-raring-3.8.0/fs/proc/namespaces.c @@ -118,7 +118,7 @@ struct super_block *sb = inode->i_sb; struct proc_inode *ei = PROC_I(inode); struct task_struct *task; - struct dentry *ns_dentry; + struct path ns_path; void *error = ERR_PTR(-EACCES); task = get_proc_task(inode); @@ -128,14 +128,14 @@ if (!ptrace_may_access(task, PTRACE_MODE_READ)) goto out_put_task; - ns_dentry = proc_ns_get_dentry(sb, task, ei->ns_ops); - if (IS_ERR(ns_dentry)) { - error = ERR_CAST(ns_dentry); + ns_path.dentry = proc_ns_get_dentry(sb, task, ei->ns_ops); + if (IS_ERR(ns_path.dentry)) { + error = ERR_CAST(ns_path.dentry); goto out_put_task; } - dput(nd->path.dentry); - nd->path.dentry = ns_dentry; + ns_path.mnt = mntget(nd->path.mnt); + nd_jump_link(nd, &ns_path); error = NULL; out_put_task: --- linux-lts-raring-3.8.0.orig/fs/proc/task_mmu.c +++ linux-lts-raring-3.8.0/fs/proc/task_mmu.c @@ -792,14 +792,14 @@ } pagemap_entry_t; struct pagemapread { - int pos, len; + int pos, len; /* units: PM_ENTRY_BYTES, not bytes */ pagemap_entry_t *buffer; }; #define PAGEMAP_WALK_SIZE (PMD_SIZE) #define PAGEMAP_WALK_MASK (PMD_MASK) -#define PM_ENTRY_BYTES sizeof(u64) +#define PM_ENTRY_BYTES sizeof(pagemap_entry_t) #define PM_STATUS_BITS 3 #define PM_STATUS_OFFSET (64 - PM_STATUS_BITS) #define PM_STATUS_MASK (((1LL << PM_STATUS_BITS) - 1) << PM_STATUS_OFFSET) @@ -1038,8 +1038,8 @@ if (!count) goto out_task; - pm.len = PM_ENTRY_BYTES * (PAGEMAP_WALK_SIZE >> PAGE_SHIFT); - pm.buffer = kmalloc(pm.len, GFP_TEMPORARY); + pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT); + pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY); ret = -ENOMEM; if (!pm.buffer) goto out_task; --- linux-lts-raring-3.8.0.orig/fs/proc/generic.c +++ linux-lts-raring-3.8.0/fs/proc/generic.c @@ -412,8 +412,7 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, struct dentry *dentry) { - struct inode *inode = NULL; - int error = -ENOENT; + struct inode *inode; spin_lock(&proc_subdir_lock); for (de = de->subdir; de ; de = de->next) { @@ -422,22 +421,16 @@ if (!memcmp(dentry->d_name.name, de->name, de->namelen)) { pde_get(de); spin_unlock(&proc_subdir_lock); - error = -ENOMEM; inode = proc_get_inode(dir->i_sb, de); - goto out_unlock; + if (!inode) + return ERR_PTR(-ENOMEM); + d_set_d_op(dentry, &proc_dentry_operations); + d_add(dentry, inode); + return NULL; } } spin_unlock(&proc_subdir_lock); -out_unlock: - - if (inode) { - d_set_d_op(dentry, &proc_dentry_operations); - d_add(dentry, inode); - return NULL; - } - if (de) - pde_put(de); - return ERR_PTR(error); + return ERR_PTR(-ENOENT); } struct dentry *proc_lookup(struct inode *dir, struct dentry *dentry, --- linux-lts-raring-3.8.0.orig/fs/proc/array.c +++ linux-lts-raring-3.8.0/fs/proc/array.c @@ -143,6 +143,7 @@ "x (dead)", /* 64 */ "K (wakekill)", /* 128 */ "W (waking)", /* 256 */ + "P (parked)", /* 512 */ }; static inline const char *get_task_state(struct task_struct *tsk) --- linux-lts-raring-3.8.0.orig/fs/proc/root.c +++ linux-lts-raring-3.8.0/fs/proc/root.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -108,6 +109,10 @@ } else { ns = task_active_pid_ns(current); options = data; + + if (!current_user_ns()->may_mount_proc || + !ns_capable(ns->user_ns, CAP_SYS_ADMIN)) + return ERR_PTR(-EPERM); } sb = sget(fs_type, proc_test_super, proc_set_super, flags, ns); --- linux-lts-raring-3.8.0.orig/fs/proc/kmsg.c +++ linux-lts-raring-3.8.0/fs/proc/kmsg.c @@ -21,12 +21,12 @@ static int kmsg_open(struct inode * inode, struct file * file) { - return do_syslog(SYSLOG_ACTION_OPEN, NULL, 0, SYSLOG_FROM_FILE); + return do_syslog(SYSLOG_ACTION_OPEN, NULL, 0, SYSLOG_FROM_PROC); } static int kmsg_release(struct inode * inode, struct file * file) { - (void) do_syslog(SYSLOG_ACTION_CLOSE, NULL, 0, SYSLOG_FROM_FILE); + (void) do_syslog(SYSLOG_ACTION_CLOSE, NULL, 0, SYSLOG_FROM_PROC); return 0; } @@ -34,15 +34,15 @@ size_t count, loff_t *ppos) { if ((file->f_flags & O_NONBLOCK) && - !do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_FILE)) + !do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_PROC)) return -EAGAIN; - return do_syslog(SYSLOG_ACTION_READ, buf, count, SYSLOG_FROM_FILE); + return do_syslog(SYSLOG_ACTION_READ, buf, count, SYSLOG_FROM_PROC); } static unsigned int kmsg_poll(struct file *file, poll_table *wait) { poll_wait(file, &log_wait, wait); - if (do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_FILE)) + if (do_syslog(SYSLOG_ACTION_SIZE_UNREAD, NULL, 0, SYSLOG_FROM_PROC)) return POLLIN | POLLRDNORM; return 0; } --- linux-lts-raring-3.8.0.orig/fs/ext4/ext4_jbd2.h +++ linux-lts-raring-3.8.0/fs/ext4/ext4_jbd2.h @@ -170,16 +170,20 @@ * ext4_journal_callback_del: delete a registered callback * @handle: active journal transaction handle on which callback was registered * @jce: registered journal callback entry to unregister + * Return true if object was sucessfully removed */ -static inline void ext4_journal_callback_del(handle_t *handle, +static inline bool ext4_journal_callback_try_del(handle_t *handle, struct ext4_journal_cb_entry *jce) { + bool deleted; struct ext4_sb_info *sbi = EXT4_SB(handle->h_transaction->t_journal->j_private); spin_lock(&sbi->s_md_lock); + deleted = !list_empty(&jce->jce_list); list_del_init(&jce->jce_list); spin_unlock(&sbi->s_md_lock); + return deleted; } int --- linux-lts-raring-3.8.0.orig/fs/ext4/Kconfig +++ linux-lts-raring-3.8.0/fs/ext4/Kconfig @@ -71,4 +71,5 @@ Enables run-time debugging support for the ext4 filesystem. If you select Y here, then you will be able to turn on debugging - with a command such as "echo 1 > /sys/kernel/debug/ext4/mballoc-debug" + with a command such as: + echo 1 > /sys/module/ext4/parameters/mballoc_debug --- linux-lts-raring-3.8.0.orig/fs/ext4/resize.c +++ linux-lts-raring-3.8.0/fs/ext4/resize.c @@ -334,7 +334,7 @@ bh = sb_getblk(sb, blk); if (!bh) - return ERR_PTR(-EIO); + return ERR_PTR(-ENOMEM); if ((err = ext4_journal_get_write_access(handle, bh))) { brelse(bh); bh = ERR_PTR(err); @@ -411,7 +411,7 @@ bh = sb_getblk(sb, flex_gd->groups[group].block_bitmap); if (!bh) - return -EIO; + return -ENOMEM; err = ext4_journal_get_write_access(handle, bh); if (err) @@ -501,7 +501,7 @@ gdb = sb_getblk(sb, block); if (!gdb) { - err = -EIO; + err = -ENOMEM; goto out; } @@ -1065,7 +1065,7 @@ bh = sb_getblk(sb, backup_block); if (!bh) { - err = -EIO; + err = -ENOMEM; break; } ext4_debug("update metadata backup %llu(+%llu)\n", @@ -1247,7 +1247,7 @@ ext4_inode_table_set(sb, gdp, group_data->inode_table); ext4_free_group_clusters_set(sb, gdp, - EXT4_B2C(sbi, group_data->free_blocks_count)); + EXT4_NUM_B2C(sbi, group_data->free_blocks_count)); ext4_free_inodes_set(sb, gdp, EXT4_INODES_PER_GROUP(sb)); if (ext4_has_group_desc_csum(sb)) ext4_itable_unused_set(sb, gdp, @@ -1341,6 +1341,8 @@ /* Update the global fs size fields */ sbi->s_groups_count += flex_gd->count; + sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, + (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); /* Update the reserved block counts only once the new group is * active. */ @@ -1349,7 +1351,7 @@ /* Update the free space counts */ percpu_counter_add(&sbi->s_freeclusters_counter, - EXT4_B2C(sbi, free_blocks)); + EXT4_NUM_B2C(sbi, free_blocks)); percpu_counter_add(&sbi->s_freeinodes_counter, EXT4_INODES_PER_GROUP(sb) * flex_gd->count); @@ -1360,8 +1362,8 @@ sbi->s_log_groups_per_flex) { ext4_group_t flex_group; flex_group = ext4_flex_group(sbi, group_data[0].group); - atomic_add(EXT4_B2C(sbi, free_blocks), - &sbi->s_flex_groups[flex_group].free_clusters); + atomic64_add(EXT4_NUM_B2C(sbi, free_blocks), + &sbi->s_flex_groups[flex_group].free_clusters); atomic_add(EXT4_INODES_PER_GROUP(sb) * flex_gd->count, &sbi->s_flex_groups[flex_group].free_inodes); } @@ -1652,12 +1654,10 @@ err = err2; if (!err) { - ext4_fsblk_t first_block; - first_block = ext4_group_first_block_no(sb, 0); if (test_opt(sb, DEBUG)) printk(KERN_DEBUG "EXT4-fs: extended group to %llu " "blocks\n", ext4_blocks_count(es)); - update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr - first_block, + update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr, (char *)es, sizeof(struct ext4_super_block), 0); } return err; @@ -1878,6 +1878,10 @@ return 0; ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &offset); + if (n_group > (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) { + ext4_warning(sb, "resize would cause inodes_count overflow"); + return -EINVAL; + } ext4_get_group_no_and_offset(sb, o_blocks_count - 1, &o_group, &offset); n_desc_blocks = num_desc_blocks(sb, n_group + 1); --- linux-lts-raring-3.8.0.orig/fs/ext4/fsync.c +++ linux-lts-raring-3.8.0/fs/ext4/fsync.c @@ -166,8 +166,7 @@ if (journal->j_flags & JBD2_BARRIER && !jbd2_trans_will_send_data_barrier(journal, commit_tid)) needs_barrier = true; - jbd2_log_start_commit(journal, commit_tid); - ret = jbd2_log_wait_commit(journal, commit_tid); + ret = jbd2_complete_transaction(journal, commit_tid); if (needs_barrier) { err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); if (!ret) --- linux-lts-raring-3.8.0.orig/fs/ext4/inline.c +++ linux-lts-raring-3.8.0/fs/ext4/inline.c @@ -1188,7 +1188,7 @@ data_bh = sb_getblk(inode->i_sb, map.m_pblk); if (!data_bh) { - error = -EIO; + error = -ENOMEM; goto out_restore; } @@ -1702,7 +1702,7 @@ if (error) goto out; - physical = iloc.bh->b_blocknr << inode->i_sb->s_blocksize_bits; + physical = (__u64)iloc.bh->b_blocknr << inode->i_sb->s_blocksize_bits; physical += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data; physical += offsetof(struct ext4_inode, i_block); length = i_size_read(inode); --- linux-lts-raring-3.8.0.orig/fs/ext4/super.c +++ linux-lts-raring-3.8.0/fs/ext4/super.c @@ -452,10 +452,13 @@ struct super_block *sb = journal->j_private; struct ext4_sb_info *sbi = EXT4_SB(sb); int error = is_journal_aborted(journal); - struct ext4_journal_cb_entry *jce, *tmp; + struct ext4_journal_cb_entry *jce; + BUG_ON(txn->t_state == T_FINISHED); spin_lock(&sbi->s_md_lock); - list_for_each_entry_safe(jce, tmp, &txn->t_private_list, jce_list) { + while (!list_empty(&txn->t_private_list)) { + jce = list_entry(txn->t_private_list.next, + struct ext4_journal_cb_entry, jce_list); list_del_init(&jce->jce_list); spin_unlock(&sbi->s_md_lock); jce->jce_func(sb, jce, error); @@ -1423,7 +1426,7 @@ {Opt_discard, EXT4_MOUNT_DISCARD, MOPT_SET}, {Opt_nodiscard, EXT4_MOUNT_DISCARD, MOPT_CLEAR}, {Opt_delalloc, EXT4_MOUNT_DELALLOC, MOPT_SET | MOPT_EXPLICIT}, - {Opt_nodelalloc, EXT4_MOUNT_DELALLOC, MOPT_CLEAR | MOPT_EXPLICIT}, + {Opt_nodelalloc, EXT4_MOUNT_DELALLOC, MOPT_CLEAR}, {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM, MOPT_SET}, {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT | EXT4_MOUNT_JOURNAL_CHECKSUM), MOPT_SET}, @@ -1735,12 +1738,6 @@ if (sbi->s_qf_names[GRPQUOTA]) seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]); - - if (test_opt(sb, USRQUOTA)) - seq_puts(seq, ",usrquota"); - - if (test_opt(sb, GRPQUOTA)) - seq_puts(seq, ",grpquota"); #endif } @@ -1979,8 +1976,8 @@ flex_group = ext4_flex_group(sbi, i); atomic_add(ext4_free_inodes_count(sb, gdp), &sbi->s_flex_groups[flex_group].free_inodes); - atomic_add(ext4_free_group_clusters(sb, gdp), - &sbi->s_flex_groups[flex_group].free_clusters); + atomic64_add(ext4_free_group_clusters(sb, gdp), + &sbi->s_flex_groups[flex_group].free_clusters); atomic_add(ext4_used_dirs_count(sb, gdp), &sbi->s_flex_groups[flex_group].used_dirs); } @@ -3235,7 +3232,7 @@ } /* Add the journal blocks as well */ if (sbi->s_journal) - overhead += EXT4_B2C(sbi, sbi->s_journal->j_maxlen); + overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_maxlen); sbi->s_overhead = overhead; smp_wmb(); @@ -3443,7 +3440,7 @@ } if (test_opt(sb, DIOREAD_NOLOCK)) { ext4_msg(sb, KERN_ERR, "can't mount with " - "both data=journal and delalloc"); + "both data=journal and dioread_nolock"); goto failed_mount; } if (test_opt(sb, DELALLOC)) @@ -4008,7 +4005,7 @@ !(sb->s_flags & MS_RDONLY)) { err = ext4_enable_quotas(sb); if (err) - goto failed_mount7; + goto failed_mount8; } #endif /* CONFIG_QUOTA */ @@ -4035,6 +4032,10 @@ ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem"); goto failed_mount; +#ifdef CONFIG_QUOTA +failed_mount8: + kobject_del(&sbi->s_kobj); +#endif failed_mount7: ext4_unregister_li_request(sb); failed_mount6: @@ -4617,6 +4618,21 @@ goto restore_opts; } + if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { + if (test_opt2(sb, EXPLICIT_DELALLOC)) { + ext4_msg(sb, KERN_ERR, "can't mount with " + "both data=journal and delalloc"); + err = -EINVAL; + goto restore_opts; + } + if (test_opt(sb, DIOREAD_NOLOCK)) { + ext4_msg(sb, KERN_ERR, "can't mount with " + "both data=journal and dioread_nolock"); + err = -EINVAL; + goto restore_opts; + } + } + if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) ext4_abort(sb, "Abort forced by user"); @@ -5005,9 +5021,9 @@ DQUOT_USAGE_ENABLED); if (err) { ext4_warning(sb, - "Failed to enable quota (type=%d) " - "tracking. Please run e2fsck to fix.", - type); + "Failed to enable quota tracking " + "(type=%d, err=%d). Please run " + "e2fsck to fix.", type, err); return err; } } @@ -5369,6 +5385,7 @@ kset_unregister(ext4_kset); ext4_exit_system_zone(); ext4_exit_pageio(); + ext4_exit_es(); } MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); --- linux-lts-raring-3.8.0.orig/fs/ext4/mmp.c +++ linux-lts-raring-3.8.0/fs/ext4/mmp.c @@ -7,7 +7,7 @@ #include "ext4.h" /* Checksumming functions */ -static __u32 ext4_mmp_csum(struct super_block *sb, struct mmp_struct *mmp) +static __le32 ext4_mmp_csum(struct super_block *sb, struct mmp_struct *mmp) { struct ext4_sb_info *sbi = EXT4_SB(sb); int offset = offsetof(struct mmp_struct, mmp_checksum); @@ -80,6 +80,8 @@ * is not blocked in the elevator. */ if (!*bh) *bh = sb_getblk(sb, mmp_block); + if (!*bh) + return -ENOMEM; if (*bh) { get_bh(*bh); lock_buffer(*bh); --- linux-lts-raring-3.8.0.orig/fs/ext4/ialloc.c +++ linux-lts-raring-3.8.0/fs/ext4/ialloc.c @@ -324,8 +324,8 @@ } struct orlov_stats { + __u64 free_clusters; __u32 free_inodes; - __u32 free_clusters; __u32 used_dirs; }; @@ -342,7 +342,7 @@ if (flex_size > 1) { stats->free_inodes = atomic_read(&flex_group[g].free_inodes); - stats->free_clusters = atomic_read(&flex_group[g].free_clusters); + stats->free_clusters = atomic64_read(&flex_group[g].free_clusters); stats->used_dirs = atomic_read(&flex_group[g].used_dirs); return; } @@ -715,11 +715,8 @@ ino = ext4_find_next_zero_bit((unsigned long *) inode_bitmap_bh->b_data, EXT4_INODES_PER_GROUP(sb), ino); - if (ino >= EXT4_INODES_PER_GROUP(sb)) { - if (++group == ngroups) - group = 0; - continue; - } + if (ino >= EXT4_INODES_PER_GROUP(sb)) + goto next_group; if (group == 0 && (ino+1) < EXT4_FIRST_INO(sb)) { ext4_error(sb, "reserved inode found cleared - " "inode=%lu", ino + 1); @@ -737,6 +734,9 @@ goto got; /* we grabbed the inode! */ if (ino < EXT4_INODES_PER_GROUP(sb)) goto repeat_in_this_group; +next_group: + if (++group == ngroups) + group = 0; } err = -ENOSPC; goto out; --- linux-lts-raring-3.8.0.orig/fs/ext4/ext4.h +++ linux-lts-raring-3.8.0/fs/ext4/ext4.h @@ -338,9 +338,9 @@ */ struct flex_groups { - atomic_t free_inodes; - atomic_t free_clusters; - atomic_t used_dirs; + atomic64_t free_clusters; + atomic_t free_inodes; + atomic_t used_dirs; }; #define EXT4_BG_INODE_UNINIT 0x0001 /* Inode table/bitmap not in use */ @@ -2341,16 +2341,32 @@ #define EXT4_FREECLUSTERS_WATERMARK 0 #endif +/* Update i_disksize. Requires i_mutex to avoid races with truncate */ static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize) { - /* - * XXX: replace with spinlock if seen contended -bzzz - */ + WARN_ON_ONCE(S_ISREG(inode->i_mode) && + !mutex_is_locked(&inode->i_mutex)); + down_write(&EXT4_I(inode)->i_data_sem); + if (newsize > EXT4_I(inode)->i_disksize) + EXT4_I(inode)->i_disksize = newsize; + up_write(&EXT4_I(inode)->i_data_sem); +} + +/* + * Update i_disksize after writeback has been started. Races with truncate + * are avoided by checking i_size under i_data_sem. + */ +static inline void ext4_wb_update_i_disksize(struct inode *inode, loff_t newsize) +{ + loff_t i_size; + down_write(&EXT4_I(inode)->i_data_sem); + i_size = i_size_read(inode); + if (newsize > i_size) + newsize = i_size; if (newsize > EXT4_I(inode)->i_disksize) EXT4_I(inode)->i_disksize = newsize; up_write(&EXT4_I(inode)->i_data_sem); - return ; } struct ext4_group_info { --- linux-lts-raring-3.8.0.orig/fs/ext4/mballoc.c +++ linux-lts-raring-3.8.0/fs/ext4/mballoc.c @@ -1983,7 +1983,11 @@ group = ac->ac_g_ex.fe_group; for (i = 0; i < ngroups; group++, i++) { - if (group == ngroups) + /* + * Artificially restricted ngroups for non-extent + * files makes group > ngroups possible on first loop. + */ + if (group >= ngroups) group = 0; /* This now checks without needing the buddy page */ @@ -2829,8 +2833,8 @@ if (sbi->s_log_groups_per_flex) { ext4_group_t flex_group = ext4_flex_group(sbi, ac->ac_b_ex.fe_group); - atomic_sub(ac->ac_b_ex.fe_len, - &sbi->s_flex_groups[flex_group].free_clusters); + atomic64_sub(ac->ac_b_ex.fe_len, + &sbi->s_flex_groups[flex_group].free_clusters); } err = ext4_handle_dirty_metadata(handle, NULL, bitmap_bh); @@ -3444,7 +3448,7 @@ win = offs; ac->ac_b_ex.fe_logical = ac->ac_o_ex.fe_logical - - EXT4_B2C(sbi, win); + EXT4_NUM_B2C(sbi, win); BUG_ON(ac->ac_o_ex.fe_logical < ac->ac_b_ex.fe_logical); BUG_ON(ac->ac_o_ex.fe_len > ac->ac_b_ex.fe_len); } @@ -4136,7 +4140,7 @@ /* The max size of hash table is PREALLOC_TB_SIZE */ order = PREALLOC_TB_SIZE - 1; /* Add the prealloc space to lg */ - rcu_read_lock(); + spin_lock(&lg->lg_prealloc_lock); list_for_each_entry_rcu(tmp_pa, &lg->lg_prealloc_list[order], pa_inode_list) { spin_lock(&tmp_pa->pa_lock); @@ -4160,12 +4164,12 @@ if (!added) list_add_tail_rcu(&pa->pa_inode_list, &lg->lg_prealloc_list[order]); - rcu_read_unlock(); + spin_unlock(&lg->lg_prealloc_lock); /* Now trim the list to be not more than 8 elements */ if (lg_prealloc_count > 8) { ext4_mb_discard_lg_preallocations(sb, lg, - order, lg_prealloc_count); + order, lg_prealloc_count); return; } return ; @@ -4449,11 +4453,11 @@ node = rb_prev(new_node); if (node) { entry = rb_entry(node, struct ext4_free_data, efd_node); - if (can_merge(entry, new_entry)) { + if (can_merge(entry, new_entry) && + ext4_journal_callback_try_del(handle, &entry->efd_jce)) { new_entry->efd_start_cluster = entry->efd_start_cluster; new_entry->efd_count += entry->efd_count; rb_erase(node, &(db->bb_free_root)); - ext4_journal_callback_del(handle, &entry->efd_jce); kmem_cache_free(ext4_free_data_cachep, entry); } } @@ -4461,10 +4465,10 @@ node = rb_next(new_node); if (node) { entry = rb_entry(node, struct ext4_free_data, efd_node); - if (can_merge(new_entry, entry)) { + if (can_merge(new_entry, entry) && + ext4_journal_callback_try_del(handle, &entry->efd_jce)) { new_entry->efd_count += entry->efd_count; rb_erase(node, &(db->bb_free_root)); - ext4_journal_callback_del(handle, &entry->efd_jce); kmem_cache_free(ext4_free_data_cachep, entry); } } @@ -4590,7 +4594,7 @@ EXT4_BLOCKS_PER_GROUP(sb); count -= overflow; } - count_clusters = EXT4_B2C(sbi, count); + count_clusters = EXT4_NUM_B2C(sbi, count); bitmap_bh = ext4_read_block_bitmap(sb, block_group); if (!bitmap_bh) { err = -EIO; @@ -4648,11 +4652,16 @@ * blocks being freed are metadata. these blocks shouldn't * be used until this transaction is committed */ + retry: new_entry = kmem_cache_alloc(ext4_free_data_cachep, GFP_NOFS); if (!new_entry) { - ext4_mb_unload_buddy(&e4b); - err = -ENOMEM; - goto error_return; + /* + * We use a retry loop because + * ext4_free_blocks() is not allowed to fail. + */ + cond_resched(); + congestion_wait(BLK_RW_ASYNC, HZ/50); + goto retry; } new_entry->efd_start_cluster = bit; new_entry->efd_group = block_group; @@ -4691,8 +4700,8 @@ if (sbi->s_log_groups_per_flex) { ext4_group_t flex_group = ext4_flex_group(sbi, block_group); - atomic_add(count_clusters, - &sbi->s_flex_groups[flex_group].free_clusters); + atomic64_add(count_clusters, + &sbi->s_flex_groups[flex_group].free_clusters); } ext4_mb_unload_buddy(&e4b); @@ -4832,12 +4841,12 @@ ext4_group_desc_csum_set(sb, block_group, desc); ext4_unlock_group(sb, block_group); percpu_counter_add(&sbi->s_freeclusters_counter, - EXT4_B2C(sbi, blocks_freed)); + EXT4_NUM_B2C(sbi, blocks_freed)); if (sbi->s_log_groups_per_flex) { ext4_group_t flex_group = ext4_flex_group(sbi, block_group); - atomic_add(EXT4_B2C(sbi, blocks_freed), - &sbi->s_flex_groups[flex_group].free_clusters); + atomic64_add(EXT4_NUM_B2C(sbi, blocks_freed), + &sbi->s_flex_groups[flex_group].free_clusters); } ext4_mb_unload_buddy(&e4b); --- linux-lts-raring-3.8.0.orig/fs/ext4/namei.c +++ linux-lts-raring-3.8.0/fs/ext4/namei.c @@ -890,11 +890,8 @@ bh->b_data, bh->b_size, (block<i_sb)) + ((char *)de - bh->b_data))) { - /* On error, skip the f_pos to the next block. */ - dir_file->f_pos = (dir_file->f_pos | - (dir->i_sb->s_blocksize - 1)) + 1; - brelse(bh); - return count; + /* silently ignore the rest of the block */ + break; } ext4fs_dirhash(de->name, de->name_len, hinfo); if ((hinfo->hash < start_hash) || --- linux-lts-raring-3.8.0.orig/fs/ext4/inode.c +++ linux-lts-raring-3.8.0/fs/ext4/inode.c @@ -55,21 +55,21 @@ __u16 csum_hi = 0; __u32 csum; - csum_lo = raw->i_checksum_lo; + csum_lo = le16_to_cpu(raw->i_checksum_lo); raw->i_checksum_lo = 0; if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi)) { - csum_hi = raw->i_checksum_hi; + csum_hi = le16_to_cpu(raw->i_checksum_hi); raw->i_checksum_hi = 0; } csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)raw, EXT4_INODE_SIZE(inode->i_sb)); - raw->i_checksum_lo = csum_lo; + raw->i_checksum_lo = cpu_to_le16(csum_lo); if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE && EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi)) - raw->i_checksum_hi = csum_hi; + raw->i_checksum_hi = cpu_to_le16(csum_hi); return csum; } @@ -211,12 +211,12 @@ * don't use page cache. */ if (ext4_should_journal_data(inode) && - (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode))) { + (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) && + inode->i_ino != EXT4_JOURNAL_INO) { journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; tid_t commit_tid = EXT4_I(inode)->i_datasync_tid; - jbd2_log_start_commit(journal, commit_tid); - jbd2_log_wait_commit(journal, commit_tid); + jbd2_complete_transaction(journal, commit_tid); filemap_write_and_wait(&inode->i_data); } truncate_inode_pages(&inode->i_data, 0); @@ -714,7 +714,7 @@ bh = sb_getblk(inode->i_sb, map.m_pblk); if (!bh) { - *errp = -EIO; + *errp = -ENOMEM; return NULL; } if (map.m_flags & EXT4_MAP_NEW) { @@ -1666,10 +1666,8 @@ * Update on-disk size along with block allocation. */ disksize = ((loff_t) next + blks) << mpd->inode->i_blkbits; - if (disksize > i_size_read(mpd->inode)) - disksize = i_size_read(mpd->inode); if (disksize > EXT4_I(mpd->inode)->i_disksize) { - ext4_update_i_disksize(mpd->inode, disksize); + ext4_wb_update_i_disksize(mpd->inode, disksize); err = ext4_mark_inode_dirty(handle, mpd->inode); if (err) ext4_error(mpd->inode->i_sb, @@ -2977,9 +2975,9 @@ if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) { ext4_free_io_end(io_end); out: + inode_dio_done(inode); if (is_async) aio_complete(iocb, ret, 0); - inode_dio_done(inode); return; } @@ -3660,11 +3658,8 @@ iloc->offset = (inode_offset % inodes_per_block) * EXT4_INODE_SIZE(sb); bh = sb_getblk(sb, block); - if (!bh) { - EXT4_ERROR_INODE_BLOCK(inode, block, - "unable to read itable block"); - return -EIO; - } + if (!bh) + return -ENOMEM; if (!buffer_uptodate(bh)) { lock_buffer(bh); @@ -4425,7 +4420,9 @@ ext4_journal_stop(handle); } - if (attr->ia_valid & ATTR_SIZE) { + if (attr->ia_valid & ATTR_SIZE && attr->ia_size != inode->i_size) { + handle_t *handle; + loff_t oldsize = inode->i_size; if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); @@ -4433,72 +4430,69 @@ if (attr->ia_size > sbi->s_bitmap_maxbytes) return -EFBIG; } - } - - if (S_ISREG(inode->i_mode) && - attr->ia_valid & ATTR_SIZE && - (attr->ia_size < inode->i_size)) { - handle_t *handle; - - handle = ext4_journal_start(inode, 3); - if (IS_ERR(handle)) { - error = PTR_ERR(handle); - goto err_out; - } - if (ext4_handle_valid(handle)) { - error = ext4_orphan_add(handle, inode); - orphan = 1; - } - EXT4_I(inode)->i_disksize = attr->ia_size; - rc = ext4_mark_inode_dirty(handle, inode); - if (!error) - error = rc; - ext4_journal_stop(handle); - - if (ext4_should_order_data(inode)) { - error = ext4_begin_ordered_truncate(inode, + if (S_ISREG(inode->i_mode) && + (attr->ia_size < inode->i_size)) { + if (ext4_should_order_data(inode)) { + error = ext4_begin_ordered_truncate(inode, attr->ia_size); - if (error) { - /* Do as much error cleanup as possible */ - handle = ext4_journal_start(inode, 3); - if (IS_ERR(handle)) { - ext4_orphan_del(NULL, inode); + if (error) goto err_out; - } - ext4_orphan_del(handle, inode); - orphan = 0; - ext4_journal_stop(handle); + } + handle = ext4_journal_start(inode, 3); + if (IS_ERR(handle)) { + error = PTR_ERR(handle); goto err_out; } - } - } - - if (attr->ia_valid & ATTR_SIZE) { - if (attr->ia_size != inode->i_size) { - loff_t oldsize = inode->i_size; - - i_size_write(inode, attr->ia_size); - /* - * Blocks are going to be removed from the inode. Wait - * for dio in flight. Temporarily disable - * dioread_nolock to prevent livelock. - */ - if (orphan) { - if (!ext4_should_journal_data(inode)) { - ext4_inode_block_unlocked_dio(inode); - inode_dio_wait(inode); - ext4_inode_resume_unlocked_dio(inode); - } else - ext4_wait_for_tail_page_commit(inode); + if (ext4_handle_valid(handle)) { + error = ext4_orphan_add(handle, inode); + orphan = 1; } + down_write(&EXT4_I(inode)->i_data_sem); + EXT4_I(inode)->i_disksize = attr->ia_size; + rc = ext4_mark_inode_dirty(handle, inode); + if (!error) + error = rc; /* - * Truncate pagecache after we've waited for commit - * in data=journal mode to make pages freeable. + * We have to update i_size under i_data_sem together + * with i_disksize to avoid races with writeback code + * running ext4_wb_update_i_disksize(). */ - truncate_pagecache(inode, oldsize, inode->i_size); + if (!error) + i_size_write(inode, attr->ia_size); + up_write(&EXT4_I(inode)->i_data_sem); + ext4_journal_stop(handle); + if (error) { + ext4_orphan_del(NULL, inode); + goto err_out; + } + } else + i_size_write(inode, attr->ia_size); + + /* + * Blocks are going to be removed from the inode. Wait + * for dio in flight. Temporarily disable + * dioread_nolock to prevent livelock. + */ + if (orphan) { + if (!ext4_should_journal_data(inode)) { + ext4_inode_block_unlocked_dio(inode); + inode_dio_wait(inode); + ext4_inode_resume_unlocked_dio(inode); + } else + ext4_wait_for_tail_page_commit(inode); } - ext4_truncate(inode); + /* + * Truncate pagecache after we've waited for commit + * in data=journal mode to make pages freeable. + */ + truncate_pagecache(inode, oldsize, inode->i_size); } + /* + * We want to call ext4_truncate() even if attr->ia_size == + * inode->i_size for cases like truncation of fallocated space + */ + if (attr->ia_valid & ATTR_SIZE) + ext4_truncate(inode); if (!rc) { setattr_copy(inode, attr); @@ -4526,7 +4520,7 @@ struct kstat *stat) { struct inode *inode; - unsigned long delalloc_blocks; + unsigned long long delalloc_blocks; inode = dentry->d_inode; generic_fillattr(inode, stat); @@ -4544,7 +4538,7 @@ delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb), EXT4_I(inode)->i_reserved_data_blocks); - stat->blocks += (delalloc_blocks << inode->i_sb->s_blocksize_bits)>>9; + stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits-9); return 0; } --- linux-lts-raring-3.8.0.orig/fs/ext4/file.c +++ linux-lts-raring-3.8.0/fs/ext4/file.c @@ -311,7 +311,7 @@ blkbits = inode->i_sb->s_blocksize_bits; startoff = *offset; lastoff = startoff; - endoff = (map->m_lblk + map->m_len) << blkbits; + endoff = (loff_t)(map->m_lblk + map->m_len) << blkbits; index = startoff >> PAGE_CACHE_SHIFT; end = endoff >> PAGE_CACHE_SHIFT; @@ -456,7 +456,7 @@ ret = ext4_map_blocks(NULL, inode, &map, 0); if (ret > 0 && !(map.m_flags & EXT4_MAP_UNWRITTEN)) { if (last != start) - dataoff = last << blkbits; + dataoff = (loff_t)last << blkbits; break; } @@ -469,7 +469,7 @@ if (last >= es.start && last < es.start + es.len) { if (last != start) - dataoff = last << blkbits; + dataoff = (loff_t)last << blkbits; break; } @@ -487,7 +487,7 @@ } last++; - dataoff = last << blkbits; + dataoff = (loff_t)last << blkbits; } while (last <= end); mutex_unlock(&inode->i_mutex); @@ -541,7 +541,7 @@ ret = ext4_map_blocks(NULL, inode, &map, 0); if (ret > 0 && !(map.m_flags & EXT4_MAP_UNWRITTEN)) { last += ret; - holeoff = last << blkbits; + holeoff = (loff_t)last << blkbits; continue; } @@ -554,7 +554,7 @@ if (last >= es.start && last < es.start + es.len) { last = es.start + es.len; - holeoff = last << blkbits; + holeoff = (loff_t)last << blkbits; continue; } @@ -569,7 +569,7 @@ &map, &holeoff); if (!unwritten) { last += ret; - holeoff = last << blkbits; + holeoff = (loff_t)last << blkbits; continue; } } --- linux-lts-raring-3.8.0.orig/fs/ext4/page-io.c +++ linux-lts-raring-3.8.0/fs/ext4/page-io.c @@ -103,14 +103,13 @@ "(inode %lu, offset %llu, size %zd, error %d)", inode->i_ino, offset, size, ret); } - if (io->iocb) - aio_complete(io->iocb, io->result, 0); - - if (io->flag & EXT4_IO_END_DIRECT) - inode_dio_done(inode); /* Wake up anyone waiting on unwritten extent conversion */ if (atomic_dec_and_test(&EXT4_I(inode)->i_unwritten)) wake_up_all(ext4_ioend_wq(inode)); + if (io->flag & EXT4_IO_END_DIRECT) + inode_dio_done(inode); + if (io->iocb) + aio_complete(io->iocb, io->result, 0); return ret; } --- linux-lts-raring-3.8.0.orig/fs/ext4/xattr.c +++ linux-lts-raring-3.8.0/fs/ext4/xattr.c @@ -549,7 +549,7 @@ error = ext4_handle_dirty_xattr_block(handle, inode, bh); if (IS_SYNC(inode)) ext4_handle_sync(handle); - dquot_free_block(inode, 1); + dquot_free_block(inode, EXT4_C2B(EXT4_SB(inode->i_sb), 1)); ea_bdebug(bh, "refcount now=%d; releasing", le32_to_cpu(BHDR(bh)->h_refcount)); } @@ -832,7 +832,8 @@ else { /* The old block is released after updating the inode. */ - error = dquot_alloc_block(inode, 1); + error = dquot_alloc_block(inode, + EXT4_C2B(EXT4_SB(sb), 1)); if (error) goto cleanup; error = ext4_journal_get_write_access(handle, @@ -887,16 +888,17 @@ new_bh = sb_getblk(sb, block); if (!new_bh) { + error = -ENOMEM; getblk_failed: ext4_free_blocks(handle, inode, NULL, block, 1, EXT4_FREE_BLOCKS_METADATA); - error = -EIO; goto cleanup; } lock_buffer(new_bh); error = ext4_journal_get_create_access(handle, new_bh); if (error) { unlock_buffer(new_bh); + error = -EIO; goto getblk_failed; } memcpy(new_bh->b_data, s->base, new_bh->b_size); @@ -928,7 +930,7 @@ return error; cleanup_dquot: - dquot_free_block(inode, 1); + dquot_free_block(inode, EXT4_C2B(EXT4_SB(sb), 1)); goto cleanup; bad_block: --- linux-lts-raring-3.8.0.orig/fs/ext4/indirect.c +++ linux-lts-raring-3.8.0/fs/ext4/indirect.c @@ -146,6 +146,7 @@ struct super_block *sb = inode->i_sb; Indirect *p = chain; struct buffer_head *bh; + int ret = -EIO; *err = 0; /* i_data is not going away, no lock needed */ @@ -154,8 +155,10 @@ goto no_block; while (--depth) { bh = sb_getblk(sb, le32_to_cpu(p->key)); - if (unlikely(!bh)) + if (unlikely(!bh)) { + ret = -ENOMEM; goto failure; + } if (!bh_uptodate_or_lock(bh)) { if (bh_submit_read(bh) < 0) { @@ -177,7 +180,7 @@ return NULL; failure: - *err = -EIO; + *err = ret; no_block: return p; } @@ -471,7 +474,7 @@ */ bh = sb_getblk(inode->i_sb, new_blocks[n-1]); if (unlikely(!bh)) { - err = -EIO; + err = -ENOMEM; goto failed; } --- linux-lts-raring-3.8.0.orig/fs/ext4/extents.c +++ linux-lts-raring-3.8.0/fs/ext4/extents.c @@ -725,6 +725,7 @@ struct ext4_extent_header *eh; struct buffer_head *bh; short int depth, i, ppos = 0, alloc = 0; + int ret; eh = ext_inode_hdr(inode); depth = ext_depth(inode); @@ -752,12 +753,15 @@ path[ppos].p_ext = NULL; bh = sb_getblk(inode->i_sb, path[ppos].p_block); - if (unlikely(!bh)) + if (unlikely(!bh)) { + ret = -ENOMEM; goto err; + } if (!bh_uptodate_or_lock(bh)) { trace_ext4_ext_load_extent(inode, block, path[ppos].p_block); - if (bh_submit_read(bh) < 0) { + ret = bh_submit_read(bh); + if (ret < 0) { put_bh(bh); goto err; } @@ -768,13 +772,15 @@ put_bh(bh); EXT4_ERROR_INODE(inode, "ppos %d > depth %d", ppos, depth); + ret = -EIO; goto err; } path[ppos].p_bh = bh; path[ppos].p_hdr = eh; i--; - if (ext4_ext_check_block(inode, eh, i, bh)) + ret = ext4_ext_check_block(inode, eh, i, bh); + if (ret < 0) goto err; } @@ -796,7 +802,7 @@ ext4_ext_drop_refs(path); if (alloc) kfree(path); - return ERR_PTR(-EIO); + return ERR_PTR(ret); } /* @@ -951,7 +957,7 @@ } bh = sb_getblk(inode->i_sb, newblock); if (!bh) { - err = -EIO; + err = -ENOMEM; goto cleanup; } lock_buffer(bh); @@ -1024,7 +1030,7 @@ newblock = ablocks[--a]; bh = sb_getblk(inode->i_sb, newblock); if (!bh) { - err = -EIO; + err = -ENOMEM; goto cleanup; } lock_buffer(bh); @@ -1136,11 +1142,8 @@ return err; bh = sb_getblk(inode->i_sb, newblock); - if (!bh) { - err = -EIO; - ext4_std_error(inode->i_sb, err); - return err; - } + if (!bh) + return -ENOMEM; lock_buffer(bh); err = ext4_journal_get_create_access(handle, bh); @@ -3086,6 +3089,7 @@ int err = 0; int uninitialized; int split_flag1, flags1; + int allocated = map->m_len; depth = ext_depth(inode); ex = path[depth].p_ext; @@ -3105,6 +3109,8 @@ map->m_lblk + map->m_len, split_flag1, flags1); if (err) goto out; + } else { + allocated = ee_len - (map->m_lblk - ee_block); } ext4_ext_drop_refs(path); @@ -3127,7 +3133,7 @@ ext4_ext_show_leaf(inode, path); out: - return err ? err : map->m_len; + return err ? err : allocated; } /* @@ -3272,7 +3278,7 @@ if (EXT4_EXT_MAY_ZEROOUT & split_flag) max_zeroout = sbi->s_extent_max_zeroout_kb >> - inode->i_sb->s_blocksize_bits; + (inode->i_sb->s_blocksize_bits - 10); /* If extent is less than s_max_zeroout_kb, zeroout directly */ if (max_zeroout && (ee_len <= max_zeroout)) { @@ -3717,6 +3723,7 @@ allocated - map->m_len); allocated = map->m_len; } + map->m_len = allocated; /* * If we have done fallocate with the offset that is already @@ -4319,9 +4326,20 @@ last_block = (inode->i_size + sb->s_blocksize - 1) >> EXT4_BLOCK_SIZE_BITS(sb); +retry: err = ext4_es_remove_extent(inode, last_block, EXT_MAX_BLOCKS - last_block); + if (err == -ENOMEM) { + cond_resched(); + congestion_wait(BLK_RW_ASYNC, HZ/50); + goto retry; + } + if (err) { + ext4_std_error(inode->i_sb, err); + return; + } err = ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1); + ext4_std_error(inode->i_sb, err); /* In a multi-transaction truncate, we only make the final * transaction synchronous. @@ -4611,7 +4629,7 @@ error = ext4_get_inode_loc(inode, &iloc); if (error) return error; - physical = iloc.bh->b_blocknr << blockbits; + physical = (__u64)iloc.bh->b_blocknr << blockbits; offset = EXT4_GOOD_OLD_INODE_SIZE + EXT4_I(inode)->i_extra_isize; physical += offset; @@ -4619,7 +4637,7 @@ flags |= FIEMAP_EXTENT_DATA_INLINE; brelse(iloc.bh); } else { /* external block */ - physical = EXT4_I(inode)->i_file_acl << blockbits; + physical = (__u64)EXT4_I(inode)->i_file_acl << blockbits; length = inode->i_sb->s_blocksize; } --- linux-lts-raring-3.8.0.orig/fs/ext4/ext4_jbd2.c +++ linux-lts-raring-3.8.0/fs/ext4/ext4_jbd2.c @@ -109,10 +109,10 @@ if (ext4_handle_valid(handle)) { err = jbd2_journal_dirty_metadata(handle, bh); - if (err) { - /* Errors can only happen if there is a bug */ - handle->h_err = err; - __ext4_journal_stop(where, line, handle); + /* Errors can only happen if there is a bug */ + if (WARN_ON_ONCE(err)) { + ext4_journal_abort_handle(where, line, __func__, bh, + handle, err); } } else { if (inode) --- linux-lts-raring-3.8.0.orig/fs/ext4/balloc.c +++ linux-lts-raring-3.8.0/fs/ext4/balloc.c @@ -358,7 +358,7 @@ } /** - * ext4_read_block_bitmap() + * ext4_read_block_bitmap_nowait() * @sb: super block * @block_group: given block group * @@ -457,6 +457,8 @@ struct buffer_head *bh; bh = ext4_read_block_bitmap_nowait(sb, block_group); + if (!bh) + return NULL; if (ext4_wait_block_bitmap(sb, block_group, bh)) { put_bh(bh); return NULL; @@ -482,11 +484,16 @@ free_clusters = percpu_counter_read_positive(fcc); dirty_clusters = percpu_counter_read_positive(dcc); - root_clusters = EXT4_B2C(sbi, ext4_r_blocks_count(sbi->s_es)); + + /* + * r_blocks_count should always be multiple of the cluster ratio so + * we are safe to do a plane bit shift only. + */ + root_clusters = ext4_r_blocks_count(sbi->s_es) >> sbi->s_cluster_bits; if (free_clusters - (nclusters + root_clusters + dirty_clusters) < EXT4_FREECLUSTERS_WATERMARK) { - free_clusters = EXT4_C2B(sbi, percpu_counter_sum_positive(fcc)); + free_clusters = percpu_counter_sum_positive(fcc); dirty_clusters = percpu_counter_sum_positive(dcc); } /* Check whether we have space after accounting for current @@ -628,7 +635,7 @@ brelse(bitmap_bh); printk(KERN_DEBUG "ext4_count_free_clusters: stored = %llu" ", computed = %llu, %llu\n", - EXT4_B2C(EXT4_SB(sb), ext4_free_blocks_count(es)), + EXT4_NUM_B2C(EXT4_SB(sb), ext4_free_blocks_count(es)), desc_count, bitmap_count); return bitmap_count; #else --- linux-lts-raring-3.8.0.orig/fs/xfs/xfs_bmap.c +++ linux-lts-raring-3.8.0/fs/xfs/xfs_bmap.c @@ -147,7 +147,10 @@ xfs_fsblock_t *firstblock, /* first block allocated in xaction */ xfs_extlen_t total, /* total blocks needed by transaction */ int *logflagsp, /* inode logging flags */ - int whichfork); /* data or attr fork */ + int whichfork, /* data or attr fork */ + void (*init_fn)(struct xfs_buf *bp, + struct xfs_inode *ip, + struct xfs_ifork *ifp)); /* * Search the extents list for the inode, for the extent containing bno. @@ -357,7 +360,42 @@ } /* - * Called from xfs_bmap_add_attrfork to handle local format files. + * Block initialisation functions for local to extent format conversion. + * As these get more complex, they will be moved to the relevant files, + * but for now they are too simple to worry about. + */ +STATIC void +xfs_bmap_local_to_extents_init_fn( + struct xfs_buf *bp, + struct xfs_inode *ip, + struct xfs_ifork *ifp) +{ + bp->b_ops = &xfs_bmbt_buf_ops; + memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); +} + +STATIC void +xfs_symlink_local_to_remote( + struct xfs_buf *bp, + struct xfs_inode *ip, + struct xfs_ifork *ifp) +{ + /* remote symlink blocks are not verifiable until CRCs come along */ + bp->b_ops = NULL; + memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); +} + +/* + * Called from xfs_bmap_add_attrfork to handle local format files. Each + * different data fork content type needs a different callout to do the + * conversion. Some are basic and only require special block initialisation + * callouts for the data formating, others (directories) are so specialised they + * handle everything themselves. + * + * XXX (dgc): investigate whether directory conversion can use the generic + * formatting callout. It should be possible - it's just a very complex + * formatter. it would also require passing the transaction through to the init + * function. */ STATIC int /* error */ xfs_bmap_add_attrfork_local( @@ -368,25 +406,29 @@ int *flags) /* inode logging flags */ { xfs_da_args_t dargs; /* args for dir/attr code */ - int error; /* error return value */ - xfs_mount_t *mp; /* mount structure pointer */ if (ip->i_df.if_bytes <= XFS_IFORK_DSIZE(ip)) return 0; + if (S_ISDIR(ip->i_d.di_mode)) { - mp = ip->i_mount; memset(&dargs, 0, sizeof(dargs)); dargs.dp = ip; dargs.firstblock = firstblock; dargs.flist = flist; - dargs.total = mp->m_dirblkfsbs; + dargs.total = ip->i_mount->m_dirblkfsbs; dargs.whichfork = XFS_DATA_FORK; dargs.trans = tp; - error = xfs_dir2_sf_to_block(&dargs); - } else - error = xfs_bmap_local_to_extents(tp, ip, firstblock, 1, flags, - XFS_DATA_FORK); - return error; + return xfs_dir2_sf_to_block(&dargs); + } + + if (S_ISLNK(ip->i_d.di_mode)) + return xfs_bmap_local_to_extents(tp, ip, firstblock, 1, + flags, XFS_DATA_FORK, + xfs_symlink_local_to_remote); + + return xfs_bmap_local_to_extents(tp, ip, firstblock, 1, flags, + XFS_DATA_FORK, + xfs_bmap_local_to_extents_init_fn); } /* @@ -3221,7 +3263,10 @@ xfs_fsblock_t *firstblock, /* first block allocated in xaction */ xfs_extlen_t total, /* total blocks needed by transaction */ int *logflagsp, /* inode logging flags */ - int whichfork) /* data or attr fork */ + int whichfork, + void (*init_fn)(struct xfs_buf *bp, + struct xfs_inode *ip, + struct xfs_ifork *ifp)) { int error; /* error return value */ int flags; /* logging flags returned */ @@ -3241,12 +3286,12 @@ xfs_buf_t *bp; /* buffer for extent block */ xfs_bmbt_rec_host_t *ep;/* extent record pointer */ + ASSERT((ifp->if_flags & + (XFS_IFINLINE|XFS_IFEXTENTS|XFS_IFEXTIREC)) == XFS_IFINLINE); memset(&args, 0, sizeof(args)); args.tp = tp; args.mp = ip->i_mount; args.firstblock = *firstblock; - ASSERT((ifp->if_flags & - (XFS_IFINLINE|XFS_IFEXTENTS|XFS_IFEXTIREC)) == XFS_IFINLINE); /* * Allocate a block. We know we need only one, since the * file currently fits in an inode. @@ -3262,17 +3307,20 @@ args.mod = args.minleft = args.alignment = args.wasdel = args.isfl = args.minalignslop = 0; args.minlen = args.maxlen = args.prod = 1; - if ((error = xfs_alloc_vextent(&args))) + error = xfs_alloc_vextent(&args); + if (error) goto done; - /* - * Can't fail, the space was reserved. - */ + + /* Can't fail, the space was reserved. */ ASSERT(args.fsbno != NULLFSBLOCK); ASSERT(args.len == 1); *firstblock = args.fsbno; bp = xfs_btree_get_bufl(args.mp, tp, args.fsbno, 0); - bp->b_ops = &xfs_bmbt_buf_ops; - memcpy(bp->b_addr, ifp->if_u1.if_data, ifp->if_bytes); + + /* initialise the block and copy the data */ + init_fn(bp, ip, ifp); + + /* account for the change in fork size and log everything */ xfs_trans_log_buf(tp, bp, 0, ifp->if_bytes - 1); xfs_bmap_forkoff_reset(args.mp, ip, whichfork); xfs_idata_realloc(ip, -ifp->if_bytes, whichfork); @@ -4919,8 +4967,32 @@ XFS_STATS_INC(xs_blk_mapw); if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) { + /* + * XXX (dgc): This assumes we are only called for inodes that + * contain content neutral data in local format. Anything that + * contains caller-specific data in local format that needs + * transformation to move to a block format needs to do the + * conversion to extent format itself. + * + * Directory data forks and attribute forks handle this + * themselves, but with the addition of metadata verifiers every + * data fork in local format now contains caller specific data + * and as such conversion through this function is likely to be + * broken. + * + * The only likely user of this branch is for remote symlinks, + * but we cannot overwrite the data fork contents of the symlink + * (EEXIST occurs higher up the stack) and so it will never go + * from local format to extent format here. Hence I don't think + * this branch is ever executed intentionally and we should + * consider removing it and asserting that xfs_bmapi_write() + * cannot be called directly on local format forks. i.e. callers + * are completely responsible for local to extent format + * conversion, not xfs_bmapi_write(). + */ error = xfs_bmap_local_to_extents(tp, ip, firstblock, total, - &bma.logflags, whichfork); + &bma.logflags, whichfork, + xfs_bmap_local_to_extents_init_fn); if (error) goto error0; } --- linux-lts-raring-3.8.0.orig/fs/xfs/xfs_iops.c +++ linux-lts-raring-3.8.0/fs/xfs/xfs_iops.c @@ -455,6 +455,28 @@ return 0; } +static void +xfs_setattr_mode( + struct xfs_trans *tp, + struct xfs_inode *ip, + struct iattr *iattr) +{ + struct inode *inode = VFS_I(ip); + umode_t mode = iattr->ia_mode; + + ASSERT(tp); + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); + + if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) + mode &= ~S_ISGID; + + ip->i_d.di_mode &= S_IFMT; + ip->i_d.di_mode |= mode & ~S_IFMT; + + inode->i_mode &= S_IFMT; + inode->i_mode |= mode & ~S_IFMT; +} + int xfs_setattr_nonsize( struct xfs_inode *ip, @@ -606,18 +628,8 @@ /* * Change file access modes. */ - if (mask & ATTR_MODE) { - umode_t mode = iattr->ia_mode; - - if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) - mode &= ~S_ISGID; - - ip->i_d.di_mode &= S_IFMT; - ip->i_d.di_mode |= mode & ~S_IFMT; - - inode->i_mode &= S_IFMT; - inode->i_mode |= mode & ~S_IFMT; - } + if (mask & ATTR_MODE) + xfs_setattr_mode(tp, ip, iattr); /* * Change file access or modified times. @@ -714,9 +726,8 @@ return XFS_ERROR(error); ASSERT(S_ISREG(ip->i_d.di_mode)); - ASSERT((mask & (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| - ATTR_MTIME_SET|ATTR_KILL_SUID|ATTR_KILL_SGID| - ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); + ASSERT((mask & (ATTR_UID|ATTR_GID|ATTR_ATIME|ATTR_ATIME_SET| + ATTR_MTIME_SET|ATTR_KILL_PRIV|ATTR_TIMES_SET)) == 0); if (!(flags & XFS_ATTR_NOLOCK)) { lock_flags |= XFS_IOLOCK_EXCL; @@ -860,6 +871,12 @@ xfs_inode_clear_eofblocks_tag(ip); } + /* + * Change file access modes. + */ + if (mask & ATTR_MODE) + xfs_setattr_mode(tp, ip, iattr); + if (mask & ATTR_CTIME) { inode->i_ctime = iattr->ia_ctime; ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec; --- linux-lts-raring-3.8.0.orig/fs/pstore/platform.c +++ linux-lts-raring-3.8.0/fs/pstore/platform.c @@ -96,6 +96,27 @@ } } +bool pstore_cannot_block_path(enum kmsg_dump_reason reason) +{ + /* + * In case of NMI path, pstore shouldn't be blocked + * regardless of reason. + */ + if (in_nmi()) + return true; + + switch (reason) { + /* In panic case, other cpus are stopped by smp_send_stop(). */ + case KMSG_DUMP_PANIC: + /* Emergency restart shouldn't be blocked by spin lock. */ + case KMSG_DUMP_EMERG: + return true; + default: + return false; + } +} +EXPORT_SYMBOL_GPL(pstore_cannot_block_path); + /* * callback from kmsg_dump. (s2,l2) has the most recently * written bytes, older bytes are in (s1,l1). Save as much @@ -114,10 +135,12 @@ why = get_reason_str(reason); - if (in_nmi()) { - is_locked = spin_trylock(&psinfo->buf_lock); - if (!is_locked) - pr_err("pstore dump routine blocked in NMI, may corrupt error record\n"); + if (pstore_cannot_block_path(reason)) { + is_locked = spin_trylock_irqsave(&psinfo->buf_lock, flags); + if (!is_locked) { + pr_err("pstore dump routine blocked in %s path, may corrupt error record\n" + , in_nmi() ? "NMI" : why); + } } else spin_lock_irqsave(&psinfo->buf_lock, flags); oopscount++; @@ -143,9 +166,9 @@ total += hsize + len; part++; } - if (in_nmi()) { + if (pstore_cannot_block_path(reason)) { if (is_locked) - spin_unlock(&psinfo->buf_lock); + spin_unlock_irqrestore(&psinfo->buf_lock, flags); } else spin_unlock_irqrestore(&psinfo->buf_lock, flags); } --- linux-lts-raring-3.8.0.orig/fs/reiserfs/inode.c +++ linux-lts-raring-3.8.0/fs/reiserfs/inode.c @@ -1810,11 +1810,16 @@ TYPE_STAT_DATA, SD_SIZE, MAX_US_INT); memcpy(INODE_PKEY(inode), &(ih.ih_key), KEY_SIZE); args.dirid = le32_to_cpu(ih.ih_key.k_dir_id); - if (insert_inode_locked4(inode, args.objectid, - reiserfs_find_actor, &args) < 0) { + + reiserfs_write_unlock(inode->i_sb); + err = insert_inode_locked4(inode, args.objectid, + reiserfs_find_actor, &args); + reiserfs_write_lock(inode->i_sb); + if (err) { err = -EINVAL; goto out_bad_inode; } + if (old_format_only(sb)) /* not a perfect generation count, as object ids can be reused, but ** this is as good as reiserfs can do right now. --- linux-lts-raring-3.8.0.orig/fs/reiserfs/dir.c +++ linux-lts-raring-3.8.0/fs/reiserfs/dir.c @@ -204,6 +204,8 @@ next_pos = deh_offset(deh) + 1; if (item_moved(&tmp_ih, &path_to_entry)) { + set_cpu_key_k_offset(&pos_key, + next_pos); goto research; } } /* for */ --- linux-lts-raring-3.8.0.orig/fs/reiserfs/xattr_acl.c +++ linux-lts-raring-3.8.0/fs/reiserfs/xattr_acl.c @@ -443,6 +443,9 @@ int depth; int error; + if (IS_PRIVATE(inode)) + return 0; + if (S_ISLNK(inode->i_mode)) return -EOPNOTSUPP; --- linux-lts-raring-3.8.0.orig/fs/reiserfs/xattr.c +++ linux-lts-raring-3.8.0/fs/reiserfs/xattr.c @@ -187,8 +187,8 @@ if (dbuf->count == ARRAY_SIZE(dbuf->dentries)) return -ENOSPC; - if (name[0] == '.' && (name[1] == '\0' || - (name[1] == '.' && name[2] == '\0'))) + if (name[0] == '.' && (namelen < 2 || + (namelen == 2 && name[1] == '.'))) return 0; dentry = lookup_one_len(name, dbuf->xadir, namelen); @@ -318,7 +318,19 @@ static int chown_one_xattr(struct dentry *dentry, void *data) { struct iattr *attrs = data; - return reiserfs_setattr(dentry, attrs); + int ia_valid = attrs->ia_valid; + int err; + + /* + * We only want the ownership bits. Otherwise, we'll do + * things like change a directory to a regular file if + * ATTR_MODE is set. + */ + attrs->ia_valid &= (ATTR_UID|ATTR_GID); + err = reiserfs_setattr(dentry, attrs); + attrs->ia_valid = ia_valid; + + return err; } /* No i_mutex, but the inode is unconnected. */ --- linux-lts-raring-3.8.0.orig/fs/isofs/inode.c +++ linux-lts-raring-3.8.0/fs/isofs/inode.c @@ -125,8 +125,8 @@ static int isofs_remount(struct super_block *sb, int *flags, char *data) { - /* we probably want a lot more here */ - *flags |= MS_RDONLY; + if (!(*flags & MS_RDONLY)) + return -EROFS; return 0; } @@ -779,15 +779,6 @@ */ s->s_maxbytes = 0x80000000000LL; - /* - * The CDROM is read-only, has no nodes (devices) on it, and since - * all of the files appear to be owned by root, we really do not want - * to allow suid. (suid or devices will not show up unless we have - * Rock Ridge extensions) - */ - - s->s_flags |= MS_RDONLY /* | MS_NODEV | MS_NOSUID */; - /* Set this for reference. Its not currently used except on write which we don't have .. */ @@ -1546,6 +1537,9 @@ static struct dentry *isofs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data) { + /* We don't support read-write mounts */ + if (!(flags & MS_RDONLY)) + return ERR_PTR(-EACCES); return mount_bdev(fs_type, flags, dev_name, data, isofs_fill_super); } --- linux-lts-raring-3.8.0.orig/fs/nfs/pnfs.h +++ linux-lts-raring-3.8.0/fs/nfs/pnfs.h @@ -132,7 +132,7 @@ struct pnfs_layout_hdr { atomic_t plh_refcount; struct list_head plh_layouts; /* other client layouts */ - struct list_head plh_bulk_recall; /* clnt list of bulk recalls */ + struct list_head plh_bulk_destroy; struct list_head plh_segs; /* layout segments list */ nfs4_stateid plh_stateid; atomic_t plh_outstanding; /* number of RPCs out */ @@ -196,6 +196,11 @@ void pnfs_free_lseg_list(struct list_head *tmp_list); void pnfs_destroy_layout(struct nfs_inode *); void pnfs_destroy_all_layouts(struct nfs_client *); +int pnfs_destroy_layouts_byfsid(struct nfs_client *clp, + struct nfs_fsid *fsid, + bool is_recall); +int pnfs_destroy_layouts_byclid(struct nfs_client *clp, + bool is_recall); void pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo); void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new, @@ -225,9 +230,11 @@ void nfs4_deviceid_mark_client_invalid(struct nfs_client *clp); int pnfs_read_done_resend_to_mds(struct inode *inode, struct list_head *head, - const struct nfs_pgio_completion_ops *compl_ops); + const struct nfs_pgio_completion_ops *compl_ops, + struct nfs_direct_req *dreq); int pnfs_write_done_resend_to_mds(struct inode *inode, struct list_head *head, - const struct nfs_pgio_completion_ops *compl_ops); + const struct nfs_pgio_completion_ops *compl_ops, + struct nfs_direct_req *dreq); struct nfs4_threshold *pnfs_mdsthreshold_alloc(void); /* nfs4_deviceid_flags */ --- linux-lts-raring-3.8.0.orig/fs/nfs/nfs4proc.c +++ linux-lts-raring-3.8.0/fs/nfs/nfs4proc.c @@ -1017,7 +1017,7 @@ struct nfs4_state *state = opendata->state; struct nfs_inode *nfsi = NFS_I(state->inode); struct nfs_delegation *delegation; - int open_mode = opendata->o_arg.open_flags & (O_EXCL|O_TRUNC); + int open_mode = opendata->o_arg.open_flags; fmode_t fmode = opendata->o_arg.fmode; nfs4_stateid stateid; int ret = -EAGAIN; @@ -1374,6 +1374,12 @@ case -ENOMEM: err = 0; goto out; + case -NFS4ERR_DELAY: + case -NFS4ERR_GRACE: + set_bit(NFS_DELEGATED_STATE, &state->flags); + ssleep(1); + err = -EAGAIN; + goto out; } err = nfs4_handle_exception(server, err, &exception); } while (exception.retry); @@ -1463,7 +1469,7 @@ struct nfs4_state_owner *sp = data->owner; if (nfs_wait_on_sequence(data->o_arg.seqid, task) != 0) - return; + goto out_wait; /* * Check if we still need to send an OPEN call, or if we can use * a delegation instead. @@ -1498,6 +1504,7 @@ rcu_read_unlock(); out_no_action: task->tk_action = NULL; +out_wait: nfs4_sequence_done(task, &data->o_res.seq_res); } @@ -2150,7 +2157,7 @@ dprintk("%s: begin!\n", __func__); if (nfs_wait_on_sequence(calldata->arg.seqid, task) != 0) - return; + goto out_wait; task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_DOWNGRADE]; calldata->arg.fmode = FMODE_READ|FMODE_WRITE; @@ -2172,16 +2179,14 @@ if (!call_close) { /* Note: exit _without_ calling nfs4_close_done */ - task->tk_action = NULL; - nfs4_sequence_done(task, &calldata->res.seq_res); - goto out; + goto out_no_action; } if (calldata->arg.fmode == 0) { task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE]; if (calldata->roc && pnfs_roc_drain(inode, &calldata->roc_barrier, task)) - goto out; + goto out_wait; } nfs_fattr_init(calldata->res.fattr); @@ -2191,8 +2196,12 @@ &calldata->res.seq_res, task) != 0) nfs_release_seqid(calldata->arg.seqid); -out: dprintk("%s: done!\n", __func__); + return; +out_no_action: + task->tk_action = NULL; +out_wait: + nfs4_sequence_done(task, &calldata->res.seq_res); } static const struct rpc_call_ops nfs4_close_ops = { @@ -4423,12 +4432,10 @@ struct nfs4_unlockdata *calldata = data; if (nfs_wait_on_sequence(calldata->arg.seqid, task) != 0) - return; + goto out_wait; if (test_bit(NFS_LOCK_INITIALIZED, &calldata->lsp->ls_flags) == 0) { /* Note: exit _without_ running nfs4_locku_done */ - task->tk_action = NULL; - nfs4_sequence_done(task, &calldata->res.seq_res); - return; + goto out_no_action; } calldata->timestamp = jiffies; if (nfs4_setup_sequence(calldata->server, @@ -4436,6 +4443,11 @@ &calldata->res.seq_res, task) != 0) nfs_release_seqid(calldata->arg.seqid); + return; +out_no_action: + task->tk_action = NULL; +out_wait: + nfs4_sequence_done(task, &calldata->res.seq_res); } static const struct rpc_call_ops nfs4_locku_ops = { @@ -4501,9 +4513,9 @@ if (status != 0) goto out; /* Is this a delegated lock? */ - if (test_bit(NFS_DELEGATED_STATE, &state->flags)) - goto out; lsp = request->fl_u.nfs4_fl.owner; + if (test_bit(NFS_LOCK_INITIALIZED, &lsp->ls_flags) == 0) + goto out; seqid = nfs_alloc_seqid(&lsp->ls_seqid, GFP_KERNEL); status = -ENOMEM; if (seqid == NULL) @@ -4576,7 +4588,7 @@ dprintk("%s: begin!\n", __func__); if (nfs_wait_on_sequence(data->arg.lock_seqid, task) != 0) - return; + goto out_wait; /* Do we need to do an open_to_lock_owner? */ if (!(data->arg.lock_seqid->sequence->flags & NFS_SEQID_CONFIRMED)) { if (nfs_wait_on_sequence(data->arg.open_seqid, task) != 0) { @@ -4596,6 +4608,8 @@ nfs_release_seqid(data->arg.open_seqid); out_release_lock_seqid: nfs_release_seqid(data->arg.lock_seqid); +out_wait: + nfs4_sequence_done(task, &data->res.seq_res); dprintk("%s: done!, ret = %d\n", __func__, data->rpc_status); } @@ -4970,13 +4984,17 @@ nfs4_schedule_stateid_recovery(server, state); err = 0; goto out; + case -NFS4ERR_DELAY: + case -NFS4ERR_GRACE: + set_bit(NFS_DELEGATED_STATE, &state->flags); + ssleep(1); + err = -EAGAIN; + goto out; case -ENOMEM: case -NFS4ERR_DENIED: /* kill_proc(fl->fl_pid, SIGLOST, 1); */ err = 0; goto out; - case -NFS4ERR_DELAY: - break; } err = nfs4_handle_exception(server, err, &exception); } while (exception.retry); @@ -6079,11 +6097,13 @@ static void nfs4_layoutget_release(void *calldata) { struct nfs4_layoutget *lgp = calldata; - struct nfs_server *server = NFS_SERVER(lgp->args.inode); + struct inode *inode = lgp->args.inode; + struct nfs_server *server = NFS_SERVER(inode); size_t max_pages = max_response_pages(server); dprintk("--> %s\n", __func__); nfs4_free_pages(lgp->args.layout.pages, max_pages); + pnfs_put_layout_hdr(NFS_I(inode)->layout); put_nfs_open_context(lgp->args.ctx); kfree(calldata); dprintk("<-- %s\n", __func__); @@ -6098,7 +6118,8 @@ struct pnfs_layout_segment * nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags) { - struct nfs_server *server = NFS_SERVER(lgp->args.inode); + struct inode *inode = lgp->args.inode; + struct nfs_server *server = NFS_SERVER(inode); size_t max_pages = max_response_pages(server); struct rpc_task *task; struct rpc_message msg = { @@ -6128,13 +6149,18 @@ lgp->res.layoutp = &lgp->args.layout; lgp->res.seq_res.sr_slot = NULL; nfs41_init_sequence(&lgp->args.seq_args, &lgp->res.seq_res, 0); + + /* nfs4_layoutget_release calls pnfs_put_layout_hdr */ + pnfs_get_layout_hdr(NFS_I(inode)->layout); + task = rpc_run_task(&task_setup_data); if (IS_ERR(task)) return ERR_CAST(task); status = nfs4_wait_for_completion_rpc_task(task); if (status == 0) status = task->tk_status; - if (status == 0) + /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */ + if (status == 0 && lgp->res.layoutp->len) lseg = pnfs_layout_process(lgp); rpc_put_task(task); dprintk("<-- %s status=%d\n", __func__, status); @@ -6350,22 +6376,8 @@ static void nfs4_layoutcommit_release(void *calldata) { struct nfs4_layoutcommit_data *data = calldata; - struct pnfs_layout_segment *lseg, *tmp; - unsigned long *bitlock = &NFS_I(data->args.inode)->flags; pnfs_cleanup_layoutcommit(data); - /* Matched by references in pnfs_set_layoutcommit */ - list_for_each_entry_safe(lseg, tmp, &data->lseg_list, pls_lc_list) { - list_del_init(&lseg->pls_lc_list); - if (test_and_clear_bit(NFS_LSEG_LAYOUTCOMMIT, - &lseg->pls_flags)) - pnfs_put_lseg(lseg); - } - - clear_bit_unlock(NFS_INO_LAYOUTCOMMITTING, bitlock); - smp_mb__after_clear_bit(); - wake_up_bit(bitlock, NFS_INO_LAYOUTCOMMITTING); - put_rpccred(data->cred); kfree(data); } --- linux-lts-raring-3.8.0.orig/fs/nfs/pnfs.c +++ linux-lts-raring-3.8.0/fs/nfs/pnfs.c @@ -417,6 +417,16 @@ lo_seg_intersecting(lseg_range, recall_range); } +static bool pnfs_lseg_dec_and_remove_zero(struct pnfs_layout_segment *lseg, + struct list_head *tmp_list) +{ + if (!atomic_dec_and_test(&lseg->pls_refcount)) + return false; + pnfs_layout_remove_lseg(lseg->pls_layout, lseg); + list_add(&lseg->pls_list, tmp_list); + return true; +} + /* Returns 1 if lseg is removed from list, 0 otherwise */ static int mark_lseg_invalid(struct pnfs_layout_segment *lseg, struct list_head *tmp_list) @@ -430,11 +440,8 @@ */ dprintk("%s: lseg %p ref %d\n", __func__, lseg, atomic_read(&lseg->pls_refcount)); - if (atomic_dec_and_test(&lseg->pls_refcount)) { - pnfs_layout_remove_lseg(lseg->pls_layout, lseg); - list_add(&lseg->pls_list, tmp_list); + if (pnfs_lseg_dec_and_remove_zero(lseg, tmp_list)) rv = 1; - } } return rv; } @@ -505,37 +512,147 @@ } EXPORT_SYMBOL_GPL(pnfs_destroy_layout); -/* - * Called by the state manger to remove all layouts established under an - * expired lease. - */ -void -pnfs_destroy_all_layouts(struct nfs_client *clp) +static bool +pnfs_layout_add_bulk_destroy_list(struct inode *inode, + struct list_head *layout_list) { - struct nfs_server *server; struct pnfs_layout_hdr *lo; - LIST_HEAD(tmp_list); + bool ret = false; - nfs4_deviceid_mark_client_invalid(clp); - nfs4_deviceid_purge_client(clp); + spin_lock(&inode->i_lock); + lo = NFS_I(inode)->layout; + if (lo != NULL && list_empty(&lo->plh_bulk_destroy)) { + pnfs_get_layout_hdr(lo); + list_add(&lo->plh_bulk_destroy, layout_list); + ret = true; + } + spin_unlock(&inode->i_lock); + return ret; +} + +/* Caller must hold rcu_read_lock and clp->cl_lock */ +static int +pnfs_layout_bulk_destroy_byserver_locked(struct nfs_client *clp, + struct nfs_server *server, + struct list_head *layout_list) +{ + struct pnfs_layout_hdr *lo, *next; + struct inode *inode; + + list_for_each_entry_safe(lo, next, &server->layouts, plh_layouts) { + inode = igrab(lo->plh_inode); + if (inode == NULL) + continue; + list_del_init(&lo->plh_layouts); + if (pnfs_layout_add_bulk_destroy_list(inode, layout_list)) + continue; + rcu_read_unlock(); + spin_unlock(&clp->cl_lock); + iput(inode); + spin_lock(&clp->cl_lock); + rcu_read_lock(); + return -EAGAIN; + } + return 0; +} + +static int +pnfs_layout_free_bulk_destroy_list(struct list_head *layout_list, + bool is_bulk_recall) +{ + struct pnfs_layout_hdr *lo; + struct inode *inode; + struct pnfs_layout_range range = { + .iomode = IOMODE_ANY, + .offset = 0, + .length = NFS4_MAX_UINT64, + }; + LIST_HEAD(lseg_list); + int ret = 0; + + while (!list_empty(layout_list)) { + lo = list_entry(layout_list->next, struct pnfs_layout_hdr, + plh_bulk_destroy); + dprintk("%s freeing layout for inode %lu\n", __func__, + lo->plh_inode->i_ino); + inode = lo->plh_inode; + spin_lock(&inode->i_lock); + list_del_init(&lo->plh_bulk_destroy); + lo->plh_block_lgets++; /* permanently block new LAYOUTGETs */ + if (is_bulk_recall) + set_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags); + if (pnfs_mark_matching_lsegs_invalid(lo, &lseg_list, &range)) + ret = -EAGAIN; + spin_unlock(&inode->i_lock); + pnfs_free_lseg_list(&lseg_list); + pnfs_put_layout_hdr(lo); + iput(inode); + } + return ret; +} + +int +pnfs_destroy_layouts_byfsid(struct nfs_client *clp, + struct nfs_fsid *fsid, + bool is_recall) +{ + struct nfs_server *server; + LIST_HEAD(layout_list); spin_lock(&clp->cl_lock); rcu_read_lock(); +restart: list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { - if (!list_empty(&server->layouts)) - list_splice_init(&server->layouts, &tmp_list); + if (memcmp(&server->fsid, fsid, sizeof(*fsid)) != 0) + continue; + if (pnfs_layout_bulk_destroy_byserver_locked(clp, + server, + &layout_list) != 0) + goto restart; } rcu_read_unlock(); spin_unlock(&clp->cl_lock); - while (!list_empty(&tmp_list)) { - lo = list_entry(tmp_list.next, struct pnfs_layout_hdr, - plh_layouts); - dprintk("%s freeing layout for inode %lu\n", __func__, - lo->plh_inode->i_ino); - list_del_init(&lo->plh_layouts); - pnfs_destroy_layout(NFS_I(lo->plh_inode)); + if (list_empty(&layout_list)) + return 0; + return pnfs_layout_free_bulk_destroy_list(&layout_list, is_recall); +} + +int +pnfs_destroy_layouts_byclid(struct nfs_client *clp, + bool is_recall) +{ + struct nfs_server *server; + LIST_HEAD(layout_list); + + spin_lock(&clp->cl_lock); + rcu_read_lock(); +restart: + list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { + if (pnfs_layout_bulk_destroy_byserver_locked(clp, + server, + &layout_list) != 0) + goto restart; } + rcu_read_unlock(); + spin_unlock(&clp->cl_lock); + + if (list_empty(&layout_list)) + return 0; + return pnfs_layout_free_bulk_destroy_list(&layout_list, is_recall); +} + +/* + * Called by the state manger to remove all layouts established under an + * expired lease. + */ +void +pnfs_destroy_all_layouts(struct nfs_client *clp) +{ + nfs4_deviceid_mark_client_invalid(clp); + nfs4_deviceid_purge_client(clp); + + pnfs_destroy_layouts_byclid(clp, false); } /* @@ -667,6 +784,21 @@ return lseg; } +static void pnfs_clear_layoutcommit(struct inode *inode, + struct list_head *head) +{ + struct nfs_inode *nfsi = NFS_I(inode); + struct pnfs_layout_segment *lseg, *tmp; + + if (!test_and_clear_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) + return; + list_for_each_entry_safe(lseg, tmp, &nfsi->layout->plh_segs, pls_list) { + if (!test_and_clear_bit(NFS_LSEG_LAYOUTCOMMIT, &lseg->pls_flags)) + continue; + pnfs_lseg_dec_and_remove_zero(lseg, head); + } +} + /* * Initiates a LAYOUTRETURN(FILE), and removes the pnfs_layout_hdr * when the layout segment list is empty. @@ -698,6 +830,7 @@ /* Reference matched in nfs4_layoutreturn_release */ pnfs_get_layout_hdr(lo); empty = list_empty(&lo->plh_segs); + pnfs_clear_layoutcommit(ino, &tmp_list); pnfs_mark_matching_lsegs_invalid(lo, &tmp_list, NULL); /* Don't send a LAYOUTRETURN if list was initially empty */ if (empty) { @@ -710,8 +843,6 @@ spin_unlock(&ino->i_lock); pnfs_free_lseg_list(&tmp_list); - WARN_ON(test_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)); - lrp = kzalloc(sizeof(*lrp), GFP_KERNEL); if (unlikely(lrp == NULL)) { status = -ENOMEM; @@ -888,7 +1019,7 @@ atomic_set(&lo->plh_refcount, 1); INIT_LIST_HEAD(&lo->plh_layouts); INIT_LIST_HEAD(&lo->plh_segs); - INIT_LIST_HEAD(&lo->plh_bulk_recall); + INIT_LIST_HEAD(&lo->plh_bulk_destroy); lo->plh_inode = ino; lo->plh_lc_cred = get_rpccred(ctx->state->owner->so_cred); return lo; @@ -1312,13 +1443,15 @@ int pnfs_write_done_resend_to_mds(struct inode *inode, struct list_head *head, - const struct nfs_pgio_completion_ops *compl_ops) + const struct nfs_pgio_completion_ops *compl_ops, + struct nfs_direct_req *dreq) { struct nfs_pageio_descriptor pgio; LIST_HEAD(failed); /* Resend all requests through the MDS */ nfs_pageio_init_write(&pgio, inode, FLUSH_STABLE, compl_ops); + pgio.pg_dreq = dreq; while (!list_empty(head)) { struct nfs_page *req = nfs_list_entry(head->next); @@ -1347,13 +1480,13 @@ dprintk("pnfs write error = %d\n", hdr->pnfs_error); if (NFS_SERVER(hdr->inode)->pnfs_curr_ld->flags & PNFS_LAYOUTRET_ON_ERROR) { - clear_bit(NFS_INO_LAYOUTCOMMIT, &NFS_I(hdr->inode)->flags); pnfs_return_layout(hdr->inode); } if (!test_and_set_bit(NFS_IOHDR_REDO, &hdr->flags)) data->task.tk_status = pnfs_write_done_resend_to_mds(hdr->inode, &hdr->pages, - hdr->completion_ops); + hdr->completion_ops, + hdr->dreq); } /* @@ -1468,13 +1601,15 @@ int pnfs_read_done_resend_to_mds(struct inode *inode, struct list_head *head, - const struct nfs_pgio_completion_ops *compl_ops) + const struct nfs_pgio_completion_ops *compl_ops, + struct nfs_direct_req *dreq) { struct nfs_pageio_descriptor pgio; LIST_HEAD(failed); /* Resend all requests through the MDS */ nfs_pageio_init_read(&pgio, inode, compl_ops); + pgio.pg_dreq = dreq; while (!list_empty(head)) { struct nfs_page *req = nfs_list_entry(head->next); @@ -1499,13 +1634,13 @@ dprintk("pnfs read error = %d\n", hdr->pnfs_error); if (NFS_SERVER(hdr->inode)->pnfs_curr_ld->flags & PNFS_LAYOUTRET_ON_ERROR) { - clear_bit(NFS_INO_LAYOUTCOMMIT, &NFS_I(hdr->inode)->flags); pnfs_return_layout(hdr->inode); } if (!test_and_set_bit(NFS_IOHDR_REDO, &hdr->flags)) data->task.tk_status = pnfs_read_done_resend_to_mds(hdr->inode, &hdr->pages, - hdr->completion_ops); + hdr->completion_ops, + hdr->dreq); } /* @@ -1631,11 +1766,27 @@ list_for_each_entry(lseg, &NFS_I(inode)->layout->plh_segs, pls_list) { if (lseg->pls_range.iomode == IOMODE_RW && - test_bit(NFS_LSEG_LAYOUTCOMMIT, &lseg->pls_flags)) + test_and_clear_bit(NFS_LSEG_LAYOUTCOMMIT, &lseg->pls_flags)) list_add(&lseg->pls_lc_list, listp); } } +static void pnfs_list_write_lseg_done(struct inode *inode, struct list_head *listp) +{ + struct pnfs_layout_segment *lseg, *tmp; + unsigned long *bitlock = &NFS_I(inode)->flags; + + /* Matched by references in pnfs_set_layoutcommit */ + list_for_each_entry_safe(lseg, tmp, listp, pls_lc_list) { + list_del_init(&lseg->pls_lc_list); + pnfs_put_lseg(lseg); + } + + clear_bit_unlock(NFS_INO_LAYOUTCOMMITTING, bitlock); + smp_mb__after_clear_bit(); + wake_up_bit(bitlock, NFS_INO_LAYOUTCOMMITTING); +} + void pnfs_set_lo_fail(struct pnfs_layout_segment *lseg) { pnfs_layout_io_set_failed(lseg->pls_layout, lseg->pls_range.iomode); @@ -1680,6 +1831,7 @@ if (nfss->pnfs_curr_ld->cleanup_layoutcommit) nfss->pnfs_curr_ld->cleanup_layoutcommit(data); + pnfs_list_write_lseg_done(data->args.inode, &data->lseg_list); } /* --- linux-lts-raring-3.8.0.orig/fs/nfs/unlink.c +++ linux-lts-raring-3.8.0/fs/nfs/unlink.c @@ -336,20 +336,14 @@ struct inode *old_dir = data->old_dir; struct inode *new_dir = data->new_dir; struct dentry *old_dentry = data->old_dentry; - struct dentry *new_dentry = data->new_dentry; if (!NFS_PROTO(old_dir)->rename_done(task, old_dir, new_dir)) { rpc_restart_call_prepare(task); return; } - if (task->tk_status != 0) { + if (task->tk_status != 0) nfs_cancel_async_unlink(old_dentry); - return; - } - - d_drop(old_dentry); - d_drop(new_dentry); } /** @@ -550,6 +544,18 @@ error = rpc_wait_for_completion_task(task); if (error == 0) error = task->tk_status; + switch (error) { + case 0: + /* The rename succeeded */ + nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); + d_move(dentry, sdentry); + break; + case -ERESTARTSYS: + /* The result of the rename is unknown. Play it safe by + * forcing a new lookup */ + d_drop(dentry); + d_drop(sdentry); + } rpc_put_task(task); out_dput: dput(sdentry); --- linux-lts-raring-3.8.0.orig/fs/nfs/nfs4filelayout.c +++ linux-lts-raring-3.8.0/fs/nfs/nfs4filelayout.c @@ -99,7 +99,8 @@ task->tk_status = pnfs_write_done_resend_to_mds(hdr->inode, &hdr->pages, - hdr->completion_ops); + hdr->completion_ops, + hdr->dreq); } } @@ -119,7 +120,8 @@ task->tk_status = pnfs_read_done_resend_to_mds(hdr->inode, &hdr->pages, - hdr->completion_ops); + hdr->completion_ops, + hdr->dreq); } } @@ -127,7 +129,6 @@ { if (!test_and_clear_bit(NFS_LAYOUT_RETURN, &lo->plh_flags)) return; - clear_bit(NFS_INO_LAYOUTCOMMIT, &NFS_I(inode)->flags); pnfs_return_layout(inode); } --- linux-lts-raring-3.8.0.orig/fs/nfs/nfs4client.c +++ linux-lts-raring-3.8.0/fs/nfs/nfs4client.c @@ -300,7 +300,7 @@ struct rpc_cred *cred) { struct nfs_net *nn = net_generic(new->cl_net, nfs_net_id); - struct nfs_client *pos, *n, *prev = NULL; + struct nfs_client *pos, *prev = NULL; struct nfs4_setclientid_res clid = { .clientid = new->cl_clientid, .confirm = new->cl_confirm, @@ -308,10 +308,23 @@ int status = -NFS4ERR_STALE_CLIENTID; spin_lock(&nn->nfs_client_lock); - list_for_each_entry_safe(pos, n, &nn->nfs_client_list, cl_share_link) { + list_for_each_entry(pos, &nn->nfs_client_list, cl_share_link) { /* If "pos" isn't marked ready, we can't trust the * remaining fields in "pos" */ - if (pos->cl_cons_state < NFS_CS_READY) + if (pos->cl_cons_state > NFS_CS_READY) { + atomic_inc(&pos->cl_count); + spin_unlock(&nn->nfs_client_lock); + + if (prev) + nfs_put_client(prev); + prev = pos; + + status = nfs_wait_client_init_complete(pos); + spin_lock(&nn->nfs_client_lock); + if (status < 0) + continue; + } + if (pos->cl_cons_state != NFS_CS_READY) continue; if (pos->rpc_ops != new->rpc_ops) @@ -423,16 +436,16 @@ struct rpc_cred *cred) { struct nfs_net *nn = net_generic(new->cl_net, nfs_net_id); - struct nfs_client *pos, *n, *prev = NULL; + struct nfs_client *pos, *prev = NULL; int status = -NFS4ERR_STALE_CLIENTID; spin_lock(&nn->nfs_client_lock); - list_for_each_entry_safe(pos, n, &nn->nfs_client_list, cl_share_link) { + list_for_each_entry(pos, &nn->nfs_client_list, cl_share_link) { /* If "pos" isn't marked ready, we can't trust the * remaining fields in "pos", especially the client * ID and serverowner fields. Wait for CREATE_SESSION * to finish. */ - if (pos->cl_cons_state < NFS_CS_READY) { + if (pos->cl_cons_state > NFS_CS_READY) { atomic_inc(&pos->cl_count); spin_unlock(&nn->nfs_client_lock); @@ -440,18 +453,17 @@ nfs_put_client(prev); prev = pos; - nfs4_schedule_lease_recovery(pos); status = nfs_wait_client_init_complete(pos); - if (status < 0) { - nfs_put_client(pos); - spin_lock(&nn->nfs_client_lock); - continue; + if (status == 0) { + nfs4_schedule_lease_recovery(pos); + status = nfs4_wait_clnt_recover(pos); } - status = pos->cl_cons_state; spin_lock(&nn->nfs_client_lock); if (status < 0) continue; } + if (pos->cl_cons_state != NFS_CS_READY) + continue; if (pos->rpc_ops != new->rpc_ops) continue; @@ -469,17 +481,18 @@ continue; atomic_inc(&pos->cl_count); - spin_unlock(&nn->nfs_client_lock); + *result = pos; + status = 0; dprintk("NFS: <-- %s using nfs_client = %p ({%d})\n", __func__, pos, atomic_read(&pos->cl_count)); - - *result = pos; - return 0; + break; } /* No matching nfs_client found. */ spin_unlock(&nn->nfs_client_lock); dprintk("NFS: <-- %s status = %d\n", __func__, status); + if (prev) + nfs_put_client(prev); return status; } #endif /* CONFIG_NFS_V4_1 */ --- linux-lts-raring-3.8.0.orig/fs/nfs/nfs4state.c +++ linux-lts-raring-3.8.0/fs/nfs/nfs4state.c @@ -1877,7 +1877,13 @@ status = PTR_ERR(clnt); break; } - clp->cl_rpcclient = clnt; + /* Note: this is safe because we haven't yet marked the + * client as ready, so we are the only user of + * clp->cl_rpcclient + */ + clnt = xchg(&clp->cl_rpcclient, clnt); + rpc_shutdown_client(clnt); + clnt = clp->cl_rpcclient; goto again; case -NFS4ERR_MINOR_VERS_MISMATCH: --- linux-lts-raring-3.8.0.orig/fs/nfs/callback_proc.c +++ linux-lts-raring-3.8.0/fs/nfs/callback_proc.c @@ -183,60 +183,15 @@ static u32 initiate_bulk_draining(struct nfs_client *clp, struct cb_layoutrecallargs *args) { - struct nfs_server *server; - struct pnfs_layout_hdr *lo; - struct inode *ino; - u32 rv = NFS4ERR_NOMATCHING_LAYOUT; - struct pnfs_layout_hdr *tmp; - LIST_HEAD(recall_list); - LIST_HEAD(free_me_list); - struct pnfs_layout_range range = { - .iomode = IOMODE_ANY, - .offset = 0, - .length = NFS4_MAX_UINT64, - }; + int stat; - spin_lock(&clp->cl_lock); - rcu_read_lock(); - list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link) { - if ((args->cbl_recall_type == RETURN_FSID) && - memcmp(&server->fsid, &args->cbl_fsid, - sizeof(struct nfs_fsid))) - continue; - - list_for_each_entry(lo, &server->layouts, plh_layouts) { - ino = igrab(lo->plh_inode); - if (!ino) - continue; - spin_lock(&ino->i_lock); - /* Is this layout in the process of being freed? */ - if (NFS_I(ino)->layout != lo) { - spin_unlock(&ino->i_lock); - iput(ino); - continue; - } - pnfs_get_layout_hdr(lo); - spin_unlock(&ino->i_lock); - list_add(&lo->plh_bulk_recall, &recall_list); - } - } - rcu_read_unlock(); - spin_unlock(&clp->cl_lock); - - list_for_each_entry_safe(lo, tmp, - &recall_list, plh_bulk_recall) { - ino = lo->plh_inode; - spin_lock(&ino->i_lock); - set_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags); - if (pnfs_mark_matching_lsegs_invalid(lo, &free_me_list, &range)) - rv = NFS4ERR_DELAY; - list_del_init(&lo->plh_bulk_recall); - spin_unlock(&ino->i_lock); - pnfs_free_lseg_list(&free_me_list); - pnfs_put_layout_hdr(lo); - iput(ino); - } - return rv; + if (args->cbl_recall_type == RETURN_FSID) + stat = pnfs_destroy_layouts_byfsid(clp, &args->cbl_fsid, true); + else + stat = pnfs_destroy_layouts_byclid(clp, true); + if (stat != 0) + return NFS4ERR_DELAY; + return NFS4ERR_NOMATCHING_LAYOUT; } static u32 do_callback_layoutrecall(struct nfs_client *clp, --- linux-lts-raring-3.8.0.orig/fs/nfs/idmap.c +++ linux-lts-raring-3.8.0/fs/nfs/idmap.c @@ -725,9 +725,9 @@ return ret; } -static int nfs_idmap_instantiate(struct key *key, struct key *authkey, char *data) +static int nfs_idmap_instantiate(struct key *key, struct key *authkey, char *data, size_t datalen) { - return key_instantiate_and_link(key, data, strlen(data) + 1, + return key_instantiate_and_link(key, data, datalen, id_resolver_cache->thread_keyring, authkey); } @@ -737,6 +737,7 @@ struct key *key, struct key *authkey) { char id_str[NFS_UINT_MAXLEN]; + size_t len; int ret = -ENOKEY; /* ret = -ENOKEY */ @@ -746,13 +747,15 @@ case IDMAP_CONV_NAMETOID: if (strcmp(upcall->im_name, im->im_name) != 0) break; - sprintf(id_str, "%d", im->im_id); - ret = nfs_idmap_instantiate(key, authkey, id_str); + /* Note: here we store the NUL terminator too */ + len = sprintf(id_str, "%d", im->im_id) + 1; + ret = nfs_idmap_instantiate(key, authkey, id_str, len); break; case IDMAP_CONV_IDTONAME: if (upcall->im_id != im->im_id) break; - ret = nfs_idmap_instantiate(key, authkey, im->im_name); + len = strlen(im->im_name); + ret = nfs_idmap_instantiate(key, authkey, im->im_name, len); break; default: ret = -EINVAL; --- linux-lts-raring-3.8.0.orig/fs/nfs/blocklayout/blocklayoutdm.c +++ linux-lts-raring-3.8.0/fs/nfs/blocklayout/blocklayoutdm.c @@ -55,7 +55,8 @@ bl_pipe_msg.bl_wq = &nn->bl_wq; memset(msg, 0, sizeof(*msg)); - msg->data = kzalloc(1 + sizeof(bl_umount_request), GFP_NOFS); + msg->len = sizeof(bl_msg) + bl_msg.totallen; + msg->data = kzalloc(msg->len, GFP_NOFS); if (!msg->data) goto out; @@ -66,7 +67,6 @@ memcpy(msg->data, &bl_msg, sizeof(bl_msg)); dataptr = (uint8_t *) msg->data; memcpy(&dataptr[sizeof(bl_msg)], &bl_umount_request, sizeof(bl_umount_request)); - msg->len = sizeof(bl_msg) + bl_msg.totallen; add_wait_queue(&nn->bl_wq, &wq); if (rpc_queue_upcall(nn->bl_device_pipe, msg) < 0) { --- linux-lts-raring-3.8.0.orig/fs/nfs/blocklayout/blocklayout.c +++ linux-lts-raring-3.8.0/fs/nfs/blocklayout/blocklayout.c @@ -1273,6 +1273,7 @@ static struct pnfs_layoutdriver_type blocklayout_type = { .id = LAYOUT_BLOCK_VOLUME, .name = "LAYOUT_BLOCK_VOLUME", + .owner = THIS_MODULE, .read_pagelist = bl_read_pagelist, .write_pagelist = bl_write_pagelist, .alloc_layout_hdr = bl_alloc_layout_hdr, --- linux-lts-raring-3.8.0.orig/fs/nfs/objlayout/objio_osd.c +++ linux-lts-raring-3.8.0/fs/nfs/objlayout/objio_osd.c @@ -647,6 +647,7 @@ .flags = PNFS_LAYOUTRET_ON_SETATTR | PNFS_LAYOUTRET_ON_ERROR, + .owner = THIS_MODULE, .alloc_layout_hdr = objlayout_alloc_layout_hdr, .free_layout_hdr = objlayout_free_layout_hdr, --- linux-lts-raring-3.8.0.orig/fs/udf/udf_sb.h +++ linux-lts-raring-3.8.0/fs/udf/udf_sb.h @@ -82,7 +82,7 @@ struct udf_bitmap { __u32 s_extLength; __u32 s_extPosition; - __u16 s_nr_groups; + int s_nr_groups; struct buffer_head **s_block_bitmap; }; --- linux-lts-raring-3.8.0.orig/fs/udf/super.c +++ linux-lts-raring-3.8.0/fs/udf/super.c @@ -627,6 +627,12 @@ struct udf_sb_info *sbi = UDF_SB(sb); int error = 0; + if (sbi->s_lvid_bh) { + int write_rev = le16_to_cpu(udf_sb_lvidiu(sbi)->minUDFWriteRev); + if (write_rev > UDF_MAX_WRITE_VERSION && !(*flags & MS_RDONLY)) + return -EACCES; + } + uopt.flags = sbi->s_flags; uopt.uid = sbi->s_uid; uopt.gid = sbi->s_gid; @@ -646,12 +652,6 @@ sbi->s_dmode = uopt.dmode; write_unlock(&sbi->s_cred_lock); - if (sbi->s_lvid_bh) { - int write_rev = le16_to_cpu(udf_sb_lvidiu(sbi)->minUDFWriteRev); - if (write_rev > UDF_MAX_WRITE_VERSION) - *flags |= MS_RDONLY; - } - if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) goto out_unlock; @@ -840,27 +840,38 @@ return 1; } +/* + * Load primary Volume Descriptor Sequence + * + * Return <0 on error, 0 on success. -EAGAIN is special meaning next sequence + * should be tried. + */ static int udf_load_pvoldesc(struct super_block *sb, sector_t block) { struct primaryVolDesc *pvoldesc; struct ustr *instr, *outstr; struct buffer_head *bh; uint16_t ident; - int ret = 1; + int ret = -ENOMEM; instr = kmalloc(sizeof(struct ustr), GFP_NOFS); if (!instr) - return 1; + return -ENOMEM; outstr = kmalloc(sizeof(struct ustr), GFP_NOFS); if (!outstr) goto out1; bh = udf_read_tagged(sb, block, block, &ident); - if (!bh) + if (!bh) { + ret = -EAGAIN; goto out2; + } - BUG_ON(ident != TAG_IDENT_PVD); + if (ident != TAG_IDENT_PVD) { + ret = -EIO; + goto out_bh; + } pvoldesc = (struct primaryVolDesc *)bh->b_data; @@ -886,8 +897,9 @@ if (udf_CS0toUTF8(outstr, instr)) udf_debug("volSetIdent[] = '%s'\n", outstr->u_name); - brelse(bh); ret = 0; +out_bh: + brelse(bh); out2: kfree(outstr); out1: @@ -944,7 +956,7 @@ if (mdata->s_mirror_fe == NULL) { udf_err(sb, "Both metadata and mirror metadata inode efe can not found\n"); - goto error_exit; + return -EIO; } } @@ -961,23 +973,18 @@ addr.logicalBlockNum, addr.partitionReferenceNum); mdata->s_bitmap_fe = udf_iget(sb, &addr); - if (mdata->s_bitmap_fe == NULL) { if (sb->s_flags & MS_RDONLY) udf_warn(sb, "bitmap inode efe not found but it's ok since the disc is mounted read-only\n"); else { udf_err(sb, "bitmap inode efe not found and attempted read-write mount\n"); - goto error_exit; + return -EIO; } } } udf_debug("udf_load_metadata_files Ok\n"); - return 0; - -error_exit: - return 1; } static void udf_load_fileset(struct super_block *sb, struct buffer_head *bh, @@ -1067,7 +1074,7 @@ if (!map->s_uspace.s_table) { udf_debug("cannot load unallocSpaceTable (part %d)\n", p_index); - return 1; + return -EIO; } map->s_partition_flags |= UDF_PART_FLAG_UNALLOC_TABLE; udf_debug("unallocSpaceTable (part %d) @ %ld\n", @@ -1077,7 +1084,7 @@ if (phd->unallocSpaceBitmap.extLength) { struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index); if (!bitmap) - return 1; + return -ENOMEM; map->s_uspace.s_bitmap = bitmap; bitmap->s_extLength = le32_to_cpu( phd->unallocSpaceBitmap.extLength); @@ -1102,7 +1109,7 @@ if (!map->s_fspace.s_table) { udf_debug("cannot load freedSpaceTable (part %d)\n", p_index); - return 1; + return -EIO; } map->s_partition_flags |= UDF_PART_FLAG_FREED_TABLE; @@ -1113,7 +1120,7 @@ if (phd->freedSpaceBitmap.extLength) { struct udf_bitmap *bitmap = udf_sb_alloc_bitmap(sb, p_index); if (!bitmap) - return 1; + return -ENOMEM; map->s_fspace.s_bitmap = bitmap; bitmap->s_extLength = le32_to_cpu( phd->freedSpaceBitmap.extLength); @@ -1167,7 +1174,7 @@ udf_find_vat_block(sb, p_index, type1_index, blocks - 1); } if (!sbi->s_vat_inode) - return 1; + return -EIO; if (map->s_partition_type == UDF_VIRTUAL_MAP15) { map->s_type_specific.s_virtual.s_start_offset = 0; @@ -1179,7 +1186,7 @@ pos = udf_block_map(sbi->s_vat_inode, 0); bh = sb_bread(sb, pos); if (!bh) - return 1; + return -EIO; vat20 = (struct virtualAllocationTable20 *)bh->b_data; } else { vat20 = (struct virtualAllocationTable20 *) @@ -1197,6 +1204,12 @@ return 0; } +/* + * Load partition descriptor block + * + * Returns <0 on error, 0 on success, -EAGAIN is special - try next descriptor + * sequence. + */ static int udf_load_partdesc(struct super_block *sb, sector_t block) { struct buffer_head *bh; @@ -1206,13 +1219,15 @@ int i, type1_idx; uint16_t partitionNumber; uint16_t ident; - int ret = 0; + int ret; bh = udf_read_tagged(sb, block, block, &ident); if (!bh) - return 1; - if (ident != TAG_IDENT_PD) + return -EAGAIN; + if (ident != TAG_IDENT_PD) { + ret = 0; goto out_bh; + } p = (struct partitionDesc *)bh->b_data; partitionNumber = le16_to_cpu(p->partitionNumber); @@ -1231,10 +1246,13 @@ if (i >= sbi->s_partitions) { udf_debug("Partition (%d) not found in partition map\n", partitionNumber); + ret = 0; goto out_bh; } ret = udf_fill_partdesc_info(sb, p, i); + if (ret < 0) + goto out_bh; /* * Now rescan for VIRTUAL or METADATA partitions when SPARABLE and @@ -1251,32 +1269,37 @@ break; } - if (i >= sbi->s_partitions) + if (i >= sbi->s_partitions) { + ret = 0; goto out_bh; + } ret = udf_fill_partdesc_info(sb, p, i); - if (ret) + if (ret < 0) goto out_bh; if (map->s_partition_type == UDF_METADATA_MAP25) { ret = udf_load_metadata_files(sb, i); - if (ret) { + if (ret < 0) { udf_err(sb, "error loading MetaData partition map %d\n", i); goto out_bh; } } else { - ret = udf_load_vat(sb, i, type1_idx); - if (ret) - goto out_bh; /* - * Mark filesystem read-only if we have a partition with - * virtual map since we don't handle writing to it (we - * overwrite blocks instead of relocating them). + * If we have a partition with virtual map, we don't handle + * writing to it (we overwrite blocks instead of relocating + * them). */ - sb->s_flags |= MS_RDONLY; - pr_notice("Filesystem marked read-only because writing to pseudooverwrite partition is not implemented\n"); + if (!(sb->s_flags & MS_RDONLY)) { + ret = -EACCES; + goto out_bh; + } + ret = udf_load_vat(sb, i, type1_idx); + if (ret < 0) + goto out_bh; } + ret = 0; out_bh: /* In case loading failed, we handle cleanup in udf_fill_super */ brelse(bh); @@ -1342,11 +1365,11 @@ uint16_t ident; struct buffer_head *bh; unsigned int table_len; - int ret = 0; + int ret; bh = udf_read_tagged(sb, block, block, &ident); if (!bh) - return 1; + return -EAGAIN; BUG_ON(ident != TAG_IDENT_LVD); lvd = (struct logicalVolDesc *)bh->b_data; table_len = le32_to_cpu(lvd->mapTableLength); @@ -1354,7 +1377,7 @@ udf_err(sb, "error loading logical volume descriptor: " "Partition table too long (%u > %lu)\n", table_len, sb->s_blocksize - sizeof(*lvd)); - ret = 1; + ret = -EIO; goto out_bh; } @@ -1398,11 +1421,10 @@ } else if (!strncmp(upm2->partIdent.ident, UDF_ID_SPARABLE, strlen(UDF_ID_SPARABLE))) { - if (udf_load_sparable_map(sb, map, - (struct sparablePartitionMap *)gpm) < 0) { - ret = 1; + ret = udf_load_sparable_map(sb, map, + (struct sparablePartitionMap *)gpm); + if (ret < 0) goto out_bh; - } } else if (!strncmp(upm2->partIdent.ident, UDF_ID_METADATA, strlen(UDF_ID_METADATA))) { @@ -1467,7 +1489,7 @@ } if (lvd->integritySeqExt.extLength) udf_load_logicalvolint(sb, leea_to_cpu(lvd->integritySeqExt)); - + ret = 0; out_bh: brelse(bh); return ret; @@ -1505,22 +1527,18 @@ } /* - * udf_process_sequence - * - * PURPOSE - * Process a main/reserve volume descriptor sequence. + * Process a main/reserve volume descriptor sequence. + * @block First block of first extent of the sequence. + * @lastblock Lastblock of first extent of the sequence. + * @fileset There we store extent containing root fileset * - * PRE-CONDITIONS - * sb Pointer to _locked_ superblock. - * block First block of first extent of the sequence. - * lastblock Lastblock of first extent of the sequence. - * - * HISTORY - * July 1, 1997 - Andrew E. Mileski - * Written, tested, and released. + * Returns <0 on error, 0 on success. -EAGAIN is special - try next descriptor + * sequence */ -static noinline int udf_process_sequence(struct super_block *sb, long block, - long lastblock, struct kernel_lb_addr *fileset) +static noinline int udf_process_sequence( + struct super_block *sb, + sector_t block, sector_t lastblock, + struct kernel_lb_addr *fileset) { struct buffer_head *bh = NULL; struct udf_vds_record vds[VDS_POS_LENGTH]; @@ -1531,6 +1549,7 @@ uint32_t vdsn; uint16_t ident; long next_s = 0, next_e = 0; + int ret; memset(vds, 0, sizeof(struct udf_vds_record) * VDS_POS_LENGTH); @@ -1545,7 +1564,7 @@ udf_err(sb, "Block %llu of volume descriptor sequence is corrupted or we could not read it\n", (unsigned long long)block); - return 1; + return -EAGAIN; } /* Process each descriptor (ISO 13346 3/8.3-8.4) */ @@ -1618,14 +1637,19 @@ */ if (!vds[VDS_POS_PRIMARY_VOL_DESC].block) { udf_err(sb, "Primary Volume Descriptor not found!\n"); - return 1; + return -EAGAIN; + } + ret = udf_load_pvoldesc(sb, vds[VDS_POS_PRIMARY_VOL_DESC].block); + if (ret < 0) + return ret; + + if (vds[VDS_POS_LOGICAL_VOL_DESC].block) { + ret = udf_load_logicalvol(sb, + vds[VDS_POS_LOGICAL_VOL_DESC].block, + fileset); + if (ret < 0) + return ret; } - if (udf_load_pvoldesc(sb, vds[VDS_POS_PRIMARY_VOL_DESC].block)) - return 1; - - if (vds[VDS_POS_LOGICAL_VOL_DESC].block && udf_load_logicalvol(sb, - vds[VDS_POS_LOGICAL_VOL_DESC].block, fileset)) - return 1; if (vds[VDS_POS_PARTITION_DESC].block) { /* @@ -1634,19 +1658,27 @@ */ for (block = vds[VDS_POS_PARTITION_DESC].block; block < vds[VDS_POS_TERMINATING_DESC].block; - block++) - if (udf_load_partdesc(sb, block)) - return 1; + block++) { + ret = udf_load_partdesc(sb, block); + if (ret < 0) + return ret; + } } return 0; } +/* + * Load Volume Descriptor Sequence described by anchor in bh + * + * Returns <0 on error, 0 on success + */ static int udf_load_sequence(struct super_block *sb, struct buffer_head *bh, struct kernel_lb_addr *fileset) { struct anchorVolDescPtr *anchor; - long main_s, main_e, reserve_s, reserve_e; + sector_t main_s, main_e, reserve_s, reserve_e; + int ret; anchor = (struct anchorVolDescPtr *)bh->b_data; @@ -1664,18 +1696,26 @@ /* Process the main & reserve sequences */ /* responsible for finding the PartitionDesc(s) */ - if (!udf_process_sequence(sb, main_s, main_e, fileset)) - return 1; + ret = udf_process_sequence(sb, main_s, main_e, fileset); + if (ret != -EAGAIN) + return ret; udf_sb_free_partitions(sb); - if (!udf_process_sequence(sb, reserve_s, reserve_e, fileset)) - return 1; - udf_sb_free_partitions(sb); - return 0; + ret = udf_process_sequence(sb, reserve_s, reserve_e, fileset); + if (ret < 0) { + udf_sb_free_partitions(sb); + /* No sequence was OK, return -EIO */ + if (ret == -EAGAIN) + ret = -EIO; + } + return ret; } /* * Check whether there is an anchor block in the given block and * load Volume Descriptor Sequence if so. + * + * Returns <0 on error, 0 on success, -EAGAIN is special - try next anchor + * block */ static int udf_check_anchor_block(struct super_block *sb, sector_t block, struct kernel_lb_addr *fileset) @@ -1687,33 +1727,40 @@ if (UDF_QUERY_FLAG(sb, UDF_FLAG_VARCONV) && udf_fixed_to_variable(block) >= sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits) - return 0; + return -EAGAIN; bh = udf_read_tagged(sb, block, block, &ident); if (!bh) - return 0; + return -EAGAIN; if (ident != TAG_IDENT_AVDP) { brelse(bh); - return 0; + return -EAGAIN; } ret = udf_load_sequence(sb, bh, fileset); brelse(bh); return ret; } -/* Search for an anchor volume descriptor pointer */ -static sector_t udf_scan_anchors(struct super_block *sb, sector_t lastblock, - struct kernel_lb_addr *fileset) +/* + * Search for an anchor volume descriptor pointer. + * + * Returns < 0 on error, 0 on success. -EAGAIN is special - try next set + * of anchors. + */ +static int udf_scan_anchors(struct super_block *sb, sector_t *lastblock, + struct kernel_lb_addr *fileset) { sector_t last[6]; int i; struct udf_sb_info *sbi = UDF_SB(sb); int last_count = 0; + int ret; /* First try user provided anchor */ if (sbi->s_anchor) { - if (udf_check_anchor_block(sb, sbi->s_anchor, fileset)) - return lastblock; + ret = udf_check_anchor_block(sb, sbi->s_anchor, fileset); + if (ret != -EAGAIN) + return ret; } /* * according to spec, anchor is in either: @@ -1722,39 +1769,46 @@ * lastblock * however, if the disc isn't closed, it could be 512. */ - if (udf_check_anchor_block(sb, sbi->s_session + 256, fileset)) - return lastblock; + ret = udf_check_anchor_block(sb, sbi->s_session + 256, fileset); + if (ret != -EAGAIN) + return ret; /* * The trouble is which block is the last one. Drives often misreport * this so we try various possibilities. */ - last[last_count++] = lastblock; - if (lastblock >= 1) - last[last_count++] = lastblock - 1; - last[last_count++] = lastblock + 1; - if (lastblock >= 2) - last[last_count++] = lastblock - 2; - if (lastblock >= 150) - last[last_count++] = lastblock - 150; - if (lastblock >= 152) - last[last_count++] = lastblock - 152; + last[last_count++] = *lastblock; + if (*lastblock >= 1) + last[last_count++] = *lastblock - 1; + last[last_count++] = *lastblock + 1; + if (*lastblock >= 2) + last[last_count++] = *lastblock - 2; + if (*lastblock >= 150) + last[last_count++] = *lastblock - 150; + if (*lastblock >= 152) + last[last_count++] = *lastblock - 152; for (i = 0; i < last_count; i++) { if (last[i] >= sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits) continue; - if (udf_check_anchor_block(sb, last[i], fileset)) - return last[i]; + ret = udf_check_anchor_block(sb, last[i], fileset); + if (ret != -EAGAIN) { + if (!ret) + *lastblock = last[i]; + return ret; + } if (last[i] < 256) continue; - if (udf_check_anchor_block(sb, last[i] - 256, fileset)) - return last[i]; + ret = udf_check_anchor_block(sb, last[i] - 256, fileset); + if (ret != -EAGAIN) { + if (!ret) + *lastblock = last[i]; + return ret; + } } /* Finally try block 512 in case media is open */ - if (udf_check_anchor_block(sb, sbi->s_session + 512, fileset)) - return last[0]; - return 0; + return udf_check_anchor_block(sb, sbi->s_session + 512, fileset); } /* @@ -1762,54 +1816,59 @@ * area specified by it. The function expects sbi->s_lastblock to be the last * block on the media. * - * Return 1 if ok, 0 if not found. - * + * Return <0 on error, 0 if anchor found. -EAGAIN is special meaning anchor + * was not found. */ static int udf_find_anchor(struct super_block *sb, struct kernel_lb_addr *fileset) { - sector_t lastblock; struct udf_sb_info *sbi = UDF_SB(sb); + sector_t lastblock = sbi->s_last_block; + int ret; - lastblock = udf_scan_anchors(sb, sbi->s_last_block, fileset); - if (lastblock) + ret = udf_scan_anchors(sb, &lastblock, fileset); + if (ret != -EAGAIN) goto out; /* No anchor found? Try VARCONV conversion of block numbers */ UDF_SET_FLAG(sb, UDF_FLAG_VARCONV); + lastblock = udf_variable_to_fixed(sbi->s_last_block); /* Firstly, we try to not convert number of the last block */ - lastblock = udf_scan_anchors(sb, - udf_variable_to_fixed(sbi->s_last_block), - fileset); - if (lastblock) + ret = udf_scan_anchors(sb, &lastblock, fileset); + if (ret != -EAGAIN) goto out; + lastblock = sbi->s_last_block; /* Secondly, we try with converted number of the last block */ - lastblock = udf_scan_anchors(sb, sbi->s_last_block, fileset); - if (!lastblock) { + ret = udf_scan_anchors(sb, &lastblock, fileset); + if (ret < 0) { /* VARCONV didn't help. Clear it. */ UDF_CLEAR_FLAG(sb, UDF_FLAG_VARCONV); - return 0; } out: - sbi->s_last_block = lastblock; - return 1; + if (ret == 0) + sbi->s_last_block = lastblock; + return ret; } /* * Check Volume Structure Descriptor, find Anchor block and load Volume - * Descriptor Sequence + * Descriptor Sequence. + * + * Returns < 0 on error, 0 on success. -EAGAIN is special meaning anchor + * block was not found. */ static int udf_load_vrs(struct super_block *sb, struct udf_options *uopt, int silent, struct kernel_lb_addr *fileset) { struct udf_sb_info *sbi = UDF_SB(sb); loff_t nsr_off; + int ret; if (!sb_set_blocksize(sb, uopt->blocksize)) { if (!silent) udf_warn(sb, "Bad block size\n"); - return 0; + return -EINVAL; } sbi->s_last_block = uopt->lastblock; if (!uopt->novrs) { @@ -1830,12 +1889,13 @@ /* Look for anchor block and load Volume Descriptor Sequence */ sbi->s_anchor = uopt->anchor; - if (!udf_find_anchor(sb, fileset)) { - if (!silent) + ret = udf_find_anchor(sb, fileset); + if (ret < 0) { + if (!silent && ret == -EAGAIN) udf_warn(sb, "No anchor found\n"); - return 0; + return ret; } - return 1; + return 0; } static void udf_open_lvid(struct super_block *sb) @@ -1937,7 +1997,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) { - int ret; + int ret = -EINVAL; struct inode *inode = NULL; struct udf_options uopt; struct kernel_lb_addr rootdir, fileset; @@ -2009,7 +2069,7 @@ } else { uopt.blocksize = bdev_logical_block_size(sb->s_bdev); ret = udf_load_vrs(sb, &uopt, silent, &fileset); - if (!ret && uopt.blocksize != UDF_DEFAULT_BLOCKSIZE) { + if (ret == -EAGAIN && uopt.blocksize != UDF_DEFAULT_BLOCKSIZE) { if (!silent) pr_notice("Rescanning with blocksize %d\n", UDF_DEFAULT_BLOCKSIZE); @@ -2019,8 +2079,11 @@ ret = udf_load_vrs(sb, &uopt, silent, &fileset); } } - if (!ret) { - udf_warn(sb, "No partition found (1)\n"); + if (ret < 0) { + if (ret == -EAGAIN) { + udf_warn(sb, "No partition found (1)\n"); + ret = -EINVAL; + } goto error_out; } @@ -2038,9 +2101,13 @@ udf_err(sb, "minUDFReadRev=%x (max is %x)\n", le16_to_cpu(lvidiu->minUDFReadRev), UDF_MAX_READ_VERSION); + ret = -EINVAL; + goto error_out; + } else if (minUDFWriteRev > UDF_MAX_WRITE_VERSION && + !(sb->s_flags & MS_RDONLY)) { + ret = -EACCES; goto error_out; - } else if (minUDFWriteRev > UDF_MAX_WRITE_VERSION) - sb->s_flags |= MS_RDONLY; + } sbi->s_udfrev = minUDFWriteRev; @@ -2052,17 +2119,20 @@ if (!sbi->s_partitions) { udf_warn(sb, "No partition found (2)\n"); + ret = -EINVAL; goto error_out; } if (sbi->s_partmaps[sbi->s_partition].s_partition_flags & - UDF_PART_FLAG_READ_ONLY) { - pr_notice("Partition marked readonly; forcing readonly mount\n"); - sb->s_flags |= MS_RDONLY; + UDF_PART_FLAG_READ_ONLY && + !(sb->s_flags & MS_RDONLY)) { + ret = -EACCES; + goto error_out; } if (udf_find_fileset(sb, &fileset, &rootdir)) { udf_warn(sb, "No fileset found\n"); + ret = -EINVAL; goto error_out; } @@ -2084,6 +2154,7 @@ if (!inode) { udf_err(sb, "Error in udf_iget, block=%d, partition=%d\n", rootdir.logicalBlockNum, rootdir.partitionReferenceNum); + ret = -EIO; goto error_out; } @@ -2091,6 +2162,7 @@ sb->s_root = d_make_root(inode); if (!sb->s_root) { udf_err(sb, "Couldn't allocate root dentry\n"); + ret = -ENOMEM; goto error_out; } sb->s_maxbytes = MAX_LFS_FILESIZE; @@ -2111,7 +2183,7 @@ kfree(sbi); sb->s_fs_info = NULL; - return -EINVAL; + return ret; } void _udf_err(struct super_block *sb, const char *function, --- linux-lts-raring-3.8.0.orig/fs/ext3/super.c +++ linux-lts-raring-3.8.0/fs/ext3/super.c @@ -353,7 +353,7 @@ return bdev; fail: - ext3_msg(sb, "error: failed to open journal device %s: %ld", + ext3_msg(sb, KERN_ERR, "error: failed to open journal device %s: %ld", __bdevname(dev, b), PTR_ERR(bdev)); return NULL; @@ -887,7 +887,7 @@ /*todo: use simple_strtoll with >32bit ext3 */ sb_block = simple_strtoul(options, &options, 0); if (*options && *options != ',') { - ext3_msg(sb, "error: invalid sb specification: %s", + ext3_msg(sb, KERN_ERR, "error: invalid sb specification: %s", (char *) *data); return 1; } --- linux-lts-raring-3.8.0.orig/fs/ext3/namei.c +++ linux-lts-raring-3.8.0/fs/ext3/namei.c @@ -577,11 +577,8 @@ if (!ext3_check_dir_entry("htree_dirblock_to_tree", dir, de, bh, (block<i_sb)) +((char *)de - bh->b_data))) { - /* On error, skip the f_pos to the next block. */ - dir_file->f_pos = (dir_file->f_pos | - (dir->i_sb->s_blocksize - 1)) + 1; - brelse (bh); - return count; + /* silently ignore the rest of the block */ + break; } ext3fs_dirhash(de->name, de->name_len, hinfo); if ((hinfo->hash < start_hash) || --- linux-lts-raring-3.8.0.orig/fs/ext3/inode.c +++ linux-lts-raring-3.8.0/fs/ext3/inode.c @@ -218,7 +218,8 @@ */ if (inode->i_nlink && ext3_should_journal_data(inode) && EXT3_SB(inode->i_sb)->s_journal && - (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode))) { + (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) && + inode->i_ino != EXT3_JOURNAL_INO) { tid_t commit_tid = atomic_read(&ei->i_datasync_tid); journal_t *journal = EXT3_SB(inode->i_sb)->s_journal; --- linux-lts-raring-3.8.0.orig/fs/lockd/clntlock.c +++ linux-lts-raring-3.8.0/fs/lockd/clntlock.c @@ -144,6 +144,9 @@ timeout); if (ret < 0) return -ERESTARTSYS; + /* Reset the lock status after a server reboot so we resend */ + if (block->b_status == nlm_lck_denied_grace_period) + block->b_status = nlm_lck_blocked; req->a_res.status = block->b_status; return 0; } --- linux-lts-raring-3.8.0.orig/fs/lockd/svclock.c +++ linux-lts-raring-3.8.0/fs/lockd/svclock.c @@ -939,6 +939,7 @@ unsigned long timeout = MAX_SCHEDULE_TIMEOUT; struct nlm_block *block; + spin_lock(&nlm_blocked_lock); while (!list_empty(&nlm_blocked) && !kthread_should_stop()) { block = list_entry(nlm_blocked.next, struct nlm_block, b_list); @@ -948,6 +949,7 @@ timeout = block->b_when - jiffies; break; } + spin_unlock(&nlm_blocked_lock); dprintk("nlmsvc_retry_blocked(%p, when=%ld)\n", block, block->b_when); @@ -957,7 +959,9 @@ retry_deferred_block(block); } else nlmsvc_grant_blocked(block); + spin_lock(&nlm_blocked_lock); } + spin_unlock(&nlm_blocked_lock); return timeout; } --- linux-lts-raring-3.8.0.orig/fs/hugetlbfs/inode.c +++ linux-lts-raring-3.8.0/fs/hugetlbfs/inode.c @@ -110,7 +110,7 @@ * way when do_mmap_pgoff unwinds (may be important on powerpc * and ia64). */ - vma->vm_flags |= VM_HUGETLB | VM_DONTEXPAND | VM_DONTDUMP; + vma->vm_flags |= VM_HUGETLB | VM_DONTEXPAND; vma->vm_ops = &hugetlb_vm_ops; if (vma->vm_pgoff & (~huge_page_mask(h) >> PAGE_SHIFT)) @@ -908,19 +908,19 @@ static int get_hstate_idx(int page_size_log) { - struct hstate *h; + struct hstate *h = hstate_sizelog(page_size_log); - if (!page_size_log) - return default_hstate_idx; - h = size_to_hstate(1 << page_size_log); if (!h) return -1; return h - hstates; } -struct file *hugetlb_file_setup(const char *name, unsigned long addr, - size_t size, vm_flags_t acctflag, - struct user_struct **user, +/* + * Note that size should be aligned to proper hugepage size in caller side, + * otherwise hugetlb_reserve_pages reserves one less hugepages than intended. + */ +struct file *hugetlb_file_setup(const char *name, size_t size, + vm_flags_t acctflag, struct user_struct **user, int creat_flags, int page_size_log) { int error = -ENOMEM; @@ -929,8 +929,6 @@ struct path path; struct dentry *root; struct qstr quick_string; - struct hstate *hstate; - unsigned long num_pages; int hstate_idx; hstate_idx = get_hstate_idx(page_size_log); @@ -969,12 +967,10 @@ if (!inode) goto out_dentry; - hstate = hstate_inode(inode); - size += addr & ~huge_page_mask(hstate); - num_pages = ALIGN(size, huge_page_size(hstate)) >> - huge_page_shift(hstate); error = -ENOMEM; - if (hugetlb_reserve_pages(inode, 0, num_pages, NULL, acctflag)) + if (hugetlb_reserve_pages(inode, 0, + size >> huge_page_shift(hstate_inode(inode)), NULL, + acctflag)) goto out_inode; d_instantiate(path.dentry, inode); --- linux-lts-raring-3.8.0.orig/fs/jfs/inode.c +++ linux-lts-raring-3.8.0/fs/jfs/inode.c @@ -125,7 +125,7 @@ { int wait = wbc->sync_mode == WB_SYNC_ALL; - if (test_cflag(COMMIT_Nolink, inode)) + if (inode->i_nlink == 0) return 0; /* * If COMMIT_DIRTY is not set, the inode isn't really dirty. --- linux-lts-raring-3.8.0.orig/fs/jfs/jfs_logmgr.c +++ linux-lts-raring-3.8.0/fs/jfs/jfs_logmgr.c @@ -1058,7 +1058,8 @@ */ void jfs_syncpt(struct jfs_log *log, int hard_sync) { LOG_LOCK(log); - lmLogSync(log, hard_sync); + if (!test_bit(log_QUIESCE, &log->flag)) + lmLogSync(log, hard_sync); LOG_UNLOCK(log); } --- linux-lts-raring-3.8.0.orig/lib/idr.c +++ linux-lts-raring-3.8.0/lib/idr.c @@ -39,6 +39,14 @@ static struct kmem_cache *idr_layer_cache; static DEFINE_SPINLOCK(simple_ida_lock); +/* the maximum ID which can be allocated given idr->layers */ +static int idr_max(int layers) +{ + int bits = min_t(int, layers * IDR_BITS, MAX_IDR_SHIFT); + + return (1 << bits) - 1; +} + static struct idr_layer *get_from_free_list(struct idr *idp) { struct idr_layer *p; @@ -223,7 +231,7 @@ * Add a new layer to the top of the tree if the requested * id is larger than the currently allocated space. */ - while ((layers < (MAX_IDR_LEVEL - 1)) && (id >= (1 << (layers*IDR_BITS)))) { + while (id > idr_max(layers)) { layers++; if (!p->count) { /* special case: if the tree is currently empty, @@ -265,7 +273,7 @@ static int idr_get_new_above_int(struct idr *idp, void *ptr, int starting_id) { - struct idr_layer *pa[MAX_IDR_LEVEL]; + struct idr_layer *pa[MAX_IDR_LEVEL + 1]; int id; id = idr_get_empty_slot(idp, starting_id, pa); @@ -357,7 +365,7 @@ static void sub_remove(struct idr *idp, int shift, int id) { struct idr_layer *p = idp->top; - struct idr_layer **pa[MAX_IDR_LEVEL]; + struct idr_layer **pa[MAX_IDR_LEVEL + 1]; struct idr_layer ***paa = &pa[0]; struct idr_layer *to_free; int n; @@ -451,16 +459,16 @@ int n, id, max; int bt_mask; struct idr_layer *p; - struct idr_layer *pa[MAX_IDR_LEVEL]; + struct idr_layer *pa[MAX_IDR_LEVEL + 1]; struct idr_layer **paa = &pa[0]; n = idp->layers * IDR_BITS; p = idp->top; rcu_assign_pointer(idp->top, NULL); - max = 1 << n; + max = idr_max(idp->layers); id = 0; - while (id < max) { + while (id >= 0 && id <= max) { while (n > IDR_BITS && p) { n -= IDR_BITS; *paa++ = p; @@ -519,7 +527,7 @@ /* Mask off upper bits we don't use for the search. */ id &= MAX_IDR_MASK; - if (id >= (1 << n)) + if (id > idr_max(p->layer + 1)) return NULL; BUG_ON(n == 0); @@ -555,15 +563,15 @@ { int n, id, max, error = 0; struct idr_layer *p; - struct idr_layer *pa[MAX_IDR_LEVEL]; + struct idr_layer *pa[MAX_IDR_LEVEL + 1]; struct idr_layer **paa = &pa[0]; n = idp->layers * IDR_BITS; p = rcu_dereference_raw(idp->top); - max = 1 << n; + max = idr_max(idp->layers); id = 0; - while (id < max) { + while (id >= 0 && id <= max) { while (n > 0 && p) { n -= IDR_BITS; *paa++ = p; @@ -601,7 +609,7 @@ */ void *idr_get_next(struct idr *idp, int *nextidp) { - struct idr_layer *p, *pa[MAX_IDR_LEVEL]; + struct idr_layer *p, *pa[MAX_IDR_LEVEL + 1]; struct idr_layer **paa = &pa[0]; int id = *nextidp; int n, max; @@ -611,9 +619,9 @@ if (!p) return NULL; n = (p->layer + 1) * IDR_BITS; - max = 1 << n; + max = idr_max(p->layer + 1); - while (id < max) { + while (id >= 0 && id <= max) { while (n > 0 && p) { n -= IDR_BITS; *paa++ = p; @@ -625,7 +633,14 @@ return p; } - id += 1 << n; + /* + * Proceed to the next layer at the current level. Unlike + * idr_for_each(), @id isn't guaranteed to be aligned to + * layer boundary at this point and adding 1 << n may + * incorrectly skip IDs. Make sure we jump to the + * beginning of the next layer using round_up(). + */ + id = round_up(id + 1, 1 << n); while (n < fls(id)) { n += IDR_BITS; p = *--paa; @@ -780,7 +795,7 @@ */ int ida_get_new_above(struct ida *ida, int starting_id, int *p_id) { - struct idr_layer *pa[MAX_IDR_LEVEL]; + struct idr_layer *pa[MAX_IDR_LEVEL + 1]; struct ida_bitmap *bitmap; unsigned long flags; int idr_id = starting_id / IDA_BITMAP_BITS; --- linux-lts-raring-3.8.0.orig/lib/kobject.c +++ linux-lts-raring-3.8.0/lib/kobject.c @@ -529,6 +529,13 @@ return kobj; } +static struct kobject *kobject_get_unless_zero(struct kobject *kobj) +{ + if (!kref_get_unless_zero(&kobj->kref)) + kobj = NULL; + return kobj; +} + /* * kobject_cleanup - free kobject resources. * @kobj: object to cleanup @@ -751,7 +758,7 @@ list_for_each_entry(k, &kset->list, entry) { if (kobject_name(k) && !strcmp(kobject_name(k), name)) { - ret = kobject_get(k); + ret = kobject_get_unless_zero(k); break; } } --- linux-lts-raring-3.8.0.orig/lib/klist.c +++ linux-lts-raring-3.8.0/lib/klist.c @@ -193,10 +193,10 @@ if (waiter->node != n) continue; + list_del(&waiter->list); waiter->woken = 1; mb(); wake_up_process(waiter->process); - list_del(&waiter->list); } spin_unlock(&klist_remove_lock); knode_set_klist(n, NULL); --- linux-lts-raring-3.8.0.orig/lib/dynamic_debug.c +++ linux-lts-raring-3.8.0/lib/dynamic_debug.c @@ -912,7 +912,7 @@ /* handle both dyndbg and $module.dyndbg params at boot */ static int ddebug_dyndbg_boot_param_cb(char *param, char *val, - const char *unused) + const char *unused, int unused2) { vpr_info("%s=\"%s\"\n", param, val); return ddebug_dyndbg_param_cb(param, val, NULL, 0); @@ -923,7 +923,7 @@ * passes them to load_module(). This callback gets unknown params, * processes dyndbg params, rejects others. */ -int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module) +int ddebug_dyndbg_module_param_cb(char *param, char *val, const char *module, int all) { vpr_info("module: %s %s=\"%s\"\n", module, param, val); return ddebug_dyndbg_param_cb(param, val, module, -ENOENT); --- linux-lts-raring-3.8.0.orig/lib/oid_registry.c +++ linux-lts-raring-3.8.0/lib/oid_registry.c @@ -9,6 +9,7 @@ * 2 of the Licence, or (at your option) any later version. */ +#include #include #include #include @@ -16,6 +17,10 @@ #include #include "oid_registry_data.c" +MODULE_DESCRIPTION("OID Registry"); +MODULE_AUTHOR("Red Hat, Inc."); +MODULE_LICENSE("GPL"); + /** * look_up_OID - Find an OID registration for the specified data * @data: Binary representation of the OID --- linux-lts-raring-3.8.0.orig/net/socket.c +++ linux-lts-raring-3.8.0/net/socket.c @@ -1980,7 +1980,7 @@ unsigned int name_len; }; -static int __sys_sendmsg(struct socket *sock, struct msghdr __user *msg, +static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg, struct msghdr *msg_sys, unsigned int flags, struct used_address *used_address) { @@ -2095,22 +2095,30 @@ * BSD sendmsg interface */ -SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned int, flags) +long __sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags) { int fput_needed, err; struct msghdr msg_sys; - struct socket *sock = sockfd_lookup_light(fd, &err, &fput_needed); + struct socket *sock; + sock = sockfd_lookup_light(fd, &err, &fput_needed); if (!sock) goto out; - err = __sys_sendmsg(sock, msg, &msg_sys, flags, NULL); + err = ___sys_sendmsg(sock, msg, &msg_sys, flags, NULL); fput_light(sock->file, fput_needed); out: return err; } +SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned int, flags) +{ + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; + return __sys_sendmsg(fd, msg, flags); +} + /* * Linux sendmmsg interface */ @@ -2141,15 +2149,16 @@ while (datagrams < vlen) { if (MSG_CMSG_COMPAT & flags) { - err = __sys_sendmsg(sock, (struct msghdr __user *)compat_entry, - &msg_sys, flags, &used_address); + err = ___sys_sendmsg(sock, (struct msghdr __user *)compat_entry, + &msg_sys, flags, &used_address); if (err < 0) break; err = __put_user(err, &compat_entry->msg_len); ++compat_entry; } else { - err = __sys_sendmsg(sock, (struct msghdr __user *)entry, - &msg_sys, flags, &used_address); + err = ___sys_sendmsg(sock, + (struct msghdr __user *)entry, + &msg_sys, flags, &used_address); if (err < 0) break; err = put_user(err, &entry->msg_len); @@ -2173,10 +2182,12 @@ SYSCALL_DEFINE4(sendmmsg, int, fd, struct mmsghdr __user *, mmsg, unsigned int, vlen, unsigned int, flags) { + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; return __sys_sendmmsg(fd, mmsg, vlen, flags); } -static int __sys_recvmsg(struct socket *sock, struct msghdr __user *msg, +static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, struct msghdr *msg_sys, unsigned int flags, int nosec) { struct compat_msghdr __user *msg_compat = @@ -2268,23 +2279,31 @@ * BSD recvmsg interface */ -SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg, - unsigned int, flags) +long __sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags) { int fput_needed, err; struct msghdr msg_sys; - struct socket *sock = sockfd_lookup_light(fd, &err, &fput_needed); + struct socket *sock; + sock = sockfd_lookup_light(fd, &err, &fput_needed); if (!sock) goto out; - err = __sys_recvmsg(sock, msg, &msg_sys, flags, 0); + err = ___sys_recvmsg(sock, msg, &msg_sys, flags, 0); fput_light(sock->file, fput_needed); out: return err; } +SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg, + unsigned int, flags) +{ + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; + return __sys_recvmsg(fd, msg, flags); +} + /* * Linux recvmmsg interface */ @@ -2322,17 +2341,18 @@ * No need to ask LSM for more than the first datagram. */ if (MSG_CMSG_COMPAT & flags) { - err = __sys_recvmsg(sock, (struct msghdr __user *)compat_entry, - &msg_sys, flags & ~MSG_WAITFORONE, - datagrams); + err = ___sys_recvmsg(sock, (struct msghdr __user *)compat_entry, + &msg_sys, flags & ~MSG_WAITFORONE, + datagrams); if (err < 0) break; err = __put_user(err, &compat_entry->msg_len); ++compat_entry; } else { - err = __sys_recvmsg(sock, (struct msghdr __user *)entry, - &msg_sys, flags & ~MSG_WAITFORONE, - datagrams); + err = ___sys_recvmsg(sock, + (struct msghdr __user *)entry, + &msg_sys, flags & ~MSG_WAITFORONE, + datagrams); if (err < 0) break; err = put_user(err, &entry->msg_len); @@ -2399,6 +2419,9 @@ int datagrams; struct timespec timeout_sys; + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; + if (!timeout) return __sys_recvmmsg(fd, mmsg, vlen, flags, NULL); --- linux-lts-raring-3.8.0.orig/net/compat.c +++ linux-lts-raring-3.8.0/net/compat.c @@ -734,19 +734,25 @@ asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned int flags) { - return sys_sendmsg(fd, (struct msghdr __user *)msg, flags | MSG_CMSG_COMPAT); + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; + return __sys_sendmsg(fd, (struct msghdr __user *)msg, flags | MSG_CMSG_COMPAT); } asmlinkage long compat_sys_sendmmsg(int fd, struct compat_mmsghdr __user *mmsg, unsigned int vlen, unsigned int flags) { + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; return __sys_sendmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, flags | MSG_CMSG_COMPAT); } asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg, unsigned int flags) { - return sys_recvmsg(fd, (struct msghdr __user *)msg, flags | MSG_CMSG_COMPAT); + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; + return __sys_recvmsg(fd, (struct msghdr __user *)msg, flags | MSG_CMSG_COMPAT); } asmlinkage long compat_sys_recv(int fd, void __user *buf, size_t len, unsigned int flags) @@ -768,6 +774,9 @@ int datagrams; struct timespec ktspec; + if (flags & MSG_CMSG_COMPAT) + return -EINVAL; + if (COMPAT_USE_64BIT_TIME) return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, flags | MSG_CMSG_COMPAT, --- linux-lts-raring-3.8.0.orig/net/sysctl_net.c +++ linux-lts-raring-3.8.0/net/sysctl_net.c @@ -47,12 +47,12 @@ /* Allow network administrator to have same access as root. */ if (ns_capable(net->user_ns, CAP_NET_ADMIN) || - uid_eq(root_uid, current_uid())) { + uid_eq(root_uid, current_euid())) { int mode = (table->mode >> 6) & 7; return (mode << 6) | (mode << 3) | mode; } /* Allow netns root group to have the same access as the root group */ - if (gid_eq(root_gid, current_gid())) { + if (in_egroup_p(root_gid)) { int mode = (table->mode >> 3) & 7; return (mode << 3) | mode; } --- linux-lts-raring-3.8.0.orig/net/netfilter/core.c +++ linux-lts-raring-3.8.0/net/netfilter/core.c @@ -29,6 +29,8 @@ const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO] __read_mostly; EXPORT_SYMBOL(nf_afinfo); +const struct nf_ipv6_ops __rcu *nf_ipv6_ops __read_mostly; +EXPORT_SYMBOL_GPL(nf_ipv6_ops); int nf_register_afinfo(const struct nf_afinfo *afinfo) { --- linux-lts-raring-3.8.0.orig/net/netfilter/nfnetlink_acct.c +++ linux-lts-raring-3.8.0/net/netfilter/nfnetlink_acct.c @@ -147,9 +147,12 @@ rcu_read_lock(); list_for_each_entry_rcu(cur, &nfnl_acct_list, head) { - if (last && cur != last) - continue; + if (last) { + if (cur != last) + continue; + last = NULL; + } if (nfnl_acct_fill_info(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, NFNL_MSG_TYPE(cb->nlh->nlmsg_type), --- linux-lts-raring-3.8.0.orig/net/netfilter/nf_nat_core.c +++ linux-lts-raring-3.8.0/net/netfilter/nf_nat_core.c @@ -468,33 +468,22 @@ struct nf_nat_proto_clean { u8 l3proto; u8 l4proto; - bool hash; }; -/* Clear NAT section of all conntracks, in case we're loaded again. */ -static int nf_nat_proto_clean(struct nf_conn *i, void *data) +/* kill conntracks with affected NAT section */ +static int nf_nat_proto_remove(struct nf_conn *i, void *data) { const struct nf_nat_proto_clean *clean = data; struct nf_conn_nat *nat = nfct_nat(i); if (!nat) return 0; - if (!(i->status & IPS_SRC_NAT_DONE)) - return 0; + if ((clean->l3proto && nf_ct_l3num(i) != clean->l3proto) || (clean->l4proto && nf_ct_protonum(i) != clean->l4proto)) return 0; - if (clean->hash) { - spin_lock_bh(&nf_nat_lock); - hlist_del_rcu(&nat->bysource); - spin_unlock_bh(&nf_nat_lock); - } else { - memset(nat, 0, sizeof(*nat)); - i->status &= ~(IPS_NAT_MASK | IPS_NAT_DONE_MASK | - IPS_SEQ_ADJUST); - } - return 0; + return i->status & IPS_NAT_MASK ? 1 : 0; } static void nf_nat_l4proto_clean(u8 l3proto, u8 l4proto) @@ -506,16 +495,8 @@ struct net *net; rtnl_lock(); - /* Step 1 - remove from bysource hash */ - clean.hash = true; for_each_net(net) - nf_ct_iterate_cleanup(net, nf_nat_proto_clean, &clean); - synchronize_rcu(); - - /* Step 2 - clean NAT section */ - clean.hash = false; - for_each_net(net) - nf_ct_iterate_cleanup(net, nf_nat_proto_clean, &clean); + nf_ct_iterate_cleanup(net, nf_nat_proto_remove, &clean); rtnl_unlock(); } @@ -527,16 +508,9 @@ struct net *net; rtnl_lock(); - /* Step 1 - remove from bysource hash */ - clean.hash = true; - for_each_net(net) - nf_ct_iterate_cleanup(net, nf_nat_proto_clean, &clean); - synchronize_rcu(); - /* Step 2 - clean NAT section */ - clean.hash = false; for_each_net(net) - nf_ct_iterate_cleanup(net, nf_nat_proto_clean, &clean); + nf_ct_iterate_cleanup(net, nf_nat_proto_remove, &clean); rtnl_unlock(); } @@ -774,7 +748,7 @@ { struct nf_nat_proto_clean clean = {}; - nf_ct_iterate_cleanup(net, &nf_nat_proto_clean, &clean); + nf_ct_iterate_cleanup(net, &nf_nat_proto_remove, &clean); synchronize_rcu(); nf_ct_free_hashtable(net->ct.nat_bysource, net->ct.nat_htable_size); } --- linux-lts-raring-3.8.0.orig/net/netfilter/xt_TCPOPTSTRIP.c +++ linux-lts-raring-3.8.0/net/netfilter/xt_TCPOPTSTRIP.c @@ -30,18 +30,31 @@ static unsigned int tcpoptstrip_mangle_packet(struct sk_buff *skb, - const struct xt_tcpoptstrip_target_info *info, + const struct xt_action_param *par, unsigned int tcphoff, unsigned int minlen) { + const struct xt_tcpoptstrip_target_info *info = par->targinfo; unsigned int optl, i, j; struct tcphdr *tcph; u_int16_t n, o; u_int8_t *opt; + int len; + + /* This is a fragment, no TCP header is available */ + if (par->fragoff != 0) + return XT_CONTINUE; if (!skb_make_writable(skb, skb->len)) return NF_DROP; + len = skb->len - tcphoff; + if (len < (int)sizeof(struct tcphdr)) + return NF_DROP; + tcph = (struct tcphdr *)(skb_network_header(skb) + tcphoff); + if (tcph->doff * 4 > len) + return NF_DROP; + opt = (u_int8_t *)tcph; /* @@ -76,7 +89,7 @@ static unsigned int tcpoptstrip_tg4(struct sk_buff *skb, const struct xt_action_param *par) { - return tcpoptstrip_mangle_packet(skb, par->targinfo, ip_hdrlen(skb), + return tcpoptstrip_mangle_packet(skb, par, ip_hdrlen(skb), sizeof(struct iphdr) + sizeof(struct tcphdr)); } @@ -94,7 +107,7 @@ if (tcphoff < 0) return NF_DROP; - return tcpoptstrip_mangle_packet(skb, par->targinfo, tcphoff, + return tcpoptstrip_mangle_packet(skb, par, tcphoff, sizeof(*ipv6h) + sizeof(struct tcphdr)); } #endif --- linux-lts-raring-3.8.0.orig/net/netfilter/nf_conntrack_helper.c +++ linux-lts-raring-3.8.0/net/netfilter/nf_conntrack_helper.c @@ -236,7 +236,9 @@ /* We only allow helper re-assignment of the same sort since * we cannot reallocate the helper extension area. */ - if (help->helper != helper) { + struct nf_conntrack_helper *tmp = rcu_dereference(help->helper); + + if (tmp && tmp->help != helper->help) { RCU_INIT_POINTER(help->helper, NULL); goto out; } --- linux-lts-raring-3.8.0.orig/net/netfilter/xt_TCPMSS.c +++ linux-lts-raring-3.8.0/net/netfilter/xt_TCPMSS.c @@ -44,17 +44,22 @@ static int tcpmss_mangle_packet(struct sk_buff *skb, - const struct xt_tcpmss_info *info, + const struct xt_action_param *par, unsigned int in_mtu, unsigned int tcphoff, unsigned int minlen) { + const struct xt_tcpmss_info *info = par->targinfo; struct tcphdr *tcph; unsigned int tcplen, i; __be16 oldval; u16 newmss; u8 *opt; + /* This is a fragment, no TCP header is available */ + if (par->fragoff != 0) + return XT_CONTINUE; + if (!skb_make_writable(skb, skb->len)) return -1; @@ -124,6 +129,18 @@ skb_put(skb, TCPOLEN_MSS); + /* + * IPv4: RFC 1122 states "If an MSS option is not received at + * connection setup, TCP MUST assume a default send MSS of 536". + * IPv6: RFC 2460 states IPv6 has a minimum MTU of 1280 and a minimum + * length IPv6 header of 60, ergo the default MSS value is 1220 + * Since no MSS was provided, we must use the default values + */ + if (par->family == NFPROTO_IPV4) + newmss = min(newmss, (u16)536); + else + newmss = min(newmss, (u16)1220); + opt = (u_int8_t *)tcph + sizeof(struct tcphdr); memmove(opt + TCPOLEN_MSS, opt, tcplen - sizeof(struct tcphdr)); @@ -181,7 +198,7 @@ __be16 newlen; int ret; - ret = tcpmss_mangle_packet(skb, par->targinfo, + ret = tcpmss_mangle_packet(skb, par, tcpmss_reverse_mtu(skb, PF_INET), iph->ihl * 4, sizeof(*iph) + sizeof(struct tcphdr)); @@ -210,7 +227,7 @@ tcphoff = ipv6_skip_exthdr(skb, sizeof(*ipv6h), &nexthdr, &frag_off); if (tcphoff < 0) return NF_DROP; - ret = tcpmss_mangle_packet(skb, par->targinfo, + ret = tcpmss_mangle_packet(skb, par, tcpmss_reverse_mtu(skb, PF_INET6), tcphoff, sizeof(*ipv6h) + sizeof(struct tcphdr)); --- linux-lts-raring-3.8.0.orig/net/netfilter/nf_conntrack_sip.c +++ linux-lts-raring-3.8.0/net/netfilter/nf_conntrack_sip.c @@ -1547,7 +1547,7 @@ msglen = origlen = end - dptr; if (msglen > datalen) - return NF_DROP; + return NF_ACCEPT; ret = process_sip_msg(skb, ct, protoff, dataoff, &dptr, &msglen); --- linux-lts-raring-3.8.0.orig/net/netfilter/nfnetlink_cttimeout.c +++ linux-lts-raring-3.8.0/net/netfilter/nfnetlink_cttimeout.c @@ -220,9 +220,12 @@ rcu_read_lock(); list_for_each_entry_rcu(cur, &cttimeout_list, head) { - if (last && cur != last) - continue; + if (last) { + if (cur != last) + continue; + last = NULL; + } if (ctnl_timeout_fill_info(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, NFNL_MSG_TYPE(cb->nlh->nlmsg_type), --- linux-lts-raring-3.8.0.orig/net/netfilter/xt_addrtype.c +++ linux-lts-raring-3.8.0/net/netfilter/xt_addrtype.c @@ -22,6 +22,7 @@ #include #endif +#include #include #include @@ -33,12 +34,12 @@ #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) static u32 match_lookup_rt6(struct net *net, const struct net_device *dev, - const struct in6_addr *addr) + const struct in6_addr *addr, u16 mask) { const struct nf_afinfo *afinfo; struct flowi6 flow; struct rt6_info *rt; - u32 ret; + u32 ret = 0; int route_err; memset(&flow, 0, sizeof(flow)); @@ -49,12 +50,19 @@ rcu_read_lock(); afinfo = nf_get_afinfo(NFPROTO_IPV6); - if (afinfo != NULL) + if (afinfo != NULL) { + const struct nf_ipv6_ops *v6ops; + + if (dev && (mask & XT_ADDRTYPE_LOCAL)) { + v6ops = nf_get_ipv6_ops(); + if (v6ops && v6ops->chk_addr(net, addr, dev, true)) + ret = XT_ADDRTYPE_LOCAL; + } route_err = afinfo->route(net, (struct dst_entry **)&rt, - flowi6_to_flowi(&flow), !!dev); - else + flowi6_to_flowi(&flow), false); + } else { route_err = 1; - + } rcu_read_unlock(); if (route_err) @@ -62,15 +70,12 @@ if (rt->rt6i_flags & RTF_REJECT) ret = XT_ADDRTYPE_UNREACHABLE; - else - ret = 0; - if (rt->rt6i_flags & RTF_LOCAL) + if (dev == NULL && rt->rt6i_flags & RTF_LOCAL) ret |= XT_ADDRTYPE_LOCAL; if (rt->rt6i_flags & RTF_ANYCAST) ret |= XT_ADDRTYPE_ANYCAST; - dst_release(&rt->dst); return ret; } @@ -90,7 +95,7 @@ if ((XT_ADDRTYPE_LOCAL | XT_ADDRTYPE_ANYCAST | XT_ADDRTYPE_UNREACHABLE) & mask) - return !!(mask & match_lookup_rt6(net, dev, addr)); + return !!(mask & match_lookup_rt6(net, dev, addr, mask)); return true; } --- linux-lts-raring-3.8.0.orig/net/netfilter/nf_conntrack_netlink.c +++ linux-lts-raring-3.8.0/net/netfilter/nf_conntrack_netlink.c @@ -1705,6 +1705,9 @@ if (nlh->nlmsg_flags & NLM_F_CREATE) { enum ip_conntrack_events events; + if (!cda[CTA_TUPLE_ORIG] || !cda[CTA_TUPLE_REPLY]) + return -EINVAL; + ct = ctnetlink_create_conntrack(net, zone, cda, &otuple, &rtuple, u3); if (IS_ERR(ct)) --- linux-lts-raring-3.8.0.orig/net/netfilter/xt_LOG.c +++ linux-lts-raring-3.8.0/net/netfilter/xt_LOG.c @@ -730,7 +730,7 @@ dump_sk_uid_gid(m, skb->sk); /* Max length: 16 "MARK=0xFFFFFFFF " */ - if (!recurse && skb->mark) + if (recurse && skb->mark) sb_add(m, "MARK=0x%x ", skb->mark); } --- linux-lts-raring-3.8.0.orig/net/netfilter/ipvs/ip_vs_core.c +++ linux-lts-raring-3.8.0/net/netfilter/ipvs/ip_vs_core.c @@ -1002,6 +1002,32 @@ return th->rst; } +static inline bool is_new_conn(const struct sk_buff *skb, + struct ip_vs_iphdr *iph) +{ + switch (iph->protocol) { + case IPPROTO_TCP: { + struct tcphdr _tcph, *th; + + th = skb_header_pointer(skb, iph->len, sizeof(_tcph), &_tcph); + if (th == NULL) + return false; + return th->syn; + } + case IPPROTO_SCTP: { + sctp_chunkhdr_t *sch, schunk; + + sch = skb_header_pointer(skb, iph->len + sizeof(sctp_sctphdr_t), + sizeof(schunk), &schunk); + if (sch == NULL) + return false; + return sch->type == SCTP_CID_INIT; + } + default: + return false; + } +} + /* Handle response packets: rewrite addresses and send away... */ static unsigned int @@ -1432,7 +1458,8 @@ /* do the statistics and put it back */ ip_vs_in_stats(cp, skb); - if (IPPROTO_TCP == cih->protocol || IPPROTO_UDP == cih->protocol) + if (IPPROTO_TCP == cih->protocol || IPPROTO_UDP == cih->protocol || + IPPROTO_SCTP == cih->protocol) offset += 2 * sizeof(__u16); verdict = ip_vs_icmp_xmit(skb, cp, pp, offset, hooknum, &ciph); @@ -1577,7 +1604,8 @@ } /* ipvs enabled in this netns ? */ net = skb_net(skb); - if (!net_ipvs(net)->enable) + ipvs = net_ipvs(net); + if (unlikely(sysctl_backup_only(ipvs) || !ipvs->enable)) return NF_ACCEPT; ip_vs_fill_iph_skb(af, skb, &iph); @@ -1627,6 +1655,15 @@ * Check if the packet belongs to an existing connection entry */ cp = pp->conn_in_get(af, skb, &iph, 0); + + if (unlikely(sysctl_expire_nodest_conn(ipvs)) && cp && cp->dest && + unlikely(!atomic_read(&cp->dest->weight)) && !iph.fragoffs && + is_new_conn(skb, &iph)) { + ip_vs_conn_expire_now(cp); + __ip_vs_conn_put(cp); + cp = NULL; + } + if (unlikely(!cp) && !iph.fragoffs) { /* No (second) fragments need to enter here, as nf_defrag_ipv6 * replayed fragment zero will already have created the cp @@ -1654,7 +1691,6 @@ } IP_VS_DBG_PKT(11, af, pp, skb, 0, "Incoming packet"); - ipvs = net_ipvs(net); /* Check the server status */ if (cp->dest && !(cp->dest->flags & IP_VS_DEST_F_AVAILABLE)) { /* the destination server is not available */ @@ -1815,13 +1851,15 @@ { int r; struct net *net; + struct netns_ipvs *ipvs; if (ip_hdr(skb)->protocol != IPPROTO_ICMP) return NF_ACCEPT; /* ipvs enabled in this netns ? */ net = skb_net(skb); - if (!net_ipvs(net)->enable) + ipvs = net_ipvs(net); + if (unlikely(sysctl_backup_only(ipvs) || !ipvs->enable)) return NF_ACCEPT; return ip_vs_in_icmp(skb, &r, hooknum); @@ -1835,6 +1873,7 @@ { int r; struct net *net; + struct netns_ipvs *ipvs; struct ip_vs_iphdr iphdr; ip_vs_fill_iph_skb(AF_INET6, skb, &iphdr); @@ -1843,7 +1882,8 @@ /* ipvs enabled in this netns ? */ net = skb_net(skb); - if (!net_ipvs(net)->enable) + ipvs = net_ipvs(net); + if (unlikely(sysctl_backup_only(ipvs) || !ipvs->enable)) return NF_ACCEPT; return ip_vs_in_icmp_v6(skb, &r, hooknum, &iphdr); --- linux-lts-raring-3.8.0.orig/net/netfilter/ipvs/ip_vs_ctl.c +++ linux-lts-raring-3.8.0/net/netfilter/ipvs/ip_vs_ctl.c @@ -1808,6 +1808,12 @@ .mode = 0644, .proc_handler = proc_dointvec, }, + { + .procname = "backup_only", + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, #ifdef CONFIG_IP_VS_DEBUG { .procname = "debug_level", @@ -2556,6 +2562,7 @@ struct ip_vs_dest *dest; struct ip_vs_dest_entry entry; + memset(&entry, 0, sizeof(entry)); list_for_each_entry(dest, &svc->destinations, n_list) { if (count >= get->num_dests) break; @@ -3741,6 +3748,7 @@ tbl[idx++].data = &ipvs->sysctl_nat_icmp_send; ipvs->sysctl_pmtu_disc = 1; tbl[idx++].data = &ipvs->sysctl_pmtu_disc; + tbl[idx++].data = &ipvs->sysctl_backup_only; ipvs->sysctl_hdr = register_net_sysctl(net, "net/ipv4/vs", tbl); --- linux-lts-raring-3.8.0.orig/net/netfilter/ipvs/ip_vs_pe_sip.c +++ linux-lts-raring-3.8.0/net/netfilter/ipvs/ip_vs_pe_sip.c @@ -37,14 +37,10 @@ if (ret > 0) break; if (!ret) - return 0; + return -EINVAL; dataoff += *matchoff; } - /* Empty callid is useless */ - if (!*matchlen) - return -EINVAL; - /* Too large is useless */ if (*matchlen > IP_VS_PEDATA_MAXLEN) return -EINVAL; --- linux-lts-raring-3.8.0.orig/net/netfilter/ipset/ip_set_core.c +++ linux-lts-raring-3.8.0/net/netfilter/ipset/ip_set_core.c @@ -1470,7 +1470,8 @@ if (ret == -EAGAIN) ret = 1; - return ret < 0 ? ret : ret > 0 ? 0 : -IPSET_ERR_EXIST; + return (ret < 0 && ret != -ENOTEMPTY) ? ret : + ret > 0 ? 0 : -IPSET_ERR_EXIST; } /* Get headed data of a set */ --- linux-lts-raring-3.8.0.orig/net/netfilter/ipset/ip_set_list_set.c +++ linux-lts-raring-3.8.0/net/netfilter/ipset/ip_set_list_set.c @@ -174,9 +174,13 @@ { const struct set_elem *e = list_set_elem(map, i); - if (i == map->size - 1 && e->id != IPSET_INVALID_ID) - /* Last element replaced: e.g. add new,before,last */ - ip_set_put_byindex(e->id); + if (e->id != IPSET_INVALID_ID) { + const struct set_elem *x = list_set_elem(map, map->size - 1); + + /* Last element replaced or pushed off */ + if (x->id != IPSET_INVALID_ID) + ip_set_put_byindex(x->id); + } if (with_timeout(map->timeout)) list_elem_tadd(map, i, id, ip_set_timeout_set(timeout)); else --- linux-lts-raring-3.8.0.orig/net/packet/af_packet.c +++ linux-lts-raring-3.8.0/net/packet/af_packet.c @@ -693,36 +693,33 @@ smp_rmb(); - if (likely(TP_STATUS_KERNEL == BLOCK_STATUS(pbd1))) { + /* We could have just memset this but we will lose the + * flexibility of making the priv area sticky + */ - /* We could have just memset this but we will lose the - * flexibility of making the priv area sticky - */ - BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++; - BLOCK_NUM_PKTS(pbd1) = 0; - BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv); - getnstimeofday(&ts); - h1->ts_first_pkt.ts_sec = ts.tv_sec; - h1->ts_first_pkt.ts_nsec = ts.tv_nsec; - pkc1->pkblk_start = (char *)pbd1; - pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv); - BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv); - BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN; - pbd1->version = pkc1->version; - pkc1->prev = pkc1->nxt_offset; - pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size; - prb_thaw_queue(pkc1); - _prb_refresh_rx_retire_blk_timer(pkc1); + BLOCK_SNUM(pbd1) = pkc1->knxt_seq_num++; + BLOCK_NUM_PKTS(pbd1) = 0; + BLOCK_LEN(pbd1) = BLK_PLUS_PRIV(pkc1->blk_sizeof_priv); - smp_wmb(); + getnstimeofday(&ts); - return; - } + h1->ts_first_pkt.ts_sec = ts.tv_sec; + h1->ts_first_pkt.ts_nsec = ts.tv_nsec; + + pkc1->pkblk_start = (char *)pbd1; + pkc1->nxt_offset = pkc1->pkblk_start + BLK_PLUS_PRIV(pkc1->blk_sizeof_priv); - WARN(1, "ERROR block:%p is NOT FREE status:%d kactive_blk_num:%d\n", - pbd1, BLOCK_STATUS(pbd1), pkc1->kactive_blk_num); - dump_stack(); - BUG(); + BLOCK_O2FP(pbd1) = (__u32)BLK_PLUS_PRIV(pkc1->blk_sizeof_priv); + BLOCK_O2PRIV(pbd1) = BLK_HDR_LEN; + + pbd1->version = pkc1->version; + pkc1->prev = pkc1->nxt_offset; + pkc1->pkblk_end = pkc1->pkblk_start + pkc1->kblk_size; + + prb_thaw_queue(pkc1); + _prb_refresh_rx_retire_blk_timer(pkc1); + + smp_wmb(); } /* @@ -813,10 +810,6 @@ prb_close_block(pkc, pbd, po, status); return; } - - WARN(1, "ERROR-pbd[%d]:%p\n", pkc->kactive_blk_num, pbd); - dump_stack(); - BUG(); } static int prb_curr_blk_in_use(struct tpacket_kbdq_core *pkc, @@ -2776,12 +2769,11 @@ return -EOPNOTSUPP; uaddr->sa_family = AF_PACKET; + memset(uaddr->sa_data, 0, sizeof(uaddr->sa_data)); rcu_read_lock(); dev = dev_get_by_index_rcu(sock_net(sk), pkt_sk(sk)->ifindex); if (dev) - strncpy(uaddr->sa_data, dev->name, 14); - else - memset(uaddr->sa_data, 0, 14); + strlcpy(uaddr->sa_data, dev->name, sizeof(uaddr->sa_data)); rcu_read_unlock(); *uaddr_len = sizeof(*uaddr); --- linux-lts-raring-3.8.0.orig/net/bluetooth/af_bluetooth.c +++ linux-lts-raring-3.8.0/net/bluetooth/af_bluetooth.c @@ -230,6 +230,8 @@ if (flags & (MSG_OOB)) return -EOPNOTSUPP; + msg->msg_namelen = 0; + skb = skb_recv_datagram(sk, flags, noblock, &err); if (!skb) { if (sk->sk_shutdown & RCV_SHUTDOWN) @@ -237,8 +239,6 @@ return err; } - msg->msg_namelen = 0; - copied = skb->len; if (len < copied) { msg->msg_flags |= MSG_TRUNC; --- linux-lts-raring-3.8.0.orig/net/bluetooth/hci_event.c +++ linux-lts-raring-3.8.0/net/bluetooth/hci_event.c @@ -3967,7 +3967,11 @@ cp.handle = cpu_to_le16(conn->handle); if (ltk->authenticated) - conn->sec_level = BT_SECURITY_HIGH; + conn->pending_sec_level = BT_SECURITY_HIGH; + else + conn->pending_sec_level = BT_SECURITY_MEDIUM; + + conn->enc_key_size = ltk->enc_size; hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp); --- linux-lts-raring-3.8.0.orig/net/bluetooth/hci_core.c +++ linux-lts-raring-3.8.0/net/bluetooth/hci_core.c @@ -709,7 +709,7 @@ goto done; } - if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) { + if (test_bit(HCI_RFKILLED, &hdev->dev_flags)) { ret = -ERFKILL; goto done; } @@ -777,6 +777,8 @@ done: hci_req_unlock(hdev); hci_dev_put(hdev); + if (!ret && hdev->load_firmware) + hdev->load_firmware(hdev); return ret; } @@ -1124,10 +1126,12 @@ BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked); - if (!blocked) - return 0; - - hci_dev_do_close(hdev); + if (blocked) { + set_bit(HCI_RFKILLED, &hdev->dev_flags); + hci_dev_do_close(hdev); + } else { + clear_bit(HCI_RFKILLED, &hdev->dev_flags); +} return 0; } @@ -1139,11 +1143,15 @@ static void hci_power_on(struct work_struct *work) { struct hci_dev *hdev = container_of(work, struct hci_dev, power_on); + int err; BT_DBG("%s", hdev->name); - if (hci_dev_open(hdev->id) < 0) + err = hci_dev_open(hdev->id); + if (err < 0) { + mgmt_set_powered_failed(hdev, err); return; + } if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) schedule_delayed_work(&hdev->power_off, HCI_AUTO_OFF_TIMEOUT); @@ -1813,6 +1821,9 @@ } } + if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) + set_bit(HCI_RFKILLED, &hdev->dev_flags); + set_bit(HCI_SETUP, &hdev->dev_flags); if (hdev->dev_type != HCI_AMP) @@ -2187,6 +2198,7 @@ return 0; } +EXPORT_SYMBOL(hci_send_cmd); /* Get data from the previously sent command */ void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode) --- linux-lts-raring-3.8.0.orig/net/bluetooth/l2cap_core.c +++ linux-lts-raring-3.8.0/net/bluetooth/l2cap_core.c @@ -2748,6 +2748,9 @@ BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u", conn, code, ident, dlen); + if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE) + return NULL; + len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen; count = min_t(unsigned int, conn->mtu, len); @@ -3573,10 +3576,14 @@ } static inline int l2cap_command_rej(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data; + if (cmd_len < sizeof(*rej)) + return -EPROTO; + if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD) return 0; @@ -3725,11 +3732,14 @@ } static int l2cap_connect_req(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) { struct hci_dev *hdev = conn->hcon->hdev; struct hci_conn *hcon = conn->hcon; + if (cmd_len < sizeof(struct l2cap_conn_req)) + return -EPROTO; + hci_dev_lock(hdev); if (test_bit(HCI_MGMT, &hdev->dev_flags) && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) @@ -3743,7 +3753,8 @@ } static int l2cap_connect_create_rsp(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data; u16 scid, dcid, result, status; @@ -3751,6 +3762,9 @@ u8 req[128]; int err; + if (cmd_len < sizeof(*rsp)) + return -EPROTO; + scid = __le16_to_cpu(rsp->scid); dcid = __le16_to_cpu(rsp->dcid); result = __le16_to_cpu(rsp->result); @@ -3848,6 +3862,9 @@ struct l2cap_chan *chan; int len, err = 0; + if (cmd_len < sizeof(*req)) + return -EPROTO; + dcid = __le16_to_cpu(req->dcid); flags = __le16_to_cpu(req->flags); @@ -3871,7 +3888,7 @@ /* Reject if config buffer is too small. */ len = cmd_len - sizeof(*req); - if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) { + if (chan->conf_len + len > sizeof(chan->conf_req)) { l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(chan, rsp, L2CAP_CONF_REJECT, flags), rsp); @@ -3949,14 +3966,18 @@ } static inline int l2cap_config_rsp(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data; u16 scid, flags, result; struct l2cap_chan *chan; - int len = le16_to_cpu(cmd->len) - sizeof(*rsp); + int len = cmd_len - sizeof(*rsp); int err = 0; + if (cmd_len < sizeof(*rsp)) + return -EPROTO; + scid = __le16_to_cpu(rsp->scid); flags = __le16_to_cpu(rsp->flags); result = __le16_to_cpu(rsp->result); @@ -4057,7 +4078,8 @@ } static inline int l2cap_disconnect_req(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data; struct l2cap_disconn_rsp rsp; @@ -4065,6 +4087,9 @@ struct l2cap_chan *chan; struct sock *sk; + if (cmd_len != sizeof(*req)) + return -EPROTO; + scid = __le16_to_cpu(req->scid); dcid = __le16_to_cpu(req->dcid); @@ -4104,12 +4129,16 @@ } static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data; u16 dcid, scid; struct l2cap_chan *chan; + if (cmd_len != sizeof(*rsp)) + return -EPROTO; + scid = __le16_to_cpu(rsp->scid); dcid = __le16_to_cpu(rsp->dcid); @@ -4139,11 +4168,15 @@ } static inline int l2cap_information_req(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_info_req *req = (struct l2cap_info_req *) data; u16 type; + if (cmd_len != sizeof(*req)) + return -EPROTO; + type = __le16_to_cpu(req->type); BT_DBG("type 0x%4.4x", type); @@ -4190,11 +4223,15 @@ } static inline int l2cap_information_rsp(struct l2cap_conn *conn, - struct l2cap_cmd_hdr *cmd, u8 *data) + struct l2cap_cmd_hdr *cmd, u16 cmd_len, + u8 *data) { struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data; u16 type, result; + if (cmd_len < sizeof(*rsp)) + return -EPROTO; + type = __le16_to_cpu(rsp->type); result = __le16_to_cpu(rsp->result); @@ -5060,16 +5097,16 @@ switch (cmd->code) { case L2CAP_COMMAND_REJ: - l2cap_command_rej(conn, cmd, data); + l2cap_command_rej(conn, cmd, cmd_len, data); break; case L2CAP_CONN_REQ: - err = l2cap_connect_req(conn, cmd, data); + err = l2cap_connect_req(conn, cmd, cmd_len, data); break; case L2CAP_CONN_RSP: case L2CAP_CREATE_CHAN_RSP: - err = l2cap_connect_create_rsp(conn, cmd, data); + err = l2cap_connect_create_rsp(conn, cmd, cmd_len, data); break; case L2CAP_CONF_REQ: @@ -5077,15 +5114,15 @@ break; case L2CAP_CONF_RSP: - err = l2cap_config_rsp(conn, cmd, data); + err = l2cap_config_rsp(conn, cmd, cmd_len, data); break; case L2CAP_DISCONN_REQ: - err = l2cap_disconnect_req(conn, cmd, data); + err = l2cap_disconnect_req(conn, cmd, cmd_len, data); break; case L2CAP_DISCONN_RSP: - err = l2cap_disconnect_rsp(conn, cmd, data); + err = l2cap_disconnect_rsp(conn, cmd, cmd_len, data); break; case L2CAP_ECHO_REQ: @@ -5096,11 +5133,11 @@ break; case L2CAP_INFO_REQ: - err = l2cap_information_req(conn, cmd, data); + err = l2cap_information_req(conn, cmd, cmd_len, data); break; case L2CAP_INFO_RSP: - err = l2cap_information_rsp(conn, cmd, data); + err = l2cap_information_rsp(conn, cmd, cmd_len, data); break; case L2CAP_CREATE_CHAN_REQ: --- linux-lts-raring-3.8.0.orig/net/bluetooth/sco.c +++ linux-lts-raring-3.8.0/net/bluetooth/sco.c @@ -361,6 +361,7 @@ sco_chan_del(sk, ECONNRESET); break; + case BT_CONNECT2: case BT_CONNECT: case BT_DISCONN: sco_chan_del(sk, ECONNRESET); @@ -666,6 +667,7 @@ test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { hci_conn_accept(pi->conn->hcon, 0); sk->sk_state = BT_CONFIG; + msg->msg_namelen = 0; release_sock(sk); return 0; --- linux-lts-raring-3.8.0.orig/net/bluetooth/mgmt.c +++ linux-lts-raring-3.8.0/net/bluetooth/mgmt.c @@ -2957,6 +2957,27 @@ return err; } +int mgmt_set_powered_failed(struct hci_dev *hdev, int err) +{ + struct pending_cmd *cmd; + u8 status; + + cmd = mgmt_pending_find(MGMT_OP_SET_POWERED, hdev); + if (!cmd) + return -ENOENT; + + if (err == -ERFKILL) + status = MGMT_STATUS_RFKILLED; + else + status = MGMT_STATUS_FAILED; + + err = cmd_status(cmd->sk, hdev->id, MGMT_OP_SET_POWERED, status); + + mgmt_pending_remove(cmd); + + return err; +} + int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable) { struct cmd_lookup match = { NULL, hdev }; --- linux-lts-raring-3.8.0.orig/net/bluetooth/rfcomm/sock.c +++ linux-lts-raring-3.8.0/net/bluetooth/rfcomm/sock.c @@ -610,6 +610,7 @@ if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) { rfcomm_dlc_accept(d); + msg->msg_namelen = 0; return 0; } --- linux-lts-raring-3.8.0.orig/net/dcb/dcbnl.c +++ linux-lts-raring-3.8.0/net/dcb/dcbnl.c @@ -284,6 +284,7 @@ if (!netdev->dcbnl_ops->getpermhwaddr) return -EOPNOTSUPP; + memset(perm_addr, 0, sizeof(perm_addr)); netdev->dcbnl_ops->getpermhwaddr(netdev, perm_addr); return nla_put(skb, DCB_ATTR_PERM_HWADDR, sizeof(perm_addr), perm_addr); @@ -1042,6 +1043,7 @@ if (ops->ieee_getets) { struct ieee_ets ets; + memset(&ets, 0, sizeof(ets)); err = ops->ieee_getets(netdev, &ets); if (!err && nla_put(skb, DCB_ATTR_IEEE_ETS, sizeof(ets), &ets)) @@ -1050,6 +1052,7 @@ if (ops->ieee_getmaxrate) { struct ieee_maxrate maxrate; + memset(&maxrate, 0, sizeof(maxrate)); err = ops->ieee_getmaxrate(netdev, &maxrate); if (!err) { err = nla_put(skb, DCB_ATTR_IEEE_MAXRATE, @@ -1061,6 +1064,7 @@ if (ops->ieee_getpfc) { struct ieee_pfc pfc; + memset(&pfc, 0, sizeof(pfc)); err = ops->ieee_getpfc(netdev, &pfc); if (!err && nla_put(skb, DCB_ATTR_IEEE_PFC, sizeof(pfc), &pfc)) @@ -1094,6 +1098,7 @@ /* get peer info if available */ if (ops->ieee_peer_getets) { struct ieee_ets ets; + memset(&ets, 0, sizeof(ets)); err = ops->ieee_peer_getets(netdev, &ets); if (!err && nla_put(skb, DCB_ATTR_IEEE_PEER_ETS, sizeof(ets), &ets)) @@ -1102,6 +1107,7 @@ if (ops->ieee_peer_getpfc) { struct ieee_pfc pfc; + memset(&pfc, 0, sizeof(pfc)); err = ops->ieee_peer_getpfc(netdev, &pfc); if (!err && nla_put(skb, DCB_ATTR_IEEE_PEER_PFC, sizeof(pfc), &pfc)) @@ -1280,6 +1286,7 @@ /* peer info if available */ if (ops->cee_peer_getpg) { struct cee_pg pg; + memset(&pg, 0, sizeof(pg)); err = ops->cee_peer_getpg(netdev, &pg); if (!err && nla_put(skb, DCB_ATTR_CEE_PEER_PG, sizeof(pg), &pg)) @@ -1288,6 +1295,7 @@ if (ops->cee_peer_getpfc) { struct cee_pfc pfc; + memset(&pfc, 0, sizeof(pfc)); err = ops->cee_peer_getpfc(netdev, &pfc); if (!err && nla_put(skb, DCB_ATTR_CEE_PEER_PFC, sizeof(pfc), &pfc)) --- linux-lts-raring-3.8.0.orig/net/sctp/socket.c +++ linux-lts-raring-3.8.0/net/sctp/socket.c @@ -4002,6 +4002,12 @@ /* Release our hold on the endpoint. */ sp = sctp_sk(sk); + /* This could happen during socket init, thus we bail out + * early, since the rest of the below is not setup either. + */ + if (sp->ep == NULL) + return; + if (sp->do_auto_asconf) { sp->do_auto_asconf = 0; list_del(&sp->auto_asconf_list); @@ -5653,6 +5659,9 @@ if (len < sizeof(sctp_assoc_t)) return -EINVAL; + /* Allow the struct to grow and fill in as much as possible */ + len = min_t(size_t, len, sizeof(sas)); + if (copy_from_user(&sas, optval, len)) return -EFAULT; @@ -5686,9 +5695,6 @@ /* Mark beginning of a new observation period */ asoc->stats.max_obs_rto = asoc->rto_min; - /* Allow the struct to grow and fill in as much as possible */ - len = min_t(size_t, len, sizeof(sas)); - if (put_user(len, optlen)) return -EFAULT; --- linux-lts-raring-3.8.0.orig/net/sctp/outqueue.c +++ linux-lts-raring-3.8.0/net/sctp/outqueue.c @@ -206,6 +206,8 @@ */ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q) { + memset(q, 0, sizeof(struct sctp_outq)); + q->asoc = asoc; INIT_LIST_HEAD(&q->out_chunk_list); INIT_LIST_HEAD(&q->control_chunk_list); @@ -213,13 +215,7 @@ INIT_LIST_HEAD(&q->sacked); INIT_LIST_HEAD(&q->abandoned); - q->fast_rtx = 0; - q->outstanding_bytes = 0; q->empty = 1; - q->cork = 0; - - q->malloced = 0; - q->out_qlen = 0; } /* Free the outqueue structure and any related pending chunks. --- linux-lts-raring-3.8.0.orig/net/sctp/sm_statefuns.c +++ linux-lts-raring-3.8.0/net/sctp/sm_statefuns.c @@ -2082,7 +2082,7 @@ } /* Delete the tempory new association. */ - sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(new_asoc)); + sctp_add_cmd_sf(commands, SCTP_CMD_SET_ASOC, SCTP_ASOC(new_asoc)); sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); /* Restore association pointer to provide SCTP command interpeter --- linux-lts-raring-3.8.0.orig/net/sctp/associola.c +++ linux-lts-raring-3.8.0/net/sctp/associola.c @@ -1080,7 +1080,7 @@ transports) { if (transport == active) - break; + continue; list_for_each_entry(chunk, &transport->transmitted, transmitted_list) { if (key == chunk->subh.data_hdr->tsn) { --- linux-lts-raring-3.8.0.orig/net/8021q/vlan.c +++ linux-lts-raring-3.8.0/net/8021q/vlan.c @@ -86,13 +86,6 @@ grp = &vlan_info->grp; - /* Take it out of our own structures, but be sure to interlock with - * HW accelerating devices or SW vlan input packet processing if - * VLAN is not 0 (leave it there for 802.1p). - */ - if (vlan_id) - vlan_vid_del(real_dev, vlan_id); - grp->nr_vlan_devs--; if (vlan->flags & VLAN_FLAG_GVRP) @@ -108,6 +101,13 @@ if (grp->nr_vlan_devs == 0) vlan_gvrp_uninit_applicant(real_dev); + /* Take it out of our own structures, but be sure to interlock with + * HW accelerating devices or SW vlan input packet processing if + * VLAN is not 0 (leave it there for 802.1p). + */ + if (vlan_id) + vlan_vid_del(real_dev, vlan_id); + /* Get rid of the vlan's reference to real_dev */ dev_put(real_dev); } --- linux-lts-raring-3.8.0.orig/net/8021q/vlan_dev.c +++ linux-lts-raring-3.8.0/net/8021q/vlan_dev.c @@ -73,6 +73,8 @@ { struct vlan_priority_tci_mapping *mp; + smp_rmb(); /* coupled with smp_wmb() in vlan_dev_set_egress_priority() */ + mp = vlan_dev_priv(dev)->egress_priority_map[(skb->priority & 0xF)]; while (mp) { if (mp->priority == skb->priority) { @@ -248,6 +250,11 @@ np->next = mp; np->priority = skb_prio; np->vlan_qos = vlan_qos; + /* Before inserting this element in hash table, make sure all its fields + * are committed to memory. + * coupled with smp_rmb() in vlan_dev_get_egress_qos_mask() + */ + smp_wmb(); vlan->egress_priority_map[skb_prio & 0xF] = np; if (vlan_qos) vlan->nr_egress_mappings++; @@ -617,7 +624,7 @@ netdev_features_t features) { struct net_device *real_dev = vlan_dev_priv(dev)->real_dev; - u32 old_features = features; + netdev_features_t old_features = features; features &= real_dev->vlan_features; features |= NETIF_F_RXCSUM; --- linux-lts-raring-3.8.0.orig/net/ieee802154/6lowpan.c +++ linux-lts-raring-3.8.0/net/ieee802154/6lowpan.c @@ -1234,7 +1234,7 @@ return rtnl_link_register(&lowpan_link_ops); } -static inline void __init lowpan_netlink_fini(void) +static inline void lowpan_netlink_fini(void) { rtnl_link_unregister(&lowpan_link_ops); } --- linux-lts-raring-3.8.0.orig/net/ieee802154/6lowpan.h +++ linux-lts-raring-3.8.0/net/ieee802154/6lowpan.h @@ -84,7 +84,7 @@ (memcmp(addr1, addr2, length >> 3) == 0) /* local link, i.e. FE80::/10 */ -#define is_addr_link_local(a) (((a)->s6_addr16[0]) == 0x80FE) +#define is_addr_link_local(a) (((a)->s6_addr16[0]) == htons(0xFE80)) /* * check whether we can compress the IID to 16 bits, --- linux-lts-raring-3.8.0.orig/net/llc/af_llc.c +++ linux-lts-raring-3.8.0/net/llc/af_llc.c @@ -720,6 +720,8 @@ int target; /* Read at least this many bytes */ long timeo; + msg->msg_namelen = 0; + lock_sock(sk); copied = -ENOTCONN; if (unlikely(sk->sk_type == SOCK_STREAM && sk->sk_state == TCP_LISTEN)) --- linux-lts-raring-3.8.0.orig/net/ax25/af_ax25.c +++ linux-lts-raring-3.8.0/net/ax25/af_ax25.c @@ -1647,6 +1647,7 @@ ax25_address src; const unsigned char *mac = skb_mac_header(skb); + memset(sax, 0, sizeof(struct full_sockaddr_ax25)); ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL, &digi, NULL, NULL); sax->sax25_family = AF_AX25; --- linux-lts-raring-3.8.0.orig/net/bridge/br_stp_timer.c +++ linux-lts-raring-3.8.0/net/bridge/br_stp_timer.c @@ -107,7 +107,7 @@ br_debug(br, "tcn timer expired\n"); spin_lock(&br->lock); - if (br->dev->flags & IFF_UP) { + if (!br_is_root_bridge(br) && (br->dev->flags & IFF_UP)) { br_transmit_tcn(br); mod_timer(&br->tcn_timer,jiffies + br->bridge_hello_time); --- linux-lts-raring-3.8.0.orig/net/bridge/br_netlink.c +++ linux-lts-raring-3.8.0/net/bridge/br_netlink.c @@ -28,6 +28,7 @@ + nla_total_size(1) /* IFLA_BRPORT_MODE */ + nla_total_size(1) /* IFLA_BRPORT_GUARD */ + nla_total_size(1) /* IFLA_BRPORT_PROTECT */ + + nla_total_size(1) /* IFLA_BRPORT_FAST_LEAVE */ + 0; } --- linux-lts-raring-3.8.0.orig/net/bridge/br_mdb.c +++ linux-lts-raring-3.8.0/net/bridge/br_mdb.c @@ -82,6 +82,7 @@ port = p->port; if (port) { struct br_mdb_entry e; + memset(&e, 0, sizeof(e)); e.ifindex = port->dev->ifindex; e.state = p->state; if (p->addr.proto == htons(ETH_P_IP)) @@ -138,6 +139,7 @@ break; bpm = nlmsg_data(nlh); + memset(bpm, 0, sizeof(*bpm)); bpm->ifindex = dev->ifindex; if (br_mdb_fill_info(skb, cb, dev) < 0) goto out; @@ -173,6 +175,7 @@ return -EMSGSIZE; bpm = nlmsg_data(nlh); + memset(bpm, 0, sizeof(*bpm)); bpm->family = AF_BRIDGE; bpm->ifindex = dev->ifindex; nest = nla_nest_start(skb, MDBA_MDB); @@ -230,6 +233,7 @@ { struct br_mdb_entry entry; + memset(&entry, 0, sizeof(entry)); entry.ifindex = port->dev->ifindex; entry.addr.proto = group->proto; entry.addr.u.ip4 = group->u.ip4; --- linux-lts-raring-3.8.0.orig/net/bridge/br_multicast.c +++ linux-lts-raring-3.8.0/net/bridge/br_multicast.c @@ -458,8 +458,9 @@ skb_set_transport_header(skb, skb->len); mldq = (struct mld_msg *) icmp6_hdr(skb); - interval = ipv6_addr_any(group) ? br->multicast_last_member_interval : - br->multicast_query_response_interval; + interval = ipv6_addr_any(group) ? + br->multicast_query_response_interval : + br->multicast_last_member_interval; mldq->mld_type = ICMPV6_MGM_QUERY; mldq->mld_code = 0; @@ -1166,7 +1167,7 @@ max_delay = msecs_to_jiffies(ntohs(mld->mld_maxdelay)); if (max_delay) group = &mld->mld_mca; - } else if (skb->len >= sizeof(*mld2q)) { + } else { if (!pskb_may_pull(skb, sizeof(*mld2q))) { err = -EINVAL; goto out; @@ -1174,7 +1175,8 @@ mld2q = (struct mld2_query *)icmp6_hdr(skb); if (!mld2q->mld2q_nsrcs) group = &mld2q->mld2q_mca; - max_delay = mld2q->mld2q_mrc ? MLDV2_MRC(ntohs(mld2q->mld2q_mrc)) : 1; + + max_delay = max(msecs_to_jiffies(MLDV2_MRC(ntohs(mld2q->mld2q_mrc))), 1UL); } if (!group) --- linux-lts-raring-3.8.0.orig/net/tipc/socket.c +++ linux-lts-raring-3.8.0/net/tipc/socket.c @@ -806,6 +806,7 @@ if (addr) { addr->family = AF_TIPC; addr->addrtype = TIPC_ADDR_ID; + memset(&addr->addr, 0, sizeof(addr->addr)); addr->addr.id.ref = msg_origport(msg); addr->addr.id.node = msg_orignode(msg); addr->addr.name.domain = 0; /* could leave uninitialized */ @@ -920,6 +921,9 @@ goto exit; } + /* will be updated in set_orig_addr() if needed */ + m->msg_namelen = 0; + timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); restart: @@ -1029,6 +1033,9 @@ goto exit; } + /* will be updated in set_orig_addr() if needed */ + m->msg_namelen = 0; + target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len); timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); @@ -1216,7 +1223,7 @@ /* Accept only ACK or NACK message */ if (unlikely(msg_errcode(msg))) { sock->state = SS_DISCONNECTING; - sk->sk_err = -ECONNREFUSED; + sk->sk_err = ECONNREFUSED; retval = TIPC_OK; break; } @@ -1227,7 +1234,7 @@ res = auto_connect(sock, msg); if (res) { sock->state = SS_DISCONNECTING; - sk->sk_err = res; + sk->sk_err = -res; retval = TIPC_OK; break; } --- linux-lts-raring-3.8.0.orig/net/x25/af_x25.c +++ linux-lts-raring-3.8.0/net/x25/af_x25.c @@ -1586,11 +1586,11 @@ case SIOCX25CALLACCPTAPPRV: { rc = -EINVAL; lock_sock(sk); - if (sk->sk_state != TCP_CLOSE) - break; - clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); + if (sk->sk_state == TCP_CLOSE) { + clear_bit(X25_ACCPT_APPRV_FLAG, &x25->flags); + rc = 0; + } release_sock(sk); - rc = 0; break; } @@ -1598,14 +1598,15 @@ rc = -EINVAL; lock_sock(sk); if (sk->sk_state != TCP_ESTABLISHED) - break; + goto out_sendcallaccpt_release; /* must call accptapprv above */ if (test_bit(X25_ACCPT_APPRV_FLAG, &x25->flags)) - break; + goto out_sendcallaccpt_release; x25_write_internal(sk, X25_CALL_ACCEPTED); x25->state = X25_STATE_3; - release_sock(sk); rc = 0; +out_sendcallaccpt_release: + release_sock(sk); break; } --- linux-lts-raring-3.8.0.orig/net/rose/af_rose.c +++ linux-lts-raring-3.8.0/net/rose/af_rose.c @@ -1257,6 +1257,7 @@ skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); if (srose != NULL) { + memset(srose, 0, msg->msg_namelen); srose->srose_family = AF_ROSE; srose->srose_addr = rose->dest_addr; srose->srose_call = rose->dest_call; --- linux-lts-raring-3.8.0.orig/net/mac80211/ibss.c +++ linux-lts-raring-3.8.0/net/mac80211/ibss.c @@ -1207,6 +1207,7 @@ sdata->vif.bss_conf.ibss_creator = false; ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_IBSS); + ieee80211_vif_release_channel(sdata); synchronize_rcu(); kfree_skb(skb); --- linux-lts-raring-3.8.0.orig/net/mac80211/cfg.c +++ linux-lts-raring-3.8.0/net/mac80211/cfg.c @@ -638,6 +638,8 @@ if (sta->sdata->dev != dev) continue; + sinfo.filled = 0; + sta_set_sinfo(sta, &sinfo); i = 0; ADD_STA_STATS(sta); } @@ -2499,7 +2501,7 @@ list_del(&dep->list); mutex_unlock(&local->mtx); - ieee80211_roc_notify_destroy(dep); + ieee80211_roc_notify_destroy(dep, true); return 0; } @@ -2539,7 +2541,7 @@ ieee80211_start_next_roc(local); mutex_unlock(&local->mtx); - ieee80211_roc_notify_destroy(found); + ieee80211_roc_notify_destroy(found, true); } else { /* work may be pending so use it all the time */ found->abort = true; @@ -2549,6 +2551,8 @@ /* work will clean up etc */ flush_delayed_work(&found->work); + WARN_ON(!found->to_be_freed); + kfree(found); } return 0; --- linux-lts-raring-3.8.0.orig/net/mac80211/pm.c +++ linux-lts-raring-3.8.0/net/mac80211/pm.c @@ -52,8 +52,8 @@ ieee80211_stop_queues_by_reason(hw, IEEE80211_QUEUE_STOP_REASON_SUSPEND); - /* flush out all packets */ - synchronize_net(); + /* flush out all packets and station cleanup call_rcu()s */ + rcu_barrier(); drv_flush(local, false); @@ -92,7 +92,7 @@ return err; } else if (err > 0) { WARN_ON(err != 1); - local->wowlan = false; + return err; } else { list_for_each_entry(sdata, &local->interfaces, list) { cancel_work_sync(&sdata->work); --- linux-lts-raring-3.8.0.orig/net/mac80211/sta_info.c +++ linux-lts-raring-3.8.0/net/mac80211/sta_info.c @@ -756,6 +756,7 @@ struct ieee80211_local *local; struct ieee80211_sub_if_data *sdata; int ret, i; + bool have_key = false; might_sleep(); @@ -783,12 +784,19 @@ list_del_rcu(&sta->list); mutex_lock(&local->key_mtx); - for (i = 0; i < NUM_DEFAULT_KEYS; i++) + for (i = 0; i < NUM_DEFAULT_KEYS; i++) { __ieee80211_key_free(key_mtx_dereference(local, sta->gtk[i])); - if (sta->ptk) + have_key = true; + } + if (sta->ptk) { __ieee80211_key_free(key_mtx_dereference(local, sta->ptk)); + have_key = true; + } mutex_unlock(&local->key_mtx); + if (!have_key) + synchronize_net(); + sta->dead = true; local->num_sta--; --- linux-lts-raring-3.8.0.orig/net/mac80211/rx.c +++ linux-lts-raring-3.8.0/net/mac80211/rx.c @@ -935,8 +935,14 @@ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); - /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */ - if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) { + /* + * Drop duplicate 802.11 retransmissions + * (IEEE 802.11-2012: 9.3.2.10 "Duplicate detection and recovery") + */ + if (rx->skb->len >= 24 && rx->sta && + !ieee80211_is_ctl(hdr->frame_control) && + !ieee80211_is_qos_nullfunc(hdr->frame_control) && + !is_multicast_ether_addr(hdr->addr1)) { if (unlikely(ieee80211_has_retry(hdr->frame_control) && rx->sta->last_seq_ctrl[rx->seqno_idx] == hdr->seq_ctrl)) { @@ -2950,6 +2956,9 @@ * and location updates. Note that mac80211 * itself never looks at these frames. */ + if (!multicast && + !ether_addr_equal(sdata->vif.addr, hdr->addr1)) + return 0; if (ieee80211_is_public_action(hdr, skb->len)) return 1; if (!ieee80211_is_beacon(hdr->frame_control)) --- linux-lts-raring-3.8.0.orig/net/mac80211/mlme.c +++ linux-lts-raring-3.8.0/net/mac80211/mlme.c @@ -1812,6 +1812,8 @@ WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY, transmit_frame, frame_buf); ifmgd->flags &= ~IEEE80211_STA_CSA_RECEIVED; + ieee80211_wake_queues_by_reason(&sdata->local->hw, + IEEE80211_QUEUE_STOP_REASON_CSA); mutex_unlock(&ifmgd->mtx); /* @@ -1856,8 +1858,6 @@ container_of(work, struct ieee80211_sub_if_data, u.mgd.csa_connection_drop_work); - ieee80211_wake_queues_by_reason(&sdata->local->hw, - IEEE80211_QUEUE_STOP_REASON_CSA); __ieee80211_disconnect(sdata, true); } @@ -3401,12 +3401,16 @@ ret = 0; out: + /* don't print the message below for VHT mismatch if VHT is disabled */ + if (ret & IEEE80211_STA_DISABLE_VHT) + vht_chandef = *chandef; + while (!cfg80211_chandef_usable(sdata->local->hw.wiphy, chandef, IEEE80211_CHAN_DISABLED)) { if (WARN_ON(chandef->width == NL80211_CHAN_WIDTH_20_NOHT)) { ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT; - goto out; + break; } ret |= chandef_downgrade(chandef); @@ -3719,8 +3723,16 @@ /* prep auth_data so we don't go into idle on disassoc */ ifmgd->auth_data = auth_data; - if (ifmgd->associated) - ieee80211_set_disassoc(sdata, 0, 0, false, NULL); + if (ifmgd->associated) { + u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN]; + + ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, + WLAN_REASON_UNSPECIFIED, + false, frame_buf); + + __cfg80211_send_deauth(sdata->dev, frame_buf, + sizeof(frame_buf)); + } sdata_info(sdata, "authenticate with %pM\n", req->bss->bssid); @@ -3779,8 +3791,16 @@ mutex_lock(&ifmgd->mtx); - if (ifmgd->associated) - ieee80211_set_disassoc(sdata, 0, 0, false, NULL); + if (ifmgd->associated) { + u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN]; + + ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, + WLAN_REASON_UNSPECIFIED, + false, frame_buf); + + __cfg80211_send_deauth(sdata->dev, frame_buf, + sizeof(frame_buf)); + } if (ifmgd->auth_data && !ifmgd->auth_data->done) { err = -EBUSY; @@ -4072,6 +4092,17 @@ { struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; + /* + * Make sure some work items will not run after this, + * they will not do anything but might not have been + * cancelled when disconnecting. + */ + cancel_work_sync(&ifmgd->monitor_work); + cancel_work_sync(&ifmgd->beacon_connection_loss_work); + cancel_work_sync(&ifmgd->request_smps_work); + cancel_work_sync(&ifmgd->csa_connection_drop_work); + cancel_work_sync(&ifmgd->chswitch_work); + mutex_lock(&ifmgd->mtx); if (ifmgd->assoc_data) ieee80211_destroy_assoc_data(sdata, false); --- linux-lts-raring-3.8.0.orig/net/mac80211/iface.c +++ linux-lts-raring-3.8.0/net/mac80211/iface.c @@ -1657,6 +1657,15 @@ ASSERT_RTNL(); + /* + * Close all AP_VLAN interfaces first, as otherwise they + * might be closed while the AP interface they belong to + * is closed, causing unregister_netdevice_many() to crash. + */ + list_for_each_entry(sdata, &local->interfaces, list) + if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) + dev_close(sdata->dev); + mutex_lock(&local->iflist_mtx); list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { list_del(&sdata->list); --- linux-lts-raring-3.8.0.orig/net/mac80211/ieee80211_i.h +++ linux-lts-raring-3.8.0/net/mac80211/ieee80211_i.h @@ -346,6 +346,7 @@ struct ieee80211_channel *chan; bool started, abort, hw_begun, notified; + bool to_be_freed; unsigned long hw_start_time; @@ -1363,7 +1364,7 @@ void ieee80211_roc_setup(struct ieee80211_local *local); void ieee80211_start_next_roc(struct ieee80211_local *local); void ieee80211_roc_purge(struct ieee80211_sub_if_data *sdata); -void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc); +void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc, bool free); void ieee80211_sw_roc_work(struct work_struct *work); void ieee80211_handle_roc_started(struct ieee80211_roc_work *roc); --- linux-lts-raring-3.8.0.orig/net/mac80211/offchannel.c +++ linux-lts-raring-3.8.0/net/mac80211/offchannel.c @@ -299,10 +299,13 @@ } } -void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc) +void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc, bool free) { struct ieee80211_roc_work *dep, *tmp; + if (WARN_ON(roc->to_be_freed)) + return; + /* was never transmitted */ if (roc->frame) { cfg80211_mgmt_tx_status(&roc->sdata->wdev, @@ -318,9 +321,12 @@ GFP_KERNEL); list_for_each_entry_safe(dep, tmp, &roc->dependents, list) - ieee80211_roc_notify_destroy(dep); + ieee80211_roc_notify_destroy(dep, true); - kfree(roc); + if (free) + kfree(roc); + else + roc->to_be_freed = true; } void ieee80211_sw_roc_work(struct work_struct *work) @@ -333,6 +339,9 @@ mutex_lock(&local->mtx); + if (roc->to_be_freed) + goto out_unlock; + if (roc->abort) goto finish; @@ -372,7 +381,7 @@ finish: list_del(&roc->list); started = roc->started; - ieee80211_roc_notify_destroy(roc); + ieee80211_roc_notify_destroy(roc, !roc->abort); if (started) { drv_flush(local, false); @@ -412,7 +421,7 @@ list_del(&roc->list); - ieee80211_roc_notify_destroy(roc); + ieee80211_roc_notify_destroy(roc, true); /* if there's another roc, start it now */ ieee80211_start_next_roc(local); @@ -462,12 +471,14 @@ list_for_each_entry_safe(roc, tmp, &tmp_list, list) { if (local->ops->remain_on_channel) { list_del(&roc->list); - ieee80211_roc_notify_destroy(roc); + ieee80211_roc_notify_destroy(roc, true); } else { ieee80211_queue_delayed_work(&local->hw, &roc->work, 0); /* work will clean up etc */ flush_delayed_work(&roc->work); + WARN_ON(!roc->to_be_freed); + kfree(roc); } } --- linux-lts-raring-3.8.0.orig/net/ceph/auth_x.c +++ linux-lts-raring-3.8.0/net/ceph/auth_x.c @@ -298,6 +298,7 @@ return -ENOMEM; } au->service = th->service; + au->secret_id = th->secret_id; msg_a = au->buf->vec.iov_base; msg_a->struct_v = 1; @@ -555,6 +556,26 @@ return 0; } +static int ceph_x_update_authorizer( + struct ceph_auth_client *ac, int peer_type, + struct ceph_auth_handshake *auth) +{ + struct ceph_x_authorizer *au; + struct ceph_x_ticket_handler *th; + + th = get_ticket_handler(ac, peer_type); + if (IS_ERR(th)) + return PTR_ERR(th); + + au = (struct ceph_x_authorizer *)auth->authorizer; + if (au->secret_id < th->secret_id) { + dout("ceph_x_update_authorizer service %u secret %llu < %llu\n", + au->service, au->secret_id, th->secret_id); + return ceph_x_build_authorizer(ac, th, au); + } + return 0; +} + static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, struct ceph_authorizer *a, size_t len) { @@ -630,7 +651,7 @@ th = get_ticket_handler(ac, peer_type); if (!IS_ERR(th)) - remove_ticket_handler(ac, th); + memset(&th->validity, 0, sizeof(th->validity)); } @@ -641,6 +662,7 @@ .build_request = ceph_x_build_request, .handle_reply = ceph_x_handle_reply, .create_authorizer = ceph_x_create_authorizer, + .update_authorizer = ceph_x_update_authorizer, .verify_authorizer_reply = ceph_x_verify_authorizer_reply, .destroy_authorizer = ceph_x_destroy_authorizer, .invalidate_authorizer = ceph_x_invalidate_authorizer, --- linux-lts-raring-3.8.0.orig/net/ceph/auth.c +++ linux-lts-raring-3.8.0/net/ceph/auth.c @@ -47,6 +47,7 @@ if (!ac) goto out; + mutex_init(&ac->mutex); ac->negotiating = true; if (name) ac->name = name; @@ -73,10 +74,12 @@ */ void ceph_auth_reset(struct ceph_auth_client *ac) { + mutex_lock(&ac->mutex); dout("auth_reset %p\n", ac); if (ac->ops && !ac->negotiating) ac->ops->reset(ac); ac->negotiating = true; + mutex_unlock(&ac->mutex); } int ceph_entity_name_encode(const char *name, void **p, void *end) @@ -102,6 +105,7 @@ int i, num; int ret; + mutex_lock(&ac->mutex); dout("auth_build_hello\n"); monhdr->have_version = 0; monhdr->session_mon = cpu_to_le16(-1); @@ -122,15 +126,19 @@ ret = ceph_entity_name_encode(ac->name, &p, end); if (ret < 0) - return ret; + goto out; ceph_decode_need(&p, end, sizeof(u64), bad); ceph_encode_64(&p, ac->global_id); ceph_encode_32(&lenp, p - lenp - sizeof(u32)); - return p - buf; + ret = p - buf; +out: + mutex_unlock(&ac->mutex); + return ret; bad: - return -ERANGE; + ret = -ERANGE; + goto out; } static int ceph_build_auth_request(struct ceph_auth_client *ac, @@ -151,11 +159,13 @@ if (ret < 0) { pr_err("error %d building auth method %s request\n", ret, ac->ops->name); - return ret; + goto out; } dout(" built request %d bytes\n", ret); ceph_encode_32(&p, ret); - return p + ret - msg_buf; + ret = p + ret - msg_buf; +out: + return ret; } /* @@ -176,6 +186,7 @@ int result_msg_len; int ret = -EINVAL; + mutex_lock(&ac->mutex); dout("handle_auth_reply %p %p\n", p, end); ceph_decode_need(&p, end, sizeof(u32) * 3 + sizeof(u64), bad); protocol = ceph_decode_32(&p); @@ -227,33 +238,103 @@ ret = ac->ops->handle_reply(ac, result, payload, payload_end); if (ret == -EAGAIN) { - return ceph_build_auth_request(ac, reply_buf, reply_len); + ret = ceph_build_auth_request(ac, reply_buf, reply_len); } else if (ret) { pr_err("auth method '%s' error %d\n", ac->ops->name, ret); - return ret; } - return 0; -bad: - pr_err("failed to decode auth msg\n"); out: + mutex_unlock(&ac->mutex); return ret; + +bad: + pr_err("failed to decode auth msg\n"); + ret = -EINVAL; + goto out; } int ceph_build_auth(struct ceph_auth_client *ac, void *msg_buf, size_t msg_len) { + int ret = 0; + + mutex_lock(&ac->mutex); if (!ac->protocol) - return ceph_auth_build_hello(ac, msg_buf, msg_len); - BUG_ON(!ac->ops); - if (ac->ops->should_authenticate(ac)) - return ceph_build_auth_request(ac, msg_buf, msg_len); - return 0; + ret = ceph_auth_build_hello(ac, msg_buf, msg_len); + else if (ac->ops->should_authenticate(ac)) + ret = ceph_build_auth_request(ac, msg_buf, msg_len); + mutex_unlock(&ac->mutex); + return ret; } int ceph_auth_is_authenticated(struct ceph_auth_client *ac) { - if (!ac->ops) - return 0; - return ac->ops->is_authenticated(ac); + int ret = 0; + + mutex_lock(&ac->mutex); + if (ac->ops) + ret = ac->ops->is_authenticated(ac); + mutex_unlock(&ac->mutex); + return ret; +} +EXPORT_SYMBOL(ceph_auth_is_authenticated); + +int ceph_auth_create_authorizer(struct ceph_auth_client *ac, + int peer_type, + struct ceph_auth_handshake *auth) +{ + int ret = 0; + + mutex_lock(&ac->mutex); + if (ac->ops && ac->ops->create_authorizer) + ret = ac->ops->create_authorizer(ac, peer_type, auth); + mutex_unlock(&ac->mutex); + return ret; +} +EXPORT_SYMBOL(ceph_auth_create_authorizer); + +void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac, + struct ceph_authorizer *a) +{ + mutex_lock(&ac->mutex); + if (ac->ops && ac->ops->destroy_authorizer) + ac->ops->destroy_authorizer(ac, a); + mutex_unlock(&ac->mutex); +} +EXPORT_SYMBOL(ceph_auth_destroy_authorizer); + +int ceph_auth_update_authorizer(struct ceph_auth_client *ac, + int peer_type, + struct ceph_auth_handshake *a) +{ + int ret = 0; + + mutex_lock(&ac->mutex); + if (ac->ops && ac->ops->update_authorizer) + ret = ac->ops->update_authorizer(ac, peer_type, a); + mutex_unlock(&ac->mutex); + return ret; +} +EXPORT_SYMBOL(ceph_auth_update_authorizer); + +int ceph_auth_verify_authorizer_reply(struct ceph_auth_client *ac, + struct ceph_authorizer *a, size_t len) +{ + int ret = 0; + + mutex_lock(&ac->mutex); + if (ac->ops && ac->ops->verify_authorizer_reply) + ret = ac->ops->verify_authorizer_reply(ac, a, len); + mutex_unlock(&ac->mutex); + return ret; +} +EXPORT_SYMBOL(ceph_auth_verify_authorizer_reply); + +void ceph_auth_invalidate_authorizer(struct ceph_auth_client *ac, int peer_type) +{ + mutex_lock(&ac->mutex); + if (ac->ops && ac->ops->invalidate_authorizer) + ac->ops->invalidate_authorizer(ac, peer_type); + mutex_unlock(&ac->mutex); } +EXPORT_SYMBOL(ceph_auth_invalidate_authorizer); --- linux-lts-raring-3.8.0.orig/net/ceph/osdmap.c +++ linux-lts-raring-3.8.0/net/ceph/osdmap.c @@ -1128,7 +1128,7 @@ /* pg_temp? */ t = ceph_stable_mod(ps, le32_to_cpu(pool->v.pg_num), - pool->pgp_num_mask); + pool->pg_num_mask); pgid.ps = cpu_to_le16(t); pg = __lookup_pg_mapping(&osdmap->pg_temp, pgid); if (pg) { --- linux-lts-raring-3.8.0.orig/net/ceph/messenger.c +++ linux-lts-raring-3.8.0/net/ceph/messenger.c @@ -1546,7 +1546,6 @@ con->error_msg = "connect authorization failure"; return -1; } - con->auth_retry = 1; con_out_kvec_reset(con); ret = prepare_write_connect(con); if (ret < 0) @@ -1631,7 +1630,7 @@ WARN_ON(con->state != CON_STATE_NEGOTIATING); con->state = CON_STATE_OPEN; - + con->auth_retry = 0; /* we authenticated; clear flag */ con->peer_global_seq = le32_to_cpu(con->in_reply.global_seq); con->connect_seq++; con->peer_features = server_feat; --- linux-lts-raring-3.8.0.orig/net/ceph/osd_client.c +++ linux-lts-raring-3.8.0/net/ceph/osd_client.c @@ -673,8 +673,7 @@ if (atomic_dec_and_test(&osd->o_ref) && osd->o_auth.authorizer) { struct ceph_auth_client *ac = osd->o_osdc->client->monc.auth; - if (ac->ops && ac->ops->destroy_authorizer) - ac->ops->destroy_authorizer(ac, osd->o_auth.authorizer); + ceph_auth_destroy_authorizer(ac, osd->o_auth.authorizer); kfree(osd); } } @@ -1339,13 +1338,13 @@ __register_request(osdc, req); __unregister_linger_request(osdc, req); } + reset_changed_osds(osdc); mutex_unlock(&osdc->request_mutex); if (needmap) { dout("%d requests for down osds, need new map\n", needmap); ceph_monc_request_next_osdmap(&osdc->client->monc); } - reset_changed_osds(osdc); } @@ -1724,6 +1723,8 @@ dout("osdc_start_request failed map, " " will retry %lld\n", req->r_tid); rc = 0; + } else { + __unregister_request(osdc, req); } goto out_unlock; } @@ -2129,13 +2130,17 @@ struct ceph_auth_handshake *auth = &o->o_auth; if (force_new && auth->authorizer) { - if (ac->ops && ac->ops->destroy_authorizer) - ac->ops->destroy_authorizer(ac, auth->authorizer); + ceph_auth_destroy_authorizer(ac, auth->authorizer); auth->authorizer = NULL; } - if (!auth->authorizer && ac->ops && ac->ops->create_authorizer) { - int ret = ac->ops->create_authorizer(ac, CEPH_ENTITY_TYPE_OSD, - auth); + if (!auth->authorizer) { + int ret = ceph_auth_create_authorizer(ac, CEPH_ENTITY_TYPE_OSD, + auth); + if (ret) + return ERR_PTR(ret); + } else { + int ret = ceph_auth_update_authorizer(ac, CEPH_ENTITY_TYPE_OSD, + auth); if (ret) return ERR_PTR(ret); } @@ -2151,11 +2156,7 @@ struct ceph_osd_client *osdc = o->o_osdc; struct ceph_auth_client *ac = osdc->client->monc.auth; - /* - * XXX If ac->ops or ac->ops->verify_authorizer_reply is null, - * XXX which do we do: succeed or fail? - */ - return ac->ops->verify_authorizer_reply(ac, o->o_auth.authorizer, len); + return ceph_auth_verify_authorizer_reply(ac, o->o_auth.authorizer, len); } static int invalidate_authorizer(struct ceph_connection *con) @@ -2164,9 +2165,7 @@ struct ceph_osd_client *osdc = o->o_osdc; struct ceph_auth_client *ac = osdc->client->monc.auth; - if (ac->ops && ac->ops->invalidate_authorizer) - ac->ops->invalidate_authorizer(ac, CEPH_ENTITY_TYPE_OSD); - + ceph_auth_invalidate_authorizer(ac, CEPH_ENTITY_TYPE_OSD); return ceph_monc_validate_auth(&osdc->client->monc); } --- linux-lts-raring-3.8.0.orig/net/ceph/mon_client.c +++ linux-lts-raring-3.8.0/net/ceph/mon_client.c @@ -737,7 +737,7 @@ __validate_auth(monc); - if (monc->auth->ops->is_authenticated(monc->auth)) + if (ceph_auth_is_authenticated(monc->auth)) __send_subscribe(monc); } __schedule_delayed(monc); @@ -892,8 +892,7 @@ mutex_lock(&monc->mutex); had_debugfs_info = have_debugfs_info(monc); - if (monc->auth->ops) - was_auth = monc->auth->ops->is_authenticated(monc->auth); + was_auth = ceph_auth_is_authenticated(monc->auth); monc->pending_auth = 0; ret = ceph_handle_auth_reply(monc->auth, msg->front.iov_base, msg->front.iov_len, @@ -904,7 +903,7 @@ wake_up_all(&monc->client->auth_wq); } else if (ret > 0) { __send_prepared_auth_request(monc, ret); - } else if (!was_auth && monc->auth->ops->is_authenticated(monc->auth)) { + } else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) { dout("authenticated, starting session\n"); monc->client->msgr.inst.name.type = CEPH_ENTITY_TYPE_CLIENT; --- linux-lts-raring-3.8.0.orig/net/ceph/auth_none.c +++ linux-lts-raring-3.8.0/net/ceph/auth_none.c @@ -39,6 +39,11 @@ return xi->starting; } +static int build_request(struct ceph_auth_client *ac, void *buf, void *end) +{ + return 0; +} + /* * the generic auth code decode the global_id, and we carry no actual * authenticate state, so nothing happens here. @@ -106,6 +111,7 @@ .destroy = destroy, .is_authenticated = is_authenticated, .should_authenticate = should_authenticate, + .build_request = build_request, .handle_reply = handle_reply, .create_authorizer = ceph_auth_none_create_authorizer, .destroy_authorizer = ceph_auth_none_destroy_authorizer, --- linux-lts-raring-3.8.0.orig/net/ceph/auth_x.h +++ linux-lts-raring-3.8.0/net/ceph/auth_x.h @@ -29,6 +29,7 @@ struct ceph_buffer *buf; unsigned int service; u64 nonce; + u64 secret_id; char reply_buf[128]; /* big enough for encrypted blob */ }; --- linux-lts-raring-3.8.0.orig/net/netlabel/netlabel_domainhash.c +++ linux-lts-raring-3.8.0/net/netlabel/netlabel_domainhash.c @@ -245,6 +245,71 @@ } } +/** + * netlbl_domhsh_validate - Validate a new domain mapping entry + * @entry: the entry to validate + * + * This function validates the new domain mapping entry to ensure that it is + * a valid entry. Returns zero on success, negative values on failure. + * + */ +static int netlbl_domhsh_validate(const struct netlbl_dom_map *entry) +{ + struct netlbl_af4list *iter4; + struct netlbl_domaddr4_map *map4; +#if IS_ENABLED(CONFIG_IPV6) + struct netlbl_af6list *iter6; + struct netlbl_domaddr6_map *map6; +#endif /* IPv6 */ + + if (entry == NULL) + return -EINVAL; + + switch (entry->type) { + case NETLBL_NLTYPE_UNLABELED: + if (entry->type_def.cipsov4 != NULL || + entry->type_def.addrsel != NULL) + return -EINVAL; + break; + case NETLBL_NLTYPE_CIPSOV4: + if (entry->type_def.cipsov4 == NULL) + return -EINVAL; + break; + case NETLBL_NLTYPE_ADDRSELECT: + netlbl_af4list_foreach(iter4, &entry->type_def.addrsel->list4) { + map4 = netlbl_domhsh_addr4_entry(iter4); + switch (map4->type) { + case NETLBL_NLTYPE_UNLABELED: + if (map4->type_def.cipsov4 != NULL) + return -EINVAL; + break; + case NETLBL_NLTYPE_CIPSOV4: + if (map4->type_def.cipsov4 == NULL) + return -EINVAL; + break; + default: + return -EINVAL; + } + } +#if IS_ENABLED(CONFIG_IPV6) + netlbl_af6list_foreach(iter6, &entry->type_def.addrsel->list6) { + map6 = netlbl_domhsh_addr6_entry(iter6); + switch (map6->type) { + case NETLBL_NLTYPE_UNLABELED: + break; + default: + return -EINVAL; + } + } +#endif /* IPv6 */ + break; + default: + return -EINVAL; + } + + return 0; +} + /* * Domain Hash Table Functions */ @@ -311,6 +376,10 @@ struct netlbl_af6list *tmp6; #endif /* IPv6 */ + ret_val = netlbl_domhsh_validate(entry); + if (ret_val != 0) + return ret_val; + /* XXX - we can remove this RCU read lock as the spinlock protects the * entire function, but before we do we need to fixup the * netlbl_af[4,6]list RCU functions to do "the right thing" with --- linux-lts-raring-3.8.0.orig/net/netlabel/netlabel_unlabeled.c +++ linux-lts-raring-3.8.0/net/netlabel/netlabel_unlabeled.c @@ -1189,8 +1189,6 @@ struct netlbl_unlhsh_walk_arg cb_arg; u32 skip_bkt = cb->args[0]; u32 skip_chain = cb->args[1]; - u32 skip_addr4 = cb->args[2]; - u32 skip_addr6 = cb->args[3]; u32 iter_bkt; u32 iter_chain = 0, iter_addr4 = 0, iter_addr6 = 0; struct netlbl_unlhsh_iface *iface; @@ -1215,7 +1213,7 @@ continue; netlbl_af4list_foreach_rcu(addr4, &iface->addr4_list) { - if (iter_addr4++ < skip_addr4) + if (iter_addr4++ < cb->args[2]) continue; if (netlbl_unlabel_staticlist_gen( NLBL_UNLABEL_C_STATICLIST, @@ -1231,7 +1229,7 @@ #if IS_ENABLED(CONFIG_IPV6) netlbl_af6list_foreach_rcu(addr6, &iface->addr6_list) { - if (iter_addr6++ < skip_addr6) + if (iter_addr6++ < cb->args[3]) continue; if (netlbl_unlabel_staticlist_gen( NLBL_UNLABEL_C_STATICLIST, @@ -1250,10 +1248,10 @@ unlabel_staticlist_return: rcu_read_unlock(); - cb->args[0] = skip_bkt; - cb->args[1] = skip_chain; - cb->args[2] = skip_addr4; - cb->args[3] = skip_addr6; + cb->args[0] = iter_bkt; + cb->args[1] = iter_chain; + cb->args[2] = iter_addr4; + cb->args[3] = iter_addr6; return skb->len; } @@ -1273,12 +1271,9 @@ { struct netlbl_unlhsh_walk_arg cb_arg; struct netlbl_unlhsh_iface *iface; - u32 skip_addr4 = cb->args[0]; - u32 skip_addr6 = cb->args[1]; - u32 iter_addr4 = 0; + u32 iter_addr4 = 0, iter_addr6 = 0; struct netlbl_af4list *addr4; #if IS_ENABLED(CONFIG_IPV6) - u32 iter_addr6 = 0; struct netlbl_af6list *addr6; #endif @@ -1292,7 +1287,7 @@ goto unlabel_staticlistdef_return; netlbl_af4list_foreach_rcu(addr4, &iface->addr4_list) { - if (iter_addr4++ < skip_addr4) + if (iter_addr4++ < cb->args[0]) continue; if (netlbl_unlabel_staticlist_gen(NLBL_UNLABEL_C_STATICLISTDEF, iface, @@ -1305,7 +1300,7 @@ } #if IS_ENABLED(CONFIG_IPV6) netlbl_af6list_foreach_rcu(addr6, &iface->addr6_list) { - if (iter_addr6++ < skip_addr6) + if (iter_addr6++ < cb->args[1]) continue; if (netlbl_unlabel_staticlist_gen(NLBL_UNLABEL_C_STATICLISTDEF, iface, @@ -1320,8 +1315,8 @@ unlabel_staticlistdef_return: rcu_read_unlock(); - cb->args[0] = skip_addr4; - cb->args[1] = skip_addr6; + cb->args[0] = iter_addr4; + cb->args[1] = iter_addr6; return skb->len; } --- linux-lts-raring-3.8.0.orig/net/iucv/af_iucv.c +++ linux-lts-raring-3.8.0/net/iucv/af_iucv.c @@ -1331,6 +1331,8 @@ struct sk_buff *skb, *rskb, *cskb; int err = 0; + msg->msg_namelen = 0; + if ((sk->sk_state == IUCV_DISCONN) && skb_queue_empty(&iucv->backlog_skb_q) && skb_queue_empty(&sk->sk_receive_queue) && --- linux-lts-raring-3.8.0.orig/net/rds/ib_send.c +++ linux-lts-raring-3.8.0/net/rds/ib_send.c @@ -544,7 +544,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-lts-raring-3.8.0.orig/net/rds/message.c +++ linux-lts-raring-3.8.0/net/rds/message.c @@ -197,6 +197,9 @@ { struct rds_message *rm; + if (extra_len > KMALLOC_MAX_SIZE - sizeof(struct rds_message)) + return NULL; + rm = kzalloc(sizeof(struct rds_message) + extra_len, gfp); if (!rm) goto out; --- linux-lts-raring-3.8.0.orig/net/ipv6/exthdrs.c +++ linux-lts-raring-3.8.0/net/ipv6/exthdrs.c @@ -553,7 +553,8 @@ const unsigned char *nh = skb_network_header(skb); if (nh[optoff + 1] == 2) { - IP6CB(skb)->ra = optoff; + IP6CB(skb)->flags |= IP6SKB_ROUTERALERT; + memcpy(&IP6CB(skb)->ra, nh + optoff + 2, sizeof(IP6CB(skb)->ra)); return true; } LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_ra: wrong RA length %d\n", --- linux-lts-raring-3.8.0.orig/net/ipv6/udp_impl.h +++ linux-lts-raring-3.8.0/net/ipv6/udp_impl.h @@ -31,6 +31,8 @@ extern int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb); extern void udpv6_destroy_sock(struct sock *sk); +extern void udp_v6_clear_sk(struct sock *sk, int size); + #ifdef CONFIG_PROC_FS extern int udp6_seq_show(struct seq_file *seq, void *v); #endif --- linux-lts-raring-3.8.0.orig/net/ipv6/ip6_gre.c +++ linux-lts-raring-3.8.0/net/ipv6/ip6_gre.c @@ -1137,6 +1137,7 @@ } if (t == NULL) t = netdev_priv(dev); + memset(&p, 0, sizeof(p)); ip6gre_tnl_parm_to_user(&p, &t->parms); if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p))) err = -EFAULT; @@ -1184,6 +1185,7 @@ if (t) { err = 0; + memset(&p, 0, sizeof(p)); ip6gre_tnl_parm_to_user(&p, &t->parms); if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p))) err = -EFAULT; --- linux-lts-raring-3.8.0.orig/net/ipv6/reassembly.c +++ linux-lts-raring-3.8.0/net/ipv6/reassembly.c @@ -26,6 +26,9 @@ * YOSHIFUJI,H. @USAGI Always remove fragment header to * calculate ICV correctly. */ + +#define pr_fmt(fmt) "IPv6: " fmt + #include #include #include @@ -197,9 +200,10 @@ hash = inet6_hash_frag(id, src, dst, ip6_frags.rnd); q = inet_frag_find(&net->ipv6.frags, &ip6_frags, &arg, hash); - if (q == NULL) + if (IS_ERR_OR_NULL(q)) { + inet_frag_maybe_warn_overflow(q, pr_fmt()); return NULL; - + } return container_of(q, struct frag_queue, q); } @@ -338,8 +342,17 @@ } if (fq->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && - fq->q.meat == fq->q.len) - return ip6_frag_reasm(fq, prev, dev); + fq->q.meat == fq->q.len) { + int res; + unsigned long orefdst = skb->_skb_refdst; + + skb->_skb_refdst = 0UL; + res = ip6_frag_reasm(fq, prev, dev); + skb->_skb_refdst = orefdst; + return res; + } + + skb_dst_drop(skb); write_lock(&ip6_frags.lock); list_move_tail(&fq->q.lru_list, &fq->q.net->lru_list); @@ -474,6 +487,7 @@ head->tstamp = fq->q.stamp; ipv6_hdr(head)->payload_len = htons(payload_len); IP6CB(head)->nhoff = nhoff; + IP6CB(head)->flags |= IP6SKB_FRAGMENTED; /* Yes, and fold redundant checksum back. 8) */ if (head->ip_summed == CHECKSUM_COMPLETE) @@ -508,6 +522,9 @@ struct net *net = dev_net(skb_dst(skb)->dev); int evicted; + if (IP6CB(skb)->flags & IP6SKB_FRAGMENTED) + goto fail_hdr; + IP6_INC_STATS_BH(net, ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_REASMREQDS); /* Jumbo payload inhibits frag. header */ @@ -528,6 +545,7 @@ ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_REASMOKS); IP6CB(skb)->nhoff = (u8 *)fhdr - skb_network_header(skb); + IP6CB(skb)->flags |= IP6SKB_FRAGMENTED; return 1; } --- linux-lts-raring-3.8.0.orig/net/ipv6/ip6_output.c +++ linux-lts-raring-3.8.0/net/ipv6/ip6_output.c @@ -843,11 +843,17 @@ const struct flowi6 *fl6) { struct ipv6_pinfo *np = inet6_sk(sk); - struct rt6_info *rt = (struct rt6_info *)dst; + struct rt6_info *rt; if (!dst) goto out; + if (dst->ops->family != AF_INET6) { + dst_release(dst); + return NULL; + } + + rt = (struct rt6_info *)dst; /* Yes, checking route validity in not connected * case is not very simple. Take into account, * that we do not support routing by source, TOS, @@ -1110,11 +1116,12 @@ return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL; } -static void ip6_append_data_mtu(int *mtu, +static void ip6_append_data_mtu(unsigned int *mtu, int *maxfraglen, unsigned int fragheaderlen, struct sk_buff *skb, - struct rt6_info *rt) + struct rt6_info *rt, + bool pmtuprobe) { if (!(rt->dst.flags & DST_XFRM_TUNNEL)) { if (skb == NULL) { @@ -1126,7 +1133,9 @@ * this fragment is not first, the headers * space is regarded as data space. */ - *mtu = dst_mtu(rt->dst.path); + *mtu = min(*mtu, pmtuprobe ? + rt->dst.dev->mtu : + dst_mtu(rt->dst.path)); } *maxfraglen = ((*mtu - fragheaderlen) & ~7) + fragheaderlen - sizeof(struct frag_hdr); @@ -1143,11 +1152,10 @@ struct ipv6_pinfo *np = inet6_sk(sk); struct inet_cork *cork; struct sk_buff *skb, *skb_prev = NULL; - unsigned int maxfraglen, fragheaderlen; + unsigned int maxfraglen, fragheaderlen, mtu; int exthdrlen; int dst_exthdrlen; int hh_len; - int mtu; int copy; int err; int offset = 0; @@ -1164,7 +1172,7 @@ if (WARN_ON(np->cork.opt)) return -EINVAL; - np->cork.opt = kmalloc(opt->tot_len, sk->sk_allocation); + np->cork.opt = kzalloc(opt->tot_len, sk->sk_allocation); if (unlikely(np->cork.opt == NULL)) return -ENOBUFS; @@ -1307,7 +1315,9 @@ /* update mtu and maxfraglen if necessary */ if (skb == NULL || skb_prev == NULL) ip6_append_data_mtu(&mtu, &maxfraglen, - fragheaderlen, skb, rt); + fragheaderlen, skb, rt, + np->pmtudisc == + IPV6_PMTUDISC_PROBE); skb_prev = skb; --- linux-lts-raring-3.8.0.orig/net/ipv6/ip6mr.c +++ linux-lts-raring-3.8.0/net/ipv6/ip6mr.c @@ -259,10 +259,12 @@ { struct mr6_table *mrt, *next; + rtnl_lock(); list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) { list_del(&mrt->list); ip6mr_free_table(mrt); } + rtnl_unlock(); fib_rules_unregister(net->ipv6.mr6_rules_ops); } #else @@ -289,7 +291,10 @@ static void __net_exit ip6mr_rules_exit(struct net *net) { + rtnl_lock(); ip6mr_free_table(net->ipv6.mrt6); + net->ipv6.mrt6 = NULL; + rtnl_unlock(); } #endif --- linux-lts-raring-3.8.0.orig/net/ipv6/icmp.c +++ linux-lts-raring-3.8.0/net/ipv6/icmp.c @@ -924,6 +924,14 @@ .err = ECONNREFUSED, .fatal = 1, }, + { /* POLICY_FAIL */ + .err = EACCES, + .fatal = 1, + }, + { /* REJECT_ROUTE */ + .err = EACCES, + .fatal = 1, + }, }; int icmpv6_err_convert(u8 type, u8 code, int *err) @@ -935,7 +943,7 @@ switch (type) { case ICMPV6_DEST_UNREACH: fatal = 1; - if (code <= ICMPV6_PORT_UNREACH) { + if (code < ARRAY_SIZE(tab_unreach)) { *err = tab_unreach[code].err; fatal = tab_unreach[code].fatal; } --- linux-lts-raring-3.8.0.orig/net/ipv6/ip6_fib.c +++ linux-lts-raring-3.8.0/net/ipv6/ip6_fib.c @@ -634,6 +634,12 @@ return ln; } +static inline bool rt6_qualify_for_ecmp(struct rt6_info *rt) +{ + return (rt->rt6i_flags & (RTF_GATEWAY|RTF_ADDRCONF|RTF_DYNAMIC)) == + RTF_GATEWAY; +} + /* * Insert routing information in a node. */ @@ -648,6 +654,7 @@ int add = (!info->nlh || (info->nlh->nlmsg_flags & NLM_F_CREATE)); int found = 0; + bool rt_can_ecmp = rt6_qualify_for_ecmp(rt); ins = &fn->leaf; @@ -693,9 +700,8 @@ * To avoid long list, we only had siblings if the * route have a gateway. */ - if (rt->rt6i_flags & RTF_GATEWAY && - !(rt->rt6i_flags & RTF_EXPIRES) && - !(iter->rt6i_flags & RTF_EXPIRES)) + if (rt_can_ecmp && + rt6_qualify_for_ecmp(iter)) rt->rt6i_nsiblings++; } @@ -717,7 +723,8 @@ /* Find the first route that have the same metric */ sibling = fn->leaf; while (sibling) { - if (sibling->rt6i_metric == rt->rt6i_metric) { + if (sibling->rt6i_metric == rt->rt6i_metric && + rt6_qualify_for_ecmp(sibling)) { list_add_tail(&rt->rt6i_siblings, &sibling->rt6i_siblings); break; @@ -988,14 +995,22 @@ if (ipv6_prefix_equal(&key->addr, args->addr, key->plen)) { #ifdef CONFIG_IPV6_SUBTREES - if (fn->subtree) - fn = fib6_lookup_1(fn->subtree, args + 1); + if (fn->subtree) { + struct fib6_node *sfn; + sfn = fib6_lookup_1(fn->subtree, + args + 1); + if (!sfn) + goto backtrack; + fn = sfn; + } #endif - if (!fn || fn->fn_flags & RTN_RTINFO) + if (fn->fn_flags & RTN_RTINFO) return fn; } } - +#ifdef CONFIG_IPV6_SUBTREES +backtrack: +#endif if (fn->fn_flags & RTN_ROOT) break; --- linux-lts-raring-3.8.0.orig/net/ipv6/mcast.c +++ linux-lts-raring-3.8.0/net/ipv6/mcast.c @@ -1340,8 +1340,9 @@ return scount; } -static struct sk_buff *mld_newpack(struct net_device *dev, int size) +static struct sk_buff *mld_newpack(struct inet6_dev *idev, int size) { + struct net_device *dev = idev->dev; struct net *net = dev_net(dev); struct sock *sk = net->ipv6.igmp_sk; struct sk_buff *skb; @@ -1366,7 +1367,7 @@ skb_reserve(skb, hlen); - if (ipv6_get_lladdr(dev, &addr_buf, IFA_F_TENTATIVE)) { + if (__ipv6_get_lladdr(idev, &addr_buf, IFA_F_TENTATIVE)) { /* : * use unspecified address as the source address * when a valid link-local address is not available. @@ -1462,7 +1463,7 @@ struct mld2_grec *pgr; if (!skb) - skb = mld_newpack(dev, dev->mtu); + skb = mld_newpack(pmc->idev, dev->mtu); if (!skb) return NULL; pgr = (struct mld2_grec *)skb_put(skb, sizeof(struct mld2_grec)); @@ -1482,7 +1483,8 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc, int type, int gdeleted, int sdeleted) { - struct net_device *dev = pmc->idev->dev; + struct inet6_dev *idev = pmc->idev; + struct net_device *dev = idev->dev; struct mld2_report *pmr; struct mld2_grec *pgr = NULL; struct ip6_sf_list *psf, *psf_next, *psf_prev, **psf_list; @@ -1511,7 +1513,7 @@ AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) { if (skb) mld_sendpack(skb); - skb = mld_newpack(dev, dev->mtu); + skb = mld_newpack(idev, dev->mtu); } } first = 1; @@ -1538,7 +1540,7 @@ pgr->grec_nsrcs = htons(scount); if (skb) mld_sendpack(skb); - skb = mld_newpack(dev, dev->mtu); + skb = mld_newpack(idev, dev->mtu); first = 1; scount = 0; } @@ -1593,8 +1595,8 @@ struct sk_buff *skb = NULL; int type; + read_lock_bh(&idev->lock); if (!pmc) { - read_lock_bh(&idev->lock); for (pmc=idev->mc_list; pmc; pmc=pmc->next) { if (pmc->mca_flags & MAF_NOREPORT) continue; @@ -1606,7 +1608,6 @@ skb = add_grec(skb, pmc, type, 0, 0); spin_unlock_bh(&pmc->mca_lock); } - read_unlock_bh(&idev->lock); } else { spin_lock_bh(&pmc->mca_lock); if (pmc->mca_sfcount[MCAST_EXCLUDE]) @@ -1616,6 +1617,7 @@ skb = add_grec(skb, pmc, type, 0, 0); spin_unlock_bh(&pmc->mca_lock); } + read_unlock_bh(&idev->lock); if (skb) mld_sendpack(skb); } --- linux-lts-raring-3.8.0.orig/net/ipv6/addrconf.c +++ linux-lts-raring-3.8.0/net/ipv6/addrconf.c @@ -1046,12 +1046,10 @@ if (ifp->flags & IFA_F_OPTIMISTIC) addr_flags |= IFA_F_OPTIMISTIC; - ift = !max_addresses || - ipv6_count_addresses(idev) < max_addresses ? - ipv6_add_addr(idev, &addr, tmp_plen, - ipv6_addr_type(&addr)&IPV6_ADDR_SCOPE_MASK, - addr_flags) : NULL; - if (!ift || IS_ERR(ift)) { + ift = ipv6_add_addr(idev, &addr, tmp_plen, + ipv6_addr_type(&addr)&IPV6_ADDR_SCOPE_MASK, + addr_flags); + if (IS_ERR(ift)) { in6_ifa_put(ifp); in6_dev_put(idev); pr_info("%s: retry temporary address regeneration\n", __func__); @@ -1370,6 +1368,23 @@ } EXPORT_SYMBOL(ipv6_dev_get_saddr); +int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, + unsigned char banned_flags) +{ + struct inet6_ifaddr *ifp; + int err = -EADDRNOTAVAIL; + + list_for_each_entry(ifp, &idev->addr_list, if_list) { + if (ifp->scope == IFA_LINK && + !(ifp->flags & banned_flags)) { + *addr = ifp->addr; + err = 0; + break; + } + } + return err; +} + int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, unsigned char banned_flags) { @@ -1379,17 +1394,8 @@ rcu_read_lock(); idev = __in6_dev_get(dev); if (idev) { - struct inet6_ifaddr *ifp; - read_lock_bh(&idev->lock); - list_for_each_entry(ifp, &idev->addr_list, if_list) { - if (ifp->scope == IFA_LINK && - !(ifp->flags & banned_flags)) { - *addr = ifp->addr; - err = 0; - break; - } - } + err = __ipv6_get_lladdr(idev, addr, banned_flags); read_unlock_bh(&idev->lock); } rcu_read_unlock(); @@ -1409,7 +1415,7 @@ } int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, - struct net_device *dev, int strict) + const struct net_device *dev, int strict) { struct inet6_ifaddr *ifp; struct hlist_node *node; @@ -2525,6 +2531,9 @@ static void init_loopback(struct net_device *dev) { struct inet6_dev *idev; + struct net_device *sp_dev; + struct inet6_ifaddr *sp_ifa; + struct rt6_info *sp_rt; /* ::1 */ @@ -2536,6 +2545,35 @@ } add_addr(idev, &in6addr_loopback, 128, IFA_HOST); + + /* Add routes to other interface's IPv6 addresses */ + for_each_netdev(dev_net(dev), sp_dev) { + if (!strcmp(sp_dev->name, dev->name)) + continue; + + idev = __in6_dev_get(sp_dev); + if (!idev) + continue; + + read_lock_bh(&idev->lock); + list_for_each_entry(sp_ifa, &idev->addr_list, if_list) { + + if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) + continue; + + if (sp_ifa->rt) + continue; + + sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); + + /* Failure cases are ignored */ + if (!IS_ERR(sp_rt)) { + sp_ifa->rt = sp_rt; + ip6_ins_rt(sp_rt); + } + } + read_unlock_bh(&idev->lock); + } } static void addrconf_add_linklocal(struct inet6_dev *idev, const struct in6_addr *addr) @@ -4489,6 +4527,84 @@ return ret; } +#ifdef CONFIG_IPV6_PRIVACY +static void dev_tempaddr_change(struct inet6_dev *idev) +{ + if (!idev || !idev->dev) + return; + + if (!idev->cnf.disable_ipv6) { + /* If ipv6 is enabled, try to bring down and back up the + * interface to get new temporary addresses created + */ + addrconf_notify(NULL, NETDEV_DOWN, idev->dev); + addrconf_notify(NULL, NETDEV_UP, idev->dev); + } +} + +static void addrconf_tempaddr_change(struct net *net, __s32 newf) +{ + struct net_device *dev; + struct inet6_dev *idev; + + rcu_read_lock(); + for_each_netdev_rcu(net, dev) { + idev = __in6_dev_get(dev); + if (idev) { + int changed = (!idev->cnf.use_tempaddr) ^ (!newf); + idev->cnf.use_tempaddr = newf; + if (changed) + dev_tempaddr_change(idev); + } + } + rcu_read_unlock(); +} + +static int addrconf_use_tempaddr(struct ctl_table *table, int *p, int old) +{ + struct net *net; + + net = (struct net *)table->extra2; + + if (p == &net->ipv6.devconf_dflt->use_tempaddr) + return 0; + + if (!rtnl_trylock()) { + /* Restore the original values before restarting */ + *p = old; + return restart_syscall(); + } + + if (p == &net->ipv6.devconf_all->use_tempaddr) { + __s32 newf = net->ipv6.devconf_all->use_tempaddr; + net->ipv6.devconf_dflt->use_tempaddr = newf; + addrconf_tempaddr_change(net, newf); + } else if ((!*p) ^ (!old)) + dev_tempaddr_change((struct inet6_dev *)table->extra1); + + rtnl_unlock(); + return 0; +} + +static +int addrconf_sysctl_tempaddr(ctl_table *ctl, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int *valp = ctl->data; + int val = *valp; + loff_t pos = *ppos; + int ret; + + ret = proc_dointvec(ctl, write, buffer, lenp, ppos); + + if (write) + ret = addrconf_use_tempaddr(ctl, valp, val); + if (ret) + *ppos = pos; + return ret; +} +#endif + static struct addrconf_sysctl_table { struct ctl_table_header *sysctl_header; @@ -4579,7 +4695,7 @@ .data = &ipv6_devconf.use_tempaddr, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec, + .proc_handler = addrconf_sysctl_tempaddr, }, { .procname = "temp_valid_lft", @@ -4787,26 +4903,20 @@ static int __net_init addrconf_init_net(struct net *net) { - int err; + int err = -ENOMEM; struct ipv6_devconf *all, *dflt; - err = -ENOMEM; - all = &ipv6_devconf; - dflt = &ipv6_devconf_dflt; - - if (!net_eq(net, &init_net)) { - all = kmemdup(all, sizeof(ipv6_devconf), GFP_KERNEL); - if (all == NULL) - goto err_alloc_all; - - dflt = kmemdup(dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL); - if (dflt == NULL) - goto err_alloc_dflt; - } else { - /* these will be inherited by all namespaces */ - dflt->autoconf = ipv6_defaults.autoconf; - dflt->disable_ipv6 = ipv6_defaults.disable_ipv6; - } + all = kmemdup(&ipv6_devconf, sizeof(ipv6_devconf), GFP_KERNEL); + if (all == NULL) + goto err_alloc_all; + + dflt = kmemdup(&ipv6_devconf_dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL); + if (dflt == NULL) + goto err_alloc_dflt; + + /* these will be inherited by all namespaces */ + dflt->autoconf = ipv6_defaults.autoconf; + dflt->disable_ipv6 = ipv6_defaults.disable_ipv6; net->ipv6.devconf_all = all; net->ipv6.devconf_dflt = dflt; --- linux-lts-raring-3.8.0.orig/net/ipv6/udp.c +++ linux-lts-raring-3.8.0/net/ipv6/udp.c @@ -955,11 +955,16 @@ struct udphdr *uh; struct udp_sock *up = udp_sk(sk); struct inet_sock *inet = inet_sk(sk); - struct flowi6 *fl6 = &inet->cork.fl.u.ip6; + struct flowi6 *fl6; int err = 0; int is_udplite = IS_UDPLITE(sk); __wsum csum = 0; + if (up->pending == AF_INET) + return udp_push_pending_frames(sk); + + fl6 = &inet->cork.fl.u.ip6; + /* Grab the skbuff where UDP header space exists. */ if ((skb = skb_peek(&sk->sk_write_queue)) == NULL) goto out; @@ -1424,6 +1429,17 @@ } #endif /* CONFIG_PROC_FS */ +void udp_v6_clear_sk(struct sock *sk, int size) +{ + struct inet_sock *inet = inet_sk(sk); + + /* we do not want to clear pinet6 field, because of RCU lookups */ + sk_prot_clear_portaddr_nulls(sk, offsetof(struct inet_sock, pinet6)); + + size -= offsetof(struct inet_sock, pinet6) + sizeof(inet->pinet6); + memset(&inet->pinet6 + 1, 0, size); +} + /* ------------------------------------------------------------------------ */ struct proto udpv6_prot = { @@ -1454,7 +1470,7 @@ .compat_setsockopt = compat_udpv6_setsockopt, .compat_getsockopt = compat_udpv6_getsockopt, #endif - .clear_sk = sk_prot_clear_portaddr_nulls, + .clear_sk = udp_v6_clear_sk, }; static struct inet_protosw udpv6_protosw = { --- linux-lts-raring-3.8.0.orig/net/ipv6/route.c +++ linux-lts-raring-3.8.0/net/ipv6/route.c @@ -300,6 +300,7 @@ { struct rt6_info *rt = (struct rt6_info *)dst; struct inet6_dev *idev = rt->rt6i_idev; + struct dst_entry *from = dst->from; if (rt->n) neigh_release(rt->n); @@ -312,8 +313,8 @@ in6_dev_put(idev); } - if (!(rt->rt6i_flags & RTF_EXPIRES) && dst->from) - dst_release(dst->from); + dst->from = NULL; + dst_release(from); if (rt6_has_peer(rt)) { struct inet_peer *peer = rt6_peer_ptr(rt); @@ -1054,7 +1055,6 @@ rt->rt6i_gateway = ort->rt6i_gateway; rt->rt6i_flags = ort->rt6i_flags; - rt6_clean_expires(rt); rt->rt6i_metric = 0; memcpy(&rt->rt6i_dst, &ort->rt6i_dst, sizeof(struct rt6key)); @@ -1118,10 +1118,13 @@ rt = (struct rt6_info *) skb_dst(skb); if (rt) { - if (rt->rt6i_flags & RTF_CACHE) - rt6_update_expires(rt, 0); - else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT)) + if (rt->rt6i_flags & RTF_CACHE) { + dst_hold(&rt->dst); + if (ip6_del_rt(rt)) + dst_free(&rt->dst); + } else if (rt->rt6i_node && (rt->rt6i_flags & RTF_DEFAULT)) { rt->rt6i_node->fn_sernum = -1; + } } } @@ -1859,8 +1862,6 @@ if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) == (RTF_DEFAULT | RTF_ADDRCONF)) rt6_set_from(rt, ort); - else - rt6_clean_expires(rt); rt->rt6i_metric = 0; #ifdef CONFIG_IPV6_SUBTREES @@ -1992,7 +1993,8 @@ restart: read_lock_bh(&table->tb6_lock); for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) { - if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) && + (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) { dst_hold(&rt->dst); read_unlock_bh(&table->tb6_lock); ip6_del_rt(rt); --- linux-lts-raring-3.8.0.orig/net/ipv6/udplite.c +++ linux-lts-raring-3.8.0/net/ipv6/udplite.c @@ -56,7 +56,7 @@ .compat_setsockopt = compat_udpv6_setsockopt, .compat_getsockopt = compat_udpv6_getsockopt, #endif - .clear_sk = sk_prot_clear_portaddr_nulls, + .clear_sk = udp_v6_clear_sk, }; static struct inet_protosw udplite6_protosw = { --- linux-lts-raring-3.8.0.orig/net/ipv6/netfilter.c +++ linux-lts-raring-3.8.0/net/ipv6/netfilter.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -180,6 +181,10 @@ return csum; }; +static const struct nf_ipv6_ops ipv6ops = { + .chk_addr = ipv6_chk_addr, +}; + static const struct nf_afinfo nf_ip6_afinfo = { .family = AF_INET6, .checksum = nf_ip6_checksum, @@ -192,6 +197,7 @@ int __init ipv6_netfilter_init(void) { + RCU_INIT_POINTER(nf_ipv6_ops, &ipv6ops); return nf_register_afinfo(&nf_ip6_afinfo); } @@ -200,5 +206,6 @@ */ void ipv6_netfilter_fini(void) { + RCU_INIT_POINTER(nf_ipv6_ops, NULL); nf_unregister_afinfo(&nf_ip6_afinfo); } --- linux-lts-raring-3.8.0.orig/net/ipv6/ip6_input.c +++ linux-lts-raring-3.8.0/net/ipv6/ip6_input.c @@ -118,6 +118,27 @@ ipv6_addr_loopback(&hdr->daddr)) goto err; + /* RFC4291 Errata ID: 3480 + * Interface-Local scope spans only a single interface on a + * node and is useful only for loopback transmission of + * multicast. Packets with interface-local scope received + * from another node must be discarded. + */ + if (!(skb->pkt_type == PACKET_LOOPBACK || + dev->flags & IFF_LOOPBACK) && + ipv6_addr_is_multicast(&hdr->daddr) && + IPV6_ADDR_MC_SCOPE(&hdr->daddr) == 1) + goto err; + + /* RFC4291 2.7 + * Nodes must not originate a packet to a multicast address whose scope + * field contains the reserved value 0; if such a packet is received, it + * must be silently dropped. + */ + if (ipv6_addr_is_multicast(&hdr->daddr) && + IPV6_ADDR_MC_SCOPE(&hdr->daddr) == 0) + goto err; + /* * RFC4291 2.7 * Multicast addresses must not be used as source addresses in IPv6 @@ -270,7 +291,8 @@ * IPv6 multicast router mode is now supported ;) */ if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding && - !(ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) && + !(ipv6_addr_type(&hdr->daddr) & + (IPV6_ADDR_LOOPBACK|IPV6_ADDR_LINKLOCAL)) && likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) { /* * Okay, we try to forward - split and duplicate @@ -280,9 +302,8 @@ struct inet6_skb_parm *opt = IP6CB(skb); /* Check for MLD */ - if (unlikely(opt->ra)) { + if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) { /* Check if this is a mld message */ - u8 *ptr = skb_network_header(skb) + opt->ra; struct icmp6hdr *icmp6; u8 nexthdr = hdr->nexthdr; __be16 frag_off; @@ -291,7 +312,7 @@ /* Check if the value of Router Alert * is for MLD (0x0000). */ - if ((ptr[2] | ptr[3]) == 0) { + if (opt->ra == htons(IPV6_OPT_ROUTERALERT_MLD)) { deliver = false; if (!ipv6_ext_hdr(nexthdr)) { --- linux-lts-raring-3.8.0.orig/net/ipv6/tcp_ipv6.c +++ linux-lts-raring-3.8.0/net/ipv6/tcp_ipv6.c @@ -386,9 +386,17 @@ if (dst) dst->ops->redirect(dst, sk, skb); + goto out; } if (type == ICMPV6_PKT_TOOBIG) { + /* We are not interested in TCP_LISTEN and open_requests + * (SYN-ACKs send out by Linux are always <576bytes so + * they should go through unfragmented). + */ + if (sk->sk_state == TCP_LISTEN) + goto out; + tp->mtu_info = ntohl(info); if (!sock_owned_by_user(sk)) tcp_v6_mtu_reduced(sk); @@ -1460,7 +1468,7 @@ if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit; if (np->rxopt.bits.rxtclass) - np->rcv_tclass = ipv6_tclass(ipv6_hdr(skb)); + np->rcv_tclass = ipv6_tclass(ipv6_hdr(opt_skb)); if (ipv6_opt_accepted(sk, opt_skb)) { skb_set_owner_r(opt_skb, sk); opt_skb = xchg(&np->pktoptions, opt_skb); @@ -1923,6 +1931,17 @@ } #endif +static void tcp_v6_clear_sk(struct sock *sk, int size) +{ + struct inet_sock *inet = inet_sk(sk); + + /* we do not want to clear pinet6 field, because of RCU lookups */ + sk_prot_clear_nulls(sk, offsetof(struct inet_sock, pinet6)); + + size -= offsetof(struct inet_sock, pinet6) + sizeof(inet->pinet6); + memset(&inet->pinet6 + 1, 0, size); +} + struct proto tcpv6_prot = { .name = "TCPv6", .owner = THIS_MODULE, @@ -1966,6 +1985,7 @@ #ifdef CONFIG_MEMCG_KMEM .proto_cgroup = tcp_proto_cgroup, #endif + .clear_sk = tcp_v6_clear_sk, }; static const struct inet6_protocol tcpv6_protocol = { --- linux-lts-raring-3.8.0.orig/net/ipv6/xfrm6_policy.c +++ linux-lts-raring-3.8.0/net/ipv6/xfrm6_policy.c @@ -103,8 +103,10 @@ dev_hold(dev); xdst->u.rt6.rt6i_idev = in6_dev_get(dev); - if (!xdst->u.rt6.rt6i_idev) + if (!xdst->u.rt6.rt6i_idev) { + dev_put(dev); return -ENODEV; + } rt6_transfer_peer(&xdst->u.rt6, rt); @@ -236,6 +238,8 @@ { struct xfrm_dst *xdst = (struct xfrm_dst *)dst; + if (likely(xdst->u.rt6.n)) + neigh_release(xdst->u.rt6.n); if (likely(xdst->u.rt6.rt6i_idev)) in6_dev_put(xdst->u.rt6.rt6i_idev); dst_destroy_metrics_generic(dst); --- linux-lts-raring-3.8.0.orig/net/ipv6/netfilter/ip6t_NPT.c +++ linux-lts-raring-3.8.0/net/ipv6/netfilter/ip6t_NPT.c @@ -57,7 +57,7 @@ if (pfx_len - i >= 32) mask = 0; else - mask = htonl(~((1 << (pfx_len - i)) - 1)); + mask = htonl((1 << (i - pfx_len + 32)) - 1); idx = i / 32; addr->s6_addr32[idx] &= mask; --- linux-lts-raring-3.8.0.orig/net/ipv6/netfilter/nf_conntrack_reasm.c +++ linux-lts-raring-3.8.0/net/ipv6/netfilter/nf_conntrack_reasm.c @@ -14,6 +14,8 @@ * 2 of the License, or (at your option) any later version. */ +#define pr_fmt(fmt) "IPv6-nf: " fmt + #include #include #include @@ -180,13 +182,11 @@ q = inet_frag_find(&net->nf_frag.frags, &nf_frags, &arg, hash); local_bh_enable(); - if (q == NULL) - goto oom; - + if (IS_ERR_OR_NULL(q)) { + inet_frag_maybe_warn_overflow(q, pr_fmt()); + return NULL; + } return container_of(q, struct frag_queue, q); - -oom: - return NULL; } --- linux-lts-raring-3.8.0.orig/net/ipv6/netfilter/ip6t_rpfilter.c +++ linux-lts-raring-3.8.0/net/ipv6/netfilter/ip6t_rpfilter.c @@ -71,6 +71,12 @@ return ret; } +static bool rpfilter_is_local(const struct sk_buff *skb) +{ + const struct rt6_info *rt = (const void *) skb_dst(skb); + return rt && (rt->rt6i_flags & RTF_LOCAL); +} + static bool rpfilter_mt(const struct sk_buff *skb, struct xt_action_param *par) { const struct xt_rpfilter_info *info = par->matchinfo; @@ -78,7 +84,7 @@ struct ipv6hdr *iph; bool invert = info->flags & XT_RPFILTER_INVERT; - if (par->in->flags & IFF_LOOPBACK) + if (rpfilter_is_local(skb)) return true ^ invert; iph = ipv6_hdr(skb); --- linux-lts-raring-3.8.0.orig/net/ipv4/ip_input.c +++ linux-lts-raring-3.8.0/net/ipv4/ip_input.c @@ -190,10 +190,7 @@ { struct net *net = dev_net(skb->dev); - __skb_pull(skb, ip_hdrlen(skb)); - - /* Point into the IP datagram, just past the header. */ - skb_reset_transport_header(skb); + __skb_pull(skb, skb_network_header_len(skb)); rcu_read_lock(); { @@ -442,6 +439,8 @@ goto drop; } + skb->transport_header = skb->network_header + iph->ihl*4; + /* Remove any debris in the socket control block */ memset(IPCB(skb), 0, sizeof(struct inet_skb_parm)); --- linux-lts-raring-3.8.0.orig/net/ipv4/esp4.c +++ linux-lts-raring-3.8.0/net/ipv4/esp4.c @@ -139,8 +139,6 @@ /* skb is pure payload to encrypt */ - err = -ENOMEM; - esp = x->data; aead = esp->aead; alen = crypto_aead_authsize(aead); @@ -176,8 +174,10 @@ } tmp = esp_alloc_tmp(aead, nfrags + sglists, seqhilen); - if (!tmp) + if (!tmp) { + err = -ENOMEM; goto error; + } seqhi = esp_tmp_seqhi(tmp); iv = esp_tmp_iv(aead, tmp, seqhilen); --- linux-lts-raring-3.8.0.orig/net/ipv4/af_inet.c +++ linux-lts-raring-3.8.0/net/ipv4/af_inet.c @@ -248,8 +248,12 @@ u32 inet_ehash_secret __read_mostly; EXPORT_SYMBOL(inet_ehash_secret); +u32 ipv6_hash_secret __read_mostly; +EXPORT_SYMBOL(ipv6_hash_secret); + /* - * inet_ehash_secret must be set exactly once + * inet_ehash_secret must be set exactly once, and to a non nul value + * ipv6_hash_secret must be set exactly once. */ void build_ehash_secret(void) { @@ -259,7 +263,8 @@ get_random_bytes(&rnd, sizeof(rnd)); } while (rnd == 0); - cmpxchg(&inet_ehash_secret, 0, rnd); + if (cmpxchg(&inet_ehash_secret, 0, rnd) == 0) + get_random_bytes(&ipv6_hash_secret, sizeof(ipv6_hash_secret)); } EXPORT_SYMBOL(build_ehash_secret); @@ -1590,7 +1595,7 @@ static const struct net_protocol icmp_protocol = { .handler = icmp_rcv, - .err_handler = ping_err, + .err_handler = icmp_err, .no_policy = 1, .netns_ok = 1, }; --- linux-lts-raring-3.8.0.orig/net/ipv4/fib_trie.c +++ linux-lts-raring-3.8.0/net/ipv4/fib_trie.c @@ -71,7 +71,6 @@ #include #include #include -#include #include #include #include @@ -1773,10 +1772,8 @@ if (!c) continue; - if (IS_LEAF(c)) { - prefetch(rcu_dereference_rtnl(p->child[idx])); + if (IS_LEAF(c)) return (struct leaf *) c; - } /* Rescan start scanning in new node */ p = (struct tnode *) c; --- linux-lts-raring-3.8.0.orig/net/ipv4/syncookies.c +++ linux-lts-raring-3.8.0/net/ipv4/syncookies.c @@ -348,8 +348,8 @@ * hasn't changed since we received the original syn, but I see * no easy way to do this. */ - flowi4_init_output(&fl4, 0, sk->sk_mark, RT_CONN_FLAGS(sk), - RT_SCOPE_UNIVERSE, IPPROTO_TCP, + flowi4_init_output(&fl4, sk->sk_bound_dev_if, sk->sk_mark, + RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE, IPPROTO_TCP, inet_sk_flowi_flags(sk), (opt && opt->srr) ? opt->faddr : ireq->rmt_addr, ireq->loc_addr, th->source, th->dest); --- linux-lts-raring-3.8.0.orig/net/ipv4/icmp.c +++ linux-lts-raring-3.8.0/net/ipv4/icmp.c @@ -934,6 +934,29 @@ goto drop; } +void icmp_err(struct sk_buff *skb, u32 info) +{ + struct iphdr *iph = (struct iphdr *)skb->data; + struct icmphdr *icmph = (struct icmphdr *)(skb->data+(iph->ihl<<2)); + int type = icmp_hdr(skb)->type; + int code = icmp_hdr(skb)->code; + struct net *net = dev_net(skb->dev); + + /* + * Use ping_err to handle all icmp errors except those + * triggered by ICMP_ECHOREPLY which sent from kernel. + */ + if (icmph->type != ICMP_ECHOREPLY) { + ping_err(skb, info); + return; + } + + if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) + ipv4_update_pmtu(skb, net, info, 0, 0, IPPROTO_ICMP, 0); + else if (type == ICMP_REDIRECT) + ipv4_redirect(skb, net, 0, 0, IPPROTO_ICMP, 0); +} + /* * This table is the definition of how we handle ICMP. */ --- linux-lts-raring-3.8.0.orig/net/ipv4/sysctl_net_ipv4.c +++ linux-lts-raring-3.8.0/net/ipv4/sysctl_net_ipv4.c @@ -27,6 +27,7 @@ #include static int zero; +static int one = 1; static int two = 2; static int tcp_retr1_max = 255; static int ip_local_port_range_min[] = { 1, 1 }; @@ -35,6 +36,8 @@ static int tcp_adv_win_scale_max = 31; static int ip_ttl_min = 1; static int ip_ttl_max = 255; +static int tcp_syn_retries_min = 1; +static int tcp_syn_retries_max = MAX_TCP_SYNCNT; static int ip_ping_group_range_min[] = { 0, 0 }; static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX }; @@ -330,7 +333,9 @@ .data = &sysctl_tcp_syn_retries, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &tcp_syn_retries_min, + .extra2 = &tcp_syn_retries_max }, { .procname = "tcp_synack_retries", @@ -556,14 +561,16 @@ .data = &sysctl_tcp_wmem, .maxlen = sizeof(sysctl_tcp_wmem), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &one, }, { .procname = "tcp_rmem", .data = &sysctl_tcp_rmem, .maxlen = sizeof(sysctl_tcp_rmem), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &one, }, { .procname = "tcp_app_win", @@ -786,7 +793,7 @@ .maxlen = sizeof(sysctl_udp_rmem_min), .mode = 0644, .proc_handler = proc_dointvec_minmax, - .extra1 = &zero + .extra1 = &one }, { .procname = "udp_wmem_min", @@ -794,7 +801,7 @@ .maxlen = sizeof(sysctl_udp_wmem_min), .mode = 0644, .proc_handler = proc_dointvec_minmax, - .extra1 = &zero + .extra1 = &one }, { } }; --- linux-lts-raring-3.8.0.orig/net/ipv4/udp.c +++ linux-lts-raring-3.8.0/net/ipv4/udp.c @@ -774,7 +774,7 @@ /* * Push out all pending data as one UDP datagram. Socket is locked. */ -static int udp_push_pending_frames(struct sock *sk) +int udp_push_pending_frames(struct sock *sk) { struct udp_sock *up = udp_sk(sk); struct inet_sock *inet = inet_sk(sk); @@ -793,6 +793,7 @@ up->pending = 0; return err; } +EXPORT_SYMBOL(udp_push_pending_frames); int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len) --- linux-lts-raring-3.8.0.orig/net/ipv4/tcp_cubic.c +++ linux-lts-raring-3.8.0/net/ipv4/tcp_cubic.c @@ -206,8 +206,8 @@ */ static inline void bictcp_update(struct bictcp *ca, u32 cwnd) { - u64 offs; - u32 delta, t, bic_target, max_cnt; + u32 delta, bic_target, max_cnt; + u64 offs, t; ca->ack_cnt++; /* count the number of ACKs */ @@ -250,9 +250,11 @@ * if the cwnd < 1 million packets !!! */ + t = (s32)(tcp_time_stamp - ca->epoch_start); + t += msecs_to_jiffies(ca->delay_min >> 3); /* change the unit from HZ to bictcp_HZ */ - t = ((tcp_time_stamp + msecs_to_jiffies(ca->delay_min>>3) - - ca->epoch_start) << BICTCP_HZ) / HZ; + t <<= BICTCP_HZ; + do_div(t, HZ); if (t < ca->bic_K) /* t - K */ offs = ca->bic_K - t; @@ -414,7 +416,7 @@ return; /* Discard delay samples right after fast recovery */ - if ((s32)(tcp_time_stamp - ca->epoch_start) < HZ) + if (ca->epoch_start && (s32)(tcp_time_stamp - ca->epoch_start) < HZ) return; delay = (rtt_us << 3) / USEC_PER_MSEC; --- linux-lts-raring-3.8.0.orig/net/ipv4/tcp_ipv4.c +++ linux-lts-raring-3.8.0/net/ipv4/tcp_ipv4.c @@ -274,13 +274,6 @@ struct inet_sock *inet = inet_sk(sk); u32 mtu = tcp_sk(sk)->mtu_info; - /* We are not interested in TCP_LISTEN and open_requests (SYN-ACKs - * send out by Linux are always <576bytes so they should go through - * unfragmented). - */ - if (sk->sk_state == TCP_LISTEN) - return; - dst = inet_csk_update_pmtu(sk, mtu); if (!dst) return; @@ -408,6 +401,13 @@ goto out; if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */ + /* We are not interested in TCP_LISTEN and open_requests + * (SYN-ACKs send out by Linux are always <576bytes so + * they should go through unfragmented). + */ + if (sk->sk_state == TCP_LISTEN) + goto out; + tp->mtu_info = info; if (!sock_owned_by_user(sk)) { tcp_v4_mtu_reduced(sk); @@ -1003,7 +1003,7 @@ struct tcp_sock *tp = tcp_sk(sk); struct tcp_md5sig_info *md5sig; - key = tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&addr, AF_INET); + key = tcp_md5_do_lookup(sk, addr, family); if (key) { /* Pre-existing entry - just update that one. */ memcpy(key->key, newkey, newkeylen); @@ -1048,7 +1048,7 @@ struct tcp_md5sig_key *key; struct tcp_md5sig_info *md5sig; - key = tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&addr, AF_INET); + key = tcp_md5_do_lookup(sk, addr, family); if (!key) return -ENOENT; hlist_del_rcu(&key->node); --- linux-lts-raring-3.8.0.orig/net/ipv4/inet_fragment.c +++ linux-lts-raring-3.8.0/net/ipv4/inet_fragment.c @@ -21,6 +21,7 @@ #include #include +#include #include static void inet_frag_secret_rebuild(unsigned long dummy) @@ -276,6 +277,7 @@ { struct inet_frag_queue *q; struct hlist_node *n; + int depth = 0; hlist_for_each_entry(q, n, &f->hash[hash], list) { if (q->net == nf && f->match(q, key)) { @@ -283,9 +285,25 @@ read_unlock(&f->lock); return q; } + depth++; } read_unlock(&f->lock); - return inet_frag_create(nf, f, key); + if (depth <= INETFRAGS_MAXDEPTH) + return inet_frag_create(nf, f, key); + else + return ERR_PTR(-ENOBUFS); } EXPORT_SYMBOL(inet_frag_find); + +void inet_frag_maybe_warn_overflow(struct inet_frag_queue *q, + const char *prefix) +{ + static const char msg[] = "inet_frag_find: Fragment hash bucket" + " list length grew over limit " __stringify(INETFRAGS_MAXDEPTH) + ". Dropping fragment.\n"; + + if (PTR_ERR(q) == -ENOBUFS) + LIMIT_NETDEBUG(KERN_WARNING "%s%s", prefix, msg); +} +EXPORT_SYMBOL(inet_frag_maybe_warn_overflow); --- linux-lts-raring-3.8.0.orig/net/ipv4/ipip.c +++ linux-lts-raring-3.8.0/net/ipv4/ipip.c @@ -489,6 +489,7 @@ if (tos & 1) tos = old_iph->tos; + memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); if (!dst) { /* NBMA tunnel */ if ((rt = skb_rtable(skb)) == NULL) { @@ -571,7 +572,6 @@ skb->transport_header = skb->network_header; skb_push(skb, sizeof(struct iphdr)); skb_reset_network_header(skb); - memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | IPSKB_REROUTED); skb_dst_drop(skb); --- linux-lts-raring-3.8.0.orig/net/ipv4/route.c +++ linux-lts-raring-3.8.0/net/ipv4/route.c @@ -741,10 +741,15 @@ { struct rtable *rt; struct flowi4 fl4; + const struct iphdr *iph = (const struct iphdr *) skb->data; + int oif = skb->dev->ifindex; + u8 tos = RT_TOS(iph->tos); + u8 prot = iph->protocol; + u32 mark = skb->mark; rt = (struct rtable *) dst; - ip_rt_build_flow_key(&fl4, sk, skb); + __build_flow_key(&fl4, sk, iph, oif, tos, prot, mark, 0); __ip_do_redirect(rt, skb, &fl4, true); } --- linux-lts-raring-3.8.0.orig/net/ipv4/ip_fragment.c +++ linux-lts-raring-3.8.0/net/ipv4/ip_fragment.c @@ -255,8 +255,7 @@ if (!head->dev) goto out_rcu_unlock; - /* skb dst is stale, drop it, and perform route lookup again */ - skb_dst_drop(head); + /* skb has no dst, perform route lookup again */ iph = ip_hdr(head); err = ip_route_input_noref(head, iph->daddr, iph->saddr, iph->tos, head->dev); @@ -299,14 +298,11 @@ hash = ipqhashfn(iph->id, iph->saddr, iph->daddr, iph->protocol); q = inet_frag_find(&net->ipv4.frags, &ip4_frags, &arg, hash); - if (q == NULL) - goto out_nomem; - + if (IS_ERR_OR_NULL(q)) { + inet_frag_maybe_warn_overflow(q, pr_fmt()); + return NULL; + } return container_of(q, struct ipq, q); - -out_nomem: - LIMIT_NETDEBUG(KERN_ERR pr_fmt("ip_frag_create: no memory left !\n")); - return NULL; } /* Is the fragment too far ahead to be part of ipq? */ @@ -528,8 +524,16 @@ qp->q.max_size = skb->len + ihl; if (qp->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && - qp->q.meat == qp->q.len) - return ip_frag_reasm(qp, prev, dev); + qp->q.meat == qp->q.len) { + unsigned long orefdst = skb->_skb_refdst; + + skb->_skb_refdst = 0UL; + err = ip_frag_reasm(qp, prev, dev); + skb->_skb_refdst = orefdst; + return err; + } + + skb_dst_drop(skb); write_lock(&ip4_frags.lock); list_move_tail(&qp->q.lru_list, &qp->q.net->lru_list); --- linux-lts-raring-3.8.0.orig/net/ipv4/ip_gre.c +++ linux-lts-raring-3.8.0/net/ipv4/ip_gre.c @@ -761,15 +761,13 @@ if (dev->header_ops && dev->type == ARPHRD_IPGRE) { gre_hlen = 0; - if (skb->protocol == htons(ETH_P_IP)) - tiph = (const struct iphdr *)skb->data; - else - tiph = &tunnel->parms.iph; + tiph = (const struct iphdr *)skb->data; } else { gre_hlen = tunnel->hlen; tiph = &tunnel->parms.iph; } + memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); if ((dst = tiph->daddr) == 0) { /* NBMA tunnel */ @@ -915,7 +913,6 @@ skb_push(skb, gre_hlen); skb_reset_network_header(skb); skb_set_transport_header(skb, sizeof(*iph)); - memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | IPSKB_REROUTED); skb_dst_drop(skb); --- linux-lts-raring-3.8.0.orig/net/ipv4/tcp_minisocks.c +++ linux-lts-raring-3.8.0/net/ipv4/tcp_minisocks.c @@ -581,8 +581,13 @@ * * Note that even if there is new data in the SYN packet * they will be thrown away too. + * + * Reset timer after retransmitting SYNACK, similar to + * the idea of fast retransmit in recovery. */ - inet_rtx_syn_ack(sk, req); + if (!inet_rtx_syn_ack(sk, req)) + req->expires = min(TCP_TIMEOUT_INIT << req->num_timeout, + TCP_RTO_MAX) + jiffies; return NULL; } --- linux-lts-raring-3.8.0.orig/net/ipv4/tcp_input.c +++ linux-lts-raring-3.8.0/net/ipv4/tcp_input.c @@ -116,6 +116,7 @@ #define FLAG_DSACKING_ACK 0x800 /* SACK blocks contained D-SACK info */ #define FLAG_NONHEAD_RETRANS_ACKED 0x1000 /* Non-head rexmitted data was ACKed */ #define FLAG_SACK_RENEGING 0x2000 /* snd_una advanced to a sacked seq */ +#define FLAG_UPDATE_TS_RECENT 0x4000 /* tcp_replace_ts_recent() */ #define FLAG_ACKED (FLAG_DATA_ACKED|FLAG_SYN_ACKED) #define FLAG_NOT_DUP (FLAG_DATA|FLAG_WIN_UPDATE|FLAG_ACKED) @@ -2064,11 +2065,8 @@ if (tcp_is_reno(tp)) tcp_reset_reno_sack(tp); - if (!how) { - /* Push undo marker, if it was plain RTO and nothing - * was retransmitted. */ - tp->undo_marker = tp->snd_una; - } else { + tp->undo_marker = tp->snd_una; + if (how) { tp->sacked_out = 0; tp->fackets_out = 0; } @@ -2894,8 +2892,8 @@ * tcp_xmit_retransmit_queue(). */ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, - int prior_sacked, bool is_dupack, - int flag) + int prior_sacked, int prior_packets, + bool is_dupack, int flag) { struct inet_connection_sock *icsk = inet_csk(sk); struct tcp_sock *tp = tcp_sk(sk); @@ -2961,7 +2959,8 @@ tcp_add_reno_sack(sk); } else do_lost = tcp_try_undo_partial(sk, pkts_acked); - newly_acked_sacked = pkts_acked + tp->sacked_out - prior_sacked; + newly_acked_sacked = prior_packets - tp->packets_out + + tp->sacked_out - prior_sacked; break; case TCP_CA_Loss: if (flag & FLAG_DATA_ACKED) @@ -2983,7 +2982,8 @@ if (is_dupack) tcp_add_reno_sack(sk); } - newly_acked_sacked = pkts_acked + tp->sacked_out - prior_sacked; + newly_acked_sacked = prior_packets - tp->packets_out + + tp->sacked_out - prior_sacked; if (icsk->icsk_ca_state <= TCP_CA_Disorder) tcp_try_undo_dsack(sk); @@ -3575,6 +3575,27 @@ } } +static void tcp_store_ts_recent(struct tcp_sock *tp) +{ + tp->rx_opt.ts_recent = tp->rx_opt.rcv_tsval; + tp->rx_opt.ts_recent_stamp = get_seconds(); +} + +static void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq) +{ + if (tp->rx_opt.saw_tstamp && !after(seq, tp->rcv_wup)) { + /* PAWS bug workaround wrt. ACK frames, the PAWS discard + * extra check below makes sure this can only happen + * for pure ACK frames. -DaveM + * + * Not only, also it occurs for expired timestamps. + */ + + if (tcp_paws_check(&tp->rx_opt, 0)) + tcp_store_ts_recent(tp); + } +} + /* This routine deals with incoming acks, but not outgoing ones. */ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) { @@ -3586,9 +3607,10 @@ bool is_dupack = false; u32 prior_in_flight; u32 prior_fackets; - int prior_packets; + int prior_packets = tp->packets_out; int prior_sacked = tp->sacked_out; int pkts_acked = 0; + int previous_packets_out = 0; bool frto_cwnd = false; /* If the ack is older than previous acks @@ -3627,6 +3649,12 @@ prior_fackets = tp->fackets_out; prior_in_flight = tcp_packets_in_flight(tp); + /* ts_recent update must be made after we are sure that the packet + * is in window. + */ + if (flag & FLAG_UPDATE_TS_RECENT) + tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq); + if (!(flag & FLAG_SLOWPATH) && after(ack, prior_snd_una)) { /* Window is constant, pure forward advance. * No more checks are required. @@ -3662,14 +3690,14 @@ sk->sk_err_soft = 0; icsk->icsk_probes_out = 0; tp->rcv_tstamp = tcp_time_stamp; - prior_packets = tp->packets_out; if (!prior_packets) goto no_queue; /* See if we can take anything off of the retransmit queue. */ + previous_packets_out = tp->packets_out; flag |= tcp_clean_rtx_queue(sk, prior_fackets, prior_snd_una); - pkts_acked = prior_packets - tp->packets_out; + pkts_acked = previous_packets_out - tp->packets_out; if (tp->frto_counter) frto_cwnd = tcp_process_frto(sk, flag); @@ -3684,7 +3712,7 @@ tcp_cong_avoid(sk, ack, prior_in_flight); is_dupack = !(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP)); tcp_fastretrans_alert(sk, pkts_acked, prior_sacked, - is_dupack, flag); + prior_packets, is_dupack, flag); } else { if ((flag & FLAG_DATA_ACKED) && !frto_cwnd) tcp_cong_avoid(sk, ack, prior_in_flight); @@ -3701,7 +3729,7 @@ /* If data was DSACKed, see if we can undo a cwnd reduction. */ if (flag & FLAG_DSACKING_ACK) tcp_fastretrans_alert(sk, pkts_acked, prior_sacked, - is_dupack, flag); + prior_packets, is_dupack, flag); /* If this ack opens up a zero window, clear backoff. It was * being used to time the probes, and is probably far higher than * it needs to be for normal retransmission. @@ -3721,7 +3749,7 @@ if (TCP_SKB_CB(skb)->sacked) { flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una); tcp_fastretrans_alert(sk, pkts_acked, prior_sacked, - is_dupack, flag); + prior_packets, is_dupack, flag); } SOCK_DEBUG(sk, "Ack %u before %u:%u\n", ack, tp->snd_una, tp->snd_nxt); @@ -3943,27 +3971,6 @@ EXPORT_SYMBOL(tcp_parse_md5sig_option); #endif -static inline void tcp_store_ts_recent(struct tcp_sock *tp) -{ - tp->rx_opt.ts_recent = tp->rx_opt.rcv_tsval; - tp->rx_opt.ts_recent_stamp = get_seconds(); -} - -static inline void tcp_replace_ts_recent(struct tcp_sock *tp, u32 seq) -{ - if (tp->rx_opt.saw_tstamp && !after(seq, tp->rcv_wup)) { - /* PAWS bug workaround wrt. ACK frames, the PAWS discard - * extra check below makes sure this can only happen - * for pure ACK frames. -DaveM - * - * Not only, also it occurs for expired timestamps. - */ - - if (tcp_paws_check(&tp->rx_opt, 0)) - tcp_store_ts_recent(tp); - } -} - /* Sorry, PAWS as specified is broken wrt. pure-ACKs -DaveM * * It is not fatal. If this ACK does _not_ change critical state (seqs, window) @@ -5498,6 +5505,9 @@ if (tcp_checksum_complete_user(sk, skb)) goto csum_error; + if ((int)skb->truesize > sk->sk_forward_alloc) + goto step5; + /* Predicted packet is in window by definition. * seq == rcv_nxt and rcv_wup <= rcv_nxt. * Hence, check seq<=rcv_wup reduces to: @@ -5509,9 +5519,6 @@ tcp_rcv_rtt_measure_ts(sk, skb); - if ((int)skb->truesize > sk->sk_forward_alloc) - goto step5; - NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPHPHITS); /* Bulk data transfer: receiver */ @@ -5559,14 +5566,9 @@ return 0; step5: - if (tcp_ack(sk, skb, FLAG_SLOWPATH) < 0) + if (tcp_ack(sk, skb, FLAG_SLOWPATH | FLAG_UPDATE_TS_RECENT) < 0) goto discard; - /* ts_recent update must be made after we are sure that the packet - * is in window. - */ - tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq); - tcp_rcv_rtt_measure_ts(sk, skb); /* Process urgent data. */ @@ -6000,7 +6002,8 @@ /* step 5: check the ACK field */ if (true) { - int acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH) > 0; + int acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH | + FLAG_UPDATE_TS_RECENT) > 0; switch (sk->sk_state) { case TCP_SYN_RECV: @@ -6151,11 +6154,6 @@ } } - /* ts_recent update must be made after we are sure that the packet - * is in window. - */ - tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq); - /* step 6: check the URG bit */ tcp_urg(sk, skb, th); --- linux-lts-raring-3.8.0.orig/net/ipv4/tcp_output.c +++ linux-lts-raring-3.8.0/net/ipv4/tcp_output.c @@ -1032,11 +1032,13 @@ &md5); tcp_header_size = tcp_options_size + sizeof(struct tcphdr); - if (tcp_packets_in_flight(tp) == 0) { + if (tcp_packets_in_flight(tp) == 0) tcp_ca_event(sk, CA_EVENT_TX_START); - skb->ooo_okay = 1; - } else - skb->ooo_okay = 0; + + /* if no packet is in qdisc/device queue, then allow XPS to select + * another queue. + */ + skb->ooo_okay = sk_wmem_alloc_get(sk) == 0; skb_push(skb, tcp_header_size); skb_reset_transport_header(skb); @@ -1298,7 +1300,6 @@ eat = min_t(int, len, skb_headlen(skb)); if (eat) { __skb_pull(skb, eat); - skb->avail_size -= eat; len -= eat; if (!len) return; @@ -1351,8 +1352,8 @@ return 0; } -/* Calculate MSS. Not accounting for SACKs here. */ -int tcp_mtu_to_mss(struct sock *sk, int pmtu) +/* Calculate MSS not accounting any TCP options. */ +static inline int __tcp_mtu_to_mss(struct sock *sk, int pmtu) { const struct tcp_sock *tp = tcp_sk(sk); const struct inet_connection_sock *icsk = inet_csk(sk); @@ -1381,13 +1382,17 @@ /* Then reserve room for full set of TCP options and 8 bytes of data */ if (mss_now < 48) mss_now = 48; - - /* Now subtract TCP options size, not including SACKs */ - mss_now -= tp->tcp_header_len - sizeof(struct tcphdr); - return mss_now; } +/* Calculate MSS. Not accounting for SACKs here. */ +int tcp_mtu_to_mss(struct sock *sk, int pmtu) +{ + /* Subtract TCP options size, not including SACKs */ + return __tcp_mtu_to_mss(sk, pmtu) - + (tcp_sk(sk)->tcp_header_len - sizeof(struct tcphdr)); +} + /* Inverse of above */ int tcp_mss_to_mtu(struct sock *sk, int mss) { @@ -1806,8 +1811,11 @@ goto send_now; } - /* Ok, it looks like it is advisable to defer. */ - tp->tso_deferred = 1 | (jiffies << 1); + /* Ok, it looks like it is advisable to defer. + * Do not rearm the timer if already set to not break TCP ACK clocking. + */ + if (!tp->tso_deferred) + tp->tso_deferred = 1 | (jiffies << 1); return true; @@ -2382,8 +2390,12 @@ */ TCP_SKB_CB(skb)->when = tcp_time_stamp; - /* make sure skb->data is aligned on arches that require it */ - if (unlikely(NET_IP_ALIGN && ((unsigned long)skb->data & 3))) { + /* make sure skb->data is aligned on arches that require it + * and check if ack-trimming & collapsing extended the headroom + * beyond what csum_start can cover. + */ + if (unlikely((NET_IP_ALIGN && ((unsigned long)skb->data & 3)) || + skb_headroom(skb) >= 0xFFFF)) { struct sk_buff *nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC); return nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) : @@ -2693,8 +2705,8 @@ if (cvp != NULL && cvp->s_data_constant && cvp->s_data_desired) s_data_desired = cvp->s_data_desired; - skb = alloc_skb(MAX_TCP_HEADER + 15 + s_data_desired, - sk_gfp_atomic(sk, GFP_ATOMIC)); + skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1, + GFP_ATOMIC); if (unlikely(!skb)) { dst_release(dst); return NULL; @@ -2872,6 +2884,8 @@ if (likely(!tp->repair)) tp->rcv_nxt = 0; + else + tp->rcv_tstamp = tcp_time_stamp; tp->rcv_wup = tp->rcv_nxt; tp->copied_seq = tp->rcv_nxt; @@ -2930,7 +2944,7 @@ */ if (tp->rx_opt.user_mss && tp->rx_opt.user_mss < tp->rx_opt.mss_clamp) tp->rx_opt.mss_clamp = tp->rx_opt.user_mss; - space = tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) - + space = __tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) - MAX_TCP_OPTION_SPACE; syn_data = skb_copy_expand(syn, skb_headroom(syn), space, --- linux-lts-raring-3.8.0.orig/net/ipv4/ip_vti.c +++ linux-lts-raring-3.8.0/net/ipv4/ip_vti.c @@ -645,17 +645,10 @@ struct iphdr *iph = &tunnel->parms.iph; struct vti_net *ipn = net_generic(dev_net(dev), vti_net_id); - tunnel->dev = dev; - strcpy(tunnel->parms.name, dev->name); - iph->version = 4; iph->protocol = IPPROTO_IPIP; iph->ihl = 5; - dev->tstats = alloc_percpu(struct pcpu_tstats); - if (!dev->tstats) - return -ENOMEM; - dev_hold(dev); rcu_assign_pointer(ipn->tunnels_wc[0], tunnel); return 0; --- linux-lts-raring-3.8.0.orig/net/ipv4/tcp.c +++ linux-lts-raring-3.8.0/net/ipv4/tcp.c @@ -773,7 +773,7 @@ * Make sure that we have exactly size bytes * available to the caller, no more, no less. */ - skb->avail_size = size; + skb->reserved_tailroom = skb->end - skb->tail - size; return skb; } __kfree_skb(skb); @@ -1124,6 +1124,13 @@ goto wait_for_memory; /* + * All packets are restored as if they have + * already been sent. + */ + if (tp->repair) + TCP_SKB_CB(skb)->when = tcp_time_stamp; + + /* * Check whether we can use HW checksum. */ if (sk->sk_route_caps & NETIF_F_ALL_CSUM) @@ -3371,8 +3378,11 @@ for (i = 0; i < shi->nr_frags; ++i) { const struct skb_frag_struct *f = &shi->frags[i]; - struct page *page = skb_frag_page(f); - sg_set_page(&sg, page, skb_frag_size(f), f->page_offset); + unsigned int offset = f->page_offset; + struct page *page = skb_frag_page(f) + (offset >> PAGE_SHIFT); + + sg_set_page(&sg, page, skb_frag_size(f), + offset_in_page(offset)); if (crypto_hash_update(desc, &sg, skb_frag_size(f))) return 1; } --- linux-lts-raring-3.8.0.orig/net/ipv4/ip_options.c +++ linux-lts-raring-3.8.0/net/ipv4/ip_options.c @@ -370,7 +370,6 @@ } switch (optptr[3]&0xF) { case IPOPT_TS_TSONLY: - opt->ts = optptr - iph; if (skb) timeptr = &optptr[optptr[2]-1]; opt->ts_needtime = 1; @@ -381,7 +380,6 @@ pp_ptr = optptr + 2; goto error; } - opt->ts = optptr - iph; if (rt) { spec_dst_fill(&spec_dst, skb); memcpy(&optptr[optptr[2]-1], &spec_dst, 4); @@ -396,7 +394,6 @@ pp_ptr = optptr + 2; goto error; } - opt->ts = optptr - iph; { __be32 addr; memcpy(&addr, &optptr[optptr[2]-1], 4); @@ -429,12 +426,12 @@ pp_ptr = optptr + 3; goto error; } - opt->ts = optptr - iph; if (skb) { optptr[3] = (optptr[3]&0xF)|((overflow+1)<<4); opt->is_changed = 1; } } + opt->ts = optptr - iph; break; case IPOPT_RA: if (optlen < 4) { --- linux-lts-raring-3.8.0.orig/net/ipv4/raw.c +++ linux-lts-raring-3.8.0/net/ipv4/raw.c @@ -573,7 +573,8 @@ flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE, inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol, - inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP, + inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP | + (inet->hdrincl ? FLOWI_FLAG_KNOWN_NH : 0), daddr, saddr, 0, 0); if (!inet->hdrincl) { --- linux-lts-raring-3.8.0.orig/net/ipv4/ping.c +++ linux-lts-raring-3.8.0/net/ipv4/ping.c @@ -322,8 +322,8 @@ struct iphdr *iph = (struct iphdr *)skb->data; struct icmphdr *icmph = (struct icmphdr *)(skb->data+(iph->ihl<<2)); struct inet_sock *inet_sock; - int type = icmph->type; - int code = icmph->code; + int type = icmp_hdr(skb)->type; + int code = icmp_hdr(skb)->code; struct net *net = dev_net(skb->dev); struct sock *sk; int harderr; --- linux-lts-raring-3.8.0.orig/net/ipv4/netfilter/ipt_ULOG.c +++ linux-lts-raring-3.8.0/net/ipv4/netfilter/ipt_ULOG.c @@ -217,8 +217,10 @@ put_unaligned(tv.tv_usec, &pm->timestamp_usec); put_unaligned(skb->mark, &pm->mark); pm->hook = hooknum; - if (prefix != NULL) - strncpy(pm->prefix, prefix, sizeof(pm->prefix)); + if (prefix != NULL) { + strncpy(pm->prefix, prefix, sizeof(pm->prefix) - 1); + pm->prefix[sizeof(pm->prefix) - 1] = '\0'; + } else if (loginfo->prefix[0] != '\0') strncpy(pm->prefix, loginfo->prefix, sizeof(pm->prefix)); else --- linux-lts-raring-3.8.0.orig/net/ipv4/netfilter/ipt_rpfilter.c +++ linux-lts-raring-3.8.0/net/ipv4/netfilter/ipt_rpfilter.c @@ -66,6 +66,12 @@ return dev_match; } +static bool rpfilter_is_local(const struct sk_buff *skb) +{ + const struct rtable *rt = skb_rtable(skb); + return rt && (rt->rt_flags & RTCF_LOCAL); +} + static bool rpfilter_mt(const struct sk_buff *skb, struct xt_action_param *par) { const struct xt_rpfilter_info *info; @@ -76,7 +82,7 @@ info = par->matchinfo; invert = info->flags & XT_RPFILTER_INVERT; - if (par->in->flags & IFF_LOOPBACK) + if (rpfilter_is_local(skb)) return true ^ invert; iph = ip_hdr(skb); --- linux-lts-raring-3.8.0.orig/net/batman-adv/bat_iv_ogm.c +++ linux-lts-raring-3.8.0/net/batman-adv/bat_iv_ogm.c @@ -1298,7 +1298,8 @@ batadv_ogm_packet = (struct batadv_ogm_packet *)packet_buff; /* unpack the aggregated packets and process them one by one */ - do { + while (batadv_iv_ogm_aggr_packet(buff_pos, packet_len, + batadv_ogm_packet->tt_num_changes)) { tt_buff = packet_buff + buff_pos + BATADV_OGM_HLEN; batadv_iv_ogm_process(ethhdr, batadv_ogm_packet, tt_buff, @@ -1309,8 +1310,7 @@ packet_pos = packet_buff + buff_pos; batadv_ogm_packet = (struct batadv_ogm_packet *)packet_pos; - } while (batadv_iv_ogm_aggr_packet(buff_pos, packet_len, - batadv_ogm_packet->tt_num_changes)); + } kfree_skb(skb); return NET_RX_SUCCESS; --- linux-lts-raring-3.8.0.orig/net/sched/sch_htb.c +++ linux-lts-raring-3.8.0/net/sched/sch_htb.c @@ -92,7 +92,7 @@ unsigned int children; struct htb_class *parent; /* parent class */ - int prio; /* these two are used only by leaves... */ + u32 prio; /* these two are used only by leaves... */ int quantum; /* but stored for parent-to-leaf return */ union { --- linux-lts-raring-3.8.0.orig/net/sched/sch_atm.c +++ linux-lts-raring-3.8.0/net/sched/sch_atm.c @@ -605,6 +605,7 @@ struct sockaddr_atmpvc pvc; int state; + memset(&pvc, 0, sizeof(pvc)); pvc.sap_family = AF_ATMPVC; pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1; pvc.sap_addr.vpi = flow->vcc->vpi; --- linux-lts-raring-3.8.0.orig/net/sched/sch_cbq.c +++ linux-lts-raring-3.8.0/net/sched/sch_cbq.c @@ -962,8 +962,11 @@ cbq_update(q); if ((incr -= incr2) < 0) incr = 0; + q->now += incr; + } else { + if (now > q->now) + q->now = now; } - q->now += incr; q->now_rt = now; for (;;) { @@ -1465,6 +1468,7 @@ unsigned char *b = skb_tail_pointer(skb); struct tc_cbq_wrropt opt; + memset(&opt, 0, sizeof(opt)); opt.flags = 0; opt.allot = cl->allot; opt.priority = cl->priority + 1; --- linux-lts-raring-3.8.0.orig/net/sched/act_ipt.c +++ linux-lts-raring-3.8.0/net/sched/act_ipt.c @@ -8,7 +8,7 @@ * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * - * Copyright: Jamal Hadi Salim (2002-4) + * Copyright: Jamal Hadi Salim (2002-13) */ #include @@ -305,17 +305,44 @@ .walk = tcf_generic_walker }; -MODULE_AUTHOR("Jamal Hadi Salim(2002-4)"); +static struct tc_action_ops act_xt_ops = { + .kind = "xt", + .hinfo = &ipt_hash_info, + .type = TCA_ACT_IPT, + .capab = TCA_CAP_NONE, + .owner = THIS_MODULE, + .act = tcf_ipt, + .dump = tcf_ipt_dump, + .cleanup = tcf_ipt_cleanup, + .lookup = tcf_hash_search, + .init = tcf_ipt_init, + .walk = tcf_generic_walker +}; + +MODULE_AUTHOR("Jamal Hadi Salim(2002-13)"); MODULE_DESCRIPTION("Iptables target actions"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("act_xt"); static int __init ipt_init_module(void) { - return tcf_register_action(&act_ipt_ops); + int ret1, ret2; + ret1 = tcf_register_action(&act_xt_ops); + if (ret1 < 0) + printk("Failed to load xt action\n"); + ret2 = tcf_register_action(&act_ipt_ops); + if (ret2 < 0) + printk("Failed to load ipt action\n"); + + if (ret1 < 0 && ret2 < 0) + return ret1; + else + return 0; } static void __exit ipt_cleanup_module(void) { + tcf_unregister_action(&act_xt_ops); tcf_unregister_action(&act_ipt_ops); } --- linux-lts-raring-3.8.0.orig/net/sched/sch_fq_codel.c +++ linux-lts-raring-3.8.0/net/sched/sch_fq_codel.c @@ -195,7 +195,7 @@ flow->deficit = q->quantum; flow->dropped = 0; } - if (++sch->q.qlen < sch->limit) + if (++sch->q.qlen <= sch->limit) return NET_XMIT_SUCCESS; q->drop_overlimit++; --- linux-lts-raring-3.8.0.orig/net/wireless/core.c +++ linux-lts-raring-3.8.0/net/wireless/core.c @@ -597,17 +597,21 @@ * cfg80211_mutex lock */ res = rfkill_register(rdev->rfkill); - if (res) - goto out_rm_dev; + if (res) { + device_del(&rdev->wiphy.dev); + + mutex_lock(&cfg80211_mutex); + debugfs_remove_recursive(rdev->wiphy.debugfsdir); + list_del_rcu(&rdev->list); + wiphy_regulatory_deregister(wiphy); + mutex_unlock(&cfg80211_mutex); + return res; + } rtnl_lock(); rdev->wiphy.registered = true; rtnl_unlock(); return 0; - -out_rm_dev: - device_del(&rdev->wiphy.dev); - return res; } EXPORT_SYMBOL(wiphy_register); @@ -806,6 +810,47 @@ rdev->num_running_monitor_ifaces += num; } +void cfg80211_leave(struct cfg80211_registered_device *rdev, + struct wireless_dev *wdev) +{ + struct net_device *dev = wdev->netdev; + + switch (wdev->iftype) { + case NL80211_IFTYPE_ADHOC: + cfg80211_leave_ibss(rdev, dev, true); + break; + case NL80211_IFTYPE_P2P_CLIENT: + case NL80211_IFTYPE_STATION: + mutex_lock(&rdev->sched_scan_mtx); + __cfg80211_stop_sched_scan(rdev, false); + mutex_unlock(&rdev->sched_scan_mtx); + + wdev_lock(wdev); +#ifdef CONFIG_CFG80211_WEXT + kfree(wdev->wext.ie); + wdev->wext.ie = NULL; + wdev->wext.ie_len = 0; + wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; +#endif + __cfg80211_disconnect(rdev, dev, + WLAN_REASON_DEAUTH_LEAVING, true); + cfg80211_mlme_down(rdev, dev); + wdev_unlock(wdev); + break; + case NL80211_IFTYPE_MESH_POINT: + cfg80211_leave_mesh(rdev, dev); + break; + case NL80211_IFTYPE_AP: + case NL80211_IFTYPE_P2P_GO: + cfg80211_stop_ap(rdev, dev); + break; + default: + break; + } + + wdev->beacon_interval = 0; +} + static int cfg80211_netdev_notifier_call(struct notifier_block *nb, unsigned long state, void *ndev) @@ -874,38 +919,7 @@ dev->priv_flags |= IFF_DONT_BRIDGE; break; case NETDEV_GOING_DOWN: - switch (wdev->iftype) { - case NL80211_IFTYPE_ADHOC: - cfg80211_leave_ibss(rdev, dev, true); - break; - case NL80211_IFTYPE_P2P_CLIENT: - case NL80211_IFTYPE_STATION: - mutex_lock(&rdev->sched_scan_mtx); - __cfg80211_stop_sched_scan(rdev, false); - mutex_unlock(&rdev->sched_scan_mtx); - - wdev_lock(wdev); -#ifdef CONFIG_CFG80211_WEXT - kfree(wdev->wext.ie); - wdev->wext.ie = NULL; - wdev->wext.ie_len = 0; - wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; -#endif - __cfg80211_disconnect(rdev, dev, - WLAN_REASON_DEAUTH_LEAVING, true); - cfg80211_mlme_down(rdev, dev); - wdev_unlock(wdev); - break; - case NL80211_IFTYPE_MESH_POINT: - cfg80211_leave_mesh(rdev, dev); - break; - case NL80211_IFTYPE_AP: - cfg80211_stop_ap(rdev, dev); - break; - default: - break; - } - wdev->beacon_interval = 0; + cfg80211_leave(rdev, wdev); break; case NETDEV_DOWN: cfg80211_update_iface_num(rdev, wdev->iftype, -1); --- linux-lts-raring-3.8.0.orig/net/wireless/core.h +++ linux-lts-raring-3.8.0/net/wireless/core.h @@ -481,6 +481,9 @@ void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev, enum nl80211_iftype iftype, int num); +void cfg80211_leave(struct cfg80211_registered_device *rdev, + struct wireless_dev *wdev); + #define CFG80211_MAX_NUM_DIFFERENT_CHANNELS 10 #ifdef CONFIG_CFG80211_DEVELOPER_WARNINGS --- linux-lts-raring-3.8.0.orig/net/wireless/reg.c +++ linux-lts-raring-3.8.0/net/wireless/reg.c @@ -883,7 +883,7 @@ return; REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq); - chan->flags = IEEE80211_CHAN_DISABLED; + chan->flags |= IEEE80211_CHAN_DISABLED; return; } --- linux-lts-raring-3.8.0.orig/net/wireless/rdev-ops.h +++ linux-lts-raring-3.8.0/net/wireless/rdev-ops.h @@ -6,11 +6,12 @@ #include "core.h" #include "trace.h" -static inline int rdev_suspend(struct cfg80211_registered_device *rdev) +static inline int rdev_suspend(struct cfg80211_registered_device *rdev, + struct cfg80211_wowlan *wowlan) { int ret; - trace_rdev_suspend(&rdev->wiphy, rdev->wowlan); - ret = rdev->ops->suspend(&rdev->wiphy, rdev->wowlan); + trace_rdev_suspend(&rdev->wiphy, wowlan); + ret = rdev->ops->suspend(&rdev->wiphy, wowlan); trace_rdev_return_int(&rdev->wiphy, ret); return ret; } --- linux-lts-raring-3.8.0.orig/net/wireless/nl80211.c +++ linux-lts-raring-3.8.0/net/wireless/nl80211.c @@ -5800,12 +5800,14 @@ void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) { + struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; void *hdr = ((void **)skb->cb)[1]; struct nlattr *data = ((void **)skb->cb)[2]; nla_nest_end(skb, data); genlmsg_end(skb, hdr); - genlmsg_multicast(skb, 0, nl80211_testmode_mcgrp.id, gfp); + genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), skb, 0, + nl80211_testmode_mcgrp.id, gfp); } EXPORT_SYMBOL(cfg80211_testmode_event); #endif @@ -8754,7 +8756,8 @@ genlmsg_end(msg, hdr); - genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, gfp); + genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, + nl80211_mlme_mcgrp.id, gfp); return; nla_put_failure: --- linux-lts-raring-3.8.0.orig/net/wireless/sysfs.c +++ linux-lts-raring-3.8.0/net/wireless/sysfs.c @@ -83,6 +83,14 @@ return 0; } +static void cfg80211_leave_all(struct cfg80211_registered_device *rdev) +{ + struct wireless_dev *wdev; + + list_for_each_entry(wdev, &rdev->wdev_list, list) + cfg80211_leave(rdev, wdev); +} + static int wiphy_suspend(struct device *dev, pm_message_t state) { struct cfg80211_registered_device *rdev = dev_to_rdev(dev); @@ -90,12 +98,19 @@ rdev->suspend_at = get_seconds(); - if (rdev->ops->suspend) { - rtnl_lock(); - if (rdev->wiphy.registered) - ret = rdev_suspend(rdev); - rtnl_unlock(); + rtnl_lock(); + if (rdev->wiphy.registered) { + if (!rdev->wowlan) + cfg80211_leave_all(rdev); + if (rdev->ops->suspend) + ret = rdev_suspend(rdev, rdev->wowlan); + if (ret == 1) { + /* Driver refuse to configure wowlan */ + cfg80211_leave_all(rdev); + ret = rdev_suspend(rdev, NULL); + } } + rtnl_unlock(); return ret; } --- linux-lts-raring-3.8.0.orig/net/l2tp/l2tp_ip6.c +++ linux-lts-raring-3.8.0/net/l2tp/l2tp_ip6.c @@ -684,6 +684,7 @@ lsa->l2tp_addr = ipv6_hdr(skb)->saddr; lsa->l2tp_flowinfo = 0; lsa->l2tp_scope_id = 0; + lsa->l2tp_conn_id = 0; if (ipv6_addr_type(&lsa->l2tp_addr) & IPV6_ADDR_LINKLOCAL) lsa->l2tp_scope_id = IP6CB(skb)->iif; } --- linux-lts-raring-3.8.0.orig/net/l2tp/l2tp_ppp.c +++ linux-lts-raring-3.8.0/net/l2tp/l2tp_ppp.c @@ -345,18 +345,19 @@ skb_put(skb, 2); /* Copy user data into skb */ - error = memcpy_fromiovec(skb->data, m->msg_iov, total_len); + error = memcpy_fromiovec(skb_put(skb, total_len), m->msg_iov, + total_len); if (error < 0) { kfree_skb(skb); goto error_put_sess_tun; } - skb_put(skb, total_len); l2tp_xmit_skb(session, skb, session->hdr_len); sock_put(ps->tunnel_sock); + sock_put(sk); - return error; + return total_len; error_put_sess_tun: sock_put(ps->tunnel_sock); @@ -1830,7 +1831,8 @@ static const struct pppox_proto pppol2tp_proto = { .create = pppol2tp_create, - .ioctl = pppol2tp_ioctl + .ioctl = pppol2tp_ioctl, + .owner = THIS_MODULE, }; #ifdef CONFIG_L2TP_V3 --- linux-lts-raring-3.8.0.orig/net/sunrpc/xprt.c +++ linux-lts-raring-3.8.0/net/sunrpc/xprt.c @@ -485,13 +485,17 @@ * xprt_wait_for_buffer_space - wait for transport output buffer to clear * @task: task to be put to sleep * @action: function pointer to be executed after wait + * + * Note that we only set the timer for the case of RPC_IS_SOFT(), since + * we don't in general want to force a socket disconnection due to + * an incomplete RPC call transmission. */ void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action) { struct rpc_rqst *req = task->tk_rqstp; struct rpc_xprt *xprt = req->rq_xprt; - task->tk_timeout = req->rq_timeout; + task->tk_timeout = RPC_IS_SOFT(task) ? req->rq_timeout : 0; rpc_sleep_on(&xprt->pending, task, action); } EXPORT_SYMBOL_GPL(xprt_wait_for_buffer_space); --- linux-lts-raring-3.8.0.orig/net/sunrpc/svc.c +++ linux-lts-raring-3.8.0/net/sunrpc/svc.c @@ -515,15 +515,6 @@ void svc_shutdown_net(struct svc_serv *serv, struct net *net) { - /* - * The set of xprts (contained in the sv_tempsocks and - * sv_permsocks lists) is now constant, since it is modified - * only by accepting new sockets (done by service threads in - * svc_recv) or aging old ones (done by sv_temptimer), or - * configuration changes (excluded by whatever locking the - * caller is using--nfsd_mutex in the case of nfsd). So it's - * safe to traverse those lists and shut everything down: - */ svc_close_net(serv, net); if (serv->sv_shutdown) --- linux-lts-raring-3.8.0.orig/net/sunrpc/svc_xprt.c +++ linux-lts-raring-3.8.0/net/sunrpc/svc_xprt.c @@ -856,7 +856,6 @@ struct svc_serv *serv = (struct svc_serv *)closure; struct svc_xprt *xprt; struct list_head *le, *next; - LIST_HEAD(to_be_aged); dprintk("svc_age_temp_xprts\n"); @@ -877,25 +876,15 @@ if (atomic_read(&xprt->xpt_ref.refcount) > 1 || test_bit(XPT_BUSY, &xprt->xpt_flags)) continue; - svc_xprt_get(xprt); - list_move(le, &to_be_aged); + list_del_init(le); set_bit(XPT_CLOSE, &xprt->xpt_flags); set_bit(XPT_DETACHED, &xprt->xpt_flags); - } - spin_unlock_bh(&serv->sv_lock); - - while (!list_empty(&to_be_aged)) { - le = to_be_aged.next; - /* fiddling the xpt_list node is safe 'cos we're XPT_DETACHED */ - list_del_init(le); - xprt = list_entry(le, struct svc_xprt, xpt_list); - dprintk("queuing xprt %p for closing\n", xprt); /* a thread will dequeue and close it soon */ svc_xprt_enqueue(xprt); - svc_xprt_put(xprt); } + spin_unlock_bh(&serv->sv_lock); mod_timer(&serv->sv_temptimer, jiffies + svc_conn_age_period * HZ); } @@ -959,21 +948,24 @@ } EXPORT_SYMBOL_GPL(svc_close_xprt); -static void svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, struct net *net) +static int svc_close_list(struct svc_serv *serv, struct list_head *xprt_list, struct net *net) { struct svc_xprt *xprt; + int ret = 0; spin_lock(&serv->sv_lock); list_for_each_entry(xprt, xprt_list, xpt_list) { if (xprt->xpt_net != net) continue; + ret++; set_bit(XPT_CLOSE, &xprt->xpt_flags); - set_bit(XPT_BUSY, &xprt->xpt_flags); + svc_xprt_enqueue(xprt); } spin_unlock(&serv->sv_lock); + return ret; } -static void svc_clear_pools(struct svc_serv *serv, struct net *net) +static struct svc_xprt *svc_dequeue_net(struct svc_serv *serv, struct net *net) { struct svc_pool *pool; struct svc_xprt *xprt; @@ -988,42 +980,46 @@ if (xprt->xpt_net != net) continue; list_del_init(&xprt->xpt_ready); + spin_unlock_bh(&pool->sp_lock); + return xprt; } spin_unlock_bh(&pool->sp_lock); } + return NULL; } -static void svc_clear_list(struct svc_serv *serv, struct list_head *xprt_list, struct net *net) +static void svc_clean_up_xprts(struct svc_serv *serv, struct net *net) { struct svc_xprt *xprt; - struct svc_xprt *tmp; - LIST_HEAD(victims); - - spin_lock(&serv->sv_lock); - list_for_each_entry_safe(xprt, tmp, xprt_list, xpt_list) { - if (xprt->xpt_net != net) - continue; - list_move(&xprt->xpt_list, &victims); - } - spin_unlock(&serv->sv_lock); - list_for_each_entry_safe(xprt, tmp, &victims, xpt_list) + while ((xprt = svc_dequeue_net(serv, net))) { + set_bit(XPT_CLOSE, &xprt->xpt_flags); svc_delete_xprt(xprt); + } } +/* + * Server threads may still be running (especially in the case where the + * service is still running in other network namespaces). + * + * So we shut down sockets the same way we would on a running server, by + * setting XPT_CLOSE, enqueuing, and letting a thread pick it up to do + * the close. In the case there are no such other threads, + * threads running, svc_clean_up_xprts() does a simple version of a + * server's main event loop, and in the case where there are other + * threads, we may need to wait a little while and then check again to + * see if they're done. + */ void svc_close_net(struct svc_serv *serv, struct net *net) { - svc_close_list(serv, &serv->sv_tempsocks, net); - svc_close_list(serv, &serv->sv_permsocks, net); + int delay = 0; - svc_clear_pools(serv, net); - /* - * At this point the sp_sockets lists will stay empty, since - * svc_xprt_enqueue will not add new entries without taking the - * sp_lock and checking XPT_BUSY. - */ - svc_clear_list(serv, &serv->sv_tempsocks, net); - svc_clear_list(serv, &serv->sv_permsocks, net); + while (svc_close_list(serv, &serv->sv_permsocks, net) + + svc_close_list(serv, &serv->sv_tempsocks, net)) { + + svc_clean_up_xprts(serv, net); + msleep(delay++); + } } /* --- linux-lts-raring-3.8.0.orig/net/sunrpc/sched.c +++ linux-lts-raring-3.8.0/net/sunrpc/sched.c @@ -180,6 +180,8 @@ list_add_tail(&task->u.tk_wait.list, &queue->tasks[0]); task->tk_waitqueue = queue; queue->qlen++; + /* barrier matches the read in rpc_wake_up_task_queue_locked() */ + smp_wmb(); rpc_set_queued(task); dprintk("RPC: %5u added to queue %p \"%s\"\n", @@ -322,11 +324,17 @@ * Note: If the task is ASYNC, and is being made runnable after sitting on an * rpc_wait_queue, this must be called with the queue spinlock held to protect * the wait queue operation. + * Note the ordering of rpc_test_and_set_running() and rpc_clear_queued(), + * which is needed to ensure that __rpc_execute() doesn't loop (due to the + * lockless RPC_IS_QUEUED() test) before we've had a chance to test + * the RPC_TASK_RUNNING flag. */ static void rpc_make_runnable(struct rpc_task *task) { + bool need_wakeup = !rpc_test_and_set_running(task); + rpc_clear_queued(task); - if (rpc_test_and_set_running(task)) + if (!need_wakeup) return; if (RPC_IS_ASYNC(task)) { INIT_WORK(&task->u.tk_work, rpc_async_schedule); @@ -430,8 +438,11 @@ */ static void rpc_wake_up_task_queue_locked(struct rpc_wait_queue *queue, struct rpc_task *task) { - if (RPC_IS_QUEUED(task) && task->tk_waitqueue == queue) - __rpc_do_wake_up_task(queue, task); + if (RPC_IS_QUEUED(task)) { + smp_rmb(); + if (task->tk_waitqueue == queue) + __rpc_do_wake_up_task(queue, task); + } } /* --- linux-lts-raring-3.8.0.orig/net/sunrpc/xdr.c +++ linux-lts-raring-3.8.0/net/sunrpc/xdr.c @@ -207,10 +207,13 @@ pgfrom_base -= copy; vto = kmap_atomic(*pgto); - vfrom = kmap_atomic(*pgfrom); - memmove(vto + pgto_base, vfrom + pgfrom_base, copy); + if (*pgto != *pgfrom) { + vfrom = kmap_atomic(*pgfrom); + memcpy(vto + pgto_base, vfrom + pgfrom_base, copy); + kunmap_atomic(vfrom); + } else + memmove(vto + pgto_base, vto + pgfrom_base, copy); flush_dcache_page(*pgto); - kunmap_atomic(vfrom); kunmap_atomic(vto); } while ((len -= copy) != 0); --- linux-lts-raring-3.8.0.orig/net/sunrpc/svcsock.c +++ linux-lts-raring-3.8.0/net/sunrpc/svcsock.c @@ -917,7 +917,10 @@ len = svsk->sk_datalen; npages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT; for (i = 0; i < npages; i++) { - BUG_ON(svsk->sk_pages[i] == NULL); + if (svsk->sk_pages[i] == NULL) { + WARN_ON_ONCE(1); + continue; + } put_page(svsk->sk_pages[i]); svsk->sk_pages[i] = NULL; } @@ -1092,8 +1095,10 @@ goto err_noclose; } - if (svc_sock_reclen(svsk) < 8) + if (svsk->sk_datalen < 8) { + svsk->sk_datalen = 0; goto err_delete; /* client is nuts. */ + } rqstp->rq_arg.len = svsk->sk_datalen; rqstp->rq_arg.page_base = 0; --- linux-lts-raring-3.8.0.orig/net/sunrpc/clnt.c +++ linux-lts-raring-3.8.0/net/sunrpc/clnt.c @@ -511,7 +511,7 @@ new = rpc_new_client(args, xprt); if (IS_ERR(new)) { err = PTR_ERR(new); - goto out_put; + goto out_err; } atomic_inc(&clnt->cl_count); @@ -524,8 +524,6 @@ new->cl_chatty = clnt->cl_chatty; return new; -out_put: - xprt_put(xprt); out_err: dprintk("RPC: %s: returned error %d\n", __func__, err); return ERR_PTR(err); --- linux-lts-raring-3.8.0.orig/net/sunrpc/xprtrdma/svc_rdma_marshal.c +++ linux-lts-raring-3.8.0/net/sunrpc/xprtrdma/svc_rdma_marshal.c @@ -98,6 +98,7 @@ */ static u32 *decode_write_list(u32 *va, u32 *vaend) { + unsigned long start, end; int nchunks; struct rpcrdma_write_array *ary = @@ -113,9 +114,12 @@ return NULL; } nchunks = ntohl(ary->wc_nchunks); - if (((unsigned long)&ary->wc_array[0] + - (sizeof(struct rpcrdma_write_chunk) * nchunks)) > - (unsigned long)vaend) { + + start = (unsigned long)&ary->wc_array[0]; + end = (unsigned long)vaend; + if (nchunks < 0 || + nchunks > (SIZE_MAX - start) / sizeof(struct rpcrdma_write_chunk) || + (start + (sizeof(struct rpcrdma_write_chunk) * nchunks)) > end) { dprintk("svcrdma: ary=%p, wc_nchunks=%d, vaend=%p\n", ary, nchunks, vaend); return NULL; @@ -129,6 +133,7 @@ static u32 *decode_reply_array(u32 *va, u32 *vaend) { + unsigned long start, end; int nchunks; struct rpcrdma_write_array *ary = (struct rpcrdma_write_array *)va; @@ -143,9 +148,12 @@ return NULL; } nchunks = ntohl(ary->wc_nchunks); - if (((unsigned long)&ary->wc_array[0] + - (sizeof(struct rpcrdma_write_chunk) * nchunks)) > - (unsigned long)vaend) { + + start = (unsigned long)&ary->wc_array[0]; + end = (unsigned long)vaend; + if (nchunks < 0 || + nchunks > (SIZE_MAX - start) / sizeof(struct rpcrdma_write_chunk) || + (start + (sizeof(struct rpcrdma_write_chunk) * nchunks)) > end) { dprintk("svcrdma: ary=%p, wc_nchunks=%d, vaend=%p\n", ary, nchunks, vaend); return NULL; --- linux-lts-raring-3.8.0.orig/net/caif/caif_socket.c +++ linux-lts-raring-3.8.0/net/caif/caif_socket.c @@ -286,6 +286,8 @@ if (m->msg_flags&MSG_OOB) goto read_error; + m->msg_namelen = 0; + skb = skb_recv_datagram(sk, flags, 0 , &ret); if (!skb) goto read_error; --- linux-lts-raring-3.8.0.orig/net/netlink/genetlink.c +++ linux-lts-raring-3.8.0/net/netlink/genetlink.c @@ -142,6 +142,7 @@ int err = 0; BUG_ON(grp->name[0] == '\0'); + BUG_ON(memchr(grp->name, '\0', GENL_NAMSIZ) == NULL); genl_lock(); --- linux-lts-raring-3.8.0.orig/net/nfc/core.c +++ linux-lts-raring-3.8.0/net/nfc/core.c @@ -338,7 +338,7 @@ dev->active_target = target; dev->rf_mode = NFC_RF_INITIATOR; - if (dev->ops->check_presence) + if (dev->ops->check_presence && !dev->shutting_down) mod_timer(&dev->check_pres_timer, jiffies + msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); } @@ -429,7 +429,7 @@ rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb, cb_context); - if (!rc && dev->ops->check_presence) + if (!rc && dev->ops->check_presence && !dev->shutting_down) mod_timer(&dev->check_pres_timer, jiffies + msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) { @@ -684,11 +684,6 @@ pr_debug("dev_name=%s\n", dev_name(&dev->dev)); - if (dev->ops->check_presence) { - del_timer_sync(&dev->check_pres_timer); - cancel_work_sync(&dev->check_pres_work); - } - nfc_genl_data_exit(&dev->genl_data); kfree(dev->targets); kfree(dev); @@ -706,15 +701,16 @@ rc = dev->ops->check_presence(dev, dev->active_target); if (rc == -EOPNOTSUPP) goto exit; - if (!rc) { - mod_timer(&dev->check_pres_timer, jiffies + - msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); - } else { + if (rc) { u32 active_target_idx = dev->active_target->idx; device_unlock(&dev->dev); nfc_target_lost(dev, active_target_idx); return; } + + if (!dev->shutting_down) + mod_timer(&dev->check_pres_timer, jiffies + + msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS)); } exit: @@ -853,26 +849,27 @@ id = dev->idx; - mutex_lock(&nfc_devlist_mutex); - nfc_devlist_generation++; - - /* lock to avoid unregistering a device while an operation - is in progress */ - device_lock(&dev->dev); - device_del(&dev->dev); - device_unlock(&dev->dev); + if (dev->ops->check_presence) { + device_lock(&dev->dev); + dev->shutting_down = true; + device_unlock(&dev->dev); + del_timer_sync(&dev->check_pres_timer); + cancel_work_sync(&dev->check_pres_work); + } - mutex_unlock(&nfc_devlist_mutex); + rc = nfc_genl_device_removed(dev); + if (rc) + pr_debug("The userspace won't be notified that the device %s " + "was removed\n", dev_name(&dev->dev)); nfc_llcp_unregister_device(dev); - rc = nfc_genl_device_removed(dev); - if (rc) - pr_debug("The userspace won't be notified that the device %s was removed\n", - dev_name(&dev->dev)); + mutex_lock(&nfc_devlist_mutex); + nfc_devlist_generation++; + device_del(&dev->dev); + mutex_unlock(&nfc_devlist_mutex); ida_simple_remove(&nfc_index_ida, id); - } EXPORT_SYMBOL(nfc_unregister_device); --- linux-lts-raring-3.8.0.orig/net/nfc/llcp/sock.c +++ linux-lts-raring-3.8.0/net/nfc/llcp/sock.c @@ -644,6 +644,8 @@ pr_debug("%p %zu\n", sk, len); + msg->msg_namelen = 0; + lock_sock(sk); if (sk->sk_state == LLCP_CLOSED && @@ -684,6 +686,7 @@ pr_debug("Datagram socket %d %d\n", ui_cb->dsap, ui_cb->ssap); + memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sa_family = AF_NFC; sockaddr.nfc_protocol = NFC_PROTO_NFC_DEP; sockaddr.dsap = ui_cb->dsap; --- linux-lts-raring-3.8.0.orig/net/nfc/hci/core.c +++ linux-lts-raring-3.8.0/net/nfc/hci/core.c @@ -57,6 +57,8 @@ int r = 0; mutex_lock(&hdev->msg_tx_mutex); + if (hdev->shutting_down) + goto exit; if (hdev->cmd_pending_msg) { if (timer_pending(&hdev->cmd_timer) == 0) { @@ -295,6 +297,12 @@ goto exit; } + if (hdev->ops->event_received) { + r = hdev->ops->event_received(hdev, gate, event, skb); + if (r <= 0) + goto exit_noskb; + } + switch (event) { case NFC_HCI_EVT_TARGET_DISCOVERED: if (skb->len < 1) { /* no status data? */ @@ -320,17 +328,15 @@ r = nfc_hci_target_discovered(hdev, gate); break; default: - if (hdev->ops->event_received) { - hdev->ops->event_received(hdev, gate, event, skb); - return; - } - + pr_info("Discarded unknown event %x to gate %x\n", event, gate); + r = -EINVAL; break; } exit: kfree_skb(skb); +exit_noskb: if (r) { /* TODO: There was an error dispatching the event, * how to propagate up to nfc core? @@ -669,8 +675,10 @@ if (hdev->ops->tm_send) return hdev->ops->tm_send(hdev, skb); - else - return -ENOTSUPP; + + kfree_skb(skb); + + return -ENOTSUPP; } static int hci_check_presence(struct nfc_dev *nfc_dev, @@ -787,6 +795,7 @@ struct nfc_hci_dev *nfc_hci_allocate_device(struct nfc_hci_ops *ops, struct nfc_hci_init_data *init_data, + unsigned long quirks, u32 protocols, const char *llc_name, int tx_headroom, @@ -830,6 +839,8 @@ memset(hdev->gate2pipe, NFC_HCI_INVALID_PIPE, sizeof(hdev->gate2pipe)); + hdev->quirks = quirks; + return hdev; } EXPORT_SYMBOL(nfc_hci_allocate_device); @@ -868,6 +879,28 @@ { struct hci_msg *msg, *n; + mutex_lock(&hdev->msg_tx_mutex); + + if (hdev->cmd_pending_msg) { + if (hdev->cmd_pending_msg->cb) + hdev->cmd_pending_msg->cb( + hdev->cmd_pending_msg->cb_context, + NULL, -ESHUTDOWN); + kfree(hdev->cmd_pending_msg); + hdev->cmd_pending_msg = NULL; + } + + hdev->shutting_down = true; + + mutex_unlock(&hdev->msg_tx_mutex); + + del_timer_sync(&hdev->cmd_timer); + cancel_work_sync(&hdev->msg_tx_work); + + cancel_work_sync(&hdev->msg_rx_work); + + nfc_unregister_device(hdev->ndev); + skb_queue_purge(&hdev->rx_hcp_frags); skb_queue_purge(&hdev->msg_rx_queue); @@ -876,13 +909,6 @@ skb_queue_purge(&msg->msg_frags); kfree(msg); } - - del_timer_sync(&hdev->cmd_timer); - - nfc_unregister_device(hdev->ndev); - - cancel_work_sync(&hdev->msg_tx_work); - cancel_work_sync(&hdev->msg_rx_work); } EXPORT_SYMBOL(nfc_hci_unregister_device); --- linux-lts-raring-3.8.0.orig/net/nfc/hci/command.c +++ linux-lts-raring-3.8.0/net/nfc/hci/command.c @@ -280,14 +280,19 @@ static int nfc_hci_clear_all_pipes(struct nfc_hci_dev *hdev) { u8 param[2]; + size_t param_len = 2; /* TODO: Find out what the identity reference data is * and fill param with it. HCI spec 6.1.3.5 */ pr_debug("\n"); + if (test_bit(NFC_HCI_QUIRK_SHORT_CLEAR, &hdev->quirks)) + param_len = 0; + return nfc_hci_execute_cmd(hdev, NFC_HCI_ADMIN_PIPE, - NFC_HCI_ADM_CLEAR_ALL_PIPE, param, 2, NULL); + NFC_HCI_ADM_CLEAR_ALL_PIPE, param, param_len, + NULL); } int nfc_hci_disconnect_gate(struct nfc_hci_dev *hdev, u8 gate) --- linux-lts-raring-3.8.0.orig/net/nfc/hci/hcp.c +++ linux-lts-raring-3.8.0/net/nfc/hci/hcp.c @@ -105,6 +105,13 @@ } mutex_lock(&hdev->msg_tx_mutex); + + if (hdev->shutting_down) { + err = -ESHUTDOWN; + mutex_unlock(&hdev->msg_tx_mutex); + goto out_skb_err; + } + list_add_tail(&cmd->msg_l, &hdev->msg_tx_queue); mutex_unlock(&hdev->msg_tx_mutex); --- linux-lts-raring-3.8.0.orig/net/9p/trans_common.c +++ linux-lts-raring-3.8.0/net/9p/trans_common.c @@ -24,11 +24,11 @@ */ void p9_release_pages(struct page **pages, int nr_pages) { - int i = 0; - while (pages[i] && nr_pages--) { - put_page(pages[i]); - i++; - } + int i; + + for (i = 0; i < nr_pages; i++) + if (pages[i]) + put_page(pages[i]); } EXPORT_SYMBOL(p9_release_pages); --- linux-lts-raring-3.8.0.orig/net/can/gw.c +++ linux-lts-raring-3.8.0/net/can/gw.c @@ -436,7 +436,7 @@ if (gwj->src.dev == dev || gwj->dst.dev == dev) { hlist_del(&gwj->list); cgw_unregister_filter(gwj); - kfree(gwj); + kmem_cache_free(cgw_cache, gwj); } } } @@ -829,7 +829,7 @@ hlist_for_each_entry_safe(gwj, n, nx, &cgw_list, list) { hlist_del(&gwj->list); cgw_unregister_filter(gwj); - kfree(gwj); + kmem_cache_free(cgw_cache, gwj); } } @@ -885,7 +885,7 @@ hlist_del(&gwj->list); cgw_unregister_filter(gwj); - kfree(gwj); + kmem_cache_free(cgw_cache, gwj); err = 0; break; } --- linux-lts-raring-3.8.0.orig/net/mac802154/mac802154.h +++ linux-lts-raring-3.8.0/net/mac802154/mac802154.h @@ -90,7 +90,7 @@ #define MAC802154_MAX_XMIT_ATTEMPTS 3 -#define MAC802154_CHAN_NONE (~(u8)0) /* No channel is assigned */ +#define MAC802154_CHAN_NONE 0xff /* No channel is assigned */ extern struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced; extern struct ieee802154_mlme_ops mac802154_mlme_wpan; --- linux-lts-raring-3.8.0.orig/net/core/sysctl_net_core.c +++ linux-lts-raring-3.8.0/net/core/sysctl_net_core.c @@ -20,6 +20,10 @@ #include #include +static int zero = 0; +static int one = 1; +static int ushort_max = USHRT_MAX; + #ifdef CONFIG_RPS static int rps_sock_flow_sysctl(ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) @@ -92,28 +96,32 @@ .data = &sysctl_wmem_max, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &one, }, { .procname = "rmem_max", .data = &sysctl_rmem_max, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &one, }, { .procname = "wmem_default", .data = &sysctl_wmem_default, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &one, }, { .procname = "rmem_default", .data = &sysctl_rmem_default, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &one, }, { .procname = "dev_weight", @@ -198,7 +206,9 @@ .data = &init_net.core.sysctl_somaxconn, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .extra1 = &zero, + .extra2 = &ushort_max, + .proc_handler = proc_dointvec_minmax }, { } }; --- linux-lts-raring-3.8.0.orig/net/core/ethtool.c +++ linux-lts-raring-3.8.0/net/core/ethtool.c @@ -1418,7 +1418,7 @@ void __user *useraddr = ifr->ifr_data; u32 ethcmd; int rc; - u32 old_features; + netdev_features_t old_features; if (!dev || !netif_device_present(dev)) return -ENODEV; --- linux-lts-raring-3.8.0.orig/net/core/rtnetlink.c +++ linux-lts-raring-3.8.0/net/core/rtnetlink.c @@ -976,6 +976,7 @@ * report anything. */ ivi.spoofchk = -1; + memset(ivi.mac, 0, sizeof(ivi.mac)); if (dev->netdev_ops->ndo_get_vf_config(dev, i, &ivi)) break; vf_mac.vf = @@ -1067,7 +1068,7 @@ rcu_read_lock(); cb->seq = net->dev_base_seq; - if (nlmsg_parse(cb->nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, + if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX, ifla_policy) >= 0) { if (tb[IFLA_EXT_MASK]) @@ -1923,7 +1924,7 @@ u32 ext_filter_mask = 0; u16 min_ifinfo_dump_size = 0; - if (nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, + if (nlmsg_parse(nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX, ifla_policy) >= 0) { if (tb[IFLA_EXT_MASK]) ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); @@ -2538,7 +2539,7 @@ struct rtattr *attr = (void *)nlh + NLMSG_ALIGN(min_len); while (RTA_OK(attr, attrlen)) { - unsigned int flavor = attr->rta_type; + unsigned int flavor = attr->rta_type & NLA_TYPE_MASK; if (flavor) { if (flavor > rta_max[sz_idx]) return -EINVAL; --- linux-lts-raring-3.8.0.orig/net/core/sock_diag.c +++ linux-lts-raring-3.8.0/net/core/sock_diag.c @@ -121,6 +121,9 @@ if (nlmsg_len(nlh) < sizeof(*req)) return -EINVAL; + if (req->sdiag_family >= AF_MAX) + return -EINVAL; + hndl = sock_diag_lock_handler(req->sdiag_family); if (hndl == NULL) err = -ENOENT; --- linux-lts-raring-3.8.0.orig/net/core/dev.c +++ linux-lts-raring-3.8.0/net/core/dev.c @@ -1591,7 +1591,6 @@ return; } #endif - WARN_ON(in_interrupt()); static_key_slow_inc(&netstamp_needed); } EXPORT_SYMBOL(net_enable_timestamp); @@ -1738,6 +1737,7 @@ skb->mark = 0; secpath_reset(skb); nf_reset(skb); + nf_reset_trace(skb); return netif_rx(skb); } EXPORT_SYMBOL_GPL(dev_forward_skb); @@ -2018,6 +2018,9 @@ struct net_device *dev = skb->dev; const char *driver = ""; + if (!net_ratelimit()) + return; + if (dev && dev->dev.parent) driver = dev_driver_string(dev->dev.parent); @@ -2287,7 +2290,7 @@ * 2. skb is fragmented and the device does not support SG. */ static inline int skb_needs_linearize(struct sk_buff *skb, - int features) + netdev_features_t features) { return skb_is_nonlinear(skb) && ((skb_has_frag_list(skb) && @@ -3277,6 +3280,7 @@ if (dev->rx_handler) return -EBUSY; + /* Note: rx_handler_data must be set before rx_handler */ rcu_assign_pointer(dev->rx_handler_data, rx_handler_data); rcu_assign_pointer(dev->rx_handler, rx_handler); @@ -3297,6 +3301,11 @@ ASSERT_RTNL(); RCU_INIT_POINTER(dev->rx_handler, NULL); + /* a reader seeing a non NULL rx_handler in a rcu_read_lock() + * section has a guarantee to see a non NULL rx_handler_data + * as well. + */ + synchronize_net(); RCU_INIT_POINTER(dev->rx_handler_data, NULL); } EXPORT_SYMBOL_GPL(netdev_rx_handler_unregister); @@ -3419,6 +3428,7 @@ } switch (rx_handler(&skb)) { case RX_HANDLER_CONSUMED: + ret = NET_RX_SUCCESS; goto unlock; case RX_HANDLER_ANOTHER: goto another_round; --- linux-lts-raring-3.8.0.orig/net/core/sock.c +++ linux-lts-raring-3.8.0/net/core/sock.c @@ -1189,18 +1189,6 @@ #endif } -/* - * caches using SLAB_DESTROY_BY_RCU should let .next pointer from nulls nodes - * un-modified. Special care is taken when initializing object to zero. - */ -static inline void sk_prot_clear_nulls(struct sock *sk, int size) -{ - if (offsetof(struct sock, sk_node.next) != 0) - memset(sk, 0, offsetof(struct sock, sk_node.next)); - memset(&sk->sk_node.pprev, 0, - size - offsetof(struct sock, sk_node.pprev)); -} - void sk_prot_clear_portaddr_nulls(struct sock *sk, int size) { unsigned long nulls1, nulls2; --- linux-lts-raring-3.8.0.orig/net/core/dev_addr_lists.c +++ linux-lts-raring-3.8.0/net/core/dev_addr_lists.c @@ -38,7 +38,7 @@ ha->type = addr_type; ha->refcount = 1; ha->global_use = global; - ha->synced = false; + ha->synced = 0; list_add_tail_rcu(&ha->list, &list->list); list->count++; @@ -166,7 +166,7 @@ addr_len, ha->type); if (err) break; - ha->synced = true; + ha->synced++; ha->refcount++; } else if (ha->refcount == 1) { __hw_addr_del(to_list, ha->addr, addr_len, ha->type); @@ -187,7 +187,7 @@ if (ha->synced) { __hw_addr_del(to_list, ha->addr, addr_len, ha->type); - ha->synced = false; + ha->synced--; __hw_addr_del(from_list, ha->addr, addr_len, ha->type); } --- linux-lts-raring-3.8.0.orig/net/core/dst.c +++ linux-lts-raring-3.8.0/net/core/dst.c @@ -179,6 +179,7 @@ dst_init_metrics(dst, dst_default_metrics, true); dst->expires = 0UL; dst->path = dst; + dst->from = NULL; #ifdef CONFIG_XFRM dst->xfrm = NULL; #endif --- linux-lts-raring-3.8.0.orig/net/core/neighbour.c +++ linux-lts-raring-3.8.0/net/core/neighbour.c @@ -239,7 +239,7 @@ we must kill timers etc. and move it to safe state. */ - skb_queue_purge(&n->arp_queue); + __skb_queue_purge(&n->arp_queue); n->arp_queue_len_bytes = 0; n->output = neigh_blackhole; if (n->nud_state & NUD_VALID) @@ -302,7 +302,7 @@ if (!n) goto out_entries; - skb_queue_head_init(&n->arp_queue); + __skb_queue_head_init(&n->arp_queue); rwlock_init(&n->lock); seqlock_init(&n->ha_lock); n->updated = n->used = now; @@ -724,7 +724,9 @@ if (neigh_del_timer(neigh)) pr_warn("Impossible event\n"); - skb_queue_purge(&neigh->arp_queue); + write_lock_bh(&neigh->lock); + __skb_queue_purge(&neigh->arp_queue); + write_unlock_bh(&neigh->lock); neigh->arp_queue_len_bytes = 0; if (dev->netdev_ops->ndo_neigh_destroy) @@ -870,7 +872,7 @@ neigh->ops->error_report(neigh, skb); write_lock(&neigh->lock); } - skb_queue_purge(&neigh->arp_queue); + __skb_queue_purge(&neigh->arp_queue); neigh->arp_queue_len_bytes = 0; } @@ -1222,7 +1224,7 @@ write_lock_bh(&neigh->lock); } - skb_queue_purge(&neigh->arp_queue); + __skb_queue_purge(&neigh->arp_queue); neigh->arp_queue_len_bytes = 0; } out: @@ -1456,16 +1458,18 @@ atomic_set(&p->refcnt, 1); p->reachable_time = neigh_rand_reach_time(p->base_reachable_time); + dev_hold(dev); + p->dev = dev; + write_pnet(&p->net, hold_net(net)); + p->sysctl_table = NULL; if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) { + release_net(net); + dev_put(dev); kfree(p); return NULL; } - dev_hold(dev); - p->dev = dev; - write_pnet(&p->net, hold_net(net)); - p->sysctl_table = NULL; write_lock_bh(&tbl->lock); p->next = tbl->parms.next; tbl->parms.next = p; --- linux-lts-raring-3.8.0.orig/net/core/scm.c +++ linux-lts-raring-3.8.0/net/core/scm.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -52,7 +53,8 @@ if (!uid_valid(uid) || !gid_valid(gid)) return -EINVAL; - if ((creds->pid == task_tgid_vnr(current) || nsown_capable(CAP_SYS_ADMIN)) && + if ((creds->pid == task_tgid_vnr(current) || + ns_capable(task_active_pid_ns(current)->user_ns, CAP_SYS_ADMIN)) && ((uid_eq(uid, cred->uid) || uid_eq(uid, cred->euid) || uid_eq(uid, cred->suid)) || nsown_capable(CAP_SETUID)) && ((gid_eq(gid, cred->gid) || gid_eq(gid, cred->egid) || --- linux-lts-raring-3.8.0.orig/net/core/flow.c +++ linux-lts-raring-3.8.0/net/core/flow.c @@ -329,7 +329,7 @@ struct flow_flush_info *info = data; struct tasklet_struct *tasklet; - tasklet = this_cpu_ptr(&info->cache->percpu->flush_tasklet); + tasklet = &this_cpu_ptr(info->cache->percpu)->flush_tasklet; tasklet->data = (unsigned long)info; tasklet_schedule(tasklet); } --- linux-lts-raring-3.8.0.orig/net/atm/common.c +++ linux-lts-raring-3.8.0/net/atm/common.c @@ -532,6 +532,8 @@ struct sk_buff *skb; int copied, error = -EINVAL; + msg->msg_namelen = 0; + if (sock->state != SS_CONNECTED) return -ENOTCONN; --- linux-lts-raring-3.8.0.orig/net/netrom/af_netrom.c +++ linux-lts-raring-3.8.0/net/netrom/af_netrom.c @@ -1177,6 +1177,7 @@ } if (sax != NULL) { + memset(sax, 0, sizeof(*sax)); sax->sax25_family = AF_NETROM; skb_copy_from_linear_data_offset(skb, 7, sax->sax25_call.ax25_call, AX25_ADDR_LEN); --- linux-lts-raring-3.8.0.orig/net/irda/af_irda.c +++ linux-lts-raring-3.8.0/net/irda/af_irda.c @@ -1386,6 +1386,8 @@ IRDA_DEBUG(4, "%s()\n", __func__); + msg->msg_namelen = 0; + skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &err); if (!skb) @@ -2584,8 +2586,10 @@ NULL, NULL, NULL); /* Check if the we got some results */ - if (!self->cachedaddr) - return -EAGAIN; /* Didn't find any devices */ + if (!self->cachedaddr) { + err = -EAGAIN; /* Didn't find any devices */ + goto out; + } daddr = self->cachedaddr; /* Cleanup */ self->cachedaddr = 0; --- linux-lts-raring-3.8.0.orig/net/unix/af_unix.c +++ linux-lts-raring-3.8.0/net/unix/af_unix.c @@ -384,7 +384,7 @@ #endif } -static int unix_release_sock(struct sock *sk, int embrion) +static void unix_release_sock(struct sock *sk, int embrion) { struct unix_sock *u = unix_sk(sk); struct path path; @@ -453,8 +453,6 @@ if (unix_tot_inflight) unix_gc(); /* Garbage collect fds */ - - return 0; } static void init_peercred(struct sock *sk) @@ -701,9 +699,10 @@ if (!sk) return 0; + unix_release_sock(sk, 0); sock->sk = NULL; - return unix_release_sock(sk, 0); + return 0; } static int unix_autobind(struct socket *sock) @@ -1996,7 +1995,7 @@ if ((UNIXCB(skb).pid != siocb->scm->pid) || (UNIXCB(skb).cred != siocb->scm->cred)) break; - } else { + } else if (test_bit(SOCK_PASSCRED, &sock->flags)) { /* Copy credentials */ scm_set_cred(siocb->scm, UNIXCB(skb).pid, UNIXCB(skb).cred); check_creds = 1; --- linux-lts-raring-3.8.0.orig/net/key/af_key.c +++ linux-lts-raring-3.8.0/net/key/af_key.c @@ -1705,6 +1705,7 @@ hdr->sadb_msg_version = PF_KEY_V2; hdr->sadb_msg_errno = (uint8_t) 0; hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t)); + hdr->sadb_msg_reserved = 0; pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net); @@ -2075,6 +2076,7 @@ pol->sadb_x_policy_type = IPSEC_POLICY_NONE; } pol->sadb_x_policy_dir = dir+1; + pol->sadb_x_policy_reserved = 0; pol->sadb_x_policy_id = xp->index; pol->sadb_x_policy_priority = xp->priority; @@ -2688,7 +2690,9 @@ hdr->sadb_msg_pid = c->portid; hdr->sadb_msg_version = PF_KEY_V2; hdr->sadb_msg_errno = (uint8_t) 0; + hdr->sadb_msg_satype = SADB_SATYPE_UNSPEC; hdr->sadb_msg_len = (sizeof(struct sadb_msg) / sizeof(uint64_t)); + hdr->sadb_msg_reserved = 0; pfkey_broadcast(skb_out, GFP_ATOMIC, BROADCAST_ALL, NULL, c->net); return 0; @@ -3109,7 +3113,9 @@ pol->sadb_x_policy_exttype = SADB_X_EXT_POLICY; pol->sadb_x_policy_type = IPSEC_POLICY_IPSEC; pol->sadb_x_policy_dir = XFRM_POLICY_OUT + 1; + pol->sadb_x_policy_reserved = 0; pol->sadb_x_policy_id = xp->index; + pol->sadb_x_policy_priority = xp->priority; /* Set sadb_comb's. */ if (x->id.proto == IPPROTO_AH) @@ -3497,6 +3503,7 @@ pol->sadb_x_policy_exttype = SADB_X_EXT_POLICY; pol->sadb_x_policy_type = IPSEC_POLICY_IPSEC; pol->sadb_x_policy_dir = dir + 1; + pol->sadb_x_policy_reserved = 0; pol->sadb_x_policy_id = 0; pol->sadb_x_policy_priority = 0; --- linux-lts-raring-3.8.0.orig/ipc/shm.c +++ linux-lts-raring-3.8.0/ipc/shm.c @@ -462,7 +462,7 @@ size_t size = params->u.size; int error; struct shmid_kernel *shp; - int numpages = (size + PAGE_SIZE -1) >> PAGE_SHIFT; + size_t numpages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; struct file * file; char name[13]; int id; @@ -491,10 +491,20 @@ sprintf (name, "SYSV%08x", key); if (shmflg & SHM_HUGETLB) { + struct hstate *hs = hstate_sizelog((shmflg >> SHM_HUGE_SHIFT) + & SHM_HUGE_MASK); + size_t hugesize; + + if (!hs) { + error = -EINVAL; + goto no_file; + } + hugesize = ALIGN(size, huge_page_size(hs)); + /* hugetlb_file_setup applies strict accounting */ if (shmflg & SHM_NORESERVE) acctflag = VM_NORESERVE; - file = hugetlb_file_setup(name, 0, size, acctflag, + file = hugetlb_file_setup(name, hugesize, acctflag, &shp->mlock_user, HUGETLB_SHMFS_INODE, (shmflg >> SHM_HUGE_SHIFT) & SHM_HUGE_MASK); } else { --- linux-lts-raring-3.8.0.orig/ipc/mqueue.c +++ linux-lts-raring-3.8.0/ipc/mqueue.c @@ -330,8 +330,16 @@ int flags, const char *dev_name, void *data) { - if (!(flags & MS_KERNMOUNT)) - data = current->nsproxy->ipc_ns; + if (!(flags & MS_KERNMOUNT)) { + struct ipc_namespace *ns = current->nsproxy->ipc_ns; + /* Don't allow mounting unless the caller has CAP_SYS_ADMIN + * over the ipc namespace. + */ + if (!ns_capable(ns->user_ns, CAP_SYS_ADMIN)) + return ERR_PTR(-EPERM); + + data = ns; + } return mount_ns(fs_type, flags, data, mqueue_fill_super); } @@ -840,7 +848,8 @@ fd = error; } mutex_unlock(&root->d_inode->i_mutex); - mnt_drop_write(mnt); + if (!ro) + mnt_drop_write(mnt); out_putname: putname(name); return fd; --- linux-lts-raring-3.8.0.orig/ipc/msg.c +++ linux-lts-raring-3.8.0/ipc/msg.c @@ -820,15 +820,17 @@ struct msg_msg *copy = NULL; unsigned long copy_number = 0; + ns = current->nsproxy->ipc_ns; + if (msqid < 0 || (long) bufsz < 0) return -EINVAL; if (msgflg & MSG_COPY) { - copy = prepare_copy(buf, bufsz, msgflg, &msgtyp, ©_number); + copy = prepare_copy(buf, min_t(size_t, bufsz, ns->msg_ctlmax), + msgflg, &msgtyp, ©_number); if (IS_ERR(copy)) return PTR_ERR(copy); } mode = convert_mode(&msgtyp, msgflg); - ns = current->nsproxy->ipc_ns; msq = msg_lock_check(ns, msqid); if (IS_ERR(msq)) { @@ -870,6 +872,7 @@ goto out_unlock; break; } + msg = ERR_PTR(-EAGAIN); } else break; msg_counter++; --- linux-lts-raring-3.8.0.orig/ipc/msgutil.c +++ linux-lts-raring-3.8.0/ipc/msgutil.c @@ -117,9 +117,6 @@ if (alen > DATALEN_MSG) alen = DATALEN_MSG; - dst->next = NULL; - dst->security = NULL; - memcpy(dst + 1, src + 1, alen); len -= alen; --- linux-lts-raring-3.8.0.orig/drivers/Kconfig +++ linux-lts-raring-3.8.0/drivers/Kconfig @@ -134,6 +134,8 @@ source "drivers/clocksource/Kconfig" +source "drivers/mailbox/Kconfig" + source "drivers/iommu/Kconfig" source "drivers/remoteproc/Kconfig" --- linux-lts-raring-3.8.0.orig/drivers/Makefile +++ linux-lts-raring-3.8.0/drivers/Makefile @@ -130,6 +130,7 @@ #common clk code obj-y += clk/ +obj-$(CONFIG_MAILBOX) += mailbox/ obj-$(CONFIG_HWSPINLOCK) += hwspinlock/ obj-$(CONFIG_NFC) += nfc/ obj-$(CONFIG_IOMMU_SUPPORT) += iommu/ --- linux-lts-raring-3.8.0.orig/drivers/mmc/host/omap_hsmmc.c +++ linux-lts-raring-3.8.0/drivers/mmc/host/omap_hsmmc.c @@ -1819,7 +1819,7 @@ host->slot_id = 0; host->mapbase = res->start + pdata->reg_offset; host->base = ioremap(host->mapbase, SZ_4K); - host->power_mode = MMC_POWER_OFF; + host->power_mode = -1; host->next_data.cookie = 1; platform_set_drvdata(pdev, host); --- linux-lts-raring-3.8.0.orig/drivers/mmc/host/Kconfig +++ linux-lts-raring-3.8.0/drivers/mmc/host/Kconfig @@ -292,16 +292,6 @@ If unsure, say N. -config MMC_ATMELMCI_DMA - bool "Atmel MCI DMA support" - depends on MMC_ATMELMCI && (AVR32 || ARCH_AT91SAM9G45) && DMA_ENGINE - help - Say Y here to have the Atmel MCI driver use a DMA engine to - do data transfers and thus increase the throughput and - reduce the CPU utilization. - - If unsure, say N. - config MMC_MSM tristate "Qualcomm SDCC Controller Support" depends on MMC && ARCH_MSM --- linux-lts-raring-3.8.0.orig/drivers/mmc/host/sdhci-esdhc-imx.c +++ linux-lts-raring-3.8.0/drivers/mmc/host/sdhci-esdhc-imx.c @@ -237,15 +237,18 @@ static u16 esdhc_readw_le(struct sdhci_host *host, int reg) { + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); + struct pltfm_imx_data *imx_data = pltfm_host->priv; + if (unlikely(reg == SDHCI_HOST_VERSION)) { - u16 val = readw(host->ioaddr + (reg ^ 2)); - /* - * uSDHC supports SDHCI v3.0, but it's encoded as value - * 0x3 in host controller version register, which violates - * SDHCI_SPEC_300 definition. Work it around here. - */ - if ((val & SDHCI_SPEC_VER_MASK) == 3) - return --val; + reg ^= 2; + if (is_imx6q_usdhc(imx_data)) { + /* + * The usdhc register returns a wrong host version. + * Correct it here. + */ + return SDHCI_SPEC_300; + } } return readw(host->ioaddr + reg); --- linux-lts-raring-3.8.0.orig/drivers/mmc/host/atmel-mci.c +++ linux-lts-raring-3.8.0/drivers/mmc/host/atmel-mci.c @@ -178,6 +178,7 @@ void __iomem *regs; struct scatterlist *sg; + unsigned int sg_len; unsigned int pio_offset; unsigned int *buffer; unsigned int buf_size; @@ -892,6 +893,7 @@ data->error = -EINPROGRESS; host->sg = data->sg; + host->sg_len = data->sg_len; host->data = data; host->data_chan = NULL; @@ -1826,7 +1828,8 @@ if (offset == sg->length) { flush_dcache_page(sg_page(sg)); host->sg = sg = sg_next(sg); - if (!sg) + host->sg_len--; + if (!sg || !host->sg_len) goto done; offset = 0; @@ -1839,7 +1842,8 @@ flush_dcache_page(sg_page(sg)); host->sg = sg = sg_next(sg); - if (!sg) + host->sg_len--; + if (!sg || !host->sg_len) goto done; offset = 4 - remaining; @@ -1890,7 +1894,8 @@ nbytes += 4; if (offset == sg->length) { host->sg = sg = sg_next(sg); - if (!sg) + host->sg_len--; + if (!sg || !host->sg_len) goto done; offset = 0; @@ -1904,7 +1909,8 @@ nbytes += remaining; host->sg = sg = sg_next(sg); - if (!sg) { + host->sg_len--; + if (!sg || !host->sg_len) { atmci_writel(host, ATMCI_TDR, value); goto done; } @@ -2487,10 +2493,8 @@ atmci_readl(host, ATMCI_SR); clk_disable(host->mck); -#ifdef CONFIG_MMC_ATMELMCI_DMA if (host->dma.chan) dma_release_channel(host->dma.chan); -#endif free_irq(platform_get_irq(pdev, 0), host); iounmap(host->regs); --- linux-lts-raring-3.8.0.orig/drivers/mmc/host/tmio_mmc_dma.c +++ linux-lts-raring-3.8.0/drivers/mmc/host/tmio_mmc_dma.c @@ -104,6 +104,7 @@ pio: if (!desc) { /* DMA failed, fall back to PIO */ + tmio_mmc_enable_dma(host, false); if (ret >= 0) ret = -EIO; host->chan_rx = NULL; @@ -116,7 +117,6 @@ } dev_warn(&host->pdev->dev, "DMA failed: %d, falling back to PIO\n", ret); - tmio_mmc_enable_dma(host, false); } dev_dbg(&host->pdev->dev, "%s(): desc %p, cookie %d, sg[%d]\n", __func__, @@ -185,6 +185,7 @@ pio: if (!desc) { /* DMA failed, fall back to PIO */ + tmio_mmc_enable_dma(host, false); if (ret >= 0) ret = -EIO; host->chan_tx = NULL; @@ -197,7 +198,6 @@ } dev_warn(&host->pdev->dev, "DMA failed: %d, falling back to PIO\n", ret); - tmio_mmc_enable_dma(host, false); } dev_dbg(&host->pdev->dev, "%s(): desc %p, cookie %d\n", __func__, --- linux-lts-raring-3.8.0.orig/drivers/mmc/host/rtsx_pci_sdmmc.c +++ linux-lts-raring-3.8.0/drivers/mmc/host/rtsx_pci_sdmmc.c @@ -678,12 +678,19 @@ struct mmc_command *cmd = mrq->cmd; struct mmc_data *data = mrq->data; unsigned int data_size = 0; + int err; if (host->eject) { cmd->error = -ENOMEDIUM; goto finish; } + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD); + if (err) { + cmd->error = err; + goto finish; + } + mutex_lock(&pcr->pcr_mutex); rtsx_pci_start_run(pcr); @@ -901,6 +908,9 @@ if (host->eject) return; + if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD)) + return; + mutex_lock(&pcr->pcr_mutex); rtsx_pci_start_run(pcr); @@ -1073,6 +1083,10 @@ if (host->eject) return -ENOMEDIUM; + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD); + if (err) + return err; + mutex_lock(&pcr->pcr_mutex); rtsx_pci_start_run(pcr); @@ -1083,11 +1097,6 @@ voltage = OUTPUT_1V8; if (voltage == OUTPUT_1V8) { - err = rtsx_pci_write_register(pcr, - SD30_DRIVE_SEL, 0x07, DRIVER_TYPE_B); - if (err < 0) - goto out; - err = sd_wait_voltage_stable_1(host); if (err < 0) goto out; @@ -1122,6 +1131,10 @@ if (host->eject) return -ENOMEDIUM; + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD); + if (err) + return err; + mutex_lock(&pcr->pcr_mutex); rtsx_pci_start_run(pcr); --- linux-lts-raring-3.8.0.orig/drivers/mmc/core/mmc.c +++ linux-lts-raring-3.8.0/drivers/mmc/core/mmc.c @@ -368,13 +368,13 @@ ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT]; card->ext_csd.raw_trim_mult = ext_csd[EXT_CSD_TRIM_MULT]; + card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT]; if (card->ext_csd.rev >= 4) { /* * Enhanced area feature support -- check whether the eMMC * card has the Enhanced area enabled. If so, export enhanced * area offset and size to user by adding sysfs interface. */ - card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT]; if ((ext_csd[EXT_CSD_PARTITION_SUPPORT] & 0x2) && (ext_csd[EXT_CSD_PARTITION_ATTRIBUTE] & 0x1)) { hc_erase_grp_sz = @@ -496,7 +496,7 @@ * RPMB regions are defined in multiples of 128K. */ card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT]; - if (ext_csd[EXT_CSD_RPMB_MULT]) { + if (ext_csd[EXT_CSD_RPMB_MULT] && mmc_host_cmd23(card->host)) { mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17, EXT_CSD_PART_CONFIG_ACC_RPMB, "rpmb", 0, false, --- linux-lts-raring-3.8.0.orig/drivers/remoteproc/Kconfig +++ linux-lts-raring-3.8.0/drivers/remoteproc/Kconfig @@ -5,7 +5,7 @@ tristate depends on EXPERIMENTAL depends on HAS_DMA - select FW_CONFIG + select FW_LOADER select VIRTIO config OMAP_REMOTEPROC --- linux-lts-raring-3.8.0.orig/drivers/remoteproc/remoteproc_core.c +++ linux-lts-raring-3.8.0/drivers/remoteproc/remoteproc_core.c @@ -370,10 +370,12 @@ /* it is now safe to add the virtio device */ ret = rproc_add_virtio_dev(rvdev, rsc->id); if (ret) - goto free_rvdev; + goto remove_rvdev; return 0; +remove_rvdev: + list_del(&rvdev->node); free_rvdev: kfree(rvdev); return ret; --- linux-lts-raring-3.8.0.orig/drivers/remoteproc/ste_modem_rproc.c +++ linux-lts-raring-3.8.0/drivers/remoteproc/ste_modem_rproc.c @@ -240,6 +240,8 @@ /* Unregister as remoteproc device */ rproc_del(sproc->rproc); + dma_free_coherent(sproc->rproc->dev.parent, SPROC_FW_SIZE, + sproc->fw_addr, sproc->fw_dma_addr); rproc_put(sproc->rproc); mdev->drv_data = NULL; @@ -297,10 +299,13 @@ /* Register as a remoteproc device */ err = rproc_add(rproc); if (err) - goto free_rproc; + goto free_mem; return 0; +free_mem: + dma_free_coherent(rproc->dev.parent, SPROC_FW_SIZE, + sproc->fw_addr, sproc->fw_dma_addr); free_rproc: /* Reset device data upon error */ mdev->drv_data = NULL; --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-hub.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-hub.c @@ -328,7 +328,7 @@ ehci->rh_state = EHCI_RH_SUSPENDED; end_unlink_async(ehci); - unlink_empty_async(ehci); + unlink_empty_async_suspended(ehci); ehci_handle_intr_unlinks(ehci); end_free_itds(ehci); @@ -856,6 +856,7 @@ ehci->reset_done[wIndex] = jiffies + msecs_to_jiffies(20); usb_hcd_start_port_resume(&hcd->self, wIndex); + set_bit(wIndex, &ehci->resuming_ports); /* check the port again */ mod_timer(&ehci_to_hcd(ehci)->rh_timer, ehci->reset_done[wIndex]); --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-hcd.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-hcd.c @@ -302,6 +302,7 @@ static void end_unlink_async(struct ehci_hcd *ehci); static void unlink_empty_async(struct ehci_hcd *ehci); +static void unlink_empty_async_suspended(struct ehci_hcd *ehci); static void ehci_work(struct ehci_hcd *ehci); static void start_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh); static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh); @@ -669,9 +670,6 @@ if (retval) return retval; - if (ehci_is_TDI(ehci)) - tdi_reset(ehci); - ehci_reset(ehci); return 0; @@ -748,11 +746,9 @@ /* guard against (alleged) silicon errata */ if (cmd & CMD_IAAD) ehci_dbg(ehci, "IAA with IAAD still set?\n"); - if (ehci->async_iaa) { + if (ehci->async_iaa) COUNT(ehci->stats.iaa); - end_unlink_async(ehci); - } else - ehci_dbg(ehci, "IAA with nothing unlinked?\n"); + end_unlink_async(ehci); } /* remote wakeup [4.3.1] */ --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-omap.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-omap.c @@ -288,7 +288,6 @@ { struct device *dev = &pdev->dev; struct usb_hcd *hcd = dev_get_drvdata(dev); - struct ehci_hcd_omap_platform_data *pdata = dev->platform_data; usb_remove_hcd(hcd); disable_put_regulator(dev->platform_data); @@ -298,13 +297,6 @@ pm_runtime_put_sync(dev); pm_runtime_disable(dev); - if (pdata->phy_reset) { - if (gpio_is_valid(pdata->reset_gpio_port[0])) - gpio_free(pdata->reset_gpio_port[0]); - - if (gpio_is_valid(pdata->reset_gpio_port[1])) - gpio_free(pdata->reset_gpio_port[1]); - } return 0; } @@ -372,7 +364,7 @@ .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, }; -MODULE_ALIAS("platform:omap-ehci"); +MODULE_ALIAS("platform:ehci-omap"); MODULE_AUTHOR("Texas Instruments, Inc."); MODULE_AUTHOR("Felipe Balbi "); --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci-hub.c +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci-hub.c @@ -286,7 +286,7 @@ if (virt_dev->eps[i].ring && virt_dev->eps[i].ring->dequeue) xhci_queue_stop_endpoint(xhci, slot_id, i, suspend); } - cmd->command_trb = xhci->cmd_ring->enqueue; + cmd->command_trb = xhci_find_next_enqueue(xhci->cmd_ring); list_add_tail(&cmd->cmd_list, &virt_dev->cmd_list); xhci_queue_stop_endpoint(xhci, slot_id, 0, suspend); xhci_ring_cmd_db(xhci); --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-pci.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-pci.c @@ -413,7 +413,7 @@ .remove = usb_hcd_pci_remove, .shutdown = usb_hcd_pci_shutdown, -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_PM .driver = { .pm = &usb_hcd_pci_pm_ops }, --- linux-lts-raring-3.8.0.orig/drivers/usb/host/uhci-q.c +++ linux-lts-raring-3.8.0/drivers/usb/host/uhci-q.c @@ -1287,7 +1287,7 @@ return -EINVAL; /* Can't change the period */ } else { - next = uhci->frame_number + 2; + next = uhci->frame_number + 1; /* Find the next unused frame */ if (list_empty(&qh->queue)) { @@ -1303,7 +1303,7 @@ } /* Fell behind? */ - if (uhci_frame_before_eq(frame, next)) { + if (!uhci_frame_before_eq(next, frame)) { /* USB_ISO_ASAP: Round up to the first available slot */ if (urb->transfer_flags & URB_ISO_ASAP) @@ -1311,13 +1311,17 @@ -qh->period; /* - * Not ASAP: Use the next slot in the stream. If - * the entire URB falls before the threshold, fail. + * Not ASAP: Use the next slot in the stream, + * no matter what. */ else if (!uhci_frame_before_eq(next, frame + (urb->number_of_packets - 1) * qh->period)) - return -EXDEV; + dev_dbg(uhci_dev(uhci), "iso underrun %p (%u+%u < %u)\n", + urb, frame, + (urb->number_of_packets - 1) * + qh->period, + next); } } --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ohci-hcd.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ohci-hcd.c @@ -231,40 +231,46 @@ frame &= ~(ed->interval - 1); frame |= ed->branch; urb->start_frame = frame; + ed->last_iso = frame + ed->interval * (size - 1); } } else if (ed->type == PIPE_ISOCHRONOUS) { - u16 next = ohci_frame_no(ohci) + 2; + u16 next = ohci_frame_no(ohci) + 1; u16 frame = ed->last_iso + ed->interval; + u16 length = ed->interval * (size - 1); /* Behind the scheduling threshold? */ if (unlikely(tick_before(frame, next))) { - /* USB_ISO_ASAP: Round up to the first available slot */ - if (urb->transfer_flags & URB_ISO_ASAP) + /* URB_ISO_ASAP: Round up to the first available slot */ + if (urb->transfer_flags & URB_ISO_ASAP) { frame += (next - frame + ed->interval - 1) & -ed->interval; /* - * Not ASAP: Use the next slot in the stream. If - * the entire URB falls before the threshold, fail. + * Not ASAP: Use the next slot in the stream, + * no matter what. */ - else if (tick_before(frame + ed->interval * - (urb->number_of_packets - 1), next)) { - retval = -EXDEV; - usb_hcd_unlink_urb_from_ep(hcd, urb); - goto fail; + } else { + /* + * Some OHCI hardware doesn't handle late TDs + * correctly. After retiring them it proceeds + * to the next ED instead of the next TD. + * Therefore we have to omit the late TDs + * entirely. + */ + urb_priv->td_cnt = DIV_ROUND_UP( + (u16) (next - frame), + ed->interval); + if (urb_priv->td_cnt >= urb_priv->length) { + ++urb_priv->td_cnt; /* Mark it */ + ohci_dbg(ohci, "iso underrun %p (%u+%u < %u)\n", + urb, frame, length, + next); + } } - - /* - * Some OHCI hardware doesn't handle late TDs - * correctly. After retiring them it proceeds to - * the next ED instead of the next TD. Therefore - * we have to omit the late TDs entirely. - */ - urb_priv->td_cnt = DIV_ROUND_UP(next - frame, - ed->interval); } urb->start_frame = frame; + ed->last_iso = frame + length; } /* fill the TDs and link them to the ed; and --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci-mem.c +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci-mem.c @@ -369,6 +369,10 @@ ctx->size += CTX_SIZE(xhci->hcc_params); ctx->bytes = dma_pool_alloc(xhci->device_pool, flags, &ctx->dma); + if (!ctx->bytes) { + kfree(ctx); + return NULL; + } memset(ctx->bytes, 0, ctx->size); return ctx; } @@ -1443,15 +1447,17 @@ ep_ctx->ep_info2 |= cpu_to_le32(xhci_get_endpoint_type(udev, ep)); /* Set the max packet size and max burst */ + max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc)); + max_burst = 0; switch (udev->speed) { case USB_SPEED_SUPER: - max_packet = usb_endpoint_maxp(&ep->desc); - ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet)); /* dig out max burst from ep companion desc */ - max_packet = ep->ss_ep_comp.bMaxBurst; - ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_packet)); + max_burst = ep->ss_ep_comp.bMaxBurst; break; case USB_SPEED_HIGH: + /* Some devices get this wrong */ + if (usb_endpoint_xfer_bulk(&ep->desc)) + max_packet = 512; /* bits 11:12 specify the number of additional transaction * opportunities per microframe (USB 2.0, section 9.6.6) */ @@ -1459,17 +1465,16 @@ usb_endpoint_xfer_int(&ep->desc)) { max_burst = (usb_endpoint_maxp(&ep->desc) & 0x1800) >> 11; - ep_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(max_burst)); } - /* Fall through */ + break; case USB_SPEED_FULL: case USB_SPEED_LOW: - max_packet = GET_MAX_PACKET(usb_endpoint_maxp(&ep->desc)); - ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet)); break; default: BUG(); } + ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet) | + MAX_BURST(max_burst)); max_esit_payload = xhci_get_max_esit_payload(xhci, udev, ep); ep_ctx->tx_info = cpu_to_le32(MAX_ESIT_PAYLOAD_FOR_EP(max_esit_payload)); @@ -1846,6 +1851,9 @@ } spin_unlock_irqrestore(&xhci->lock, flags); + if (!xhci->rh_bw) + goto no_bw; + num_ports = HCS_MAX_PORTS(xhci->hcs_params1); for (i = 0; i < num_ports; i++) { struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table; @@ -1864,6 +1872,7 @@ } } +no_bw: xhci->num_usb2_ports = 0; xhci->num_usb3_ports = 0; xhci->num_active_eps = 0; @@ -2275,6 +2284,9 @@ u32 page_size, temp; int i; + INIT_LIST_HEAD(&xhci->lpm_failed_devs); + INIT_LIST_HEAD(&xhci->cancel_cmd_list); + page_size = xhci_readl(xhci, &xhci->op_regs->page_size); xhci_dbg(xhci, "Supported page size register = 0x%x\n", page_size); for (i = 0; i < 16; i++) { @@ -2353,7 +2365,6 @@ xhci->cmd_ring = xhci_ring_alloc(xhci, 1, 1, TYPE_COMMAND, flags); if (!xhci->cmd_ring) goto fail; - INIT_LIST_HEAD(&xhci->cancel_cmd_list); xhci_dbg(xhci, "Allocated command ring at %p\n", xhci->cmd_ring); xhci_dbg(xhci, "First segment DMA is 0x%llx\n", (unsigned long long)xhci->cmd_ring->first_seg->dma); @@ -2464,8 +2475,6 @@ if (xhci_setup_port_arrays(xhci, flags)) goto fail; - INIT_LIST_HEAD(&xhci->lpm_failed_devs); - /* Enable USB 3.0 device notifications for function remote wake, which * is necessary for allowing USB 3.0 devices to do remote wakeup from * U3 (device suspend). --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci.c +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci.c @@ -342,15 +342,20 @@ static int xhci_try_enable_msi(struct usb_hcd *hcd) { struct xhci_hcd *xhci = hcd_to_xhci(hcd); - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); + struct pci_dev *pdev; int ret; + /* The xhci platform device has set up IRQs through usb_add_hcd. */ + if (xhci->quirks & XHCI_PLAT) + return 0; + + pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); /* * Some Fresco Logic host controllers advertise MSI, but fail to * generate interrupts. Don't even try to enable MSI. */ if (xhci->quirks & XHCI_BROKEN_MSI) - return 0; + goto legacy_irq; /* unregister the legacy interrupt */ if (hcd->irq) @@ -371,6 +376,7 @@ return -EINVAL; } + legacy_irq: /* fall back to legacy interrupt*/ ret = request_irq(pdev->irq, &usb_hcd_irq, IRQF_SHARED, hcd->irq_descr, hcd); @@ -465,7 +471,7 @@ * Systems: * Vendor: Hewlett-Packard -> System Models: Z420, Z620 and Z820 */ -static bool compliance_mode_recovery_timer_quirk_check(void) +bool xhci_compliance_mode_recovery_timer_quirk_check(void) { const char *dmi_product_name, *dmi_sys_vendor; @@ -516,7 +522,7 @@ xhci_dbg(xhci, "Finished xhci_init\n"); /* Initializing Compliance Mode Recovery Data If Needed */ - if (compliance_mode_recovery_timer_quirk_check()) { + if (xhci_compliance_mode_recovery_timer_quirk_check()) { xhci->quirks |= XHCI_COMP_MODE_QUIRK; compliance_mode_recovery_timer_init(xhci); } @@ -951,6 +957,7 @@ struct usb_hcd *hcd = xhci_to_hcd(xhci); struct usb_hcd *secondary_hcd; int retval = 0; + bool comp_timer_running = false; /* Wait a bit if either of the roothubs need to settle from the * transition into bus suspend. @@ -988,6 +995,13 @@ /* If restore operation fails, re-initialize the HC during resume */ if ((temp & STS_SRE) || hibernated) { + + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) && + !(xhci_all_ports_seen_u0(xhci))) { + del_timer_sync(&xhci->comp_mode_recovery_timer); + xhci_dbg(xhci, "Compliance Mode Recovery Timer deleted!\n"); + } + /* Let the USB core know _both_ roothubs lost power. */ usb_root_hub_lost_power(xhci->main_hcd->self.root_hub); usb_root_hub_lost_power(xhci->shared_hcd->self.root_hub); @@ -1030,6 +1044,8 @@ retval = xhci_init(hcd->primary_hcd); if (retval) return retval; + comp_timer_running = true; + xhci_dbg(xhci, "Start the primary HCD\n"); retval = xhci_run(hcd->primary_hcd); if (!retval) { @@ -1071,7 +1087,7 @@ * to suffer the Compliance Mode issue again. It doesn't matter if * ports have entered previously to U0 before system's suspension. */ - if (xhci->quirks & XHCI_COMP_MODE_QUIRK) + if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) && !comp_timer_running) compliance_mode_recovery_timer_init(xhci); /* Re-enable port polling. */ @@ -1156,9 +1172,6 @@ } xhci = hcd_to_xhci(hcd); - if (xhci->xhc_state & XHCI_STATE_HALTED) - return -ENODEV; - if (check_virt_dev) { if (!udev->slot_id || !xhci->devs[udev->slot_id]) { printk(KERN_DEBUG "xHCI %s called with unaddressed " @@ -1174,6 +1187,9 @@ } } + if (xhci->xhc_state & XHCI_STATE_HALTED) + return -ENODEV; + return 1; } @@ -2572,15 +2588,7 @@ if (command) { cmd_completion = command->completion; cmd_status = &command->status; - command->command_trb = xhci->cmd_ring->enqueue; - - /* Enqueue pointer can be left pointing to the link TRB, - * we must handle that - */ - if (TRB_TYPE_LINK_LE32(command->command_trb->link.control)) - command->command_trb = - xhci->cmd_ring->enq_seg->next->trbs; - + command->command_trb = xhci_find_next_enqueue(xhci->cmd_ring); list_add_tail(&command->cmd_list, &virt_dev->cmd_list); } else { cmd_completion = &virt_dev->cmd_completion; @@ -2588,7 +2596,7 @@ } init_completion(cmd_completion); - cmd_trb = xhci->cmd_ring->dequeue; + cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring); if (!ctx_change) ret = xhci_queue_configure_endpoint(xhci, in_ctx->dma, udev->slot_id, must_succeed); @@ -3373,14 +3381,7 @@ /* Attempt to submit the Reset Device command to the command ring */ spin_lock_irqsave(&xhci->lock, flags); - reset_device_cmd->command_trb = xhci->cmd_ring->enqueue; - - /* Enqueue pointer can be left pointing to the link TRB, - * we must handle that - */ - if (TRB_TYPE_LINK_LE32(reset_device_cmd->command_trb->link.control)) - reset_device_cmd->command_trb = - xhci->cmd_ring->enq_seg->next->trbs; + reset_device_cmd->command_trb = xhci_find_next_enqueue(xhci->cmd_ring); list_add_tail(&reset_device_cmd->cmd_list, &virt_dev->cmd_list); ret = xhci_queue_reset_device(xhci, slot_id); @@ -3491,10 +3492,21 @@ { struct xhci_hcd *xhci = hcd_to_xhci(hcd); struct xhci_virt_device *virt_dev; + struct device *dev = hcd->self.controller; unsigned long flags; u32 state; int i, ret; +#ifndef CONFIG_USB_DEFAULT_PERSIST + /* + * We called pm_runtime_get_noresume when the device was attached. + * Decrement the counter here to allow controller to runtime suspend + * if no devices remain. + */ + if (xhci->quirks & XHCI_RESET_ON_RESUME) + pm_runtime_put_noidle(dev); +#endif + ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__); /* If the host is halted due to driver unload, we still need to free the * device. @@ -3566,13 +3578,14 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev) { struct xhci_hcd *xhci = hcd_to_xhci(hcd); + struct device *dev = hcd->self.controller; unsigned long flags; int timeleft; int ret; union xhci_trb *cmd_trb; spin_lock_irqsave(&xhci->lock, flags); - cmd_trb = xhci->cmd_ring->dequeue; + cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring); ret = xhci_queue_slot_control(xhci, TRB_ENABLE_SLOT, 0); if (ret) { spin_unlock_irqrestore(&xhci->lock, flags); @@ -3618,6 +3631,16 @@ goto disable_slot; } udev->slot_id = xhci->slot_id; + +#ifndef CONFIG_USB_DEFAULT_PERSIST + /* + * If resetting upon resume, we can't put the controller into runtime + * suspend if there is a device attached. + */ + if (xhci->quirks & XHCI_RESET_ON_RESUME) + pm_runtime_get_noresume(dev); +#endif + /* Is this a LS or FS device under a HS hub? */ /* Hub or peripherial? */ return 1; @@ -3689,7 +3712,7 @@ xhci_dbg_ctx(xhci, virt_dev->in_ctx, 2); spin_lock_irqsave(&xhci->lock, flags); - cmd_trb = xhci->cmd_ring->dequeue; + cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring); ret = xhci_queue_address_device(xhci, virt_dev->in_ctx->dma, udev->slot_id); if (ret) { @@ -4660,6 +4683,13 @@ get_quirks(dev, xhci); + /* In xhci controllers which follow xhci 1.0 spec gives a spurious + * success event after a short transfer. This quirk will ignore such + * spurious event. + */ + if (xhci->hci_version > 0x96) + xhci->quirks |= XHCI_SPURIOUS_SUCCESS; + /* Make sure the HC is halted. */ retval = xhci_halt(xhci); if (retval) --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-fsl.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-fsl.c @@ -130,7 +130,7 @@ } /* Enable USB controller, 83xx or 8536 */ - if (pdata->have_sysif_regs) + if (pdata->have_sysif_regs && pdata->controller_ver < FSL_USB_VER_1_6) setbits32(hcd->regs + FSL_SOC_USB_CTRL, 0x4); /* Don't need to set host mode here. It will be done by tdi_reset() */ @@ -232,15 +232,9 @@ case FSL_USB2_PHY_ULPI: if (pdata->have_sysif_regs && pdata->controller_ver) { /* controller version 1.6 or above */ + clrbits32(non_ehci + FSL_SOC_USB_CTRL, UTMI_PHY_EN); setbits32(non_ehci + FSL_SOC_USB_CTRL, - ULPI_PHY_CLK_SEL); - /* - * Due to controller issue of PHY_CLK_VALID in ULPI - * mode, we set USB_CTRL_USB_EN before checking - * PHY_CLK_VALID, otherwise PHY_CLK_VALID doesn't work. - */ - clrsetbits_be32(non_ehci + FSL_SOC_USB_CTRL, - UTMI_PHY_EN, USB_CTRL_USB_EN); + ULPI_PHY_CLK_SEL | USB_CTRL_USB_EN); } portsc |= PORT_PTS_ULPI; break; --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-mxc.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-mxc.c @@ -211,7 +211,7 @@ if (pdata && pdata->exit) pdata->exit(pdev); - if (pdata->otg) + if (pdata && pdata->otg) usb_phy_shutdown(pdata->otg); clk_disable_unprepare(priv->usbclk); --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci-pci.c +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci-pci.c @@ -93,7 +93,6 @@ } if (pdev->vendor == PCI_VENDOR_ID_INTEL && pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { - xhci->quirks |= XHCI_SPURIOUS_SUCCESS; xhci->quirks |= XHCI_EP_LIMIT_QUIRK; xhci->limit_active_eps = 64; xhci->quirks |= XHCI_SW_BW_CHECKING; @@ -221,6 +220,14 @@ static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup) { struct xhci_hcd *xhci = hcd_to_xhci(hcd); + struct pci_dev *pdev = to_pci_dev(hcd->self.controller); + + /* + * Systems with the TI redriver that loses port status change events + * need to have the registers polled during D3, so avoid D3cold. + */ + if (xhci_compliance_mode_recovery_timer_quirk_check()) + pdev->no_d3cold = true; return xhci_suspend(xhci); } @@ -337,7 +344,7 @@ /* suspend and resume implemented later */ .shutdown = usb_hcd_pci_shutdown, -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_PM .driver = { .pm = &usb_hcd_pci_pm_ops }, --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ohci-pci.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ohci-pci.c @@ -371,7 +371,7 @@ .remove = usb_hcd_pci_remove, .shutdown = usb_hcd_pci_shutdown, -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_PM .driver = { .pm = &usb_hcd_pci_pm_ops }, --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ohci-q.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ohci-q.c @@ -41,8 +41,12 @@ __releases(ohci->lock) __acquires(ohci->lock) { + struct usb_host_endpoint *ep = urb->ep; + struct urb_priv *urb_priv; + // ASSERT (urb->hcpriv != 0); + restart: urb_free_priv (ohci, urb->hcpriv); if (likely(status == -EINPROGRESS)) status = 0; @@ -78,6 +82,21 @@ ohci->hc_control &= ~(OHCI_CTRL_PLE|OHCI_CTRL_IE); ohci_writel (ohci, ohci->hc_control, &ohci->regs->control); } + + /* + * An isochronous URB that is sumitted too late won't have any TDs + * (marked by the fact that the td_cnt value is larger than the + * actual number of TDs). If the next URB on this endpoint is like + * that, give it back now. + */ + if (!list_empty(&ep->urb_list)) { + urb = list_first_entry(&ep->urb_list, struct urb, urb_list); + urb_priv = urb->hcpriv; + if (urb_priv->td_cnt > urb_priv->length) { + status = 0; + goto restart; + } + } } @@ -544,7 +563,6 @@ td->hwCBP = cpu_to_hc32 (ohci, data & 0xFFFFF000); *ohci_hwPSWp(ohci, td, 0) = cpu_to_hc16 (ohci, (data & 0x0FFF) | 0xE000); - td->ed->last_iso = info & 0xffff; } else { td->hwCBP = cpu_to_hc32 (ohci, data); } @@ -993,7 +1011,7 @@ urb_priv->td_cnt++; /* if URB is done, clean up */ - if (urb_priv->td_cnt == urb_priv->length) { + if (urb_priv->td_cnt >= urb_priv->length) { modified = completed = 1; finish_urb(ohci, urb, 0); } @@ -1083,7 +1101,7 @@ urb_priv->td_cnt++; /* If all this urb's TDs are done, call complete() */ - if (urb_priv->td_cnt == urb_priv->length) + if (urb_priv->td_cnt >= urb_priv->length) finish_urb(ohci, urb, status); /* clean schedule: unlink EDs that are no longer busy */ --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci.h +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci.h @@ -206,8 +206,8 @@ /* bits 12:31 are reserved (and should be preserved on writes). */ /* IMAN - Interrupt Management Register */ -#define IMAN_IP (1 << 1) -#define IMAN_IE (1 << 0) +#define IMAN_IE (1 << 1) +#define IMAN_IP (1 << 0) /* USBSTS - USB status - status bitmasks */ /* HC not running - set to 1 when run/stop bit is cleared. */ @@ -972,6 +972,10 @@ __le32 flags; }; +/* Transfer event TRB length bit mask */ +/* bits 0:23 */ +#define EVENT_TRB_LEN(p) ((p) & 0xffffff) + /** Transfer Event bit fields **/ #define TRB_TO_EP_ID(p) (((p) >> 16) & 0x1f) @@ -1512,6 +1516,7 @@ #define XHCI_SPURIOUS_REBOOT (1 << 13) #define XHCI_COMP_MODE_QUIRK (1 << 14) #define XHCI_AVOID_BEI (1 << 15) +#define XHCI_PLAT (1 << 16) unsigned int num_active_eps; unsigned int limit_active_eps; /* There are two roothubs to keep track of bus suspend info for */ @@ -1816,6 +1821,7 @@ union xhci_trb *cmd_trb); void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, unsigned int stream_id); +union xhci_trb *xhci_find_next_enqueue(struct xhci_ring *ring); /* xHCI roothub code */ void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array, @@ -1848,4 +1854,7 @@ struct xhci_slot_ctx *xhci_get_slot_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx); struct xhci_ep_ctx *xhci_get_ep_ctx(struct xhci_hcd *xhci, struct xhci_container_ctx *ctx, unsigned int ep_index); +/* xHCI quirks */ +bool xhci_compliance_mode_recovery_timer_quirk_check(void); + #endif /* __LINUX_XHCI_HCD_H */ --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci-plat.c +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci-plat.c @@ -24,7 +24,7 @@ * here that the generic code does not try to make a pci_dev from our * dev struct in order to setup MSI */ - xhci->quirks |= XHCI_BROKEN_MSI; + xhci->quirks |= XHCI_PLAT; } /* called during probe() after chip reset completes */ @@ -179,6 +179,7 @@ usb_remove_hcd(hcd); iounmap(hcd->regs); + release_mem_region(hcd->rsrc_start, hcd->rsrc_len); usb_put_hcd(hcd); kfree(xhci); --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-sched.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-sched.c @@ -213,7 +213,7 @@ } static const unsigned char -max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 125, 25 }; +max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 }; /* carryover low/fullspeed bandwidth that crosses uframe boundries */ static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8]) @@ -1214,6 +1214,7 @@ memset (itd, 0, sizeof *itd); itd->itd_dma = itd_dma; + itd->frame = 9999; /* an invalid value */ list_add (&itd->itd_list, &sched->td_list); } spin_unlock_irqrestore (&ehci->lock, flags); @@ -1393,21 +1394,20 @@ /* Behind the scheduling threshold? */ if (unlikely(start < next)) { + unsigned now2 = (now - base) & (mod - 1); /* USB_ISO_ASAP: Round up to the first available slot */ if (urb->transfer_flags & URB_ISO_ASAP) start += (next - start + period - 1) & -period; /* - * Not ASAP: Use the next slot in the stream. If - * the entire URB falls before the threshold, fail. + * Not ASAP: Use the next slot in the stream, + * no matter what. */ - else if (start + span - period < next) { - ehci_dbg(ehci, "iso urb late %p (%u+%u < %u)\n", + else if (start + span - period < now2) { + ehci_dbg(ehci, "iso underrun %p (%u+%u < %u)\n", urb, start + base, - span - period, next + base); - status = -EXDEV; - goto fail; + span - period, now2 + base); } } @@ -1915,6 +1915,7 @@ memset (sitd, 0, sizeof *sitd); sitd->sitd_dma = sitd_dma; + sitd->frame = 9999; /* an invalid value */ list_add (&sitd->sitd_list, &iso_sched->td_list); } --- linux-lts-raring-3.8.0.orig/drivers/usb/host/xhci-ring.c +++ linux-lts-raring-3.8.0/drivers/usb/host/xhci-ring.c @@ -122,6 +122,16 @@ return TRB_TYPE_LINK_LE32(link->control); } +union xhci_trb *xhci_find_next_enqueue(struct xhci_ring *ring) +{ + /* Enqueue pointer can be left pointing to the link TRB, + * we must handle that + */ + if (TRB_TYPE_LINK_LE32(ring->enqueue->link.control)) + return ring->enq_seg->next->trbs; + return ring->enqueue; +} + /* Updates trb to point to the next TRB in the ring, and updates seg if the next * TRB is in a new segment. This does not skip over link TRBs, and it does not * effect the ring dequeue or enqueue pointers. @@ -434,7 +444,7 @@ /* A ring has pending URBs if its TD list is not empty */ if (!(ep->ep_state & EP_HAS_STREAMS)) { - if (!(list_empty(&ep->ring->td_list))) + if (ep->ring && !(list_empty(&ep->ring->td_list))) xhci_ring_ep_doorbell(xhci, slot_id, ep_index, 0); return; } @@ -1390,6 +1400,12 @@ inc_deq(xhci, xhci->cmd_ring); return; } + /* There is no command to handle if we get a stop event when the + * command ring is empty, event->cmd_trb points to the next + * unset command + */ + if (xhci->cmd_ring->dequeue == xhci->cmd_ring->enqueue) + return; } switch (le32_to_cpu(xhci->cmd_ring->dequeue->generic.field[3]) @@ -2027,8 +2043,8 @@ if (event_trb != ep_ring->dequeue && event_trb != td->last_trb) td->urb->actual_length = - td->urb->transfer_buffer_length - - TRB_LEN(le32_to_cpu(event->transfer_len)); + td->urb->transfer_buffer_length - + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); else td->urb->actual_length = 0; @@ -2060,7 +2076,7 @@ /* Maybe the event was for the data stage? */ td->urb->actual_length = td->urb->transfer_buffer_length - - TRB_LEN(le32_to_cpu(event->transfer_len)); + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); xhci_dbg(xhci, "Waiting for status " "stage event\n"); return 0; @@ -2096,7 +2112,7 @@ /* handle completion code */ switch (trb_comp_code) { case COMP_SUCCESS: - if (TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) { + if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) { frame->status = 0; break; } @@ -2141,7 +2157,7 @@ len += TRB_LEN(le32_to_cpu(cur_trb->generic.field[2])); } len += TRB_LEN(le32_to_cpu(cur_trb->generic.field[2])) - - TRB_LEN(le32_to_cpu(event->transfer_len)); + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); if (trb_comp_code != COMP_STOP_INVAL) { frame->actual_length = len; @@ -2199,7 +2215,7 @@ case COMP_SUCCESS: /* Double check that the HW transferred everything. */ if (event_trb != td->last_trb || - TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) { + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) { xhci_warn(xhci, "WARN Successful completion " "on short TX\n"); if (td->urb->transfer_flags & URB_SHORT_NOT_OK) @@ -2227,18 +2243,18 @@ "%d bytes untransferred\n", td->urb->ep->desc.bEndpointAddress, td->urb->transfer_buffer_length, - TRB_LEN(le32_to_cpu(event->transfer_len))); + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len))); /* Fast path - was this the last TRB in the TD for this URB? */ if (event_trb == td->last_trb) { - if (TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) { + if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) { td->urb->actual_length = td->urb->transfer_buffer_length - - TRB_LEN(le32_to_cpu(event->transfer_len)); + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); if (td->urb->transfer_buffer_length < td->urb->actual_length) { xhci_warn(xhci, "HC gave bad length " "of %d bytes left\n", - TRB_LEN(le32_to_cpu(event->transfer_len))); + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len))); td->urb->actual_length = 0; if (td->urb->transfer_flags & URB_SHORT_NOT_OK) *status = -EREMOTEIO; @@ -2280,7 +2296,7 @@ if (trb_comp_code != COMP_STOP_INVAL) td->urb->actual_length += TRB_LEN(le32_to_cpu(cur_trb->generic.field[2])) - - TRB_LEN(le32_to_cpu(event->transfer_len)); + EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); } return finish_td(xhci, td, event_trb, event, ep, status, false); @@ -2368,7 +2384,7 @@ * transfer type */ case COMP_SUCCESS: - if (TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) + if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) break; if (xhci->quirks & XHCI_TRUST_TX_LENGTH) trb_comp_code = COMP_SHORT_TX; @@ -2461,14 +2477,21 @@ * TD list. */ if (list_empty(&ep_ring->td_list)) { - xhci_warn(xhci, "WARN Event TRB for slot %d ep %d " - "with no TDs queued?\n", - TRB_TO_SLOT_ID(le32_to_cpu(event->flags)), - ep_index); - xhci_dbg(xhci, "Event TRB with TRB type ID %u\n", - (le32_to_cpu(event->flags) & - TRB_TYPE_BITMASK)>>10); - xhci_print_trb_offsets(xhci, (union xhci_trb *) event); + /* + * A stopped endpoint may generate an extra completion + * event if the device was suspended. Don't print + * warnings. + */ + if (!(trb_comp_code == COMP_STOP || + trb_comp_code == COMP_STOP_INVAL)) { + xhci_warn(xhci, "WARN Event TRB for slot %d ep %d with no TDs queued?\n", + TRB_TO_SLOT_ID(le32_to_cpu(event->flags)), + ep_index); + xhci_dbg(xhci, "Event TRB with TRB type ID %u\n", + (le32_to_cpu(event->flags) & + TRB_TYPE_BITMASK)>>10); + xhci_print_trb_offsets(xhci, (union xhci_trb *) event); + } if (ep->skip) { ep->skip = false; xhci_dbg(xhci, "td_list is empty while skip " --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-q.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-q.c @@ -135,7 +135,7 @@ * qtd is updated in qh_completions(). Update the QH * overlay here. */ - if (cpu_to_hc32(ehci, qtd->qtd_dma) == qh->hw->hw_current) { + if (qh->hw->hw_token & ACTIVE_BIT(ehci)) { qh->hw->hw_qtd_next = qtd->hw_next; qtd = NULL; } @@ -449,11 +449,19 @@ else if (last_status == -EINPROGRESS && !urb->unlinked) continue; - /* qh unlinked; token in overlay may be most current */ - if (state == QH_STATE_IDLE - && cpu_to_hc32(ehci, qtd->qtd_dma) - == hw->hw_current) { + /* + * If this was the active qtd when the qh was unlinked + * and the overlay's token is active, then the overlay + * hasn't been written back to the qtd yet so use its + * token instead of the qtd's. After the qtd is + * processed and removed, the overlay won't be valid + * any more. + */ + if (state == QH_STATE_IDLE && + qh->qtd_list.next == &qtd->qtd_list && + (hw->hw_token & ACTIVE_BIT(ehci))) { token = hc32_to_cpu(ehci, hw->hw_token); + hw->hw_token &= ~ACTIVE_BIT(ehci); /* An unlink may leave an incomplete * async transaction in the TT buffer. @@ -1170,7 +1178,7 @@ struct ehci_qh *prev; /* Add to the end of the list of QHs waiting for the next IAAD */ - qh->qh_state = QH_STATE_UNLINK; + qh->qh_state = QH_STATE_UNLINK_WAIT; if (ehci->async_unlink) ehci->async_unlink_last->unlink_next = qh; else @@ -1213,9 +1221,19 @@ /* Do only the first waiting QH (nVidia bug?) */ qh = ehci->async_unlink; - ehci->async_iaa = qh; - ehci->async_unlink = qh->unlink_next; - qh->unlink_next = NULL; + + /* + * Intel (?) bug: The HC can write back the overlay region + * even after the IAA interrupt occurs. In self-defense, + * always go through two IAA cycles for each QH. + */ + if (qh->qh_state == QH_STATE_UNLINK_WAIT) { + qh->qh_state = QH_STATE_UNLINK; + } else { + ehci->async_iaa = qh; + ehci->async_unlink = qh->unlink_next; + qh->unlink_next = NULL; + } /* Make sure the unlinks are all visible to the hardware */ wmb(); @@ -1298,6 +1316,19 @@ } } +/* The root hub is suspended; unlink all the async QHs */ +static void unlink_empty_async_suspended(struct ehci_hcd *ehci) +{ + struct ehci_qh *qh; + + while (ehci->async->qh_next.qh) { + qh = ehci->async->qh_next.qh; + WARN_ON(!list_empty(&qh->qtd_list)); + single_unlink_async(ehci, qh); + } + start_iaa_cycle(ehci, false); +} + /* makes sure the async qh will become idle */ /* caller must own ehci->lock */ --- linux-lts-raring-3.8.0.orig/drivers/usb/host/uhci-pci.c +++ linux-lts-raring-3.8.0/drivers/usb/host/uhci-pci.c @@ -293,7 +293,7 @@ .remove = usb_hcd_pci_remove, .shutdown = uhci_shutdown, -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_PM .driver = { .pm = &usb_hcd_pci_pm_ops }, --- linux-lts-raring-3.8.0.orig/drivers/usb/host/ehci-timer.c +++ linux-lts-raring-3.8.0/drivers/usb/host/ehci-timer.c @@ -113,15 +113,14 @@ if (want != actual) { - /* Poll again later */ - ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true); - ++ehci->ASS_poll_count; - return; + /* Poll again later, but give up after about 20 ms */ + if (ehci->ASS_poll_count++ < 20) { + ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true); + return; + } + ehci_dbg(ehci, "Waited too long for the async schedule status (%x/%x), giving up\n", + want, actual); } - - if (ehci->ASS_poll_count > 20) - ehci_dbg(ehci, "ASS poll count reached %d\n", - ehci->ASS_poll_count); ehci->ASS_poll_count = 0; /* The status is up-to-date; restart or stop the schedule as needed */ @@ -160,14 +159,14 @@ if (want != actual) { - /* Poll again later */ - ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true); - return; + /* Poll again later, but give up after about 20 ms */ + if (ehci->PSS_poll_count++ < 20) { + ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true); + return; + } + ehci_dbg(ehci, "Waited too long for the periodic schedule status (%x/%x), giving up\n", + want, actual); } - - if (ehci->PSS_poll_count > 20) - ehci_dbg(ehci, "PSS poll count reached %d\n", - ehci->PSS_poll_count); ehci->PSS_poll_count = 0; /* The status is up-to-date; restart or stop the schedule as needed */ @@ -305,7 +304,7 @@ * (a) SMP races against real IAA firing and retriggering, and * (b) clean HC shutdown, when IAA watchdog was pending. */ - if (ehci->async_iaa) { + if (1) { u32 cmd, status; /* If we get here, IAA is *REALLY* late. It's barely --- linux-lts-raring-3.8.0.orig/drivers/usb/host/uhci-hub.c +++ linux-lts-raring-3.8.0/drivers/usb/host/uhci-hub.c @@ -225,7 +225,8 @@ /* auto-stop if nothing connected for 1 second */ if (any_ports_active(uhci)) uhci->rh_state = UHCI_RH_RUNNING; - else if (time_after_eq(jiffies, uhci->auto_stop_time)) + else if (time_after_eq(jiffies, uhci->auto_stop_time) && + !uhci->wait_for_hp) suspend_rh(uhci, UHCI_RH_AUTO_STOPPED); break; --- linux-lts-raring-3.8.0.orig/drivers/usb/chipidea/Kconfig +++ linux-lts-raring-3.8.0/drivers/usb/chipidea/Kconfig @@ -20,7 +20,7 @@ config USB_CHIPIDEA_HOST bool "ChipIdea host controller" depends on USB=y || USB=USB_CHIPIDEA - depends on USB_EHCI_HCD + depends on USB_EHCI_HCD=y select USB_EHCI_ROOT_HUB_TT help Say Y here to enable host controller functionality of the --- linux-lts-raring-3.8.0.orig/drivers/usb/chipidea/udc.c +++ linux-lts-raring-3.8.0/drivers/usb/chipidea/udc.c @@ -461,6 +461,8 @@ mReq->ptr->page[i] = (mReq->req.dma + i * CI13XXX_PAGE_SIZE) & ~TD_RESERVED_MASK; + wmb(); + if (!list_empty(&mEp->qh.queue)) { struct ci13xxx_req *mReqPrev; int n = hw_ep_bit(mEp->num, mEp->dir); @@ -561,6 +563,12 @@ struct ci13xxx_req *mReq = \ list_entry(mEp->qh.queue.next, struct ci13xxx_req, queue); + + if (mReq->zptr) { + dma_pool_free(mEp->td_pool, mReq->zptr, mReq->zdma); + mReq->zptr = NULL; + } + list_del_init(&mReq->queue); mReq->req.status = -ESHUTDOWN; --- linux-lts-raring-3.8.0.orig/drivers/usb/chipidea/udc.h +++ linux-lts-raring-3.8.0/drivers/usb/chipidea/udc.h @@ -40,7 +40,7 @@ #define TD_CURR_OFFSET (0x0FFFUL << 0) #define TD_FRAME_NUM (0x07FFUL << 0) #define TD_RESERVED_MASK (0x0FFFUL << 0) -} __attribute__ ((packed)); +} __attribute__ ((packed, aligned(4))); /* DMA layout of queue heads */ struct ci13xxx_qh { @@ -57,7 +57,7 @@ /* 9 */ u32 RESERVED; struct usb_ctrlrequest setup; -} __attribute__ ((packed)); +} __attribute__ ((packed, aligned(4))); /** * struct ci13xxx_req - usb request representation --- linux-lts-raring-3.8.0.orig/drivers/usb/class/cdc-acm.c +++ linux-lts-raring-3.8.0/drivers/usb/class/cdc-acm.c @@ -600,7 +600,6 @@ dev_dbg(&acm->control->dev, "%s\n", __func__); - tty_unregister_device(acm_tty_driver, acm->minor); acm_release_minor(acm); usb_put_intf(acm->control); kfree(acm->country_codes); @@ -1418,6 +1417,8 @@ stop_data_traffic(acm); + tty_unregister_device(acm_tty_driver, acm->minor); + usb_free_urb(acm->ctrlurb); for (i = 0; i < ACM_NW; i++) usb_free_urb(acm->wb[i].urb); --- linux-lts-raring-3.8.0.orig/drivers/usb/class/cdc-wdm.c +++ linux-lts-raring-3.8.0/drivers/usb/class/cdc-wdm.c @@ -56,6 +56,7 @@ #define WDM_RESPONDING 7 #define WDM_SUSPENDING 8 #define WDM_RESETTING 9 +#define WDM_OVERFLOW 10 #define WDM_MAX 16 @@ -155,6 +156,7 @@ { struct wdm_device *desc = urb->context; int status = urb->status; + int length = urb->actual_length; spin_lock(&desc->iuspin); clear_bit(WDM_RESPONDING, &desc->flags); @@ -185,9 +187,17 @@ } desc->rerr = status; - desc->reslength = urb->actual_length; - memmove(desc->ubuf + desc->length, desc->inbuf, desc->reslength); - desc->length += desc->reslength; + if (length + desc->length > desc->wMaxCommand) { + /* The buffer would overflow */ + set_bit(WDM_OVERFLOW, &desc->flags); + } else { + /* we may already be in overflow */ + if (!test_bit(WDM_OVERFLOW, &desc->flags)) { + memmove(desc->ubuf + desc->length, desc->inbuf, length); + desc->length += length; + desc->reslength = length; + } + } skip_error: wake_up(&desc->wait); @@ -198,6 +208,7 @@ static void wdm_int_callback(struct urb *urb) { int rv = 0; + int responding; int status = urb->status; struct wdm_device *desc; struct usb_cdc_notification *dr; @@ -251,8 +262,8 @@ spin_lock(&desc->iuspin); clear_bit(WDM_READ, &desc->flags); - set_bit(WDM_RESPONDING, &desc->flags); - if (!test_bit(WDM_DISCONNECTING, &desc->flags) + responding = test_and_set_bit(WDM_RESPONDING, &desc->flags); + if (!responding && !test_bit(WDM_DISCONNECTING, &desc->flags) && !test_bit(WDM_SUSPENDING, &desc->flags)) { rv = usb_submit_urb(desc->response, GFP_ATOMIC); dev_dbg(&desc->intf->dev, "%s: usb_submit_urb %d", @@ -435,6 +446,11 @@ rv = -ENODEV; goto err; } + if (test_bit(WDM_OVERFLOW, &desc->flags)) { + clear_bit(WDM_OVERFLOW, &desc->flags); + rv = -ENOBUFS; + goto err; + } i++; if (file->f_flags & O_NONBLOCK) { if (!test_bit(WDM_READ, &desc->flags)) { @@ -478,6 +494,7 @@ spin_unlock_irq(&desc->iuspin); goto retry; } + if (!desc->reslength) { /* zero length read */ dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__); clear_bit(WDM_READ, &desc->flags); @@ -650,16 +667,20 @@ { struct wdm_device *desc = container_of(work, struct wdm_device, rxwork); unsigned long flags; - int rv; + int rv = 0; + int responding; spin_lock_irqsave(&desc->iuspin, flags); if (test_bit(WDM_DISCONNECTING, &desc->flags)) { spin_unlock_irqrestore(&desc->iuspin, flags); } else { + responding = test_and_set_bit(WDM_RESPONDING, &desc->flags); spin_unlock_irqrestore(&desc->iuspin, flags); - rv = usb_submit_urb(desc->response, GFP_KERNEL); + if (!responding) + rv = usb_submit_urb(desc->response, GFP_KERNEL); if (rv < 0 && rv != -EPERM) { spin_lock_irqsave(&desc->iuspin, flags); + clear_bit(WDM_RESPONDING, &desc->flags); if (!test_bit(WDM_DISCONNECTING, &desc->flags)) schedule_work(&desc->rxwork); spin_unlock_irqrestore(&desc->iuspin, flags); @@ -1004,6 +1025,7 @@ struct wdm_device *desc = wdm_find_device(intf); int rv; + clear_bit(WDM_OVERFLOW, &desc->flags); clear_bit(WDM_RESETTING, &desc->flags); rv = recover_from_urb_loss(desc); mutex_unlock(&desc->wlock); --- linux-lts-raring-3.8.0.orig/drivers/usb/gadget/f_fs.c +++ linux-lts-raring-3.8.0/drivers/usb/gadget/f_fs.c @@ -1036,37 +1036,19 @@ struct ffs_file_perms perms; umode_t root_mode; const char *dev_name; - union { - /* set by ffs_fs_mount(), read by ffs_sb_fill() */ - void *private_data; - /* set by ffs_sb_fill(), read by ffs_fs_mount */ - struct ffs_data *ffs_data; - }; + struct ffs_data *ffs_data; }; static int ffs_sb_fill(struct super_block *sb, void *_data, int silent) { struct ffs_sb_fill_data *data = _data; struct inode *inode; - struct ffs_data *ffs; + struct ffs_data *ffs = data->ffs_data; ENTER(); - /* Initialise data */ - ffs = ffs_data_new(); - if (unlikely(!ffs)) - goto Enomem; - ffs->sb = sb; - ffs->dev_name = kstrdup(data->dev_name, GFP_KERNEL); - if (unlikely(!ffs->dev_name)) - goto Enomem; - ffs->file_perms = data->perms; - ffs->private_data = data->private_data; - - /* used by the caller of this function */ - data->ffs_data = ffs; - + data->ffs_data = NULL; sb->s_fs_info = ffs; sb->s_blocksize = PAGE_CACHE_SIZE; sb->s_blocksize_bits = PAGE_CACHE_SHIFT; @@ -1082,17 +1064,14 @@ &data->perms); sb->s_root = d_make_root(inode); if (unlikely(!sb->s_root)) - goto Enomem; + return -ENOMEM; /* EP0 file */ if (unlikely(!ffs_sb_create_file(sb, "ep0", ffs, &ffs_ep0_operations, NULL))) - goto Enomem; + return -ENOMEM; return 0; - -Enomem: - return -ENOMEM; } static int ffs_fs_parse_opts(struct ffs_sb_fill_data *data, char *opts) @@ -1196,6 +1175,7 @@ struct dentry *rv; int ret; void *ffs_dev; + struct ffs_data *ffs; ENTER(); @@ -1203,18 +1183,30 @@ if (unlikely(ret < 0)) return ERR_PTR(ret); + ffs = ffs_data_new(); + if (unlikely(!ffs)) + return ERR_PTR(-ENOMEM); + ffs->file_perms = data.perms; + + ffs->dev_name = kstrdup(dev_name, GFP_KERNEL); + if (unlikely(!ffs->dev_name)) { + ffs_data_put(ffs); + return ERR_PTR(-ENOMEM); + } + ffs_dev = functionfs_acquire_dev_callback(dev_name); - if (IS_ERR(ffs_dev)) - return ffs_dev; + if (IS_ERR(ffs_dev)) { + ffs_data_put(ffs); + return ERR_CAST(ffs_dev); + } + ffs->private_data = ffs_dev; + data.ffs_data = ffs; - data.dev_name = dev_name; - data.private_data = ffs_dev; rv = mount_nodev(t, flags, &data, ffs_sb_fill); - - /* data.ffs_data is set by ffs_sb_fill */ - if (IS_ERR(rv)) + if (IS_ERR(rv) && data.ffs_data) { functionfs_release_dev_callback(data.ffs_data); - + ffs_data_put(data.ffs_data); + } return rv; } --- linux-lts-raring-3.8.0.orig/drivers/usb/gadget/g_ffs.c +++ linux-lts-raring-3.8.0/drivers/usb/gadget/g_ffs.c @@ -357,7 +357,7 @@ goto error; gfs_dev_desc.iProduct = gfs_strings[USB_GADGET_PRODUCT_IDX].id; - for (i = func_num; --i; ) { + for (i = func_num; i--; ) { ret = functionfs_bind(ffs_tab[i].ffs_data, cdev); if (unlikely(ret < 0)) { while (++i < func_num) @@ -413,7 +413,7 @@ gether_cleanup(); gfs_ether_setup = false; - for (i = func_num; --i; ) + for (i = func_num; i--; ) if (ffs_tab[i].ffs_data) functionfs_unbind(ffs_tab[i].ffs_data); --- linux-lts-raring-3.8.0.orig/drivers/usb/gadget/dummy_hcd.c +++ linux-lts-raring-3.8.0/drivers/usb/gadget/dummy_hcd.c @@ -924,8 +924,9 @@ struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g); struct dummy *dum = dum_hcd->dum; - dev_dbg(udc_dev(dum), "unregister gadget driver '%s'\n", - driver->driver.name); + if (driver) + dev_dbg(udc_dev(dum), "unregister gadget driver '%s'\n", + driver->driver.name); dum->gadget.dev.driver = NULL; dum->driver = NULL; @@ -1016,10 +1017,10 @@ { struct dummy *dum = platform_get_drvdata(pdev); - usb_del_gadget_udc(&dum->gadget); platform_set_drvdata(pdev, NULL); device_remove_file(&dum->gadget.dev, &dev_attr_function); device_unregister(&dum->gadget.dev); + usb_del_gadget_udc(&dum->gadget); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/usb/gadget/f_mass_storage.c +++ linux-lts-raring-3.8.0/drivers/usb/gadget/f_mass_storage.c @@ -427,6 +427,7 @@ /* Caller must hold fsg->lock */ static void wakeup_thread(struct fsg_common *common) { + smp_wmb(); /* ensure the write of bh->state is complete */ /* Tell the main thread that something has happened */ common->thread_wakeup_needed = 1; if (common->thread_task) @@ -646,6 +647,7 @@ } __set_current_state(TASK_RUNNING); common->thread_wakeup_needed = 0; + smp_rmb(); /* ensure the latest bh->state is visible */ return rc; } --- linux-lts-raring-3.8.0.orig/drivers/usb/gadget/udc-core.c +++ linux-lts-raring-3.8.0/drivers/usb/gadget/udc-core.c @@ -265,7 +265,7 @@ usb_gadget_disconnect(udc->gadget); udc->driver->disconnect(udc->gadget); udc->driver->unbind(udc->gadget); - usb_gadget_udc_stop(udc->gadget, udc->driver); + usb_gadget_udc_stop(udc->gadget, NULL); } else { usb_gadget_stop(udc->gadget, udc->driver); } --- linux-lts-raring-3.8.0.orig/drivers/usb/dwc3/dwc3-pci.c +++ linux-lts-raring-3.8.0/drivers/usb/dwc3/dwc3-pci.c @@ -50,6 +50,8 @@ /* FIXME define these in */ #define PCI_VENDOR_ID_SYNOPSYS 0x16c3 #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd +#define PCI_DEVICE_ID_INTEL_BYT 0x0f37 +#define PCI_DEVICE_ID_INTEL_MRFLD 0x119e struct dwc3_pci { struct device *dev; @@ -198,9 +200,9 @@ { struct dwc3_pci *glue = pci_get_drvdata(pci); + platform_device_unregister(glue->dwc3); platform_device_unregister(glue->usb2_phy); platform_device_unregister(glue->usb3_phy); - platform_device_unregister(glue->dwc3); pci_set_drvdata(pci, NULL); pci_disable_device(pci); } @@ -210,6 +212,8 @@ PCI_DEVICE(PCI_VENDOR_ID_SYNOPSYS, PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3), }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MRFLD), }, { } /* Terminating Entry */ }; MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table); --- linux-lts-raring-3.8.0.orig/drivers/usb/dwc3/core.c +++ linux-lts-raring-3.8.0/drivers/usb/dwc3/core.c @@ -575,6 +575,7 @@ break; } + dwc3_free_event_buffers(dwc); dwc3_core_exit(dwc); return 0; --- linux-lts-raring-3.8.0.orig/drivers/usb/dwc3/core.h +++ linux-lts-raring-3.8.0/drivers/usb/dwc3/core.h @@ -405,7 +405,6 @@ * @number: endpoint number (1 - 15) * @type: set to bmAttributes & USB_ENDPOINT_XFERTYPE_MASK * @resource_index: Resource transfer index - * @current_uf: Current uf received through last event parameter * @interval: the intervall on which the ISOC transfer is started * @name: a human readable name e.g. ep1out-bulk * @direction: true for TX, false for RX @@ -439,7 +438,6 @@ u8 number; u8 type; u8 resource_index; - u16 current_uf; u32 interval; char name[20]; @@ -732,8 +730,8 @@ struct dwc3_event_type { u32 is_devspec:1; - u32 type:6; - u32 reserved8_31:25; + u32 type:7; + u32 reserved8_31:24; } __packed; #define DWC3_DEPEVT_XFERCOMPLETE 0x01 --- linux-lts-raring-3.8.0.orig/drivers/usb/dwc3/gadget.c +++ linux-lts-raring-3.8.0/drivers/usb/dwc3/gadget.c @@ -256,6 +256,7 @@ if (((dep->busy_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && usb_endpoint_xfer_isoc(dep->endpoint.desc)) dep->busy_slot++; + req->queued = false; } list_del(&req->list); req->trb = NULL; @@ -754,21 +755,18 @@ struct dwc3 *dwc = dep->dwc; struct dwc3_trb *trb; - unsigned int cur_slot; - dev_vdbg(dwc->dev, "%s: req %p dma %08llx length %d%s%s\n", dep->name, req, (unsigned long long) dma, length, last ? " last" : "", chain ? " chain" : ""); - trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK]; - cur_slot = dep->free_slot; - dep->free_slot++; - /* Skip the LINK-TRB on ISOC */ - if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && + if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) && usb_endpoint_xfer_isoc(dep->endpoint.desc)) - return; + dep->free_slot++; + + trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK]; + dep->free_slot++; if (!req->trb) { dwc3_gadget_move_request_queued(req); @@ -1091,7 +1089,10 @@ * notion of current microframe. */ if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { - dwc3_stop_active_transfer(dwc, dep->number); + if (list_empty(&dep->req_queued)) { + dwc3_stop_active_transfer(dwc, dep->number); + dep->flags = DWC3_EP_ENABLED; + } return 0; } @@ -1117,16 +1118,6 @@ dep->name); } - /* - * 3. Missed ISOC Handling. We need to start isoc transfer on the saved - * uframe number. - */ - if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && - (dep->flags & DWC3_EP_MISSED_ISOC)) { - __dwc3_gadget_start_isoc(dwc, dep, dep->current_uf); - dep->flags &= ~DWC3_EP_MISSED_ISOC; - } - return 0; } @@ -1544,6 +1535,7 @@ __dwc3_gadget_ep_disable(dwc->eps[0]); err0: + dwc->gadget_driver = NULL; spin_unlock_irqrestore(&dwc->lock, flags); return ret; @@ -1637,10 +1629,20 @@ for (epnum = 0; epnum < DWC3_ENDPOINTS_NUM; epnum++) { dep = dwc->eps[epnum]; - dwc3_free_trb_pool(dep); - if (epnum != 0 && epnum != 1) + /* + * Physical endpoints 0 and 1 are special; they form the + * bi-directional USB endpoint 0. + * + * For those two physical endpoints, we don't allocate a TRB + * pool nor do we add them the endpoints list. Due to that, we + * shouldn't do these two operations otherwise we would end up + * with all sorts of bugs when removing dwc3.ko. + */ + if (epnum != 0 && epnum != 1) { + dwc3_free_trb_pool(dep); list_del(&dep->endpoint.ep_list); + } kfree(dep); } @@ -1689,14 +1691,29 @@ if (trb_status == DWC3_TRBSTS_MISSED_ISOC) { dev_dbg(dwc->dev, "incomplete IN transfer %s\n", dep->name); - dep->current_uf = event->parameters & - ~(dep->interval - 1); + /* + * If missed isoc occurred and there is + * no request queued then issue END + * TRANSFER, so that core generates + * next xfernotready and we will issue + * a fresh START TRANSFER. + * If there are still queued request + * then wait, do not issue either END + * or UPDATE TRANSFER, just attach next + * request in request_list during + * giveback.If any future queued request + * is successfully transferred then we + * will issue UPDATE TRANSFER for all + * request in the request_list. + */ dep->flags |= DWC3_EP_MISSED_ISOC; } else { dev_err(dwc->dev, "incomplete IN transfer %s\n", dep->name); status = -ECONNRESET; } + } else { + dep->flags &= ~DWC3_EP_MISSED_ISOC; } } else { if (count && (event->status & DEPEVT_STATUS_SHORT)) @@ -1723,6 +1740,23 @@ break; } while (1); + if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && + list_empty(&dep->req_queued)) { + if (list_empty(&dep->request_list)) { + /* + * If there is no entry in request list then do + * not issue END TRANSFER now. Just set PENDING + * flag, so that END TRANSFER is issued when an + * entry is added into request list. + */ + dep->flags = DWC3_EP_PENDING_REQUEST; + } else { + dwc3_stop_active_transfer(dwc, dep->number); + dep->flags = DWC3_EP_ENABLED; + } + return 1; + } + if ((event->status & DEPEVT_STATUS_IOC) && (trb->ctrl & DWC3_TRB_CTRL_IOC)) return 0; @@ -2157,6 +2191,26 @@ break; } + /* Enable USB2 LPM Capability */ + + if ((dwc->revision > DWC3_REVISION_194A) + && (speed != DWC3_DCFG_SUPERSPEED)) { + reg = dwc3_readl(dwc->regs, DWC3_DCFG); + reg |= DWC3_DCFG_LPM_CAP; + dwc3_writel(dwc->regs, DWC3_DCFG, reg); + + reg = dwc3_readl(dwc->regs, DWC3_DCTL); + reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN); + + /* + * TODO: This should be configurable. For now using + * maximum allowed HIRD threshold value of 0b1100 + */ + reg |= DWC3_DCTL_HIRD_THRES(12); + + dwc3_writel(dwc->regs, DWC3_DCTL, reg); + } + /* Recent versions support automatic phy suspend and don't need this */ if (dwc->revision < DWC3_REVISION_194A) { /* Suspend unneeded PHY */ @@ -2463,20 +2517,8 @@ DWC3_DEVTEN_DISCONNEVTEN); dwc3_writel(dwc->regs, DWC3_DEVTEN, reg); - /* Enable USB2 LPM and automatic phy suspend only on recent versions */ + /* automatic phy suspend only on recent versions */ if (dwc->revision >= DWC3_REVISION_194A) { - reg = dwc3_readl(dwc->regs, DWC3_DCFG); - reg |= DWC3_DCFG_LPM_CAP; - dwc3_writel(dwc->regs, DWC3_DCFG, reg); - - reg = dwc3_readl(dwc->regs, DWC3_DCTL); - reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN); - - /* TODO: This should be configurable */ - reg |= DWC3_DCTL_HIRD_THRES(28); - - dwc3_writel(dwc->regs, DWC3_DCTL, reg); - dwc3_gadget_usb2_phy_suspend(dwc, false); dwc3_gadget_usb3_phy_suspend(dwc, false); } --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/cypress_m8.h +++ linux-lts-raring-3.8.0/drivers/usb/serial/cypress_m8.h @@ -24,6 +24,10 @@ #define VENDOR_ID_CYPRESS 0x04b4 #define PRODUCT_ID_CYPHIDCOM 0x5500 +/* FRWD Dongle - a GPS sports watch */ +#define VENDOR_ID_FRWD 0x6737 +#define PRODUCT_ID_CYPHIDCOM_FRWD 0x0001 + /* Powercom UPS, chip CY7C63723 */ #define VENDOR_ID_POWERCOM 0x0d9f #define PRODUCT_ID_UPS 0x0002 --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/mos7840.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/mos7840.c @@ -183,7 +183,10 @@ #define LED_ON_MS 500 #define LED_OFF_MS 500 -static int device_type; +enum mos7840_flag { + MOS7840_FLAG_CTRL_BUSY, + MOS7840_FLAG_LED_BUSY, +}; static const struct usb_device_id id_table[] = { {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, @@ -219,7 +222,6 @@ char open; char open_ports; wait_queue_head_t wait_chase; /* for handling sleeping while waiting for chase to finish */ - wait_queue_head_t delta_msr_wait; /* for handling sleeping while waiting for msr change to happen */ int delta_msr_cond; struct async_icount icount; struct usb_serial_port *port; /* loop back to the owner of this object */ @@ -241,9 +243,12 @@ /* For device(s) with LED indicator */ bool has_led; - bool led_flag; struct timer_list led_timer1; /* Timer for LED on */ struct timer_list led_timer2; /* Timer for LED off */ + struct urb *led_urb; + struct usb_ctrlrequest *led_dr; + + unsigned long flags; }; /* @@ -423,6 +428,9 @@ icount->rng++; smp_wmb(); } + + mos7840_port->delta_msr_cond = 1; + wake_up_interruptible(&port->port->delta_msr_wait); } } @@ -485,10 +493,10 @@ case -ESHUTDOWN: /* this urb is terminated, clean up */ dev_dbg(dev, "%s - urb shutting down with status: %d\n", __func__, status); - return; + goto out; default: dev_dbg(dev, "%s - nonzero urb status received: %d\n", __func__, status); - return; + goto out; } dev_dbg(dev, "%s urb buffer size is %d\n", __func__, urb->actual_length); @@ -501,6 +509,8 @@ mos7840_handle_new_msr(mos7840_port, regval); else if (mos7840_port->MsrLsr == 1) mos7840_handle_new_lsr(mos7840_port, regval); +out: + clear_bit_unlock(MOS7840_FLAG_CTRL_BUSY, &mos7840_port->flags); } static int mos7840_get_reg(struct moschip_port *mcs, __u16 Wval, __u16 reg, @@ -511,6 +521,9 @@ unsigned char *buffer = mcs->ctrl_buf; int ret; + if (test_and_set_bit_lock(MOS7840_FLAG_CTRL_BUSY, &mcs->flags)) + return -EBUSY; + dr->bRequestType = MCS_RD_RTYPE; dr->bRequest = MCS_RDREQ; dr->wValue = cpu_to_le16(Wval); /* 0 */ @@ -522,6 +535,9 @@ mos7840_control_callback, mcs); mcs->control_urb->transfer_buffer_length = 2; ret = usb_submit_urb(mcs->control_urb, GFP_ATOMIC); + if (ret) + clear_bit_unlock(MOS7840_FLAG_CTRL_BUSY, &mcs->flags); + return ret; } @@ -548,7 +564,7 @@ __u16 reg) { struct usb_device *dev = mcs->port->serial->dev; - struct usb_ctrlrequest *dr = mcs->dr; + struct usb_ctrlrequest *dr = mcs->led_dr; dr->bRequestType = MCS_WR_RTYPE; dr->bRequest = MCS_WRREQ; @@ -556,10 +572,10 @@ dr->wIndex = cpu_to_le16(reg); dr->wLength = cpu_to_le16(0); - usb_fill_control_urb(mcs->control_urb, dev, usb_sndctrlpipe(dev, 0), + usb_fill_control_urb(mcs->led_urb, dev, usb_sndctrlpipe(dev, 0), (unsigned char *)dr, NULL, 0, mos7840_set_led_callback, NULL); - usb_submit_urb(mcs->control_urb, GFP_ATOMIC); + usb_submit_urb(mcs->led_urb, GFP_ATOMIC); } static void mos7840_set_led_sync(struct usb_serial_port *port, __u16 reg, @@ -585,7 +601,19 @@ { struct moschip_port *mcs = (struct moschip_port *) arg; - mcs->led_flag = false; + clear_bit_unlock(MOS7840_FLAG_LED_BUSY, &mcs->flags); +} + +static void mos7840_led_activity(struct usb_serial_port *port) +{ + struct moschip_port *mos7840_port = usb_get_serial_port_data(port); + + if (test_and_set_bit_lock(MOS7840_FLAG_LED_BUSY, &mos7840_port->flags)) + return; + + mos7840_set_led_async(mos7840_port, 0x0301, MODEM_CONTROL_REGISTER); + mod_timer(&mos7840_port->led_timer1, + jiffies + msecs_to_jiffies(LED_ON_MS)); } /***************************************************************************** @@ -790,14 +818,8 @@ return; } - /* Turn on LED */ - if (mos7840_port->has_led && !mos7840_port->led_flag) { - mos7840_port->led_flag = true; - mos7840_set_led_async(mos7840_port, 0x0301, - MODEM_CONTROL_REGISTER); - mod_timer(&mos7840_port->led_timer1, - jiffies + msecs_to_jiffies(LED_ON_MS)); - } + if (mos7840_port->has_led) + mos7840_led_activity(port); mos7840_port->read_urb_busy = true; retval = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC); @@ -851,18 +873,6 @@ /************************************************************************/ /* D R I V E R T T Y I N T E R F A C E F U N C T I O N S */ /************************************************************************/ -#ifdef MCSSerialProbe -static int mos7840_serial_probe(struct usb_serial *serial, - const struct usb_device_id *id) -{ - - /*need to implement the mode_reg reading and updating\ - structures usb_serial_ device_type\ - (i.e num_ports, num_bulkin,bulkout etc) */ - /* Also we can update the changes attach */ - return 1; -} -#endif /***************************************************************************** * mos7840_open @@ -940,20 +950,20 @@ status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data); if (status < 0) { dev_dbg(&port->dev, "Reading Spreg failed\n"); - return -1; + goto err; } Data |= 0x80; status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); if (status < 0) { dev_dbg(&port->dev, "writing Spreg failed\n"); - return -1; + goto err; } Data &= ~0x80; status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); if (status < 0) { dev_dbg(&port->dev, "writing Spreg failed\n"); - return -1; + goto err; } /* End of block to be checked */ @@ -962,7 +972,7 @@ &Data); if (status < 0) { dev_dbg(&port->dev, "Reading Controlreg failed\n"); - return -1; + goto err; } Data |= 0x08; /* Driver done bit */ Data |= 0x20; /* rx_disable */ @@ -970,7 +980,7 @@ mos7840_port->ControlRegOffset, Data); if (status < 0) { dev_dbg(&port->dev, "writing Controlreg failed\n"); - return -1; + goto err; } /* do register settings here */ /* Set all regs to the device default values. */ @@ -981,21 +991,21 @@ status = mos7840_set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); if (status < 0) { dev_dbg(&port->dev, "disabling interrupts failed\n"); - return -1; + goto err; } /* Set FIFO_CONTROL_REGISTER to the default value */ Data = 0x00; status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); if (status < 0) { dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n"); - return -1; + goto err; } Data = 0xcf; status = mos7840_set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); if (status < 0) { dev_dbg(&port->dev, "Writing FIFO_CONTROL_REGISTER failed\n"); - return -1; + goto err; } Data = 0x03; @@ -1131,7 +1141,6 @@ /* initialize our wait queues */ init_waitqueue_head(&mos7840_port->wait_chase); - init_waitqueue_head(&mos7840_port->delta_msr_wait); /* initialize our icount structure */ memset(&(mos7840_port->icount), 0x00, sizeof(mos7840_port->icount)); @@ -1146,6 +1155,15 @@ mos7840_port->icount.rx = 0; return 0; +err: + for (j = 0; j < NUM_URBS; ++j) { + urb = mos7840_port->write_urb_pool[j]; + if (!urb) + continue; + kfree(urb->transfer_buffer); + usb_free_urb(urb); + } + return status; } /***************************************************************************** @@ -1507,13 +1525,8 @@ data1 = urb->transfer_buffer; dev_dbg(&port->dev, "bulkout endpoint is %d\n", port->bulk_out_endpointAddress); - /* Turn on LED */ - if (mos7840_port->has_led && !mos7840_port->led_flag) { - mos7840_port->led_flag = true; - mos7840_set_led_sync(port, MODEM_CONTROL_REGISTER, 0x0301); - mod_timer(&mos7840_port->led_timer1, - jiffies + msecs_to_jiffies(LED_ON_MS)); - } + if (mos7840_port->has_led) + mos7840_led_activity(port); /* send it down the pipe */ status = usb_submit_urb(urb, GFP_ATOMIC); @@ -2021,8 +2034,6 @@ mos7840_port->read_urb_busy = false; } } - wake_up(&mos7840_port->delta_msr_wait); - mos7840_port->delta_msr_cond = 1; dev_dbg(&port->dev, "%s - mos7840_port->shadowLCR is End %x\n", __func__, mos7840_port->shadowLCR); } @@ -2223,13 +2234,18 @@ while (1) { /* interruptible_sleep_on(&mos7840_port->delta_msr_wait); */ mos7840_port->delta_msr_cond = 0; - wait_event_interruptible(mos7840_port->delta_msr_wait, - (mos7840_port-> + wait_event_interruptible(port->delta_msr_wait, + (port->serial->disconnected || + mos7840_port-> delta_msr_cond == 1)); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + cnow = mos7840_port->icount; smp_rmb(); if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && @@ -2255,13 +2271,21 @@ static int mos7810_check(struct usb_serial *serial) { int i, pass_count = 0; + u8 *buf; __u16 data = 0, mcr_data = 0; __u16 test_pattern = 0x55AA; + int res; + + buf = kmalloc(VENDOR_READ_LENGTH, GFP_KERNEL); + if (!buf) + return 0; /* failed to identify 7810 */ /* Store MCR setting */ - usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), + res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), MCS_RDREQ, MCS_RD_RTYPE, 0x0300, MODEM_CONTROL_REGISTER, - &mcr_data, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); + buf, VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); + if (res == VENDOR_READ_LENGTH) + mcr_data = *buf; for (i = 0; i < 16; i++) { /* Send the 1-bit test pattern out to MCS7810 test pin */ @@ -2271,9 +2295,12 @@ MODEM_CONTROL_REGISTER, NULL, 0, MOS_WDR_TIMEOUT); /* Read the test pattern back */ - usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), - MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data, - VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); + res = usb_control_msg(serial->dev, + usb_rcvctrlpipe(serial->dev, 0), MCS_RDREQ, + MCS_RD_RTYPE, 0, GPIO_REGISTER, buf, + VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); + if (res == VENDOR_READ_LENGTH) + data = *buf; /* If this is a MCS7810 device, both test patterns must match */ if (((test_pattern >> i) ^ (~data >> 1)) & 0x0001) @@ -2287,38 +2314,56 @@ MCS_WR_RTYPE, 0x0300 | mcr_data, MODEM_CONTROL_REGISTER, NULL, 0, MOS_WDR_TIMEOUT); + kfree(buf); + if (pass_count == 16) return 1; return 0; } -static int mos7840_calc_num_ports(struct usb_serial *serial) +static int mos7840_probe(struct usb_serial *serial, + const struct usb_device_id *id) { - __u16 data = 0x00; - int mos7840_num_ports; + u16 product = le16_to_cpu(serial->dev->descriptor.idProduct); + u8 *buf; + int device_type; + + if (product == MOSCHIP_DEVICE_ID_7810 || + product == MOSCHIP_DEVICE_ID_7820) { + device_type = product; + goto out; + } + + buf = kzalloc(VENDOR_READ_LENGTH, GFP_KERNEL); + if (!buf) + return -ENOMEM; usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), - MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, &data, - VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); + MCS_RDREQ, MCS_RD_RTYPE, 0, GPIO_REGISTER, buf, + VENDOR_READ_LENGTH, MOS_WDR_TIMEOUT); - if (serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7810 || - serial->dev->descriptor.idProduct == MOSCHIP_DEVICE_ID_7820) { - device_type = serial->dev->descriptor.idProduct; - } else { - /* For a MCS7840 device GPIO0 must be set to 1 */ - if ((data & 0x01) == 1) - device_type = MOSCHIP_DEVICE_ID_7840; - else if (mos7810_check(serial)) - device_type = MOSCHIP_DEVICE_ID_7810; - else - device_type = MOSCHIP_DEVICE_ID_7820; - } + /* For a MCS7840 device GPIO0 must be set to 1 */ + if (buf[0] & 0x01) + device_type = MOSCHIP_DEVICE_ID_7840; + else if (mos7810_check(serial)) + device_type = MOSCHIP_DEVICE_ID_7810; + else + device_type = MOSCHIP_DEVICE_ID_7820; + + kfree(buf); +out: + usb_set_serial_data(serial, (void *)(unsigned long)device_type); + + return 0; +} + +static int mos7840_calc_num_ports(struct usb_serial *serial) +{ + int device_type = (unsigned long)usb_get_serial_data(serial); + int mos7840_num_ports; mos7840_num_ports = (device_type >> 4) & 0x000F; - serial->num_bulk_in = mos7840_num_ports; - serial->num_bulk_out = mos7840_num_ports; - serial->num_ports = mos7840_num_ports; return mos7840_num_ports; } @@ -2326,6 +2371,7 @@ static int mos7840_port_probe(struct usb_serial_port *port) { struct usb_serial *serial = port->serial; + int device_type = (unsigned long)usb_get_serial_data(serial); struct moschip_port *mos7840_port; int status; int pnum; @@ -2503,6 +2549,14 @@ if (device_type == MOSCHIP_DEVICE_ID_7810) { mos7840_port->has_led = true; + mos7840_port->led_urb = usb_alloc_urb(0, GFP_KERNEL); + mos7840_port->led_dr = kmalloc(sizeof(*mos7840_port->led_dr), + GFP_KERNEL); + if (!mos7840_port->led_urb || !mos7840_port->led_dr) { + status = -ENOMEM; + goto error; + } + init_timer(&mos7840_port->led_timer1); mos7840_port->led_timer1.function = mos7840_led_off; mos7840_port->led_timer1.expires = @@ -2515,8 +2569,6 @@ jiffies + msecs_to_jiffies(LED_OFF_MS); mos7840_port->led_timer2.data = (unsigned long)mos7840_port; - mos7840_port->led_flag = false; - /* Turn off LED */ mos7840_set_led_sync(port, MODEM_CONTROL_REGISTER, 0x0300); } @@ -2538,6 +2590,8 @@ } return 0; error: + kfree(mos7840_port->led_dr); + usb_free_urb(mos7840_port->led_urb); kfree(mos7840_port->dr); kfree(mos7840_port->ctrl_buf); usb_free_urb(mos7840_port->control_urb); @@ -2558,6 +2612,10 @@ del_timer_sync(&mos7840_port->led_timer1); del_timer_sync(&mos7840_port->led_timer2); + + usb_kill_urb(mos7840_port->led_urb); + usb_free_urb(mos7840_port->led_urb); + kfree(mos7840_port->led_dr); } usb_kill_urb(mos7840_port->control_urb); usb_free_urb(mos7840_port->control_urb); @@ -2584,9 +2642,7 @@ .throttle = mos7840_throttle, .unthrottle = mos7840_unthrottle, .calc_num_ports = mos7840_calc_num_ports, -#ifdef MCSSerialProbe - .probe = mos7840_serial_probe, -#endif + .probe = mos7840_probe, .ioctl = mos7840_ioctl, .set_termios = mos7840_set_termios, .break_ctl = mos7840_break, --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/iuu_phoenix.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/iuu_phoenix.c @@ -289,7 +289,7 @@ usb_bulk_msg(serial->dev, usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress), buf, - count, &actual, HZ * 1); + count, &actual, 1000); if (status != IUU_OPERATION_OK) dev_dbg(&port->dev, "%s - error = %2x\n", __func__, status); @@ -309,7 +309,7 @@ usb_bulk_msg(serial->dev, usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), buf, - count, &actual, HZ * 1); + count, &actual, 1000); if (status != IUU_OPERATION_OK) dev_dbg(&port->dev, "%s - error = %2x\n", __func__, status); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/pl2303.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/pl2303.c @@ -139,7 +139,6 @@ struct pl2303_private { spinlock_t lock; - wait_queue_head_t delta_msr_wait; u8 line_control; u8 line_status; }; @@ -233,7 +232,6 @@ return -ENOMEM; spin_lock_init(&priv->lock); - init_waitqueue_head(&priv->delta_msr_wait); usb_set_serial_port_data(port, priv); @@ -285,7 +283,7 @@ serial settings even to the same values as before. Thus we actually need to filter in this specific case */ - if (!tty_termios_hw_change(&tty->termios, old_termios)) + if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) return; cflag = tty->termios.c_cflag; @@ -294,7 +292,8 @@ if (!buf) { dev_err(&port->dev, "%s - out of memory.\n", __func__); /* Report back no change occurred */ - tty->termios = *old_termios; + if (old_termios) + tty->termios = *old_termios; return; } @@ -434,7 +433,7 @@ control = priv->line_control; if ((cflag & CBAUD) == B0) priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS); - else if ((old_termios->c_cflag & CBAUD) == B0) + else if (old_termios && (old_termios->c_cflag & CBAUD) == B0) priv->line_control |= (CONTROL_DTR | CONTROL_RTS); if (control != priv->line_control) { control = priv->line_control; @@ -493,7 +492,6 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) { - struct ktermios tmp_termios; struct usb_serial *serial = port->serial; struct pl2303_serial_private *spriv = usb_get_serial_data(serial); int result; @@ -509,7 +507,7 @@ /* Setup termios */ if (tty) - pl2303_set_termios(tty, port, &tmp_termios); + pl2303_set_termios(tty, port, NULL); result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); if (result) { @@ -607,11 +605,14 @@ spin_unlock_irqrestore(&priv->lock, flags); while (1) { - interruptible_sleep_on(&priv->delta_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->lock, flags); status = priv->line_status; spin_unlock_irqrestore(&priv->lock, flags); @@ -719,7 +720,7 @@ spin_unlock_irqrestore(&priv->lock, flags); if (priv->line_status & UART_BREAK_ERROR) usb_serial_handle_break(port); - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); tty = tty_port_tty_get(&port->port); if (!tty) @@ -784,7 +785,7 @@ line_status = priv->line_status; priv->line_status &= ~UART_STATE_TRANSIENT_MASK; spin_unlock_irqrestore(&priv->lock, flags); - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); if (!urb->actual_length) return; --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/io_ti.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/io_ti.c @@ -87,9 +87,6 @@ int close_pending; int lsr_event; struct async_icount icount; - wait_queue_head_t delta_msr_wait; /* for handling sleeping while - waiting for msr change to - happen */ struct edgeport_serial *edge_serial; struct usb_serial_port *port; __u8 bUartMode; /* Port type, 0: RS232, etc. */ @@ -1518,7 +1515,7 @@ icount->dcd++; if (msr & EDGEPORT_MSR_DELTA_RI) icount->rng++; - wake_up_interruptible(&edge_port->delta_msr_wait); + wake_up_interruptible(&edge_port->port->delta_msr_wait); } /* Save the new modem status */ @@ -1821,7 +1818,6 @@ dev = port->serial->dev; memset(&(edge_port->icount), 0x00, sizeof(edge_port->icount)); - init_waitqueue_head(&edge_port->delta_msr_wait); /* turn off loopback */ status = ti_do_config(edge_port, UMPC_SET_CLR_LOOPBACK, 0); @@ -2488,10 +2484,14 @@ dev_dbg(&port->dev, "%s - TIOCMIWAIT\n", __func__); cprev = edge_port->icount; while (1) { - interruptible_sleep_on(&edge_port->delta_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + cnow = edge_port->icount; if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) @@ -2702,6 +2702,7 @@ .set_termios = edge_set_termios, .tiocmget = edge_tiocmget, .tiocmset = edge_tiocmset, + .get_icount = edge_get_icount, .write = edge_write, .write_room = edge_write_room, .chars_in_buffer = edge_chars_in_buffer, --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/keyspan.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/keyspan.c @@ -1604,7 +1604,7 @@ d_details = s_priv->device_details; device_port = port->number - port->serial->minor; - outcont_urb = d_details->outcont_endpoints[port->number]; + outcont_urb = d_details->outcont_endpoints[device_port]; this_urb = p_priv->outcont_urb; dev_dbg(&port->dev, "%s - endpoint %d\n", __func__, usb_pipeendpoint(this_urb->pipe)); @@ -2370,7 +2370,7 @@ if (d_details == NULL) { dev_err(&serial->dev->dev, "%s - unknown product id %x\n", __func__, le16_to_cpu(serial->dev->descriptor.idProduct)); - return 1; + return -ENODEV; } /* Setup private data for serial driver */ --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/oti6858.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/oti6858.c @@ -188,7 +188,6 @@ u8 setup_done; struct delayed_work delayed_setup_work; - wait_queue_head_t intr_wait; struct usb_serial_port *port; /* USB port with which associated */ }; @@ -339,7 +338,6 @@ return -ENOMEM; spin_lock_init(&priv->lock); - init_waitqueue_head(&priv->intr_wait); priv->port = port; INIT_DELAYED_WORK(&priv->delayed_setup_work, setup_line); INIT_DELAYED_WORK(&priv->delayed_write_work, send_data); @@ -664,11 +662,15 @@ spin_unlock_irqrestore(&priv->lock, flags); while (1) { - wait_event_interruptible(priv->intr_wait, + wait_event_interruptible(port->delta_msr_wait, + port->serial->disconnected || priv->status.pin_state != prev); if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->lock, flags); status = priv->status.pin_state & PIN_MASK; spin_unlock_irqrestore(&priv->lock, flags); @@ -763,7 +765,7 @@ if (!priv->transient) { if (xs->pin_state != priv->status.pin_state) - wake_up_interruptible(&priv->intr_wait); + wake_up_interruptible(&port->delta_msr_wait); memcpy(&priv->status, xs, OTI6858_CTRL_PKT_SIZE); } --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/qcserial.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/qcserial.c @@ -35,7 +35,13 @@ {DEVICE_G1K(0x04da, 0x250c)}, /* Panasonic Gobi QDL device */ {DEVICE_G1K(0x413c, 0x8172)}, /* Dell Gobi Modem device */ {DEVICE_G1K(0x413c, 0x8171)}, /* Dell Gobi QDL device */ - {DEVICE_G1K(0x1410, 0xa001)}, /* Novatel Gobi Modem device */ + {DEVICE_G1K(0x1410, 0xa001)}, /* Novatel/Verizon USB-1000 */ + {DEVICE_G1K(0x1410, 0xa002)}, /* Novatel Gobi Modem device */ + {DEVICE_G1K(0x1410, 0xa003)}, /* Novatel Gobi Modem device */ + {DEVICE_G1K(0x1410, 0xa004)}, /* Novatel Gobi Modem device */ + {DEVICE_G1K(0x1410, 0xa005)}, /* Novatel Gobi Modem device */ + {DEVICE_G1K(0x1410, 0xa006)}, /* Novatel Gobi Modem device */ + {DEVICE_G1K(0x1410, 0xa007)}, /* Novatel Gobi Modem device */ {DEVICE_G1K(0x1410, 0xa008)}, /* Novatel Gobi QDL device */ {DEVICE_G1K(0x0b05, 0x1776)}, /* Asus Gobi Modem device */ {DEVICE_G1K(0x0b05, 0x1774)}, /* Asus Gobi QDL device */ @@ -118,6 +124,7 @@ {USB_DEVICE(0x1199, 0x901b)}, /* Sierra Wireless MC7770 */ {USB_DEVICE(0x12D1, 0x14F0)}, /* Sony Gobi 3000 QDL */ {USB_DEVICE(0x12D1, 0x14F1)}, /* Sony Gobi 3000 Composite */ + {USB_DEVICE(0x0AF0, 0x8120)}, /* Option GTM681W */ /* non Gobi Qualcomm serial devices */ {USB_DEVICE_INTERFACE_NUMBER(0x0f3d, 0x68a2, 0)}, /* Sierra Wireless MC7700 Device Management */ @@ -197,12 +204,15 @@ if (is_gobi1k) { /* Gobi 1K USB layout: - * 0: serial port (doesn't respond) + * 0: DM/DIAG (use libqcdm from ModemManager for communication) * 1: serial port (doesn't respond) * 2: AT-capable modem port * 3: QMI/net */ - if (ifnum == 2) + if (ifnum == 0) { + dev_dbg(dev, "Gobi 1K DM/DIAG interface found\n"); + altsetting = 1; + } else if (ifnum == 2) dev_dbg(dev, "Modem port found\n"); else altsetting = -1; --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/usb-serial.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/usb-serial.c @@ -151,6 +151,7 @@ } } + usb_put_intf(serial->interface); usb_put_dev(serial->dev); kfree(serial); } @@ -614,7 +615,7 @@ } serial->dev = usb_get_dev(dev); serial->type = driver; - serial->interface = interface; + serial->interface = usb_get_intf(interface); kref_init(&serial->kref); mutex_init(&serial->disc_mutex); serial->minor = SERIAL_TTY_NO_MINOR; @@ -688,10 +689,20 @@ static void serial_dtr_rts(struct tty_port *port, int on) { struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); - struct usb_serial_driver *drv = p->serial->type; + struct usb_serial *serial = p->serial; + struct usb_serial_driver *drv = serial->type; - if (drv->dtr_rts) + if (!drv->dtr_rts) + return; + /* + * Work-around bug in the tty-layer which can result in dtr_rts + * being called after a disconnect (and tty_unregister_device + * has returned). Remove once bug has been squashed. + */ + mutex_lock(&serial->disc_mutex); + if (!serial->disconnected) drv->dtr_rts(p, on); + mutex_unlock(&serial->disc_mutex); } static const struct tty_port_operations serial_port_ops = { @@ -886,6 +897,7 @@ port->port.ops = &serial_port_ops; port->serial = serial; spin_lock_init(&port->lock); + init_waitqueue_head(&port->delta_msr_wait); /* Keep this for private driver use for the moment but should probably go away */ INIT_WORK(&port->work, usb_serial_port_work); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/whiteheat.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/whiteheat.c @@ -649,7 +649,7 @@ struct whiteheat_port_settings port_settings; unsigned int cflag = tty->termios.c_cflag; - port_settings.port = port->number + 1; + port_settings.port = port->number - port->serial->minor + 1; /* get the byte size */ switch (cflag & CSIZE) { --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/garmin_gps.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/garmin_gps.c @@ -959,10 +959,7 @@ if (!serial) return; - mutex_lock(&port->serial->disc_mutex); - - if (!port->serial->disconnected) - garmin_clear(garmin_data_p); + garmin_clear(garmin_data_p); /* shutdown our urbs */ usb_kill_urb(port->read_urb); @@ -971,8 +968,6 @@ /* keep reset state so we know that we must start a new session */ if (garmin_data_p->state != STATE_RESET) garmin_data_p->state = STATE_DISCONNECTED; - - mutex_unlock(&port->serial->disc_mutex); } --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ti_usb_3410_5052.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/ti_usb_3410_5052.c @@ -74,7 +74,6 @@ int tp_flags; int tp_closing_wait;/* in .01 secs */ struct async_icount tp_icount; - wait_queue_head_t tp_msr_wait; /* wait for msr change */ wait_queue_head_t tp_write_wait; struct ti_device *tp_tdev; struct usb_serial_port *tp_port; @@ -179,7 +178,8 @@ { USB_DEVICE(IBM_VENDOR_ID, IBM_4543_PRODUCT_ID) }, { USB_DEVICE(IBM_VENDOR_ID, IBM_454B_PRODUCT_ID) }, { USB_DEVICE(IBM_VENDOR_ID, IBM_454C_PRODUCT_ID) }, - { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_PRODUCT_ID) }, + { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STEREO_PLUG_ID) }, + { USB_DEVICE(ABBOTT_VENDOR_ID, ABBOTT_STRIP_PORT_ID) }, { USB_DEVICE(TI_VENDOR_ID, FRI2_PRODUCT_ID) }, }; @@ -373,7 +373,7 @@ usb_set_serial_data(serial, tdev); /* determine device type */ - if (usb_match_id(serial->interface, ti_id_table_3410)) + if (serial->type == &ti_1port_device) tdev->td_is_3410 = 1; dev_dbg(&dev->dev, "%s - device type is %s\n", __func__, tdev->td_is_3410 ? "3410" : "5052"); @@ -432,7 +432,6 @@ else tport->tp_uart_base_addr = TI_UART2_BASE_ADDR; tport->tp_closing_wait = closing_wait; - init_waitqueue_head(&tport->tp_msr_wait); init_waitqueue_head(&tport->tp_write_wait); if (kfifo_alloc(&tport->write_fifo, TI_WRITE_BUF_SIZE, GFP_KERNEL)) { kfree(tport); @@ -784,9 +783,13 @@ dev_dbg(&port->dev, "%s - TIOCMIWAIT\n", __func__); cprev = tport->tp_icount; while (1) { - interruptible_sleep_on(&tport->tp_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + cnow = tport->tp_icount; if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) @@ -1400,7 +1403,7 @@ icount->dcd++; if (msr & TI_MSR_DELTA_RI) icount->rng++; - wake_up_interruptible(&tport->tp_msr_wait); + wake_up_interruptible(&tport->tp_port->delta_msr_wait); spin_unlock_irqrestore(&tport->tp_lock, flags); } @@ -1624,14 +1627,15 @@ char buf[32]; /* try ID specific firmware first, then try generic firmware */ - sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor, - dev->descriptor.idProduct); + sprintf(buf, "ti_usb-v%04x-p%04x.fw", + le16_to_cpu(dev->descriptor.idVendor), + le16_to_cpu(dev->descriptor.idProduct)); status = request_firmware(&fw_p, buf, &dev->dev); if (status != 0) { buf[0] = '\0'; - if (dev->descriptor.idVendor == MTS_VENDOR_ID) { - switch (dev->descriptor.idProduct) { + if (le16_to_cpu(dev->descriptor.idVendor) == MTS_VENDOR_ID) { + switch (le16_to_cpu(dev->descriptor.idProduct)) { case MTS_CDMA_PRODUCT_ID: strcpy(buf, "mts_cdma.fw"); break; --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/zte_ev.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/zte_ev.c @@ -41,9 +41,6 @@ int len; unsigned char *buf; - if (port->number != 0) - return -ENODEV; - buf = kmalloc(MAX_SETUP_DATA_SIZE, GFP_KERNEL); if (!buf) return -ENOMEM; @@ -53,7 +50,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x22, 0x21, 0x0001, 0x0000, NULL, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); dev_dbg(dev, "result = %d\n", result); /* send 2st cmd and recieve data */ @@ -65,7 +62,7 @@ result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x21, 0xa1, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 3 cmd */ @@ -84,7 +81,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x20, 0x21, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 4 cmd */ @@ -95,7 +92,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x22, 0x21, 0x0003, 0x0000, NULL, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); dev_dbg(dev, "result = %d\n", result); /* send 5 cmd */ @@ -107,7 +104,7 @@ result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x21, 0xa1, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 6 cmd */ @@ -126,7 +123,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x20, 0x21, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); kfree(buf); @@ -166,9 +163,6 @@ int len; unsigned char *buf; - if (port->number != 0) - return; - buf = kmalloc(MAX_SETUP_DATA_SIZE, GFP_KERNEL); if (!buf) return; @@ -178,7 +172,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x22, 0x21, 0x0002, 0x0000, NULL, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); dev_dbg(dev, "result = %d\n", result); /* send 2st ctl cmd(CTL 21 22 03 00 00 00 00 00 ) */ @@ -186,7 +180,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x22, 0x21, 0x0003, 0x0000, NULL, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); dev_dbg(dev, "result = %d\n", result); /* send 3st cmd and recieve data */ @@ -198,7 +192,7 @@ result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x21, 0xa1, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 4 cmd */ @@ -217,7 +211,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x20, 0x21, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 5 cmd */ @@ -228,7 +222,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x22, 0x21, 0x0003, 0x0000, NULL, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); dev_dbg(dev, "result = %d\n", result); /* send 6 cmd */ @@ -240,7 +234,7 @@ result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x21, 0xa1, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 7 cmd */ @@ -259,7 +253,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x20, 0x21, 0x0000, 0x0000, buf, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); debug_data(dev, __func__, len, buf, result); /* send 8 cmd */ @@ -270,7 +264,7 @@ result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x22, 0x21, 0x0003, 0x0000, NULL, len, - HZ * USB_CTRL_GET_TIMEOUT); + USB_CTRL_GET_TIMEOUT); dev_dbg(dev, "result = %d\n", result); kfree(buf); @@ -279,11 +273,29 @@ } static const struct usb_device_id id_table[] = { - { USB_DEVICE(0x19d2, 0xffff) }, /* AC8700 */ - { USB_DEVICE(0x19d2, 0xfffe) }, - { USB_DEVICE(0x19d2, 0xfffd) }, /* MG880 */ + /* AC8710, AC8710T */ + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffff, 0xff, 0xff, 0xff) }, + /* AC8700 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffe, 0xff, 0xff, 0xff) }, + /* MG880 */ + { USB_DEVICE(0x19d2, 0xfffd) }, + { USB_DEVICE(0x19d2, 0xfffc) }, + { USB_DEVICE(0x19d2, 0xfffb) }, + /* AC2726, AC8710_V3 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfff1, 0xff, 0xff, 0xff) }, + { USB_DEVICE(0x19d2, 0xfff6) }, + { USB_DEVICE(0x19d2, 0xfff7) }, + { USB_DEVICE(0x19d2, 0xfff8) }, + { USB_DEVICE(0x19d2, 0xfff9) }, + { USB_DEVICE(0x19d2, 0xffee) }, + /* AC2716, MC2716 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffed, 0xff, 0xff, 0xff) }, + /* AD3812 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffeb, 0xff, 0xff, 0xff) }, + { USB_DEVICE(0x19d2, 0xffec) }, { USB_DEVICE(0x05C6, 0x3197) }, { USB_DEVICE(0x05C6, 0x6000) }, + { USB_DEVICE(0x05C6, 0x9008) }, { }, }; MODULE_DEVICE_TABLE(usb, id_table); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/sierra.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/sierra.c @@ -861,19 +861,13 @@ static void sierra_dtr_rts(struct usb_serial_port *port, int on) { - struct usb_serial *serial = port->serial; struct sierra_port_private *portdata; portdata = usb_get_serial_port_data(port); portdata->rts_state = on; portdata->dtr_state = on; - if (serial->dev) { - mutex_lock(&serial->disc_mutex); - if (!serial->disconnected) - sierra_send_setup(port); - mutex_unlock(&serial->disc_mutex); - } + sierra_send_setup(port); } static int sierra_startup(struct usb_serial *serial) --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/mct_u232.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/mct_u232.c @@ -114,8 +114,6 @@ unsigned char last_msr; /* Modem Status Register */ unsigned int rx_flags; /* Throttling flags */ struct async_icount icount; - wait_queue_head_t msr_wait; /* for handling sleeping while waiting - for msr change to happen */ }; #define THROTTLED 0x01 @@ -409,7 +407,6 @@ return -ENOMEM; spin_lock_init(&priv->lock); - init_waitqueue_head(&priv->msr_wait); usb_set_serial_port_data(port, priv); @@ -499,19 +496,15 @@ unsigned int control_state; struct mct_u232_private *priv = usb_get_serial_port_data(port); - mutex_lock(&port->serial->disc_mutex); - if (!port->serial->disconnected) { - /* drop DTR and RTS */ - spin_lock_irq(&priv->lock); - if (on) - priv->control_state |= TIOCM_DTR | TIOCM_RTS; - else - priv->control_state &= ~(TIOCM_DTR | TIOCM_RTS); - control_state = priv->control_state; - spin_unlock_irq(&priv->lock); - mct_u232_set_modem_ctrl(port, control_state); - } - mutex_unlock(&port->serial->disc_mutex); + spin_lock_irq(&priv->lock); + if (on) + priv->control_state |= TIOCM_DTR | TIOCM_RTS; + else + priv->control_state &= ~(TIOCM_DTR | TIOCM_RTS); + control_state = priv->control_state; + spin_unlock_irq(&priv->lock); + + mct_u232_set_modem_ctrl(port, control_state); } static void mct_u232_close(struct usb_serial_port *port) @@ -610,7 +603,7 @@ tty_kref_put(tty); } #endif - wake_up_interruptible(&priv->msr_wait); + wake_up_interruptible(&port->delta_msr_wait); spin_unlock_irqrestore(&priv->lock, flags); exit: retval = usb_submit_urb(urb, GFP_ATOMIC); @@ -819,13 +812,17 @@ cprev = mct_u232_port->icount; spin_unlock_irqrestore(&mct_u232_port->lock, flags); for ( ; ; ) { - prepare_to_wait(&mct_u232_port->msr_wait, + prepare_to_wait(&port->delta_msr_wait, &wait, TASK_INTERRUPTIBLE); schedule(); - finish_wait(&mct_u232_port->msr_wait, &wait); + finish_wait(&port->delta_msr_wait, &wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&mct_u232_port->lock, flags); cnow = mct_u232_port->icount; spin_unlock_irqrestore(&mct_u232_port->lock, flags); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/f81232.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/f81232.c @@ -47,7 +47,6 @@ struct f81232_private { spinlock_t lock; - wait_queue_head_t delta_msr_wait; u8 line_control; u8 line_status; }; @@ -112,7 +111,7 @@ line_status = priv->line_status; priv->line_status &= ~UART_STATE_TRANSIENT_MASK; spin_unlock_irqrestore(&priv->lock, flags); - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); if (!urb->actual_length) return; @@ -171,11 +170,12 @@ /* FIXME - Stubbed out for now */ /* Don't change anything if nothing has changed */ - if (!tty_termios_hw_change(&tty->termios, old_termios)) + if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) return; /* Do the real work here... */ - tty_termios_copy_hw(&tty->termios, old_termios); + if (old_termios) + tty_termios_copy_hw(&tty->termios, old_termios); } static int f81232_tiocmget(struct tty_struct *tty) @@ -193,12 +193,11 @@ static int f81232_open(struct tty_struct *tty, struct usb_serial_port *port) { - struct ktermios tmp_termios; int result; /* Setup termios */ if (tty) - f81232_set_termios(tty, port, &tmp_termios); + f81232_set_termios(tty, port, NULL); result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); if (result) { @@ -261,11 +260,14 @@ spin_unlock_irqrestore(&priv->lock, flags); while (1) { - interruptible_sleep_on(&priv->delta_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->lock, flags); status = priv->line_status; spin_unlock_irqrestore(&priv->lock, flags); @@ -327,7 +329,6 @@ return -ENOMEM; spin_lock_init(&priv->lock); - init_waitqueue_head(&priv->delta_msr_wait); usb_set_serial_port_data(port, priv); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ch341.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/ch341.c @@ -80,7 +80,6 @@ struct ch341_private { spinlock_t lock; /* access lock */ - wait_queue_head_t delta_msr_wait; /* wait queue for modem status */ unsigned baud_rate; /* set baud rate */ u8 line_control; /* set line control value RTS/DTR */ u8 line_status; /* active status of modem control inputs */ @@ -252,7 +251,6 @@ return -ENOMEM; spin_lock_init(&priv->lock); - init_waitqueue_head(&priv->delta_msr_wait); priv->baud_rate = DEFAULT_BAUD_RATE; priv->line_control = CH341_BIT_RTS | CH341_BIT_DTR; @@ -298,7 +296,7 @@ priv->line_control &= ~(CH341_BIT_RTS | CH341_BIT_DTR); spin_unlock_irqrestore(&priv->lock, flags); ch341_set_handshake(port->serial->dev, priv->line_control); - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); } static void ch341_close(struct usb_serial_port *port) @@ -491,7 +489,7 @@ tty_kref_put(tty); } - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); } exit: @@ -517,11 +515,14 @@ spin_unlock_irqrestore(&priv->lock, flags); while (!multi_change) { - interruptible_sleep_on(&priv->delta_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->lock, flags); status = priv->line_status; multi_change = priv->multi_status_change; --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/option.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/option.c @@ -81,6 +81,7 @@ #define HUAWEI_VENDOR_ID 0x12D1 #define HUAWEI_PRODUCT_E173 0x140C +#define HUAWEI_PRODUCT_E1750 0x1406 #define HUAWEI_PRODUCT_K4505 0x1464 #define HUAWEI_PRODUCT_K3765 0x1465 #define HUAWEI_PRODUCT_K4605 0x14C6 @@ -159,8 +160,6 @@ #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001 #define NOVATELWIRELESS_PRODUCT_E362 0x9010 -#define NOVATELWIRELESS_PRODUCT_G1 0xA001 -#define NOVATELWIRELESS_PRODUCT_G1_M 0xA002 #define NOVATELWIRELESS_PRODUCT_G2 0xA010 #define NOVATELWIRELESS_PRODUCT_MC551 0xB001 @@ -196,6 +195,7 @@ #define DELL_PRODUCT_5800_MINICARD_VZW 0x8195 /* Novatel E362 */ #define DELL_PRODUCT_5800_V2_MINICARD_VZW 0x8196 /* Novatel E362 */ +#define DELL_PRODUCT_5804_MINICARD_ATT 0x819b /* Novatel E371 */ #define KYOCERA_VENDOR_ID 0x0c88 #define KYOCERA_PRODUCT_KPC650 0x17da @@ -249,13 +249,7 @@ #define ZTE_PRODUCT_MF622 0x0001 #define ZTE_PRODUCT_MF628 0x0015 #define ZTE_PRODUCT_MF626 0x0031 -#define ZTE_PRODUCT_CDMA_TECH 0xfffe -#define ZTE_PRODUCT_AC8710 0xfff1 -#define ZTE_PRODUCT_AC2726 0xfff5 -#define ZTE_PRODUCT_AC8710T 0xffff #define ZTE_PRODUCT_MC2718 0xffe8 -#define ZTE_PRODUCT_AD3812 0xffeb -#define ZTE_PRODUCT_MC2716 0xffed #define BENQ_VENDOR_ID 0x04a5 #define BENQ_PRODUCT_H10 0x4068 @@ -341,21 +335,19 @@ #define CINTERION_PRODUCT_EU3_E 0x0051 #define CINTERION_PRODUCT_EU3_P 0x0052 #define CINTERION_PRODUCT_PH8 0x0053 +#define CINTERION_PRODUCT_AHXX 0x0055 +#define CINTERION_PRODUCT_PLXX 0x0060 /* Olivetti products */ #define OLIVETTI_VENDOR_ID 0x0b3c #define OLIVETTI_PRODUCT_OLICARD100 0xc000 +#define OLIVETTI_PRODUCT_OLICARD145 0xc003 +#define OLIVETTI_PRODUCT_OLICARD200 0xc005 /* Celot products */ #define CELOT_VENDOR_ID 0x211f #define CELOT_PRODUCT_CT680M 0x6801 -/* ONDA Communication vendor id */ -#define ONDA_VENDOR_ID 0x1ee8 - -/* ONDA MT825UP HSDPA 14.2 modem */ -#define ONDA_MT825UP 0x000b - /* Samsung products */ #define SAMSUNG_VENDOR_ID 0x04e8 #define SAMSUNG_PRODUCT_GT_B3730 0x6889 @@ -448,7 +440,8 @@ /* Hyundai Petatel Inc. products */ #define PETATEL_VENDOR_ID 0x1ff4 -#define PETATEL_PRODUCT_NP10T 0x600e +#define PETATEL_PRODUCT_NP10T_600A 0x600a +#define PETATEL_PRODUCT_NP10T_600E 0x600e /* TP-LINK Incorporated products */ #define TPLINK_VENDOR_ID 0x2357 @@ -479,6 +472,7 @@ static const struct option_blacklist_info alcatel_x200_blacklist = { .sendsetup = BIT(0) | BIT(1), + .reserved = BIT(4), }; static const struct option_blacklist_info zte_0037_blacklist = { @@ -490,18 +484,10 @@ .reserved = BIT(4), }; -static const struct option_blacklist_info zte_ad3812_z_blacklist = { - .sendsetup = BIT(0) | BIT(1) | BIT(2), -}; - static const struct option_blacklist_info zte_mc2718_z_blacklist = { .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4), }; -static const struct option_blacklist_info zte_mc2716_z_blacklist = { - .sendsetup = BIT(1) | BIT(2) | BIT(3), -}; - static const struct option_blacklist_info huawei_cdc12_blacklist = { .reserved = BIT(1) | BIT(2), }; @@ -575,12 +561,23 @@ { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) }, { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) }, { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) }, + { USB_DEVICE(QUANTA_VENDOR_ID, 0xea42), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c05, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c1f, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1c23, USB_CLASS_COMM, 0x02, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E173, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1750, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t) &net_intf2_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1441, USB_CLASS_COMM, 0x02, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x1442, USB_CLASS_COMM, 0x02, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0x14ac, 0xff, 0xff, 0xff), /* Huawei E1820 */ + .driver_info = (kernel_ulong_t) &net_intf1_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4605, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t) &huawei_cdc12_blacklist }, { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0xff, 0xff) }, @@ -730,8 +727,6 @@ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC547) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1) }, - { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1_M) }, { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) }, /* Novatel Ovation MC551 a.k.a. Verizon USB551L */ { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) }, @@ -760,6 +755,7 @@ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */ { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_MINICARD_VZW, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5800_V2_MINICARD_VZW, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, DELL_PRODUCT_5804_MINICARD_ATT, 0xff, 0xff, 0xff) }, { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */ { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) }, @@ -784,8 +780,8 @@ { USB_DEVICE_INTERFACE_CLASS(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012, 0xff) }, { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) }, { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, - { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */ { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) }, @@ -821,7 +817,8 @@ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, @@ -955,6 +952,8 @@ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0330, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0395, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0412, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G */ + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff), @@ -1184,16 +1183,9 @@ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) }, + /* NOTE: most ZTE CDMA devices should be driven by zte_ev, not option */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff), .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff), - .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff), - .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist }, { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) }, { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) }, { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) }, @@ -1215,7 +1207,14 @@ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist }, - { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D) }, + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D), + .driver_info = (kernel_ulong_t)&net_intf6_blacklist }, + { USB_DEVICE(ALCATEL_VENDOR_ID, 0x0052), + .driver_info = (kernel_ulong_t)&net_intf6_blacklist }, + { USB_DEVICE(ALCATEL_VENDOR_ID, 0x00b6), + .driver_info = (kernel_ulong_t)&net_intf3_blacklist }, + { USB_DEVICE(ALCATEL_VENDOR_ID, 0x00b7), + .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V), .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) }, @@ -1246,6 +1245,9 @@ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) }, { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) }, { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) }, + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_AHXX) }, + { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) }, @@ -1254,8 +1256,9 @@ { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) }, { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) }, + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD145) }, + { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD200) }, { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */ - { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */ { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_GT_B3730, USB_CLASS_CDC_DATA, 0x00, 0x00) }, /* Samsung GT-B3730 LTE USB modem.*/ { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM600) }, { USB_DEVICE(YUGA_VENDOR_ID, YUGA_PRODUCT_CEM610) }, @@ -1327,10 +1330,21 @@ { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) }, { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) }, { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) }, - { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) }, + { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600A) }, + { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T_600E) }, { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180), .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE(TPLINK_VENDOR_ID, 0x9000), /* TP-Link MA260 */ + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x02, 0x01) }, /* D-Link DWM-156 (variant) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d01, 0xff, 0x00, 0x00) }, /* D-Link DWM-156 (variant) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d02, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, option_ids); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/visor.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/visor.c @@ -566,10 +566,19 @@ */ #define COPY_PORT(dest, src) \ do { \ + int i; \ + \ + for (i = 0; i < ARRAY_SIZE(src->read_urbs); ++i) { \ + dest->read_urbs[i] = src->read_urbs[i]; \ + dest->read_urbs[i]->context = dest; \ + dest->bulk_in_buffers[i] = src->bulk_in_buffers[i]; \ + } \ dest->read_urb = src->read_urb; \ dest->bulk_in_endpointAddress = src->bulk_in_endpointAddress;\ dest->bulk_in_buffer = src->bulk_in_buffer; \ + dest->bulk_in_size = src->bulk_in_size; \ dest->interrupt_in_urb = src->interrupt_in_urb; \ + dest->interrupt_in_urb->context = dest; \ dest->interrupt_in_endpointAddress = \ src->interrupt_in_endpointAddress;\ dest->interrupt_in_buffer = src->interrupt_in_buffer; \ --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/quatech2.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/quatech2.c @@ -128,7 +128,6 @@ u8 shadowLSR; u8 shadowMSR; - wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ struct async_icount icount; struct usb_serial_port *port; @@ -506,8 +505,9 @@ spin_unlock_irqrestore(&priv->lock, flags); while (1) { - wait_event_interruptible(priv->delta_msr_wait, - ((priv->icount.rng != prev.rng) || + wait_event_interruptible(port->delta_msr_wait, + (port->serial->disconnected || + (priv->icount.rng != prev.rng) || (priv->icount.dsr != prev.dsr) || (priv->icount.dcd != prev.dcd) || (priv->icount.cts != prev.cts))); @@ -515,6 +515,9 @@ if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->lock, flags); cur = priv->icount; spin_unlock_irqrestore(&priv->lock, flags); @@ -841,7 +844,6 @@ spin_lock_init(&port_priv->lock); spin_lock_init(&port_priv->urb_lock); - init_waitqueue_head(&port_priv->delta_msr_wait); port_priv->port = port; port_priv->write_urb = usb_alloc_urb(0, GFP_KERNEL); @@ -945,19 +947,17 @@ struct usb_device *dev = port->serial->dev; struct qt2_port_private *port_priv = usb_get_serial_port_data(port); - mutex_lock(&port->serial->disc_mutex); - if (!port->serial->disconnected) { - /* Disable flow control */ - if (!on && qt2_setregister(dev, port_priv->device_port, + /* Disable flow control */ + if (!on) { + if (qt2_setregister(dev, port_priv->device_port, UART_MCR, 0) < 0) dev_warn(&port->dev, "error from flowcontrol urb\n"); - /* drop RTS and DTR */ - if (on) - update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0); - else - update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS); } - mutex_unlock(&port->serial->disc_mutex); + /* drop RTS and DTR */ + if (on) + update_mctrl(port_priv, TIOCM_DTR | TIOCM_RTS, 0); + else + update_mctrl(port_priv, 0, TIOCM_DTR | TIOCM_RTS); } static void qt2_update_msr(struct usb_serial_port *port, unsigned char *ch) @@ -986,7 +986,7 @@ if (newMSR & UART_MSR_TERI) port_priv->icount.rng++; - wake_up_interruptible(&port_priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); } } --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ftdi_sio_ids.h +++ linux-lts-raring-3.8.0/drivers/usb/serial/ftdi_sio_ids.h @@ -74,6 +74,7 @@ #define FTDI_OPENDCC_THROTTLE_PID 0xBFDA #define FTDI_OPENDCC_GATEWAY_PID 0xBFDB #define FTDI_OPENDCC_GBM_PID 0xBFDC +#define FTDI_OPENDCC_GBM_BOOST_PID 0xBFDD /* NZR SEM 16+ USB (http://www.nzr.de) */ #define FTDI_NZR_SEM_USB_PID 0xC1E0 /* NZR SEM-LOG16+ */ @@ -584,6 +585,13 @@ #define CONTEC_COM1USBH_PID 0x8311 /* COM-1(USB)H */ /* + * Mitsubishi Electric Corp. (http://www.meau.com) + * Submitted by Konstantin Holoborodko + */ +#define MITSUBISHI_VID 0x06D3 +#define MITSUBISHI_FXUSB_PID 0x0284 /* USB/RS422 converters: FX-USB-AW/-BD */ + +/* * Definitions for B&B Electronics products. */ #define BANDB_VID 0x0856 /* B&B Electronics Vendor ID */ @@ -764,6 +772,8 @@ */ #define NEWPORT_VID 0x104D #define NEWPORT_AGILIS_PID 0x3000 +#define NEWPORT_CONEX_CC_PID 0x3002 +#define NEWPORT_CONEX_AGP_PID 0x3006 /* Interbiometrics USB I/O Board */ /* Developed for Interbiometrics by Rudolf Gugler */ @@ -805,11 +815,35 @@ /* * RT Systems programming cables for various ham radios */ -#define RTSYSTEMS_VID 0x2100 /* Vendor ID */ -#define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */ -#define RTSYSTEMS_CT29B_PID 0x9e54 /* CT29B Radio Cable */ -#define RTSYSTEMS_RTS01_PID 0x9e57 /* USB-RTS01 Radio Cable */ - +#define RTSYSTEMS_VID 0x2100 /* Vendor ID */ +#define RTSYSTEMS_USB_S03_PID 0x9001 /* RTS-03 USB to Serial Adapter */ +#define RTSYSTEMS_USB_59_PID 0x9e50 /* USB-59 USB to 8 pin plug */ +#define RTSYSTEMS_USB_57A_PID 0x9e51 /* USB-57A USB to 4pin 3.5mm plug */ +#define RTSYSTEMS_USB_57B_PID 0x9e52 /* USB-57B USB to extended 4pin 3.5mm plug */ +#define RTSYSTEMS_USB_29A_PID 0x9e53 /* USB-29A USB to 3.5mm stereo plug */ +#define RTSYSTEMS_USB_29B_PID 0x9e54 /* USB-29B USB to 6 pin mini din */ +#define RTSYSTEMS_USB_29F_PID 0x9e55 /* USB-29F USB to 6 pin modular plug */ +#define RTSYSTEMS_USB_62B_PID 0x9e56 /* USB-62B USB to 8 pin mini din plug*/ +#define RTSYSTEMS_USB_S01_PID 0x9e57 /* USB-RTS01 USB to 3.5 mm stereo plug*/ +#define RTSYSTEMS_USB_63_PID 0x9e58 /* USB-63 USB to 9 pin female*/ +#define RTSYSTEMS_USB_29C_PID 0x9e59 /* USB-29C USB to 4 pin modular plug*/ +#define RTSYSTEMS_USB_81B_PID 0x9e5A /* USB-81 USB to 8 pin mini din plug*/ +#define RTSYSTEMS_USB_82B_PID 0x9e5B /* USB-82 USB to 2.5 mm stereo plug*/ +#define RTSYSTEMS_USB_K5D_PID 0x9e5C /* USB-K5D USB to 8 pin modular plug*/ +#define RTSYSTEMS_USB_K4Y_PID 0x9e5D /* USB-K4Y USB to 2.5/3.5 mm plugs*/ +#define RTSYSTEMS_USB_K5G_PID 0x9e5E /* USB-K5G USB to 8 pin modular plug*/ +#define RTSYSTEMS_USB_S05_PID 0x9e5F /* USB-RTS05 USB to 2.5 mm stereo plug*/ +#define RTSYSTEMS_USB_60_PID 0x9e60 /* USB-60 USB to 6 pin din*/ +#define RTSYSTEMS_USB_61_PID 0x9e61 /* USB-61 USB to 6 pin mini din*/ +#define RTSYSTEMS_USB_62_PID 0x9e62 /* USB-62 USB to 8 pin mini din*/ +#define RTSYSTEMS_USB_63B_PID 0x9e63 /* USB-63 USB to 9 pin female*/ +#define RTSYSTEMS_USB_64_PID 0x9e64 /* USB-64 USB to 9 pin male*/ +#define RTSYSTEMS_USB_65_PID 0x9e65 /* USB-65 USB to 9 pin female null modem*/ +#define RTSYSTEMS_USB_92_PID 0x9e66 /* USB-92 USB to 12 pin plug*/ +#define RTSYSTEMS_USB_92D_PID 0x9e67 /* USB-92D USB to 12 pin plug data*/ +#define RTSYSTEMS_USB_W5R_PID 0x9e68 /* USB-W5R USB to 8 pin modular plug*/ +#define RTSYSTEMS_USB_A5R_PID 0x9e69 /* USB-A5R USB to 8 pin modular plug*/ +#define RTSYSTEMS_USB_PW1_PID 0x9e6A /* USB-PW1 USB to 8 pin modular plug*/ /* * Physik Instrumente @@ -1143,7 +1177,8 @@ * STMicroelectonics */ #define ST_VID 0x0483 -#define ST_STMCLT1030_PID 0x3747 /* ST Micro Connect Lite STMCLT1030 */ +#define ST_STMCLT_2232_PID 0x3746 +#define ST_STMCLT_4232_PID 0x3747 /* * Papouch products (http://www.papouch.com/) --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/usb_wwan.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/usb_wwan.c @@ -38,7 +38,6 @@ void usb_wwan_dtr_rts(struct usb_serial_port *port, int on) { - struct usb_serial *serial = port->serial; struct usb_wwan_port_private *portdata; struct usb_wwan_intf_private *intfdata; @@ -48,12 +47,11 @@ return; portdata = usb_get_serial_port_data(port); - mutex_lock(&serial->disc_mutex); + /* FIXME: locking */ portdata->rts_state = on; portdata->dtr_state = on; - if (serial->dev) - intfdata->send_setup(port); - mutex_unlock(&serial->disc_mutex); + + intfdata->send_setup(port); } EXPORT_SYMBOL(usb_wwan_dtr_rts); @@ -298,18 +296,18 @@ dev_dbg(dev, "%s: empty read urb received\n", __func__); tty_kref_put(tty); } - - /* Resubmit urb so we continue receiving */ - err = usb_submit_urb(urb, GFP_ATOMIC); - if (err) { - if (err != -EPERM) { - dev_err(dev, "%s: resubmit read urb failed. (%d)\n", __func__, err); - /* busy also in error unless we are killed */ - usb_mark_last_busy(port->serial->dev); - } - } else { + } + /* Resubmit urb so we continue receiving */ + err = usb_submit_urb(urb, GFP_ATOMIC); + if (err) { + if (err != -EPERM) { + dev_err(dev, "%s: resubmit read urb failed. (%d)\n", + __func__, err); + /* busy also in error unless we are killed */ usb_mark_last_busy(port->serial->dev); } + } else { + usb_mark_last_busy(port->serial->dev); } } --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/qcaux.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/qcaux.c @@ -69,6 +69,7 @@ { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfd, 0xff) }, /* NMEA */ { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfe, 0xff) }, /* WMC */ { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xff, 0xff) }, /* DIAG */ + { USB_DEVICE_AND_INTERFACE_INFO(0x1fac, 0x0151, 0xff, 0xff, 0xff) }, { }, }; MODULE_DEVICE_TABLE(usb, id_table); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/io_edgeport.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/io_edgeport.c @@ -110,7 +110,6 @@ wait_queue_head_t wait_chase; /* for handling sleeping while waiting for chase to finish */ wait_queue_head_t wait_open; /* for handling sleeping while waiting for open to finish */ wait_queue_head_t wait_command; /* for handling sleeping while waiting for command to finish */ - wait_queue_head_t delta_msr_wait; /* for handling sleeping while waiting for msr change to happen */ struct async_icount icount; struct usb_serial_port *port; /* loop back to the owner of this object */ @@ -884,7 +883,6 @@ /* initialize our wait queues */ init_waitqueue_head(&edge_port->wait_open); init_waitqueue_head(&edge_port->wait_chase); - init_waitqueue_head(&edge_port->delta_msr_wait); init_waitqueue_head(&edge_port->wait_command); /* initialize our icount structure */ @@ -1669,13 +1667,17 @@ dev_dbg(&port->dev, "%s (%d) TIOCMIWAIT\n", __func__, port->number); cprev = edge_port->icount; while (1) { - prepare_to_wait(&edge_port->delta_msr_wait, + prepare_to_wait(&port->delta_msr_wait, &wait, TASK_INTERRUPTIBLE); schedule(); - finish_wait(&edge_port->delta_msr_wait, &wait); + finish_wait(&port->delta_msr_wait, &wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + cnow = edge_port->icount; if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) @@ -2055,7 +2057,7 @@ icount->dcd++; if (newMsr & EDGEPORT_MSR_DELTA_RI) icount->rng++; - wake_up_interruptible(&edge_port->delta_msr_wait); + wake_up_interruptible(&edge_port->port->delta_msr_wait); } /* Save the new modem status */ --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/mos7720.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/mos7720.c @@ -40,7 +40,7 @@ #define DRIVER_DESC "Moschip USB Serial Driver" /* default urb timeout */ -#define MOS_WDR_TIMEOUT (HZ * 5) +#define MOS_WDR_TIMEOUT 5000 #define MOS_MAX_PORT 0x02 #define MOS_WRITE 0x0E @@ -91,6 +91,7 @@ struct list_head urblist_entry; struct kref ref_count; struct urb *urb; + struct usb_ctrlrequest *setup; }; enum mos7715_pp_modes { @@ -228,11 +229,22 @@ __u8 requesttype = (__u8)0xc0; __u16 index = get_reg_index(reg); __u16 value = get_reg_value(reg, serial_portnum); - int status = usb_control_msg(usbdev, pipe, request, requesttype, value, - index, data, 1, MOS_WDR_TIMEOUT); - if (status < 0) + u8 *buf; + int status; + + buf = kmalloc(1, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + status = usb_control_msg(usbdev, pipe, request, requesttype, value, + index, buf, 1, MOS_WDR_TIMEOUT); + if (status == 1) + *data = *buf; + else if (status < 0) dev_err(&usbdev->dev, "mos7720: usb_control_msg() failed: %d", status); + kfree(buf); + return status; } @@ -261,6 +273,7 @@ struct mos7715_parport *mos_parport = urbtrack->mos_parport; usb_free_urb(urbtrack->urb); + kfree(urbtrack->setup); kfree(urbtrack); kref_put(&mos_parport->ref_count, destroy_mos_parport); } @@ -345,7 +358,6 @@ struct urbtracker *urbtrack; int ret_val; unsigned long flags; - struct usb_ctrlrequest setup; struct usb_serial *serial = mos_parport->serial; struct usb_device *usbdev = serial->dev; @@ -363,14 +375,20 @@ kfree(urbtrack); return -ENOMEM; } - setup.bRequestType = (__u8)0x40; - setup.bRequest = (__u8)0x0e; - setup.wValue = get_reg_value(reg, dummy); - setup.wIndex = get_reg_index(reg); - setup.wLength = 0; + urbtrack->setup = kmalloc(sizeof(*urbtrack->setup), GFP_ATOMIC); + if (!urbtrack->setup) { + usb_free_urb(urbtrack->urb); + kfree(urbtrack); + return -ENOMEM; + } + urbtrack->setup->bRequestType = (__u8)0x40; + urbtrack->setup->bRequest = (__u8)0x0e; + urbtrack->setup->wValue = cpu_to_le16(get_reg_value(reg, dummy)); + urbtrack->setup->wIndex = cpu_to_le16(get_reg_index(reg)); + urbtrack->setup->wLength = 0; usb_fill_control_urb(urbtrack->urb, usbdev, usb_sndctrlpipe(usbdev, 0), - (unsigned char *)&setup, + (unsigned char *)urbtrack->setup, NULL, 0, async_complete, urbtrack); kref_init(&urbtrack->ref_count); INIT_LIST_HEAD(&urbtrack->urblist_entry); @@ -1636,7 +1654,7 @@ mos7720_port->shadowMCR |= (UART_MCR_XONANY); /* To set hardware flow control to the specified * * serial port, in SP1/2_CONTROL_REG */ - if (port->number) + if (port_number) write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x01); else write_mos_reg(serial, dummy, SP_CONTROL_REG, 0x02); @@ -1995,7 +2013,7 @@ /* setting configuration feature to one */ usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), - (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5*HZ); + (__u8)0x03, 0x00, 0x01, 0x00, NULL, 0x00, 5000); /* start the interrupt urb */ ret_val = usb_submit_urb(serial->port[0]->interrupt_in_urb, GFP_KERNEL); @@ -2038,7 +2056,7 @@ /* wait for synchronous usb calls to return */ if (mos_parport->msg_pending) wait_for_completion_timeout(&mos_parport->syncmsg_compl, - MOS_WDR_TIMEOUT); + msecs_to_jiffies(MOS_WDR_TIMEOUT)); parport_remove_port(mos_parport->pp); usb_set_serial_data(serial, NULL); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/cp210x.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/cp210x.c @@ -53,6 +53,7 @@ { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */ + { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */ { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */ @@ -85,6 +86,7 @@ { USB_DEVICE(0x10C4, 0x813F) }, /* Tams Master Easy Control */ { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ + { USB_DEVICE(0x2405, 0x0003) }, /* West Mountain Radio RIGblaster Advantage */ { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */ { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */ @@ -117,6 +119,8 @@ { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */ { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */ + { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */ + { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */ { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ @@ -147,9 +151,29 @@ { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */ { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ + { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */ { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */ { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */ { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */ + { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */ + { USB_DEVICE(0x1FB9, 0x0200) }, /* Lake Shore Model 218A Temperature Monitor */ + { USB_DEVICE(0x1FB9, 0x0201) }, /* Lake Shore Model 219 Temperature Monitor */ + { USB_DEVICE(0x1FB9, 0x0202) }, /* Lake Shore Model 233 Temperature Transmitter */ + { USB_DEVICE(0x1FB9, 0x0203) }, /* Lake Shore Model 235 Temperature Transmitter */ + { USB_DEVICE(0x1FB9, 0x0300) }, /* Lake Shore Model 335 Temperature Controller */ + { USB_DEVICE(0x1FB9, 0x0301) }, /* Lake Shore Model 336 Temperature Controller */ + { USB_DEVICE(0x1FB9, 0x0302) }, /* Lake Shore Model 350 Temperature Controller */ + { USB_DEVICE(0x1FB9, 0x0303) }, /* Lake Shore Model 371 AC Bridge */ + { USB_DEVICE(0x1FB9, 0x0400) }, /* Lake Shore Model 411 Handheld Gaussmeter */ + { USB_DEVICE(0x1FB9, 0x0401) }, /* Lake Shore Model 425 Gaussmeter */ + { USB_DEVICE(0x1FB9, 0x0402) }, /* Lake Shore Model 455A Gaussmeter */ + { USB_DEVICE(0x1FB9, 0x0403) }, /* Lake Shore Model 475A Gaussmeter */ + { USB_DEVICE(0x1FB9, 0x0404) }, /* Lake Shore Model 465 Three Axis Gaussmeter */ + { USB_DEVICE(0x1FB9, 0x0600) }, /* Lake Shore Model 625A Superconducting MPS */ + { USB_DEVICE(0x1FB9, 0x0601) }, /* Lake Shore Model 642A Magnet Power Supply */ + { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */ + { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */ + { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */ { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */ { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */ { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */ --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/spcp8x5.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/spcp8x5.c @@ -149,7 +149,6 @@ struct spcp8x5_private { spinlock_t lock; enum spcp8x5_type type; - wait_queue_head_t delta_msr_wait; u8 line_control; u8 line_status; }; @@ -179,7 +178,6 @@ return -ENOMEM; spin_lock_init(&priv->lock); - init_waitqueue_head(&priv->delta_msr_wait); priv->type = type; usb_set_serial_port_data(port , priv); @@ -316,7 +314,6 @@ struct spcp8x5_private *priv = usb_get_serial_port_data(port); unsigned long flags; unsigned int cflag = tty->termios.c_cflag; - unsigned int old_cflag = old_termios->c_cflag; unsigned short uartdata; unsigned char buf[2] = {0, 0}; int baud; @@ -325,15 +322,15 @@ /* check that they really want us to change something */ - if (!tty_termios_hw_change(&tty->termios, old_termios)) + if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) return; /* set DTR/RTS active */ spin_lock_irqsave(&priv->lock, flags); control = priv->line_control; - if ((old_cflag & CBAUD) == B0) { + if (old_termios && (old_termios->c_cflag & CBAUD) == B0) { priv->line_control |= MCR_DTR; - if (!(old_cflag & CRTSCTS)) + if (!(old_termios->c_cflag & CRTSCTS)) priv->line_control |= MCR_RTS; } if (control != priv->line_control) { @@ -423,7 +420,6 @@ * status of the device. */ static int spcp8x5_open(struct tty_struct *tty, struct usb_serial_port *port) { - struct ktermios tmp_termios; struct usb_serial *serial = port->serial; struct spcp8x5_private *priv = usb_get_serial_port_data(port); int ret; @@ -444,7 +440,7 @@ /* Setup termios */ if (tty) - spcp8x5_set_termios(tty, port, &tmp_termios); + spcp8x5_set_termios(tty, port, NULL); spcp8x5_get_msr(serial->dev, &status, priv->type); @@ -476,7 +472,7 @@ priv->line_status &= ~UART_STATE_TRANSIENT_MASK; spin_unlock_irqrestore(&priv->lock, flags); /* wake up the wait for termios */ - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); if (!urb->actual_length) return; @@ -526,12 +522,15 @@ while (1) { /* wake up in bulk read */ - interruptible_sleep_on(&priv->delta_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->lock, flags); status = priv->line_status; spin_unlock_irqrestore(&priv->lock, flags); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ssu100.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/ssu100.c @@ -61,7 +61,6 @@ spinlock_t status_lock; u8 shadowLSR; u8 shadowMSR; - wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ struct async_icount icount; }; @@ -355,8 +354,9 @@ spin_unlock_irqrestore(&priv->status_lock, flags); while (1) { - wait_event_interruptible(priv->delta_msr_wait, - ((priv->icount.rng != prev.rng) || + wait_event_interruptible(port->delta_msr_wait, + (port->serial->disconnected || + (priv->icount.rng != prev.rng) || (priv->icount.dsr != prev.dsr) || (priv->icount.dcd != prev.dcd) || (priv->icount.cts != prev.cts))); @@ -364,6 +364,9 @@ if (signal_pending(current)) return -ERESTARTSYS; + if (port->serial->disconnected) + return -EIO; + spin_lock_irqsave(&priv->status_lock, flags); cur = priv->icount; spin_unlock_irqrestore(&priv->status_lock, flags); @@ -445,7 +448,6 @@ return -ENOMEM; spin_lock_init(&priv->status_lock); - init_waitqueue_head(&priv->delta_msr_wait); usb_set_serial_port_data(port, priv); @@ -506,19 +508,16 @@ { struct usb_device *dev = port->serial->dev; - mutex_lock(&port->serial->disc_mutex); - if (!port->serial->disconnected) { - /* Disable flow control */ - if (!on && - ssu100_setregister(dev, 0, UART_MCR, 0) < 0) + /* Disable flow control */ + if (!on) { + if (ssu100_setregister(dev, 0, UART_MCR, 0) < 0) dev_err(&port->dev, "error from flowcontrol urb\n"); - /* drop RTS and DTR */ - if (on) - set_mctrl(dev, TIOCM_DTR | TIOCM_RTS); - else - clear_mctrl(dev, TIOCM_DTR | TIOCM_RTS); } - mutex_unlock(&port->serial->disc_mutex); + /* drop RTS and DTR */ + if (on) + set_mctrl(dev, TIOCM_DTR | TIOCM_RTS); + else + clear_mctrl(dev, TIOCM_DTR | TIOCM_RTS); } static void ssu100_update_msr(struct usb_serial_port *port, u8 msr) @@ -540,7 +539,7 @@ priv->icount.dcd++; if (msr & UART_MSR_TERI) priv->icount.rng++; - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); } } --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ftdi_sio.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/ftdi_sio.c @@ -69,9 +69,7 @@ int flags; /* some ASYNC_xxxx flags are supported */ unsigned long last_dtr_rts; /* saved modem control outputs */ struct async_icount icount; - wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ char prev_status; /* Used for TIOCMIWAIT */ - bool dev_gone; /* Used to abort TIOCMIWAIT */ char transmit_empty; /* If transmitter is empty or not */ __u16 interface; /* FT2232C, FT2232H or FT4232H port interface (0 for FT232/245) */ @@ -191,7 +189,10 @@ { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_BOOST_PID) }, { USB_DEVICE(NEWPORT_VID, NEWPORT_AGILIS_PID) }, + { USB_DEVICE(NEWPORT_VID, NEWPORT_CONEX_CC_PID) }, + { USB_DEVICE(NEWPORT_VID, NEWPORT_CONEX_AGP_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) }, @@ -642,6 +643,7 @@ { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) }, { USB_DEVICE(ACTON_VID, ACTON_SPECTRAPRO_PID) }, { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) }, + { USB_DEVICE(MITSUBISHI_VID, MITSUBISHI_FXUSB_PID) }, { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) }, { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) }, { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) }, @@ -735,9 +737,34 @@ { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID), .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, - { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) }, - { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) }, - { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_RTS01_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57B_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29A_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29B_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29F_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62B_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S01_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_29C_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_81B_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_82B_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5D_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K4Y_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_K5G_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S05_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_60_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_61_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_62_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_63B_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_64_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_65_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_92D_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_W5R_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_A5R_PID) }, + { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_PW1_PID) }, { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) }, { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) }, { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) }, @@ -871,7 +898,9 @@ { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) }, { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID), .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, - { USB_DEVICE(ST_VID, ST_STMCLT1030_PID), + { USB_DEVICE(ST_VID, ST_STMCLT_2232_PID), + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, + { USB_DEVICE(ST_VID, ST_STMCLT_4232_PID), .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk }, { USB_DEVICE(FTDI_VID, FTDI_RF_R106) }, { USB_DEVICE(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID), @@ -1691,10 +1720,8 @@ kref_init(&priv->kref); mutex_init(&priv->cfg_lock); - init_waitqueue_head(&priv->delta_msr_wait); priv->flags = ASYNC_LOW_LATENCY; - priv->dev_gone = false; if (quirk && quirk->port_probe) quirk->port_probe(priv); @@ -1795,20 +1822,24 @@ } /* - * First and second port on STMCLiteadaptors is reserved for JTAG interface - * and the forth port for pio + * First two ports on JTAG adaptors using an FT4232 such as STMicroelectronics's + * ST Micro Connect Lite are reserved for JTAG or other non-UART interfaces and + * can be accessed from userspace. + * The next two ports are enabled as UARTs by default, where port 2 is + * a conventional RS-232 UART. */ static int ftdi_stmclite_probe(struct usb_serial *serial) { struct usb_device *udev = serial->dev; struct usb_interface *interface = serial->interface; - if (interface == udev->actconfig->interface[2]) - return 0; - - dev_info(&udev->dev, "Ignoring serial port reserved for JTAG\n"); + if (interface == udev->actconfig->interface[0] || + interface == udev->actconfig->interface[1]) { + dev_info(&udev->dev, "Ignoring serial port reserved for JTAG\n"); + return -ENODEV; + } - return -ENODEV; + return 0; } /* @@ -1840,8 +1871,7 @@ { struct ftdi_private *priv = usb_get_serial_port_data(port); - priv->dev_gone = true; - wake_up_interruptible_all(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); remove_sysfs_attrs(port); @@ -1886,24 +1916,22 @@ { struct ftdi_private *priv = usb_get_serial_port_data(port); - mutex_lock(&port->serial->disc_mutex); - if (!port->serial->disconnected) { - /* Disable flow control */ - if (!on && usb_control_msg(port->serial->dev, + /* Disable flow control */ + if (!on) { + if (usb_control_msg(port->serial->dev, usb_sndctrlpipe(port->serial->dev, 0), FTDI_SIO_SET_FLOW_CTRL_REQUEST, FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE, 0, priv->interface, NULL, 0, WDR_TIMEOUT) < 0) { - dev_err(&port->dev, "error from flowcontrol urb\n"); + dev_err(&port->dev, "error from flowcontrol urb\n"); } - /* drop RTS and DTR */ - if (on) - set_mctrl(port, TIOCM_DTR | TIOCM_RTS); - else - clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); } - mutex_unlock(&port->serial->disc_mutex); + /* drop RTS and DTR */ + if (on) + set_mctrl(port, TIOCM_DTR | TIOCM_RTS); + else + clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); } /* @@ -1992,7 +2020,7 @@ if (diff_status & FTDI_RS0_RLSD) priv->icount.dcd++; - wake_up_interruptible_all(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); priv->prev_status = status; } @@ -2449,11 +2477,15 @@ */ case TIOCMIWAIT: cprev = priv->icount; - while (!priv->dev_gone) { - interruptible_sleep_on(&priv->delta_msr_wait); + for (;;) { + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + cnow = priv->icount; if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || @@ -2463,8 +2495,6 @@ } cprev = cnow; } - return -EIO; - break; case TIOCSERGETLSR: return get_lsr_info(port, (struct serial_struct __user *)arg); break; --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/cypress_m8.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/cypress_m8.c @@ -65,6 +65,7 @@ static const struct usb_device_id id_table_cyphidcomrs232[] = { { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) }, { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) }, + { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) }, { } /* Terminating entry */ }; @@ -78,6 +79,7 @@ { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) }, { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) }, { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) }, + { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) }, { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) }, { } /* Terminating entry */ }; @@ -111,7 +113,6 @@ int baud_rate; /* stores current baud rate in integer form */ int isthrottled; /* if throttled, discard reads */ - wait_queue_head_t delta_msr_wait; /* used for TIOCMIWAIT */ char prev_status, diff_status; /* used for TIOCMIWAIT */ /* we pass a pointer to this as the argument sent to cypress_set_termios old_termios */ @@ -231,6 +232,12 @@ * Cypress serial helper functions *****************************************************************************/ +/* FRWD Dongle hidcom needs to skip reset and speed checks */ +static inline bool is_frwd(struct usb_device *dev) +{ + return ((le16_to_cpu(dev->descriptor.idVendor) == VENDOR_ID_FRWD) && + (le16_to_cpu(dev->descriptor.idProduct) == PRODUCT_ID_CYPHIDCOM_FRWD)); +} static int analyze_baud_rate(struct usb_serial_port *port, speed_t new_rate) { @@ -240,6 +247,10 @@ if (unstable_bauds) return new_rate; + /* FRWD Dongle uses 115200 bps */ + if (is_frwd(port->serial->dev)) + return new_rate; + /* * The general purpose firmware for the Cypress M8 allows for * a maximum speed of 57600bps (I have no idea whether DeLorme @@ -449,9 +460,12 @@ kfree(priv); return -ENOMEM; } - init_waitqueue_head(&priv->delta_msr_wait); - usb_reset_configuration(serial->dev); + /* Skip reset for FRWD device. It is a workaound: + device hangs if it receives SET_CONFIGURE in Configured + state. */ + if (!is_frwd(serial->dev)) + usb_reset_configuration(serial->dev); priv->cmd_ctrl = 0; priv->line_control = 0; @@ -868,12 +882,16 @@ switch (cmd) { /* This code comes from drivers/char/serial.c and ftdi_sio.c */ case TIOCMIWAIT: - while (priv != NULL) { - interruptible_sleep_on(&priv->delta_msr_wait); + for (;;) { + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; - else { + + if (port->serial->disconnected) + return -EIO; + + { char diff = priv->diff_status; if (diff == 0) return -EIO; /* no change => error */ @@ -1187,7 +1205,7 @@ if (priv->current_status != priv->prev_status) { priv->diff_status |= priv->current_status ^ priv->prev_status; - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); priv->prev_status = priv->current_status; } spin_unlock_irqrestore(&priv->lock, flags); --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ti_usb_3410_5052.h +++ linux-lts-raring-3.8.0/drivers/usb/serial/ti_usb_3410_5052.h @@ -52,7 +52,9 @@ /* Abbott Diabetics vendor and product ids */ #define ABBOTT_VENDOR_ID 0x1a61 -#define ABBOTT_PRODUCT_ID 0x3410 +#define ABBOTT_STEREO_PLUG_ID 0x3410 +#define ABBOTT_PRODUCT_ID ABBOTT_STEREO_PLUG_ID +#define ABBOTT_STRIP_PORT_ID 0x3420 /* Commands */ #define TI_GET_VERSION 0x01 --- linux-lts-raring-3.8.0.orig/drivers/usb/serial/ark3116.c +++ linux-lts-raring-3.8.0/drivers/usb/serial/ark3116.c @@ -43,7 +43,7 @@ #define DRIVER_NAME "ark3116" /* usb timeout of 1 second */ -#define ARK_TIMEOUT (1*HZ) +#define ARK_TIMEOUT 1000 static const struct usb_device_id id_table[] = { { USB_DEVICE(0x6547, 0x0232) }, @@ -62,7 +62,6 @@ } struct ark3116_private { - wait_queue_head_t delta_msr_wait; struct async_icount icount; int irda; /* 1 for irda device */ @@ -146,7 +145,6 @@ if (!priv) return -ENOMEM; - init_waitqueue_head(&priv->delta_msr_wait); mutex_init(&priv->hw_lock); spin_lock_init(&priv->status_lock); @@ -456,10 +454,14 @@ case TIOCMIWAIT: for (;;) { struct async_icount prev = priv->icount; - interruptible_sleep_on(&priv->delta_msr_wait); + interruptible_sleep_on(&port->delta_msr_wait); /* see if a signal did it */ if (signal_pending(current)) return -ERESTARTSYS; + + if (port->serial->disconnected) + return -EIO; + if ((prev.rng == priv->icount.rng) && (prev.dsr == priv->icount.dsr) && (prev.dcd == priv->icount.dcd) && @@ -580,7 +582,7 @@ priv->icount.dcd++; if (msr & UART_MSR_TERI) priv->icount.rng++; - wake_up_interruptible(&priv->delta_msr_wait); + wake_up_interruptible(&port->delta_msr_wait); } } --- linux-lts-raring-3.8.0.orig/drivers/usb/core/hub.c +++ linux-lts-raring-3.8.0/drivers/usb/core/hub.c @@ -26,11 +26,12 @@ #include #include #include +#include #include #include -#include "usb.h" +#include "hub.h" /* if we are in debug mode, always announce new devices */ #ifdef DEBUG @@ -42,62 +43,6 @@ #define USB_VENDOR_GENESYS_LOGIC 0x05e3 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01 -struct usb_port { - struct usb_device *child; - struct device dev; - struct dev_state *port_owner; - enum usb_port_connect_type connect_type; -}; - -struct usb_hub { - struct device *intfdev; /* the "interface" device */ - struct usb_device *hdev; - struct kref kref; - struct urb *urb; /* for interrupt polling pipe */ - - /* buffer for urb ... with extra space in case of babble */ - char (*buffer)[8]; - union { - struct usb_hub_status hub; - struct usb_port_status port; - } *status; /* buffer for status reports */ - struct mutex status_mutex; /* for the status buffer */ - - int error; /* last reported error */ - int nerrors; /* track consecutive errors */ - - struct list_head event_list; /* hubs w/data or errs ready */ - unsigned long event_bits[1]; /* status change bitmask */ - unsigned long change_bits[1]; /* ports with logical connect - status change */ - unsigned long busy_bits[1]; /* ports being reset or - resumed */ - unsigned long removed_bits[1]; /* ports with a "removed" - device present */ - unsigned long wakeup_bits[1]; /* ports that have signaled - remote wakeup */ -#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */ -#error event_bits[] is too short! -#endif - - struct usb_hub_descriptor *descriptor; /* class descriptor */ - struct usb_tt tt; /* Transaction Translator */ - - unsigned mA_per_port; /* current for each child */ - - unsigned limited_power:1; - unsigned quiescing:1; - unsigned disconnected:1; - - unsigned quirk_check_port_auto_suspend:1; - - unsigned has_indicators:1; - u8 indicator[USB_MAXCHILDREN]; - struct delayed_work leds; - struct delayed_work init_work; - struct usb_port **ports; -}; - static inline int hub_is_superspeed(struct usb_device *hdev) { return (hdev->descriptor.bDeviceProtocol == USB_HUB_PR_SS); @@ -164,13 +109,10 @@ DECLARE_RWSEM(ehci_cf_port_reset_rwsem); EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem); -#define HUB_DEBOUNCE_TIMEOUT 1500 +#define HUB_DEBOUNCE_TIMEOUT 2000 #define HUB_DEBOUNCE_STEP 25 #define HUB_DEBOUNCE_STABLE 100 -#define to_usb_port(_dev) \ - container_of(_dev, struct usb_port, dev) - static int usb_reset_and_verify_device(struct usb_device *udev); static inline char *portspeed(struct usb_hub *hub, int portstatus) @@ -186,7 +128,7 @@ } /* Note that hdev or one of its children must be locked! */ -static struct usb_hub *hdev_to_hub(struct usb_device *hdev) +struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev) { if (!hdev || !hdev->actconfig || !hdev->maxchild) return NULL; @@ -360,7 +302,7 @@ if (!udev->lpm_capable || udev->speed != USB_SPEED_SUPER) return; - hub = hdev_to_hub(udev->parent); + hub = usb_hub_to_struct_hub(udev->parent); /* It doesn't take time to transition the roothub into U0, since it * doesn't have an upstream link. */ @@ -452,7 +394,7 @@ /* * USB 2.0 spec Section 11.24.2.2 */ -static int clear_port_feature(struct usb_device *hdev, int port1, int feature) +int usb_clear_port_feature(struct usb_device *hdev, int port1, int feature) { return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port1, @@ -645,7 +587,7 @@ void usb_kick_khubd(struct usb_device *hdev) { - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); if (hub) kick_khubd(hub); @@ -667,7 +609,7 @@ if (!hdev) return; - hub = hdev_to_hub(hdev); + hub = usb_hub_to_struct_hub(hdev); if (hub) { set_bit(portnum, hub->wakeup_bits); kick_khubd(hub); @@ -725,6 +667,15 @@ static inline int hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt) { + /* Need to clear both directions for control ep */ + if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) == + USB_ENDPOINT_XFER_CONTROL) { + int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), + HUB_CLEAR_TT_BUFFER, USB_RT_PORT, + devinfo ^ 0x8000, tt, NULL, 0, 1000); + if (status) + return status; + } return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo, tt, NULL, 0, 1000); @@ -774,6 +725,32 @@ } /** + * usb_hub_set_port_power - control hub port's power state + * @hdev: target hub + * @port1: port index + * @set: expected status + * + * call this function to control port's power via setting or + * clearing the port's PORT_POWER feature. + */ +int usb_hub_set_port_power(struct usb_device *hdev, int port1, + bool set) +{ + int ret; + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); + struct usb_port *port_dev = hub->ports[port1 - 1]; + + if (set) + ret = set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); + else + ret = usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_POWER); + + if (!ret) + port_dev->power_is_on = set; + return ret; +} + +/** * usb_hub_clear_tt_buffer - clear control/bulk TT state in high speed hub * @urb: an URB associated with the failed or incomplete split transaction * @@ -849,7 +826,11 @@ dev_dbg(hub->intfdev, "trying to enable port power on " "non-switchable hub\n"); for (port1 = 1; port1 <= hub->descriptor->bNbrPorts; port1++) - set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER); + if (hub->ports[port1 - 1]->power_is_on) + set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER); + else + usb_clear_port_feature(hub->hdev, port1, + USB_PORT_FEAT_POWER); /* Wait at least 100 msec for power to become stable */ delay = max(pgood_delay, (unsigned) 100); @@ -943,7 +924,7 @@ if (hub_is_superspeed(hub->hdev)) ret = hub_usb3_port_disable(hub, port1); else - ret = clear_port_feature(hdev, port1, + ret = usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_ENABLE); } if (ret) @@ -992,7 +973,7 @@ if (!udev->parent) /* Can't remove a root hub */ return -EINVAL; - hub = hdev_to_hub(udev->parent); + hub = usb_hub_to_struct_hub(udev->parent); intf = to_usb_interface(hub->intfdev); usb_autopm_get_interface(intf); @@ -1124,7 +1105,7 @@ * Do not disable USB3 protocol ports. */ if (!hub_is_superspeed(hdev)) { - clear_port_feature(hdev, port1, + usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_ENABLE); portstatus &= ~USB_PORT_STAT_ENABLE; } else { @@ -1136,18 +1117,18 @@ /* Clear status-change flags; we'll debounce later */ if (portchange & USB_PORT_STAT_C_CONNECTION) { need_debounce_delay = true; - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_CONNECTION); } if (portchange & USB_PORT_STAT_C_ENABLE) { need_debounce_delay = true; - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_ENABLE); } if ((portchange & USB_PORT_STAT_C_BH_RESET) && hub_is_superspeed(hub->hdev)) { need_debounce_delay = true; - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_BH_PORT_RESET); } /* We can forget about a "removed" device when there's a @@ -1181,10 +1162,16 @@ set_bit(port1, hub->change_bits); } else if (udev->persist_enabled) { + struct usb_port *port_dev = hub->ports[port1 - 1]; + #ifdef CONFIG_PM udev->reset_resume = 1; #endif - set_bit(port1, hub->change_bits); + /* Don't set the change_bits when the device + * was powered off. + */ + if (port_dev->power_is_on) + set_bit(port1, hub->change_bits); } else { /* The power session is gone; tell khubd */ @@ -1294,52 +1281,6 @@ return 0; } -static void usb_port_device_release(struct device *dev) -{ - struct usb_port *port_dev = to_usb_port(dev); - - kfree(port_dev); -} - -static void usb_hub_remove_port_device(struct usb_hub *hub, - int port1) -{ - device_unregister(&hub->ports[port1 - 1]->dev); -} - -struct device_type usb_port_device_type = { - .name = "usb_port", - .release = usb_port_device_release, -}; - -static int usb_hub_create_port_device(struct usb_hub *hub, - int port1) -{ - struct usb_port *port_dev = NULL; - int retval; - - port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL); - if (!port_dev) { - retval = -ENOMEM; - goto exit; - } - - hub->ports[port1 - 1] = port_dev; - port_dev->dev.parent = hub->intfdev; - port_dev->dev.type = &usb_port_device_type; - dev_set_name(&port_dev->dev, "port%d", port1); - - retval = device_register(&port_dev->dev); - if (retval) - goto error_register; - return 0; - -error_register: - put_device(&port_dev->dev); -exit: - return retval; -} - static int hub_configure(struct usb_hub *hub, struct usb_endpoint_descriptor *endpoint) { @@ -1351,6 +1292,8 @@ unsigned int pipe; int maxp, ret, i; char *message = "out of memory"; + unsigned unit_load; + unsigned full_load; hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL); if (!hub->buffer) { @@ -1397,6 +1340,13 @@ } wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); + if (hub_is_superspeed(hdev)) { + unit_load = 150; + full_load = 900; + } else { + unit_load = 100; + full_load = 500; + } /* FIXME for USB 3.0, skip for now */ if ((wHubCharacteristics & HUB_CHAR_COMPOUND) && @@ -1516,40 +1466,44 @@ goto fail; } le16_to_cpus(&hubstatus); + hcd = bus_to_hcd(hdev->bus); if (hdev == hdev->bus->root_hub) { - if (hdev->bus_mA == 0 || hdev->bus_mA >= 500) - hub->mA_per_port = 500; + if (hcd->power_budget > 0) + hdev->bus_mA = hcd->power_budget; + else + hdev->bus_mA = full_load * hdev->maxchild; + if (hdev->bus_mA >= full_load) + hub->mA_per_port = full_load; else { hub->mA_per_port = hdev->bus_mA; hub->limited_power = 1; } } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) { + int remaining = hdev->bus_mA - + hub->descriptor->bHubContrCurrent; + dev_dbg(hub_dev, "hub controller current requirement: %dmA\n", hub->descriptor->bHubContrCurrent); hub->limited_power = 1; - if (hdev->maxchild > 0) { - int remaining = hdev->bus_mA - - hub->descriptor->bHubContrCurrent; - if (remaining < hdev->maxchild * 100) - dev_warn(hub_dev, + if (remaining < hdev->maxchild * unit_load) + dev_warn(hub_dev, "insufficient power available " "to use all downstream ports\n"); - hub->mA_per_port = 100; /* 7.2.1.1 */ - } + hub->mA_per_port = unit_load; /* 7.2.1 */ + } else { /* Self-powered external hub */ /* FIXME: What about battery-powered external hubs that * provide less current per port? */ - hub->mA_per_port = 500; + hub->mA_per_port = full_load; } - if (hub->mA_per_port < 500) + if (hub->mA_per_port < full_load) dev_dbg(hub_dev, "%umA bus power budget for each child\n", hub->mA_per_port); /* Update the HCD's internal representation of this hub before khubd * starts getting port status changes for devices under the hub. */ - hcd = bus_to_hcd(hdev->bus); if (hcd->driver->update_hub_device) { ret = hcd->driver->update_hub_device(hcd, hdev, &hub->tt, GFP_KERNEL); @@ -1605,6 +1559,8 @@ dev_err(hub->intfdev, "couldn't create port%d device.\n", i + 1); + usb_hub_adjust_deviceremovable(hdev, hub->descriptor); + hub_activate(hub, HUB_INIT); return 0; @@ -1659,6 +1615,7 @@ kfree(hub->status); kfree(hub->buffer); + pm_suspend_ignore_children(&intf->dev, false); kref_put(&hub->kref, hub_release); } @@ -1761,6 +1718,7 @@ usb_set_intfdata (intf, hub); intf->needs_remote_wakeup = 1; + pm_suspend_ignore_children(&intf->dev, true); if (hdev->speed == USB_SPEED_HIGH) highspeed_hubs++; @@ -1779,7 +1737,7 @@ hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) { struct usb_device *hdev = interface_to_usbdev (intf); - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); /* assert ifno == 0 (part of hub spec) */ switch (code) { @@ -1825,7 +1783,7 @@ /* This assumes that devices not managed by the hub driver * will always have maxchild equal to 0. */ - *ppowner = &(hdev_to_hub(hdev)->ports[port1 - 1]->port_owner); + *ppowner = &(usb_hub_to_struct_hub(hdev)->ports[port1 - 1]->port_owner); return 0; } @@ -1862,7 +1820,7 @@ void usb_hub_release_all_ports(struct usb_device *hdev, struct dev_state *owner) { - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); int n; for (n = 0; n < hdev->maxchild; n++) { @@ -1879,13 +1837,13 @@ if (udev->state == USB_STATE_NOTATTACHED || !udev->parent) return false; - hub = hdev_to_hub(udev->parent); + hub = usb_hub_to_struct_hub(udev->parent); return !!hub->ports[udev->portnum - 1]->port_owner; } static void recursively_mark_NOTATTACHED(struct usb_device *udev) { - struct usb_hub *hub = hdev_to_hub(udev); + struct usb_hub *hub = usb_hub_to_struct_hub(udev); int i; for (i = 0; i < udev->maxchild; ++i) { @@ -2054,7 +2012,7 @@ void usb_disconnect(struct usb_device **pdev) { struct usb_device *udev = *pdev; - struct usb_hub *hub = hdev_to_hub(udev); + struct usb_hub *hub = usb_hub_to_struct_hub(udev); int i; /* mark the device as inactive, so any further urb submissions for @@ -2081,6 +2039,19 @@ usb_disable_device(udev, 0); usb_hcd_synchronize_unlinks(udev); + if (udev->parent) { + struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); + struct usb_port *port_dev = hub->ports[udev->portnum - 1]; + + sysfs_remove_link(&udev->dev.kobj, "port"); + sysfs_remove_link(&port_dev->dev.kobj, "device"); + + if (!port_dev->did_runtime_put) + pm_runtime_put(&port_dev->dev); + else + port_dev->did_runtime_put = false; + } + usb_remove_ep_devs(&udev->ep0); usb_unlock_device(udev); @@ -2267,7 +2238,7 @@ if (!hdev) return; - hub = hdev_to_hub(udev->parent); + hub = usb_hub_to_struct_hub(udev->parent); wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); @@ -2373,6 +2344,26 @@ goto fail; } + /* Create link files between child device and usb port device. */ + if (udev->parent) { + struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); + struct usb_port *port_dev = hub->ports[udev->portnum - 1]; + + err = sysfs_create_link(&udev->dev.kobj, + &port_dev->dev.kobj, "port"); + if (err) + goto fail; + + err = sysfs_create_link(&port_dev->dev.kobj, + &udev->dev.kobj, "device"); + if (err) { + sysfs_remove_link(&udev->dev.kobj, "port"); + goto fail; + } + + pm_runtime_get_sync(&port_dev->dev); + } + (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev); usb_mark_last_busy(udev); pm_runtime_put_sync_autosuspend(&udev->dev); @@ -2535,77 +2526,9 @@ return ret; /* The port state is unknown until the reset completes. */ - if ((portstatus & USB_PORT_STAT_RESET)) - goto delay; - - /* - * Some buggy devices require a warm reset to be issued even - * when the port appears not to be connected. - */ - if (!warm) { - /* - * Some buggy devices can cause an NEC host controller - * to transition to the "Error" state after a hot port - * reset. This will show up as the port state in - * "Inactive", and the port may also report a - * disconnect. Forcing a warm port reset seems to make - * the device work. - * - * See https://bugzilla.kernel.org/show_bug.cgi?id=41752 - */ - if (hub_port_warm_reset_required(hub, portstatus)) { - int ret; - - if ((portchange & USB_PORT_STAT_C_CONNECTION)) - clear_port_feature(hub->hdev, port1, - USB_PORT_FEAT_C_CONNECTION); - if (portchange & USB_PORT_STAT_C_LINK_STATE) - clear_port_feature(hub->hdev, port1, - USB_PORT_FEAT_C_PORT_LINK_STATE); - if (portchange & USB_PORT_STAT_C_RESET) - clear_port_feature(hub->hdev, port1, - USB_PORT_FEAT_C_RESET); - dev_dbg(hub->intfdev, "hot reset failed, warm reset port %d\n", - port1); - ret = hub_port_reset(hub, port1, - udev, HUB_BH_RESET_TIME, - true); - if ((portchange & USB_PORT_STAT_C_CONNECTION)) - clear_port_feature(hub->hdev, port1, - USB_PORT_FEAT_C_CONNECTION); - return ret; - } - /* Device went away? */ - if (!(portstatus & USB_PORT_STAT_CONNECTION)) - return -ENOTCONN; - - /* bomb out completely if the connection bounced */ - if ((portchange & USB_PORT_STAT_C_CONNECTION)) - return -ENOTCONN; - - if ((portstatus & USB_PORT_STAT_ENABLE)) { - if (hub_is_wusb(hub)) - udev->speed = USB_SPEED_WIRELESS; - else if (hub_is_superspeed(hub->hdev)) - udev->speed = USB_SPEED_SUPER; - else if (portstatus & USB_PORT_STAT_HIGH_SPEED) - udev->speed = USB_SPEED_HIGH; - else if (portstatus & USB_PORT_STAT_LOW_SPEED) - udev->speed = USB_SPEED_LOW; - else - udev->speed = USB_SPEED_FULL; - return 0; - } - } else { - if (!(portstatus & USB_PORT_STAT_CONNECTION) || - hub_port_warm_reset_required(hub, - portstatus)) - return -ENOTCONN; - - return 0; - } + if (!(portstatus & USB_PORT_STAT_RESET)) + break; -delay: /* switch to the long delay after two short delay failures */ if (delay_time >= 2 * HUB_SHORT_RESET_TIME) delay = HUB_LONG_RESET_TIME; @@ -2615,20 +2538,54 @@ port1, warm ? "warm " : "", delay); } - return -EBUSY; + if ((portstatus & USB_PORT_STAT_RESET)) + return -EBUSY; + + if (hub_port_warm_reset_required(hub, portstatus)) + return -ENOTCONN; + + /* Device went away? */ + if (!(portstatus & USB_PORT_STAT_CONNECTION)) + return -ENOTCONN; + + /* bomb out completely if the connection bounced. A USB 3.0 + * connection may bounce if multiple warm resets were issued, + * but the device may have successfully re-connected. Ignore it. + */ + if (!hub_is_superspeed(hub->hdev) && + (portchange & USB_PORT_STAT_C_CONNECTION)) + return -ENOTCONN; + + if (!(portstatus & USB_PORT_STAT_ENABLE)) + return -EBUSY; + + if (!udev) + return 0; + + if (hub_is_wusb(hub)) + udev->speed = USB_SPEED_WIRELESS; + else if (hub_is_superspeed(hub->hdev)) + udev->speed = USB_SPEED_SUPER; + else if (portstatus & USB_PORT_STAT_HIGH_SPEED) + udev->speed = USB_SPEED_HIGH; + else if (portstatus & USB_PORT_STAT_LOW_SPEED) + udev->speed = USB_SPEED_LOW; + else + udev->speed = USB_SPEED_FULL; + return 0; } static void hub_port_finish_reset(struct usb_hub *hub, int port1, - struct usb_device *udev, int *status, bool warm) + struct usb_device *udev, int *status) { switch (*status) { case 0: - if (!warm) { - struct usb_hcd *hcd; - /* TRSTRCY = 10 ms; plus some extra */ - msleep(10 + 40); + /* TRSTRCY = 10 ms; plus some extra */ + msleep(10 + 40); + if (udev) { + struct usb_hcd *hcd = bus_to_hcd(udev->bus); + update_devnum(udev, 0); - hcd = bus_to_hcd(udev->bus); /* The xHC may think the device is already reset, * so ignore the status. */ @@ -2638,16 +2595,17 @@ /* FALL THROUGH */ case -ENOTCONN: case -ENODEV: - clear_port_feature(hub->hdev, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_RESET); - /* FIXME need disconnect() for NOTATTACHED device */ if (hub_is_superspeed(hub->hdev)) { - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_BH_PORT_RESET); - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_PORT_LINK_STATE); + usb_clear_port_feature(hub->hdev, port1, + USB_PORT_FEAT_C_CONNECTION); } - if (!warm) + if (udev) usb_set_device_state(udev, *status ? USB_STATE_NOTATTACHED : USB_STATE_DEFAULT); @@ -2660,18 +2618,30 @@ struct usb_device *udev, unsigned int delay, bool warm) { int i, status; + u16 portchange, portstatus; - if (!warm) { - /* Block EHCI CF initialization during the port reset. - * Some companion controllers don't like it when they mix. - */ - down_read(&ehci_cf_port_reset_rwsem); - } else { - if (!hub_is_superspeed(hub->hdev)) { + if (!hub_is_superspeed(hub->hdev)) { + if (warm) { dev_err(hub->intfdev, "only USB3 hub support " "warm reset\n"); return -EINVAL; } + /* Block EHCI CF initialization during the port reset. + * Some companion controllers don't like it when they mix. + */ + down_read(&ehci_cf_port_reset_rwsem); + } else if (!warm) { + /* + * If the caller hasn't explicitly requested a warm reset, + * double check and see if one is needed. + */ + status = hub_port_status(hub, port1, + &portstatus, &portchange); + if (status < 0) + goto done; + + if (hub_port_warm_reset_required(hub, portstatus)) + warm = true; } /* Reset the port */ @@ -2692,10 +2662,33 @@ status); } - /* return on disconnect or reset */ + /* Check for disconnect or reset */ if (status == 0 || status == -ENOTCONN || status == -ENODEV) { - hub_port_finish_reset(hub, port1, udev, &status, warm); - goto done; + hub_port_finish_reset(hub, port1, udev, &status); + + if (!hub_is_superspeed(hub->hdev)) + goto done; + + /* + * If a USB 3.0 device migrates from reset to an error + * state, re-issue the warm reset. + */ + if (hub_port_status(hub, port1, + &portstatus, &portchange) < 0) + goto done; + + if (!hub_port_warm_reset_required(hub, portstatus)) + goto done; + + /* + * If the port is in SS.Inactive or Compliance Mode, the + * hot or warm reset failed. Try another warm reset. + */ + if (!warm) { + dev_dbg(hub->intfdev, "hot reset failed, warm reset port %d\n", + port1); + warm = true; + } } dev_dbg (hub->intfdev, @@ -2709,7 +2702,7 @@ port1); done: - if (!warm) + if (!hub_is_superspeed(hub->hdev)) up_read(&ehci_cf_port_reset_rwsem); return status; @@ -2783,10 +2776,10 @@ /* Late port handoff can set status-change bits */ if (portchange & USB_PORT_STAT_C_CONNECTION) - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_CONNECTION); if (portchange & USB_PORT_STAT_C_ENABLE) - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_ENABLE); } @@ -2904,7 +2897,9 @@ */ int usb_port_suspend(struct usb_device *udev, pm_message_t msg) { - struct usb_hub *hub = hdev_to_hub(udev->parent); + struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); + struct usb_port *port_dev = hub->ports[udev->portnum - 1]; + enum pm_qos_flags_status pm_qos_stat; int port1 = udev->portnum; int status; @@ -2941,7 +2936,7 @@ status); /* bail if autosuspend is requested */ if (PMSG_IS_AUTO(msg)) - return status; + goto err_wakeup; } } @@ -2950,49 +2945,52 @@ usb_set_usb2_hardware_lpm(udev, 0); if (usb_disable_ltm(udev)) { - dev_err(&udev->dev, "%s Failed to disable LTM before suspend\n.", - __func__); - return -ENOMEM; + dev_err(&udev->dev, "Failed to disable LTM before suspend\n."); + status = -ENOMEM; + if (PMSG_IS_AUTO(msg)) + goto err_ltm; } if (usb_unlocked_disable_lpm(udev)) { - dev_err(&udev->dev, "%s Failed to disable LPM before suspend\n.", - __func__); - return -ENOMEM; + dev_err(&udev->dev, "Failed to disable LPM before suspend\n."); + status = -ENOMEM; + if (PMSG_IS_AUTO(msg)) + goto err_lpm3; } /* see 7.1.7.6 */ if (hub_is_superspeed(hub->hdev)) - status = set_port_feature(hub->hdev, - port1 | (USB_SS_PORT_LS_U3 << 3), - USB_PORT_FEAT_LINK_STATE); + status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3); else status = set_port_feature(hub->hdev, port1, USB_PORT_FEAT_SUSPEND); if (status) { dev_dbg(hub->intfdev, "can't suspend port %d, status %d\n", port1, status); - /* paranoia: "should not happen" */ - if (udev->do_remote_wakeup) { - if (!hub_is_superspeed(hub->hdev)) { - (void) usb_control_msg(udev, - usb_sndctrlpipe(udev, 0), - USB_REQ_CLEAR_FEATURE, - USB_RECIP_DEVICE, - USB_DEVICE_REMOTE_WAKEUP, 0, - NULL, 0, - USB_CTRL_SET_TIMEOUT); - } else - (void) usb_disable_function_remotewakeup(udev); - - } + /* Try to enable USB3 LPM and LTM again */ + usb_unlocked_enable_lpm(udev); + err_lpm3: + usb_enable_ltm(udev); + err_ltm: /* Try to enable USB2 hardware LPM again */ if (udev->usb2_hw_lpm_capable == 1) usb_set_usb2_hardware_lpm(udev, 1); - /* Try to enable USB3 LTM and LPM again */ - usb_enable_ltm(udev); - usb_unlocked_enable_lpm(udev); + if (udev->do_remote_wakeup) { + if (udev->speed < USB_SPEED_SUPER) + usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + USB_REQ_CLEAR_FEATURE, + USB_RECIP_DEVICE, + USB_DEVICE_REMOTE_WAKEUP, 0, + NULL, 0, USB_CTRL_SET_TIMEOUT); + else + usb_control_msg(udev, usb_sndctrlpipe(udev, 0), + USB_REQ_CLEAR_FEATURE, + USB_RECIP_INTERFACE, + USB_INTRF_FUNC_SUSPEND, 0, + NULL, 0, USB_CTRL_SET_TIMEOUT); + } + err_wakeup: /* System sleep transitions should never fail */ if (!PMSG_IS_AUTO(msg)) @@ -3006,6 +3004,21 @@ udev->port_is_suspended = 1; msleep(10); } + + /* + * Check whether current status meets the requirement of + * usb port power off mechanism + */ + pm_qos_stat = dev_pm_qos_flags(&port_dev->dev, + PM_QOS_FLAG_NO_POWER_OFF); + if (!udev->do_remote_wakeup + && pm_qos_stat != PM_QOS_FLAGS_ALL + && udev->persist_enabled + && !status) { + pm_runtime_put_sync(&port_dev->dev); + port_dev->did_runtime_put = true; + } + usb_mark_last_busy(hub->hdev); return status; } @@ -3141,11 +3154,22 @@ */ int usb_port_resume(struct usb_device *udev, pm_message_t msg) { - struct usb_hub *hub = hdev_to_hub(udev->parent); + struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); + struct usb_port *port_dev = hub->ports[udev->portnum - 1]; int port1 = udev->portnum; int status; u16 portchange, portstatus; + if (port_dev->did_runtime_put) { + status = pm_runtime_get_sync(&port_dev->dev); + port_dev->did_runtime_put = false; + if (status < 0) { + dev_dbg(&udev->dev, "can't resume usb port, status %d\n", + status); + return status; + } + } + /* Skip the initial Clear-Suspend step for a remote wakeup */ status = hub_port_status(hub, port1, &portstatus, &portchange); if (status == 0 && !port_is_suspended(hub, portstatus)) @@ -3157,11 +3181,9 @@ /* see 7.1.7.7; affects power usage, but not budgeting */ if (hub_is_superspeed(hub->hdev)) - status = set_port_feature(hub->hdev, - port1 | (USB_SS_PORT_LS_U0 << 3), - USB_PORT_FEAT_LINK_STATE); + status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U0); else - status = clear_port_feature(hub->hdev, + status = usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_SUSPEND); if (status) { dev_dbg(hub->intfdev, "can't resume port %d, status %d\n", @@ -3187,11 +3209,11 @@ udev->port_is_suspended = 0; if (hub_is_superspeed(hub->hdev)) { if (portchange & USB_PORT_STAT_C_LINK_STATE) - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_PORT_LINK_STATE); } else { if (portchange & USB_PORT_STAT_C_SUSPEND) - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_SUSPEND); } } @@ -3247,7 +3269,7 @@ int usb_port_resume(struct usb_device *udev, pm_message_t msg) { - struct usb_hub *hub = hdev_to_hub(udev->parent); + struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); int port1 = udev->portnum; int status; u16 portchange, portstatus; @@ -3826,7 +3848,7 @@ * every 25ms for transient disconnects. When the port status has been * unchanged for 100ms it returns the port status. */ -static int hub_port_debounce(struct usb_hub *hub, int port1) +int hub_port_debounce(struct usb_hub *hub, int port1, bool must_be_connected) { int ret; int total_time, stable_time = 0; @@ -3840,7 +3862,9 @@ if (!(portchange & USB_PORT_STAT_C_CONNECTION) && (portstatus & USB_PORT_STAT_CONNECTION) == connection) { - stable_time += HUB_DEBOUNCE_STEP; + if (!must_be_connected || + (connection == USB_PORT_STAT_CONNECTION)) + stable_time += HUB_DEBOUNCE_STEP; if (stable_time >= HUB_DEBOUNCE_STABLE) break; } else { @@ -3849,7 +3873,7 @@ } if (portchange & USB_PORT_STAT_C_CONNECTION) { - clear_port_feature(hub->hdev, port1, + usb_clear_port_feature(hub->hdev, port1, USB_PORT_FEAT_C_CONNECTION); } @@ -4246,16 +4270,23 @@ for (port1 = 1; port1 <= hdev->maxchild; ++port1) { struct usb_device *udev = hub->ports[port1 - 1]->child; int delta; + unsigned unit_load; if (!udev) continue; + if (hub_is_superspeed(udev)) + unit_load = 150; + else + unit_load = 100; - /* Unconfigured devices may not use more than 100mA, - * or 8mA for OTG ports */ + /* + * Unconfigured devices may not use more than one unit load, + * or 8mA for OTG ports + */ if (udev->actconfig) - delta = udev->actconfig->desc.bMaxPower * 2; + delta = usb_get_max_power(udev, udev->actconfig); else if (port1 != udev->bus->otg_port || hdev->parent) - delta = 100; + delta = unit_load; else delta = 8; if (delta > hub->mA_per_port) @@ -4290,6 +4321,7 @@ le16_to_cpu(hub->descriptor->wHubCharacteristics); struct usb_device *udev; int status, i; + unsigned unit_load; dev_dbg (hub_dev, "port %d, status %04x, change %04x, %s\n", @@ -4353,7 +4385,7 @@ if (portchange & (USB_PORT_STAT_C_CONNECTION | USB_PORT_STAT_C_ENABLE)) { - status = hub_port_debounce(hub, port1); + status = hub_port_debounce_be_stable(hub, port1); if (status < 0) { if (printk_ratelimit()) dev_err(hub_dev, "connect-debounce failed, " @@ -4379,6 +4411,10 @@ goto done; return; } + if (hub_is_superspeed(hub->hdev)) + unit_load = 150; + else + unit_load = 100; for (i = 0; i < SET_CONFIG_TRIES; i++) { @@ -4426,7 +4462,7 @@ * on the parent. */ if (udev->descriptor.bDeviceClass == USB_CLASS_HUB - && udev->bus_mA <= 100) { + && udev->bus_mA <= unit_load) { u16 devstat; status = usb_get_status(udev, USB_RECIP_DEVICE, 0, @@ -4528,7 +4564,7 @@ if (!hub_is_superspeed(hdev)) { if (!(portchange & USB_PORT_STAT_C_SUSPEND)) return 0; - clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND); + usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND); } else { if (!udev || udev->state != USB_STATE_SUSPENDED || (portstatus & USB_PORT_STAT_LINK_STATE) != @@ -4656,7 +4692,7 @@ continue; if (portchange & USB_PORT_STAT_C_CONNECTION) { - clear_port_feature(hdev, i, + usb_clear_port_feature(hdev, i, USB_PORT_FEAT_C_CONNECTION); connect_change = 1; } @@ -4667,7 +4703,7 @@ "port %d enable change, " "status %08x\n", i, portstatus); - clear_port_feature(hdev, i, + usb_clear_port_feature(hdev, i, USB_PORT_FEAT_C_ENABLE); /* @@ -4698,7 +4734,7 @@ dev_dbg(hub_dev, "over-current change on port " "%d\n", i); - clear_port_feature(hdev, i, + usb_clear_port_feature(hdev, i, USB_PORT_FEAT_C_OVER_CURRENT); msleep(100); /* Cool down */ hub_power_on(hub, true); @@ -4712,7 +4748,7 @@ dev_dbg (hub_dev, "reset change on port %d\n", i); - clear_port_feature(hdev, i, + usb_clear_port_feature(hdev, i, USB_PORT_FEAT_C_RESET); } if ((portchange & USB_PORT_STAT_C_BH_RESET) && @@ -4720,18 +4756,18 @@ dev_dbg(hub_dev, "warm reset change on port %d\n", i); - clear_port_feature(hdev, i, + usb_clear_port_feature(hdev, i, USB_PORT_FEAT_C_BH_PORT_RESET); } if (portchange & USB_PORT_STAT_C_LINK_STATE) { - clear_port_feature(hub->hdev, i, + usb_clear_port_feature(hub->hdev, i, USB_PORT_FEAT_C_PORT_LINK_STATE); } if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) { dev_warn(hub_dev, "config error on port %d\n", i); - clear_port_feature(hub->hdev, i, + usb_clear_port_feature(hub->hdev, i, USB_PORT_FEAT_C_PORT_CONFIG_ERROR); } @@ -4740,12 +4776,21 @@ */ if (hub_port_warm_reset_required(hub, portstatus)) { int status; + struct usb_device *udev = + hub->ports[i - 1]->child; dev_dbg(hub_dev, "warm reset port %d\n", i); - status = hub_port_reset(hub, i, NULL, - HUB_BH_RESET_TIME, true); - if (status < 0) - hub_port_disable(hub, i, 1); + if (!udev) { + status = hub_port_reset(hub, i, + NULL, HUB_BH_RESET_TIME, + true); + if (status < 0) + hub_port_disable(hub, i, 1); + } else { + usb_lock_device(udev); + status = usb_reset_device(udev); + usb_unlock_device(udev); + } connect_change = 0; } @@ -5006,7 +5051,7 @@ dev_dbg(&udev->dev, "%s for root hub!\n", __func__); return -EISDIR; } - parent_hub = hdev_to_hub(parent_hdev); + parent_hub = usb_hub_to_struct_hub(parent_hdev); /* Disable LPM and LTM while we reset the device and reinstall the alt * settings. Device-initiated LPM settings, and system exit latency @@ -5262,7 +5307,7 @@ struct usb_device *usb_hub_find_child(struct usb_device *hdev, int port1) { - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); if (port1 < 1 || port1 > hdev->maxchild) return NULL; @@ -5279,7 +5324,7 @@ void usb_set_hub_port_connect_type(struct usb_device *hdev, int port1, enum usb_port_connect_type type) { - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); hub->ports[port1 - 1]->connect_type = type; } @@ -5295,11 +5340,52 @@ enum usb_port_connect_type usb_get_hub_port_connect_type(struct usb_device *hdev, int port1) { - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); return hub->ports[port1 - 1]->connect_type; } +void usb_hub_adjust_deviceremovable(struct usb_device *hdev, + struct usb_hub_descriptor *desc) +{ + enum usb_port_connect_type connect_type; + int i; + + if (!hub_is_superspeed(hdev)) { + for (i = 1; i <= hdev->maxchild; i++) { + connect_type = usb_get_hub_port_connect_type(hdev, i); + + if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) { + u8 mask = 1 << (i%8); + + if (!(desc->u.hs.DeviceRemovable[i/8] & mask)) { + dev_dbg(&hdev->dev, "usb port%d's DeviceRemovable is changed to 1 according to platform information.\n", + i); + desc->u.hs.DeviceRemovable[i/8] |= mask; + } + } + } + } else { + u16 port_removable = le16_to_cpu(desc->u.ss.DeviceRemovable); + + for (i = 1; i <= hdev->maxchild; i++) { + connect_type = usb_get_hub_port_connect_type(hdev, i); + + if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) { + u16 mask = 1 << i; + + if (!(port_removable & mask)) { + dev_dbg(&hdev->dev, "usb port%d's DeviceRemovable is changed to 1 according to platform information.\n", + i); + port_removable |= mask; + } + } + } + + desc->u.ss.DeviceRemovable = cpu_to_le16(port_removable); + } +} + #ifdef CONFIG_ACPI /** * usb_get_hub_port_acpi_handle - Get the usb port's acpi handle @@ -5312,7 +5398,7 @@ acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev, int port1) { - struct usb_hub *hub = hdev_to_hub(hdev); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); return DEVICE_ACPI_HANDLE(&hub->ports[port1 - 1]->dev); } --- linux-lts-raring-3.8.0.orig/drivers/usb/core/port.c +++ linux-lts-raring-3.8.0/drivers/usb/core/port.c @@ -0,0 +1,202 @@ +/* + * usb port device code + * + * Copyright (C) 2012 Intel Corp + * + * Author: Lan Tianyu + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + */ + +#include +#include + +#include "hub.h" + +static const struct attribute_group *port_dev_group[]; + +static ssize_t show_port_connect_type(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct usb_port *port_dev = to_usb_port(dev); + char *result; + + switch (port_dev->connect_type) { + case USB_PORT_CONNECT_TYPE_HOT_PLUG: + result = "hotplug"; + break; + case USB_PORT_CONNECT_TYPE_HARD_WIRED: + result = "hardwired"; + break; + case USB_PORT_NOT_USED: + result = "not used"; + break; + default: + result = "unknown"; + break; + } + + return sprintf(buf, "%s\n", result); +} +static DEVICE_ATTR(connect_type, S_IRUGO, show_port_connect_type, + NULL); + +static struct attribute *port_dev_attrs[] = { + &dev_attr_connect_type.attr, + NULL, +}; + +static struct attribute_group port_dev_attr_grp = { + .attrs = port_dev_attrs, +}; + +static const struct attribute_group *port_dev_group[] = { + &port_dev_attr_grp, + NULL, +}; + +static void usb_port_device_release(struct device *dev) +{ + struct usb_port *port_dev = to_usb_port(dev); + + dev_pm_qos_hide_flags(dev); + kfree(port_dev); +} + +#ifdef CONFIG_USB_SUSPEND +static int usb_port_runtime_resume(struct device *dev) +{ + struct usb_port *port_dev = to_usb_port(dev); + struct usb_device *hdev = to_usb_device(dev->parent->parent); + struct usb_interface *intf = to_usb_interface(dev->parent); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); + int port1 = port_dev->portnum; + int retval; + + if (!hub) + return -EINVAL; + + usb_autopm_get_interface(intf); + set_bit(port1, hub->busy_bits); + + retval = usb_hub_set_port_power(hdev, port1, true); + if (port_dev->child && !retval) { + /* + * Wait for usb hub port to be reconnected in order to make + * the resume procedure successful. + */ + retval = hub_port_debounce_be_connected(hub, port1); + if (retval < 0) { + dev_dbg(&port_dev->dev, "can't get reconnection after setting port power on, status %d\n", + retval); + goto out; + } + usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); + + /* Set return value to 0 if debounce successful */ + retval = 0; + } + +out: + clear_bit(port1, hub->busy_bits); + usb_autopm_put_interface(intf); + return retval; +} + +static int usb_port_runtime_suspend(struct device *dev) +{ + struct usb_port *port_dev = to_usb_port(dev); + struct usb_device *hdev = to_usb_device(dev->parent->parent); + struct usb_interface *intf = to_usb_interface(dev->parent); + struct usb_hub *hub = usb_hub_to_struct_hub(hdev); + int port1 = port_dev->portnum; + int retval; + + if (!hub) + return -EINVAL; + + if (dev_pm_qos_flags(&port_dev->dev, PM_QOS_FLAG_NO_POWER_OFF) + == PM_QOS_FLAGS_ALL) + return -EAGAIN; + + usb_autopm_get_interface(intf); + set_bit(port1, hub->busy_bits); + retval = usb_hub_set_port_power(hdev, port1, false); + usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION); + usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); + clear_bit(port1, hub->busy_bits); + usb_autopm_put_interface(intf); + return retval; +} +#endif + +static const struct dev_pm_ops usb_port_pm_ops = { +#ifdef CONFIG_USB_SUSPEND + .runtime_suspend = usb_port_runtime_suspend, + .runtime_resume = usb_port_runtime_resume, + .runtime_idle = pm_generic_runtime_idle, +#endif +}; + +struct device_type usb_port_device_type = { + .name = "usb_port", + .release = usb_port_device_release, + .pm = &usb_port_pm_ops, +}; + +int usb_hub_create_port_device(struct usb_hub *hub, int port1) +{ + struct usb_port *port_dev = NULL; + int retval; + + port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL); + if (!port_dev) { + retval = -ENOMEM; + goto exit; + } + + hub->ports[port1 - 1] = port_dev; + port_dev->portnum = port1; + port_dev->power_is_on = true; + port_dev->dev.parent = hub->intfdev; + port_dev->dev.groups = port_dev_group; + port_dev->dev.type = &usb_port_device_type; + dev_set_name(&port_dev->dev, "port%d", port1); + + retval = device_register(&port_dev->dev); + if (retval) + goto error_register; + + pm_runtime_set_active(&port_dev->dev); + + /* It would be dangerous if user space couldn't + * prevent usb device from being powered off. So don't + * enable port runtime pm if failed to expose port's pm qos. + */ + if (!dev_pm_qos_expose_flags(&port_dev->dev, + PM_QOS_FLAG_NO_POWER_OFF)) + pm_runtime_enable(&port_dev->dev); + + device_enable_async_suspend(&port_dev->dev); + return 0; + +error_register: + put_device(&port_dev->dev); +exit: + return retval; +} + +void usb_hub_remove_port_device(struct usb_hub *hub, + int port1) +{ + device_unregister(&hub->ports[port1 - 1]->dev); +} + --- linux-lts-raring-3.8.0.orig/drivers/usb/core/hub.h +++ linux-lts-raring-3.8.0/drivers/usb/core/hub.h @@ -0,0 +1,122 @@ +/* + * usb hub driver head file + * + * Copyright (C) 1999 Linus Torvalds + * Copyright (C) 1999 Johannes Erdfelt + * Copyright (C) 1999 Gregory P. Smith + * Copyright (C) 2001 Brad Hards (bhards@bigpond.net.au) + * Copyright (C) 2012 Intel Corp (tianyu.lan@intel.com) + * + * move struct usb_hub to this file. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include +#include +#include +#include "usb.h" + +struct usb_hub { + struct device *intfdev; /* the "interface" device */ + struct usb_device *hdev; + struct kref kref; + struct urb *urb; /* for interrupt polling pipe */ + + /* buffer for urb ... with extra space in case of babble */ + u8 (*buffer)[8]; + union { + struct usb_hub_status hub; + struct usb_port_status port; + } *status; /* buffer for status reports */ + struct mutex status_mutex; /* for the status buffer */ + + int error; /* last reported error */ + int nerrors; /* track consecutive errors */ + + struct list_head event_list; /* hubs w/data or errs ready */ + unsigned long event_bits[1]; /* status change bitmask */ + unsigned long change_bits[1]; /* ports with logical connect + status change */ + unsigned long busy_bits[1]; /* ports being reset or + resumed */ + unsigned long removed_bits[1]; /* ports with a "removed" + device present */ + unsigned long wakeup_bits[1]; /* ports that have signaled + remote wakeup */ +#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */ +#error event_bits[] is too short! +#endif + + struct usb_hub_descriptor *descriptor; /* class descriptor */ + struct usb_tt tt; /* Transaction Translator */ + + unsigned mA_per_port; /* current for each child */ + + unsigned limited_power:1; + unsigned quiescing:1; + unsigned disconnected:1; + + unsigned quirk_check_port_auto_suspend:1; + + unsigned has_indicators:1; + u8 indicator[USB_MAXCHILDREN]; + struct delayed_work leds; + struct delayed_work init_work; + struct usb_port **ports; +}; + +/** + * struct usb port - kernel's representation of a usb port + * @child: usb device attatched to the port + * @dev: generic device interface + * @port_owner: port's owner + * @connect_type: port's connect type + * @portnum: port index num based one + * @power_is_on: port's power state + * @did_runtime_put: port has done pm_runtime_put(). + */ +struct usb_port { + struct usb_device *child; + struct device dev; + struct dev_state *port_owner; + enum usb_port_connect_type connect_type; + u8 portnum; + unsigned power_is_on:1; + unsigned did_runtime_put:1; +}; + +#define to_usb_port(_dev) \ + container_of(_dev, struct usb_port, dev) + +extern int usb_hub_create_port_device(struct usb_hub *hub, + int port1); +extern void usb_hub_remove_port_device(struct usb_hub *hub, + int port1); +extern int usb_hub_set_port_power(struct usb_device *hdev, + int port1, bool set); +extern struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev); +extern int hub_port_debounce(struct usb_hub *hub, int port1, + bool must_be_connected); +extern int usb_clear_port_feature(struct usb_device *hdev, + int port1, int feature); + +static inline int hub_port_debounce_be_connected(struct usb_hub *hub, + int port1) +{ + return hub_port_debounce(hub, port1, true); +} + +static inline int hub_port_debounce_be_stable(struct usb_hub *hub, + int port1) +{ + return hub_port_debounce(hub, port1, false); +} + --- linux-lts-raring-3.8.0.orig/drivers/usb/core/hcd-pci.c +++ linux-lts-raring-3.8.0/drivers/usb/core/hcd-pci.c @@ -173,6 +173,7 @@ struct hc_driver *driver; struct usb_hcd *hcd; int retval; + int hcd_irq = 0; if (usb_disabled()) return -ENODEV; @@ -187,15 +188,19 @@ return -ENODEV; dev->current_state = PCI_D0; - /* The xHCI driver supports MSI and MSI-X, - * so don't fail if the BIOS doesn't provide a legacy IRQ. + /* + * The xHCI driver has its own irq management + * make sure irq setup is not touched for xhci in generic hcd code */ - if (!dev->irq && (driver->flags & HCD_MASK) != HCD_USB3) { - dev_err(&dev->dev, - "Found HC with no IRQ. Check BIOS/PCI %s setup!\n", - pci_name(dev)); - retval = -ENODEV; - goto disable_pci; + if ((driver->flags & HCD_MASK) != HCD_USB3) { + if (!dev->irq) { + dev_err(&dev->dev, + "Found HC with no IRQ. Check BIOS/PCI %s setup!\n", + pci_name(dev)); + retval = -ENODEV; + goto disable_pci; + } + hcd_irq = dev->irq; } hcd = usb_create_hcd(driver, &dev->dev, pci_name(dev)); @@ -245,7 +250,7 @@ pci_set_master(dev); - retval = usb_add_hcd(hcd, dev->irq, IRQF_SHARED); + retval = usb_add_hcd(hcd, hcd_irq, IRQF_SHARED); if (retval != 0) goto unmap_registers; set_hs_companion(dev, hcd); --- linux-lts-raring-3.8.0.orig/drivers/usb/core/Makefile +++ linux-lts-raring-3.8.0/drivers/usb/core/Makefile @@ -7,6 +7,7 @@ usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o usbcore-y += devio.o notify.o generic.o quirks.o devices.o +usbcore-y += port.o usbcore-$(CONFIG_PCI) += hcd-pci.o usbcore-$(CONFIG_ACPI) += usb-acpi.o --- linux-lts-raring-3.8.0.orig/drivers/usb/core/hcd.c +++ linux-lts-raring-3.8.0/drivers/usb/core/hcd.c @@ -620,6 +620,10 @@ status = hcd->driver->hub_control (hcd, typeReq, wValue, wIndex, tbuf, wLength); + + if (typeReq == GetHubDescriptor) + usb_hub_adjust_deviceremovable(hcd->self.root_hub, + (struct usb_hub_descriptor *)tbuf); break; error: /* "protocol stall" on error */ @@ -2550,7 +2554,6 @@ } /* starting here, usbcore will pay attention to this root hub */ - rhdev->bus_mA = min(500u, hcd->power_budget); if ((retval = register_root_hub(hcd)) != 0) goto err_register_root_hub; --- linux-lts-raring-3.8.0.orig/drivers/usb/core/config.c +++ linux-lts-raring-3.8.0/drivers/usb/core/config.c @@ -424,7 +424,8 @@ memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE); if (config->desc.bDescriptorType != USB_DT_CONFIG || - config->desc.bLength < USB_DT_CONFIG_SIZE) { + config->desc.bLength < USB_DT_CONFIG_SIZE || + config->desc.bLength > size) { dev_err(ddev, "invalid descriptor for config index %d: " "type = 0x%X, length = %d\n", cfgidx, config->desc.bDescriptorType, config->desc.bLength); --- linux-lts-raring-3.8.0.orig/drivers/usb/core/message.c +++ linux-lts-raring-3.8.0/drivers/usb/core/message.c @@ -1751,7 +1751,7 @@ } } - i = dev->bus_mA - cp->desc.bMaxPower * 2; + i = dev->bus_mA - usb_get_max_power(dev, cp); if (i < 0) dev_warn(&dev->dev, "new config #%d exceeds power " "limit by %dmA\n", --- linux-lts-raring-3.8.0.orig/drivers/usb/core/devio.c +++ linux-lts-raring-3.8.0/drivers/usb/core/devio.c @@ -738,7 +738,25 @@ index &= 0xff; switch (requesttype & USB_RECIP_MASK) { case USB_RECIP_ENDPOINT: + if ((index & ~USB_DIR_IN) == 0) + return 0; ret = findintfep(ps->dev, index); + if (ret < 0) { + /* + * Some not fully compliant Win apps seem to get + * index wrong and have the endpoint number here + * rather than the endpoint address (with the + * correct direction). Win does let this through, + * so we'll not reject it here but leave it to + * the device to not break KVM. But we warn. + */ + ret = findintfep(ps->dev, index ^ 0x80); + if (ret >= 0) + dev_info(&ps->dev->dev, + "%s: process %i (%s) requesting ep %02x but needs %02x\n", + __func__, task_pid_nr(current), + current->comm, index, index ^ 0x80); + } if (ret >= 0) ret = checkintf(ps, ret); break; --- linux-lts-raring-3.8.0.orig/drivers/usb/core/quirks.c +++ linux-lts-raring-3.8.0/drivers/usb/core/quirks.c @@ -78,6 +78,12 @@ { USB_DEVICE(0x04d8, 0x000c), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, + /* CarrolTouch 4000U */ + { USB_DEVICE(0x04e7, 0x0009), .driver_info = USB_QUIRK_RESET_RESUME }, + + /* CarrolTouch 4500U */ + { USB_DEVICE(0x04e7, 0x0030), .driver_info = USB_QUIRK_RESET_RESUME }, + /* Samsung Android phone modem - ID conflict with SPH-I500 */ { USB_DEVICE(0x04e8, 0x6601), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS }, @@ -88,6 +94,9 @@ /* Edirol SD-20 */ { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, + /* Alcor Micro Corp. Hub */ + { USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME }, + /* appletouch */ { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, --- linux-lts-raring-3.8.0.orig/drivers/usb/core/usb.h +++ linux-lts-raring-3.8.0/drivers/usb/core/usb.h @@ -1,6 +1,7 @@ #include #include +struct usb_hub_descriptor; struct dev_state; /* Functions local to drivers/usb/core/ */ @@ -38,6 +39,15 @@ extern int usb_set_configuration(struct usb_device *dev, int configuration); extern int usb_choose_configuration(struct usb_device *udev); +static inline unsigned usb_get_max_power(struct usb_device *udev, + struct usb_host_config *c) +{ + /* SuperSpeed power is in 8 mA units; others are in 2 mA units */ + unsigned mul = (udev->speed == USB_SPEED_SUPER ? 8 : 2); + + return c->desc.bMaxPower * mul; +} + extern void usb_kick_khubd(struct usb_device *dev); extern int usb_match_one_id_intf(struct usb_device *dev, struct usb_host_interface *intf, @@ -173,6 +183,8 @@ usb_get_hub_port_connect_type(struct usb_device *hdev, int port1); extern void usb_set_hub_port_connect_type(struct usb_device *hdev, int port1, enum usb_port_connect_type type); +extern void usb_hub_adjust_deviceremovable(struct usb_device *hdev, + struct usb_hub_descriptor *desc); #ifdef CONFIG_ACPI extern int usb_acpi_register(void); --- linux-lts-raring-3.8.0.orig/drivers/usb/core/generic.c +++ linux-lts-raring-3.8.0/drivers/usb/core/generic.c @@ -100,7 +100,7 @@ */ /* Rule out configs that draw too much bus current */ - if (c->desc.bMaxPower * 2 > udev->bus_mA) { + if (usb_get_max_power(udev, c) > udev->bus_mA) { insufficient_power++; continue; } --- linux-lts-raring-3.8.0.orig/drivers/usb/core/sysfs.c +++ linux-lts-raring-3.8.0/drivers/usb/core/sysfs.c @@ -17,7 +17,7 @@ #include "usb.h" /* Active configuration fields */ -#define usb_actconfig_show(field, multiplier, format_string) \ +#define usb_actconfig_show(field, format_string) \ static ssize_t show_##field(struct device *dev, \ struct device_attribute *attr, char *buf) \ { \ @@ -28,18 +28,31 @@ actconfig = udev->actconfig; \ if (actconfig) \ return sprintf(buf, format_string, \ - actconfig->desc.field * multiplier); \ + actconfig->desc.field); \ else \ return 0; \ } \ -#define usb_actconfig_attr(field, multiplier, format_string) \ -usb_actconfig_show(field, multiplier, format_string) \ -static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL); - -usb_actconfig_attr(bNumInterfaces, 1, "%2d\n") -usb_actconfig_attr(bmAttributes, 1, "%2x\n") -usb_actconfig_attr(bMaxPower, 2, "%3dmA\n") +#define usb_actconfig_attr(field, format_string) \ + usb_actconfig_show(field, format_string) \ + static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL); + +usb_actconfig_attr(bNumInterfaces, "%2d\n") +usb_actconfig_attr(bmAttributes, "%2x\n") + +static ssize_t show_bMaxPower(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct usb_device *udev; + struct usb_host_config *actconfig; + + udev = to_usb_device(dev); + actconfig = udev->actconfig; + if (!actconfig) + return 0; + return sprintf(buf, "%dmA\n", usb_get_max_power(udev, actconfig)); +} +static DEVICE_ATTR(bMaxPower, S_IRUGO, show_bMaxPower, NULL); static ssize_t show_configuration_string(struct device *dev, struct device_attribute *attr, char *buf) @@ -56,7 +69,7 @@ static DEVICE_ATTR(configuration, S_IRUGO, show_configuration_string, NULL); /* configuration value is always present, and r/w */ -usb_actconfig_show(bConfigurationValue, 1, "%u\n"); +usb_actconfig_show(bConfigurationValue, "%u\n"); static ssize_t set_bConfigurationValue(struct device *dev, struct device_attribute *attr, --- linux-lts-raring-3.8.0.orig/drivers/usb/core/devices.c +++ linux-lts-raring-3.8.0/drivers/usb/core/devices.c @@ -316,17 +316,23 @@ */ static char *usb_dump_config_descriptor(char *start, char *end, const struct usb_config_descriptor *desc, - int active) + int active, int speed) { + int mul; + if (start > end) return start; + if (speed == USB_SPEED_SUPER) + mul = 8; + else + mul = 2; start += sprintf(start, format_config, /* mark active/actual/current cfg. */ active ? '*' : ' ', desc->bNumInterfaces, desc->bConfigurationValue, desc->bmAttributes, - desc->bMaxPower * 2); + desc->bMaxPower * mul); return start; } @@ -342,7 +348,8 @@ if (!config) /* getting these some in 2.3.7; none in 2.3.6 */ return start + sprintf(start, "(null Cfg. desc.)\n"); - start = usb_dump_config_descriptor(start, end, &config->desc, active); + start = usb_dump_config_descriptor(start, end, &config->desc, active, + speed); for (i = 0; i < USB_MAXIADS; i++) { if (config->intf_assoc[i] == NULL) break; --- linux-lts-raring-3.8.0.orig/drivers/usb/atm/cxacru.c +++ linux-lts-raring-3.8.0/drivers/usb/atm/cxacru.c @@ -686,7 +686,8 @@ { int ret, len; __le32 *buf; - int offb, offd; + int offb; + unsigned int offd; const int stride = CMD_PACKET_SIZE / (4 * 2) - 1; int buflen = ((size - 1) / stride + 1 + size * 2) * 4; --- linux-lts-raring-3.8.0.orig/drivers/usb/misc/adutux.c +++ linux-lts-raring-3.8.0/drivers/usb/misc/adutux.c @@ -829,7 +829,7 @@ /* let the user know what node this device is now attached to */ dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n", - udev->descriptor.idProduct, dev->serial_number, + le16_to_cpu(udev->descriptor.idProduct), dev->serial_number, (dev->minor - ADU_MINOR_BASE)); exit: dbg(2," %s : leave, return value %p (dev)", __func__, dev); --- linux-lts-raring-3.8.0.orig/drivers/usb/misc/appledisplay.c +++ linux-lts-raring-3.8.0/drivers/usb/misc/appledisplay.c @@ -63,6 +63,7 @@ { APPLEDISPLAY_DEVICE(0x9219) }, { APPLEDISPLAY_DEVICE(0x921c) }, { APPLEDISPLAY_DEVICE(0x921d) }, + { APPLEDISPLAY_DEVICE(0x9236) }, /* Terminating entry */ { } --- linux-lts-raring-3.8.0.orig/drivers/usb/misc/sisusbvga/sisusb.c +++ linux-lts-raring-3.8.0/drivers/usb/misc/sisusbvga/sisusb.c @@ -3247,6 +3247,7 @@ { USB_DEVICE(0x0711, 0x0903) }, { USB_DEVICE(0x0711, 0x0918) }, { USB_DEVICE(0x0711, 0x0920) }, + { USB_DEVICE(0x0711, 0x0950) }, { USB_DEVICE(0x182d, 0x021c) }, { USB_DEVICE(0x182d, 0x0269) }, { } --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/davinci.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/davinci.c @@ -380,11 +380,14 @@ { void __iomem *tibase = musb->ctrl_base; u32 revision; + int ret = -ENODEV; usb_nop_xceiv_register(); musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); - if (IS_ERR_OR_NULL(musb->xceiv)) + if (IS_ERR_OR_NULL(musb->xceiv)) { + ret = -EPROBE_DEFER; goto unregister; + } musb->mregs += DAVINCI_BASE_OFFSET; @@ -438,7 +441,7 @@ usb_put_phy(musb->xceiv); unregister: usb_nop_xceiv_unregister(); - return -ENODEV; + return ret; } static int davinci_musb_exit(struct musb *musb) --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/omap2430.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/omap2430.c @@ -369,7 +369,7 @@ musb->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); if (IS_ERR_OR_NULL(musb->xceiv)) { pr_err("HS USB OTG: no transceiver configured\n"); - return -ENODEV; + return -EPROBE_DEFER; } musb->isr = omap2430_musb_interrupt; --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/blackfin.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/blackfin.c @@ -406,7 +406,7 @@ musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); if (IS_ERR_OR_NULL(musb->xceiv)) { gpio_free(musb->config->gpio_vrsel); - return -ENODEV; + return -EPROBE_DEFER; } bfin_musb_reg_init(musb); --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/musb_dsps.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/musb_dsps.c @@ -419,7 +419,7 @@ usb_nop_xceiv_register(); musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); if (IS_ERR_OR_NULL(musb->xceiv)) - return -ENODEV; + return -EPROBE_DEFER; /* Returns zero if e.g. not clocked */ rev = dsps_readl(reg_base, wrp->revision); --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/ux500.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/ux500.c @@ -61,7 +61,7 @@ musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); if (IS_ERR_OR_NULL(musb->xceiv)) { pr_err("HS USB OTG: no transceiver configured\n"); - return -ENODEV; + return -EPROBE_DEFER; } musb->isr = ux500_musb_interrupt; @@ -108,7 +108,7 @@ goto err3; } - ret = clk_enable(clk); + ret = clk_prepare_enable(clk); if (ret) { dev_err(&pdev->dev, "failed to enable clock\n"); goto err4; @@ -148,7 +148,7 @@ return 0; err5: - clk_disable(clk); + clk_disable_unprepare(clk); err4: clk_put(clk); @@ -168,7 +168,7 @@ struct ux500_glue *glue = platform_get_drvdata(pdev); platform_device_unregister(glue->musb); - clk_disable(glue->clk); + clk_disable_unprepare(glue->clk); clk_put(glue->clk); kfree(glue); @@ -182,7 +182,7 @@ struct musb *musb = glue_to_musb(glue); usb_phy_set_suspend(musb->xceiv, 1); - clk_disable(glue->clk); + clk_disable_unprepare(glue->clk); return 0; } @@ -193,7 +193,7 @@ struct musb *musb = glue_to_musb(glue); int ret; - ret = clk_enable(glue->clk); + ret = clk_prepare_enable(glue->clk); if (ret) { dev_err(dev, "failed to enable clock\n"); return ret; --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/da8xx.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/da8xx.c @@ -327,7 +327,7 @@ u8 devctl = musb_readb(mregs, MUSB_DEVCTL); int err; - err = musb->int_usb & USB_INTR_VBUSERROR; + err = musb->int_usb & MUSB_INTR_VBUSERROR; if (err) { /* * The Mentor core doesn't debounce VBUS as needed @@ -410,6 +410,7 @@ { void __iomem *reg_base = musb->ctrl_base; u32 rev; + int ret = -ENODEV; musb->mregs += DA8XX_MENTOR_CORE_OFFSET; @@ -420,8 +421,10 @@ usb_nop_xceiv_register(); musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); - if (IS_ERR_OR_NULL(musb->xceiv)) + if (IS_ERR_OR_NULL(musb->xceiv)) { + ret = -EPROBE_DEFER; goto fail; + } setup_timer(&otg_workaround, otg_timer, (unsigned long)musb); @@ -441,7 +444,7 @@ musb->isr = da8xx_musb_interrupt; return 0; fail: - return -ENODEV; + return ret; } static int da8xx_musb_exit(struct musb *musb) --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/musb_host.h +++ linux-lts-raring-3.8.0/drivers/usb/musb/musb_host.h @@ -74,6 +74,7 @@ u16 frame; /* for periodic schedule */ unsigned iso_idx; /* in urb->iso_frame_desc[] */ struct sg_mapping_iter sg_miter; /* for highmem in PIO mode */ + bool use_sg; /* to track urb using sglist */ }; /* map from control or bulk queue head to the first qh on that ring */ --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/tusb6010.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/tusb6010.c @@ -1069,7 +1069,7 @@ usb_nop_xceiv_register(); musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); if (IS_ERR_OR_NULL(musb->xceiv)) - return -ENODEV; + return -EPROBE_DEFER; pdev = to_platform_device(musb->controller); --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/musb_core.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/musb_core.c @@ -1993,6 +1993,7 @@ musb_platform_exit(musb); fail1: + pm_runtime_disable(musb->controller); dev_err(musb->controller, "musb_init_controller failed with status %d\n", status); --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/am35x.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/am35x.c @@ -365,7 +365,7 @@ usb_nop_xceiv_register(); musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); if (IS_ERR_OR_NULL(musb->xceiv)) - return -ENODEV; + return -EPROBE_DEFER; setup_timer(&otg_workaround, otg_timer, (unsigned long) musb); --- linux-lts-raring-3.8.0.orig/drivers/usb/musb/musb_host.c +++ linux-lts-raring-3.8.0/drivers/usb/musb/musb_host.c @@ -1212,7 +1212,6 @@ void __iomem *mbase = musb->mregs; struct dma_channel *dma; bool transfer_pending = false; - static bool use_sg; musb_ep_select(mbase, epnum); tx_csr = musb_readw(epio, MUSB_TXCSR); @@ -1443,9 +1442,9 @@ * NULL. */ if (!urb->transfer_buffer) - use_sg = true; + qh->use_sg = true; - if (use_sg) { + if (qh->use_sg) { /* sg_miter_start is already done in musb_ep_program */ if (!sg_miter_next(&qh->sg_miter)) { dev_err(musb->controller, "error: sg list empty\n"); @@ -1464,9 +1463,9 @@ qh->segsize = length; - if (use_sg) { + if (qh->use_sg) { if (offset + length >= urb->transfer_buffer_length) - use_sg = false; + qh->use_sg = false; } musb_ep_select(mbase, epnum); @@ -1532,7 +1531,6 @@ bool done = false; u32 status; struct dma_channel *dma; - static bool use_sg; unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG; musb_ep_select(mbase, epnum); @@ -1858,12 +1856,12 @@ * NULL. */ if (!urb->transfer_buffer) { - use_sg = true; + qh->use_sg = true; sg_miter_start(&qh->sg_miter, urb->sg, 1, sg_flags); } - if (use_sg) { + if (qh->use_sg) { if (!sg_miter_next(&qh->sg_miter)) { dev_err(musb->controller, "error: sg list empty\n"); sg_miter_stop(&qh->sg_miter); @@ -1893,8 +1891,8 @@ urb->actual_length += xfer_len; qh->offset += xfer_len; if (done) { - if (use_sg) - use_sg = false; + if (qh->use_sg) + qh->use_sg = false; if (urb->status == -EINPROGRESS) urb->status = status; --- linux-lts-raring-3.8.0.orig/drivers/usb/storage/cypress_atacb.c +++ linux-lts-raring-3.8.0/drivers/usb/storage/cypress_atacb.c @@ -248,14 +248,26 @@ { struct us_data *us; int result; + struct usb_device *device; result = usb_stor_probe1(&us, intf, id, (id - cypress_usb_ids) + cypress_unusual_dev_list); if (result) return result; - us->protocol_name = "Transparent SCSI with Cypress ATACB"; - us->proto_handler = cypress_atacb_passthrough; + /* Among CY7C68300 chips, the A revision does not support Cypress ATACB + * Filter out this revision from EEPROM default descriptor values + */ + device = interface_to_usbdev(intf); + if (device->descriptor.iManufacturer != 0x38 || + device->descriptor.iProduct != 0x4e || + device->descriptor.iSerialNumber != 0x64) { + us->protocol_name = "Transparent SCSI with Cypress ATACB"; + us->proto_handler = cypress_atacb_passthrough; + } else { + us->protocol_name = "Transparent SCSI"; + us->proto_handler = usb_stor_transparent_scsi_command; + } result = usb_stor_probe2(us); return result; --- linux-lts-raring-3.8.0.orig/drivers/usb/storage/initializers.h +++ linux-lts-raring-3.8.0/drivers/usb/storage/initializers.h @@ -46,5 +46,5 @@ * flash reader */ int usb_stor_ucr61s2b_init(struct us_data *us); -/* This places the HUAWEI usb dongles in multi-port mode */ -int usb_stor_huawei_init(struct us_data *us); +/* This places the HUAWEI E220 devices in multi-port mode */ +int usb_stor_huawei_e220_init(struct us_data *us); --- linux-lts-raring-3.8.0.orig/drivers/usb/storage/initializers.c +++ linux-lts-raring-3.8.0/drivers/usb/storage/initializers.c @@ -92,8 +92,8 @@ return 0; } -/* This places the HUAWEI usb dongles in multi-port mode */ -static int usb_stor_huawei_feature_init(struct us_data *us) +/* This places the HUAWEI E220 devices in multi-port mode */ +int usb_stor_huawei_e220_init(struct us_data *us) { int result; @@ -104,75 +104,3 @@ US_DEBUGP("Huawei mode set result is %d\n", result); return 0; } - -/* - * It will send a scsi switch command called rewind' to huawei dongle. - * When the dongle receives this command at the first time, - * it will reboot immediately. After rebooted, it will ignore this command. - * So it is unnecessary to read its response. - */ -static int usb_stor_huawei_scsi_init(struct us_data *us) -{ - int result = 0; - int act_len = 0; - struct bulk_cb_wrap *bcbw = (struct bulk_cb_wrap *) us->iobuf; - char rewind_cmd[] = {0x11, 0x06, 0x20, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - - bcbw->Signature = cpu_to_le32(US_BULK_CB_SIGN); - bcbw->Tag = 0; - bcbw->DataTransferLength = 0; - bcbw->Flags = bcbw->Lun = 0; - bcbw->Length = sizeof(rewind_cmd); - memset(bcbw->CDB, 0, sizeof(bcbw->CDB)); - memcpy(bcbw->CDB, rewind_cmd, sizeof(rewind_cmd)); - - result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcbw, - US_BULK_CB_WRAP_LEN, &act_len); - US_DEBUGP("transfer actual length=%d, result=%d\n", act_len, result); - return result; -} - -/* - * It tries to find the supported Huawei USB dongles. - * In Huawei, they assign the following product IDs - * for all of their mobile broadband dongles, - * including the new dongles in the future. - * So if the product ID is not included in this list, - * it means it is not Huawei's mobile broadband dongles. - */ -static int usb_stor_huawei_dongles_pid(struct us_data *us) -{ - struct usb_interface_descriptor *idesc; - int idProduct; - - idesc = &us->pusb_intf->cur_altsetting->desc; - idProduct = us->pusb_dev->descriptor.idProduct; - /* The first port is CDROM, - * means the dongle in the single port mode, - * and a switch command is required to be sent. */ - if (idesc && idesc->bInterfaceNumber == 0) { - if ((idProduct == 0x1001) - || (idProduct == 0x1003) - || (idProduct == 0x1004) - || (idProduct >= 0x1401 && idProduct <= 0x1500) - || (idProduct >= 0x1505 && idProduct <= 0x1600) - || (idProduct >= 0x1c02 && idProduct <= 0x2202)) { - return 1; - } - } - return 0; -} - -int usb_stor_huawei_init(struct us_data *us) -{ - int result = 0; - - if (usb_stor_huawei_dongles_pid(us)) { - if (us->pusb_dev->descriptor.idProduct >= 0x1446) - result = usb_stor_huawei_scsi_init(us); - else - result = usb_stor_huawei_feature_init(us); - } - return result; -} --- linux-lts-raring-3.8.0.orig/drivers/usb/storage/unusual_devs.h +++ linux-lts-raring-3.8.0/drivers/usb/storage/unusual_devs.h @@ -488,6 +488,13 @@ USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_MAX_SECTORS_64 | US_FL_BULK_IGNORE_TAG), +/* Added by Dmitry Artamonow */ +UNUSUAL_DEV( 0x04e8, 0x5136, 0x0000, 0x9999, + "Samsung", + "YP-Z3", + USB_SC_DEVICE, USB_PR_DEVICE, NULL, + US_FL_MAX_SECTORS_64), + /* Entry and supporting patch by Theodore Kilgore . * Device uses standards-violating 32-byte Bulk Command Block Wrappers and * reports itself as "Proprietary SCSI Bulk." Cf. device entry 0x084d:0x0011. @@ -650,6 +657,13 @@ USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_FIX_INQUIRY ), +/* Submitted by Ren Bigcren */ +UNUSUAL_DEV( 0x054c, 0x02a5, 0x0100, 0x0100, + "Sony Corp.", + "MicroVault Flash Drive", + USB_SC_DEVICE, USB_PR_DEVICE, NULL, + US_FL_NO_READ_CAPACITY_16 ), + /* floppy reports multiple luns */ UNUSUAL_DEV( 0x055d, 0x2020, 0x0000, 0x0210, "SAMSUNG", @@ -1169,6 +1183,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. * The entry is needed so usb-storage can bind to it's mass-storage @@ -1527,10 +1548,335 @@ /* Reported by fangxiaozhi * This brings the HUAWEI data card devices into multi-port mode */ -UNUSUAL_VENDOR_INTF(0x12d1, 0x08, 0x06, 0x50, +UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000, + "HUAWEI MOBILE", + "Mass Storage", + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, + 0), +UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000, "HUAWEI MOBILE", "Mass Storage", - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_init, + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init, 0), /* Reported by Vilius Bilinkevicius #include #include +#include #include /* @@ -495,6 +496,7 @@ struct resource *res; struct irq_chip_generic *gc; struct irq_chip_type *ct; + struct clk *clk; unsigned int ngpios; int soc_variant; int i, cpu, id; @@ -528,6 +530,11 @@ return id; } + clk = devm_clk_get(&pdev->dev, NULL); + /* Not all SoCs require a clock.*/ + if (!IS_ERR(clk)) + clk_prepare_enable(clk); + mvchip->soc_variant = soc_variant; mvchip->chip.label = dev_name(&pdev->dev); mvchip->chip.dev = &pdev->dev; --- linux-lts-raring-3.8.0.orig/drivers/gpio/Kconfig +++ linux-lts-raring-3.8.0/drivers/gpio/Kconfig @@ -298,6 +298,14 @@ and write pin state) for GPIO implemented in a number of GE single board computers. +config GPIO_LYNXPOINT + bool "Intel Lynxpoint GPIO support" + depends on ACPI + select IRQ_DOMAIN + help + driver for GPIO functionality on Intel Lynxpoint PCH chipset + Requires ACPI device enumeration code to set up a platform device. + comment "I2C GPIO expanders:" config GPIO_ARIZONA --- linux-lts-raring-3.8.0.orig/drivers/gpio/gpiolib-of.c +++ linux-lts-raring-3.8.0/drivers/gpio/gpiolib-of.c @@ -228,7 +228,7 @@ if (!np) return; - do { + for (;; index++) { ret = of_parse_phandle_with_args(np, "gpio-ranges", "#gpio-range-cells", index, &pinspec); if (ret) @@ -257,8 +257,7 @@ if (ret) break; - - } while (index++); + } } #else --- linux-lts-raring-3.8.0.orig/drivers/gpio/gpio-em.c +++ linux-lts-raring-3.8.0/drivers/gpio/gpio-em.c @@ -299,8 +299,9 @@ irq_chip->irq_set_type = em_gio_irq_set_type; irq_chip->flags = IRQCHIP_SKIP_SET_WAKE; - p->irq_domain = irq_domain_add_linear(pdev->dev.of_node, + p->irq_domain = irq_domain_add_simple(pdev->dev.of_node, pdata->number_of_pins, + pdata->irq_base, &em_gio_irq_domain_ops, p); if (!p->irq_domain) { ret = -ENXIO; --- linux-lts-raring-3.8.0.orig/drivers/gpio/Makefile +++ linux-lts-raring-3.8.0/drivers/gpio/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_ARCH_KS8695) += gpio-ks8695.o obj-$(CONFIG_GPIO_LANGWELL) += gpio-langwell.o obj-$(CONFIG_ARCH_LPC32XX) += gpio-lpc32xx.o +obj-$(CONFIG_GPIO_LYNXPOINT) += gpio-lynxpoint.o obj-$(CONFIG_GPIO_MAX730X) += gpio-max730x.o obj-$(CONFIG_GPIO_MAX7300) += gpio-max7300.o obj-$(CONFIG_GPIO_MAX7301) += gpio-max7301.o --- linux-lts-raring-3.8.0.orig/drivers/gpio/gpio-stmpe.c +++ linux-lts-raring-3.8.0/drivers/gpio/gpio-stmpe.c @@ -307,11 +307,15 @@ .xlate = irq_domain_xlate_twocell, }; -static int stmpe_gpio_irq_init(struct stmpe_gpio *stmpe_gpio) +static int stmpe_gpio_irq_init(struct stmpe_gpio *stmpe_gpio, + struct device_node *np) { - int base = stmpe_gpio->irq_base; + int base = 0; - stmpe_gpio->domain = irq_domain_add_simple(NULL, + if (!np) + base = stmpe_gpio->irq_base; + + stmpe_gpio->domain = irq_domain_add_simple(np, stmpe_gpio->chip.ngpio, base, &stmpe_gpio_irq_simple_ops, stmpe_gpio); if (!stmpe_gpio->domain) { @@ -346,6 +350,9 @@ stmpe_gpio->chip = template_chip; stmpe_gpio->chip.ngpio = stmpe->num_gpios; stmpe_gpio->chip.dev = &pdev->dev; +#ifdef CONFIG_OF + stmpe_gpio->chip.of_node = np; +#endif stmpe_gpio->chip.base = pdata ? pdata->gpio_base : -1; if (pdata) @@ -366,7 +373,7 @@ goto out_free; if (irq >= 0) { - ret = stmpe_gpio_irq_init(stmpe_gpio); + ret = stmpe_gpio_irq_init(stmpe_gpio, np); if (ret) goto out_disable; --- linux-lts-raring-3.8.0.orig/drivers/gpio/gpio-omap.c +++ linux-lts-raring-3.8.0/drivers/gpio/gpio-omap.c @@ -65,6 +65,7 @@ struct gpio_chip chip; struct clk *dbck; u32 mod_usage; + u32 irq_usage; u32 dbck_enable_mask; bool dbck_enabled; struct device *dev; @@ -87,6 +88,9 @@ #define GPIO_BIT(bank, gpio) (1 << GPIO_INDEX(bank, gpio)) #define GPIO_MOD_CTRL_BIT BIT(0) +#define BANK_USED(bank) (bank->mod_usage || bank->irq_usage) +#define LINE_USED(line, offset) (line & (1 << offset)) + static int irq_to_gpio(struct gpio_bank *bank, unsigned int gpio_irq) { return gpio_irq - bank->irq_base + bank->chip.base; @@ -414,12 +418,69 @@ return 0; } +static void _enable_gpio_module(struct gpio_bank *bank, unsigned offset) +{ + if (bank->regs->pinctrl) { + void __iomem *reg = bank->base + bank->regs->pinctrl; + + /* Claim the pin for MPU */ + __raw_writel(__raw_readl(reg) | (1 << offset), reg); + } + + if (bank->regs->ctrl && !BANK_USED(bank)) { + void __iomem *reg = bank->base + bank->regs->ctrl; + u32 ctrl; + + ctrl = __raw_readl(reg); + /* Module is enabled, clocks are not gated */ + ctrl &= ~GPIO_MOD_CTRL_BIT; + __raw_writel(ctrl, reg); + bank->context.ctrl = ctrl; + } +} + +static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset) +{ + void __iomem *base = bank->base; + + if (bank->regs->wkup_en && + !LINE_USED(bank->mod_usage, offset) && + !LINE_USED(bank->irq_usage, offset)) { + /* Disable wake-up during idle for dynamic tick */ + _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0); + bank->context.wake_en = + __raw_readl(bank->base + bank->regs->wkup_en); + } + + if (bank->regs->ctrl && !BANK_USED(bank)) { + void __iomem *reg = bank->base + bank->regs->ctrl; + u32 ctrl; + + ctrl = __raw_readl(reg); + /* Module is disabled, clocks are gated */ + ctrl |= GPIO_MOD_CTRL_BIT; + __raw_writel(ctrl, reg); + bank->context.ctrl = ctrl; + } +} + +static int gpio_is_input(struct gpio_bank *bank, int mask) +{ + void __iomem *reg = bank->base + bank->regs->direction; + + return __raw_readl(reg) & mask; +} + static int gpio_irq_type(struct irq_data *d, unsigned type) { struct gpio_bank *bank = irq_data_get_irq_chip_data(d); unsigned gpio = 0; int retval; unsigned long flags; + unsigned offset; + + if (!BANK_USED(bank)) + pm_runtime_get_sync(bank->dev); #ifdef CONFIG_ARCH_OMAP1 if (d->irq > IH_MPUIO_BASE) @@ -437,7 +498,17 @@ return -EINVAL; spin_lock_irqsave(&bank->lock, flags); - retval = _set_gpio_triggering(bank, GPIO_INDEX(bank, gpio), type); + offset = GPIO_INDEX(bank, gpio); + retval = _set_gpio_triggering(bank, offset, type); + if (!LINE_USED(bank->mod_usage, offset)) { + _enable_gpio_module(bank, offset); + _set_gpio_direction(bank, offset, 1); + } else if (!gpio_is_input(bank, 1 << offset)) { + spin_unlock_irqrestore(&bank->lock, flags); + return -EINVAL; + } + + bank->irq_usage |= 1 << GPIO_INDEX(bank, gpio); spin_unlock_irqrestore(&bank->lock, flags); if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) @@ -594,35 +665,19 @@ * If this is the first gpio_request for the bank, * enable the bank module. */ - if (!bank->mod_usage) + if (!BANK_USED(bank)) pm_runtime_get_sync(bank->dev); spin_lock_irqsave(&bank->lock, flags); /* Set trigger to none. You need to enable the desired trigger with - * request_irq() or set_irq_type(). + * request_irq() or set_irq_type(). Only do this if the IRQ line has + * not already been requested. */ - _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE); - - if (bank->regs->pinctrl) { - void __iomem *reg = bank->base + bank->regs->pinctrl; - - /* Claim the pin for MPU */ - __raw_writel(__raw_readl(reg) | (1 << offset), reg); - } - - if (bank->regs->ctrl && !bank->mod_usage) { - void __iomem *reg = bank->base + bank->regs->ctrl; - u32 ctrl; - - ctrl = __raw_readl(reg); - /* Module is enabled, clocks are not gated */ - ctrl &= ~GPIO_MOD_CTRL_BIT; - __raw_writel(ctrl, reg); - bank->context.ctrl = ctrl; + if (!LINE_USED(bank->irq_usage, offset)) { + _set_gpio_triggering(bank, offset, IRQ_TYPE_NONE); + _enable_gpio_module(bank, offset); } - bank->mod_usage |= 1 << offset; - spin_unlock_irqrestore(&bank->lock, flags); return 0; @@ -631,31 +686,11 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset) { struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip); - void __iomem *base = bank->base; unsigned long flags; spin_lock_irqsave(&bank->lock, flags); - - if (bank->regs->wkup_en) { - /* Disable wake-up during idle for dynamic tick */ - _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0); - bank->context.wake_en = - __raw_readl(bank->base + bank->regs->wkup_en); - } - bank->mod_usage &= ~(1 << offset); - - if (bank->regs->ctrl && !bank->mod_usage) { - void __iomem *reg = bank->base + bank->regs->ctrl; - u32 ctrl; - - ctrl = __raw_readl(reg); - /* Module is disabled, clocks are gated */ - ctrl |= GPIO_MOD_CTRL_BIT; - __raw_writel(ctrl, reg); - bank->context.ctrl = ctrl; - } - + _disable_gpio_module(bank, offset); _reset_gpio(bank, bank->chip.base + offset); spin_unlock_irqrestore(&bank->lock, flags); @@ -663,7 +698,7 @@ * If this is the last gpio to be freed in the bank, * disable the bank module. */ - if (!bank->mod_usage) + if (!BANK_USED(bank)) pm_runtime_put(bank->dev); } @@ -758,10 +793,20 @@ struct gpio_bank *bank = irq_data_get_irq_chip_data(d); unsigned int gpio = irq_to_gpio(bank, d->irq); unsigned long flags; + unsigned offset = GPIO_INDEX(bank, gpio); spin_lock_irqsave(&bank->lock, flags); + bank->irq_usage &= ~(1 << offset); + _disable_gpio_module(bank, offset); _reset_gpio(bank, gpio); spin_unlock_irqrestore(&bank->lock, flags); + + /* + * If this is the last IRQ to be freed in the bank, + * disable the bank module. + */ + if (!BANK_USED(bank)) + pm_runtime_put(bank->dev); } static void gpio_ack_irq(struct irq_data *d) @@ -893,13 +938,6 @@ return 0; } -static int gpio_is_input(struct gpio_bank *bank, int mask) -{ - void __iomem *reg = bank->base + bank->regs->direction; - - return __raw_readl(reg) & mask; -} - static int gpio_get(struct gpio_chip *chip, unsigned offset) { struct gpio_bank *bank; @@ -918,13 +956,22 @@ { struct gpio_bank *bank; unsigned long flags; + int retval = 0; bank = container_of(chip, struct gpio_bank, chip); spin_lock_irqsave(&bank->lock, flags); + + if (LINE_USED(bank->irq_usage, offset)) { + retval = -EINVAL; + goto exit; + } + bank->set_dataout(bank, offset, value); _set_gpio_direction(bank, offset, 0); + +exit: spin_unlock_irqrestore(&bank->lock, flags); - return 0; + return retval; } static int gpio_debounce(struct gpio_chip *chip, unsigned offset, @@ -1363,7 +1410,7 @@ struct gpio_bank *bank; list_for_each_entry(bank, &omap_gpio_list, node) { - if (!bank->mod_usage || !bank->loses_context) + if (!BANK_USED(bank) || !bank->loses_context) continue; bank->power_mode = pwr_mode; @@ -1377,7 +1424,7 @@ struct gpio_bank *bank; list_for_each_entry(bank, &omap_gpio_list, node) { - if (!bank->mod_usage || !bank->loses_context) + if (!BANK_USED(bank) || !bank->loses_context) continue; pm_runtime_get_sync(bank->dev); --- linux-lts-raring-3.8.0.orig/drivers/gpio/gpio-lynxpoint.c +++ linux-lts-raring-3.8.0/drivers/gpio/gpio-lynxpoint.c @@ -0,0 +1,469 @@ +/* + * GPIO controller driver for Intel Lynxpoint PCH chipset> + * Copyright (c) 2012, Intel Corporation. + * + * Author: Mathias Nyman + * + * 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. + * + * 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. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* LynxPoint chipset has support for 94 gpio pins */ + +#define LP_NUM_GPIO 94 + +/* Bitmapped register offsets */ +#define LP_ACPI_OWNED 0x00 /* Bitmap, set by bios, 0: pin reserved for ACPI */ +#define LP_GC 0x7C /* set APIC IRQ to IRQ14 or IRQ15 for all pins */ +#define LP_INT_STAT 0x80 +#define LP_INT_ENABLE 0x90 + +/* Each pin has two 32 bit config registers, starting at 0x100 */ +#define LP_CONFIG1 0x100 +#define LP_CONFIG2 0x104 + +/* LP_CONFIG1 reg bits */ +#define OUT_LVL_BIT BIT(31) +#define IN_LVL_BIT BIT(30) +#define TRIG_SEL_BIT BIT(4) /* 0: Edge, 1: Level */ +#define INT_INV_BIT BIT(3) /* Invert interrupt triggering */ +#define DIR_BIT BIT(2) /* 0: Output, 1: Input */ +#define USE_SEL_BIT BIT(0) /* 0: Native, 1: GPIO */ + +/* LP_CONFIG2 reg bits */ +#define GPINDIS_BIT BIT(2) /* disable input sensing */ +#define GPIWP_BIT (BIT(0) | BIT(1)) /* weak pull options */ + +struct lp_gpio { + struct gpio_chip chip; + struct irq_domain *domain; + struct platform_device *pdev; + spinlock_t lock; + unsigned long reg_base; +}; + +/* + * Lynxpoint gpios are controlled through both bitmapped registers and + * per gpio specific registers. The bitmapped registers are in chunks of + * 3 x 32bit registers to cover all 94 gpios + * + * per gpio specific registers consist of two 32bit registers per gpio + * (LP_CONFIG1 and LP_CONFIG2), with 94 gpios there's a total of + * 188 config registes. + * + * A simplified view of the register layout look like this: + * + * LP_ACPI_OWNED[31:0] gpio ownerships for gpios 0-31 (bitmapped registers) + * LP_ACPI_OWNED[63:32] gpio ownerships for gpios 32-63 + * LP_ACPI_OWNED[94:64] gpio ownerships for gpios 63-94 + * ... + * LP_INT_ENABLE[31:0] ... + * LP_INT_ENABLE[63:31] ... + * LP_INT_ENABLE[94:64] ... + * LP0_CONFIG1 (gpio 0) config1 reg for gpio 0 (per gpio registers) + * LP0_CONFIG2 (gpio 0) config2 reg for gpio 0 + * LP1_CONFIG1 (gpio 1) config1 reg for gpio 1 + * LP1_CONFIG2 (gpio 1) config2 reg for gpio 1 + * LP2_CONFIG1 (gpio 2) ... + * LP2_CONFIG2 (gpio 2) ... + * ... + * LP94_CONFIG1 (gpio 94) ... + * LP94_CONFIG2 (gpio 94) ... + */ + +static unsigned long lp_gpio_reg(struct gpio_chip *chip, unsigned offset, + int reg) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + int reg_offset; + + if (reg == LP_CONFIG1 || reg == LP_CONFIG2) + /* per gpio specific config registers */ + reg_offset = offset * 8; + else + /* bitmapped registers */ + reg_offset = (offset / 32) * 4; + + return lg->reg_base + reg + reg_offset; +} + +static int lp_gpio_request(struct gpio_chip *chip, unsigned offset) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + unsigned long reg = lp_gpio_reg(chip, offset, LP_CONFIG1); + unsigned long conf2 = lp_gpio_reg(chip, offset, LP_CONFIG2); + unsigned long acpi_use = lp_gpio_reg(chip, offset, LP_ACPI_OWNED); + + pm_runtime_get(&lg->pdev->dev); /* should we put if failed */ + + /* Fail if BIOS reserved pin for ACPI use */ + if (!(inl(acpi_use) & BIT(offset % 32))) { + dev_err(&lg->pdev->dev, "gpio %d reserved for ACPI\n", offset); + return -EBUSY; + } + /* Fail if pin is in alternate function mode (not GPIO mode) */ + if (!(inl(reg) & USE_SEL_BIT)) + return -ENODEV; + + /* enable input sensing */ + outl(inl(conf2) & ~GPINDIS_BIT, conf2); + + + return 0; +} + +static void lp_gpio_free(struct gpio_chip *chip, unsigned offset) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + unsigned long conf2 = lp_gpio_reg(chip, offset, LP_CONFIG2); + + /* disable input sensing */ + outl(inl(conf2) | GPINDIS_BIT, conf2); + + pm_runtime_put(&lg->pdev->dev); +} + +static int lp_irq_type(struct irq_data *d, unsigned type) +{ + struct lp_gpio *lg = irq_data_get_irq_chip_data(d); + u32 hwirq = irqd_to_hwirq(d); + unsigned long flags; + u32 value; + unsigned long reg = lp_gpio_reg(&lg->chip, hwirq, LP_CONFIG1); + + if (hwirq >= lg->chip.ngpio) + return -EINVAL; + + spin_lock_irqsave(&lg->lock, flags); + value = inl(reg); + + /* set both TRIG_SEL and INV bits to 0 for rising edge */ + if (type & IRQ_TYPE_EDGE_RISING) + value &= ~(TRIG_SEL_BIT | INT_INV_BIT); + + /* TRIG_SEL bit 0, INV bit 1 for falling edge */ + if (type & IRQ_TYPE_EDGE_FALLING) + value = (value | INT_INV_BIT) & ~TRIG_SEL_BIT; + + /* TRIG_SEL bit 1, INV bit 0 for level low */ + if (type & IRQ_TYPE_LEVEL_LOW) + value = (value | TRIG_SEL_BIT) & ~INT_INV_BIT; + + /* TRIG_SEL bit 1, INV bit 1 for level high */ + if (type & IRQ_TYPE_LEVEL_HIGH) + value |= TRIG_SEL_BIT | INT_INV_BIT; + + outl(value, reg); + spin_unlock_irqrestore(&lg->lock, flags); + + return 0; +} + +static int lp_gpio_get(struct gpio_chip *chip, unsigned offset) +{ + unsigned long reg = lp_gpio_reg(chip, offset, LP_CONFIG1); + return inl(reg) & IN_LVL_BIT; +} + +static void lp_gpio_set(struct gpio_chip *chip, unsigned offset, int value) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + unsigned long reg = lp_gpio_reg(chip, offset, LP_CONFIG1); + unsigned long flags; + + spin_lock_irqsave(&lg->lock, flags); + + if (value) + outl(inl(reg) | OUT_LVL_BIT, reg); + else + outl(inl(reg) & ~OUT_LVL_BIT, reg); + + spin_unlock_irqrestore(&lg->lock, flags); +} + +static int lp_gpio_direction_input(struct gpio_chip *chip, unsigned offset) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + unsigned long reg = lp_gpio_reg(chip, offset, LP_CONFIG1); + unsigned long flags; + + spin_lock_irqsave(&lg->lock, flags); + outl(inl(reg) | DIR_BIT, reg); + spin_unlock_irqrestore(&lg->lock, flags); + + return 0; +} + +static int lp_gpio_direction_output(struct gpio_chip *chip, + unsigned offset, int value) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + unsigned long reg = lp_gpio_reg(chip, offset, LP_CONFIG1); + unsigned long flags; + + lp_gpio_set(chip, offset, value); + + spin_lock_irqsave(&lg->lock, flags); + outl(inl(reg) & ~DIR_BIT, reg); + spin_unlock_irqrestore(&lg->lock, flags); + + return 0; +} + +static int lp_gpio_to_irq(struct gpio_chip *chip, unsigned offset) +{ + struct lp_gpio *lg = container_of(chip, struct lp_gpio, chip); + return irq_create_mapping(lg->domain, offset); +} + +static void lp_gpio_irq_handler(unsigned irq, struct irq_desc *desc) +{ + struct irq_data *data = irq_desc_get_irq_data(desc); + struct lp_gpio *lg = irq_data_get_irq_handler_data(data); + struct irq_chip *chip = irq_data_get_irq_chip(data); + u32 base, pin, mask; + unsigned long reg, pending; + unsigned virq; + + /* check from GPIO controller which pin triggered the interrupt */ + for (base = 0; base < lg->chip.ngpio; base += 32) { + reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT); + + while ((pending = inl(reg))) { + pin = __ffs(pending); + mask = BIT(pin); + /* Clear before handling so we don't lose an edge */ + outl(mask, reg); + virq = irq_find_mapping(lg->domain, base + pin); + generic_handle_irq(virq); + } + } + chip->irq_eoi(data); +} + +static void lp_irq_unmask(struct irq_data *d) +{ +} + +static void lp_irq_mask(struct irq_data *d) +{ +} + +static void lp_irq_enable(struct irq_data *d) +{ + struct lp_gpio *lg = irq_data_get_irq_chip_data(d); + u32 hwirq = irqd_to_hwirq(d); + unsigned long reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE); + unsigned long flags; + + spin_lock_irqsave(&lg->lock, flags); + outl(inl(reg) | BIT(hwirq % 32), reg); + spin_unlock_irqrestore(&lg->lock, flags); +} + +static void lp_irq_disable(struct irq_data *d) +{ + struct lp_gpio *lg = irq_data_get_irq_chip_data(d); + u32 hwirq = irqd_to_hwirq(d); + unsigned long reg = lp_gpio_reg(&lg->chip, hwirq, LP_INT_ENABLE); + unsigned long flags; + + spin_lock_irqsave(&lg->lock, flags); + outl(inl(reg) & ~BIT(hwirq % 32), reg); + spin_unlock_irqrestore(&lg->lock, flags); +} + +static struct irq_chip lp_irqchip = { + .name = "LP-GPIO", + .irq_mask = lp_irq_mask, + .irq_unmask = lp_irq_unmask, + .irq_enable = lp_irq_enable, + .irq_disable = lp_irq_disable, + .irq_set_type = lp_irq_type, + .flags = IRQCHIP_SKIP_SET_WAKE, +}; + +static void lp_gpio_irq_init_hw(struct lp_gpio *lg) +{ + unsigned long reg; + unsigned base; + + for (base = 0; base < lg->chip.ngpio; base += 32) { + /* disable gpio pin interrupts */ + reg = lp_gpio_reg(&lg->chip, base, LP_INT_ENABLE); + outl(0, reg); + /* Clear interrupt status register */ + reg = lp_gpio_reg(&lg->chip, base, LP_INT_STAT); + outl(0xffffffff, reg); + } +} + +static int lp_gpio_irq_map(struct irq_domain *d, unsigned int virq, + irq_hw_number_t hw) +{ + struct lp_gpio *lg = d->host_data; + + irq_set_chip_and_handler_name(virq, &lp_irqchip, handle_simple_irq, + "demux"); + irq_set_chip_data(virq, lg); + irq_set_irq_type(virq, IRQ_TYPE_NONE); + + return 0; +} + +static const struct irq_domain_ops lp_gpio_irq_ops = { + .map = lp_gpio_irq_map, +}; + +static int lp_gpio_probe(struct platform_device *pdev) +{ + struct lp_gpio *lg; + struct gpio_chip *gc; + struct resource *io_rc, *irq_rc; + struct device *dev = &pdev->dev; + unsigned long reg_len; + unsigned hwirq; + int ret = -ENODEV; + + lg = devm_kzalloc(dev, sizeof(struct lp_gpio), GFP_KERNEL); + if (!lg) { + dev_err(dev, "can't allocate lp_gpio chip data\n"); + return -ENOMEM; + } + + lg->pdev = pdev; + platform_set_drvdata(pdev, lg); + + io_rc = platform_get_resource(pdev, IORESOURCE_IO, 0); + irq_rc = platform_get_resource(pdev, IORESOURCE_IRQ, 0); + + if (!io_rc) { + dev_err(dev, "missing IO resources\n"); + return -EINVAL; + } + + lg->reg_base = io_rc->start; + reg_len = resource_size(io_rc); + + if (!devm_request_region(dev, lg->reg_base, reg_len, "lp-gpio")) { + dev_err(dev, "failed requesting IO region 0x%x\n", + (unsigned int)lg->reg_base); + return -EBUSY; + } + + spin_lock_init(&lg->lock); + + gc = &lg->chip; + gc->label = dev_name(dev); + gc->owner = THIS_MODULE; + gc->request = lp_gpio_request; + gc->free = lp_gpio_free; + gc->direction_input = lp_gpio_direction_input; + gc->direction_output = lp_gpio_direction_output; + gc->get = lp_gpio_get; + gc->set = lp_gpio_set; + gc->base = -1; + gc->ngpio = LP_NUM_GPIO; + gc->can_sleep = 0; + gc->dev = dev; + + /* set up interrupts */ + if (irq_rc && irq_rc->start) { + hwirq = irq_rc->start; + gc->to_irq = lp_gpio_to_irq; + + lg->domain = irq_domain_add_linear(NULL, LP_NUM_GPIO, + &lp_gpio_irq_ops, lg); + if (!lg->domain) + return -ENXIO; + + lp_gpio_irq_init_hw(lg); + + irq_set_handler_data(hwirq, lg); + irq_set_chained_handler(hwirq, lp_gpio_irq_handler); + } + + ret = gpiochip_add(gc); + if (ret) { + dev_err(dev, "failed adding lp-gpio chip\n"); + return ret; + } + pm_runtime_enable(dev); + + return 0; +} + +static int lp_gpio_runtime_suspend(struct device *dev) +{ + return 0; +} + +static int lp_gpio_runtime_resume(struct device *dev) +{ + return 0; +} + +static const struct dev_pm_ops lp_gpio_pm_ops = { + .runtime_suspend = lp_gpio_runtime_suspend, + .runtime_resume = lp_gpio_runtime_resume, +}; + +static const struct acpi_device_id lynxpoint_gpio_acpi_match[] = { + { "INT33C7", 0 }, + { } +}; +MODULE_DEVICE_TABLE(acpi, lynxpoint_gpio_acpi_match); + +static int lp_gpio_remove(struct platform_device *pdev) +{ + struct lp_gpio *lg = platform_get_drvdata(pdev); + int err; + err = gpiochip_remove(&lg->chip); + if (err) + dev_warn(&pdev->dev, "failed to remove gpio_chip.\n"); + platform_set_drvdata(pdev, NULL); + return 0; +} + +static struct platform_driver lp_gpio_driver = { + .probe = lp_gpio_probe, + .remove = lp_gpio_remove, + .driver = { + .name = "lp_gpio", + .owner = THIS_MODULE, + .pm = &lp_gpio_pm_ops, + .acpi_match_table = ACPI_PTR(lynxpoint_gpio_acpi_match), + }, +}; + +static int __init lp_gpio_init(void) +{ + return platform_driver_register(&lp_gpio_driver); +} + +subsys_initcall(lp_gpio_init); --- linux-lts-raring-3.8.0.orig/drivers/xen/grant-table.c +++ linux-lts-raring-3.8.0/drivers/xen/grant-table.c @@ -729,9 +729,18 @@ void (*fn)(void *), void *arg, u16 count) { unsigned long flags; + struct gnttab_free_callback *cb; + spin_lock_irqsave(&gnttab_list_lock, flags); - if (callback->next) - goto out; + + /* Check if the callback is already on the list */ + cb = gnttab_free_callback_list; + while (cb) { + if (cb == callback) + goto out; + cb = cb->next; + } + callback->fn = fn; callback->arg = arg; callback->count = count; --- linux-lts-raring-3.8.0.orig/drivers/xen/fallback.c +++ linux-lts-raring-3.8.0/drivers/xen/fallback.c @@ -44,7 +44,7 @@ } EXPORT_SYMBOL_GPL(xen_event_channel_op_compat); -int HYPERVISOR_physdev_op_compat(int cmd, void *arg) +int xen_physdev_op_compat(int cmd, void *arg) { struct physdev_op op; int rc; @@ -78,3 +78,4 @@ return rc; } +EXPORT_SYMBOL_GPL(xen_physdev_op_compat); --- linux-lts-raring-3.8.0.orig/drivers/xen/evtchn.c +++ linux-lts-raring-3.8.0/drivers/xen/evtchn.c @@ -269,6 +269,14 @@ u->name, (void *)(unsigned long)port); if (rc >= 0) rc = evtchn_make_refcounted(port); + else { + /* bind failed, should close the port now */ + struct evtchn_close close; + close.port = port; + if (HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0) + BUG(); + set_port_user(port, NULL); + } return rc; } @@ -277,6 +285,8 @@ { int irq = irq_from_evtchn(port); + BUG_ON(irq < 0); + unbind_from_irqhandler(irq, (void *)(unsigned long)port); set_port_user(port, NULL); --- linux-lts-raring-3.8.0.orig/drivers/xen/events.c +++ linux-lts-raring-3.8.0/drivers/xen/events.c @@ -333,7 +333,7 @@ for_each_possible_cpu(i) memset(per_cpu(cpu_evtchn_mask, i), - (i == 0) ? ~0 : 0, sizeof(*per_cpu(cpu_evtchn_mask, i))); + (i == 0) ? ~0 : 0, NR_EVENT_CHANNELS/8); } static inline void clear_evtchn(int port) @@ -388,11 +388,23 @@ if (unlikely((cpu != cpu_from_evtchn(port)))) do_hypercall = 1; - else + else { + /* + * Need to clear the mask before checking pending to + * avoid a race with an event becoming pending. + * + * EVTCHNOP_unmask will only trigger an upcall if the + * mask bit was set, so if a hypercall is needed + * remask the event. + */ + sync_clear_bit(port, &s->evtchn_mask[0]); evtchn_pending = sync_test_bit(port, &s->evtchn_pending[0]); - if (unlikely(evtchn_pending && xen_hvm_domain())) - do_hypercall = 1; + if (unlikely(evtchn_pending && xen_hvm_domain())) { + sync_set_bit(port, &s->evtchn_mask[0]); + do_hypercall = 1; + } + } /* Slow path (hypercall) if this is a non-local port or if this is * an hvm domain and an event is pending (hvm domains don't have @@ -403,8 +415,6 @@ } else { struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu); - sync_clear_bit(port, &s->evtchn_mask[0]); - /* * The following is basically the equivalent of * 'hw_resend_irq'. Just like a real IO-APIC we 'lose @@ -1288,7 +1298,7 @@ { int start_word_idx, start_bit_idx; int word_idx, bit_idx; - int i; + int i, irq; int cpu = get_cpu(); struct shared_info *s = HYPERVISOR_shared_info; struct vcpu_info *vcpu_info = __this_cpu_read(xen_vcpu); @@ -1296,6 +1306,8 @@ do { unsigned long pending_words; + unsigned long pending_bits; + struct irq_desc *desc; vcpu_info->evtchn_upcall_pending = 0; @@ -1306,6 +1318,17 @@ /* Clear master flag /before/ clearing selector flag. */ wmb(); #endif + if ((irq = per_cpu(virq_to_irq, cpu)[VIRQ_TIMER]) != -1) { + int evtchn = evtchn_from_irq(irq); + word_idx = evtchn / BITS_PER_LONG; + pending_bits = evtchn % BITS_PER_LONG; + if (active_evtchns(cpu, s, word_idx) & (1ULL << pending_bits)) { + desc = irq_to_desc(irq); + if (desc) + generic_handle_irq_desc(irq, desc); + } + } + pending_words = xchg(&vcpu_info->evtchn_pending_sel, 0); start_word_idx = __this_cpu_read(current_word_idx); @@ -1314,7 +1337,6 @@ word_idx = start_word_idx; for (i = 0; pending_words != 0; i++) { - unsigned long pending_bits; unsigned long words; words = MASK_LSBS(pending_words, word_idx); @@ -1343,8 +1365,7 @@ do { unsigned long bits; - int port, irq; - struct irq_desc *desc; + int port; bits = MASK_LSBS(pending_bits, bit_idx); @@ -1443,8 +1464,10 @@ /* Rebind an evtchn so that it gets delivered to a specific cpu */ static int rebind_irq_to_cpu(unsigned irq, unsigned tcpu) { + struct shared_info *s = HYPERVISOR_shared_info; struct evtchn_bind_vcpu bind_vcpu; int evtchn = evtchn_from_irq(irq); + int masked; if (!VALID_EVTCHN(evtchn)) return -1; @@ -1461,6 +1484,12 @@ bind_vcpu.vcpu = tcpu; /* + * Mask the event while changing the VCPU binding to prevent + * it being delivered on an unexpected VCPU. + */ + masked = sync_test_and_set_bit(evtchn, s->evtchn_mask); + + /* * If this fails, it usually just indicates that we're dealing with a * virq or IPI channel, which don't actually need to be rebound. Ignore * it, but don't do the xenlinux-level rebind in that case. @@ -1468,6 +1497,9 @@ if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_vcpu, &bind_vcpu) >= 0) bind_evtchn_to_cpu(evtchn, tcpu); + if (!masked) + unmask_evtchn(evtchn); + return 0; } --- linux-lts-raring-3.8.0.orig/drivers/xen/xenbus/xenbus_client.c +++ linux-lts-raring-3.8.0/drivers/xen/xenbus/xenbus_client.c @@ -30,6 +30,7 @@ * IN THE SOFTWARE. */ +#include #include #include #include --- linux-lts-raring-3.8.0.orig/drivers/xen/xen-pciback/pciback_ops.c +++ linux-lts-raring-3.8.0/drivers/xen/xen-pciback/pciback_ops.c @@ -113,7 +113,8 @@ if (dev->msi_enabled) pci_disable_msi(dev); #endif - pci_disable_device(dev); + if (pci_is_enabled(dev)) + pci_disable_device(dev); pci_write_config_word(dev, PCI_COMMAND, 0); --- linux-lts-raring-3.8.0.orig/drivers/xen/xen-pciback/pci_stub.c +++ linux-lts-raring-3.8.0/drivers/xen/xen-pciback/pci_stub.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "pciback.h" #include "conf_space.h" #include "conf_space_quirks.h" @@ -85,37 +86,52 @@ static void pcistub_device_release(struct kref *kref) { struct pcistub_device *psdev; + struct pci_dev *dev; struct xen_pcibk_dev_data *dev_data; psdev = container_of(kref, struct pcistub_device, kref); - dev_data = pci_get_drvdata(psdev->dev); + dev = psdev->dev; + dev_data = pci_get_drvdata(dev); - dev_dbg(&psdev->dev->dev, "pcistub_device_release\n"); + dev_dbg(&dev->dev, "pcistub_device_release\n"); - xen_unregister_device_domain_owner(psdev->dev); + xen_unregister_device_domain_owner(dev); /* Call the reset function which does not take lock as this * is called from "unbind" which takes a device_lock mutex. */ - __pci_reset_function_locked(psdev->dev); - if (pci_load_and_free_saved_state(psdev->dev, - &dev_data->pci_saved_state)) { - dev_dbg(&psdev->dev->dev, "Could not reload PCI state\n"); - } else - pci_restore_state(psdev->dev); + __pci_reset_function_locked(dev); + if (pci_load_and_free_saved_state(dev, &dev_data->pci_saved_state)) + dev_dbg(&dev->dev, "Could not reload PCI state\n"); + else + pci_restore_state(dev); + + if (pci_find_capability(dev, PCI_CAP_ID_MSIX)) { + struct physdev_pci_device ppdev = { + .seg = pci_domain_nr(dev->bus), + .bus = dev->bus->number, + .devfn = dev->devfn + }; + int err = HYPERVISOR_physdev_op(PHYSDEVOP_release_msix, + &ppdev); + + if (err) + dev_warn(&dev->dev, "MSI-X release failed (%d)\n", + err); + } /* Disable the device */ - xen_pcibk_reset_device(psdev->dev); + xen_pcibk_reset_device(dev); kfree(dev_data); - pci_set_drvdata(psdev->dev, NULL); + pci_set_drvdata(dev, NULL); /* Clean-up the device */ - xen_pcibk_config_free_dyn_fields(psdev->dev); - xen_pcibk_config_free_dev(psdev->dev); + xen_pcibk_config_free_dyn_fields(dev); + xen_pcibk_config_free_dev(dev); - psdev->dev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED; - pci_dev_put(psdev->dev); + dev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED; + pci_dev_put(dev); kfree(psdev); } @@ -355,6 +371,19 @@ if (err) goto config_release; + if (pci_find_capability(dev, PCI_CAP_ID_MSIX)) { + struct physdev_pci_device ppdev = { + .seg = pci_domain_nr(dev->bus), + .bus = dev->bus->number, + .devfn = dev->devfn + }; + + err = HYPERVISOR_physdev_op(PHYSDEVOP_prepare_msix, &ppdev); + if (err) + dev_err(&dev->dev, "MSI-X preparation failed (%d)\n", + err); + } + /* We need the device active to save the state. */ dev_dbg(&dev->dev, "save state of device\n"); pci_save_state(dev); --- linux-lts-raring-3.8.0.orig/drivers/ata/Kconfig +++ linux-lts-raring-3.8.0/drivers/ata/Kconfig @@ -58,6 +58,19 @@ You can disable this at kernel boot time by using the option libata.noacpi=1 +config SATA_ZPODD + bool "SATA Zero Power ODD Support" + depends on ATA_ACPI + default n + help + This option adds support for SATA ZPODD. It requires both + ODD and the platform support, and if enabled, will automatically + power on/off the ODD when certain condition is satisfied. This + does not impact user's experience of the ODD, only power is saved + when ODD is not in use(i.e. no disc inside). + + If unsure, say N. + config SATA_PMP bool "SATA Port Multiplier support" default y --- linux-lts-raring-3.8.0.orig/drivers/ata/libata.h +++ linux-lts-raring-3.8.0/drivers/ata/libata.h @@ -122,6 +122,7 @@ extern void ata_acpi_unregister(void); extern void ata_acpi_bind(struct ata_device *dev); extern void ata_acpi_unbind(struct ata_device *dev); +extern void ata_acpi_hotplug_init(struct ata_host *host); #else static inline void ata_acpi_dissociate(struct ata_host *host) { } static inline int ata_acpi_on_suspend(struct ata_port *ap) { return 0; } @@ -134,6 +135,7 @@ static inline void ata_acpi_unregister(void) { } static inline void ata_acpi_bind(struct ata_device *dev) { } static inline void ata_acpi_unbind(struct ata_device *dev) { } +static inline void ata_acpi_hotplug_init(struct ata_host *host) {} #endif /* libata-scsi.c */ @@ -182,6 +184,9 @@ extern int ata_ering_map(struct ata_ering *ering, int (*map_fn)(struct ata_ering_entry *, void *), void *arg); +extern unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key); +extern unsigned int atapi_eh_request_sense(struct ata_device *dev, + u8 *sense_buf, u8 dfl_sense_key); /* libata-pmp.c */ #ifdef CONFIG_SATA_PMP @@ -230,4 +235,28 @@ { } #endif /* CONFIG_ATA_SFF */ +/* libata-zpodd.c */ +#ifdef CONFIG_SATA_ZPODD +void zpodd_init(struct ata_device *dev); +void zpodd_exit(struct ata_device *dev); +static inline bool zpodd_dev_enabled(struct ata_device *dev) +{ + return dev->zpodd != NULL; +} +void zpodd_on_suspend(struct ata_device *dev); +bool zpodd_zpready(struct ata_device *dev); +void zpodd_enable_run_wake(struct ata_device *dev); +void zpodd_disable_run_wake(struct ata_device *dev); +void zpodd_post_poweron(struct ata_device *dev); +#else /* CONFIG_SATA_ZPODD */ +static inline void zpodd_init(struct ata_device *dev) {} +static inline void zpodd_exit(struct ata_device *dev) {} +static inline bool zpodd_dev_enabled(struct ata_device *dev) { return false; } +static inline void zpodd_on_suspend(struct ata_device *dev) {} +static inline bool zpodd_zpready(struct ata_device *dev) { return false; } +static inline void zpodd_enable_run_wake(struct ata_device *dev) {} +static inline void zpodd_disable_run_wake(struct ata_device *dev) {} +static inline void zpodd_post_poweron(struct ata_device *dev) {} +#endif /* CONFIG_SATA_ZPODD */ + #endif /* __LIBATA_H__ */ --- linux-lts-raring-3.8.0.orig/drivers/ata/ahci_platform.c +++ linux-lts-raring-3.8.0/drivers/ata/ahci_platform.c @@ -23,6 +23,9 @@ #include #include #include +#include +#include +#include #include "ahci.h" static void ahci_host_stop(struct ata_host *host); @@ -30,6 +33,7 @@ enum ahci_type { AHCI, /* standard platform ahci */ IMX53_AHCI, /* ahci on i.mx53 */ + IMX6Q_AHCI, /* ahci on i.mx6q */ STRICT_AHCI, /* delayed DMA engine start */ }; @@ -41,6 +45,10 @@ .name = "imx53-ahci", .driver_data = IMX53_AHCI, }, { + }, { + .name = "imx6q-ahci", + .driver_data = IMX53_AHCI, + }, { .name = "strict-ahci", .driver_data = STRICT_AHCI, }, { @@ -86,12 +94,23 @@ AHCI_SHT("ahci_platform"), }; +static const struct of_device_id ahci_of_match[] = { + { .compatible = "fsl,imx6q-ahci", .data = &ahci_devtype[IMX6Q_AHCI],}, + { .compatible = "snps,spear-ahci", }, + {}, +}; +MODULE_DEVICE_TABLE(of, ahci_of_match); + static int ahci_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct ahci_platform_data *pdata = dev_get_platdata(dev); + const struct of_device_id *of_id = + of_match_device(ahci_of_match, &pdev->dev); + const struct platform_device_id *id_entry = of_id->data; const struct platform_device_id *id = platform_get_device_id(pdev); - struct ata_port_info pi = ahci_port_info[id ? id->driver_data : 0]; + struct ata_port_info pi = ahci_port_info[id ? id->driver_data : \ + id_entry->driver_data]; const struct ata_port_info *ppi[] = { &pi, NULL }; struct ahci_host_priv *hpriv; struct ata_host *host; @@ -325,12 +344,6 @@ static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume); -static const struct of_device_id ahci_of_match[] = { - { .compatible = "snps,spear-ahci", }, - {}, -}; -MODULE_DEVICE_TABLE(of, ahci_of_match); - static struct platform_driver ahci_driver = { .probe = ahci_probe, .remove = ata_platform_remove_one, --- linux-lts-raring-3.8.0.orig/drivers/ata/libata-scsi.c +++ linux-lts-raring-3.8.0/drivers/ata/libata-scsi.c @@ -532,8 +532,8 @@ struct scsi_sense_hdr sshdr; scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE, &sshdr); - if (sshdr.sense_key == 0 && - sshdr.asc == 0 && sshdr.ascq == 0) + if (sshdr.sense_key == RECOVERED_ERROR && + sshdr.asc == 0 && sshdr.ascq == 0x1d) cmd_result &= ~SAM_STAT_CHECK_CONDITION; } @@ -618,8 +618,8 @@ struct scsi_sense_hdr sshdr; scsi_normalize_sense(sensebuf, SCSI_SENSE_BUFFERSIZE, &sshdr); - if (sshdr.sense_key == 0 && - sshdr.asc == 0 && sshdr.ascq == 0) + if (sshdr.sense_key == RECOVERED_ERROR && + sshdr.asc == 0 && sshdr.ascq == 0x1d) cmd_result &= ~SAM_STAT_CHECK_CONDITION; } @@ -933,7 +933,11 @@ * block specified for the ATA pass through commands. Regardless * of whether the command errored or not, return a sense * block. Copy all controller registers into the sense - * block. Clear sense key, ASC & ASCQ if there is no error. + * block. If there was no error, we get the request from an ATA + * passthrough command, so we use the following sense data: + * sk = RECOVERED ERROR + * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE + * * * LOCKING: * None. @@ -959,6 +963,10 @@ ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature, &sb[1], &sb[2], &sb[3], verbose); sb[1] &= 0x0f; + } else { + sb[1] = RECOVERED_ERROR; + sb[2] = 0; + sb[3] = 0x1D; } /* @@ -1733,10 +1741,12 @@ /* For ATA pass thru (SAT) commands, generate a sense block if * user mandated it or if there's an error. Note that if we - * generate because the user forced us to, a check condition - * is generated and the ATA register values are returned + * generate because the user forced us to [CK_COND =1], a check + * condition is generated and the ATA register values are returned * whether the command completed successfully or not. If there - * was no error, SK, ASC and ASCQ will all be zero. + * was no error, we use the following sense data: + * sk = RECOVERED ERROR + * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE */ if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) && ((cdb[2] & 0x20) || need_sense)) { @@ -3755,6 +3765,8 @@ mutex_lock(&ap->scsi_host->scan_mutex); spin_lock_irqsave(ap->lock, flags); + if (zpodd_dev_enabled(dev)) + zpodd_exit(dev); ata_acpi_unbind(dev); /* clearing dev->sdev is protected by host lock */ --- linux-lts-raring-3.8.0.orig/drivers/ata/sata_fsl.c +++ linux-lts-raring-3.8.0/drivers/ata/sata_fsl.c @@ -292,6 +292,7 @@ { struct sata_fsl_host_priv *host_priv = host->private_data; void __iomem *hcr_base = host_priv->hcr_base; + unsigned long flags; if (count > ICC_MAX_INT_COUNT_THRESHOLD) count = ICC_MAX_INT_COUNT_THRESHOLD; @@ -304,12 +305,12 @@ (count > ICC_MIN_INT_COUNT_THRESHOLD)) ticks = ICC_SAFE_INT_TICKS; - spin_lock(&host->lock); + spin_lock_irqsave(&host->lock, flags); iowrite32((count << 24 | ticks), hcr_base + ICC); intr_coalescing_count = count; intr_coalescing_ticks = ticks; - spin_unlock(&host->lock); + spin_unlock_irqrestore(&host->lock, flags); DPRINTK("intrrupt coalescing, count = 0x%x, ticks = %x\n", intr_coalescing_count, intr_coalescing_ticks); --- linux-lts-raring-3.8.0.orig/drivers/ata/ata_piix.c +++ linux-lts-raring-3.8.0/drivers/ata/ata_piix.c @@ -150,6 +150,8 @@ tolapai_sata, piix_pata_vmw, /* PIIX4 for VMware, spurious DMA_ERR */ ich8_sata_snb, + ich8_2port_sata_snb, + ich8_2port_sata_byt, }; struct piix_map_db { @@ -304,7 +306,7 @@ /* SATA Controller IDE (Lynx Point) */ { 0x8086, 0x8c01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, /* SATA Controller IDE (Lynx Point) */ - { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + { 0x8086, 0x8c08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb }, /* SATA Controller IDE (Lynx Point) */ { 0x8086, 0x8c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, /* SATA Controller IDE (Lynx Point-LP) */ @@ -317,6 +319,28 @@ { 0x8086, 0x9c09, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, /* SATA Controller IDE (DH89xxCC) */ { 0x8086, 0x2326, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + /* SATA Controller IDE (Avoton) */ + { 0x8086, 0x1f20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, + /* SATA Controller IDE (Avoton) */ + { 0x8086, 0x1f21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, + /* SATA Controller IDE (Avoton) */ + { 0x8086, 0x1f30, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + /* SATA Controller IDE (Avoton) */ + { 0x8086, 0x1f31, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + /* SATA Controller IDE (Wellsburg) */ + { 0x8086, 0x8d00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, + /* SATA Controller IDE (Wellsburg) */ + { 0x8086, 0x8d08, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_snb }, + /* SATA Controller IDE (Wellsburg) */ + { 0x8086, 0x8d60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_snb }, + /* SATA Controller IDE (Wellsburg) */ + { 0x8086, 0x8d68, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + /* SATA Controller IDE (BayTrail) */ + { 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, + { 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt }, + /* SATA Controller IDE (Coleto Creek) */ + { 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, + { } /* terminate list */ }; @@ -422,6 +446,8 @@ [ich8m_apple_sata] = &ich8m_apple_map_db, [tolapai_sata] = &tolapai_map_db, [ich8_sata_snb] = &ich8_map_db, + [ich8_2port_sata_snb] = &ich8_2port_map_db, + [ich8_2port_sata_byt] = &ich8_2port_map_db, }; static struct pci_bits piix_enable_bits[] = { @@ -1225,6 +1251,26 @@ .udma_mask = ATA_UDMA6, .port_ops = &piix_sata_ops, }, + + [ich8_2port_sata_snb] = + { + .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR + | PIIX_FLAG_PIO16, + .pio_mask = ATA_PIO4, + .mwdma_mask = ATA_MWDMA2, + .udma_mask = ATA_UDMA6, + .port_ops = &piix_sata_ops, + }, + + [ich8_2port_sata_byt] = + { + .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR | PIIX_FLAG_PIO16, + .pio_mask = ATA_PIO4, + .mwdma_mask = ATA_MWDMA2, + .udma_mask = ATA_UDMA6, + .port_ops = &piix_sata_ops, + }, + }; #define AHCI_PCI_BAR 5 --- linux-lts-raring-3.8.0.orig/drivers/ata/libahci.c +++ linux-lts-raring-3.8.0/drivers/ata/libahci.c @@ -1560,8 +1560,7 @@ u32 fbs = readl(port_mmio + PORT_FBS); int pmp = fbs >> PORT_FBS_DWE_OFFSET; - if ((fbs & PORT_FBS_SDE) && (pmp < ap->nr_pmp_links) && - ata_link_online(&ap->pmp_link[pmp])) { + if ((fbs & PORT_FBS_SDE) && (pmp < ap->nr_pmp_links)) { link = &ap->pmp_link[pmp]; fbs_need_dec = true; } --- linux-lts-raring-3.8.0.orig/drivers/ata/libata-acpi.c +++ linux-lts-raring-3.8.0/drivers/ata/libata-acpi.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include "libata.h" @@ -60,7 +61,8 @@ if (ap->flags & ATA_FLAG_ACPI_SATA) return NULL; - return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev), ap->port_no); + return ap->scsi_host ? + DEVICE_ACPI_HANDLE(&ap->scsi_host->shost_gendev) : NULL; } EXPORT_SYMBOL(ata_ap_acpi_handle); @@ -155,8 +157,10 @@ spin_unlock_irqrestore(ap->lock, flags); - if (wait) + if (wait) { ata_port_wait_eh(ap); + flush_work(&ap->hotplug_task.work); + } } static void ata_acpi_dev_notify_dock(acpi_handle handle, u32 event, void *data) @@ -213,6 +217,38 @@ .uevent = ata_acpi_ap_uevent, }; +void ata_acpi_hotplug_init(struct ata_host *host) +{ + int i; + + for (i = 0; i < host->n_ports; i++) { + struct ata_port *ap = host->ports[i]; + acpi_handle handle; + struct ata_device *dev; + + if (!ap) + continue; + + handle = ata_ap_acpi_handle(ap); + if (handle) { + /* we might be on a docking station */ + register_hotplug_dock_device(handle, + &ata_acpi_ap_dock_ops, ap); + } + + ata_for_each_dev(dev, &ap->link, ALL) { + handle = ata_dev_acpi_handle(dev); + if (!handle) + continue; + + /* we might be on a docking station */ + register_hotplug_dock_device(handle, + &ata_acpi_dev_dock_ops, + dev); + } + } +} + /** * ata_acpi_dissociate - dissociate ATA host from ACPI objects * @host: target ATA host @@ -239,28 +275,15 @@ } } -/** - * ata_acpi_gtm - execute _GTM - * @ap: target ATA port - * @gtm: out parameter for _GTM result - * - * Evaluate _GTM and store the result in @gtm. - * - * LOCKING: - * EH context. - * - * RETURNS: - * 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure. - */ -int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *gtm) +static int __ata_acpi_gtm(struct ata_port *ap, acpi_handle handle, + struct ata_acpi_gtm *gtm) { struct acpi_buffer output = { .length = ACPI_ALLOCATE_BUFFER }; union acpi_object *out_obj; acpi_status status; int rc = 0; - status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_GTM", NULL, - &output); + status = acpi_evaluate_object(handle, "_GTM", NULL, &output); rc = -ENOENT; if (status == AE_NOT_FOUND) @@ -294,6 +317,27 @@ return rc; } +/** + * ata_acpi_gtm - execute _GTM + * @ap: target ATA port + * @gtm: out parameter for _GTM result + * + * Evaluate _GTM and store the result in @gtm. + * + * LOCKING: + * EH context. + * + * RETURNS: + * 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure. + */ +int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *gtm) +{ + if (ata_ap_acpi_handle(ap)) + return __ata_acpi_gtm(ap, ata_ap_acpi_handle(ap), gtm); + else + return -EINVAL; +} + EXPORT_SYMBOL_GPL(ata_acpi_gtm); /** @@ -835,50 +879,95 @@ } } -/** - * ata_acpi_set_state - set the port power state - * @ap: target ATA port - * @state: state, on/off - * - * This function executes the _PS0/_PS3 ACPI method to set the power state. - * ACPI spec requires _PS0 when IDE power on and _PS3 when power off - */ -void ata_acpi_set_state(struct ata_port *ap, pm_message_t state) +static int ata_acpi_choose_suspend_state(struct ata_device *dev, bool runtime) { + int d_max_in = ACPI_STATE_D3_COLD; + if (!runtime) + goto out; + + /* + * For ATAPI, runtime D3 cold is only allowed + * for ZPODD in zero power ready state + */ + if (dev->class == ATA_DEV_ATAPI && + !(zpodd_dev_enabled(dev) && zpodd_zpready(dev))) + d_max_in = ACPI_STATE_D3_HOT; + +out: + return acpi_pm_device_sleep_state(&dev->sdev->sdev_gendev, + NULL, d_max_in); +} + +static void sata_acpi_set_state(struct ata_port *ap, pm_message_t state) +{ + bool runtime = PMSG_IS_AUTO(state); struct ata_device *dev; acpi_handle handle; int acpi_state; - /* channel first and then drives for power on and vica versa - for power off */ - handle = ata_ap_acpi_handle(ap); - if (handle && state.event == PM_EVENT_ON) - acpi_bus_set_power(handle, ACPI_STATE_D0); - ata_for_each_dev(dev, &ap->link, ENABLED) { handle = ata_dev_acpi_handle(dev); if (!handle) continue; - if (state.event != PM_EVENT_ON) { - acpi_state = acpi_pm_device_sleep_state( - &dev->sdev->sdev_gendev, NULL, ACPI_STATE_D3); - if (acpi_state > 0) - acpi_bus_set_power(handle, acpi_state); - /* TBD: need to check if it's runtime pm request */ - acpi_pm_device_run_wake( - &dev->sdev->sdev_gendev, true); + if (!(state.event & PM_EVENT_RESUME)) { + acpi_state = ata_acpi_choose_suspend_state(dev, runtime); + if (acpi_state == ACPI_STATE_D0) + continue; + if (runtime && zpodd_dev_enabled(dev) && + acpi_state == ACPI_STATE_D3_COLD) + zpodd_enable_run_wake(dev); + acpi_bus_set_power(handle, acpi_state); } else { - /* Ditto */ - acpi_pm_device_run_wake( - &dev->sdev->sdev_gendev, false); + if (runtime && zpodd_dev_enabled(dev)) + zpodd_disable_run_wake(dev); acpi_bus_set_power(handle, ACPI_STATE_D0); } } +} + +/* ACPI spec requires _PS0 when IDE power on and _PS3 when power off */ +static void pata_acpi_set_state(struct ata_port *ap, pm_message_t state) +{ + struct ata_device *dev; + acpi_handle port_handle; + + port_handle = ata_ap_acpi_handle(ap); + if (!port_handle) + return; + + /* channel first and then drives for power on and vica versa + for power off */ + if (state.event & PM_EVENT_RESUME) + acpi_bus_set_power(port_handle, ACPI_STATE_D0); + + ata_for_each_dev(dev, &ap->link, ENABLED) { + acpi_handle dev_handle = ata_dev_acpi_handle(dev); + if (!dev_handle) + continue; + + acpi_bus_set_power(dev_handle, state.event & PM_EVENT_RESUME ? + ACPI_STATE_D0 : ACPI_STATE_D3); + } - handle = ata_ap_acpi_handle(ap); - if (handle && state.event != PM_EVENT_ON) - acpi_bus_set_power(handle, ACPI_STATE_D3); + if (!(state.event & PM_EVENT_RESUME)) + acpi_bus_set_power(port_handle, ACPI_STATE_D3); +} + +/** + * ata_acpi_set_state - set the port power state + * @ap: target ATA port + * @state: state, on/off + * + * This function sets a proper ACPI D state for the device on + * system and runtime PM operations. + */ +void ata_acpi_set_state(struct ata_port *ap, pm_message_t state) +{ + if (ap->flags & ATA_FLAG_ACPI_SATA) + sata_acpi_set_state(ap, state); + else + pata_acpi_set_state(ap, state); } /** @@ -974,57 +1063,6 @@ ata_acpi_clear_gtf(dev); } -static void ata_acpi_wake_dev(acpi_handle handle, u32 event, void *context) -{ - struct ata_device *ata_dev = context; - - if (event == ACPI_NOTIFY_DEVICE_WAKE && ata_dev && - pm_runtime_suspended(&ata_dev->sdev->sdev_gendev)) - scsi_autopm_get_device(ata_dev->sdev); -} - -static void ata_acpi_add_pm_notifier(struct ata_device *dev) -{ - struct acpi_device *acpi_dev; - acpi_handle handle; - acpi_status status; - - handle = ata_dev_acpi_handle(dev); - if (!handle) - return; - - status = acpi_bus_get_device(handle, &acpi_dev); - if (ACPI_FAILURE(status)) - return; - - if (dev->sdev->can_power_off) { - acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, - ata_acpi_wake_dev, dev); - device_set_run_wake(&dev->sdev->sdev_gendev, true); - } -} - -static void ata_acpi_remove_pm_notifier(struct ata_device *dev) -{ - struct acpi_device *acpi_dev; - acpi_handle handle; - acpi_status status; - - handle = ata_dev_acpi_handle(dev); - if (!handle) - return; - - status = acpi_bus_get_device(handle, &acpi_dev); - if (ACPI_FAILURE(status)) - return; - - if (dev->sdev->can_power_off) { - device_set_run_wake(&dev->sdev->sdev_gendev, false); - acpi_remove_notify_handler(handle, ACPI_SYSTEM_NOTIFY, - ata_acpi_wake_dev); - } -} - static void ata_acpi_register_power_resource(struct ata_device *dev) { struct scsi_device *sdev = dev->sdev; @@ -1057,13 +1095,13 @@ void ata_acpi_bind(struct ata_device *dev) { - ata_acpi_add_pm_notifier(dev); ata_acpi_register_power_resource(dev); + if (zpodd_dev_enabled(dev)) + dev_pm_qos_expose_flags(&dev->sdev->sdev_gendev, 0); } void ata_acpi_unbind(struct ata_device *dev) { - ata_acpi_remove_pm_notifier(dev); ata_acpi_unregister_power_resource(dev); } @@ -1095,7 +1133,7 @@ if (!*handle) return -ENODEV; - if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0) + if (__ata_acpi_gtm(ap, *handle, &ap->__acpi_init_gtm) == 0) ap->pflags |= ATA_PFLAG_INIT_GTM_VALID; return 0; @@ -1105,9 +1143,6 @@ acpi_handle *handle) { struct ata_device *ata_dev; - acpi_status status; - struct acpi_device *acpi_dev; - struct acpi_device_power_state *states; if (ap->flags & ATA_FLAG_ACPI_SATA) { if (!sata_pmp_attached(ap)) @@ -1124,21 +1159,6 @@ if (!*handle) return -ENODEV; - status = acpi_bus_get_device(*handle, &acpi_dev); - if (ACPI_FAILURE(status)) - return 0; - - /* - * If firmware has _PS3 or _PR3 for this device, - * and this ata ODD device support device attention, - * it means this device can be powered off - */ - states = acpi_dev->power.states; - if ((states[ACPI_STATE_D3_HOT].flags.valid || - states[ACPI_STATE_D3_COLD].flags.explicit_set) && - ata_dev->flags & ATA_DFLAG_DA) - sdev->can_power_off = 1; - return 0; } --- linux-lts-raring-3.8.0.orig/drivers/ata/ahci.c +++ linux-lts-raring-3.8.0/drivers/ata/ahci.c @@ -265,6 +265,31 @@ { PCI_VDEVICE(INTEL, 0x9c07), board_ahci }, /* Lynx Point-LP RAID */ { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci }, /* Lynx Point-LP RAID */ { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci }, /* Lynx Point-LP RAID */ + { PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */ + { PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */ + { PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f25), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f26), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f27), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f2e), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f2f), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f32), board_ahci }, /* Avoton AHCI */ + { PCI_VDEVICE(INTEL, 0x1f33), board_ahci }, /* Avoton AHCI */ + { PCI_VDEVICE(INTEL, 0x1f34), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f35), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f36), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f37), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f3e), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x1f3f), board_ahci }, /* Avoton RAID */ + { PCI_VDEVICE(INTEL, 0x8d02), board_ahci }, /* Wellsburg AHCI */ + { PCI_VDEVICE(INTEL, 0x8d04), board_ahci }, /* Wellsburg RAID */ + { PCI_VDEVICE(INTEL, 0x8d06), board_ahci }, /* Wellsburg RAID */ + { PCI_VDEVICE(INTEL, 0x8d0e), board_ahci }, /* Wellsburg RAID */ + { PCI_VDEVICE(INTEL, 0x8d62), board_ahci }, /* Wellsburg AHCI */ + { PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */ + { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */ + { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */ + { PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */ /* JMicron 360/1/3/5/6, match class to avoid IDE function */ { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, @@ -284,6 +309,7 @@ /* AMD */ { PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */ + { PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */ /* AMD is using RAID class only for ahci controllers */ { PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci }, --- linux-lts-raring-3.8.0.orig/drivers/ata/Makefile +++ linux-lts-raring-3.8.0/drivers/ata/Makefile @@ -107,3 +107,4 @@ libata-$(CONFIG_ATA_SFF) += libata-sff.o libata-$(CONFIG_SATA_PMP) += libata-pmp.o libata-$(CONFIG_ATA_ACPI) += libata-acpi.o +libata-$(CONFIG_SATA_ZPODD) += libata-zpodd.o --- linux-lts-raring-3.8.0.orig/drivers/ata/libata-core.c +++ linux-lts-raring-3.8.0/drivers/ata/libata-core.c @@ -1602,6 +1602,12 @@ qc->tf = *tf; if (cdb) memcpy(qc->cdb, cdb, ATAPI_CDB_LEN); + + /* some SATA bridges need us to indicate data xfer direction */ + if (tf->protocol == ATAPI_PROT_DMA && (dev->flags & ATA_DFLAG_DMADIR) && + dma_dir == DMA_FROM_DEVICE) + qc->tf.feature |= ATAPI_DMADIR; + qc->flags |= ATA_QCFLAG_RESULT_TF; qc->dma_dir = dma_dir; if (dma_dir != DMA_NONE) { @@ -2329,7 +2335,7 @@ * from SATA Settings page of Identify Device Data Log. */ if (ata_id_has_devslp(dev->id)) { - u8 sata_setting[ATA_SECT_SIZE]; + u8 *sata_setting = ap->sector_buf; int i, j; dev->flags |= ATA_DFLAG_DEVSLP; @@ -2400,8 +2406,10 @@ dma_dir_string = ", DMADIR"; } - if (ata_id_has_da(dev->id)) + if (ata_id_has_da(dev->id)) { dev->flags |= ATA_DFLAG_DA; + zpodd_init(dev); + } /* print device info to dmesg */ if (ata_msg_drv(ap) && print_info) @@ -2437,6 +2445,9 @@ dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, dev->max_sectors); + if (dev->horkage & ATA_HORKAGE_MAX_SEC_LBA48) + dev->max_sectors = ATA_MAX_SECTORS_LBA48; + if (ap->ops->dev_config) ap->ops->dev_config(dev); @@ -4098,6 +4109,7 @@ /* Weird ATAPI devices */ { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, { "QUANTUM DAT DAT72-000", NULL, ATA_HORKAGE_ATAPI_MOD16_DMA }, + { "Slimtype DVD A DS8A8SH", NULL, ATA_HORKAGE_MAX_SEC_LBA48 }, /* Devices we expect to fail diagnostics */ @@ -5331,9 +5343,6 @@ static int __ata_port_suspend_common(struct ata_port *ap, pm_message_t mesg, int *async) { - unsigned int ehi_flags = ATA_EHI_QUIET; - int rc; - /* * On some hardware, device fails to respond after spun down * for suspend. As the device won't be used before being @@ -5342,11 +5351,9 @@ * * http://thread.gmane.org/gmane.linux.ide/46764 */ - if (mesg.event == PM_EVENT_SUSPEND) - ehi_flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_NO_RECOVERY; - - rc = ata_port_request_pm(ap, mesg, 0, ehi_flags, async); - return rc; + unsigned int ehi_flags = ATA_EHI_QUIET | ATA_EHI_NO_AUTOPSY | + ATA_EHI_NO_RECOVERY; + return ata_port_request_pm(ap, mesg, 0, ehi_flags, async); } static int ata_port_suspend_common(struct device *dev, pm_message_t mesg) @@ -5367,40 +5374,38 @@ static int ata_port_do_freeze(struct device *dev) { if (pm_runtime_suspended(dev)) - pm_runtime_resume(dev); + return 0; return ata_port_suspend_common(dev, PMSG_FREEZE); } static int ata_port_poweroff(struct device *dev) { - if (pm_runtime_suspended(dev)) - return 0; - return ata_port_suspend_common(dev, PMSG_HIBERNATE); } -static int __ata_port_resume_common(struct ata_port *ap, int *async) +static int __ata_port_resume_common(struct ata_port *ap, pm_message_t mesg, + int *async) { int rc; - rc = ata_port_request_pm(ap, PMSG_ON, ATA_EH_RESET, + rc = ata_port_request_pm(ap, mesg, ATA_EH_RESET, ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, async); return rc; } -static int ata_port_resume_common(struct device *dev) +static int ata_port_resume_common(struct device *dev, pm_message_t mesg) { struct ata_port *ap = to_ata_port(dev); - return __ata_port_resume_common(ap, NULL); + return __ata_port_resume_common(ap, mesg, NULL); } static int ata_port_resume(struct device *dev) { int rc; - rc = ata_port_resume_common(dev); + rc = ata_port_resume_common(dev, PMSG_RESUME); if (!rc) { pm_runtime_disable(dev); pm_runtime_set_active(dev); @@ -5410,11 +5415,40 @@ return rc; } +/* + * For ODDs, the upper layer will poll for media change every few seconds, + * which will make it enter and leave suspend state every few seconds. And + * as each suspend will cause a hard/soft reset, the gain of runtime suspend + * is very little and the ODD may malfunction after constantly being reset. + * So the idle callback here will not proceed to suspend if a non-ZPODD capable + * ODD is attached to the port. + */ static int ata_port_runtime_idle(struct device *dev) { + struct ata_port *ap = to_ata_port(dev); + struct ata_link *link; + struct ata_device *adev; + + ata_for_each_link(link, ap, HOST_FIRST) { + ata_for_each_dev(adev, link, ENABLED) + if (adev->class == ATA_DEV_ATAPI && + !zpodd_dev_enabled(adev)) + return -EBUSY; + } + return pm_runtime_suspend(dev); } +static int ata_port_runtime_suspend(struct device *dev) +{ + return ata_port_suspend_common(dev, PMSG_AUTO_SUSPEND); +} + +static int ata_port_runtime_resume(struct device *dev) +{ + return ata_port_resume_common(dev, PMSG_AUTO_RESUME); +} + static const struct dev_pm_ops ata_port_pm_ops = { .suspend = ata_port_suspend, .resume = ata_port_resume, @@ -5423,8 +5457,8 @@ .poweroff = ata_port_poweroff, .restore = ata_port_resume, - .runtime_suspend = ata_port_suspend, - .runtime_resume = ata_port_resume_common, + .runtime_suspend = ata_port_runtime_suspend, + .runtime_resume = ata_port_runtime_resume, .runtime_idle = ata_port_runtime_idle, }; @@ -5441,7 +5475,7 @@ int ata_sas_port_async_resume(struct ata_port *ap, int *async) { - return __ata_port_resume_common(ap, async); + return __ata_port_resume_common(ap, PMSG_RESUME, async); } EXPORT_SYMBOL_GPL(ata_sas_port_async_resume); @@ -6114,6 +6148,8 @@ if (rc) goto err_tadd; + ata_acpi_hotplug_init(host); + /* set cable, sata_spd_limit and report */ for (i = 0; i < host->n_ports; i++) { struct ata_port *ap = host->ports[i]; --- linux-lts-raring-3.8.0.orig/drivers/ata/sata_highbank.c +++ linux-lts-raring-3.8.0/drivers/ata/sata_highbank.c @@ -196,10 +196,26 @@ return 0; } +/* + * The Calxeda SATA phy intermittently fails to bring up a link with Gen3 + * Retrying the phy hard reset can work around the issue, but the drive + * may fail again. In less than 150 out of 15000 test runs, it took more + * than 10 tries for the link to be established (but never more than 35). + * Triple the maximum observed retry count to provide plenty of margin for + * rare events and to guarantee that the link is established. + * + * Also, the default 2 second time-out on a failed drive is too long in + * this situation. The uboot implementation of the same driver function + * uses a much shorter time-out period and never experiences a time out + * issue. Reducing the time-out to 500ms improves the responsiveness. + * The other timing constants were kept the same as the stock AHCI driver. + * This change was also tested 15000 times on 24 drives and none of them + * experienced a time out. + */ static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class, unsigned long deadline) { - const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context); + static const unsigned long timing[] = { 5, 100, 500}; struct ata_port *ap = link->ap; struct ahci_port_priv *pp = ap->private_data; u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG; @@ -207,7 +223,7 @@ bool online; u32 sstatus; int rc; - int retry = 10; + int retry = 100; ahci_stop_engine(ap); @@ -251,7 +267,7 @@ }; static struct scsi_host_template ahci_highbank_platform_sht = { - AHCI_SHT("highbank-ahci"), + AHCI_SHT("sata_highbank"), }; static const struct of_device_id ahci_of_match[] = { --- linux-lts-raring-3.8.0.orig/drivers/ata/libata-eh.c +++ linux-lts-raring-3.8.0/drivers/ata/libata-eh.c @@ -1591,7 +1591,7 @@ * RETURNS: * 0 on success, AC_ERR_* mask on failure. */ -static unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key) +unsigned int atapi_eh_tur(struct ata_device *dev, u8 *r_sense_key) { u8 cdb[ATAPI_CDB_LEN] = { TEST_UNIT_READY, 0, 0, 0, 0, 0 }; struct ata_taskfile tf; @@ -1624,7 +1624,7 @@ * RETURNS: * 0 on success, AC_ERR_* mask on failure */ -static unsigned int atapi_eh_request_sense(struct ata_device *dev, +unsigned int atapi_eh_request_sense(struct ata_device *dev, u8 *sense_buf, u8 dfl_sense_key) { u8 cdb[ATAPI_CDB_LEN] = @@ -3857,6 +3857,8 @@ rc = atapi_eh_clear_ua(dev); if (rc) goto rest_fail; + if (zpodd_dev_enabled(dev)) + zpodd_post_poweron(dev); } } @@ -4022,11 +4024,12 @@ { unsigned long flags; int rc = 0; + struct ata_device *dev; /* are we suspending? */ spin_lock_irqsave(ap->lock, flags); if (!(ap->pflags & ATA_PFLAG_PM_PENDING) || - ap->pm_mesg.event == PM_EVENT_ON) { + ap->pm_mesg.event & PM_EVENT_RESUME) { spin_unlock_irqrestore(ap->lock, flags); return; } @@ -4034,6 +4037,18 @@ WARN_ON(ap->pflags & ATA_PFLAG_SUSPENDED); + /* + * If we have a ZPODD attached, check its zero + * power ready status before the port is frozen. + * Only needed for runtime suspend. + */ + if (PMSG_IS_AUTO(ap->pm_mesg)) { + ata_for_each_dev(dev, &ap->link, ENABLED) { + if (zpodd_dev_enabled(dev)) + zpodd_on_suspend(dev); + } + } + /* tell ACPI we're suspending */ rc = ata_acpi_on_suspend(ap); if (rc) @@ -4045,7 +4060,7 @@ if (ap->ops->port_suspend) rc = ap->ops->port_suspend(ap, ap->pm_mesg); - ata_acpi_set_state(ap, PMSG_SUSPEND); + ata_acpi_set_state(ap, ap->pm_mesg); out: /* report result */ spin_lock_irqsave(ap->lock, flags); @@ -4085,7 +4100,7 @@ /* are we resuming? */ spin_lock_irqsave(ap->lock, flags); if (!(ap->pflags & ATA_PFLAG_PM_PENDING) || - ap->pm_mesg.event != PM_EVENT_ON) { + !(ap->pm_mesg.event & PM_EVENT_RESUME)) { spin_unlock_irqrestore(ap->lock, flags); return; } @@ -4104,7 +4119,7 @@ ata_for_each_dev(dev, link, ALL) ata_ering_clear(&dev->ering); - ata_acpi_set_state(ap, PMSG_ON); + ata_acpi_set_state(ap, ap->pm_mesg); if (ap->ops->port_resume) rc = ap->ops->port_resume(ap); --- linux-lts-raring-3.8.0.orig/drivers/ata/libata-zpodd.c +++ linux-lts-raring-3.8.0/drivers/ata/libata-zpodd.c @@ -0,0 +1,299 @@ +#include +#include +#include +#include +#include + +#include "libata.h" + +static int zpodd_poweroff_delay = 30; /* 30 seconds for power off delay */ +module_param(zpodd_poweroff_delay, int, 0644); +MODULE_PARM_DESC(zpodd_poweroff_delay, "Poweroff delay for ZPODD in seconds"); + +enum odd_mech_type { + ODD_MECH_TYPE_SLOT, + ODD_MECH_TYPE_DRAWER, + ODD_MECH_TYPE_UNSUPPORTED, +}; + +struct zpodd { + enum odd_mech_type mech_type; /* init during probe, RO afterwards */ + struct ata_device *dev; + + /* The following fields are synchronized by PM core. */ + bool from_notify; /* resumed as a result of + * acpi wake notification */ + bool zp_ready; /* ZP ready state */ + unsigned long last_ready; /* last ZP ready timestamp */ + bool zp_sampled; /* ZP ready state sampled */ + bool powered_off; /* ODD is powered off + * during suspend */ +}; + +static int eject_tray(struct ata_device *dev) +{ + struct ata_taskfile tf = {}; + const char cdb[] = { GPCMD_START_STOP_UNIT, + 0, 0, 0, + 0x02, /* LoEj */ + 0, 0, 0, 0, 0, 0, 0, + }; + + tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; + tf.command = ATA_CMD_PACKET; + tf.protocol = ATAPI_PROT_NODATA; + + return ata_exec_internal(dev, &tf, cdb, DMA_NONE, NULL, 0, 0); +} + +/* Per the spec, only slot type and drawer type ODD can be supported */ +static enum odd_mech_type zpodd_get_mech_type(struct ata_device *dev) +{ + char buf[16]; + unsigned int ret; + struct rm_feature_desc *desc = (void *)(buf + 8); + struct ata_taskfile tf = {}; + + char cdb[] = { GPCMD_GET_CONFIGURATION, + 2, /* only 1 feature descriptor requested */ + 0, 3, /* 3, removable medium feature */ + 0, 0, 0,/* reserved */ + 0, sizeof(buf), + 0, 0, 0, + }; + + tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; + tf.command = ATA_CMD_PACKET; + tf.protocol = ATAPI_PROT_PIO; + tf.lbam = sizeof(buf); + + ret = ata_exec_internal(dev, &tf, cdb, DMA_FROM_DEVICE, + buf, sizeof(buf), 0); + if (ret) + return ODD_MECH_TYPE_UNSUPPORTED; + + if (be16_to_cpu(desc->feature_code) != 3) + return ODD_MECH_TYPE_UNSUPPORTED; + + if (desc->mech_type == 0 && desc->load == 0 && desc->eject == 1) + return ODD_MECH_TYPE_SLOT; + else if (desc->mech_type == 1 && desc->load == 0 && desc->eject == 1) + return ODD_MECH_TYPE_DRAWER; + else + return ODD_MECH_TYPE_UNSUPPORTED; +} + +static bool odd_can_poweroff(struct ata_device *ata_dev) +{ + acpi_handle handle; + acpi_status status; + struct acpi_device *acpi_dev; + + handle = ata_dev_acpi_handle(ata_dev); + if (!handle) + return false; + + status = acpi_bus_get_device(handle, &acpi_dev); + if (ACPI_FAILURE(status)) + return false; + + return acpi_device_can_poweroff(acpi_dev); +} + +/* Test if ODD is zero power ready by sense code */ +static bool zpready(struct ata_device *dev) +{ + u8 sense_key, *sense_buf; + unsigned int ret, asc, ascq, add_len; + struct zpodd *zpodd = dev->zpodd; + + ret = atapi_eh_tur(dev, &sense_key); + + if (!ret || sense_key != NOT_READY) + return false; + + sense_buf = dev->link->ap->sector_buf; + ret = atapi_eh_request_sense(dev, sense_buf, sense_key); + if (ret) + return false; + + /* sense valid */ + if ((sense_buf[0] & 0x7f) != 0x70) + return false; + + add_len = sense_buf[7]; + /* has asc and ascq */ + if (add_len < 6) + return false; + + asc = sense_buf[12]; + ascq = sense_buf[13]; + + if (zpodd->mech_type == ODD_MECH_TYPE_SLOT) + /* no media inside */ + return asc == 0x3a; + else + /* no media inside and door closed */ + return asc == 0x3a && ascq == 0x01; +} + +/* + * Update the zpodd->zp_ready field. This field will only be set + * if the ODD has stayed in ZP ready state for zpodd_poweroff_delay + * time, and will be used to decide if power off is allowed. If it + * is set, it will be cleared during resume from powered off state. + */ +void zpodd_on_suspend(struct ata_device *dev) +{ + struct zpodd *zpodd = dev->zpodd; + unsigned long expires; + + if (!zpready(dev)) { + zpodd->zp_sampled = false; + zpodd->zp_ready = false; + return; + } + + if (!zpodd->zp_sampled) { + zpodd->zp_sampled = true; + zpodd->last_ready = jiffies; + return; + } + + expires = zpodd->last_ready + + msecs_to_jiffies(zpodd_poweroff_delay * 1000); + if (time_before(jiffies, expires)) + return; + + zpodd->zp_ready = true; +} + +bool zpodd_zpready(struct ata_device *dev) +{ + struct zpodd *zpodd = dev->zpodd; + return zpodd->zp_ready; +} + +/* + * Enable runtime wake capability through ACPI and set the powered_off flag, + * this flag will be used during resume to decide what operations are needed + * to take. + * + * Also, media poll needs to be silenced, so that it doesn't bring the ODD + * back to full power state every few seconds. + */ +void zpodd_enable_run_wake(struct ata_device *dev) +{ + struct zpodd *zpodd = dev->zpodd; + + sdev_disable_disk_events(dev->sdev); + + zpodd->powered_off = true; + device_set_run_wake(&dev->sdev->sdev_gendev, true); + acpi_pm_device_run_wake(&dev->sdev->sdev_gendev, true); +} + +/* Disable runtime wake capability if it is enabled */ +void zpodd_disable_run_wake(struct ata_device *dev) +{ + struct zpodd *zpodd = dev->zpodd; + + if (zpodd->powered_off) { + acpi_pm_device_run_wake(&dev->sdev->sdev_gendev, false); + device_set_run_wake(&dev->sdev->sdev_gendev, false); + } +} + +/* + * Post power on processing after the ODD has been recovered. If the + * ODD wasn't powered off during suspend, it doesn't do anything. + * + * For drawer type ODD, if it is powered on due to user pressed the + * eject button, the tray needs to be ejected. This can only be done + * after the ODD has been recovered, i.e. link is initialized and + * device is able to process NON_DATA PIO command, as eject needs to + * send command for the ODD to process. + * + * The from_notify flag set in wake notification handler function + * zpodd_wake_dev represents if power on is due to user's action. + * + * For both types of ODD, several fields need to be reset. + */ +void zpodd_post_poweron(struct ata_device *dev) +{ + struct zpodd *zpodd = dev->zpodd; + + if (!zpodd->powered_off) + return; + + zpodd->powered_off = false; + + if (zpodd->from_notify) { + zpodd->from_notify = false; + if (zpodd->mech_type == ODD_MECH_TYPE_DRAWER) + eject_tray(dev); + } + + zpodd->zp_sampled = false; + zpodd->zp_ready = false; + + sdev_enable_disk_events(dev->sdev); +} + +static void zpodd_wake_dev(acpi_handle handle, u32 event, void *context) +{ + struct ata_device *ata_dev = context; + struct zpodd *zpodd = ata_dev->zpodd; + struct device *dev = &ata_dev->sdev->sdev_gendev; + + if (event == ACPI_NOTIFY_DEVICE_WAKE && pm_runtime_suspended(dev)) { + zpodd->from_notify = true; + pm_runtime_resume(dev); + } +} + +static void ata_acpi_add_pm_notifier(struct ata_device *dev) +{ + acpi_handle handle = ata_dev_acpi_handle(dev); + acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY, + zpodd_wake_dev, dev); +} + +static void ata_acpi_remove_pm_notifier(struct ata_device *dev) +{ + acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->sdev->sdev_gendev); + acpi_remove_notify_handler(handle, ACPI_SYSTEM_NOTIFY, zpodd_wake_dev); +} + +void zpodd_init(struct ata_device *dev) +{ + enum odd_mech_type mech_type; + struct zpodd *zpodd; + + if (dev->zpodd) + return; + + if (!odd_can_poweroff(dev)) + return; + + mech_type = zpodd_get_mech_type(dev); + if (mech_type == ODD_MECH_TYPE_UNSUPPORTED) + return; + + zpodd = kzalloc(sizeof(struct zpodd), GFP_KERNEL); + if (!zpodd) + return; + + zpodd->mech_type = mech_type; + + ata_acpi_add_pm_notifier(dev); + zpodd->dev = dev; + dev->zpodd = zpodd; +} + +void zpodd_exit(struct ata_device *dev) +{ + ata_acpi_remove_pm_notifier(dev); + kfree(dev->zpodd); + dev->zpodd = NULL; +} --- linux-lts-raring-3.8.0.orig/drivers/ata/libata-pmp.c +++ linux-lts-raring-3.8.0/drivers/ata/libata-pmp.c @@ -289,24 +289,24 @@ /* Disable sending Early R_OK. * With "cached read" HDD testing and multiple ports busy on a SATA - * host controller, 3726 PMP will very rarely drop a deferred + * host controller, 3x26 PMP will very rarely drop a deferred * R_OK that was intended for the host. Symptom will be all * 5 drives under test will timeout, get reset, and recover. */ - if (vendor == 0x1095 && devid == 0x3726) { + if (vendor == 0x1095 && (devid == 0x3726 || devid == 0x3826)) { u32 reg; err_mask = sata_pmp_read(&ap->link, PMP_GSCR_SII_POL, ®); if (err_mask) { rc = -EIO; - reason = "failed to read Sil3726 Private Register"; + reason = "failed to read Sil3x26 Private Register"; goto fail; } reg &= ~0x1; err_mask = sata_pmp_write(&ap->link, PMP_GSCR_SII_POL, reg); if (err_mask) { rc = -EIO; - reason = "failed to write Sil3726 Private Register"; + reason = "failed to write Sil3x26 Private Register"; goto fail; } } @@ -383,15 +383,19 @@ u16 devid = sata_pmp_gscr_devid(gscr); struct ata_link *link; - if (vendor == 0x1095 && devid == 0x3726) { - /* sil3726 quirks */ + if (vendor == 0x1095 && (devid == 0x3726 || devid == 0x3826)) { + /* sil3x26 quirks */ ata_for_each_link(link, ap, EDGE) { /* link reports offline after LPM */ link->flags |= ATA_LFLAG_NO_LPM; - /* Class code report is unreliable. */ + /* + * Class code report is unreliable and SRST times + * out under certain configurations. + */ if (link->pmp < 5) - link->flags |= ATA_LFLAG_ASSUME_ATA; + link->flags |= ATA_LFLAG_NO_SRST | + ATA_LFLAG_ASSUME_ATA; /* port 5 is for SEMB device and it doesn't like SRST */ if (link->pmp == 5) @@ -399,20 +403,17 @@ ATA_LFLAG_ASSUME_SEMB; } } else if (vendor == 0x1095 && devid == 0x4723) { - /* sil4723 quirks */ - ata_for_each_link(link, ap, EDGE) { - /* link reports offline after LPM */ - link->flags |= ATA_LFLAG_NO_LPM; - - /* class code report is unreliable */ - if (link->pmp < 2) - link->flags |= ATA_LFLAG_ASSUME_ATA; - - /* the config device at port 2 locks up on SRST */ - if (link->pmp == 2) - link->flags |= ATA_LFLAG_NO_SRST | - ATA_LFLAG_ASSUME_ATA; - } + /* + * sil4723 quirks + * + * Link reports offline after LPM. Class code report is + * unreliable. SIMG PMPs never got SRST reliable and the + * config device at port 2 locks up on SRST. + */ + ata_for_each_link(link, ap, EDGE) + link->flags |= ATA_LFLAG_NO_LPM | + ATA_LFLAG_NO_SRST | + ATA_LFLAG_ASSUME_ATA; } else if (vendor == 0x1095 && devid == 0x4726) { /* sil4726 quirks */ ata_for_each_link(link, ap, EDGE) { --- linux-lts-raring-3.8.0.orig/drivers/bluetooth/ath3k.c +++ linux-lts-raring-3.8.0/drivers/bluetooth/ath3k.c @@ -73,19 +73,29 @@ { USB_DEVICE(0x03F0, 0x311D) }, /* Atheros AR3012 with sflash firmware*/ + { USB_DEVICE(0x0CF3, 0x0036) }, { USB_DEVICE(0x0CF3, 0x3004) }, + { USB_DEVICE(0x0CF3, 0x3008) }, { USB_DEVICE(0x0CF3, 0x311D) }, + { USB_DEVICE(0x0CF3, 0x817a) }, { USB_DEVICE(0x13d3, 0x3375) }, + { USB_DEVICE(0x04CA, 0x3004) }, { USB_DEVICE(0x04CA, 0x3005) }, { USB_DEVICE(0x04CA, 0x3006) }, { USB_DEVICE(0x04CA, 0x3008) }, { USB_DEVICE(0x13d3, 0x3362) }, { USB_DEVICE(0x0CF3, 0xE004) }, + { USB_DEVICE(0x0CF3, 0xE005) }, { USB_DEVICE(0x0930, 0x0219) }, { USB_DEVICE(0x0489, 0xe057) }, { USB_DEVICE(0x13d3, 0x3393) }, { USB_DEVICE(0x0489, 0xe04e) }, { USB_DEVICE(0x0489, 0xe056) }, + { USB_DEVICE(0x0489, 0xe04d) }, + { USB_DEVICE(0x04c5, 0x1330) }, + { USB_DEVICE(0x13d3, 0x3402) }, + { USB_DEVICE(0x0cf3, 0x3121) }, + { USB_DEVICE(0x0cf3, 0xe003) }, /* Atheros AR5BBU12 with sflash firmware */ { USB_DEVICE(0x0489, 0xE02C) }, @@ -105,19 +115,29 @@ static struct usb_device_id ath3k_blist_tbl[] = { /* Atheros AR3012 with sflash firmware*/ + { USB_DEVICE(0x0CF3, 0x0036), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0CF3, 0x817a), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 }, /* Atheros AR5BBU22 with sflash firmware */ { USB_DEVICE(0x0489, 0xE03C), .driver_info = BTUSB_ATH3012 }, --- linux-lts-raring-3.8.0.orig/drivers/bluetooth/btusb.c +++ linux-lts-raring-3.8.0/drivers/bluetooth/btusb.c @@ -23,6 +23,8 @@ #include #include +#include +#include #include #include @@ -47,6 +49,7 @@ #define BTUSB_BROKEN_ISOC 0x20 #define BTUSB_WRONG_SCO_MTU 0x40 #define BTUSB_ATH3012 0x80 +#define BTUSB_BCM_PATCHRAM 0x800 static struct usb_device_id btusb_table[] = { /* Generic Bluetooth USB device */ @@ -97,15 +100,23 @@ /* Broadcom BCM20702A0 */ { USB_DEVICE(0x0b05, 0x17b5) }, + { USB_DEVICE(0x0b05, 0x17cb) }, { USB_DEVICE(0x04ca, 0x2003) }, { USB_DEVICE(0x0489, 0xe042) }, - { USB_DEVICE(0x413c, 0x8197) }, + { USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM }, + { USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM }, + { USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM }, + { USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM }, + + /* Broadcom BCM43142A0 */ + { USB_DEVICE(0x04ca, 0x2007), .driver_info = BTUSB_BCM_PATCHRAM }, + { USB_DEVICE(0x105b, 0xe065), .driver_info = BTUSB_BCM_PATCHRAM }, /* Foxconn - Hon Hai */ - { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01) }, + { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01), .driver_info = BTUSB_BCM_PATCHRAM }, /*Broadcom devices with vendor specific id */ - { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) }, + { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01), .driver_info = BTUSB_BCM_PATCHRAM }, { } /* Terminating entry */ }; @@ -131,19 +142,29 @@ { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE }, /* Atheros 3012 with sflash firmware */ + { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 }, /* Atheros AR5BBU12 with sflash firmware */ { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, @@ -212,6 +233,7 @@ #define BTUSB_ISOC_RUNNING 2 #define BTUSB_SUSPENDING 3 #define BTUSB_DID_ISO_RESUME 4 +#define BTUSB_FIRMWARE_DONE 7 struct btusb_data { struct hci_dev *hdev; @@ -922,6 +944,71 @@ usb_autopm_put_interface(data->intf); } +#define PATCHRAM_NAME_LEN 20 +#define PATCHRAM_BUF_SIZE (256 + 4) + +static void btusb_load_firmware(struct hci_dev *hdev) +{ + struct btusb_data *data = hci_get_drvdata(hdev); + struct usb_device *udev = data->udev; + size_t pos = 0; + int err = 0; + char filename[PATCHRAM_NAME_LEN]; + const struct firmware *fw; + u8 *buf = NULL; + u8 val = 0; + + if (test_and_set_bit(BTUSB_FIRMWARE_DONE, &data->flags)) + return; + + snprintf(filename, PATCHRAM_NAME_LEN, "fw-%04x_%04x.hcd", + le16_to_cpu(udev->descriptor.idVendor), + le16_to_cpu(udev->descriptor.idProduct)); + if (request_firmware(&fw, (const char *) filename, &udev->dev) < 0) { + BT_INFO("can't load firmware, may not work correctly"); + return; + } + + buf = kmalloc(PATCHRAM_BUF_SIZE, GFP_KERNEL); + if (!buf) + goto out; + + err= hci_send_cmd(hdev, 0x0c03, 1, &val); + if (err) + goto out; + msleep(300); + + err = hci_send_cmd(hdev, 0xfc2e, 1, &val); + if (err) + goto out; + msleep(1000); + + while (pos < fw->size) { + size_t len; + len = fw->data[pos + 2] + 3; + if (pos + len > fw->size) { + err = -EINVAL; + goto out; + } + memcpy(buf, fw->data + pos, len); + err = hci_send_cmd(hdev, le16_to_cpu(*(u16*)buf), + *(buf + sizeof(u16)), buf + sizeof(u16) + 1); + if (err) + goto out; + pos += len; + } + + err = hci_send_cmd(hdev, 0x0c03, 1, &val); +out: + if (err) + BT_INFO("fail to load firmware"); + else + BT_INFO("firmware loaded"); + if (buf) + kfree(buf); + release_firmware(fw); +} + static int btusb_probe(struct usb_interface *intf, const struct usb_device_id *id) { @@ -1024,6 +1111,9 @@ hdev->send = btusb_send_frame; hdev->notify = btusb_notify; + if (id->driver_info & BTUSB_BCM_PATCHRAM) + hdev->load_firmware = btusb_load_firmware; + /* Interface numbers are hardcoded in the specification */ data->isoc = usb_ifnum_to_if(data->udev, 1); --- linux-lts-raring-3.8.0.orig/drivers/power/charger-manager.c +++ linux-lts-raring-3.8.0/drivers/power/charger-manager.c @@ -450,7 +450,7 @@ strncpy(env_str, event, UEVENT_BUF_SIZE); kobject_uevent(&cm->dev->kobj, KOBJ_CHANGE); - dev_info(cm->dev, event); + dev_info(cm->dev, "%s", event); } /** --- linux-lts-raring-3.8.0.orig/drivers/power/ab8500_btemp.c +++ linux-lts-raring-3.8.0/drivers/power/ab8500_btemp.c @@ -1123,7 +1123,7 @@ platform_driver_unregister(&ab8500_btemp_driver); } -subsys_initcall_sync(ab8500_btemp_init); +device_initcall(ab8500_btemp_init); module_exit(ab8500_btemp_exit); MODULE_LICENSE("GPL v2"); --- linux-lts-raring-3.8.0.orig/drivers/power/abx500_chargalg.c +++ linux-lts-raring-3.8.0/drivers/power/abx500_chargalg.c @@ -1698,7 +1698,7 @@ static struct attribute abx500_chargalg_en_charger = \ { .name = "chargalg", - .mode = S_IWUGO, + .mode = S_IWUSR, }; static struct attribute *abx500_chargalg_chg[] = { --- linux-lts-raring-3.8.0.orig/drivers/power/bq27x00_battery.c +++ linux-lts-raring-3.8.0/drivers/power/bq27x00_battery.c @@ -448,7 +448,6 @@ cache.temperature = bq27x00_battery_read_temperature(di); if (!is_bq27425) cache.cycle_count = bq27x00_battery_read_cyct(di); - cache.cycle_count = bq27x00_battery_read_cyct(di); cache.power_avg = bq27x00_battery_read_pwr_avg(di, BQ27x00_POWER_AVG); @@ -696,7 +695,6 @@ int ret; di->bat.type = POWER_SUPPLY_TYPE_BATTERY; - di->chip = BQ27425; if (di->chip == BQ27425) { di->bat.properties = bq27425_battery_props; di->bat.num_properties = ARRAY_SIZE(bq27425_battery_props); --- linux-lts-raring-3.8.0.orig/drivers/pps/pps.c +++ linux-lts-raring-3.8.0/drivers/pps/pps.c @@ -247,12 +247,15 @@ struct pps_device *pps = container_of(inode->i_cdev, struct pps_device, cdev); file->private_data = pps; - + kobject_get(&pps->dev->kobj); return 0; } static int pps_cdev_release(struct inode *inode, struct file *file) { + struct pps_device *pps = container_of(inode->i_cdev, + struct pps_device, cdev); + kobject_put(&pps->dev->kobj); return 0; } @@ -274,8 +277,10 @@ { struct pps_device *pps = dev_get_drvdata(dev); - /* release id here to protect others from using it while it's - * still in use */ + cdev_del(&pps->cdev); + + /* Now we can release the ID for re-use */ + pr_debug("deallocating pps%d\n", pps->id); mutex_lock(&pps_idr_lock); idr_remove(&pps_idr, pps->id); mutex_unlock(&pps_idr_lock); @@ -332,6 +337,7 @@ goto del_cdev; } + /* Override the release function with our own */ pps->dev->release = pps_device_destruct; pr_debug("source %s got cdev (%d:%d)\n", pps->info.name, @@ -352,11 +358,44 @@ void pps_unregister_cdev(struct pps_device *pps) { + pr_debug("unregistering pps%d\n", pps->id); + pps->lookup_cookie = NULL; device_destroy(pps_class, pps->dev->devt); - cdev_del(&pps->cdev); } /* + * Look up a pps device by magic cookie. + * The cookie is usually a pointer to some enclosing device, but this + * code doesn't care; you should never be dereferencing it. + * + * This is a bit of a kludge that is currently used only by the PPS + * serial line discipline. It may need to be tweaked when a second user + * is found. + * + * There is no function interface for setting the lookup_cookie field. + * It's initialized to NULL when the pps device is created, and if a + * client wants to use it, just fill it in afterward. + * + * The cookie is automatically set to NULL in pps_unregister_source() + * so that it will not be used again, even if the pps device cannot + * be removed from the idr due to pending references holding the minor + * number in use. + */ +struct pps_device *pps_lookup_dev(void const *cookie) +{ + struct pps_device *pps; + unsigned id; + + rcu_read_lock(); + idr_for_each_entry(&pps_idr, pps, id) + if (cookie == pps->lookup_cookie) + break; + rcu_read_unlock(); + return pps; +} +EXPORT_SYMBOL(pps_lookup_dev); + +/* * Module stuff */ --- linux-lts-raring-3.8.0.orig/drivers/pps/clients/pps-ldisc.c +++ linux-lts-raring-3.8.0/drivers/pps/clients/pps-ldisc.c @@ -31,7 +31,7 @@ static void pps_tty_dcd_change(struct tty_struct *tty, unsigned int status, struct pps_event_time *ts) { - struct pps_device *pps = (struct pps_device *)tty->disc_data; + struct pps_device *pps = pps_lookup_dev(tty); BUG_ON(pps == NULL); @@ -67,9 +67,9 @@ pr_err("cannot register PPS source \"%s\"\n", info.path); return -ENOMEM; } - tty->disc_data = pps; + pps->lookup_cookie = tty; - /* Should open N_TTY ldisc too */ + /* Now open the base class N_TTY ldisc */ ret = alias_n_tty_open(tty); if (ret < 0) { pr_err("cannot open tty ldisc \"%s\"\n", info.path); @@ -81,7 +81,6 @@ return 0; err_unregister: - tty->disc_data = NULL; pps_unregister_source(pps); return ret; } @@ -90,11 +89,10 @@ static void pps_tty_close(struct tty_struct *tty) { - struct pps_device *pps = (struct pps_device *)tty->disc_data; + struct pps_device *pps = pps_lookup_dev(tty); alias_n_tty_close(tty); - tty->disc_data = NULL; dev_info(pps->dev, "removed\n"); pps_unregister_source(pps); } --- linux-lts-raring-3.8.0.orig/drivers/clk/clk-wm831x.c +++ linux-lts-raring-3.8.0/drivers/clk/clk-wm831x.c @@ -360,6 +360,8 @@ if (!clkdata) return -ENOMEM; + clkdata->wm831x = wm831x; + /* XTAL_ENA can only be set via OTP/InstantConfig so just read once */ ret = wm831x_reg_read(wm831x, WM831X_CLOCK_CONTROL_2); if (ret < 0) { --- linux-lts-raring-3.8.0.orig/drivers/clk/clk.c +++ linux-lts-raring-3.8.0/drivers/clk/clk.c @@ -263,6 +263,7 @@ { return !clk ? NULL : clk->name; } +EXPORT_SYMBOL_GPL(__clk_get_name); inline struct clk_hw *__clk_get_hw(struct clk *clk) { @@ -1633,6 +1634,7 @@ /* XXX the notifier code should handle this better */ if (!cn->notifier_head.head) { srcu_cleanup_notifier_head(&cn->notifier_head); + list_del(&cn->node); kfree(cn); } --- linux-lts-raring-3.8.0.orig/drivers/clk/clk-highbank.c +++ linux-lts-raring-3.8.0/drivers/clk/clk-highbank.c @@ -182,8 +182,10 @@ reg |= HB_PLL_EXT_ENA; reg &= ~HB_PLL_EXT_BYPASS; } else { + writel(reg | HB_PLL_EXT_BYPASS, hbclk->reg); reg &= ~HB_PLL_DIVQ_MASK; reg |= divq << HB_PLL_DIVQ_SHIFT; + writel(reg | HB_PLL_EXT_BYPASS, hbclk->reg); } writel(reg, hbclk->reg); --- linux-lts-raring-3.8.0.orig/drivers/hwspinlock/hwspinlock_core.c +++ linux-lts-raring-3.8.0/drivers/hwspinlock/hwspinlock_core.c @@ -416,6 +416,8 @@ ret = pm_runtime_get_sync(dev); if (ret < 0) { dev_err(dev, "%s: can't power on device\n", __func__); + pm_runtime_put_noidle(dev); + module_put(dev->driver->owner); return ret; } --- linux-lts-raring-3.8.0.orig/drivers/char/random.c +++ linux-lts-raring-3.8.0/drivers/char/random.c @@ -852,6 +852,7 @@ int reserved) { unsigned long flags; + int wakeup_write = 0; /* Hold lock while accounting */ spin_lock_irqsave(&r->lock, flags); @@ -864,19 +865,25 @@ if (r->entropy_count / 8 < min + reserved) { nbytes = 0; } else { + int entropy_count, orig; +retry: + entropy_count = orig = ACCESS_ONCE(r->entropy_count); /* If limited, never pull more than available */ - if (r->limit && nbytes + reserved >= r->entropy_count / 8) - nbytes = r->entropy_count/8 - reserved; + if (r->limit && nbytes + reserved >= entropy_count / 8) + nbytes = entropy_count/8 - reserved; - if (r->entropy_count / 8 >= nbytes + reserved) - r->entropy_count -= nbytes*8; - else - r->entropy_count = reserved; - - if (r->entropy_count < random_write_wakeup_thresh) { - wake_up_interruptible(&random_write_wait); - kill_fasync(&fasync, SIGIO, POLL_OUT); + if (entropy_count / 8 >= nbytes + reserved) { + entropy_count -= nbytes*8; + if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig) + goto retry; + } else { + entropy_count = reserved; + if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig) + goto retry; } + + if (entropy_count < random_write_wakeup_thresh) + wakeup_write = 1; } DEBUG_ENT("debiting %zu entropy credits from %s%s\n", @@ -884,6 +891,11 @@ spin_unlock_irqrestore(&r->lock, flags); + if (wakeup_write) { + wake_up_interruptible(&random_write_wait); + kill_fasync(&fasync, SIGIO, POLL_OUT); + } + return nbytes; } @@ -953,10 +965,23 @@ { ssize_t ret = 0, i; __u8 tmp[EXTRACT_SIZE]; + unsigned long flags; /* if last_data isn't primed, we need EXTRACT_SIZE extra bytes */ - if (fips_enabled && !r->last_data_init) - nbytes += EXTRACT_SIZE; + if (fips_enabled) { + spin_lock_irqsave(&r->lock, flags); + if (!r->last_data_init) { + r->last_data_init = true; + spin_unlock_irqrestore(&r->lock, flags); + trace_extract_entropy(r->name, EXTRACT_SIZE, + r->entropy_count, _RET_IP_); + xfer_secondary_pool(r, EXTRACT_SIZE); + extract_buf(r, tmp); + spin_lock_irqsave(&r->lock, flags); + memcpy(r->last_data, tmp, EXTRACT_SIZE); + } + spin_unlock_irqrestore(&r->lock, flags); + } trace_extract_entropy(r->name, nbytes, r->entropy_count, _RET_IP_); xfer_secondary_pool(r, nbytes); @@ -966,19 +991,6 @@ extract_buf(r, tmp); if (fips_enabled) { - unsigned long flags; - - - /* prime last_data value if need be, per fips 140-2 */ - if (!r->last_data_init) { - spin_lock_irqsave(&r->lock, flags); - memcpy(r->last_data, tmp, EXTRACT_SIZE); - r->last_data_init = true; - nbytes -= EXTRACT_SIZE; - spin_unlock_irqrestore(&r->lock, flags); - extract_buf(r, tmp); - } - spin_lock_irqsave(&r->lock, flags); if (!memcmp(tmp, r->last_data, EXTRACT_SIZE)) panic("Hardware RNG duplicated output!\n"); --- linux-lts-raring-3.8.0.orig/drivers/char/hpet.c +++ linux-lts-raring-3.8.0/drivers/char/hpet.c @@ -373,26 +373,14 @@ struct hpet_dev *devp; unsigned long addr; - if (((vma->vm_end - vma->vm_start) != PAGE_SIZE) || vma->vm_pgoff) - return -EINVAL; - devp = file->private_data; addr = devp->hd_hpets->hp_hpet_phys; if (addr & (PAGE_SIZE - 1)) return -ENOSYS; - vma->vm_flags |= VM_IO; vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - - if (io_remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT, - PAGE_SIZE, vma->vm_page_prot)) { - printk(KERN_ERR "%s: io_remap_pfn_range failed\n", - __func__); - return -EAGAIN; - } - - return 0; + return vm_iomap_memory(vma, addr, PAGE_SIZE); #else return -ENOSYS; #endif --- linux-lts-raring-3.8.0.orig/drivers/char/virtio_console.c +++ linux-lts-raring-3.8.0/drivers/char/virtio_console.c @@ -152,7 +152,8 @@ spinlock_t ports_lock; /* To protect the vq operations for the control channel */ - spinlock_t cvq_lock; + spinlock_t c_ivq_lock; + spinlock_t c_ovq_lock; /* The current config space is stored here */ struct virtio_console_config config; @@ -277,9 +278,12 @@ unsigned long flags; spin_lock_irqsave(&portdev->ports_lock, flags); - list_for_each_entry(port, &portdev->ports, list) - if (port->cdev->dev == dev) + list_for_each_entry(port, &portdev->ports, list) { + if (port->cdev->dev == dev) { + kref_get(&port->kref); goto out; + } + } port = NULL; out: spin_unlock_irqrestore(&portdev->ports_lock, flags); @@ -575,11 +579,14 @@ vq = portdev->c_ovq; sg_init_one(sg, &cpkt, sizeof(cpkt)); + + spin_lock(&portdev->c_ovq_lock); if (virtqueue_add_buf(vq, sg, 1, 0, &cpkt, GFP_ATOMIC) == 0) { virtqueue_kick(vq); while (!virtqueue_get_buf(vq, &len)) cpu_relax(); } + spin_unlock(&portdev->c_ovq_lock); return 0; } @@ -748,6 +755,10 @@ port = filp->private_data; + /* Port is hot-unplugged. */ + if (!port->guest_connected) + return -ENODEV; + if (!port_has_data(port)) { /* * If nothing's connected on the host just return 0 in @@ -764,7 +775,7 @@ if (ret < 0) return ret; } - /* Port got hot-unplugged. */ + /* Port got hot-unplugged while we were waiting above. */ if (!port->guest_connected) return -ENODEV; /* @@ -934,13 +945,25 @@ if (is_rproc_serial(port->out_vq->vdev)) return -EINVAL; + /* + * pipe->nrbufs == 0 means there are no data to transfer, + * so this returns just 0 for no data. + */ + pipe_lock(pipe); + if (!pipe->nrbufs) { + ret = 0; + goto error_out; + } + ret = wait_port_writable(port, filp->f_flags & O_NONBLOCK); if (ret < 0) - return ret; + goto error_out; buf = alloc_buf(port->out_vq, 0, pipe->nrbufs); - if (!buf) - return -ENOMEM; + if (!buf) { + ret = -ENOMEM; + goto error_out; + } sgl.n = 0; sgl.len = 0; @@ -948,12 +971,17 @@ sgl.sg = buf->sg; sg_init_table(sgl.sg, sgl.size); ret = __splice_from_pipe(pipe, &sd, pipe_to_sg); + pipe_unlock(pipe); if (likely(ret > 0)) ret = __send_to_port(port, buf->sg, sgl.n, sgl.len, buf, true); if (unlikely(ret <= 0)) free_buf(buf, true); return ret; + +error_out: + pipe_unlock(pipe); + return ret; } static unsigned int port_fops_poll(struct file *filp, poll_table *wait) @@ -1021,14 +1049,14 @@ struct port *port; int ret; + /* We get the port with a kref here */ port = find_port_by_devt(cdev->dev); + if (!port) { + /* Port was unplugged before we could proceed */ + return -ENXIO; + } filp->private_data = port; - /* Prevent against a port getting hot-unplugged at the same time */ - spin_lock_irq(&port->portdev->ports_lock); - kref_get(&port->kref); - spin_unlock_irq(&port->portdev->ports_lock); - /* * Don't allow opening of console port devices -- that's done * via /dev/hvc @@ -1500,14 +1528,6 @@ port = container_of(kref, struct port, kref); - sysfs_remove_group(&port->dev->kobj, &port_attribute_group); - device_destroy(pdrvdata.class, port->dev->devt); - cdev_del(port->cdev); - - kfree(port->name); - - debugfs_remove(port->debugfs_file); - kfree(port); } @@ -1541,12 +1561,14 @@ spin_unlock_irq(&port->portdev->ports_lock); if (port->guest_connected) { + /* Let the app know the port is going down. */ + send_sigio_to_port(port); + + /* Do this after sigio is actually sent */ port->guest_connected = false; port->host_connected = false; - wake_up_interruptible(&port->waitqueue); - /* Let the app know the port is going down. */ - send_sigio_to_port(port); + wake_up_interruptible(&port->waitqueue); } if (is_console_port(port)) { @@ -1565,6 +1587,14 @@ */ port->portdev = NULL; + sysfs_remove_group(&port->dev->kobj, &port_attribute_group); + device_destroy(pdrvdata.class, port->dev->devt); + cdev_del(port->cdev); + + kfree(port->name); + + debugfs_remove(port->debugfs_file); + /* * Locks around here are not necessary - a port can't be * opened after we removed the port struct from ports_list @@ -1715,23 +1745,23 @@ portdev = container_of(work, struct ports_device, control_work); vq = portdev->c_ivq; - spin_lock(&portdev->cvq_lock); + spin_lock(&portdev->c_ivq_lock); while ((buf = virtqueue_get_buf(vq, &len))) { - spin_unlock(&portdev->cvq_lock); + spin_unlock(&portdev->c_ivq_lock); buf->len = len; buf->offset = 0; handle_control_message(portdev, buf); - spin_lock(&portdev->cvq_lock); + spin_lock(&portdev->c_ivq_lock); if (add_inbuf(portdev->c_ivq, buf) < 0) { dev_warn(&portdev->vdev->dev, "Error adding buffer to queue\n"); free_buf(buf, false); } } - spin_unlock(&portdev->cvq_lock); + spin_unlock(&portdev->c_ivq_lock); } static void out_intr(struct virtqueue *vq) @@ -1996,10 +2026,12 @@ if (multiport) { unsigned int nr_added_bufs; - spin_lock_init(&portdev->cvq_lock); + spin_lock_init(&portdev->c_ivq_lock); + spin_lock_init(&portdev->c_ovq_lock); INIT_WORK(&portdev->control_work, &control_work_handler); - nr_added_bufs = fill_queue(portdev->c_ivq, &portdev->cvq_lock); + nr_added_bufs = fill_queue(portdev->c_ivq, + &portdev->c_ivq_lock); if (!nr_added_bufs) { dev_err(&vdev->dev, "Error allocating buffers for control queue\n"); @@ -2150,7 +2182,7 @@ return ret; if (use_multiport(portdev)) - fill_queue(portdev->c_ivq, &portdev->cvq_lock); + fill_queue(portdev->c_ivq, &portdev->c_ivq_lock); list_for_each_entry(port, &portdev->ports, list) { port->in_vq = portdev->in_vqs[port->id]; --- linux-lts-raring-3.8.0.orig/drivers/char/hw_random/core.c +++ linux-lts-raring-3.8.0/drivers/char/hw_random/core.c @@ -40,6 +40,7 @@ #include #include #include +#include #include @@ -52,8 +53,12 @@ static LIST_HEAD(rng_list); static DEFINE_MUTEX(rng_mutex); static int data_avail; -static u8 rng_buffer[SMP_CACHE_BYTES < 32 ? 32 : SMP_CACHE_BYTES] - __cacheline_aligned; +static u8 *rng_buffer; + +static size_t rng_buffer_size(void) +{ + return SMP_CACHE_BYTES < 32 ? 32 : SMP_CACHE_BYTES; +} static inline int hwrng_init(struct hwrng *rng) { @@ -116,7 +121,7 @@ if (!data_avail) { bytes_read = rng_get_data(current_rng, rng_buffer, - sizeof(rng_buffer), + rng_buffer_size(), !(filp->f_flags & O_NONBLOCK)); if (bytes_read < 0) { err = bytes_read; @@ -307,6 +312,14 @@ mutex_lock(&rng_mutex); + /* kmalloc makes this safe for virt_to_page() in virtio_rng.c */ + err = -ENOMEM; + if (!rng_buffer) { + rng_buffer = kmalloc(rng_buffer_size(), GFP_KERNEL); + if (!rng_buffer) + goto out_unlock; + } + /* Must not register two RNGs with the same name. */ err = -EEXIST; list_for_each_entry(tmp, &rng_list, list) { --- linux-lts-raring-3.8.0.orig/drivers/char/hw_random/virtio-rng.c +++ linux-lts-raring-3.8.0/drivers/char/hw_random/virtio-rng.c @@ -92,14 +92,22 @@ { int err; + if (vq) { + /* We only support one device for now */ + return -EBUSY; + } /* We expect a single virtqueue. */ vq = virtio_find_single_vq(vdev, random_recv_done, "input"); - if (IS_ERR(vq)) - return PTR_ERR(vq); + if (IS_ERR(vq)) { + err = PTR_ERR(vq); + vq = NULL; + return err; + } err = hwrng_register(&virtio_hwrng); if (err) { vdev->config->del_vqs(vdev); + vq = NULL; return err; } @@ -112,6 +120,7 @@ busy = false; hwrng_unregister(&virtio_hwrng); vdev->config->del_vqs(vdev); + vq = NULL; } static int virtrng_probe(struct virtio_device *vdev) --- linux-lts-raring-3.8.0.orig/drivers/char/ipmi/ipmi_devintf.c +++ linux-lts-raring-3.8.0/drivers/char/ipmi/ipmi_devintf.c @@ -837,13 +837,25 @@ return ipmi_ioctl(filep, cmd, arg); } } + +static long unlocked_compat_ipmi_ioctl(struct file *filep, unsigned int cmd, + unsigned long arg) +{ + int ret; + + mutex_lock(&ipmi_mutex); + ret = compat_ipmi_ioctl(filep, cmd, arg); + mutex_unlock(&ipmi_mutex); + + return ret; +} #endif static const struct file_operations ipmi_fops = { .owner = THIS_MODULE, .unlocked_ioctl = ipmi_unlocked_ioctl, #ifdef CONFIG_COMPAT - .compat_ioctl = compat_ipmi_ioctl, + .compat_ioctl = unlocked_compat_ipmi_ioctl, #endif .open = ipmi_open, .release = ipmi_release, --- linux-lts-raring-3.8.0.orig/drivers/char/ipmi/ipmi_bt_sm.c +++ linux-lts-raring-3.8.0/drivers/char/ipmi/ipmi_bt_sm.c @@ -95,9 +95,9 @@ enum bt_states state; unsigned char seq; /* BT sequence number */ struct si_sm_io *io; - unsigned char write_data[IPMI_MAX_MSG_LENGTH]; + unsigned char write_data[IPMI_MAX_MSG_LENGTH + 2]; /* +2 for memcpy */ int write_count; - unsigned char read_data[IPMI_MAX_MSG_LENGTH]; + unsigned char read_data[IPMI_MAX_MSG_LENGTH + 2]; /* +2 for memcpy */ int read_count; int truncated; long timeout; /* microseconds countdown */ --- linux-lts-raring-3.8.0.orig/drivers/char/tpm/tpm.h +++ linux-lts-raring-3.8.0/drivers/char/tpm/tpm.h @@ -32,10 +32,12 @@ TPM_MINOR = 224, /* officially assigned */ TPM_BUFSIZE = 4096, TPM_NUM_DEVICES = 256, + TPM_RETRY = 50, /* 5 seconds */ }; enum tpm_timeout { TPM_TIMEOUT = 5, /* msecs */ + TPM_TIMEOUT_RETRY = 100 /* msecs */ }; /* TPM addresses */ @@ -44,6 +46,7 @@ TPM_ADDR = 0x4E, }; +#define TPM_WARN_RETRY 0x800 #define TPM_WARN_DOING_SELFTEST 0x802 #define TPM_ERR_DEACTIVATED 0x6 #define TPM_ERR_DISABLED 0x7 --- linux-lts-raring-3.8.0.orig/drivers/char/tpm/tpm.c +++ linux-lts-raring-3.8.0/drivers/char/tpm/tpm.c @@ -1291,7 +1291,7 @@ { struct tpm_chip *chip = dev_get_drvdata(dev); struct tpm_cmd_t cmd; - int rc; + int rc, try; u8 dummy_hash[TPM_DIGEST_SIZE] = { 0 }; @@ -1309,9 +1309,32 @@ } /* now do the actual savestate */ - cmd.header.in = savestate_header; - rc = transmit_cmd(chip, &cmd, SAVESTATE_RESULT_SIZE, - "sending savestate before suspend"); + for (try = 0; try < TPM_RETRY; try++) { + cmd.header.in = savestate_header; + rc = transmit_cmd(chip, &cmd, SAVESTATE_RESULT_SIZE, NULL); + + /* + * If the TPM indicates that it is too busy to respond to + * this command then retry before giving up. It can take + * several seconds for this TPM to be ready. + * + * This can happen if the TPM has already been sent the + * SaveState command before the driver has loaded. TCG 1.2 + * specification states that any communication after SaveState + * may cause the TPM to invalidate previously saved state. + */ + if (rc != TPM_WARN_RETRY) + break; + msleep(TPM_TIMEOUT_RETRY); + } + + if (rc) + dev_err(chip->dev, + "Error (%d) sending savestate before suspend\n", rc); + else if (try > 0) + dev_warn(chip->dev, "TPM savestate took %dms\n", + try * TPM_TIMEOUT_RETRY); + return rc; } EXPORT_SYMBOL_GPL(tpm_pm_suspend); --- linux-lts-raring-3.8.0.orig/drivers/mfd/rtsx_pcr.h +++ linux-lts-raring-3.8.0/drivers/mfd/rtsx_pcr.h @@ -28,5 +28,36 @@ void rts5209_init_params(struct rtsx_pcr *pcr); void rts5229_init_params(struct rtsx_pcr *pcr); void rtl8411_init_params(struct rtsx_pcr *pcr); +void rts5227_init_params(struct rtsx_pcr *pcr); +void rtl8411b_init_params(struct rtsx_pcr *pcr); + +static inline u8 map_sd_drive(int idx) +{ + u8 sd_drive[4] = { + 0x01, /* Type D */ + 0x02, /* Type C */ + 0x05, /* Type A */ + 0x03 /* Type B */ + }; + + return sd_drive[idx]; +} + +#define rtsx_vendor_setting_valid(reg) (!((reg) & 0x1000000)) +#define rts5209_vendor_setting1_valid(reg) (!((reg) & 0x80)) +#define rts5209_vendor_setting2_valid(reg) ((reg) & 0x80) + +#define rtsx_reg_to_aspm(reg) (((reg) >> 28) & 0x03) +#define rtsx_reg_to_sd30_drive_sel_1v8(reg) (((reg) >> 26) & 0x03) +#define rtsx_reg_to_sd30_drive_sel_3v3(reg) (((reg) >> 5) & 0x03) +#define rtsx_reg_to_card_drive_sel(reg) ((((reg) >> 25) & 0x01) << 6) +#define rtsx_reg_check_reverse_socket(reg) ((reg) & 0x4000) +#define rts5209_reg_to_aspm(reg) (((reg) >> 5) & 0x03) +#define rts5209_reg_check_ms_pmos(reg) (!((reg) & 0x08)) +#define rts5209_reg_to_sd30_drive_sel_1v8(reg) (((reg) >> 3) & 0x07) +#define rts5209_reg_to_sd30_drive_sel_3v3(reg) ((reg) & 0x07) +#define rts5209_reg_to_card_drive_sel(reg) ((reg) >> 8) +#define rtl8411_reg_to_sd30_drive_sel_3v3(reg) (((reg) >> 5) & 0x07) +#define rtl8411b_reg_to_sd30_drive_sel_3v3(reg) ((reg) & 0x03) #endif --- linux-lts-raring-3.8.0.orig/drivers/mfd/rts5209.c +++ linux-lts-raring-3.8.0/drivers/mfd/rts5209.c @@ -34,18 +34,28 @@ return val & 0x0F; } -static void rts5209_init_vendor_cfg(struct rtsx_pcr *pcr) +static void rts5209_fetch_vendor_settings(struct rtsx_pcr *pcr) { - u32 val; + u32 reg; - rtsx_pci_read_config_dword(pcr, 0x724, &val); - dev_dbg(&(pcr->pci->dev), "Cfg 0x724: 0x%x\n", val); + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg); - if (!(val & 0x80)) { - if (val & 0x08) - pcr->ms_pmos = false; - else - pcr->ms_pmos = true; + if (rts5209_vendor_setting1_valid(reg)) { + if (rts5209_reg_check_ms_pmos(reg)) + pcr->flags |= PCR_MS_PMOS; + pcr->aspm_en = rts5209_reg_to_aspm(reg); + } + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg); + + if (rts5209_vendor_setting2_valid(reg)) { + pcr->sd30_drive_sel_1v8 = + rts5209_reg_to_sd30_drive_sel_1v8(reg); + pcr->sd30_drive_sel_3v3 = + rts5209_reg_to_sd30_drive_sel_3v3(reg); + pcr->card_drive_sel = rts5209_reg_to_card_drive_sel(reg); } } @@ -57,6 +67,9 @@ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_GPIO, 0xFF, 0x03); /* Configure GPIO as output */ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_GPIO_DIR, 0xFF, 0x03); + /* Configure driving */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_DRIVE_SEL, + 0xFF, pcr->sd30_drive_sel_3v3); return rtsx_pci_send_cmd(pcr, 100); } @@ -95,7 +108,7 @@ partial_pwr_on = SD_PARTIAL_POWER_ON; pwr_on = SD_POWER_ON; - if (pcr->ms_pmos && (card == RTSX_MS_CARD)) { + if ((pcr->flags & PCR_MS_PMOS) && (card == RTSX_MS_CARD)) { pwr_mask = MS_POWER_MASK; partial_pwr_on = MS_PARTIAL_POWER_ON; pwr_on = MS_POWER_ON; @@ -131,7 +144,7 @@ pwr_mask = SD_POWER_MASK; pwr_off = SD_POWER_OFF; - if (pcr->ms_pmos && (card == RTSX_MS_CARD)) { + if ((pcr->flags & PCR_MS_PMOS) && (card == RTSX_MS_CARD)) { pwr_mask = MS_POWER_MASK; pwr_off = MS_POWER_OFF; } @@ -140,7 +153,7 @@ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_PWR_CTL, pwr_mask | PMOS_STRG_MASK, pwr_off | PMOS_STRG_400mA); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWR_GATE_CTRL, - LDO3318_PWR_MASK, 0X06); + LDO3318_PWR_MASK, 0x06); return rtsx_pci_send_cmd(pcr, 100); } @@ -149,10 +162,18 @@ int err; if (voltage == OUTPUT_3V3) { + err = rtsx_pci_write_register(pcr, + SD30_DRIVE_SEL, 0x07, pcr->sd30_drive_sel_3v3); + if (err < 0) + return err; err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4FC0 | 0x24); if (err < 0) return err; } else if (voltage == OUTPUT_1V8) { + err = rtsx_pci_write_register(pcr, + SD30_DRIVE_SEL, 0x07, pcr->sd30_drive_sel_1v8); + if (err < 0) + return err; err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4C40 | 0x24); if (err < 0) return err; @@ -164,6 +185,7 @@ } static const struct pcr_ops rts5209_pcr_ops = { + .fetch_vendor_settings = rts5209_fetch_vendor_settings, .extra_init_hw = rts5209_extra_init_hw, .optimize_phy = rts5209_optimize_phy, .turn_on_led = rts5209_turn_on_led, @@ -234,7 +256,11 @@ pcr->num_slots = 2; pcr->ops = &rts5209_pcr_ops; - rts5209_init_vendor_cfg(pcr); + pcr->flags = 0; + pcr->card_drive_sel = RTS5209_CARD_DRIVE_DEFAULT; + pcr->sd30_drive_sel_1v8 = DRIVER_TYPE_B; + pcr->sd30_drive_sel_3v3 = DRIVER_TYPE_D; + pcr->aspm_en = ASPM_L1_EN; pcr->ic_version = rts5209_get_ic_version(pcr); pcr->sd_pull_ctl_enable_tbl = rts5209_sd_pull_ctl_enable_tbl; --- linux-lts-raring-3.8.0.orig/drivers/mfd/lpc_ich.c +++ linux-lts-raring-3.8.0/drivers/mfd/lpc_ich.c @@ -50,6 +50,7 @@ * document number TBD : Panther Point * document number TBD : Lynx Point * document number TBD : Lynx Point-LP + * document number TBD : Avoton SoC */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -194,6 +195,7 @@ LPC_PPT, /* Panther Point */ LPC_LPT, /* Lynx Point */ LPC_LPT_LP, /* Lynx Point-LP */ + LPC_AVN, /* Avoton SoC */ }; struct lpc_ich_info lpc_chipset_info[] = { @@ -474,6 +476,10 @@ .name = "Lynx Point_LP", .iTCO_version = 2, }, + [LPC_AVN] = { + .name = "Avoton SoC", + .iTCO_version = 1, + }, }; /* @@ -655,6 +661,10 @@ { PCI_VDEVICE(INTEL, 0x9c45), LPC_LPT_LP}, { PCI_VDEVICE(INTEL, 0x9c46), LPC_LPT_LP}, { PCI_VDEVICE(INTEL, 0x9c47), LPC_LPT_LP}, + { PCI_VDEVICE(INTEL, 0x1f38), LPC_AVN}, + { PCI_VDEVICE(INTEL, 0x1f39), LPC_AVN}, + { PCI_VDEVICE(INTEL, 0x1f3a), LPC_AVN}, + { PCI_VDEVICE(INTEL, 0x1f3b), LPC_AVN}, { 0, }, /* End of list */ }; MODULE_DEVICE_TABLE(pci, lpc_ich_ids); --- linux-lts-raring-3.8.0.orig/drivers/mfd/rts5229.c +++ linux-lts-raring-3.8.0/drivers/mfd/rts5229.c @@ -34,6 +34,28 @@ return val & 0x0F; } +static void rts5229_fetch_vendor_settings(struct rtsx_pcr *pcr) +{ + u32 reg; + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg); + + if (!rtsx_vendor_setting_valid(reg)) + return; + + pcr->aspm_en = rtsx_reg_to_aspm(reg); + pcr->sd30_drive_sel_1v8 = + map_sd_drive(rtsx_reg_to_sd30_drive_sel_1v8(reg)); + pcr->card_drive_sel &= 0x3F; + pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg); + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg); + pcr->sd30_drive_sel_3v3 = + map_sd_drive(rtsx_reg_to_sd30_drive_sel_3v3(reg)); +} + static int rts5229_extra_init_hw(struct rtsx_pcr *pcr) { rtsx_pci_init_cmd(pcr); @@ -45,6 +67,9 @@ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, LDO_PWR_SEL, 0x03, 0x01); /* LED shine disabled, set initial shine cycle period */ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, OLT_LED_CTL, 0x0F, 0x02); + /* Configure driving */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_DRIVE_SEL, + 0xFF, pcr->sd30_drive_sel_3v3); return rtsx_pci_send_cmd(pcr, 100); } @@ -110,7 +135,7 @@ SD_POWER_MASK | PMOS_STRG_MASK, SD_POWER_OFF | PMOS_STRG_400mA); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWR_GATE_CTRL, - LDO3318_PWR_MASK, 0X00); + LDO3318_PWR_MASK, 0x00); return rtsx_pci_send_cmd(pcr, 100); } @@ -119,10 +144,18 @@ int err; if (voltage == OUTPUT_3V3) { + err = rtsx_pci_write_register(pcr, + SD30_DRIVE_SEL, 0x07, pcr->sd30_drive_sel_3v3); + if (err < 0) + return err; err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4FC0 | 0x24); if (err < 0) return err; } else if (voltage == OUTPUT_1V8) { + err = rtsx_pci_write_register(pcr, + SD30_DRIVE_SEL, 0x07, pcr->sd30_drive_sel_1v8); + if (err < 0) + return err; err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4C40 | 0x24); if (err < 0) return err; @@ -134,6 +167,7 @@ } static const struct pcr_ops rts5229_pcr_ops = { + .fetch_vendor_settings = rts5229_fetch_vendor_settings, .extra_init_hw = rts5229_extra_init_hw, .optimize_phy = rts5229_optimize_phy, .turn_on_led = rts5229_turn_on_led, @@ -213,6 +247,12 @@ pcr->num_slots = 2; pcr->ops = &rts5229_pcr_ops; + pcr->flags = 0; + pcr->card_drive_sel = RTSX_CARD_DRIVE_DEFAULT; + pcr->sd30_drive_sel_1v8 = DRIVER_TYPE_B; + pcr->sd30_drive_sel_3v3 = DRIVER_TYPE_D; + pcr->aspm_en = ASPM_L1_EN; + pcr->ic_version = rts5229_get_ic_version(pcr); if (pcr->ic_version == IC_VER_C) { pcr->sd_pull_ctl_enable_tbl = rts5229_sd_pull_ctl_enable_tbl2; --- linux-lts-raring-3.8.0.orig/drivers/mfd/rtl8411.c +++ linux-lts-raring-3.8.0/drivers/mfd/rtl8411.c @@ -35,10 +35,82 @@ return val & 0x0F; } +static int rtl8411b_is_qfn48(struct rtsx_pcr *pcr) +{ + u8 val = 0; + + rtsx_pci_read_register(pcr, RTL8411B_PACKAGE_MODE, &val); + + if (val & 0x2) + return 1; + else + return 0; +} + +static void rtl8411_fetch_vendor_settings(struct rtsx_pcr *pcr) +{ + u32 reg1; + u8 reg3; + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, ®1); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg1); + + if (!rtsx_vendor_setting_valid(reg1)) + return; + + pcr->aspm_en = rtsx_reg_to_aspm(reg1); + pcr->sd30_drive_sel_1v8 = + map_sd_drive(rtsx_reg_to_sd30_drive_sel_1v8(reg1)); + pcr->card_drive_sel &= 0x3F; + pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg1); + + rtsx_pci_read_config_byte(pcr, PCR_SETTING_REG3, ®3); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG3, reg3); + pcr->sd30_drive_sel_3v3 = rtl8411_reg_to_sd30_drive_sel_3v3(reg3); +} + +static void rtl8411b_fetch_vendor_settings(struct rtsx_pcr *pcr) +{ + u32 reg; + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg); + + if (!rtsx_vendor_setting_valid(reg)) + return; + + pcr->aspm_en = rtsx_reg_to_aspm(reg); + pcr->sd30_drive_sel_1v8 = + map_sd_drive(rtsx_reg_to_sd30_drive_sel_1v8(reg)); + pcr->sd30_drive_sel_3v3 = + map_sd_drive(rtl8411b_reg_to_sd30_drive_sel_3v3(reg)); +} + static int rtl8411_extra_init_hw(struct rtsx_pcr *pcr) { - return rtsx_pci_write_register(pcr, CD_PAD_CTL, + rtsx_pci_init_cmd(pcr); + + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_DRIVE_SEL, + 0xFF, pcr->sd30_drive_sel_3v3); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CD_PAD_CTL, + CD_DISABLE_MASK | CD_AUTO_DISABLE, CD_ENABLE); + + return rtsx_pci_send_cmd(pcr, 100); +} + +static int rtl8411b_extra_init_hw(struct rtsx_pcr *pcr) +{ + rtsx_pci_init_cmd(pcr); + + if (rtl8411b_is_qfn48(pcr)) + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, + CARD_PULL_CTL3, 0xFF, 0xF5); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_DRIVE_SEL, + 0xFF, pcr->sd30_drive_sel_3v3); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CD_PAD_CTL, CD_DISABLE_MASK | CD_AUTO_DISABLE, CD_ENABLE); + + return rtsx_pci_send_cmd(pcr, 100); } static int rtl8411_turn_on_led(struct rtsx_pcr *pcr) @@ -115,14 +187,24 @@ static int rtl8411_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) { u8 mask, val; + int err; mask = (BPP_REG_TUNED18 << BPP_TUNED18_SHIFT_8411) | BPP_PAD_MASK; - if (voltage == OUTPUT_3V3) + if (voltage == OUTPUT_3V3) { + err = rtsx_pci_write_register(pcr, + SD30_DRIVE_SEL, 0x07, pcr->sd30_drive_sel_3v3); + if (err < 0) + return err; val = (BPP_ASIC_3V3 << BPP_TUNED18_SHIFT_8411) | BPP_PAD_3V3; - else if (voltage == OUTPUT_1V8) + } else if (voltage == OUTPUT_1V8) { + err = rtsx_pci_write_register(pcr, + SD30_DRIVE_SEL, 0x07, pcr->sd30_drive_sel_1v8); + if (err < 0) + return err; val = (BPP_ASIC_1V8 << BPP_TUNED18_SHIFT_8411) | BPP_PAD_1V8; - else + } else { return -EINVAL; + } return rtsx_pci_write_register(pcr, LDO_CTL, mask, val); } @@ -191,6 +273,7 @@ } static const struct pcr_ops rtl8411_pcr_ops = { + .fetch_vendor_settings = rtl8411_fetch_vendor_settings, .extra_init_hw = rtl8411_extra_init_hw, .optimize_phy = NULL, .turn_on_led = rtl8411_turn_on_led, @@ -204,6 +287,21 @@ .conv_clk_and_div_n = rtl8411_conv_clk_and_div_n, }; +static const struct pcr_ops rtl8411b_pcr_ops = { + .fetch_vendor_settings = rtl8411b_fetch_vendor_settings, + .extra_init_hw = rtl8411b_extra_init_hw, + .optimize_phy = NULL, + .turn_on_led = rtl8411_turn_on_led, + .turn_off_led = rtl8411_turn_off_led, + .enable_auto_blink = rtl8411_enable_auto_blink, + .disable_auto_blink = rtl8411_disable_auto_blink, + .card_power_on = rtl8411_card_power_on, + .card_power_off = rtl8411_card_power_off, + .switch_output_voltage = rtl8411_switch_output_voltage, + .cd_deglitch = rtl8411_cd_deglitch, + .conv_clk_and_div_n = rtl8411_conv_clk_and_div_n, +}; + /* SD Pull Control Enable: * SD_DAT[3:0] ==> pull up * SD_CD ==> pull up @@ -266,15 +364,124 @@ 0, }; +static const u32 rtl8411b_qfn64_sd_pull_ctl_enable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL1, 0xAA), + RTSX_REG_PAIR(CARD_PULL_CTL2, 0xAA), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x09 | 0xD0), + RTSX_REG_PAIR(CARD_PULL_CTL4, 0x09 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL5, 0x05 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn48_sd_pull_ctl_enable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL2, 0xAA), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x69 | 0x90), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x08 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn64_sd_pull_ctl_disable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL1, 0x65), + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x05 | 0xD0), + RTSX_REG_PAIR(CARD_PULL_CTL4, 0x09 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL5, 0x05 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn48_sd_pull_ctl_disable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x65 | 0x90), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn64_ms_pull_ctl_enable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL1, 0x65), + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x05 | 0xD0), + RTSX_REG_PAIR(CARD_PULL_CTL4, 0x05 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL5, 0x05 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn48_ms_pull_ctl_enable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x65 | 0x90), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn64_ms_pull_ctl_disable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL1, 0x65), + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x05 | 0xD0), + RTSX_REG_PAIR(CARD_PULL_CTL4, 0x09 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL5, 0x05 | 0x50), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + +static const u32 rtl8411b_qfn48_ms_pull_ctl_disable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0x65 | 0x90), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x04 | 0x11), + 0, +}; + void rtl8411_init_params(struct rtsx_pcr *pcr) { pcr->extra_caps = EXTRA_CAPS_SD_SDR50 | EXTRA_CAPS_SD_SDR104; pcr->num_slots = 2; pcr->ops = &rtl8411_pcr_ops; + pcr->flags = 0; + pcr->card_drive_sel = RTL8411_CARD_DRIVE_DEFAULT; + pcr->sd30_drive_sel_1v8 = DRIVER_TYPE_B; + pcr->sd30_drive_sel_3v3 = DRIVER_TYPE_D; + pcr->aspm_en = ASPM_L1_EN; + pcr->ic_version = rtl8411_get_ic_version(pcr); pcr->sd_pull_ctl_enable_tbl = rtl8411_sd_pull_ctl_enable_tbl; pcr->sd_pull_ctl_disable_tbl = rtl8411_sd_pull_ctl_disable_tbl; pcr->ms_pull_ctl_enable_tbl = rtl8411_ms_pull_ctl_enable_tbl; pcr->ms_pull_ctl_disable_tbl = rtl8411_ms_pull_ctl_disable_tbl; } + +void rtl8411b_init_params(struct rtsx_pcr *pcr) +{ + pcr->extra_caps = EXTRA_CAPS_SD_SDR50 | EXTRA_CAPS_SD_SDR104; + pcr->num_slots = 2; + pcr->ops = &rtl8411b_pcr_ops; + + pcr->flags = 0; + pcr->card_drive_sel = RTL8411_CARD_DRIVE_DEFAULT; + pcr->sd30_drive_sel_1v8 = DRIVER_TYPE_B; + pcr->sd30_drive_sel_3v3 = DRIVER_TYPE_D; + pcr->aspm_en = ASPM_L1_EN; + + pcr->ic_version = rtl8411_get_ic_version(pcr); + + if (rtl8411b_is_qfn48(pcr)) { + pcr->sd_pull_ctl_enable_tbl = + rtl8411b_qfn48_sd_pull_ctl_enable_tbl; + pcr->sd_pull_ctl_disable_tbl = + rtl8411b_qfn48_sd_pull_ctl_disable_tbl; + pcr->ms_pull_ctl_enable_tbl = + rtl8411b_qfn48_ms_pull_ctl_enable_tbl; + pcr->ms_pull_ctl_disable_tbl = + rtl8411b_qfn48_ms_pull_ctl_disable_tbl; + } else { + pcr->sd_pull_ctl_enable_tbl = + rtl8411b_qfn64_sd_pull_ctl_enable_tbl; + pcr->sd_pull_ctl_disable_tbl = + rtl8411b_qfn64_sd_pull_ctl_disable_tbl; + pcr->ms_pull_ctl_enable_tbl = + rtl8411b_qfn64_ms_pull_ctl_enable_tbl; + pcr->ms_pull_ctl_disable_tbl = + rtl8411b_qfn64_ms_pull_ctl_disable_tbl; + } +} --- linux-lts-raring-3.8.0.orig/drivers/mfd/rtsx_pcr.c +++ linux-lts-raring-3.8.0/drivers/mfd/rtsx_pcr.c @@ -55,6 +55,8 @@ { PCI_DEVICE(0x10EC, 0x5209), PCI_CLASS_OTHERS << 16, 0xFF0000 }, { PCI_DEVICE(0x10EC, 0x5229), PCI_CLASS_OTHERS << 16, 0xFF0000 }, { PCI_DEVICE(0x10EC, 0x5289), PCI_CLASS_OTHERS << 16, 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5227), PCI_CLASS_OTHERS << 16, 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5287), PCI_CLASS_OTHERS << 16, 0xFF0000 }, { 0, } }; @@ -70,6 +72,9 @@ pcr->state = PDEV_STAT_RUN; if (pcr->ops->enable_auto_blink) pcr->ops->enable_auto_blink(pcr); + + if (pcr->aspm_en) + rtsx_pci_write_config_byte(pcr, LCTLR, 0); } mod_delayed_work(system_wq, &pcr->idle_work, msecs_to_jiffies(200)); @@ -713,6 +718,25 @@ } EXPORT_SYMBOL_GPL(rtsx_pci_card_power_off); +int rtsx_pci_card_exclusive_check(struct rtsx_pcr *pcr, int card) +{ + unsigned int cd_mask[] = { + [RTSX_SD_CARD] = SD_EXIST, + [RTSX_MS_CARD] = MS_EXIST + }; + + if (!(pcr->flags & PCR_MS_PMOS)) { + /* When using single PMOS, accessing card is not permitted + * if the existing card is not the designated one. + */ + if (pcr->card_exist & (~cd_mask[card])) + return -EIO; + } + + return 0; +} +EXPORT_SYMBOL_GPL(rtsx_pci_card_exclusive_check); + int rtsx_pci_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) { if (pcr->ops->switch_output_voltage) @@ -758,7 +782,7 @@ struct delayed_work *dwork; struct rtsx_pcr *pcr; unsigned long flags; - unsigned int card_detect = 0; + unsigned int card_detect = 0, card_inserted, card_removed; u32 irq_status; dwork = to_delayed_work(work); @@ -766,25 +790,35 @@ dev_dbg(&(pcr->pci->dev), "--> %s\n", __func__); + mutex_lock(&pcr->pcr_mutex); spin_lock_irqsave(&pcr->lock, flags); irq_status = rtsx_pci_readl(pcr, RTSX_BIPR); dev_dbg(&(pcr->pci->dev), "irq_status: 0x%08x\n", irq_status); - if (pcr->card_inserted || pcr->card_removed) { + irq_status &= CARD_EXIST; + card_inserted = pcr->card_inserted & irq_status; + card_removed = pcr->card_removed; + pcr->card_inserted = 0; + pcr->card_removed = 0; + + spin_unlock_irqrestore(&pcr->lock, flags); + + if (card_inserted || card_removed) { dev_dbg(&(pcr->pci->dev), "card_inserted: 0x%x, card_removed: 0x%x\n", - pcr->card_inserted, pcr->card_removed); + card_inserted, card_removed); if (pcr->ops->cd_deglitch) - pcr->card_inserted = pcr->ops->cd_deglitch(pcr); + card_inserted = pcr->ops->cd_deglitch(pcr); - card_detect = pcr->card_inserted | pcr->card_removed; - pcr->card_inserted = 0; - pcr->card_removed = 0; + card_detect = card_inserted | card_removed; + + pcr->card_exist |= card_inserted; + pcr->card_exist &= ~card_removed; } - spin_unlock_irqrestore(&pcr->lock, flags); + mutex_unlock(&pcr->pcr_mutex); if ((card_detect & SD_EXIST) && pcr->slots[RTSX_SD_CARD].card_event) pcr->slots[RTSX_SD_CARD].card_event( @@ -836,10 +870,6 @@ } } - if (pcr->card_inserted || pcr->card_removed) - schedule_delayed_work(&pcr->carddet_work, - msecs_to_jiffies(200)); - if (int_reg & (NEED_COMPLETE_INT | DELINK_INT)) { if (int_reg & (TRANS_FAIL_INT | DELINK_INT)) { pcr->trans_result = TRANS_RESULT_FAIL; @@ -852,6 +882,10 @@ } } + if (pcr->card_inserted || pcr->card_removed) + schedule_delayed_work(&pcr->carddet_work, + msecs_to_jiffies(200)); + spin_unlock(&pcr->lock); return IRQ_HANDLED; } @@ -892,6 +926,9 @@ if (pcr->ops->turn_off_led) pcr->ops->turn_off_led(pcr); + if (pcr->aspm_en) + rtsx_pci_write_config_byte(pcr, LCTLR, pcr->aspm_en); + mutex_unlock(&pcr->pcr_mutex); } @@ -930,8 +967,8 @@ /* Reset delink mode */ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CHANGE_LINK_STATE, 0x0A, 0); /* Card driving select */ - rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_DRIVE_SEL, - 0x07, DRIVER_TYPE_D); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_DRIVE_SEL, + 0xFF, pcr->card_drive_sel); /* Enable SSC Clock */ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SSC_CTL1, 0xFF, SSC_8X_EN | SSC_SEL_4M); @@ -963,6 +1000,8 @@ if (err < 0) return err; + rtsx_pci_write_config_byte(pcr, LCTLR, 0); + /* Enable clk_request_n to enable clock power management */ rtsx_pci_write_config_byte(pcr, 0x81, 1); /* Enter L1 when host tx idle */ @@ -974,6 +1013,14 @@ return err; } + /* No CD interrupt if probing driver with card inserted. + * So we need to initialize pcr->card_exist here. + */ + if (pcr->ops->cd_deglitch) + pcr->card_exist = pcr->ops->cd_deglitch(pcr); + else + pcr->card_exist = rtsx_pci_readl(pcr, RTSX_BIPR) & CARD_EXIST; + return 0; } @@ -997,6 +1044,14 @@ case 0x5289: rtl8411_init_params(pcr); break; + + case 0x5227: + rts5227_init_params(pcr); + break; + + case 0x5287: + rtl8411b_init_params(pcr); + break; } dev_dbg(&(pcr->pci->dev), "PID: 0x%04x, IC version: 0x%02x\n", @@ -1007,6 +1062,18 @@ if (!pcr->slots) return -ENOMEM; + if (pcr->ops->fetch_vendor_settings) + pcr->ops->fetch_vendor_settings(pcr); + + dev_dbg(&(pcr->pci->dev), "pcr->aspm_en = 0x%x\n", pcr->aspm_en); + dev_dbg(&(pcr->pci->dev), "pcr->sd30_drive_sel_1v8 = 0x%x\n", + pcr->sd30_drive_sel_1v8); + dev_dbg(&(pcr->pci->dev), "pcr->sd30_drive_sel_3v3 = 0x%x\n", + pcr->sd30_drive_sel_3v3); + dev_dbg(&(pcr->pci->dev), "pcr->card_drive_sel = 0x%x\n", + pcr->card_drive_sel); + dev_dbg(&(pcr->pci->dev), "pcr->flags = 0x%x\n", pcr->flags); + pcr->state = PDEV_STAT_IDLE; err = rtsx_pci_init_hw(pcr); if (err < 0) { @@ -1099,7 +1166,7 @@ ret = rtsx_pci_acquire_irq(pcr); if (ret < 0) - goto free_dma; + goto disable_msi; pci_set_master(pcidev); synchronize_irq(pcr->irq); @@ -1123,7 +1190,9 @@ disable_irq: free_irq(pcr->irq, (void *)pcr); -free_dma: +disable_msi: + if (pcr->msi_en) + pci_disable_msi(pcr->pci); dma_free_coherent(&(pcr->pci->dev), RTSX_RESV_BUF_LEN, pcr->rtsx_resv_buf, pcr->rtsx_resv_buf_addr); unmap: --- linux-lts-raring-3.8.0.orig/drivers/mfd/Makefile +++ linux-lts-raring-3.8.0/drivers/mfd/Makefile @@ -9,7 +9,7 @@ obj-$(CONFIG_MFD_SM501) += sm501.o obj-$(CONFIG_MFD_ASIC3) += asic3.o tmio_core.o -rtsx_pci-objs := rtsx_pcr.o rts5209.o rts5229.o rtl8411.o +rtsx_pci-objs := rtsx_pcr.o rts5209.o rts5229.o rtl8411.o rts5227.o obj-$(CONFIG_MFD_RTSX_PCI) += rtsx_pci.o obj-$(CONFIG_HTC_EGPIO) += htc-egpio.o --- linux-lts-raring-3.8.0.orig/drivers/mfd/omap-usb-host.c +++ linux-lts-raring-3.8.0/drivers/mfd/omap-usb-host.c @@ -299,9 +299,6 @@ if (is_ehci_tll_mode(pdata->port_mode[1])) clk_enable(omap->usbhost_p2_fck); - clk_enable(omap->utmi_p1_fck); - clk_enable(omap->utmi_p2_fck); - spin_unlock_irqrestore(&omap->lock, flags); return 0; @@ -327,9 +324,6 @@ if (is_ehci_tll_mode(pdata->port_mode[1])) clk_disable(omap->usbhost_p2_fck); - clk_disable(omap->utmi_p2_fck); - clk_disable(omap->utmi_p1_fck); - if (omap->ehci_logic_fck && !IS_ERR(omap->ehci_logic_fck)) clk_disable(omap->ehci_logic_fck); --- linux-lts-raring-3.8.0.orig/drivers/mfd/adp5520.c +++ linux-lts-raring-3.8.0/drivers/mfd/adp5520.c @@ -36,6 +36,7 @@ struct blocking_notifier_head notifier_list; int irq; unsigned long id; + uint8_t mode; }; static int __adp5520_read(struct i2c_client *client, @@ -326,7 +327,10 @@ struct i2c_client *client = to_i2c_client(dev); struct adp5520_chip *chip = dev_get_drvdata(&client->dev); - adp5520_clr_bits(chip->dev, ADP5520_MODE_STATUS, ADP5520_nSTNBY); + adp5520_read(chip->dev, ADP5520_MODE_STATUS, &chip->mode); + /* All other bits are W1C */ + chip->mode &= ADP5520_BL_EN | ADP5520_DIM_EN | ADP5520_nSTNBY; + adp5520_write(chip->dev, ADP5520_MODE_STATUS, 0); return 0; } @@ -335,7 +339,7 @@ struct i2c_client *client = to_i2c_client(dev); struct adp5520_chip *chip = dev_get_drvdata(&client->dev); - adp5520_set_bits(chip->dev, ADP5520_MODE_STATUS, ADP5520_nSTNBY); + adp5520_write(chip->dev, ADP5520_MODE_STATUS, chip->mode); return 0; } #endif --- linux-lts-raring-3.8.0.orig/drivers/mfd/rts5227.c +++ linux-lts-raring-3.8.0/drivers/mfd/rts5227.c @@ -0,0 +1,285 @@ +/* Driver for Realtek PCI-Express card reader + * + * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; 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 . + * + * Author: + * Wei WANG + * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China + * + * Roger Tseng + * No. 2, Innovation Road II, Hsinchu Science Park, Hsinchu 300, Taiwan + */ + +#include +#include +#include + +#include "rtsx_pcr.h" + +static void rts5227_fill_driving(struct rtsx_pcr *pcr, u8 voltage) +{ + u8 driving_3v3[4][3] = { + {0x13, 0x13, 0x13}, + {0x96, 0x96, 0x96}, + {0x7F, 0x7F, 0x7F}, + {0x96, 0x96, 0x96}, + }; + u8 driving_1v8[4][3] = { + {0x99, 0x99, 0x99}, + {0xAA, 0xAA, 0xAA}, + {0xFE, 0xFE, 0xFE}, + {0xB3, 0xB3, 0xB3}, + }; + u8 (*driving)[3], drive_sel; + + if (voltage == OUTPUT_3V3) { + driving = driving_3v3; + drive_sel = pcr->sd30_drive_sel_3v3; + } else { + driving = driving_1v8; + drive_sel = pcr->sd30_drive_sel_1v8; + } + + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_CLK_DRIVE_SEL, + 0xFF, driving[drive_sel][0]); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_CMD_DRIVE_SEL, + 0xFF, driving[drive_sel][1]); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD30_DAT_DRIVE_SEL, + 0xFF, driving[drive_sel][2]); +} + +static void rts5227_fetch_vendor_settings(struct rtsx_pcr *pcr) +{ + u32 reg; + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg); + + if (!rtsx_vendor_setting_valid(reg)) + return; + + pcr->aspm_en = rtsx_reg_to_aspm(reg); + pcr->sd30_drive_sel_1v8 = rtsx_reg_to_sd30_drive_sel_1v8(reg); + pcr->card_drive_sel &= 0x3F; + pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg); + + rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, ®); + dev_dbg(&(pcr->pci->dev), "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg); + pcr->sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg); + if (rtsx_reg_check_reverse_socket(reg)) + pcr->flags |= PCR_REVERSE_SOCKET; +} + +static int rts5227_extra_init_hw(struct rtsx_pcr *pcr) +{ + u16 cap; + + rtsx_pci_init_cmd(pcr); + + /* Configure GPIO as output */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, GPIO_CTL, 0x02, 0x02); + /* Switch LDO3318 source from DV33 to card_3v3 */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, LDO_PWR_SEL, 0x03, 0x00); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, LDO_PWR_SEL, 0x03, 0x01); + /* LED shine disabled, set initial shine cycle period */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, OLT_LED_CTL, 0x0F, 0x02); + /* Configure LTR */ + pcie_capability_read_word(pcr->pci, PCI_EXP_DEVCTL2, &cap); + if (cap & PCI_EXP_LTR_EN) + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, LTR_CTL, 0xFF, 0xA3); + /* Configure OBFF */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, OBFF_CFG, 0x03, 0x03); + /* Configure driving */ + rts5227_fill_driving(pcr, OUTPUT_3V3); + /* Configure force_clock_req */ + if (pcr->flags & PCR_REVERSE_SOCKET) + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, + AUTOLOAD_CFG_BASE + 3, 0xB8, 0xB8); + else + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, + AUTOLOAD_CFG_BASE + 3, 0xB8, 0x88); + + return rtsx_pci_send_cmd(pcr, 100); +} + +static int rts5227_optimize_phy(struct rtsx_pcr *pcr) +{ + /* Optimize RX sensitivity */ + return rtsx_pci_write_phy_register(pcr, 0x00, 0xBA42); +} + +static int rts5227_turn_on_led(struct rtsx_pcr *pcr) +{ + return rtsx_pci_write_register(pcr, GPIO_CTL, 0x02, 0x02); +} + +static int rts5227_turn_off_led(struct rtsx_pcr *pcr) +{ + return rtsx_pci_write_register(pcr, GPIO_CTL, 0x02, 0x00); +} + +static int rts5227_enable_auto_blink(struct rtsx_pcr *pcr) +{ + return rtsx_pci_write_register(pcr, OLT_LED_CTL, 0x08, 0x08); +} + +static int rts5227_disable_auto_blink(struct rtsx_pcr *pcr) +{ + return rtsx_pci_write_register(pcr, OLT_LED_CTL, 0x08, 0x00); +} + +static int rts5227_card_power_on(struct rtsx_pcr *pcr, int card) +{ + int err; + + rtsx_pci_init_cmd(pcr); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_PWR_CTL, + SD_POWER_MASK, SD_PARTIAL_POWER_ON); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWR_GATE_CTRL, + LDO3318_PWR_MASK, 0x02); + err = rtsx_pci_send_cmd(pcr, 100); + if (err < 0) + return err; + + /* To avoid too large in-rush current */ + udelay(150); + + rtsx_pci_init_cmd(pcr); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_PWR_CTL, + SD_POWER_MASK, SD_POWER_ON); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWR_GATE_CTRL, + LDO3318_PWR_MASK, 0x06); + err = rtsx_pci_send_cmd(pcr, 100); + if (err < 0) + return err; + + return 0; +} + +static int rts5227_card_power_off(struct rtsx_pcr *pcr, int card) +{ + rtsx_pci_init_cmd(pcr); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_PWR_CTL, + SD_POWER_MASK | PMOS_STRG_MASK, + SD_POWER_OFF | PMOS_STRG_400mA); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWR_GATE_CTRL, + LDO3318_PWR_MASK, 0X00); + return rtsx_pci_send_cmd(pcr, 100); +} + +static int rts5227_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) +{ + int err; + + if (voltage == OUTPUT_3V3) { + err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4FC0 | 0x24); + if (err < 0) + return err; + } else if (voltage == OUTPUT_1V8) { + err = rtsx_pci_write_phy_register(pcr, 0x11, 0x3C02); + if (err < 0) + return err; + err = rtsx_pci_write_phy_register(pcr, 0x08, 0x4C80 | 0x24); + if (err < 0) + return err; + } else { + return -EINVAL; + } + + /* set pad drive */ + rtsx_pci_init_cmd(pcr); + rts5227_fill_driving(pcr, voltage); + return rtsx_pci_send_cmd(pcr, 100); +} + +static const struct pcr_ops rts5227_pcr_ops = { + .fetch_vendor_settings = rts5227_fetch_vendor_settings, + .extra_init_hw = rts5227_extra_init_hw, + .optimize_phy = rts5227_optimize_phy, + .turn_on_led = rts5227_turn_on_led, + .turn_off_led = rts5227_turn_off_led, + .enable_auto_blink = rts5227_enable_auto_blink, + .disable_auto_blink = rts5227_disable_auto_blink, + .card_power_on = rts5227_card_power_on, + .card_power_off = rts5227_card_power_off, + .switch_output_voltage = rts5227_switch_output_voltage, + .cd_deglitch = NULL, + .conv_clk_and_div_n = NULL, +}; + +/* SD Pull Control Enable: + * SD_DAT[3:0] ==> pull up + * SD_CD ==> pull up + * SD_WP ==> pull up + * SD_CMD ==> pull up + * SD_CLK ==> pull down + */ +static const u32 rts5227_sd_pull_ctl_enable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL2, 0xAA), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0xE9), + 0, +}; + +/* SD Pull Control Disable: + * SD_DAT[3:0] ==> pull down + * SD_CD ==> pull up + * SD_WP ==> pull down + * SD_CMD ==> pull down + * SD_CLK ==> pull down + */ +static const u32 rts5227_sd_pull_ctl_disable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL2, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL3, 0xD5), + 0, +}; + +/* MS Pull Control Enable: + * MS CD ==> pull up + * others ==> pull down + */ +static const u32 rts5227_ms_pull_ctl_enable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL5, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x15), + 0, +}; + +/* MS Pull Control Disable: + * MS CD ==> pull up + * others ==> pull down + */ +static const u32 rts5227_ms_pull_ctl_disable_tbl[] = { + RTSX_REG_PAIR(CARD_PULL_CTL5, 0x55), + RTSX_REG_PAIR(CARD_PULL_CTL6, 0x15), + 0, +}; + +void rts5227_init_params(struct rtsx_pcr *pcr) +{ + pcr->extra_caps = EXTRA_CAPS_SD_SDR50 | EXTRA_CAPS_SD_SDR104; + pcr->num_slots = 2; + pcr->ops = &rts5227_pcr_ops; + + pcr->flags = 0; + pcr->card_drive_sel = RTSX_CARD_DRIVE_DEFAULT; + pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B; + pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B; + pcr->aspm_en = ASPM_L1_EN; + + pcr->sd_pull_ctl_enable_tbl = rts5227_sd_pull_ctl_enable_tbl; + pcr->sd_pull_ctl_disable_tbl = rts5227_sd_pull_ctl_disable_tbl; + pcr->ms_pull_ctl_enable_tbl = rts5227_ms_pull_ctl_enable_tbl; + pcr->ms_pull_ctl_disable_tbl = rts5227_ms_pull_ctl_disable_tbl; +} --- linux-lts-raring-3.8.0.orig/drivers/dma/omap-dma.c +++ linux-lts-raring-3.8.0/drivers/dma/omap-dma.c @@ -276,12 +276,20 @@ spin_lock_irqsave(&c->vc.lock, flags); if (vchan_issue_pending(&c->vc) && !c->desc) { - struct omap_dmadev *d = to_omap_dma_dev(chan->device); - spin_lock(&d->lock); - if (list_empty(&c->node)) - list_add_tail(&c->node, &d->pending); - spin_unlock(&d->lock); - tasklet_schedule(&d->task); + /* + * c->cyclic is used only by audio and in this case the DMA need + * to be started without delay. + */ + if (!c->cyclic) { + struct omap_dmadev *d = to_omap_dma_dev(chan->device); + spin_lock(&d->lock); + if (list_empty(&c->node)) + list_add_tail(&c->node, &d->pending); + spin_unlock(&d->lock); + tasklet_schedule(&d->task); + } else { + omap_dma_start_desc(c); + } } spin_unlock_irqrestore(&c->vc.lock, flags); } @@ -661,32 +669,14 @@ } EXPORT_SYMBOL_GPL(omap_dma_filter_fn); -static struct platform_device *pdev; - -static const struct platform_device_info omap_dma_dev_info = { - .name = "omap-dma-engine", - .id = -1, - .dma_mask = DMA_BIT_MASK(32), -}; - static int omap_dma_init(void) { - int rc = platform_driver_register(&omap_dma_driver); - - if (rc == 0) { - pdev = platform_device_register_full(&omap_dma_dev_info); - if (IS_ERR(pdev)) { - platform_driver_unregister(&omap_dma_driver); - rc = PTR_ERR(pdev); - } - } - return rc; + return platform_driver_register(&omap_dma_driver); } subsys_initcall(omap_dma_init); static void __exit omap_dma_exit(void) { - platform_device_unregister(pdev); platform_driver_unregister(&omap_dma_driver); } module_exit(omap_dma_exit); --- linux-lts-raring-3.8.0.orig/drivers/dma/Kconfig +++ linux-lts-raring-3.8.0/drivers/dma/Kconfig @@ -83,7 +83,6 @@ config DW_DMAC tristate "Synopsys DesignWare AHB DMA support" - depends on HAVE_CLK select DMA_ENGINE default y if CPU_AT32AP7000 help --- linux-lts-raring-3.8.0.orig/drivers/dma/ep93xx_dma.c +++ linux-lts-raring-3.8.0/drivers/dma/ep93xx_dma.c @@ -903,8 +903,7 @@ switch (data->port) { case EP93XX_DMA_SSP: case EP93XX_DMA_IDE: - if (data->direction != DMA_MEM_TO_DEV && - data->direction != DMA_DEV_TO_MEM) + if (!is_slave_direction(data->direction)) return -EINVAL; break; default: --- linux-lts-raring-3.8.0.orig/drivers/dma/dmaengine.c +++ linux-lts-raring-3.8.0/drivers/dma/dmaengine.c @@ -709,8 +709,8 @@ !device->device_prep_dma_memset); BUG_ON(dma_has_cap(DMA_INTERRUPT, device->cap_mask) && !device->device_prep_dma_interrupt); - BUG_ON(dma_has_cap(DMA_SG, device->cap_mask) && - !device->device_prep_dma_sg); + BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && + !device->device_prep_slave_sg); BUG_ON(dma_has_cap(DMA_CYCLIC, device->cap_mask) && !device->device_prep_dma_cyclic); BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && --- linux-lts-raring-3.8.0.orig/drivers/dma/dw_dmac.c +++ linux-lts-raring-3.8.0/drivers/dma/dw_dmac.c @@ -1,6 +1,5 @@ /* - * Driver for the Synopsys DesignWare DMA Controller (aka DMACA on - * AVR32 systems.) + * Core driver for the Synopsys DesignWare DMA Controller * * Copyright (C) 2007-2008 Atmel Corporation * Copyright (C) 2010-2011 ST Microelectronics @@ -9,11 +8,13 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ + #include #include #include #include #include +#include #include #include #include @@ -46,15 +47,32 @@ return slave ? slave->src_master : 1; } +#define SRC_MASTER 0 +#define DST_MASTER 1 + +static inline unsigned int dwc_get_master(struct dma_chan *chan, int master) +{ + struct dw_dma *dw = to_dw_dma(chan->device); + struct dw_dma_slave *dws = chan->private; + unsigned int m; + + if (master == SRC_MASTER) + m = dwc_get_sms(dws); + else + m = dwc_get_dms(dws); + + return min_t(unsigned int, dw->nr_masters - 1, m); +} + #define DWC_DEFAULT_CTLLO(_chan) ({ \ - struct dw_dma_slave *__slave = (_chan->private); \ struct dw_dma_chan *_dwc = to_dw_dma_chan(_chan); \ struct dma_slave_config *_sconfig = &_dwc->dma_sconfig; \ - int _dms = dwc_get_dms(__slave); \ - int _sms = dwc_get_sms(__slave); \ - u8 _smsize = __slave ? _sconfig->src_maxburst : \ + bool _is_slave = is_slave_direction(_dwc->direction); \ + int _dms = dwc_get_master(_chan, DST_MASTER); \ + int _sms = dwc_get_master(_chan, SRC_MASTER); \ + u8 _smsize = _is_slave ? _sconfig->src_maxburst : \ DW_DMA_MSIZE_16; \ - u8 _dmsize = __slave ? _sconfig->dst_maxburst : \ + u8 _dmsize = _is_slave ? _sconfig->dst_maxburst : \ DW_DMA_MSIZE_16; \ \ (DWC_CTLL_DST_MSIZE(_dmsize) \ @@ -72,15 +90,14 @@ */ #define NR_DESCS_PER_CHANNEL 64 -/*----------------------------------------------------------------------*/ +static inline unsigned int dwc_get_data_width(struct dma_chan *chan, int master) +{ + struct dw_dma *dw = to_dw_dma(chan->device); -/* - * Because we're not relying on writeback from the controller (it may not - * even be configured into the core!) we don't need to use dma_pool. These - * descriptors -- and associated data -- are cacheable. We do need to make - * sure their dcache entries are written back before handing them off to - * the controller, though. - */ + return dw->data_width[dwc_get_master(chan, master)]; +} + +/*----------------------------------------------------------------------*/ static struct device *chan2dev(struct dma_chan *chan) { @@ -93,7 +110,7 @@ static struct dw_desc *dwc_first_active(struct dw_dma_chan *dwc) { - return list_entry(dwc->active_list.next, struct dw_desc, desc_node); + return to_dw_desc(dwc->active_list.next); } static struct dw_desc *dwc_desc_get(struct dw_dma_chan *dwc) @@ -120,19 +137,6 @@ return ret; } -static void dwc_sync_desc_for_cpu(struct dw_dma_chan *dwc, struct dw_desc *desc) -{ - struct dw_desc *child; - - list_for_each_entry(child, &desc->tx_list, desc_node) - dma_sync_single_for_cpu(chan2parent(&dwc->chan), - child->txd.phys, sizeof(child->lli), - DMA_TO_DEVICE); - dma_sync_single_for_cpu(chan2parent(&dwc->chan), - desc->txd.phys, sizeof(desc->lli), - DMA_TO_DEVICE); -} - /* * Move a descriptor, including any children, to the free list. * `desc' must not be on any lists. @@ -144,8 +148,6 @@ if (desc) { struct dw_desc *child; - dwc_sync_desc_for_cpu(dwc, desc); - spin_lock_irqsave(&dwc->lock, flags); list_for_each_entry(child, &desc->tx_list, desc_node) dev_vdbg(chan2dev(&dwc->chan), @@ -178,9 +180,9 @@ cfghi = dws->cfg_hi; cfglo |= dws->cfg_lo & ~DWC_CFGL_CH_PRIOR_MASK; } else { - if (dwc->dma_sconfig.direction == DMA_MEM_TO_DEV) + if (dwc->direction == DMA_MEM_TO_DEV) cfghi = DWC_CFGH_DST_PER(dwc->dma_sconfig.slave_id); - else if (dwc->dma_sconfig.direction == DMA_DEV_TO_MEM) + else if (dwc->direction == DMA_DEV_TO_MEM) cfghi = DWC_CFGH_SRC_PER(dwc->dma_sconfig.slave_id); } @@ -222,7 +224,6 @@ channel_readl(dwc, CTL_LO)); } - static inline void dwc_chan_disable(struct dw_dma *dw, struct dw_dma_chan *dwc) { channel_clear_bit(dw, CH_EN, dwc->mask); @@ -248,6 +249,9 @@ channel_writel(dwc, CTL_LO, ctllo); channel_writel(dwc, CTL_HI, desc->lli.ctlhi); channel_set_bit(dw, CH_EN, dwc->mask); + + /* Move pointer to next descriptor */ + dwc->tx_node_active = dwc->tx_node_active->next; } /* Called with dwc->lock held and bh disabled */ @@ -278,9 +282,10 @@ dwc_initialize(dwc); - dwc->tx_list = &first->tx_list; - dwc->tx_node_active = first->tx_list.next; + dwc->residue = first->total_len; + dwc->tx_node_active = &first->tx_list; + /* Submit first block */ dwc_do_single_block(dwc, first); return; @@ -316,8 +321,6 @@ param = txd->callback_param; } - dwc_sync_desc_for_cpu(dwc, desc); - /* async_tx_ack */ list_for_each_entry(child, &desc->tx_list, desc_node) async_tx_ack(&child->txd); @@ -326,29 +329,29 @@ list_splice_init(&desc->tx_list, &dwc->free_list); list_move(&desc->desc_node, &dwc->free_list); - if (!dwc->chan.private) { + if (!is_slave_direction(dwc->direction)) { struct device *parent = chan2parent(&dwc->chan); if (!(txd->flags & DMA_COMPL_SKIP_DEST_UNMAP)) { if (txd->flags & DMA_COMPL_DEST_UNMAP_SINGLE) dma_unmap_single(parent, desc->lli.dar, - desc->len, DMA_FROM_DEVICE); + desc->total_len, DMA_FROM_DEVICE); else dma_unmap_page(parent, desc->lli.dar, - desc->len, DMA_FROM_DEVICE); + desc->total_len, DMA_FROM_DEVICE); } if (!(txd->flags & DMA_COMPL_SKIP_SRC_UNMAP)) { if (txd->flags & DMA_COMPL_SRC_UNMAP_SINGLE) dma_unmap_single(parent, desc->lli.sar, - desc->len, DMA_TO_DEVICE); + desc->total_len, DMA_TO_DEVICE); else dma_unmap_page(parent, desc->lli.sar, - desc->len, DMA_TO_DEVICE); + desc->total_len, DMA_TO_DEVICE); } } spin_unlock_irqrestore(&dwc->lock, flags); - if (callback_required && callback) + if (callback) callback(param); } @@ -383,6 +386,15 @@ dwc_descriptor_complete(dwc, desc, true); } +/* Returns how many bytes were already received from source */ +static inline u32 dwc_get_sent(struct dw_dma_chan *dwc) +{ + u32 ctlhi = channel_readl(dwc, CTL_HI); + u32 ctllo = channel_readl(dwc, CTL_LO); + + return (ctlhi & DWC_CTLH_BLOCK_TS_MASK) * (1 << (ctllo >> 4 & 7)); +} + static void dwc_scan_descriptors(struct dw_dma *dw, struct dw_dma_chan *dwc) { dma_addr_t llp; @@ -398,6 +410,39 @@ if (status_xfer & dwc->mask) { /* Everything we've submitted is done */ dma_writel(dw, CLEAR.XFER, dwc->mask); + + if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags)) { + struct list_head *head, *active = dwc->tx_node_active; + + /* + * We are inside first active descriptor. + * Otherwise something is really wrong. + */ + desc = dwc_first_active(dwc); + + head = &desc->tx_list; + if (active != head) { + /* Update desc to reflect last sent one */ + if (active != head->next) + desc = to_dw_desc(active->prev); + + dwc->residue -= desc->len; + + child = to_dw_desc(active); + + /* Submit next block */ + dwc_do_single_block(dwc, child); + + spin_unlock_irqrestore(&dwc->lock, flags); + return; + } + + /* We are done here */ + clear_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags); + } + + dwc->residue = 0; + spin_unlock_irqrestore(&dwc->lock, flags); dwc_complete_all(dw, dwc); @@ -405,6 +450,13 @@ } if (list_empty(&dwc->active_list)) { + dwc->residue = 0; + spin_unlock_irqrestore(&dwc->lock, flags); + return; + } + + if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags)) { + dev_vdbg(chan2dev(&dwc->chan), "%s: soft LLP mode\n", __func__); spin_unlock_irqrestore(&dwc->lock, flags); return; } @@ -413,6 +465,9 @@ (unsigned long long)llp); list_for_each_entry_safe(desc, _desc, &dwc->active_list, desc_node) { + /* initial residue value */ + dwc->residue = desc->total_len; + /* check first descriptors addr */ if (desc->txd.phys == llp) { spin_unlock_irqrestore(&dwc->lock, flags); @@ -422,16 +477,21 @@ /* check first descriptors llp */ if (desc->lli.llp == llp) { /* This one is currently in progress */ + dwc->residue -= dwc_get_sent(dwc); spin_unlock_irqrestore(&dwc->lock, flags); return; } - list_for_each_entry(child, &desc->tx_list, desc_node) + dwc->residue -= desc->len; + list_for_each_entry(child, &desc->tx_list, desc_node) { if (child->lli.llp == llp) { /* Currently in progress */ + dwc->residue -= dwc_get_sent(dwc); spin_unlock_irqrestore(&dwc->lock, flags); return; } + dwc->residue -= child->len; + } /* * No descriptors so far seem to be in progress, i.e. @@ -457,9 +517,8 @@ static inline void dwc_dump_lli(struct dw_dma_chan *dwc, struct dw_lli *lli) { - dev_printk(KERN_CRIT, chan2dev(&dwc->chan), - " desc: s0x%x d0x%x l0x%x c0x%x:%x\n", - lli->sar, lli->dar, lli->llp, lli->ctlhi, lli->ctllo); + dev_crit(chan2dev(&dwc->chan), " desc: s0x%x d0x%x l0x%x c0x%x:%x\n", + lli->sar, lli->dar, lli->llp, lli->ctlhi, lli->ctllo); } static void dwc_handle_error(struct dw_dma *dw, struct dw_dma_chan *dwc) @@ -487,16 +546,14 @@ dwc_dostart(dwc, dwc_first_active(dwc)); /* - * KERN_CRITICAL may seem harsh, but since this only happens + * WARN may seem harsh, but since this only happens * when someone submits a bad physical address in a * descriptor, we should consider ourselves lucky that the * controller flagged an error instead of scribbling over * random memory locations. */ - dev_printk(KERN_CRIT, chan2dev(&dwc->chan), - "Bad descriptor submitted for DMA!\n"); - dev_printk(KERN_CRIT, chan2dev(&dwc->chan), - " cookie: %d\n", bad_desc->txd.cookie); + dev_WARN(chan2dev(&dwc->chan), "Bad descriptor submitted for DMA!\n" + " cookie: %d\n", bad_desc->txd.cookie); dwc_dump_lli(dwc, &bad_desc->lli); list_for_each_entry(child, &bad_desc->tx_list, desc_node) dwc_dump_lli(dwc, &child->lli); @@ -597,36 +654,8 @@ dwc_handle_cyclic(dw, dwc, status_err, status_xfer); else if (status_err & (1 << i)) dwc_handle_error(dw, dwc); - else if (status_xfer & (1 << i)) { - unsigned long flags; - - spin_lock_irqsave(&dwc->lock, flags); - if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags)) { - if (dwc->tx_node_active != dwc->tx_list) { - struct dw_desc *desc = - list_entry(dwc->tx_node_active, - struct dw_desc, - desc_node); - - dma_writel(dw, CLEAR.XFER, dwc->mask); - - /* move pointer to next descriptor */ - dwc->tx_node_active = - dwc->tx_node_active->next; - - dwc_do_single_block(dwc, desc); - - spin_unlock_irqrestore(&dwc->lock, flags); - continue; - } else { - /* we are done here */ - clear_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags); - } - } - spin_unlock_irqrestore(&dwc->lock, flags); - + else if (status_xfer & (1 << i)) dwc_scan_descriptors(dw, dwc); - } } /* @@ -708,7 +737,6 @@ size_t len, unsigned long flags) { struct dw_dma_chan *dwc = to_dw_dma_chan(chan); - struct dw_dma_slave *dws = chan->private; struct dw_desc *desc; struct dw_desc *first; struct dw_desc *prev; @@ -729,8 +757,10 @@ return NULL; } - data_width = min_t(unsigned int, dwc->dw->data_width[dwc_get_sms(dws)], - dwc->dw->data_width[dwc_get_dms(dws)]); + dwc->direction = DMA_MEM_TO_MEM; + + data_width = min_t(unsigned int, dwc_get_data_width(chan, SRC_MASTER), + dwc_get_data_width(chan, DST_MASTER)); src_width = dst_width = min_t(unsigned int, data_width, dwc_fast_fls(src | dest | len)); @@ -755,32 +785,25 @@ desc->lli.dar = dest + offset; desc->lli.ctllo = ctllo; desc->lli.ctlhi = xfer_count; + desc->len = xfer_count << src_width; if (!first) { first = desc; } else { prev->lli.llp = desc->txd.phys; - dma_sync_single_for_device(chan2parent(chan), - prev->txd.phys, sizeof(prev->lli), - DMA_TO_DEVICE); list_add_tail(&desc->desc_node, &first->tx_list); } prev = desc; } - if (flags & DMA_PREP_INTERRUPT) /* Trigger interrupt after last block */ prev->lli.ctllo |= DWC_CTLL_INT_EN; prev->lli.llp = 0; - dma_sync_single_for_device(chan2parent(chan), - prev->txd.phys, sizeof(prev->lli), - DMA_TO_DEVICE); - first->txd.flags = flags; - first->len = len; + first->total_len = len; return &first->txd; @@ -795,7 +818,6 @@ unsigned long flags, void *context) { struct dw_dma_chan *dwc = to_dw_dma_chan(chan); - struct dw_dma_slave *dws = chan->private; struct dma_slave_config *sconfig = &dwc->dma_sconfig; struct dw_desc *prev; struct dw_desc *first; @@ -810,9 +832,11 @@ dev_vdbg(chan2dev(chan), "%s\n", __func__); - if (unlikely(!dws || !sg_len)) + if (unlikely(!is_slave_direction(direction) || !sg_len)) return NULL; + dwc->direction = direction; + prev = first = NULL; switch (direction) { @@ -827,7 +851,7 @@ ctllo |= sconfig->device_fc ? DWC_CTLL_FC(DW_DMA_FC_P_M2P) : DWC_CTLL_FC(DW_DMA_FC_D_M2P); - data_width = dwc->dw->data_width[dwc_get_sms(dws)]; + data_width = dwc_get_data_width(chan, SRC_MASTER); for_each_sg(sgl, sg, sg_len, i) { struct dw_desc *desc; @@ -860,15 +884,12 @@ } desc->lli.ctlhi = dlen >> mem_width; + desc->len = dlen; if (!first) { first = desc; } else { prev->lli.llp = desc->txd.phys; - dma_sync_single_for_device(chan2parent(chan), - prev->txd.phys, - sizeof(prev->lli), - DMA_TO_DEVICE); list_add_tail(&desc->desc_node, &first->tx_list); } @@ -890,7 +911,7 @@ ctllo |= sconfig->device_fc ? DWC_CTLL_FC(DW_DMA_FC_P_P2M) : DWC_CTLL_FC(DW_DMA_FC_D_P2M); - data_width = dwc->dw->data_width[dwc_get_dms(dws)]; + data_width = dwc_get_data_width(chan, DST_MASTER); for_each_sg(sgl, sg, sg_len, i) { struct dw_desc *desc; @@ -922,15 +943,12 @@ len = 0; } desc->lli.ctlhi = dlen >> reg_width; + desc->len = dlen; if (!first) { first = desc; } else { prev->lli.llp = desc->txd.phys; - dma_sync_single_for_device(chan2parent(chan), - prev->txd.phys, - sizeof(prev->lli), - DMA_TO_DEVICE); list_add_tail(&desc->desc_node, &first->tx_list); } @@ -950,11 +968,7 @@ prev->lli.ctllo |= DWC_CTLL_INT_EN; prev->lli.llp = 0; - dma_sync_single_for_device(chan2parent(chan), - prev->txd.phys, sizeof(prev->lli), - DMA_TO_DEVICE); - - first->len = total_len; + first->total_len = total_len; return &first->txd; @@ -979,23 +993,52 @@ *maxburst = 0; } +static inline void convert_slave_id(struct dw_dma_chan *dwc) +{ + struct dw_dma *dw = to_dw_dma(dwc->chan.device); + + dwc->dma_sconfig.slave_id -= dw->request_line_base; +} + static int set_runtime_config(struct dma_chan *chan, struct dma_slave_config *sconfig) { struct dw_dma_chan *dwc = to_dw_dma_chan(chan); - /* Check if it is chan is configured for slave transfers */ - if (!chan->private) + /* Check if chan will be configured for slave transfers */ + if (!is_slave_direction(sconfig->direction)) return -EINVAL; memcpy(&dwc->dma_sconfig, sconfig, sizeof(*sconfig)); + dwc->direction = sconfig->direction; convert_burst(&dwc->dma_sconfig.src_maxburst); convert_burst(&dwc->dma_sconfig.dst_maxburst); + convert_slave_id(dwc); return 0; } +static inline void dwc_chan_pause(struct dw_dma_chan *dwc) +{ + u32 cfglo = channel_readl(dwc, CFG_LO); + + channel_writel(dwc, CFG_LO, cfglo | DWC_CFGL_CH_SUSP); + while (!(channel_readl(dwc, CFG_LO) & DWC_CFGL_FIFO_EMPTY)) + cpu_relax(); + + dwc->paused = true; +} + +static inline void dwc_chan_resume(struct dw_dma_chan *dwc) +{ + u32 cfglo = channel_readl(dwc, CFG_LO); + + channel_writel(dwc, CFG_LO, cfglo & ~DWC_CFGL_CH_SUSP); + + dwc->paused = false; +} + static int dwc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, unsigned long arg) { @@ -1003,18 +1046,13 @@ struct dw_dma *dw = to_dw_dma(chan->device); struct dw_desc *desc, *_desc; unsigned long flags; - u32 cfglo; LIST_HEAD(list); if (cmd == DMA_PAUSE) { spin_lock_irqsave(&dwc->lock, flags); - cfglo = channel_readl(dwc, CFG_LO); - channel_writel(dwc, CFG_LO, cfglo | DWC_CFGL_CH_SUSP); - while (!(channel_readl(dwc, CFG_LO) & DWC_CFGL_FIFO_EMPTY)) - cpu_relax(); + dwc_chan_pause(dwc); - dwc->paused = true; spin_unlock_irqrestore(&dwc->lock, flags); } else if (cmd == DMA_RESUME) { if (!dwc->paused) @@ -1022,9 +1060,7 @@ spin_lock_irqsave(&dwc->lock, flags); - cfglo = channel_readl(dwc, CFG_LO); - channel_writel(dwc, CFG_LO, cfglo & ~DWC_CFGL_CH_SUSP); - dwc->paused = false; + dwc_chan_resume(dwc); spin_unlock_irqrestore(&dwc->lock, flags); } else if (cmd == DMA_TERMINATE_ALL) { @@ -1054,6 +1090,21 @@ return 0; } +static inline u32 dwc_get_residue(struct dw_dma_chan *dwc) +{ + unsigned long flags; + u32 residue; + + spin_lock_irqsave(&dwc->lock, flags); + + residue = dwc->residue; + if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags) && residue) + residue -= dwc_get_sent(dwc); + + spin_unlock_irqrestore(&dwc->lock, flags); + return residue; +} + static enum dma_status dwc_tx_status(struct dma_chan *chan, dma_cookie_t cookie, @@ -1070,7 +1121,7 @@ } if (ret != DMA_SUCCESS) - dma_set_residue(txstate, dwc_first_active(dwc)->len); + dma_set_residue(txstate, dwc_get_residue(dwc)); if (dwc->paused) return DMA_PAUSED; @@ -1113,22 +1164,22 @@ spin_lock_irqsave(&dwc->lock, flags); i = dwc->descs_allocated; while (dwc->descs_allocated < NR_DESCS_PER_CHANNEL) { + dma_addr_t phys; + spin_unlock_irqrestore(&dwc->lock, flags); - desc = kzalloc(sizeof(struct dw_desc), GFP_KERNEL); - if (!desc) { - dev_info(chan2dev(chan), - "only allocated %d descriptors\n", i); - spin_lock_irqsave(&dwc->lock, flags); - break; - } + desc = dma_pool_alloc(dw->desc_pool, GFP_ATOMIC, &phys); + if (!desc) + goto err_desc_alloc; + + memset(desc, 0, sizeof(struct dw_desc)); INIT_LIST_HEAD(&desc->tx_list); dma_async_tx_descriptor_init(&desc->txd, chan); desc->txd.tx_submit = dwc_tx_submit; desc->txd.flags = DMA_CTRL_ACK; - desc->txd.phys = dma_map_single(chan2parent(chan), &desc->lli, - sizeof(desc->lli), DMA_TO_DEVICE); + desc->txd.phys = phys; + dwc_desc_put(dwc, desc); spin_lock_irqsave(&dwc->lock, flags); @@ -1140,6 +1191,11 @@ dev_dbg(chan2dev(chan), "%s: allocated %d descriptors\n", __func__, i); return i; + +err_desc_alloc: + dev_info(chan2dev(chan), "only allocated %d descriptors\n", i); + + return i; } static void dwc_free_chan_resources(struct dma_chan *chan) @@ -1171,14 +1227,56 @@ list_for_each_entry_safe(desc, _desc, &list, desc_node) { dev_vdbg(chan2dev(chan), " freeing descriptor %p\n", desc); - dma_unmap_single(chan2parent(chan), desc->txd.phys, - sizeof(desc->lli), DMA_TO_DEVICE); - kfree(desc); + dma_pool_free(dw->desc_pool, desc, desc->txd.phys); } dev_vdbg(chan2dev(chan), "%s: done\n", __func__); } +bool dw_dma_generic_filter(struct dma_chan *chan, void *param) +{ + struct dw_dma *dw = to_dw_dma(chan->device); + static struct dw_dma *last_dw; + static char *last_bus_id; + int i = -1; + + /* + * dmaengine framework calls this routine for all channels of all dma + * controller, until true is returned. If 'param' bus_id is not + * registered with a dma controller (dw), then there is no need of + * running below function for all channels of dw. + * + * This block of code does this by saving the parameters of last + * failure. If dw and param are same, i.e. trying on same dw with + * different channel, return false. + */ + if ((last_dw == dw) && (last_bus_id == param)) + return false; + /* + * Return true: + * - If dw_dma's platform data is not filled with slave info, then all + * dma controllers are fine for transfer. + * - Or if param is NULL + */ + if (!dw->sd || !param) + return true; + + while (++i < dw->sd_count) { + if (!strcmp(dw->sd[i].bus_id, param)) { + chan->private = &dw->sd[i]; + last_dw = NULL; + last_bus_id = NULL; + + return true; + } + } + + last_dw = dw; + last_bus_id = param; + return false; +} +EXPORT_SYMBOL(dw_dma_generic_filter); + /* --------------------- Cyclic DMA API extensions -------------------- */ /** @@ -1298,6 +1396,11 @@ retval = ERR_PTR(-EINVAL); + if (unlikely(!is_slave_direction(direction))) + goto out_err; + + dwc->direction = direction; + if (direction == DMA_MEM_TO_DEV) reg_width = __ffs(sconfig->dst_addr_width); else @@ -1312,8 +1415,6 @@ goto out_err; if (unlikely(buf_addr & ((1 << reg_width) - 1))) goto out_err; - if (unlikely(!(direction & (DMA_MEM_TO_DEV | DMA_DEV_TO_MEM)))) - goto out_err; retval = ERR_PTR(-ENOMEM); @@ -1371,20 +1472,14 @@ desc->lli.ctlhi = (period_len >> reg_width); cdesc->desc[i] = desc; - if (last) { + if (last) last->lli.llp = desc->txd.phys; - dma_sync_single_for_device(chan2parent(chan), - last->txd.phys, sizeof(last->lli), - DMA_TO_DEVICE); - } last = desc; } /* lets make a cyclic list */ last->lli.llp = cdesc->desc[0]->txd.phys; - dma_sync_single_for_device(chan2parent(chan), last->txd.phys, - sizeof(last->lli), DMA_TO_DEVICE); dev_dbg(chan2dev(&dwc->chan), "cyclic prepared buf 0x%llx len %zu " "period %zu periods %d\n", (unsigned long long)buf_addr, @@ -1462,8 +1557,94 @@ dw->chan[i].initialized = false; } +#ifdef CONFIG_OF +static struct dw_dma_platform_data * +dw_dma_parse_dt(struct platform_device *pdev) +{ + struct device_node *sn, *cn, *np = pdev->dev.of_node; + struct dw_dma_platform_data *pdata; + struct dw_dma_slave *sd; + u32 tmp, arr[4]; + + if (!np) { + dev_err(&pdev->dev, "Missing DT data\n"); + return NULL; + } + + pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) + return NULL; + + if (of_property_read_u32(np, "nr_channels", &pdata->nr_channels)) + return NULL; + + if (of_property_read_bool(np, "is_private")) + pdata->is_private = true; + + if (!of_property_read_u32(np, "chan_allocation_order", &tmp)) + pdata->chan_allocation_order = (unsigned char)tmp; + + if (!of_property_read_u32(np, "chan_priority", &tmp)) + pdata->chan_priority = tmp; + + if (!of_property_read_u32(np, "block_size", &tmp)) + pdata->block_size = tmp; + + if (!of_property_read_u32(np, "nr_masters", &tmp)) { + if (tmp > 4) + return NULL; + + pdata->nr_masters = tmp; + } + + if (!of_property_read_u32_array(np, "data_width", arr, + pdata->nr_masters)) + for (tmp = 0; tmp < pdata->nr_masters; tmp++) + pdata->data_width[tmp] = arr[tmp]; + + /* parse slave data */ + sn = of_find_node_by_name(np, "slave_info"); + if (!sn) + return pdata; + + /* calculate number of slaves */ + tmp = of_get_child_count(sn); + if (!tmp) + return NULL; + + sd = devm_kzalloc(&pdev->dev, sizeof(*sd) * tmp, GFP_KERNEL); + if (!sd) + return NULL; + + pdata->sd = sd; + pdata->sd_count = tmp; + + for_each_child_of_node(sn, cn) { + sd->dma_dev = &pdev->dev; + of_property_read_string(cn, "bus_id", &sd->bus_id); + of_property_read_u32(cn, "cfg_hi", &sd->cfg_hi); + of_property_read_u32(cn, "cfg_lo", &sd->cfg_lo); + if (!of_property_read_u32(cn, "src_master", &tmp)) + sd->src_master = tmp; + + if (!of_property_read_u32(cn, "dst_master", &tmp)) + sd->dst_master = tmp; + sd++; + } + + return pdata; +} +#else +static inline struct dw_dma_platform_data * +dw_dma_parse_dt(struct platform_device *pdev) +{ + return NULL; +} +#endif + static int dw_probe(struct platform_device *pdev) { + const struct platform_device_id *match; struct dw_dma_platform_data *pdata; struct resource *io; struct dw_dma *dw; @@ -1477,10 +1658,6 @@ int err; int i; - pdata = dev_get_platdata(&pdev->dev); - if (!pdata || pdata->nr_channels > DW_DMA_MAX_NR_CHANNELS) - return -EINVAL; - io = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!io) return -EINVAL; @@ -1493,9 +1670,33 @@ if (!regs) return -EBUSY; + /* Apply default dma_mask if needed */ + if (!pdev->dev.dma_mask) { + pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask; + pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); + } + dw_params = dma_read_byaddr(regs, DW_PARAMS); autocfg = dw_params >> DW_PARAMS_EN & 0x1; + dev_dbg(&pdev->dev, "DW_PARAMS: 0x%08x\n", dw_params); + + pdata = dev_get_platdata(&pdev->dev); + if (!pdata) + pdata = dw_dma_parse_dt(pdev); + + if (!pdata && autocfg) { + pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) + return -ENOMEM; + + /* Fill platform data with the default values */ + pdata->is_private = true; + pdata->chan_allocation_order = CHAN_ALLOCATION_ASCENDING; + pdata->chan_priority = CHAN_PRIORITY_ASCENDING; + } else if (!pdata || pdata->nr_channels > DW_DMA_MAX_NR_CHANNELS) + return -EINVAL; + if (autocfg) nr_channels = (dw_params >> DW_PARAMS_NR_CHAN & 0x7) + 1; else @@ -1512,6 +1713,8 @@ clk_prepare_enable(dw->clk); dw->regs = regs; + dw->sd = pdata->sd; + dw->sd_count = pdata->sd_count; /* get hardware configuration parameters */ if (autocfg) { @@ -1527,6 +1730,11 @@ memcpy(dw->data_width, pdata->data_width, 4); } + /* Get the base request line if set */ + match = platform_get_device_id(pdev); + if (match) + dw->request_line_base = (unsigned int)match->driver_data; + /* Calculate all channel mask before DMA setup */ dw->all_chan_mask = (1 << nr_channels) - 1; @@ -1543,6 +1751,14 @@ platform_set_drvdata(pdev, dw); + /* create a pool of consistent memory blocks for hardware descriptors */ + dw->desc_pool = dmam_pool_create("dw_dmac_desc_pool", &pdev->dev, + sizeof(struct dw_desc), 4, 0); + if (!dw->desc_pool) { + dev_err(&pdev->dev, "No memory for descriptors dma pool\n"); + return -ENOMEM; + } + tasklet_init(&dw->tasklet, dw_dma_tasklet, (unsigned long)dw); INIT_LIST_HEAD(&dw->dma.channels); @@ -1574,7 +1790,7 @@ channel_clear_bit(dw, CH_EN, dwc->mask); - dwc->dw = dw; + dwc->direction = DMA_TRANS_NONE; /* hardware configuration */ if (autocfg) { @@ -1583,6 +1799,9 @@ dwc_params = dma_read_byaddr(regs + r * sizeof(u32), DWC_PARAMS); + dev_dbg(&pdev->dev, "DWC_PARAMS[%d]: 0x%08x\n", i, + dwc_params); + /* Decode maximum block size for given channel. The * stored 4 bit value represents blocks from 0x00 for 3 * up to 0x0a for 4095. */ @@ -1626,8 +1845,8 @@ dma_writel(dw, CFG, DW_CFG_DMA_EN); - printk(KERN_INFO "%s: DesignWare DMA Controller, %d channels\n", - dev_name(&pdev->dev), nr_channels); + dev_info(&pdev->dev, "DesignWare DMA Controller, %d channels\n", + nr_channels); dma_async_device_register(&dw->dma); @@ -1657,7 +1876,7 @@ { struct dw_dma *dw = platform_get_drvdata(pdev); - dw_dma_off(platform_get_drvdata(pdev)); + dw_dma_off(dw); clk_disable_unprepare(dw->clk); } @@ -1666,7 +1885,7 @@ struct platform_device *pdev = to_platform_device(dev); struct dw_dma *dw = platform_get_drvdata(pdev); - dw_dma_off(platform_get_drvdata(pdev)); + dw_dma_off(dw); clk_disable_unprepare(dw->clk); return 0; @@ -1679,6 +1898,7 @@ clk_prepare_enable(dw->clk); dma_writel(dw, CFG, DW_CFG_DMA_EN); + return 0; } @@ -1699,7 +1919,14 @@ MODULE_DEVICE_TABLE(of, dw_dma_id_table); #endif +static const struct platform_device_id dw_dma_ids[] = { + /* Name, Request Line Base */ + { "INTL9C60", (kernel_ulong_t)16 }, + { } +}; + static struct platform_driver dw_driver = { + .probe = dw_probe, .remove = dw_remove, .shutdown = dw_shutdown, .driver = { @@ -1707,11 +1934,12 @@ .pm = &dw_dev_pm_ops, .of_match_table = of_match_ptr(dw_dma_id_table), }, + .id_table = dw_dma_ids, }; static int __init dw_init(void) { - return platform_driver_probe(&dw_driver, dw_probe); + return platform_driver_register(&dw_driver); } subsys_initcall(dw_init); --- linux-lts-raring-3.8.0.orig/drivers/dma/ste_dma40.c +++ linux-lts-raring-3.8.0/drivers/dma/ste_dma40.c @@ -1392,10 +1392,12 @@ return; } - if (d40_queue_start(d40c) == NULL) + if (d40_queue_start(d40c) == NULL) { d40c->busy = false; - pm_runtime_mark_last_busy(d40c->base->dev); - pm_runtime_put_autosuspend(d40c->base->dev); + + pm_runtime_mark_last_busy(d40c->base->dev); + pm_runtime_put_autosuspend(d40c->base->dev); + } } d40c->pending_tx++; @@ -2337,7 +2339,7 @@ unsigned long dma_flags, void *context) { - if (direction != DMA_DEV_TO_MEM && direction != DMA_MEM_TO_DEV) + if (!is_slave_direction(direction)) return NULL; return d40_prep_sg(chan, sgl, sgl, sg_len, direction, dma_flags); --- linux-lts-raring-3.8.0.orig/drivers/dma/pch_dma.c +++ linux-lts-raring-3.8.0/drivers/dma/pch_dma.c @@ -476,7 +476,7 @@ dev_dbg(chan2dev(&pd_chan->chan), "scanned %d descriptors\n", i); if (!ret) { - ret = pdc_alloc_desc(&pd_chan->chan, GFP_NOIO); + ret = pdc_alloc_desc(&pd_chan->chan, GFP_ATOMIC); if (ret) { spin_lock(&pd_chan->lock); pd_chan->descs_allocated++; --- linux-lts-raring-3.8.0.orig/drivers/dma/dw_dmac_regs.h +++ linux-lts-raring-3.8.0/drivers/dma/dw_dmac_regs.h @@ -9,6 +9,7 @@ * published by the Free Software Foundation. */ +#include #include #define DW_DMA_MAX_NR_CHANNELS 8 @@ -184,15 +185,15 @@ }; struct dw_dma_chan { - struct dma_chan chan; - void __iomem *ch_regs; - u8 mask; - u8 priority; - bool paused; - bool initialized; + struct dma_chan chan; + void __iomem *ch_regs; + u8 mask; + u8 priority; + enum dma_transfer_direction direction; + bool paused; + bool initialized; /* software emulation of the LLP transfers */ - struct list_head *tx_list; struct list_head *tx_node_active; spinlock_t lock; @@ -202,6 +203,7 @@ struct list_head active_list; struct list_head queue; struct list_head free_list; + u32 residue; struct dw_cyclic_desc *cdesc; unsigned int descs_allocated; @@ -212,9 +214,6 @@ /* configuration passed via DMA_SLAVE_CONFIG */ struct dma_slave_config dma_sconfig; - - /* backlink to dw_dma */ - struct dw_dma *dw; }; static inline struct dw_dma_chan_regs __iomem * @@ -236,14 +235,20 @@ struct dw_dma { struct dma_device dma; void __iomem *regs; + struct dma_pool *desc_pool; struct tasklet_struct tasklet; struct clk *clk; + /* slave information */ + struct dw_dma_slave *sd; + unsigned int sd_count; + u8 all_chan_mask; /* hardware configuration */ unsigned char nr_masters; unsigned char data_width[4]; + unsigned int request_line_base; struct dw_dma_chan chan[0]; }; @@ -293,8 +298,11 @@ struct list_head tx_list; struct dma_async_tx_descriptor txd; size_t len; + size_t total_len; }; +#define to_dw_desc(h) list_entry(h, struct dw_desc, desc_node) + static inline struct dw_desc * txd_to_dw_desc(struct dma_async_tx_descriptor *txd) { --- linux-lts-raring-3.8.0.orig/drivers/dma/pl330.c +++ linux-lts-raring-3.8.0/drivers/dma/pl330.c @@ -2459,10 +2459,10 @@ struct dma_pl330_chan *pch = to_pchan(chan); unsigned long flags; - spin_lock_irqsave(&pch->lock, flags); - tasklet_kill(&pch->task); + spin_lock_irqsave(&pch->lock, flags); + pl330_release_channel(pch->pl330_chid); pch->pl330_chid = NULL; --- linux-lts-raring-3.8.0.orig/drivers/dma/tegra20-apb-dma.c +++ linux-lts-raring-3.8.0/drivers/dma/tegra20-apb-dma.c @@ -1158,6 +1158,7 @@ list_splice_init(&tdc->free_dma_desc, &dma_desc_list); INIT_LIST_HEAD(&tdc->cb_desc); tdc->config_init = false; + tdc->isr_handler = NULL; spin_unlock_irqrestore(&tdc->lock, flags); while (!list_empty(&dma_desc_list)) { --- linux-lts-raring-3.8.0.orig/drivers/dma/ipu/ipu_idmac.c +++ linux-lts-raring-3.8.0/drivers/dma/ipu/ipu_idmac.c @@ -1347,7 +1347,7 @@ chan->chan_id != IDMAC_IC_7) return NULL; - if (direction != DMA_DEV_TO_MEM && direction != DMA_MEM_TO_DEV) { + if (!is_slave_direction(direction)) { dev_err(chan->device->dev, "Invalid DMA direction %d!\n", direction); return NULL; } --- linux-lts-raring-3.8.0.orig/drivers/dma/sh/shdma.c +++ linux-lts-raring-3.8.0/drivers/dma/sh/shdma.c @@ -326,7 +326,7 @@ shdma_chan); const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, slave_id); if (!cfg) - return -ENODEV; + return -ENXIO; if (!try) sh_chan->config = cfg; --- linux-lts-raring-3.8.0.orig/drivers/acpi/Kconfig +++ linux-lts-raring-3.8.0/drivers/acpi/Kconfig @@ -268,7 +268,8 @@ default ACPI_CUSTOM_DSDT_FILE != "" config ACPI_INITRD_TABLE_OVERRIDE - bool "ACPI tables can be passed via uncompressed cpio in initrd" + bool "ACPI tables override via initrd" + depends on BLK_DEV_INITRD && X86 default n help This option provides functionality to override arbitrary ACPI tables --- linux-lts-raring-3.8.0.orig/drivers/acpi/video.c +++ linux-lts-raring-3.8.0/drivers/acpi/video.c @@ -73,6 +73,14 @@ module_param(brightness_switch_enabled, bool, 0644); /* + * The Default is to let the OS handle brightness autoswitching due to + * AC/battery status changes. On some laptops (MSI Wind) this doesn't + * work so we need a workaround. + */ +static bool brightness_autoswitch_via_bios = false; +module_param(brightness_autoswitch_via_bios, bool, 0644); + +/* * By default, we don't allow duplicate ACPI video bus devices * under the same VGA controller */ @@ -447,6 +455,46 @@ DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"), }, }, + { + .callback = video_ignore_initial_backlight, + .ident = "Fujitsu E753", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "FUJITSU"), + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E753"), + }, + }, + { + .callback = video_ignore_initial_backlight, + .ident = "HP Pavilion dm4", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dm4 Notebook PC"), + }, + }, + { + .callback = video_ignore_initial_backlight, + .ident = "HP Pavilion g6 Notebook PC", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion g6 Notebook PC"), + }, + }, + { + .callback = video_ignore_initial_backlight, + .ident = "HP 1000 Notebook PC", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP 1000 Notebook PC"), + }, + }, + { + .callback = video_ignore_initial_backlight, + .ident = "HP Pavilion m4", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion m4 Notebook PC"), + }, + }, {} }; @@ -1442,7 +1490,7 @@ static int acpi_video_bus_start_devices(struct acpi_video_bus *video) { - return acpi_video_bus_DOS(video, 0, 0); + return acpi_video_bus_DOS(video, 0, !brightness_autoswitch_via_bios); } static int acpi_video_bus_stop_devices(struct acpi_video_bus *video) --- linux-lts-raring-3.8.0.orig/drivers/acpi/acpi_memhotplug.c +++ linux-lts-raring-3.8.0/drivers/acpi/acpi_memhotplug.c @@ -406,6 +406,7 @@ /* Get the range from the _CRS */ result = acpi_memory_get_device_resources(mem_device); if (result) { + device->driver_data = NULL; kfree(mem_device); return result; } --- linux-lts-raring-3.8.0.orig/drivers/acpi/battery.c +++ linux-lts-raring-3.8.0/drivers/acpi/battery.c @@ -117,6 +117,7 @@ struct acpi_device *device; struct notifier_block pm_nb; unsigned long update_time; + int revision; int rate_now; int capacity_now; int voltage_now; @@ -359,6 +360,7 @@ }; static struct acpi_offsets extended_info_offsets[] = { + {offsetof(struct acpi_battery, revision), 0}, {offsetof(struct acpi_battery, power_unit), 0}, {offsetof(struct acpi_battery, design_capacity), 0}, {offsetof(struct acpi_battery, full_charge_capacity), 0}, --- linux-lts-raring-3.8.0.orig/drivers/acpi/glue.c +++ linux-lts-raring-3.8.0/drivers/acpi/glue.c @@ -95,40 +95,31 @@ return ret; } -/* Get device's handler per its address under its parent */ -struct acpi_find_child { - acpi_handle handle; - u64 address; -}; - -static acpi_status -do_acpi_find_child(acpi_handle handle, u32 lvl, void *context, void **rv) +static acpi_status do_acpi_find_child(acpi_handle handle, u32 lvl_not_used, + void *addr_p, void **ret_p) { + unsigned long long addr; acpi_status status; - struct acpi_device_info *info; - struct acpi_find_child *find = context; - status = acpi_get_object_info(handle, &info); - if (ACPI_SUCCESS(status)) { - if ((info->address == find->address) - && (info->valid & ACPI_VALID_ADR)) - find->handle = handle; - kfree(info); + status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &addr); + if (ACPI_SUCCESS(status) && addr == *((u64 *)addr_p)) { + *ret_p = handle; + return AE_CTRL_TERMINATE; } return AE_OK; } acpi_handle acpi_get_child(acpi_handle parent, u64 address) { - struct acpi_find_child find = { NULL, address }; + void *ret = NULL; if (!parent) return NULL; - acpi_walk_namespace(ACPI_TYPE_DEVICE, parent, - 1, do_acpi_find_child, NULL, &find, NULL); - return find.handle; -} + acpi_walk_namespace(ACPI_TYPE_DEVICE, parent, 1, NULL, + do_acpi_find_child, &address, &ret); + return (acpi_handle)ret; +} EXPORT_SYMBOL(acpi_get_child); static int acpi_bind_one(struct device *dev, acpi_handle handle) --- linux-lts-raring-3.8.0.orig/drivers/acpi/ec.c +++ linux-lts-raring-3.8.0/drivers/acpi/ec.c @@ -223,7 +223,7 @@ static int ec_poll(struct acpi_ec *ec) { unsigned long flags; - int repeat = 2; /* number of command restarts */ + int repeat = 5; /* number of command restarts */ while (repeat--) { unsigned long delay = jiffies + msecs_to_jiffies(ec_delay); @@ -241,8 +241,6 @@ } advance_transaction(ec, acpi_ec_read_status(ec)); } while (time_before(jiffies, delay)); - if (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF) - break; pr_debug(PREFIX "controller reset, restart transaction\n"); spin_lock_irqsave(&ec->lock, flags); start_transaction(ec); @@ -985,6 +983,14 @@ ec_enlarge_storm_threshold, "CLEVO hardware", { DMI_MATCH(DMI_SYS_VENDOR, "CLEVO Co."), DMI_MATCH(DMI_PRODUCT_NAME, "M720T/M730T"),}, NULL}, + { + ec_skip_dsdt_scan, "HP Folio 13", { + DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13"),}, NULL}, + { + ec_validate_ecdt, "ASUS hardware", { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTek Computer Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "L4R"),}, NULL}, {}, }; --- linux-lts-raring-3.8.0.orig/drivers/acpi/sleep.c +++ linux-lts-raring-3.8.0/drivers/acpi/sleep.c @@ -177,6 +177,14 @@ }, { .callback = init_nvs_nosave, + .ident = "Sony Vaio VGN-FW41E_H", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FW41E_H"), + }, + }, + { + .callback = init_nvs_nosave, .ident = "Sony Vaio VGN-FW21E", .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), --- linux-lts-raring-3.8.0.orig/drivers/acpi/power.c +++ linux-lts-raring-3.8.0/drivers/acpi/power.c @@ -256,7 +256,7 @@ if (resource->ref_count++) { ACPI_DEBUG_PRINT((ACPI_DB_INFO, - "Power resource [%s] already on", + "Power resource [%s] already on\n", resource->name)); } else { result = __acpi_power_on(resource); @@ -298,7 +298,7 @@ if (!resource->ref_count) { ACPI_DEBUG_PRINT((ACPI_DB_INFO, - "Power resource [%s] already off", + "Power resource [%s] already off\n", resource->name)); goto unlock; } --- linux-lts-raring-3.8.0.orig/drivers/acpi/proc.c +++ linux-lts-raring-3.8.0/drivers/acpi/proc.c @@ -311,11 +311,14 @@ dev->pnp.bus_id, (u32) dev->wakeup.sleep_state); - if (!dev->physical_node_count) + mutex_lock(&dev->physical_node_lock); + + if (!dev->physical_node_count) { seq_printf(seq, "%c%-8s\n", - dev->wakeup.flags.run_wake ? - '*' : ' ', "disabled"); - else { + dev->wakeup.flags.run_wake ? '*' : ' ', + device_may_wakeup(&dev->dev) ? + "enabled" : "disabled"); + } else { struct device *ldev; list_for_each_entry(entry, &dev->physical_node_list, node) { @@ -337,6 +340,8 @@ put_device(ldev); } } + + mutex_unlock(&dev->physical_node_lock); } mutex_unlock(&acpi_device_lock); return 0; @@ -346,12 +351,16 @@ { struct acpi_device_physical_node *entry; + mutex_lock(&adev->physical_node_lock); + list_for_each_entry(entry, &adev->physical_node_list, node) if (entry->dev && device_can_wakeup(entry->dev)) { bool enable = !device_may_wakeup(entry->dev); device_set_wakeup_enable(entry->dev, enable); } + + mutex_unlock(&adev->physical_node_lock); } static ssize_t --- linux-lts-raring-3.8.0.orig/drivers/acpi/video_detect.c +++ linux-lts-raring-3.8.0/drivers/acpi/video_detect.c @@ -164,6 +164,14 @@ DMI_MATCH(DMI_PRODUCT_NAME, "UL30VT"), }, }, + { + .callback = video_detect_force_vendor, + .ident = "Asus UL30A", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "UL30A"), + }, + }, { }, }; --- linux-lts-raring-3.8.0.orig/drivers/acpi/osl.c +++ linux-lts-raring-3.8.0/drivers/acpi/osl.c @@ -642,7 +642,7 @@ * Both memblock_reserve and e820_add_region (via arch_reserve_mem_area) * works fine. */ - memblock_reserve(acpi_tables_addr, acpi_tables_addr + all_tables_size); + memblock_reserve(acpi_tables_addr, all_tables_size); arch_reserve_mem_area(acpi_tables_addr, all_tables_size); p = early_ioremap(acpi_tables_addr, all_tables_size); --- linux-lts-raring-3.8.0.orig/drivers/acpi/blacklist.c +++ linux-lts-raring-3.8.0/drivers/acpi/blacklist.c @@ -193,6 +193,13 @@ return 0; } +static int __init dmi_disable_osi_win8(const struct dmi_system_id *d) +{ + printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident); + acpi_osi_setup("!Windows 2012"); + return 0; +} + static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { { .callback = dmi_disable_osi_vista, @@ -268,6 +275,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-lts-raring-3.8.0.orig/drivers/acpi/pci_root.c +++ linux-lts-raring-3.8.0/drivers/acpi/pci_root.c @@ -240,8 +240,8 @@ *control &= OSC_PCI_CONTROL_MASKS; capbuf[OSC_CONTROL_TYPE] = *control | root->osc_control_set; } else { - /* Run _OSC query for all possible controls. */ - capbuf[OSC_CONTROL_TYPE] = OSC_PCI_CONTROL_MASKS; + /* Run _OSC query only with existing controls. */ + capbuf[OSC_CONTROL_TYPE] = root->osc_control_set; } status = acpi_pci_run_osc(root->device->handle, capbuf, &result); @@ -454,7 +454,6 @@ acpi_handle handle; struct acpi_device *child; u32 flags, base_flags; - bool is_osc_granted = false; root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL); if (!root) @@ -525,60 +524,6 @@ flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT; acpi_pci_osc_support(root, flags); - /* Indicate support for various _OSC capabilities. */ - if (pci_ext_cfg_avail()) - flags |= OSC_EXT_PCI_CONFIG_SUPPORT; - if (pcie_aspm_support_enabled()) { - flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | - OSC_CLOCK_PWR_CAPABILITY_SUPPORT; - } - if (pci_msi_enabled()) - flags |= OSC_MSI_SUPPORT; - if (flags != base_flags) { - status = acpi_pci_osc_support(root, flags); - if (ACPI_FAILURE(status)) { - dev_info(&device->dev, "ACPI _OSC support " - "notification failed, disabling PCIe ASPM\n"); - pcie_no_aspm(); - flags = base_flags; - } - } - if (!pcie_ports_disabled - && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) { - flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL - | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL - | OSC_PCI_EXPRESS_PME_CONTROL; - - if (pci_aer_available()) { - if (aer_acpi_firmware_first()) - dev_dbg(&device->dev, - "PCIe errors handled by BIOS.\n"); - else - flags |= OSC_PCI_EXPRESS_AER_CONTROL; - } - - dev_info(&device->dev, - "Requesting ACPI _OSC control (0x%02x)\n", flags); - - status = acpi_pci_osc_control_set(device->handle, &flags, - OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); - if (ACPI_SUCCESS(status)) { - is_osc_granted = true; - dev_info(&device->dev, - "ACPI _OSC control (0x%02x) granted\n", flags); - } else { - is_osc_granted = false; - dev_info(&device->dev, - "ACPI _OSC request failed (%s), " - "returned control mask: 0x%02x\n", - acpi_format_exception(status), flags); - } - } else { - dev_info(&device->dev, - "Unable to request _OSC control " - "(_OSC support mask: 0x%02x)\n", flags); - } - /* * TBD: Need PCI interface for enumeration/configuration of roots. */ @@ -618,14 +563,66 @@ list_for_each_entry(child, &device->children, node) acpi_pci_bridge_scan(child); - /* ASPM setting */ - if (is_osc_granted) { - if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) - pcie_clear_aspm(root->bus); + /* Indicate support for various _OSC capabilities. */ + if (pci_ext_cfg_avail()) + flags |= OSC_EXT_PCI_CONFIG_SUPPORT; + if (pcie_aspm_support_enabled()) + flags |= OSC_ACTIVE_STATE_PWR_SUPPORT | + OSC_CLOCK_PWR_CAPABILITY_SUPPORT; + if (pci_msi_enabled()) + flags |= OSC_MSI_SUPPORT; + if (flags != base_flags) { + status = acpi_pci_osc_support(root, flags); + if (ACPI_FAILURE(status)) { + dev_info(root->bus->bridge, "ACPI _OSC support " + "notification failed, disabling PCIe ASPM\n"); + pcie_no_aspm(); + flags = base_flags; + } + } + + if (!pcie_ports_disabled + && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) { + flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL + | OSC_PCI_EXPRESS_NATIVE_HP_CONTROL + | OSC_PCI_EXPRESS_PME_CONTROL; + + if (pci_aer_available()) { + if (aer_acpi_firmware_first()) + dev_dbg(root->bus->bridge, + "PCIe errors handled by BIOS.\n"); + else + flags |= OSC_PCI_EXPRESS_AER_CONTROL; + } + + dev_info(root->bus->bridge, + "Requesting ACPI _OSC control (0x%02x)\n", flags); + + status = acpi_pci_osc_control_set(device->handle, &flags, + OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); + if (ACPI_SUCCESS(status)) { + dev_info(root->bus->bridge, + "ACPI _OSC control (0x%02x) granted\n", flags); + if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) { + /* + * We have ASPM control, but the FADT indicates + * that it's unsupported. Clear it. + */ + pcie_clear_aspm(root->bus); + } + } else { + dev_info(root->bus->bridge, + "ACPI _OSC request failed (%s), " + "returned control mask: 0x%02x\n", + acpi_format_exception(status), flags); + pr_info("ACPI _OSC control for PCIe not granted, " + "disabling ASPM\n"); + pcie_no_aspm(); + } } else { - pr_info("ACPI _OSC control for PCIe not granted, " - "disabling ASPM\n"); - pcie_no_aspm(); + dev_info(root->bus->bridge, + "Unable to request _OSC control " + "(_OSC support mask: 0x%02x)\n", flags); } pci_acpi_add_bus_pm_notifier(device, root->bus); --- linux-lts-raring-3.8.0.orig/drivers/acpi/thermal.c +++ linux-lts-raring-3.8.0/drivers/acpi/thermal.c @@ -719,9 +719,19 @@ return -EINVAL; if (type == THERMAL_TRIP_ACTIVE) { - /* aggressive active cooling */ - *trend = THERMAL_TREND_RAISING; - return 0; + unsigned long trip_temp; + unsigned long temp = KELVIN_TO_MILLICELSIUS(tz->temperature, + tz->kelvin_offset); + if (thermal_get_trip_temp(thermal, trip, &trip_temp)) + return -EINVAL; + + if (temp > trip_temp) { + *trend = THERMAL_TREND_RAISING; + return 0; + } else { + /* Fall back on default trend */ + return -EINVAL; + } } /* --- linux-lts-raring-3.8.0.orig/drivers/acpi/acpica/dsmethod.c +++ linux-lts-raring-3.8.0/drivers/acpi/acpica/dsmethod.c @@ -151,6 +151,7 @@ status = acpi_os_create_mutex(&mutex_desc->mutex.os_mutex); if (ACPI_FAILURE(status)) { + acpi_ut_delete_object_desc(mutex_desc); return_ACPI_STATUS(status); } --- linux-lts-raring-3.8.0.orig/drivers/acpi/acpica/exfldio.c +++ linux-lts-raring-3.8.0/drivers/acpi/acpica/exfldio.c @@ -721,7 +721,19 @@ if ((obj_desc->common_field.start_field_bit_offset == 0) && (obj_desc->common_field.bit_length == access_bit_width)) { - status = acpi_ex_field_datum_io(obj_desc, 0, buffer, ACPI_READ); + if (buffer_length >= sizeof(u64)) { + status = + acpi_ex_field_datum_io(obj_desc, 0, buffer, + ACPI_READ); + } else { + /* Use raw_datum (u64) to handle buffers < 64 bits */ + + status = + acpi_ex_field_datum_io(obj_desc, 0, &raw_datum, + ACPI_READ); + ACPI_MEMCPY(buffer, &raw_datum, buffer_length); + } + return_ACPI_STATUS(status); } --- linux-lts-raring-3.8.0.orig/drivers/acpi/acpica/hwxfsleep.c +++ linux-lts-raring-3.8.0/drivers/acpi/acpica/hwxfsleep.c @@ -240,12 +240,14 @@ &acpi_sleep_dispatch[function_id]; #if (!ACPI_REDUCED_HARDWARE) - /* * If the Hardware Reduced flag is set (from the FADT), we must - * use the extended sleep registers + * use the extended sleep registers (FADT). Note: As per the ACPI + * specification, these extended registers are to be used for HW-reduced + * platforms only. They are not general-purpose replacements for the + * legacy PM register sleep support. */ - if (acpi_gbl_reduced_hardware || acpi_gbl_FADT.sleep_control.address) { + if (acpi_gbl_reduced_hardware) { status = sleep_functions->extended_function(sleep_state); } else { /* Legacy sleep */ --- linux-lts-raring-3.8.0.orig/drivers/cpuidle/cpuidle-calxeda.c +++ linux-lts-raring-3.8.0/drivers/cpuidle/cpuidle-calxeda.c @@ -141,6 +141,7 @@ dev = per_cpu_ptr(calxeda_idle_cpuidle_devices, cpu_id); dev->cpu = cpu_id; dev->state_count = drv->state_count; + dev->states_usage[1].disable = 1; ret = cpuidle_register_device(dev); if (ret) { --- linux-lts-raring-3.8.0.orig/drivers/cpuidle/coupled.c +++ linux-lts-raring-3.8.0/drivers/cpuidle/coupled.c @@ -106,6 +106,7 @@ cpumask_t coupled_cpus; int requested_state[NR_CPUS]; atomic_t ready_waiting_counts; + atomic_t abort_barrier; int online_count; int refcnt; int prevent; @@ -122,12 +123,19 @@ static DEFINE_PER_CPU(struct call_single_data, cpuidle_coupled_poke_cb); /* - * The cpuidle_coupled_poked_mask mask is used to avoid calling + * The cpuidle_coupled_poke_pending mask is used to avoid calling * __smp_call_function_single with the per cpu call_single_data struct already * in use. This prevents a deadlock where two cpus are waiting for each others * call_single_data struct to be available */ -static cpumask_t cpuidle_coupled_poked_mask; +static cpumask_t cpuidle_coupled_poke_pending; + +/* + * The cpuidle_coupled_poked mask is used to ensure that each cpu has been poked + * once to minimize entering the ready loop with a poke pending, which would + * require aborting and retrying. + */ +static cpumask_t cpuidle_coupled_poked; /** * cpuidle_coupled_parallel_barrier - synchronize all online coupled cpus @@ -291,10 +299,11 @@ return state; } -static void cpuidle_coupled_poked(void *info) +static void cpuidle_coupled_handle_poke(void *info) { int cpu = (unsigned long)info; - cpumask_clear_cpu(cpu, &cpuidle_coupled_poked_mask); + cpumask_set_cpu(cpu, &cpuidle_coupled_poked); + cpumask_clear_cpu(cpu, &cpuidle_coupled_poke_pending); } /** @@ -313,7 +322,7 @@ { struct call_single_data *csd = &per_cpu(cpuidle_coupled_poke_cb, cpu); - if (!cpumask_test_and_set_cpu(cpu, &cpuidle_coupled_poked_mask)) + if (!cpumask_test_and_set_cpu(cpu, &cpuidle_coupled_poke_pending)) __smp_call_function_single(cpu, csd, 0); } @@ -340,30 +349,19 @@ * @coupled: the struct coupled that contains the current cpu * @next_state: the index in drv->states of the requested state for this cpu * - * Updates the requested idle state for the specified cpuidle device, - * poking all coupled cpus out of idle if necessary to let them see the new - * state. + * Updates the requested idle state for the specified cpuidle device. + * Returns the number of waiting cpus. */ -static void cpuidle_coupled_set_waiting(int cpu, +static int cpuidle_coupled_set_waiting(int cpu, struct cpuidle_coupled *coupled, int next_state) { - int w; - coupled->requested_state[cpu] = next_state; /* - * If this is the last cpu to enter the waiting state, poke - * all the other cpus out of their waiting state so they can - * enter a deeper state. This can race with one of the cpus - * exiting the waiting state due to an interrupt and - * decrementing waiting_count, see comment below. - * * The atomic_inc_return provides a write barrier to order the write * to requested_state with the later write that increments ready_count. */ - w = atomic_inc_return(&coupled->ready_waiting_counts) & WAITING_MASK; - if (w == coupled->online_count) - cpuidle_coupled_poke_others(cpu, coupled); + return atomic_inc_return(&coupled->ready_waiting_counts) & WAITING_MASK; } /** @@ -410,19 +408,33 @@ * been processed and the poke bit has been cleared. * * Other interrupts may also be processed while interrupts are enabled, so - * need_resched() must be tested after turning interrupts off again to make sure + * need_resched() must be tested after this function returns to make sure * the interrupt didn't schedule work that should take the cpu out of idle. * - * Returns 0 if need_resched was false, -EINTR if need_resched was true. + * Returns 0 if no poke was pending, 1 if a poke was cleared. */ static int cpuidle_coupled_clear_pokes(int cpu) { + if (!cpumask_test_cpu(cpu, &cpuidle_coupled_poke_pending)) + return 0; + local_irq_enable(); - while (cpumask_test_cpu(cpu, &cpuidle_coupled_poked_mask)) + while (cpumask_test_cpu(cpu, &cpuidle_coupled_poke_pending)) cpu_relax(); local_irq_disable(); - return need_resched() ? -EINTR : 0; + return 1; +} + +static bool cpuidle_coupled_any_pokes_pending(struct cpuidle_coupled *coupled) +{ + cpumask_t cpus; + int ret; + + cpumask_and(&cpus, cpu_online_mask, &coupled->coupled_cpus); + ret = cpumask_and(&cpus, &cpuidle_coupled_poke_pending, &cpus); + + return ret; } /** @@ -449,31 +461,56 @@ { int entered_state = -1; struct cpuidle_coupled *coupled = dev->coupled; + int w; if (!coupled) return -EINVAL; while (coupled->prevent) { - if (cpuidle_coupled_clear_pokes(dev->cpu)) { + cpuidle_coupled_clear_pokes(dev->cpu); + if (need_resched()) { local_irq_enable(); return entered_state; } entered_state = cpuidle_enter_state(dev, drv, dev->safe_state_index); + local_irq_disable(); } /* Read barrier ensures online_count is read after prevent is cleared */ smp_rmb(); - cpuidle_coupled_set_waiting(dev->cpu, coupled, next_state); +reset: + cpumask_clear_cpu(dev->cpu, &cpuidle_coupled_poked); + + w = cpuidle_coupled_set_waiting(dev->cpu, coupled, next_state); + /* + * If this is the last cpu to enter the waiting state, poke + * all the other cpus out of their waiting state so they can + * enter a deeper state. This can race with one of the cpus + * exiting the waiting state due to an interrupt and + * decrementing waiting_count, see comment below. + */ + if (w == coupled->online_count) { + cpumask_set_cpu(dev->cpu, &cpuidle_coupled_poked); + cpuidle_coupled_poke_others(dev->cpu, coupled); + } retry: /* * Wait for all coupled cpus to be idle, using the deepest state - * allowed for a single cpu. + * allowed for a single cpu. If this was not the poking cpu, wait + * for at least one poke before leaving to avoid a race where + * two cpus could arrive at the waiting loop at the same time, + * but the first of the two to arrive could skip the loop without + * processing the pokes from the last to arrive. */ - while (!cpuidle_coupled_cpus_waiting(coupled)) { - if (cpuidle_coupled_clear_pokes(dev->cpu)) { + while (!cpuidle_coupled_cpus_waiting(coupled) || + !cpumask_test_cpu(dev->cpu, &cpuidle_coupled_poked)) { + if (cpuidle_coupled_clear_pokes(dev->cpu)) + continue; + + if (need_resched()) { cpuidle_coupled_set_not_waiting(dev->cpu, coupled); goto out; } @@ -485,14 +522,22 @@ entered_state = cpuidle_enter_state(dev, drv, dev->safe_state_index); + local_irq_disable(); } - if (cpuidle_coupled_clear_pokes(dev->cpu)) { + cpuidle_coupled_clear_pokes(dev->cpu); + if (need_resched()) { cpuidle_coupled_set_not_waiting(dev->cpu, coupled); goto out; } /* + * Make sure final poke status for this cpu is visible before setting + * cpu as ready. + */ + smp_wmb(); + + /* * All coupled cpus are probably idle. There is a small chance that * one of the other cpus just became active. Increment the ready count, * and spin until all coupled cpus have incremented the counter. Once a @@ -511,6 +556,28 @@ cpu_relax(); } + /* + * Make sure read of all cpus ready is done before reading pending pokes + */ + smp_rmb(); + + /* + * There is a small chance that a cpu left and reentered idle after this + * cpu saw that all cpus were waiting. The cpu that reentered idle will + * have sent this cpu a poke, which will still be pending after the + * ready loop. The pending interrupt may be lost by the interrupt + * controller when entering the deep idle state. It's not possible to + * clear a pending interrupt without turning interrupts on and handling + * it, and it's too late to turn on interrupts here, so reset the + * coupled idle state of all cpus and retry. + */ + if (cpuidle_coupled_any_pokes_pending(coupled)) { + cpuidle_coupled_set_done(dev->cpu, coupled); + /* Wait for all cpus to see the pending pokes */ + cpuidle_coupled_parallel_barrier(dev, &coupled->abort_barrier); + goto reset; + } + /* all cpus have acked the coupled state */ next_state = cpuidle_coupled_get_state(dev, coupled); @@ -596,7 +663,7 @@ coupled->refcnt++; csd = &per_cpu(cpuidle_coupled_poke_cb, dev->cpu); - csd->func = cpuidle_coupled_poked; + csd->func = cpuidle_coupled_handle_poke; csd->info = (void *)(unsigned long)dev->cpu; return 0; --- linux-lts-raring-3.8.0.orig/drivers/cpuidle/governors/menu.c +++ linux-lts-raring-3.8.0/drivers/cpuidle/governors/menu.c @@ -28,13 +28,6 @@ #define MAX_INTERESTING 50000 #define STDDEV_THRESH 400 -/* 60 * 60 > STDDEV_THRESH * INTERVALS = 400 * 8 */ -#define MAX_DEVIATION 60 - -static DEFINE_PER_CPU(struct hrtimer, menu_hrtimer); -static DEFINE_PER_CPU(int, hrtimer_status); -/* menu hrtimer mode */ -enum {MENU_HRTIMER_STOP, MENU_HRTIMER_REPEAT, MENU_HRTIMER_GENERAL}; /* * Concepts and ideas behind the menu governor @@ -116,13 +109,6 @@ * */ -/* - * The C-state residency is so long that is is worthwhile to exit - * from the shallow C-state and re-enter into a deeper C-state. - */ -static unsigned int perfect_cstate_ms __read_mostly = 30; -module_param(perfect_cstate_ms, uint, 0000); - struct menu_device { int last_state_idx; int needs_update; @@ -205,40 +191,6 @@ return div_u64(dividend + (divisor / 2), divisor); } -/* Cancel the hrtimer if it is not triggered yet */ -void menu_hrtimer_cancel(void) -{ - int cpu = smp_processor_id(); - struct hrtimer *hrtmr = &per_cpu(menu_hrtimer, cpu); - - /* The timer is still not time out*/ - if (per_cpu(hrtimer_status, cpu)) { - hrtimer_cancel(hrtmr); - per_cpu(hrtimer_status, cpu) = MENU_HRTIMER_STOP; - } -} -EXPORT_SYMBOL_GPL(menu_hrtimer_cancel); - -/* Call back for hrtimer is triggered */ -static enum hrtimer_restart menu_hrtimer_notify(struct hrtimer *hrtimer) -{ - int cpu = smp_processor_id(); - struct menu_device *data = &per_cpu(menu_devices, cpu); - - /* In general case, the expected residency is much larger than - * deepest C-state target residency, but prediction logic still - * predicts a small predicted residency, so the prediction - * history is totally broken if the timer is triggered. - * So reset the correction factor. - */ - if (per_cpu(hrtimer_status, cpu) == MENU_HRTIMER_GENERAL) - data->correction_factor[data->bucket] = RESOLUTION * DECAY; - - per_cpu(hrtimer_status, cpu) = MENU_HRTIMER_STOP; - - return HRTIMER_NORESTART; -} - /* * Try detecting repeating patterns by keeping track of the last 8 * intervals, and checking if the standard deviation of that set @@ -315,9 +267,6 @@ int i; int multiplier; struct timespec t; - int repeat = 0, low_predicted = 0; - int cpu = smp_processor_id(); - struct hrtimer *hrtmr = &per_cpu(menu_hrtimer, cpu); if (data->needs_update) { menu_update(drv, dev); @@ -352,7 +301,7 @@ data->predicted_us = div_round64(data->expected_us * data->correction_factor[data->bucket], RESOLUTION * DECAY); - repeat = get_typical_interval(data); + get_typical_interval(data); /* * We want to default to C1 (hlt), not to busy polling @@ -373,10 +322,8 @@ if (s->disabled || su->disable) continue; - if (s->target_residency > data->predicted_us) { - low_predicted = 1; + if (s->target_residency > data->predicted_us) continue; - } if (s->exit_latency > latency_req) continue; if (s->exit_latency * multiplier > data->predicted_us) @@ -386,44 +333,6 @@ data->exit_us = s->exit_latency; } - /* not deepest C-state chosen for low predicted residency */ - if (low_predicted) { - unsigned int timer_us = 0; - unsigned int perfect_us = 0; - - /* - * Set a timer to detect whether this sleep is much - * longer than repeat mode predicted. If the timer - * triggers, the code will evaluate whether to put - * the CPU into a deeper C-state. - * The timer is cancelled on CPU wakeup. - */ - timer_us = 2 * (data->predicted_us + MAX_DEVIATION); - - perfect_us = perfect_cstate_ms * 1000; - - if (repeat && (4 * timer_us < data->expected_us)) { - RCU_NONIDLE(hrtimer_start(hrtmr, - ns_to_ktime(1000 * timer_us), - HRTIMER_MODE_REL_PINNED)); - /* In repeat case, menu hrtimer is started */ - per_cpu(hrtimer_status, cpu) = MENU_HRTIMER_REPEAT; - } else if (perfect_us < data->expected_us) { - /* - * The next timer is long. This could be because - * we did not make a useful prediction. - * In that case, it makes sense to re-enter - * into a deeper C-state after some time. - */ - RCU_NONIDLE(hrtimer_start(hrtmr, - ns_to_ktime(1000 * timer_us), - HRTIMER_MODE_REL_PINNED)); - /* In general case, menu hrtimer is started */ - per_cpu(hrtimer_status, cpu) = MENU_HRTIMER_GENERAL; - } - - } - return data->last_state_idx; } @@ -514,9 +423,6 @@ struct cpuidle_device *dev) { struct menu_device *data = &per_cpu(menu_devices, dev->cpu); - struct hrtimer *t = &per_cpu(menu_hrtimer, dev->cpu); - hrtimer_init(t, CLOCK_MONOTONIC, HRTIMER_MODE_REL); - t->function = menu_hrtimer_notify; memset(data, 0, sizeof(struct menu_device)); --- linux-lts-raring-3.8.0.orig/drivers/of/base.c +++ linux-lts-raring-3.8.0/drivers/of/base.c @@ -1482,6 +1482,7 @@ ap = dt_alloc(sizeof(*ap) + len + 1, 4); if (!ap) continue; + memset(ap, 0, sizeof(*ap) + len + 1); ap->alias = start; of_alias_add(ap, np, id, start, len); } --- linux-lts-raring-3.8.0.orig/drivers/of/fdt.c +++ linux-lts-raring-3.8.0/drivers/of/fdt.c @@ -392,6 +392,8 @@ mem = (unsigned long) dt_alloc(size + 4, __alignof__(struct device_node)); + memset((void *)mem, 0, size); + ((__be32 *)mem)[size / 4] = cpu_to_be32(0xdeadbeef); pr_debug(" unflattening %lx...\n", mem); --- linux-lts-raring-3.8.0.orig/drivers/watchdog/Kconfig +++ linux-lts-raring-3.8.0/drivers/watchdog/Kconfig @@ -79,6 +79,7 @@ config DA9055_WATCHDOG tristate "Dialog Semiconductor DA9055 Watchdog" depends on MFD_DA9055 + select WATCHDOG_CORE help If you say yes here you get support for watchdog on the Dialog Semiconductor DA9055 PMIC. --- linux-lts-raring-3.8.0.orig/drivers/watchdog/sp5100_tco.h +++ linux-lts-raring-3.8.0/drivers/watchdog/sp5100_tco.h @@ -57,7 +57,7 @@ #define SB800_PM_WATCHDOG_DISABLE (1 << 2) #define SB800_PM_WATCHDOG_SECOND_RES (3 << 0) #define SB800_ACPI_MMIO_DECODE_EN (1 << 0) -#define SB800_ACPI_MMIO_SEL (1 << 2) +#define SB800_ACPI_MMIO_SEL (1 << 1) #define SB800_PM_WDT_MMIO_OFFSET 0xB00 --- linux-lts-raring-3.8.0.orig/drivers/watchdog/watchdog_dev.c +++ linux-lts-raring-3.8.0/drivers/watchdog/watchdog_dev.c @@ -524,6 +524,7 @@ int err, devno; if (watchdog->id == 0) { + old_wdd = watchdog; watchdog_miscdev.parent = watchdog->parent; err = misc_register(&watchdog_miscdev); if (err != 0) { @@ -532,9 +533,9 @@ if (err == -EBUSY) pr_err("%s: a legacy watchdog module is probably present.\n", watchdog->info->identity); + old_wdd = NULL; return err; } - old_wdd = watchdog; } /* Fill in the data structures */ --- linux-lts-raring-3.8.0.orig/drivers/watchdog/sp5100_tco.c +++ linux-lts-raring-3.8.0/drivers/watchdog/sp5100_tco.c @@ -40,13 +40,12 @@ #include "sp5100_tco.h" /* Module and version information */ -#define TCO_VERSION "0.03" +#define TCO_VERSION "0.05" #define TCO_MODULE_NAME "SP5100 TCO timer" #define TCO_DRIVER_NAME TCO_MODULE_NAME ", v" TCO_VERSION /* internal variables */ static u32 tcobase_phys; -static u32 resbase_phys; static u32 tco_wdt_fired; static void __iomem *tcobase; static unsigned int pm_iobase; @@ -54,10 +53,6 @@ static unsigned long timer_alive; static char tco_expect_close; static struct pci_dev *sp5100_tco_pci; -static struct resource wdt_res = { - .name = "Watchdog Timer", - .flags = IORESOURCE_MEM, -}; /* the watchdog platform device */ static struct platform_device *sp5100_tco_platform_device; @@ -75,12 +70,6 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started." " (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); -static unsigned int force_addr; -module_param(force_addr, uint, 0); -MODULE_PARM_DESC(force_addr, "Force the use of specified MMIO address." - " ONLY USE THIS PARAMETER IF YOU REALLY KNOW" - " WHAT YOU ARE DOING (default=none)"); - /* * Some TCO specific functions */ @@ -176,39 +165,6 @@ } } -static void tco_timer_disable(void) -{ - int val; - - if (sp5100_tco_pci->revision >= 0x40) { - /* For SB800 or later */ - /* Enable watchdog decode bit and Disable watchdog timer */ - outb(SB800_PM_WATCHDOG_CONTROL, SB800_IO_PM_INDEX_REG); - val = inb(SB800_IO_PM_DATA_REG); - val |= SB800_PCI_WATCHDOG_DECODE_EN; - val |= SB800_PM_WATCHDOG_DISABLE; - outb(val, SB800_IO_PM_DATA_REG); - } else { - /* For SP5100 or SB7x0 */ - /* Enable watchdog decode bit */ - pci_read_config_dword(sp5100_tco_pci, - SP5100_PCI_WATCHDOG_MISC_REG, - &val); - - val |= SP5100_PCI_WATCHDOG_DECODE_EN; - - pci_write_config_dword(sp5100_tco_pci, - SP5100_PCI_WATCHDOG_MISC_REG, - val); - - /* Disable Watchdog timer */ - outb(SP5100_PM_WATCHDOG_CONTROL, SP5100_IO_PM_INDEX_REG); - val = inb(SP5100_IO_PM_DATA_REG); - val |= SP5100_PM_WATCHDOG_DISABLE; - outb(val, SP5100_IO_PM_DATA_REG); - } -} - /* * /dev/watchdog handling */ @@ -459,74 +415,8 @@ } else pr_debug("SBResource_MMIO is disabled(0x%04x)\n", val); - /* - * Lastly re-programming the watchdog timer MMIO address, - * This method is a last resort... - * - * Before re-programming, to ensure that the watchdog timer - * is disabled, disable the watchdog timer. - */ - tco_timer_disable(); - - if (force_addr) { - /* - * Force the use of watchdog timer MMIO address, and aligned to - * 8byte boundary. - */ - force_addr &= ~0x7; - val = force_addr; - - pr_info("Force the use of 0x%04x as MMIO address\n", val); - } else { - /* - * Get empty slot into the resource tree for watchdog timer. - */ - if (allocate_resource(&iomem_resource, - &wdt_res, - SP5100_WDT_MEM_MAP_SIZE, - 0xf0000000, - 0xfffffff8, - 0x8, - NULL, - NULL)) { - pr_err("MMIO allocation failed\n"); - goto unreg_region; - } - - val = resbase_phys = wdt_res.start; - pr_debug("Got 0x%04x from resource tree\n", val); - } - - /* Restore to the low three bits, if chipset is SB8x0(or later) */ - if (sp5100_tco_pci->revision >= 0x40) { - u8 reserved_bit; - reserved_bit = inb(base_addr) & 0x7; - val |= (u32)reserved_bit; - } - - /* Re-programming the watchdog timer base address */ - outb(base_addr+0, index_reg); - /* Low three bits of BASE are reserved */ - outb((val >> 0) & 0xf8, data_reg); - outb(base_addr+1, index_reg); - outb((val >> 8) & 0xff, data_reg); - outb(base_addr+2, index_reg); - outb((val >> 16) & 0xff, data_reg); - outb(base_addr+3, index_reg); - outb((val >> 24) & 0xff, data_reg); - - /* - * Clear unnecessary the low three bits, - * if chipset is SB8x0(or later) - */ - if (sp5100_tco_pci->revision >= 0x40) - val &= ~0x7; - - if (!request_mem_region_exclusive(val, SP5100_WDT_MEM_MAP_SIZE, - dev_name)) { - pr_err("MMIO address 0x%04x already in use\n", val); - goto unreg_resource; - } + pr_notice("failed to find MMIO address, giving up.\n"); + goto unreg_region; setup_wdt: tcobase_phys = val; @@ -566,9 +456,6 @@ unreg_mem_region: release_mem_region(tcobase_phys, SP5100_WDT_MEM_MAP_SIZE); -unreg_resource: - if (resbase_phys) - release_resource(&wdt_res); unreg_region: release_region(pm_iobase, SP5100_PM_IOPORTS_SIZE); exit: @@ -578,7 +465,6 @@ static int sp5100_tco_init(struct platform_device *dev) { int ret; - char addr_str[16]; /* * Check whether or not the hardware watchdog is there. If found, then @@ -610,23 +496,14 @@ clear_bit(0, &timer_alive); /* Show module parameters */ - if (force_addr == tcobase_phys) - /* The force_addr is vaild */ - sprintf(addr_str, "0x%04x", force_addr); - else - strcpy(addr_str, "none"); - - pr_info("initialized (0x%p). heartbeat=%d sec (nowayout=%d, " - "force_addr=%s)\n", - tcobase, heartbeat, nowayout, addr_str); + pr_info("initialized (0x%p). heartbeat=%d sec (nowayout=%d)\n", + tcobase, heartbeat, nowayout); return 0; exit: iounmap(tcobase); release_mem_region(tcobase_phys, SP5100_WDT_MEM_MAP_SIZE); - if (resbase_phys) - release_resource(&wdt_res); release_region(pm_iobase, SP5100_PM_IOPORTS_SIZE); return ret; } @@ -641,8 +518,6 @@ misc_deregister(&sp5100_tco_miscdev); iounmap(tcobase); release_mem_region(tcobase_phys, SP5100_WDT_MEM_MAP_SIZE); - if (resbase_phys) - release_resource(&wdt_res); release_region(pm_iobase, SP5100_PM_IOPORTS_SIZE); } --- linux-lts-raring-3.8.0.orig/drivers/net/macvtap.c +++ linux-lts-raring-3.8.0/drivers/net/macvtap.c @@ -535,8 +535,10 @@ return -EMSGSIZE; num_pages = get_user_pages_fast(base, size, 0, &page[i]); if (num_pages != size) { - for (i = 0; i < num_pages; i++) - put_page(page[i]); + int j; + + for (j = 0; j < num_pages; j++) + put_page(page[i + j]); return -EFAULT; } truesize = size * PAGE_SIZE; @@ -642,6 +644,28 @@ return 0; } +static unsigned long iov_pages(const struct iovec *iv, int offset, + unsigned long nr_segs) +{ + unsigned long seg, base; + int pages = 0, len, size; + + while (nr_segs && (offset >= iv->iov_len)) { + offset -= iv->iov_len; + ++iv; + --nr_segs; + } + + for (seg = 0; seg < nr_segs; seg++) { + base = (unsigned long)iv[seg].iov_base + offset; + len = iv[seg].iov_len - offset; + size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT; + pages += size; + offset = 0; + } + + return pages; +} /* Get packet from user space buffer */ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m, @@ -656,6 +680,7 @@ int vnet_hdr_len = 0; int copylen = 0; bool zerocopy = false; + size_t linear; if (q->flags & IFF_VNET_HDR) { vnet_hdr_len = q->vnet_hdr_sz; @@ -687,42 +712,35 @@ if (unlikely(count > UIO_MAXIOV)) goto err; - if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) - zerocopy = true; + if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) { + copylen = vnet_hdr.hdr_len ? vnet_hdr.hdr_len : GOODCOPY_LEN; + linear = copylen; + if (iov_pages(iv, vnet_hdr_len + copylen, count) + <= MAX_SKB_FRAGS) + zerocopy = true; + } - if (zerocopy) { - /* Userspace may produce vectors with count greater than - * MAX_SKB_FRAGS, so we need to linearize parts of the skb - * to let the rest of data to be fit in the frags. - */ - if (count > MAX_SKB_FRAGS) { - copylen = iov_length(iv, count - MAX_SKB_FRAGS); - if (copylen < vnet_hdr_len) - copylen = 0; - else - copylen -= vnet_hdr_len; - } - /* There are 256 bytes to be copied in skb, so there is enough - * room for skb expand head in case it is used. - * The rest buffer is mapped from userspace. - */ - if (copylen < vnet_hdr.hdr_len) - copylen = vnet_hdr.hdr_len; - if (!copylen) - copylen = GOODCOPY_LEN; - } else + if (!zerocopy) { copylen = len; + linear = vnet_hdr.hdr_len; + } skb = macvtap_alloc_skb(&q->sk, NET_IP_ALIGN, copylen, - vnet_hdr.hdr_len, noblock, &err); + linear, noblock, &err); if (!skb) goto err; if (zerocopy) err = zerocopy_sg_from_iovec(skb, iv, vnet_hdr_len, count); - else + else { err = skb_copy_datagram_from_iovec(skb, 0, iv, vnet_hdr_len, len); + if (!err && m && m->msg_control) { + struct ubuf_info *uarg = m->msg_control; + uarg->callback(uarg, false); + } + } + if (err) goto err_kfree; --- linux-lts-raring-3.8.0.orig/drivers/net/vxlan.c +++ linux-lts-raring-3.8.0/drivers/net/vxlan.c @@ -284,7 +284,7 @@ } /* Look up Ethernet address in forwarding table */ -static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan, +static struct vxlan_fdb *__vxlan_find_mac(struct vxlan_dev *vxlan, const u8 *mac) { @@ -300,6 +300,18 @@ return NULL; } +static struct vxlan_fdb *vxlan_find_mac(struct vxlan_dev *vxlan, + const u8 *mac) +{ + struct vxlan_fdb *f; + + f = __vxlan_find_mac(vxlan, mac); + if (f) + f->used = jiffies; + + return f; +} + /* Add new entry to forwarding table -- assumes lock held */ static int vxlan_fdb_create(struct vxlan_dev *vxlan, const u8 *mac, __be32 ip, @@ -308,7 +320,7 @@ struct vxlan_fdb *f; int notify = 0; - f = vxlan_find_mac(vxlan, mac); + f = __vxlan_find_mac(vxlan, mac); if (f) { if (flags & NLM_F_EXCL) { netdev_dbg(vxlan->dev, @@ -453,7 +465,6 @@ f = vxlan_find_mac(vxlan, src_mac); if (likely(f)) { - f->used = jiffies; if (likely(f->remote_ip == src_ip)) return; @@ -1491,6 +1502,15 @@ static __net_exit void vxlan_exit_net(struct net *net) { struct vxlan_net *vn = net_generic(net, vxlan_net_id); + struct vxlan_dev *vxlan; + struct hlist_node *pos; + unsigned h; + + rtnl_lock(); + for (h = 0; h < VNI_HASH_SIZE; ++h) + hlist_for_each_entry(vxlan, pos, &vn->vni_list[h], hlist) + dev_close(vxlan->dev); + rtnl_unlock(); if (vn->sock) { sk_release_kernel(vn->sock->sk); --- linux-lts-raring-3.8.0.orig/drivers/net/veth.c +++ linux-lts-raring-3.8.0/drivers/net/veth.c @@ -25,18 +25,15 @@ #define MIN_MTU 68 /* Min L3 MTU */ #define MAX_MTU 65535 /* Max L3 MTU (arbitrary) */ -struct veth_net_stats { - u64 rx_packets; - u64 rx_bytes; - u64 tx_packets; - u64 tx_bytes; - u64 rx_dropped; +struct pcpu_vstats { + u64 packets; + u64 bytes; struct u64_stats_sync syncp; }; struct veth_priv { - struct net_device *peer; - struct veth_net_stats __percpu *stats; + struct net_device __rcu *peer; + atomic64_t dropped; }; /* @@ -92,10 +89,10 @@ static void veth_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats, u64 *data) { - struct veth_priv *priv; + struct veth_priv *priv = netdev_priv(dev); + struct net_device *peer = rtnl_dereference(priv->peer); - priv = netdev_priv(dev); - data[0] = priv->peer->ifindex; + data[0] = peer ? peer->ifindex : 0; } static const struct ethtool_ops veth_ethtool_ops = { @@ -107,50 +104,37 @@ .get_ethtool_stats = veth_get_ethtool_stats, }; -/* - * xmit - */ - static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev) { - struct net_device *rcv = NULL; - struct veth_priv *priv, *rcv_priv; - struct veth_net_stats *stats, *rcv_stats; - int length; - - priv = netdev_priv(dev); - rcv = priv->peer; - rcv_priv = netdev_priv(rcv); - - stats = this_cpu_ptr(priv->stats); - rcv_stats = this_cpu_ptr(rcv_priv->stats); + struct veth_priv *priv = netdev_priv(dev); + struct net_device *rcv; + int length = skb->len; + rcu_read_lock(); + rcv = rcu_dereference(priv->peer); + if (unlikely(!rcv)) { + kfree_skb(skb); + goto drop; + } /* don't change ip_summed == CHECKSUM_PARTIAL, as that - will cause bad checksum on forwarded packets */ + * will cause bad checksum on forwarded packets + */ if (skb->ip_summed == CHECKSUM_NONE && rcv->features & NETIF_F_RXCSUM) skb->ip_summed = CHECKSUM_UNNECESSARY; - length = skb->len; - if (dev_forward_skb(rcv, skb) != NET_RX_SUCCESS) - goto rx_drop; - - u64_stats_update_begin(&stats->syncp); - stats->tx_bytes += length; - stats->tx_packets++; - u64_stats_update_end(&stats->syncp); - - u64_stats_update_begin(&rcv_stats->syncp); - rcv_stats->rx_bytes += length; - rcv_stats->rx_packets++; - u64_stats_update_end(&rcv_stats->syncp); + if (likely(dev_forward_skb(rcv, skb) == NET_RX_SUCCESS)) { + struct pcpu_vstats *stats = this_cpu_ptr(dev->vstats); - return NETDEV_TX_OK; - -rx_drop: - u64_stats_update_begin(&rcv_stats->syncp); - rcv_stats->rx_dropped++; - u64_stats_update_end(&rcv_stats->syncp); + u64_stats_update_begin(&stats->syncp); + stats->bytes += length; + stats->packets++; + u64_stats_update_end(&stats->syncp); + } else { +drop: + atomic64_inc(&priv->dropped); + } + rcu_read_unlock(); return NETDEV_TX_OK; } @@ -158,47 +142,63 @@ * general routines */ -static struct rtnl_link_stats64 *veth_get_stats64(struct net_device *dev, - struct rtnl_link_stats64 *tot) +static u64 veth_stats_one(struct pcpu_vstats *result, struct net_device *dev) { struct veth_priv *priv = netdev_priv(dev); int cpu; + result->packets = 0; + result->bytes = 0; for_each_possible_cpu(cpu) { - struct veth_net_stats *stats = per_cpu_ptr(priv->stats, cpu); - u64 rx_packets, rx_bytes, rx_dropped; - u64 tx_packets, tx_bytes; + struct pcpu_vstats *stats = per_cpu_ptr(dev->vstats, cpu); + u64 packets, bytes; unsigned int start; do { start = u64_stats_fetch_begin_bh(&stats->syncp); - rx_packets = stats->rx_packets; - tx_packets = stats->tx_packets; - rx_bytes = stats->rx_bytes; - tx_bytes = stats->tx_bytes; - rx_dropped = stats->rx_dropped; + packets = stats->packets; + bytes = stats->bytes; } while (u64_stats_fetch_retry_bh(&stats->syncp, start)); - tot->rx_packets += rx_packets; - tot->tx_packets += tx_packets; - tot->rx_bytes += rx_bytes; - tot->tx_bytes += tx_bytes; - tot->rx_dropped += rx_dropped; + result->packets += packets; + result->bytes += bytes; } + return atomic64_read(&priv->dropped); +} + +static struct rtnl_link_stats64 *veth_get_stats64(struct net_device *dev, + struct rtnl_link_stats64 *tot) +{ + struct veth_priv *priv = netdev_priv(dev); + struct net_device *peer; + struct pcpu_vstats one; + + tot->tx_dropped = veth_stats_one(&one, dev); + tot->tx_bytes = one.bytes; + tot->tx_packets = one.packets; + + rcu_read_lock(); + peer = rcu_dereference(priv->peer); + if (peer) { + tot->rx_dropped = veth_stats_one(&one, peer); + tot->rx_bytes = one.bytes; + tot->rx_packets = one.packets; + } + rcu_read_unlock(); return tot; } static int veth_open(struct net_device *dev) { - struct veth_priv *priv; + struct veth_priv *priv = netdev_priv(dev); + struct net_device *peer = rtnl_dereference(priv->peer); - priv = netdev_priv(dev); - if (priv->peer == NULL) + if (!peer) return -ENOTCONN; - if (priv->peer->flags & IFF_UP) { + if (peer->flags & IFF_UP) { netif_carrier_on(dev); - netif_carrier_on(priv->peer); + netif_carrier_on(peer); } return 0; } @@ -206,9 +206,11 @@ static int veth_close(struct net_device *dev) { struct veth_priv *priv = netdev_priv(dev); + struct net_device *peer = rtnl_dereference(priv->peer); netif_carrier_off(dev); - netif_carrier_off(priv->peer); + if (peer) + netif_carrier_off(peer); return 0; } @@ -228,24 +230,16 @@ static int veth_dev_init(struct net_device *dev) { - struct veth_net_stats __percpu *stats; - struct veth_priv *priv; - - stats = alloc_percpu(struct veth_net_stats); - if (stats == NULL) + dev->vstats = alloc_percpu(struct pcpu_vstats); + if (!dev->vstats) return -ENOMEM; - priv = netdev_priv(dev); - priv->stats = stats; return 0; } static void veth_dev_free(struct net_device *dev) { - struct veth_priv *priv; - - priv = netdev_priv(dev); - free_percpu(priv->stats); + free_percpu(dev->vstats); free_netdev(dev); } @@ -259,6 +253,10 @@ .ndo_set_mac_address = eth_mac_addr, }; +#define VETH_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \ + NETIF_F_HW_CSUM | NETIF_F_RXCSUM | NETIF_F_HIGHDMA | \ + NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX) + static void veth_setup(struct net_device *dev) { ether_setup(dev); @@ -269,9 +267,10 @@ dev->netdev_ops = &veth_netdev_ops; dev->ethtool_ops = &veth_ethtool_ops; dev->features |= NETIF_F_LLTX; + dev->features |= VETH_FEATURES; dev->destructor = veth_dev_free; - dev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG | NETIF_F_RXCSUM; + dev->hw_features = VETH_FEATURES; } /* @@ -396,10 +395,10 @@ */ priv = netdev_priv(dev); - priv->peer = peer; + rcu_assign_pointer(priv->peer, peer); priv = netdev_priv(peer); - priv->peer = dev; + rcu_assign_pointer(priv->peer, dev); return 0; err_register_dev: @@ -420,10 +419,20 @@ struct net_device *peer; priv = netdev_priv(dev); - peer = priv->peer; + peer = rtnl_dereference(priv->peer); + /* Note : dellink() is called from default_device_exit_batch(), + * before a rcu_synchronize() point. The devices are guaranteed + * not being freed before one RCU grace period. + */ + RCU_INIT_POINTER(priv->peer, NULL); unregister_netdevice_queue(dev, head); - unregister_netdevice_queue(peer, head); + + if (peer) { + priv = netdev_priv(peer); + RCU_INIT_POINTER(priv->peer, NULL); + unregister_netdevice_queue(peer, head); + } } static const struct nla_policy veth_policy[VETH_INFO_MAX + 1] = { --- linux-lts-raring-3.8.0.orig/drivers/net/tun.c +++ linux-lts-raring-3.8.0/drivers/net/tun.c @@ -748,6 +748,8 @@ goto drop; skb_orphan(skb); + nf_reset(skb); + /* Enqueue packet */ skb_queue_tail(&tfile->socket.sk->sk_receive_queue, skb); @@ -1036,6 +1038,29 @@ return 0; } +static unsigned long iov_pages(const struct iovec *iv, int offset, + unsigned long nr_segs) +{ + unsigned long seg, base; + int pages = 0, len, size; + + while (nr_segs && (offset >= iv->iov_len)) { + offset -= iv->iov_len; + ++iv; + --nr_segs; + } + + for (seg = 0; seg < nr_segs; seg++) { + base = (unsigned long)iv[seg].iov_base + offset; + len = iv[seg].iov_len - offset; + size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT; + pages += size; + offset = 0; + } + + return pages; +} + /* Get packet from user space buffer */ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile, void *msg_control, const struct iovec *iv, @@ -1043,7 +1068,7 @@ { struct tun_pi pi = { 0, cpu_to_be16(ETH_P_IP) }; struct sk_buff *skb; - size_t len = total_len, align = NET_SKB_PAD; + size_t len = total_len, align = NET_SKB_PAD, linear; struct virtio_net_hdr gso = { 0 }; int offset = 0; int copylen; @@ -1052,8 +1077,9 @@ u32 rxhash; if (!(tun->flags & TUN_NO_PI)) { - if ((len -= sizeof(pi)) > total_len) + if (len < sizeof(pi)) return -EINVAL; + len -= sizeof(pi); if (memcpy_fromiovecend((void *)&pi, iv, 0, sizeof(pi))) return -EFAULT; @@ -1061,8 +1087,9 @@ } if (tun->flags & TUN_VNET_HDR) { - if ((len -= tun->vnet_hdr_sz) > total_len) + if (len < tun->vnet_hdr_sz) return -EINVAL; + len -= tun->vnet_hdr_sz; if (memcpy_fromiovecend((void *)&gso, iv, offset, sizeof(gso))) return -EFAULT; @@ -1083,34 +1110,23 @@ return -EINVAL; } - if (msg_control) - zerocopy = true; - - if (zerocopy) { - /* Userspace may produce vectors with count greater than - * MAX_SKB_FRAGS, so we need to linearize parts of the skb - * to let the rest of data to be fit in the frags. - */ - if (count > MAX_SKB_FRAGS) { - copylen = iov_length(iv, count - MAX_SKB_FRAGS); - if (copylen < offset) - copylen = 0; - else - copylen -= offset; - } else - copylen = 0; - /* There are 256 bytes to be copied in skb, so there is enough - * room for skb expand head in case it is used. + if (msg_control) { + /* There are 256 bytes to be copied in skb, so there is + * enough room for skb expand head in case it is used. * The rest of the buffer is mapped from userspace. */ - if (copylen < gso.hdr_len) - copylen = gso.hdr_len; - if (!copylen) - copylen = GOODCOPY_LEN; - } else + copylen = gso.hdr_len ? gso.hdr_len : GOODCOPY_LEN; + linear = copylen; + if (iov_pages(iv, offset + copylen, count) <= MAX_SKB_FRAGS) + zerocopy = true; + } + + if (!zerocopy) { copylen = len; + linear = gso.hdr_len; + } - skb = tun_alloc_skb(tfile, align, copylen, gso.hdr_len, noblock); + skb = tun_alloc_skb(tfile, align, copylen, linear, noblock); if (IS_ERR(skb)) { if (PTR_ERR(skb) != -EAGAIN) tun->dev->stats.rx_dropped++; @@ -1119,8 +1135,13 @@ if (zerocopy) err = zerocopy_sg_from_iovec(skb, iv, offset, count); - else + else { err = skb_copy_datagram_from_iovec(skb, 0, iv, offset, len); + if (!err && msg_control) { + struct ubuf_info *uarg = msg_control; + uarg->callback(uarg, false); + } + } if (err) { tun->dev->stats.rx_dropped++; @@ -1469,14 +1490,17 @@ if (!tun) return -EBADFD; - if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) - return -EINVAL; + if (flags & ~(MSG_DONTWAIT|MSG_TRUNC)) { + ret = -EINVAL; + goto out; + } ret = tun_do_read(tun, tfile, iocb, m->msg_iov, total_len, flags & MSG_DONTWAIT); if (ret > total_len) { m->msg_flags |= MSG_TRUNC; ret = flags & MSG_TRUNC ? ret : total_len; } +out: tun_put(tun); return ret; } @@ -1580,6 +1604,10 @@ else return -EINVAL; + if (!!(ifr->ifr_flags & IFF_MULTI_QUEUE) != + !!(tun->flags & TUN_TAP_MQ)) + return -EINVAL; + if (tun_not_capable(tun)) return -EPERM; err = security_tun_dev_open(tun->security); @@ -1658,11 +1686,11 @@ INIT_LIST_HEAD(&tun->disabled); err = tun_attach(tun, file); if (err < 0) - goto err_free_dev; + goto err_free_flow; err = register_netdevice(tun->dev); if (err < 0) - goto err_free_dev; + goto err_detach; if (device_create_file(&tun->dev->dev, &dev_attr_tun_flags) || device_create_file(&tun->dev->dev, &dev_attr_owner) || @@ -1706,7 +1734,12 @@ strcpy(ifr->ifr_name, tun->dev->name); return 0; - err_free_dev: +err_detach: + tun_detach_all(dev); +err_free_flow: + tun_flow_uninit(tun); + security_tun_dev_free_security(tun->security); +err_free_dev: free_netdev(dev); return err; } @@ -2145,6 +2178,8 @@ set_bit(SOCK_EXTERNALLY_ALLOCATED, &tfile->socket.flags); INIT_LIST_HEAD(&tfile->next); + sock_set_flag(&tfile->sk, SOCK_ZEROCOPY); + return 0; } --- linux-lts-raring-3.8.0.orig/drivers/net/dummy.c +++ linux-lts-raring-3.8.0/drivers/net/dummy.c @@ -175,6 +175,8 @@ rtnl_lock(); err = __rtnl_link_register(&dummy_link_ops); + if (err < 0) + goto out; for (i = 0; i < numdummies && !err; i++) { err = dummy_init_one(); @@ -182,6 +184,8 @@ } if (err < 0) __rtnl_link_unregister(&dummy_link_ops); + +out: rtnl_unlock(); return err; --- linux-lts-raring-3.8.0.orig/drivers/net/xen-netfront.c +++ linux-lts-raring-3.8.0/drivers/net/xen-netfront.c @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include #include #include @@ -548,6 +548,16 @@ unsigned int len = skb_headlen(skb); unsigned long flags; + /* If skb->len is too big for wire format, drop skb and alert + * user about misconfiguration. + */ + if (unlikely(skb->len > XEN_NETIF_MAX_TX_SIZE)) { + net_alert_ratelimited( + "xennet: skb->len = %u, too big for wire format\n", + skb->len); + goto drop; + } + slots = DIV_ROUND_UP(offset + len, PAGE_SIZE) + xennet_count_skb_frag_slots(skb); if (unlikely(slots > MAX_SKB_FRAGS + 1)) { @@ -1064,7 +1074,8 @@ static int xennet_change_mtu(struct net_device *dev, int mtu) { - int max = xennet_can_sg(dev) ? 65535 - ETH_HLEN : ETH_DATA_LEN; + int max = xennet_can_sg(dev) ? + XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER : ETH_DATA_LEN; if (mtu > max) return -EINVAL; @@ -1368,6 +1379,8 @@ SET_ETHTOOL_OPS(netdev, &xennet_ethtool_ops); SET_NETDEV_DEV(netdev, &dev->dev); + netif_set_gso_max_size(netdev, XEN_NETIF_MAX_TX_SIZE - MAX_TCP_HEADER); + np->netdev = netdev; netif_carrier_off(netdev); --- linux-lts-raring-3.8.0.orig/drivers/net/netconsole.c +++ linux-lts-raring-3.8.0/drivers/net/netconsole.c @@ -630,6 +630,7 @@ goto done; spin_lock_irqsave(&target_list_lock, flags); +restart: list_for_each_entry(nt, &target_list, list) { netconsole_target_get(nt); if (nt->np.dev == dev) { @@ -642,15 +643,17 @@ case NETDEV_UNREGISTER: /* * rtnl_lock already held + * we might sleep in __netpoll_cleanup() */ - if (nt->np.dev) { - __netpoll_cleanup(&nt->np); - dev_put(nt->np.dev); - nt->np.dev = NULL; - } + spin_unlock_irqrestore(&target_list_lock, flags); + __netpoll_cleanup(&nt->np); + spin_lock_irqsave(&target_list_lock, flags); + dev_put(nt->np.dev); + nt->np.dev = NULL; nt->enabled = 0; stopped = true; - break; + netconsole_target_put(nt); + goto restart; } } netconsole_target_put(nt); --- linux-lts-raring-3.8.0.orig/drivers/net/macvlan.c +++ linux-lts-raring-3.8.0/drivers/net/macvlan.c @@ -204,7 +204,8 @@ } if (port->passthru) - vlan = list_first_entry(&port->vlans, struct macvlan_dev, list); + vlan = list_first_or_null_rcu(&port->vlans, + struct macvlan_dev, list); else vlan = macvlan_hash_lookup(port, eth->h_dest); if (vlan == NULL) @@ -628,6 +629,7 @@ ether_setup(dev); dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); + dev->priv_flags |= IFF_UNICAST_FLT; dev->netdev_ops = &macvlan_netdev_ops; dev->destructor = free_netdev; dev->header_ops = &macvlan_hard_header_ops, @@ -686,6 +688,10 @@ return -EADDRNOTAVAIL; } + if (data && data[IFLA_MACVLAN_FLAGS] && + nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~MACVLAN_FLAG_NOPROMISC) + return -EINVAL; + if (data && data[IFLA_MACVLAN_MODE]) { switch (nla_get_u32(data[IFLA_MACVLAN_MODE])) { case MACVLAN_MODE_PRIVATE: @@ -770,7 +776,7 @@ if (err < 0) goto destroy_port; - list_add_tail(&vlan->list, &port->vlans); + list_add_tail_rcu(&vlan->list, &port->vlans); netif_stacked_transfer_operstate(lowerdev, dev); return 0; @@ -796,7 +802,7 @@ { struct macvlan_dev *vlan = netdev_priv(dev); - list_del(&vlan->list); + list_del_rcu(&vlan->list); unregister_netdevice_queue(dev, head); } EXPORT_SYMBOL_GPL(macvlan_dellink); --- linux-lts-raring-3.8.0.orig/drivers/net/ifb.c +++ linux-lts-raring-3.8.0/drivers/net/ifb.c @@ -290,11 +290,17 @@ rtnl_lock(); err = __rtnl_link_register(&ifb_link_ops); + if (err < 0) + goto out; - for (i = 0; i < numifbs && !err; i++) + for (i = 0; i < numifbs && !err; i++) { err = ifb_init_one(i); + cond_resched(); + } if (err) __rtnl_link_unregister(&ifb_link_ops); + +out: rtnl_unlock(); return err; --- linux-lts-raring-3.8.0.orig/drivers/net/phy/phy.c +++ linux-lts-raring-3.8.0/drivers/net/phy/phy.c @@ -1092,7 +1092,7 @@ adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv); lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp); idx = phy_find_setting(phydev->speed, phydev->duplex); - if ((lp & adv & settings[idx].setting)) + if (!(lp & adv & settings[idx].setting)) goto eee_exit; if (clk_stop_enable) { --- linux-lts-raring-3.8.0.orig/drivers/net/usb/cdc_ncm.c +++ linux-lts-raring-3.8.0/drivers/net/usb/cdc_ncm.c @@ -55,6 +55,14 @@ #define DRIVER_VERSION "14-Mar-2012" +#if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM) +static bool prefer_mbim = true; +#else +static bool prefer_mbim; +#endif +module_param(prefer_mbim, bool, S_IRUGO | S_IWUSR); +MODULE_PARM_DESC(prefer_mbim, "Prefer MBIM setting on dual NCM/MBIM functions"); + static void cdc_ncm_txpath_bh(unsigned long param); static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx); static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer); @@ -550,9 +558,12 @@ } EXPORT_SYMBOL_GPL(cdc_ncm_unbind); -static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf) +/* Select the MBIM altsetting iff it is preferred and available, + * returning the number of the corresponding data interface altsetting + */ +u8 cdc_ncm_select_altsetting(struct usbnet *dev, struct usb_interface *intf) { - int ret; + struct usb_host_interface *alt; /* The MBIM spec defines a NCM compatible default altsetting, * which we may have matched: @@ -568,18 +579,27 @@ * endpoint descriptors, shall be constructed according to * the rules given in section 6 (USB Device Model) of this * specification." - * - * Do not bind to such interfaces, allowing cdc_mbim to handle - * them */ -#if IS_ENABLED(CONFIG_USB_NET_CDC_MBIM) - if ((intf->num_altsetting == 2) && - !usb_set_interface(dev->udev, - intf->cur_altsetting->desc.bInterfaceNumber, - CDC_NCM_COMM_ALTSETTING_MBIM) && - cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting)) + if (prefer_mbim && intf->num_altsetting == 2) { + alt = usb_altnum_to_altsetting(intf, CDC_NCM_COMM_ALTSETTING_MBIM); + if (alt && cdc_ncm_comm_intf_is_mbim(alt) && + !usb_set_interface(dev->udev, + intf->cur_altsetting->desc.bInterfaceNumber, + CDC_NCM_COMM_ALTSETTING_MBIM)) + return CDC_NCM_DATA_ALTSETTING_MBIM; + } + return CDC_NCM_DATA_ALTSETTING_NCM; +} +EXPORT_SYMBOL_GPL(cdc_ncm_select_altsetting); + +static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf) +{ + int ret; + + /* MBIM backwards compatible function? */ + cdc_ncm_select_altsetting(dev, intf); + if (cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting)) return -ENODEV; -#endif /* NCM data altsetting is always 1 */ ret = cdc_ncm_bind_common(dev, intf, 1); --- linux-lts-raring-3.8.0.orig/drivers/net/usb/smsc95xx.c +++ linux-lts-raring-3.8.0/drivers/net/usb/smsc95xx.c @@ -1340,6 +1340,8 @@ ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); if (ret < 0) netdev_warn(dev->net, "Error reading PM_CTRL\n"); + else + ret = 0; return ret; } @@ -1392,6 +1394,8 @@ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); if (ret < 0) netdev_warn(dev->net, "Error writing PM_CTRL\n"); + else + ret = 0; return ret; } @@ -1413,6 +1417,8 @@ ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); if (ret < 0) netdev_warn(dev->net, "Error writing PM_CTRL\n"); + else + ret = 0; return ret; } --- linux-lts-raring-3.8.0.orig/drivers/net/usb/cdc_ether.c +++ linux-lts-raring-3.8.0/drivers/net/usb/cdc_ether.c @@ -615,6 +615,20 @@ .driver_info = 0, }, +/* Dell Wireless 5804 (Novatel E371) - handled by qmi_wwan */ +{ + USB_DEVICE_AND_INTERFACE_INFO(DELL_VENDOR_ID, 0x819b, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + +/* AnyDATA ADU960S - handled by qmi_wwan */ +{ + USB_DEVICE_AND_INTERFACE_INFO(0x16d5, 0x650a, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + /* * WHITELIST!!! * @@ -682,6 +696,11 @@ .bInterfaceProtocol = USB_CDC_PROTO_NONE, .driver_info = (unsigned long)&wwan_info, }, { + /* Telit modules */ + USB_VENDOR_AND_INTERFACE_INFO(0x1bc7, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = (kernel_ulong_t) &wwan_info, +}, { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), .driver_info = (unsigned long) &cdc_info, --- linux-lts-raring-3.8.0.orig/drivers/net/usb/cdc_mbim.c +++ linux-lts-raring-3.8.0/drivers/net/usb/cdc_mbim.c @@ -68,18 +68,9 @@ struct cdc_ncm_ctx *ctx; struct usb_driver *subdriver = ERR_PTR(-ENODEV); int ret = -ENODEV; - u8 data_altsetting = CDC_NCM_DATA_ALTSETTING_NCM; + u8 data_altsetting = cdc_ncm_select_altsetting(dev, intf); struct cdc_mbim_state *info = (void *)&dev->data; - /* see if interface supports MBIM alternate setting */ - if (intf->num_altsetting == 2) { - if (!cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting)) - usb_set_interface(dev->udev, - intf->cur_altsetting->desc.bInterfaceNumber, - CDC_NCM_COMM_ALTSETTING_MBIM); - data_altsetting = CDC_NCM_DATA_ALTSETTING_MBIM; - } - /* Probably NCM, defer for cdc_ncm_bind */ if (!cdc_ncm_comm_intf_is_mbim(intf->cur_altsetting)) goto err; @@ -143,7 +134,7 @@ goto error; if (skb) { - if (skb->len <= sizeof(ETH_HLEN)) + if (skb->len <= ETH_HLEN) goto error; /* mapping VLANs to MBIM sessions: @@ -404,6 +395,10 @@ { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68a2, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&cdc_mbim_info_zlp, }, + /* HP hs2434 Mobile Broadband Module needs ZLPs */ + { USB_DEVICE_AND_INTERFACE_INFO(0x3f0, 0x4b1d, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long)&cdc_mbim_info_zlp, + }, { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&cdc_mbim_info, }, --- linux-lts-raring-3.8.0.orig/drivers/net/usb/qmi_wwan.c +++ linux-lts-raring-3.8.0/drivers/net/usb/qmi_wwan.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +53,93 @@ struct usb_interface *data; }; +/* default ethernet address used by the modem */ +static const u8 default_modem_addr[ETH_ALEN] = {0x02, 0x50, 0xf3}; + +/* Make up an ethernet header if the packet doesn't have one. + * + * A firmware bug common among several devices cause them to send raw + * IP packets under some circumstances. There is no way for the + * driver/host to know when this will happen. And even when the bug + * hits, some packets will still arrive with an intact header. + * + * The supported devices are only capably of sending IPv4, IPv6 and + * ARP packets on a point-to-point link. Any packet with an ethernet + * header will have either our address or a broadcast/multicast + * address as destination. ARP packets will always have a header. + * + * This means that this function will reliably add the appropriate + * header iff necessary, provided our hardware address does not start + * with 4 or 6. + * + * Another common firmware bug results in all packets being addressed + * to 00:a0:c6:00:00:00 despite the host address being different. + * This function will also fixup such packets. + */ +static int qmi_wwan_rx_fixup(struct usbnet *dev, struct sk_buff *skb) +{ + __be16 proto; + + /* usbnet rx_complete guarantees that skb->len is at least + * hard_header_len, so we can inspect the dest address without + * checking skb->len + */ + switch (skb->data[0] & 0xf0) { + case 0x40: + proto = htons(ETH_P_IP); + break; + case 0x60: + proto = htons(ETH_P_IPV6); + break; + case 0x00: + if (is_multicast_ether_addr(skb->data)) + return 1; + /* possibly bogus destination - rewrite just in case */ + skb_reset_mac_header(skb); + goto fix_dest; + default: + /* pass along other packets without modifications */ + return 1; + } + if (skb_headroom(skb) < ETH_HLEN) + return 0; + skb_push(skb, ETH_HLEN); + skb_reset_mac_header(skb); + eth_hdr(skb)->h_proto = proto; + memset(eth_hdr(skb)->h_source, 0, ETH_ALEN); +fix_dest: + memcpy(eth_hdr(skb)->h_dest, dev->net->dev_addr, ETH_ALEN); + return 1; +} + +/* very simplistic detection of IPv4 or IPv6 headers */ +static bool possibly_iphdr(const char *data) +{ + return (data[0] & 0xd0) == 0x40; +} + +/* disallow addresses which may be confused with IP headers */ +static int qmi_wwan_mac_addr(struct net_device *dev, void *p) +{ + struct sockaddr *addr = p; + + if (!is_valid_ether_addr(addr->sa_data) || + possibly_iphdr(addr->sa_data)) + return -EADDRNOTAVAIL; + memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); + return 0; +} + +static const struct net_device_ops qmi_wwan_netdev_ops = { + .ndo_open = usbnet_open, + .ndo_stop = usbnet_stop, + .ndo_start_xmit = usbnet_start_xmit, + .ndo_tx_timeout = usbnet_tx_timeout, + .ndo_change_mtu = usbnet_change_mtu, + .ndo_set_mac_address = qmi_wwan_mac_addr, + .ndo_validate_addr = eth_validate_addr, +}; + /* using a counter to merge subdriver requests with our own into a combined state */ static int qmi_wwan_manage_power(struct usbnet *dev, int on) { @@ -139,16 +227,9 @@ BUILD_BUG_ON((sizeof(((struct usbnet *)0)->data) < sizeof(struct qmi_wwan_state))); - /* control and data is shared? */ - if (intf->cur_altsetting->desc.bNumEndpoints == 3) { - info->control = intf; - info->data = intf; - goto shared; - } - - /* else require a single interrupt status endpoint on control intf */ - if (intf->cur_altsetting->desc.bNumEndpoints != 1) - goto err; + /* set up initial state */ + info->control = intf; + info->data = intf; /* and a number of CDC descriptors */ while (len > 3) { @@ -207,25 +288,14 @@ buf += h->bLength; } - /* did we find all the required ones? */ - if (!(found & (1 << USB_CDC_HEADER_TYPE)) || - !(found & (1 << USB_CDC_UNION_TYPE))) { - dev_err(&intf->dev, "CDC functional descriptors missing\n"); - goto err; - } - - /* verify CDC Union */ - if (desc->bInterfaceNumber != cdc_union->bMasterInterface0) { - dev_err(&intf->dev, "bogus CDC Union: master=%u\n", cdc_union->bMasterInterface0); - goto err; - } - - /* need to save these for unbind */ - info->control = intf; - info->data = usb_ifnum_to_if(dev->udev, cdc_union->bSlaveInterface0); - if (!info->data) { - dev_err(&intf->dev, "bogus CDC Union: slave=%u\n", cdc_union->bSlaveInterface0); - goto err; + /* Use separate control and data interfaces if we found a CDC Union */ + if (cdc_union) { + info->data = usb_ifnum_to_if(dev->udev, cdc_union->bSlaveInterface0); + if (desc->bInterfaceNumber != cdc_union->bMasterInterface0 || !info->data) { + dev_err(&intf->dev, "bogus CDC Union: master=%u, slave=%u\n", + cdc_union->bMasterInterface0, cdc_union->bSlaveInterface0); + goto err; + } } /* errors aren't fatal - we can live with the dynamic address */ @@ -235,17 +305,30 @@ } /* claim data interface and set it up */ - status = usb_driver_claim_interface(driver, info->data, dev); - if (status < 0) - goto err; + if (info->control != info->data) { + status = usb_driver_claim_interface(driver, info->data, dev); + if (status < 0) + goto err; + } -shared: status = qmi_wwan_register_subdriver(dev); if (status < 0 && info->control != info->data) { usb_set_intfdata(info->data, NULL); usb_driver_release_interface(driver, info->data); } + /* Never use the same address on both ends of the link, even + * if the buggy firmware told us to. + */ + if (!compare_ether_addr(dev->net->dev_addr, default_modem_addr)) + eth_hw_addr_random(dev->net); + + /* make MAC addr easily distinguishable from an IP header */ + if (possibly_iphdr(dev->net->dev_addr)) { + dev->net->dev_addr[0] |= 0x02; /* set local assignment bit */ + dev->net->dev_addr[0] &= 0xbf; /* clear "IP" bit */ + } + dev->net->netdev_ops = &qmi_wwan_netdev_ops; err: return status; } @@ -324,6 +407,7 @@ .bind = qmi_wwan_bind, .unbind = qmi_wwan_unbind, .manage_power = qmi_wwan_manage_power, + .rx_fixup = qmi_wwan_rx_fixup, }; #define HUAWEI_VENDOR_ID 0x12D1 @@ -407,6 +491,20 @@ USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long)&qmi_wwan_info, + }, + { /* Dell Wireless 5804 (Novatel E371) */ + USB_DEVICE_AND_INTERFACE_INFO(0x413C, 0x819b, + USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, + USB_CDC_PROTO_NONE), + .driver_info = (unsigned long)&qmi_wwan_info, + }, + { /* ADU960S */ + USB_DEVICE_AND_INTERFACE_INFO(0x16d5, 0x650a, + USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, + USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&qmi_wwan_info, }, --- linux-lts-raring-3.8.0.orig/drivers/net/usb/smsc75xx.c +++ linux-lts-raring-3.8.0/drivers/net/usb/smsc75xx.c @@ -45,7 +45,6 @@ #define EEPROM_MAC_OFFSET (0x01) #define DEFAULT_TX_CSUM_ENABLE (true) #define DEFAULT_RX_CSUM_ENABLE (true) -#define DEFAULT_TSO_ENABLE (true) #define SMSC75XX_INTERNAL_PHY_ID (1) #define SMSC75XX_TX_OVERHEAD (8) #define MAX_RX_FIFO_SIZE (20 * 1024) @@ -914,8 +913,12 @@ static int smsc75xx_change_mtu(struct net_device *netdev, int new_mtu) { struct usbnet *dev = netdev_priv(netdev); + int ret; + + if (new_mtu > MAX_SINGLE_PACKET_SIZE) + return -EINVAL; - int ret = smsc75xx_set_rx_max_frame_length(dev, new_mtu); + ret = smsc75xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); if (ret < 0) { netdev_warn(dev->net, "Failed to set mac rx frame length\n"); return ret; @@ -1324,7 +1327,7 @@ netif_dbg(dev, ifup, dev->net, "FCT_TX_CTL set to 0x%08x\n", buf); - ret = smsc75xx_set_rx_max_frame_length(dev, 1514); + ret = smsc75xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); if (ret < 0) { netdev_warn(dev->net, "Failed to set max rx frame length\n"); return ret; @@ -1408,17 +1411,14 @@ INIT_WORK(&pdata->set_multicast, smsc75xx_deferred_multicast_write); - if (DEFAULT_TX_CSUM_ENABLE) { + if (DEFAULT_TX_CSUM_ENABLE) dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; - if (DEFAULT_TSO_ENABLE) - dev->net->features |= NETIF_F_SG | - NETIF_F_TSO | NETIF_F_TSO6; - } + if (DEFAULT_RX_CSUM_ENABLE) dev->net->features |= NETIF_F_RXCSUM; dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | - NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_RXCSUM; + NETIF_F_RXCSUM; ret = smsc75xx_wait_ready(dev, 0); if (ret < 0) { @@ -2136,8 +2136,8 @@ else if (rx_cmd_a & (RX_CMD_A_LONG | RX_CMD_A_RUNT)) dev->net->stats.rx_frame_errors++; } else { - /* ETH_FRAME_LEN + 4(CRC) + 2(COE) + 4(Vlan) */ - if (unlikely(size > (ETH_FRAME_LEN + 12))) { + /* MAX_SINGLE_PACKET_SIZE + 4(CRC) + 2(COE) + 4(Vlan) */ + if (unlikely(size > (MAX_SINGLE_PACKET_SIZE + ETH_HLEN + 12))) { netif_dbg(dev, rx_err, dev->net, "size err rx_cmd_a=0x%08x\n", rx_cmd_a); @@ -2194,8 +2194,6 @@ { u32 tx_cmd_a, tx_cmd_b; - skb_linearize(skb); - if (skb_headroom(skb) < SMSC75XX_TX_OVERHEAD) { struct sk_buff *skb2 = skb_copy_expand(skb, SMSC75XX_TX_OVERHEAD, 0, flags); --- linux-lts-raring-3.8.0.orig/drivers/net/ppp/ppp_generic.c +++ linux-lts-raring-3.8.0/drivers/net/ppp/ppp_generic.c @@ -1058,7 +1058,15 @@ return stats64; } +static struct lock_class_key ppp_tx_busylock; +static int ppp_dev_init(struct net_device *dev) +{ + dev->qdisc_tx_busylock = &ppp_tx_busylock; + return 0; +} + static const struct net_device_ops ppp_netdev_ops = { + .ndo_init = ppp_dev_init, .ndo_start_xmit = ppp_start_xmit, .ndo_do_ioctl = ppp_net_ioctl, .ndo_get_stats64 = ppp_get_stats64, --- linux-lts-raring-3.8.0.orig/drivers/net/team/team_mode_roundrobin.c +++ linux-lts-raring-3.8.0/drivers/net/team/team_mode_roundrobin.c @@ -52,6 +52,8 @@ port_index = rr_priv(team)->sent_packets++ % team->en_port_count; port = team_get_port_by_index_rcu(team, port_index); + if (unlikely(!port)) + goto drop; port = __get_first_port_up(team, port); if (unlikely(!port)) goto drop; --- linux-lts-raring-3.8.0.orig/drivers/net/team/team.c +++ linux-lts-raring-3.8.0/drivers/net/team/team.c @@ -1076,8 +1076,8 @@ } port->index = -1; - team_port_enable(team, port); list_add_tail_rcu(&port->list, &team->port_list); + team_port_enable(team, port); __team_compute_features(team); __team_port_change_port_added(port, !!netif_carrier_ok(port_dev)); __team_options_change_check(team); @@ -1139,6 +1139,8 @@ netdev_set_master(port_dev, NULL); team_port_disable_netpoll(port); vlan_vids_del_by_dev(port_dev, dev); + dev_uc_unsync(port_dev, dev); + dev_mc_unsync(port_dev, dev); dev_close(port_dev); team_port_leave(team, port); team_port_set_orig_dev_addr(port); --- linux-lts-raring-3.8.0.orig/drivers/net/xen-netback/netback.c +++ linux-lts-raring-3.8.0/drivers/net/xen-netback/netback.c @@ -47,11 +47,33 @@ #include #include +/* + * This is the maximum slots a skb can have. If a guest sends a skb + * which exceeds this limit it is considered malicious. + */ +#define FATAL_SKB_SLOTS_DEFAULT 20 +static unsigned int fatal_skb_slots = FATAL_SKB_SLOTS_DEFAULT; +module_param(fatal_skb_slots, uint, 0444); + +/* + * To avoid confusion, we define XEN_NETBK_LEGACY_SLOTS_MAX indicating + * the maximum slots a valid packet can use. Now this value is defined + * to be XEN_NETIF_NR_SLOTS_MIN, which is supposed to be supported by + * all backend. + */ +#define XEN_NETBK_LEGACY_SLOTS_MAX XEN_NETIF_NR_SLOTS_MIN + +typedef unsigned int pending_ring_idx_t; +#define INVALID_PENDING_RING_IDX (~0U) + struct pending_tx_info { - struct xen_netif_tx_request req; + struct xen_netif_tx_request req; /* coalesced tx request */ struct xenvif *vif; + pending_ring_idx_t head; /* head != INVALID_PENDING_RING_IDX + * if it is head of one or more tx + * reqs + */ }; -typedef unsigned int pending_ring_idx_t; struct netbk_rx_meta { int id; @@ -102,7 +124,11 @@ atomic_t netfront_count; struct pending_tx_info pending_tx_info[MAX_PENDING_REQS]; - struct gnttab_copy tx_copy_ops[MAX_PENDING_REQS]; + /* Coalescing tx requests before copying makes number of grant + * copy ops greater or equal to number of slots required. In + * worst case a tx request consumes 2 gnttab_copy. + */ + struct gnttab_copy tx_copy_ops[2*MAX_PENDING_REQS]; u16 pending_ring[MAX_PENDING_REQS]; @@ -118,6 +144,16 @@ static struct xen_netbk *xen_netbk; static int xen_netbk_group_nr; +/* + * If head != INVALID_PENDING_RING_IDX, it means this tx request is head of + * one or more merged tx requests, otherwise it is the continuation of + * previous tx request. + */ +static inline int pending_tx_is_head(struct xen_netbk *netbk, RING_IDX idx) +{ + return netbk->pending_tx_info[idx].head != INVALID_PENDING_RING_IDX; +} + void xen_netbk_add_xenvif(struct xenvif *vif) { int i; @@ -250,6 +286,7 @@ { int max = DIV_ROUND_UP(vif->dev->mtu, PAGE_SIZE); + /* XXX FIXME: RX path dependent on MAX_SKB_FRAGS */ if (vif->can_sg || vif->gso || vif->gso_prefix) max += MAX_SKB_FRAGS + 1; /* extra_info + frags */ @@ -657,6 +694,7 @@ __skb_queue_tail(&rxq, skb); /* Filled the batch queue? */ + /* XXX FIXME: RX path dependent on MAX_SKB_FRAGS */ if (count + MAX_SKB_FRAGS >= XEN_NETIF_RX_RING_SIZE) break; } @@ -902,47 +940,99 @@ int work_to_do) { RING_IDX cons = vif->tx.req_cons; - int frags = 0; + int slots = 0; + int drop_err = 0; + int more_data; if (!(first->flags & XEN_NETTXF_more_data)) return 0; do { - if (frags >= work_to_do) { - netdev_err(vif->dev, "Need more frags\n"); + struct xen_netif_tx_request dropped_tx = { 0 }; + + if (slots >= work_to_do) { + netdev_err(vif->dev, + "Asked for %d slots but exceeds this limit\n", + work_to_do); netbk_fatal_tx_err(vif); - return -frags; + return -ENODATA; } - if (unlikely(frags >= MAX_SKB_FRAGS)) { - netdev_err(vif->dev, "Too many frags\n"); + /* This guest is really using too many slots and + * considered malicious. + */ + if (unlikely(slots >= fatal_skb_slots)) { + netdev_err(vif->dev, + "Malicious frontend using %d slots, threshold %u\n", + slots, fatal_skb_slots); netbk_fatal_tx_err(vif); - return -frags; + return -E2BIG; + } + + /* Xen network protocol had implicit dependency on + * MAX_SKB_FRAGS. XEN_NETBK_LEGACY_SLOTS_MAX is set to + * the historical MAX_SKB_FRAGS value 18 to honor the + * same behavior as before. Any packet using more than + * 18 slots but less than fatal_skb_slots slots is + * dropped + */ + if (!drop_err && slots >= XEN_NETBK_LEGACY_SLOTS_MAX) { + if (net_ratelimit()) + netdev_dbg(vif->dev, + "Too many slots (%d) exceeding limit (%d), dropping packet\n", + slots, XEN_NETBK_LEGACY_SLOTS_MAX); + drop_err = -E2BIG; } - memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + frags), + if (drop_err) + txp = &dropped_tx; + + memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + slots), sizeof(*txp)); - if (txp->size > first->size) { - netdev_err(vif->dev, "Frag is bigger than frame.\n"); - netbk_fatal_tx_err(vif); - return -frags; + + /* If the guest submitted a frame >= 64 KiB then + * first->size overflowed and following slots will + * appear to be larger than the frame. + * + * This cannot be fatal error as there are buggy + * frontends that do this. + * + * Consume all slots and drop the packet. + */ + if (!drop_err && txp->size > first->size) { + if (net_ratelimit()) + netdev_dbg(vif->dev, + "Invalid tx request, slot size %u > remaining size %u\n", + txp->size, first->size); + drop_err = -EIO; } first->size -= txp->size; - frags++; + slots++; if (unlikely((txp->offset + txp->size) > PAGE_SIZE)) { - netdev_err(vif->dev, "txp->offset: %x, size: %u\n", + netdev_err(vif->dev, "Cross page boundary, txp->offset: %x, size: %u\n", txp->offset, txp->size); netbk_fatal_tx_err(vif); - return -frags; + return -EINVAL; } - } while ((txp++)->flags & XEN_NETTXF_more_data); - return frags; + + more_data = txp->flags & XEN_NETTXF_more_data; + + if (!drop_err) + txp++; + + } while (more_data); + + if (drop_err) { + netbk_tx_err(vif, first, cons + slots); + return drop_err; + } + + return slots; } static struct page *xen_netbk_alloc_page(struct xen_netbk *netbk, - struct sk_buff *skb, u16 pending_idx) { struct page *page; @@ -963,48 +1053,114 @@ struct skb_shared_info *shinfo = skb_shinfo(skb); skb_frag_t *frags = shinfo->frags; u16 pending_idx = *((u16 *)skb->data); - int i, start; + u16 head_idx = 0; + int slot, start; + struct page *page; + pending_ring_idx_t index, start_idx = 0; + uint16_t dst_offset; + unsigned int nr_slots; + struct pending_tx_info *first = NULL; + + /* At this point shinfo->nr_frags is in fact the number of + * slots, which can be as large as XEN_NETBK_LEGACY_SLOTS_MAX. + */ + nr_slots = shinfo->nr_frags; /* Skip first skb fragment if it is on same page as header fragment. */ start = (frag_get_pending_idx(&shinfo->frags[0]) == pending_idx); - for (i = start; i < shinfo->nr_frags; i++, txp++) { - struct page *page; - pending_ring_idx_t index; + /* Coalesce tx requests, at this point the packet passed in + * should be <= 64K. Any packets larger than 64K have been + * handled in netbk_count_requests(). + */ + for (shinfo->nr_frags = slot = start; slot < nr_slots; + shinfo->nr_frags++) { struct pending_tx_info *pending_tx_info = netbk->pending_tx_info; - index = pending_index(netbk->pending_cons++); - pending_idx = netbk->pending_ring[index]; - page = xen_netbk_alloc_page(netbk, skb, pending_idx); + page = alloc_page(GFP_KERNEL|__GFP_COLD); if (!page) goto err; - gop->source.u.ref = txp->gref; - gop->source.domid = vif->domid; - gop->source.offset = txp->offset; - - gop->dest.u.gmfn = virt_to_mfn(page_address(page)); - gop->dest.domid = DOMID_SELF; - gop->dest.offset = txp->offset; + dst_offset = 0; + first = NULL; + while (dst_offset < PAGE_SIZE && slot < nr_slots) { + gop->flags = GNTCOPY_source_gref; + + gop->source.u.ref = txp->gref; + gop->source.domid = vif->domid; + gop->source.offset = txp->offset; + + gop->dest.domid = DOMID_SELF; + + gop->dest.offset = dst_offset; + gop->dest.u.gmfn = virt_to_mfn(page_address(page)); + + if (dst_offset + txp->size > PAGE_SIZE) { + /* This page can only merge a portion + * of tx request. Do not increment any + * pointer / counter here. The txp + * will be dealt with in future + * rounds, eventually hitting the + * `else` branch. + */ + gop->len = PAGE_SIZE - dst_offset; + txp->offset += gop->len; + txp->size -= gop->len; + dst_offset += gop->len; /* quit loop */ + } else { + /* This tx request can be merged in the page */ + gop->len = txp->size; + dst_offset += gop->len; + + index = pending_index(netbk->pending_cons++); + + pending_idx = netbk->pending_ring[index]; + + memcpy(&pending_tx_info[pending_idx].req, txp, + sizeof(*txp)); + xenvif_get(vif); + + pending_tx_info[pending_idx].vif = vif; + + /* Poison these fields, corresponding + * fields for head tx req will be set + * to correct values after the loop. + */ + netbk->mmap_pages[pending_idx] = (void *)(~0UL); + pending_tx_info[pending_idx].head = + INVALID_PENDING_RING_IDX; + + if (!first) { + first = &pending_tx_info[pending_idx]; + start_idx = index; + head_idx = pending_idx; + } - gop->len = txp->size; - gop->flags = GNTCOPY_source_gref; + txp++; + slot++; + } - gop++; + gop++; + } - memcpy(&pending_tx_info[pending_idx].req, txp, sizeof(*txp)); - xenvif_get(vif); - pending_tx_info[pending_idx].vif = vif; - frag_set_pending_idx(&frags[i], pending_idx); + first->req.offset = 0; + first->req.size = dst_offset; + first->head = start_idx; + set_page_ext(page, netbk, head_idx); + netbk->mmap_pages[head_idx] = page; + frag_set_pending_idx(&frags[shinfo->nr_frags], head_idx); } + BUG_ON(shinfo->nr_frags > MAX_SKB_FRAGS); + return gop; err: /* Unwind, freeing all pages and sending error responses. */ - while (i-- > start) { - xen_netbk_idx_release(netbk, frag_get_pending_idx(&frags[i]), - XEN_NETIF_RSP_ERROR); + while (shinfo->nr_frags-- > start) { + xen_netbk_idx_release(netbk, + frag_get_pending_idx(&frags[shinfo->nr_frags]), + XEN_NETIF_RSP_ERROR); } /* The head too, if necessary. */ if (start) @@ -1020,8 +1176,10 @@ struct gnttab_copy *gop = *gopp; u16 pending_idx = *((u16 *)skb->data); struct skb_shared_info *shinfo = skb_shinfo(skb); + struct pending_tx_info *tx_info; int nr_frags = shinfo->nr_frags; int i, err, start; + u16 peek; /* peek into next tx request */ /* Check status of header. */ err = gop->status; @@ -1033,11 +1191,20 @@ for (i = start; i < nr_frags; i++) { int j, newerr; + pending_ring_idx_t head; pending_idx = frag_get_pending_idx(&shinfo->frags[i]); + tx_info = &netbk->pending_tx_info[pending_idx]; + head = tx_info->head; /* Check error status: if okay then remember grant handle. */ - newerr = (++gop)->status; + do { + newerr = (++gop)->status; + if (newerr) + break; + peek = netbk->pending_ring[pending_index(++head)]; + } while (!pending_tx_is_head(netbk, peek)); + if (likely(!newerr)) { /* Had a previous error? Invalidate this fragment. */ if (unlikely(err)) @@ -1262,11 +1429,12 @@ struct sk_buff *skb; int ret; - while (((nr_pending_reqs(netbk) + MAX_SKB_FRAGS) < MAX_PENDING_REQS) && + while ((nr_pending_reqs(netbk) + XEN_NETBK_LEGACY_SLOTS_MAX + < MAX_PENDING_REQS) && !list_empty(&netbk->net_schedule_list)) { struct xenvif *vif; struct xen_netif_tx_request txreq; - struct xen_netif_tx_request txfrags[MAX_SKB_FRAGS]; + struct xen_netif_tx_request txfrags[XEN_NETBK_LEGACY_SLOTS_MAX]; struct page *page; struct xen_netif_extra_info extras[XEN_NETIF_EXTRA_TYPE_MAX-1]; u16 pending_idx; @@ -1354,7 +1522,7 @@ pending_idx = netbk->pending_ring[index]; data_len = (txreq.size > PKT_PROT_LEN && - ret < MAX_SKB_FRAGS) ? + ret < XEN_NETBK_LEGACY_SLOTS_MAX) ? PKT_PROT_LEN : txreq.size; skb = alloc_skb(data_len + NET_SKB_PAD + NET_IP_ALIGN, @@ -1381,7 +1549,7 @@ } /* XXX could copy straight to head */ - page = xen_netbk_alloc_page(netbk, skb, pending_idx); + page = xen_netbk_alloc_page(netbk, pending_idx); if (!page) { kfree_skb(skb); netbk_tx_err(vif, &txreq, idx); @@ -1404,6 +1572,7 @@ memcpy(&netbk->pending_tx_info[pending_idx].req, &txreq, sizeof(txreq)); netbk->pending_tx_info[pending_idx].vif = vif; + netbk->pending_tx_info[pending_idx].head = index; *((u16 *)skb->data) = pending_idx; __skb_put(skb, data_len); @@ -1531,7 +1700,10 @@ { struct xenvif *vif; struct pending_tx_info *pending_tx_info; - pending_ring_idx_t index; + pending_ring_idx_t head; + u16 peek; /* peek into next tx request */ + + BUG_ON(netbk->mmap_pages[pending_idx] == (void *)(~0UL)); /* Already complete? */ if (netbk->mmap_pages[pending_idx] == NULL) @@ -1540,19 +1712,40 @@ pending_tx_info = &netbk->pending_tx_info[pending_idx]; vif = pending_tx_info->vif; + head = pending_tx_info->head; + + BUG_ON(!pending_tx_is_head(netbk, head)); + BUG_ON(netbk->pending_ring[pending_index(head)] != pending_idx); - make_tx_response(vif, &pending_tx_info->req, status); + do { + pending_ring_idx_t index; + pending_ring_idx_t idx = pending_index(head); + u16 info_idx = netbk->pending_ring[idx]; - index = pending_index(netbk->pending_prod++); - netbk->pending_ring[index] = pending_idx; + pending_tx_info = &netbk->pending_tx_info[info_idx]; + make_tx_response(vif, &pending_tx_info->req, status); - xenvif_put(vif); + /* Setting any number other than + * INVALID_PENDING_RING_IDX indicates this slot is + * starting a new packet / ending a previous packet. + */ + pending_tx_info->head = 0; + + index = pending_index(netbk->pending_prod++); + netbk->pending_ring[index] = netbk->pending_ring[info_idx]; + + xenvif_put(vif); + + peek = netbk->pending_ring[pending_index(++head)]; + + } while (!pending_tx_is_head(netbk, peek)); netbk->mmap_pages[pending_idx]->mapping = 0; put_page(netbk->mmap_pages[pending_idx]); netbk->mmap_pages[pending_idx] = NULL; } + static void make_tx_response(struct xenvif *vif, struct xen_netif_tx_request *txp, s8 st) @@ -1605,8 +1798,9 @@ static inline int tx_work_todo(struct xen_netbk *netbk) { - if (((nr_pending_reqs(netbk) + MAX_SKB_FRAGS) < MAX_PENDING_REQS) && - !list_empty(&netbk->net_schedule_list)) + if ((nr_pending_reqs(netbk) + XEN_NETBK_LEGACY_SLOTS_MAX + < MAX_PENDING_REQS) && + !list_empty(&netbk->net_schedule_list)) return 1; return 0; @@ -1689,6 +1883,13 @@ if (!xen_domain()) return -ENODEV; + if (fatal_skb_slots < XEN_NETBK_LEGACY_SLOTS_MAX) { + printk(KERN_INFO + "xen-netback: fatal_skb_slots too small (%d), bump it to XEN_NETBK_LEGACY_SLOTS_MAX (%d)\n", + fatal_skb_slots, XEN_NETBK_LEGACY_SLOTS_MAX); + fatal_skb_slots = XEN_NETBK_LEGACY_SLOTS_MAX; + } + xen_netbk_group_nr = num_online_cpus(); xen_netbk = vzalloc(sizeof(struct xen_netbk) * xen_netbk_group_nr); if (!xen_netbk) --- linux-lts-raring-3.8.0.orig/drivers/net/xen-netback/interface.c +++ linux-lts-raring-3.8.0/drivers/net/xen-netback/interface.c @@ -132,6 +132,7 @@ static void xenvif_down(struct xenvif *vif) { disable_irq(vif->irq); + del_timer_sync(&vif->credit_timeout); xen_netbk_deschedule_xenvif(vif); xen_netbk_remove_xenvif(vif); } @@ -363,8 +364,6 @@ atomic_dec(&vif->refcnt); wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0); - del_timer_sync(&vif->credit_timeout); - if (vif->irq) unbind_from_irqhandler(vif->irq, vif); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/zd1201.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/zd1201.c @@ -98,10 +98,12 @@ goto exit; err = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 0x4, - USB_DIR_IN | 0x40, 0,0, &ret, sizeof(ret), ZD1201_FW_TIMEOUT); + USB_DIR_IN | 0x40, 0, 0, buf, sizeof(ret), ZD1201_FW_TIMEOUT); if (err < 0) goto exit; + memcpy(&ret, buf, sizeof(ret)); + if (ret & 0x80) { err = -EIO; goto exit; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mac80211_hwsim.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mac80211_hwsim.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -1586,6 +1587,7 @@ debugfs_remove(data->debugfs_ps); debugfs_remove(data->debugfs); ieee80211_unregister_hw(data->hw); + device_release_driver(data->dev); device_unregister(data->dev); ieee80211_free_hw(data->hw); } @@ -1594,7 +1596,9 @@ static struct device_driver mac80211_hwsim_driver = { - .name = "mac80211_hwsim" + .name = "mac80211_hwsim", + .bus = &platform_bus_type, + .owner = THIS_MODULE, }; static const struct net_device_ops hwsim_netdev_ops = { @@ -2090,6 +2094,8 @@ if (IS_ERR(hwsim_class)) return PTR_ERR(hwsim_class); + driver_register(&mac80211_hwsim_driver); + memset(addr, 0, ETH_ALEN); addr[0] = 0x02; @@ -2110,12 +2116,20 @@ "hwsim%d", i); if (IS_ERR(data->dev)) { printk(KERN_DEBUG - "mac80211_hwsim: device_create " - "failed (%ld)\n", PTR_ERR(data->dev)); + "mac80211_hwsim: device_create failed (%ld)\n", + PTR_ERR(data->dev)); err = -ENOMEM; goto failed_drvdata; } data->dev->driver = &mac80211_hwsim_driver; + err = device_bind_driver(data->dev); + if (err != 0) { + printk(KERN_DEBUG + "mac80211_hwsim: device_bind_driver failed (%d)\n", + err); + goto failed_hw; + } + skb_queue_head_init(&data->pending); SET_IEEE80211_DEV(hw, data->dev); @@ -2415,6 +2429,7 @@ ieee80211_free_hw(hw); failed: mac80211_hwsim_free(); + driver_unregister(&mac80211_hwsim_driver); return err; } module_init(init_mac80211_hwsim); @@ -2427,5 +2442,6 @@ mac80211_hwsim_free(); unregister_netdev(hwsim_mon); + driver_unregister(&mac80211_hwsim_driver); } module_exit(exit_mac80211_hwsim); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/cfg80211.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/cfg80211.c @@ -1846,7 +1846,8 @@ } } - for (i = 0; i < request->n_channels; i++) { + for (i = 0; i < min_t(u32, request->n_channels, + MWIFIEX_USER_SCAN_CHAN_MAX); i++) { chan = request->channels[i]; priv->user_scan_cfg->chan_list[i].chan_number = chan->hw_value; priv->user_scan_cfg->chan_list[i].radio_type = chan->band; @@ -2154,9 +2155,6 @@ if (wdev->netdev->reg_state == NETREG_REGISTERED) unregister_netdevice(wdev->netdev); - if (wdev->netdev->reg_state == NETREG_UNREGISTERED) - free_netdev(wdev->netdev); - /* Clear the priv in adapter */ priv->netdev = NULL; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/pcie.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/pcie.c @@ -291,7 +291,7 @@ i++; usleep_range(10, 20); /* 50ms max wait */ - if (i == 50000) + if (i == 5000) break; } @@ -1831,9 +1831,9 @@ if (pdev) { pci_iounmap(pdev, card->pci_mmap); pci_iounmap(pdev, card->pci_mmap1); - - pci_release_regions(pdev); pci_disable_device(pdev); + pci_release_region(pdev, 2); + pci_release_region(pdev, 0); pci_set_drvdata(pdev, NULL); } } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/main.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/main.h @@ -714,7 +714,6 @@ u16 cmd_wait_q_required; struct mwifiex_wait_queue cmd_wait_q; u8 scan_wait_q_woken; - struct cmd_ctrl_node *cmd_queued; spinlock_t queue_lock; /* lock for tx queues */ struct completion fw_load; u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; @@ -994,7 +993,8 @@ struct mwifiex_multicast_list *mcast_list); int mwifiex_copy_mcast_addr(struct mwifiex_multicast_list *mlist, struct net_device *dev); -int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter); +int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter, + struct cmd_ctrl_node *cmd_queued); int mwifiex_bss_start(struct mwifiex_private *priv, struct cfg80211_bss *bss, struct cfg80211_ssid *req_ssid); int mwifiex_cancel_hs(struct mwifiex_private *priv, int cmd_type); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/11n_aggr.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/11n_aggr.h @@ -26,7 +26,7 @@ int mwifiex_11n_deaggregate_pkt(struct mwifiex_private *priv, struct sk_buff *skb); int mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, - struct mwifiex_ra_list_tbl *ptr, int headroom, + struct mwifiex_ra_list_tbl *ptr, int ptr_index, unsigned long flags) __releases(&priv->wmm.ra_list_spinlock); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/join.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/join.c @@ -1092,10 +1092,9 @@ adhoc_join->bss_descriptor.bssid, adhoc_join->bss_descriptor.ssid); - for (i = 0; bss_desc->supported_rates[i] && - i < MWIFIEX_SUPPORTED_RATES; - i++) - ; + for (i = 0; i < MWIFIEX_SUPPORTED_RATES && + bss_desc->supported_rates[i]; i++) + ; rates_size = i; /* Copy Data Rates from the Rates recorded in scan response */ --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/scan.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/scan.c @@ -1366,10 +1366,15 @@ list_del(&cmd_node->list); spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); - adapter->cmd_queued = cmd_node; mwifiex_insert_cmd_to_pending_q(adapter, cmd_node, true); queue_work(adapter->workqueue, &adapter->main_work); + + /* Perform internal scan synchronously */ + if (!priv->scan_request) { + dev_dbg(adapter->dev, "wait internal scan\n"); + mwifiex_wait_queue_complete(adapter, cmd_node); + } } else { spin_unlock_irqrestore(&adapter->scan_pending_q_lock, flags); @@ -1765,7 +1770,12 @@ /* Need to indicate IOCTL complete */ if (adapter->curr_cmd->wait_q_enabled) { adapter->cmd_wait_q.status = 0; - mwifiex_complete_cmd(adapter, adapter->curr_cmd); + if (!priv->scan_request) { + dev_dbg(adapter->dev, + "complete internal scan\n"); + mwifiex_complete_cmd(adapter, + adapter->curr_cmd); + } } if (priv->report_scan_result) priv->report_scan_result = false; @@ -1923,9 +1933,6 @@ /* Normal scan */ ret = mwifiex_scan_networks(priv, NULL); - if (!ret) - ret = mwifiex_wait_queue_complete(priv->adapter); - up(&priv->async_sem); return ret; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/main.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/main.c @@ -363,20 +363,6 @@ dev_err(adapter->dev, "cannot create default STA interface\n"); goto err_add_intf; } - - /* Create AP interface by default */ - if (!mwifiex_add_virtual_intf(adapter->wiphy, "uap%d", - NL80211_IFTYPE_AP, NULL, NULL)) { - dev_err(adapter->dev, "cannot create default AP interface\n"); - goto err_add_intf; - } - - /* Create P2P interface by default */ - if (!mwifiex_add_virtual_intf(adapter->wiphy, "p2p%d", - NL80211_IFTYPE_P2P_CLIENT, NULL, NULL)) { - dev_err(adapter->dev, "cannot create default P2P interface\n"); - goto err_add_intf; - } rtnl_unlock(); mwifiex_drv_get_driver_version(adapter, fmt, sizeof(fmt) - 1); @@ -646,6 +632,7 @@ struct net_device *dev) { dev->netdev_ops = &mwifiex_netdev_ops; + dev->destructor = free_netdev; /* Initialize private structure */ priv->current_key_index = 0; priv->media_connected = false; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/init.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/init.c @@ -707,6 +707,14 @@ return ret; } + /* cancel current command */ + if (adapter->curr_cmd) { + dev_warn(adapter->dev, "curr_cmd is still in processing\n"); + del_timer(&adapter->cmd_timer); + mwifiex_insert_cmd_to_free_q(adapter, adapter->curr_cmd); + adapter->curr_cmd = NULL; + } + /* shut down mwifiex */ dev_dbg(adapter->dev, "info: shutdown mwifiex...\n"); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/usb.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/usb.c @@ -446,9 +446,6 @@ */ adapter->is_suspended = true; - for (i = 0; i < adapter->priv_num; i++) - netif_carrier_off(adapter->priv[i]->netdev); - if (atomic_read(&card->rx_cmd_urb_pending) && card->rx_cmd.urb) usb_kill_urb(card->rx_cmd.urb); @@ -508,10 +505,6 @@ MWIFIEX_RX_CMD_BUF_SIZE); } - for (i = 0; i < adapter->priv_num; i++) - if (adapter->priv[i]->media_connected) - netif_carrier_on(adapter->priv[i]->netdev); - /* Disable Host Sleep */ if (adapter->hs_activated) mwifiex_cancel_hs(mwifiex_get_priv(adapter, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/11n_aggr.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/11n_aggr.c @@ -149,7 +149,7 @@ */ int mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv, - struct mwifiex_ra_list_tbl *pra_list, int headroom, + struct mwifiex_ra_list_tbl *pra_list, int ptrindex, unsigned long ra_list_flags) __releases(&priv->wmm.ra_list_spinlock) { @@ -159,6 +159,7 @@ int pad = 0, ret; struct mwifiex_tx_param tx_param; struct txpd *ptx_pd = NULL; + int headroom = adapter->iface_type == MWIFIEX_USB ? 0 : INTF_HEADER_LEN; skb_src = skb_peek(&pra_list->skb_head); if (!skb_src) { --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/sdio.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/sdio.c @@ -1455,8 +1455,8 @@ /* Allocate buffer and copy payload */ blk_size = MWIFIEX_SDIO_BLOCK_SIZE; buf_block_len = (pkt_len + blk_size - 1) / blk_size; - *(u16 *) &payload[0] = (u16) pkt_len; - *(u16 *) &payload[2] = type; + *(__le16 *)&payload[0] = cpu_to_le16((u16)pkt_len); + *(__le16 *)&payload[2] = cpu_to_le16(type); /* * This is SDIO specific header --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/wmm.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/wmm.c @@ -1295,8 +1295,7 @@ if (mwifiex_is_amsdu_allowed(priv, tid) && mwifiex_is_11n_aggragation_possible(priv, ptr, adapter->tx_buf_size)) - mwifiex_11n_aggregate_pkt(priv, ptr, INTF_HEADER_LEN, - ptr_index, flags); + mwifiex_11n_aggregate_pkt(priv, ptr, ptr_index, flags); /* ra_list_spinlock has been freed in mwifiex_11n_aggregate_pkt() */ else --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/sta_ioctl.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/sta_ioctl.c @@ -54,16 +54,10 @@ * This function waits on a cmd wait queue. It also cancels the pending * request after waking up, in case of errors. */ -int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter) +int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter, + struct cmd_ctrl_node *cmd_queued) { int status; - struct cmd_ctrl_node *cmd_queued; - - if (!adapter->cmd_queued) - return 0; - - cmd_queued = adapter->cmd_queued; - adapter->cmd_queued = NULL; dev_dbg(adapter->dev, "cmd pending\n"); atomic_inc(&adapter->cmd_pending); @@ -105,7 +99,7 @@ } else { /* Multicast */ priv->curr_pkt_filter &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE; - if (mcast_list->mode == MWIFIEX_MULTICAST_MODE) { + if (mcast_list->mode == MWIFIEX_ALL_MULTI_MODE) { dev_dbg(priv->adapter->dev, "info: Enabling All Multicast!\n"); priv->curr_pkt_filter |= @@ -117,20 +111,11 @@ dev_dbg(priv->adapter->dev, "info: Set multicast list=%d\n", mcast_list->num_multicast_addr); - /* Set multicast addresses to firmware */ - if (old_pkt_filter == priv->curr_pkt_filter) { - /* Send request to firmware */ - ret = mwifiex_send_cmd_async(priv, - HostCmd_CMD_MAC_MULTICAST_ADR, - HostCmd_ACT_GEN_SET, 0, - mcast_list); - } else { - /* Send request to firmware */ - ret = mwifiex_send_cmd_async(priv, - HostCmd_CMD_MAC_MULTICAST_ADR, - HostCmd_ACT_GEN_SET, 0, - mcast_list); - } + /* Send multicast addresses to firmware */ + ret = mwifiex_send_cmd_async(priv, + HostCmd_CMD_MAC_MULTICAST_ADR, + HostCmd_ACT_GEN_SET, 0, + mcast_list); } } } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/mwifiex/cmdevt.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/mwifiex/cmdevt.c @@ -156,6 +156,20 @@ return -1; } + cmd_code = le16_to_cpu(host_cmd->command); + cmd_size = le16_to_cpu(host_cmd->size); + + if (adapter->hw_status == MWIFIEX_HW_STATUS_RESET && + cmd_code != HostCmd_CMD_FUNC_SHUTDOWN && + cmd_code != HostCmd_CMD_FUNC_INIT) { + dev_err(adapter->dev, + "DNLD_CMD: FW in reset state, ignore cmd %#x\n", + cmd_code); + mwifiex_complete_cmd(adapter, cmd_node); + mwifiex_insert_cmd_to_free_q(adapter, cmd_node); + return -1; + } + /* Set command sequence number */ adapter->seq_num++; host_cmd->seq_num = cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO @@ -167,9 +181,6 @@ adapter->curr_cmd = cmd_node; spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, flags); - cmd_code = le16_to_cpu(host_cmd->command); - cmd_size = le16_to_cpu(host_cmd->size); - /* Adjust skb length */ if (cmd_node->cmd_skb->len > cmd_size) /* @@ -488,8 +499,6 @@ ret = mwifiex_send_cmd_async(priv, cmd_no, cmd_action, cmd_oid, data_buf); - if (!ret) - ret = mwifiex_wait_queue_complete(adapter); return ret; } @@ -592,9 +601,10 @@ if (cmd_no == HostCmd_CMD_802_11_SCAN) { mwifiex_queue_scan_cmd(priv, cmd_node); } else { - adapter->cmd_queued = cmd_node; mwifiex_insert_cmd_to_pending_q(adapter, cmd_node, true); queue_work(adapter->workqueue, &adapter->main_work); + if (cmd_node->wait_q_enabled) + ret = mwifiex_wait_queue_complete(adapter, cmd_node); } return ret; @@ -1170,6 +1180,7 @@ adapter->if_ops.wakeup(adapter); adapter->hs_activated = false; adapter->is_hs_configured = false; + adapter->is_suspended = false; mwifiex_hs_activated_event(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY), false); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rtlwifi/wifi.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/rtlwifi/wifi.h @@ -1871,7 +1871,7 @@ that it points to the data allocated beyond this structure like: rtl_pci_priv or rtl_usb_priv */ - u8 priv[0]; + u8 priv[0] __aligned(sizeof(void *)); }; #define rtl_priv(hw) (((struct rtl_priv *)(hw)->priv)) --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rtlwifi/usb.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rtlwifi/usb.c @@ -42,8 +42,12 @@ static void usbctrl_async_callback(struct urb *urb) { - if (urb) - kfree(urb->context); + if (urb) { + /* free dr */ + kfree(urb->setup_packet); + /* free databuf */ + kfree(urb->transfer_buffer); + } } static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request, @@ -55,39 +59,47 @@ u8 reqtype; struct usb_ctrlrequest *dr; struct urb *urb; - struct rtl819x_async_write_data { - u8 data[REALTEK_USB_VENQT_MAX_BUF_SIZE]; - struct usb_ctrlrequest dr; - } *buf; + const u16 databuf_maxlen = REALTEK_USB_VENQT_MAX_BUF_SIZE; + u8 *databuf; + + if (WARN_ON_ONCE(len > databuf_maxlen)) + len = databuf_maxlen; pipe = usb_sndctrlpipe(udev, 0); /* write_out */ reqtype = REALTEK_USB_VENQT_WRITE; - buf = kmalloc(sizeof(*buf), GFP_ATOMIC); - if (!buf) + dr = kmalloc(sizeof(*dr), GFP_ATOMIC); + if (!dr) + return -ENOMEM; + + databuf = kmalloc(databuf_maxlen, GFP_ATOMIC); + if (!databuf) { + kfree(dr); return -ENOMEM; + } urb = usb_alloc_urb(0, GFP_ATOMIC); if (!urb) { - kfree(buf); + kfree(databuf); + kfree(dr); return -ENOMEM; } - dr = &buf->dr; - dr->bRequestType = reqtype; dr->bRequest = request; dr->wValue = cpu_to_le16(value); dr->wIndex = cpu_to_le16(index); dr->wLength = cpu_to_le16(len); /* data are already in little-endian order */ - memcpy(buf, pdata, len); + memcpy(databuf, pdata, len); usb_fill_control_urb(urb, udev, pipe, - (unsigned char *)dr, buf, len, - usbctrl_async_callback, buf); + (unsigned char *)dr, databuf, len, + usbctrl_async_callback, NULL); rc = usb_submit_urb(urb, GFP_ATOMIC); - if (rc < 0) - kfree(buf); + if (rc < 0) { + kfree(databuf); + kfree(dr); + } usb_free_urb(urb); return rc; } @@ -842,6 +854,7 @@ if (unlikely(!_urb)) { RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Can't allocate urb. Drop skb!\n"); + kfree_skb(skb); return; } urb_list = &rtlusb->tx_pending[ep_num]; @@ -941,7 +954,8 @@ }; int rtl_usb_probe(struct usb_interface *intf, - const struct usb_device_id *id) + const struct usb_device_id *id, + struct rtl_hal_cfg *rtl_hal_cfg) { int err; struct ieee80211_hw *hw = NULL; @@ -976,7 +990,7 @@ usb_set_intfdata(intf, hw); /* init cfg & intf_ops */ rtlpriv->rtlhal.interface = INTF_USB; - rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_info); + rtlpriv->cfg = rtl_hal_cfg; rtlpriv->intf_ops = &rtl_usb_ops; rtl_dbgp_flag_init(hw); /* Init IO handler */ --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rtlwifi/usb.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/rtlwifi/usb.h @@ -157,7 +157,8 @@ int rtl_usb_probe(struct usb_interface *intf, - const struct usb_device_id *id); + const struct usb_device_id *id, + struct rtl_hal_cfg *rtl92cu_hal_cfg); void rtl_usb_disconnect(struct usb_interface *intf); int rtl_usb_suspend(struct usb_interface *pusb_intf, pm_message_t message); int rtl_usb_resume(struct usb_interface *pusb_intf); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c @@ -1377,74 +1377,57 @@ void rtl92cu_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid) { - /* dummy routine needed for callback from rtl_op_configure_filter() */ -} - -/*========================================================================== */ - -static void _rtl92cu_set_check_bssid(struct ieee80211_hw *hw, - enum nl80211_iftype type) -{ struct rtl_priv *rtlpriv = rtl_priv(hw); - u32 reg_rcr = rtl_read_dword(rtlpriv, REG_RCR); struct rtl_hal *rtlhal = rtl_hal(rtlpriv); - struct rtl_phy *rtlphy = &(rtlpriv->phy); - u8 filterout_non_associated_bssid = false; + u32 reg_rcr = rtl_read_dword(rtlpriv, REG_RCR); - switch (type) { - case NL80211_IFTYPE_ADHOC: - case NL80211_IFTYPE_STATION: - filterout_non_associated_bssid = true; - break; - case NL80211_IFTYPE_UNSPECIFIED: - case NL80211_IFTYPE_AP: - default: - break; - } - if (filterout_non_associated_bssid) { + if (rtlpriv->psc.rfpwr_state != ERFON) + return; + + if (check_bssid) { + u8 tmp; if (IS_NORMAL_CHIP(rtlhal->version)) { - switch (rtlphy->current_io_type) { - case IO_CMD_RESUME_DM_BY_SCAN: - reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN); - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_RCR, (u8 *)(®_rcr)); - /* enable update TSF */ - _rtl92cu_set_bcn_ctrl_reg(hw, 0, BIT(4)); - break; - case IO_CMD_PAUSE_DM_BY_SCAN: - reg_rcr &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN); - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_RCR, (u8 *)(®_rcr)); - /* disable update TSF */ - _rtl92cu_set_bcn_ctrl_reg(hw, BIT(4), 0); - break; - } + reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN); + tmp = BIT(4); } else { - reg_rcr |= (RCR_CBSSID); - rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, - (u8 *)(®_rcr)); - _rtl92cu_set_bcn_ctrl_reg(hw, 0, (BIT(4)|BIT(5))); + reg_rcr |= RCR_CBSSID; + tmp = BIT(4) | BIT(5); } - } else if (filterout_non_associated_bssid == false) { + rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, + (u8 *) (®_rcr)); + _rtl92cu_set_bcn_ctrl_reg(hw, 0, tmp); + } else { + u8 tmp; if (IS_NORMAL_CHIP(rtlhal->version)) { - reg_rcr &= (~(RCR_CBSSID_DATA | RCR_CBSSID_BCN)); - rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, - (u8 *)(®_rcr)); - _rtl92cu_set_bcn_ctrl_reg(hw, BIT(4), 0); + reg_rcr &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN); + tmp = BIT(4); } else { - reg_rcr &= (~RCR_CBSSID); - rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, - (u8 *)(®_rcr)); - _rtl92cu_set_bcn_ctrl_reg(hw, (BIT(4)|BIT(5)), 0); + reg_rcr &= ~RCR_CBSSID; + tmp = BIT(4) | BIT(5); } + reg_rcr &= (~(RCR_CBSSID_DATA | RCR_CBSSID_BCN)); + rtlpriv->cfg->ops->set_hw_reg(hw, + HW_VAR_RCR, (u8 *) (®_rcr)); + _rtl92cu_set_bcn_ctrl_reg(hw, tmp, 0); } } +/*========================================================================== */ + int rtl92cu_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type) { + struct rtl_priv *rtlpriv = rtl_priv(hw); + if (_rtl92cu_set_media_status(hw, type)) return -EOPNOTSUPP; - _rtl92cu_set_check_bssid(hw, type); + + if (rtlpriv->mac80211.link_state == MAC80211_LINKED) { + if (type != NL80211_IFTYPE_AP) + rtl92cu_set_check_bssid(hw, true); + } else { + rtl92cu_set_check_bssid(hw, false); + } + return 0; } @@ -2058,8 +2041,6 @@ (shortgi_rate << 4) | (shortgi_rate); } rtl_write_dword(rtlpriv, REG_ARFR0 + ratr_index * 4, ratr_value); - RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, "%x\n", - rtl_read_dword(rtlpriv, REG_ARFR0)); } void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c @@ -285,6 +285,7 @@ {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817f, rtl92cu_hal_cfg)}, /* RTL8188CUS-VL */ {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818a, rtl92cu_hal_cfg)}, + {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x819a, rtl92cu_hal_cfg)}, /* 8188 Combo for BC4 */ {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)}, @@ -357,15 +358,22 @@ {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ {RTL_USB_DEVICE(0x2019, 0xab2b, rtl92cu_hal_cfg)}, /*Planex -Abocom*/ {RTL_USB_DEVICE(0x20f4, 0x624d, rtl92cu_hal_cfg)}, /*TRENDNet*/ + {RTL_USB_DEVICE(0x2357, 0x0100, rtl92cu_hal_cfg)}, /*TP-Link WN8200ND*/ {RTL_USB_DEVICE(0x7392, 0x7822, rtl92cu_hal_cfg)}, /*Edimax -Edimax*/ {} }; MODULE_DEVICE_TABLE(usb, rtl8192c_usb_ids); +static int rtl8192cu_probe(struct usb_interface *intf, + const struct usb_device_id *id) +{ + return rtl_usb_probe(intf, id, &rtl92cu_hal_cfg); +} + static struct usb_driver rtl8192cu_driver = { .name = "rtl8192cu", - .probe = rtl_usb_probe, + .probe = rtl8192cu_probe, .disconnect = rtl_usb_disconnect, .id_table = rtl8192c_usb_ids, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rtlwifi/rtl8723ae/sw.c @@ -251,7 +251,7 @@ .bar_id = 2, .write_readback = true, .name = "rtl8723ae_pci", - .fw_name = "rtlwifi/rtl8723aefw.bin", + .fw_name = "rtlwifi/rtl8723fw.bin", .ops = &rtl8723ae_hal_ops, .mod_params = &rtl8723ae_mod_params, .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, @@ -353,8 +353,8 @@ MODULE_AUTHOR("Larry Finger "); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Realtek 8723E 802.11n PCI wireless"); -MODULE_FIRMWARE("rtlwifi/rtl8723aefw.bin"); -MODULE_FIRMWARE("rtlwifi/rtl8723aefw_B.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8723fw.bin"); +MODULE_FIRMWARE("rtlwifi/rtl8723fw_B.bin"); module_param_named(swenc, rtl8723ae_mod_params.sw_crypto, bool, 0444); module_param_named(debug, rtl8723ae_mod_params.debug, int, 0444); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlegacy/4965-mac.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlegacy/4965-mac.c @@ -4413,13 +4413,13 @@ * is killed. Hence update the killswitch state here. The * rfkill handler will care about restarting if needed. */ - if (!test_bit(S_ALIVE, &il->status)) { - if (hw_rf_kill) - set_bit(S_RFKILL, &il->status); - else - clear_bit(S_RFKILL, &il->status); - wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); + if (hw_rf_kill) { + set_bit(S_RFKILL, &il->status); + } else { + clear_bit(S_RFKILL, &il->status); + il_force_reset(il, true); } + wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); handled |= CSR_INT_BIT_RF_KILL; } @@ -5287,6 +5287,9 @@ il->active_rate = RATES_MASK; + il_power_update_mode(il, true); + D_INFO("Updated power mode\n"); + if (il_is_associated(il)) { struct il_rxon_cmd *active_rxon = (struct il_rxon_cmd *)&il->active; @@ -5317,9 +5320,6 @@ D_INFO("ALIVE processing complete.\n"); wake_up(&il->wait_command_queue); - il_power_update_mode(il, true); - D_INFO("Updated power mode\n"); - return; restart: --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlegacy/common.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlegacy/common.c @@ -4659,6 +4659,7 @@ return 0; } +EXPORT_SYMBOL(il_force_reset); int il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/libertas/if_sdio.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/libertas/if_sdio.c @@ -825,6 +825,11 @@ sdio_release_host(func); + /* Set fw_ready before queuing any commands so that + * lbs_thread won't block from sending them to firmware. + */ + priv->fw_ready = 1; + /* * FUNC_INIT is required for SD8688 WLAN/BT multiple functions */ @@ -839,7 +844,6 @@ netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); } - priv->fw_ready = 1; wake_up(&card->pwron_waitq); if (!card->started) { --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rt2x00/rt2x00queue.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rt2x00/rt2x00queue.c @@ -877,13 +877,8 @@ spin_unlock_irqrestore(&queue->index_lock, irqflags); } -void rt2x00queue_pause_queue(struct data_queue *queue) +void rt2x00queue_pause_queue_nocheck(struct data_queue *queue) { - if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || - !test_bit(QUEUE_STARTED, &queue->flags) || - test_and_set_bit(QUEUE_PAUSED, &queue->flags)) - return; - switch (queue->qid) { case QID_AC_VO: case QID_AC_VI: @@ -899,6 +894,15 @@ break; } } +void rt2x00queue_pause_queue(struct data_queue *queue) +{ + if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || + !test_bit(QUEUE_STARTED, &queue->flags) || + test_and_set_bit(QUEUE_PAUSED, &queue->flags)) + return; + + rt2x00queue_pause_queue_nocheck(queue); +} EXPORT_SYMBOL_GPL(rt2x00queue_pause_queue); void rt2x00queue_unpause_queue(struct data_queue *queue) @@ -960,7 +964,7 @@ return; } - rt2x00queue_pause_queue(queue); + rt2x00queue_pause_queue_nocheck(queue); queue->rt2x00dev->ops->lib->stop_queue(queue); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rt2x00/rt2800lib.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rt2x00/rt2800lib.c @@ -2635,19 +2635,26 @@ * TODO: we do not use +6 dBm option to do not increase power beyond * regulatory limit, however this could be utilized for devices with * CAPABILITY_POWER_LIMIT. - */ - rt2800_bbp_read(rt2x00dev, 1, &r1); - if (delta <= -12) { - power_ctrl = 2; - delta += 12; - } else if (delta <= -6) { - power_ctrl = 1; - delta += 6; - } else { - power_ctrl = 0; + * + * TODO: add different temperature compensation code for RT3290 & RT5390 + * to allow to use BBP_R1 for those chips. + */ + if (!rt2x00_rt(rt2x00dev, RT3290) && + !rt2x00_rt(rt2x00dev, RT5390)) { + rt2800_bbp_read(rt2x00dev, 1, &r1); + if (delta <= -12) { + power_ctrl = 2; + delta += 12; + } else if (delta <= -6) { + power_ctrl = 1; + delta += 6; + } else { + power_ctrl = 0; + } + rt2x00_set_field8(&r1, BBP1_TX_POWER_CTRL, power_ctrl); + rt2800_bbp_write(rt2x00dev, 1, r1); } - rt2x00_set_field8(&r1, BBP1_TX_POWER_CTRL, power_ctrl); - rt2800_bbp_write(rt2x00dev, 1, r1); + offset = TX_PWR_CFG_0; for (i = 0; i < EEPROM_TXPOWER_BYRATE_SIZE; i += 2) { @@ -4386,6 +4393,8 @@ if (!rt2x00_rt(rt2x00dev, RT5390) && !rt2x00_rt(rt2x00dev, RT5392)) { + u8 min_gain = rt2x00_rt(rt2x00dev, RT3070) ? 1 : 2; + rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr); rt2x00_set_field8(&rfcsr, RFCSR17_TX_LO1_EN, 0); if (rt2x00_rt(rt2x00dev, RT3070) || @@ -4396,8 +4405,10 @@ &rt2x00dev->cap_flags)) rt2x00_set_field8(&rfcsr, RFCSR17_R, 1); } - rt2x00_set_field8(&rfcsr, RFCSR17_TXMIXER_GAIN, - drv_data->txmixer_gain_24g); + if (drv_data->txmixer_gain_24g >= min_gain) { + rt2x00_set_field8(&rfcsr, RFCSR17_TXMIXER_GAIN, + drv_data->txmixer_gain_24g); + } rt2800_rfcsr_write(rt2x00dev, 17, rfcsr); } @@ -5221,8 +5232,8 @@ default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2); for (i = 14; i < spec->num_channels; i++) { - info[i].default_power1 = default_power1[i]; - info[i].default_power2 = default_power2[i]; + info[i].default_power1 = default_power1[i - 14]; + info[i].default_power2 = default_power2[i - 14]; } } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rt2x00/rt61pci.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rt2x00/rt61pci.c @@ -2822,7 +2822,8 @@ tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START); for (i = 14; i < spec->num_channels; i++) { info[i].max_power = MAX_TXPOWER; - info[i].default_power1 = TXPOWER_FROM_DEV(tx_power[i]); + info[i].default_power1 = + TXPOWER_FROM_DEV(tx_power[i - 14]); } } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rt2x00/rt2x00pci.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rt2x00/rt2x00pci.c @@ -52,8 +52,8 @@ udelay(REGISTER_BUSY_DELAY); } - ERROR(rt2x00dev, "Indirect register access failed: " - "offset=0x%.08x, value=0x%.08x\n", offset, *reg); + printk_once(KERN_ERR "%s() Indirect register access failed: " + "offset=0x%.08x, value=0x%.08x\n", __func__, offset, *reg); *reg = ~0; return 0; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rt2x00/rt2x00dev.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rt2x00/rt2x00dev.c @@ -1209,7 +1209,9 @@ rt2x00dev->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP) | +#ifdef CONFIG_MAC80211_MESH BIT(NL80211_IFTYPE_MESH_POINT) | +#endif BIT(NL80211_IFTYPE_WDS); rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/rt2x00/rt73usb.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/rt2x00/rt73usb.c @@ -2167,7 +2167,8 @@ tx_power = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A_START); for (i = 14; i < spec->num_channels; i++) { info[i].max_power = MAX_TXPOWER; - info[i].default_power1 = TXPOWER_FROM_DEV(tx_power[i]); + info[i].default_power1 = + TXPOWER_FROM_DEV(tx_power[i - 14]); } } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/brcm80211/brcmsmac/dma.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/brcm80211/brcmsmac/dma.c @@ -1015,9 +1015,10 @@ /* * post receive buffers - * return false is refill failed completely and ring is empty this will stall - * the rx dma and user might want to call rxfill again asap. This unlikely - * happens on memory-rich NIC, but often on memory-constrained dongle + * Return false if refill failed completely or dma mapping failed. The ring + * is empty, which will stall the rx dma and user might want to call rxfill + * again asap. This is unlikely to happen on a memory-rich NIC, but often on + * memory-constrained dongle. */ bool dma_rxfill(struct dma_pub *pub) { @@ -1078,6 +1079,8 @@ pa = dma_map_single(di->dmadev, p->data, di->rxbufsize, DMA_FROM_DEVICE); + if (dma_mapping_error(di->dmadev, pa)) + return false; /* save the free packet pointer */ di->rxp[rxout] = p; @@ -1284,7 +1287,11 @@ /* get physical address of buffer start */ pa = dma_map_single(di->dmadev, data, len, DMA_TO_DEVICE); - + /* if mapping failed, free skb */ + if (dma_mapping_error(di->dmadev, pa)) { + brcmu_pkt_buf_free_skb(p); + return; + } /* With a DMA segment list, Descriptor table is filled * using the segment list instead of looping over * buffers in multi-chain DMA. Therefore, EOF for SGLIST --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c @@ -1137,9 +1137,8 @@ gain0_15 = ((biq1 & 0xf) << 12) | ((tia & 0xf) << 8) | ((lna2 & 0x3) << 6) | - ((lna2 & 0x3) << 4) | - ((lna1 & 0x3) << 2) | - ((lna1 & 0x3) << 0); + ((lna2 & + 0x3) << 4) | ((lna1 & 0x3) << 2) | ((lna1 & 0x3) << 0); mod_phy_reg(pi, 0x4b6, (0xffff << 0), gain0_15 << 0); mod_phy_reg(pi, 0x4b7, (0xf << 0), gain16_19 << 0); @@ -1157,8 +1156,6 @@ } mod_phy_reg(pi, 0x44d, (0x1 << 0), (!trsw) << 0); - mod_phy_reg(pi, 0x4b1, (0x3 << 11), lna1 << 11); - mod_phy_reg(pi, 0x4e6, (0x3 << 3), lna1 << 3); } @@ -1331,43 +1328,6 @@ return (iq_est.i_pwr + iq_est.q_pwr) / nsamples; } -static bool wlc_lcnphy_rx_iq_cal_gain(struct brcms_phy *pi, u16 biq1_gain, - u16 tia_gain, u16 lna2_gain) -{ - u32 i_thresh_l, q_thresh_l; - u32 i_thresh_h, q_thresh_h; - struct lcnphy_iq_est iq_est_h, iq_est_l; - - wlc_lcnphy_set_rx_gain_by_distribution(pi, 0, 0, 0, biq1_gain, tia_gain, - lna2_gain, 0); - - wlc_lcnphy_rx_gain_override_enable(pi, true); - wlc_lcnphy_start_tx_tone(pi, 2000, (40 >> 1), 0); - udelay(500); - write_radio_reg(pi, RADIO_2064_REG112, 0); - if (!wlc_lcnphy_rx_iq_est(pi, 1024, 32, &iq_est_l)) - return false; - - wlc_lcnphy_start_tx_tone(pi, 2000, 40, 0); - udelay(500); - write_radio_reg(pi, RADIO_2064_REG112, 0); - if (!wlc_lcnphy_rx_iq_est(pi, 1024, 32, &iq_est_h)) - return false; - - i_thresh_l = (iq_est_l.i_pwr << 1); - i_thresh_h = (iq_est_l.i_pwr << 2) + iq_est_l.i_pwr; - - q_thresh_l = (iq_est_l.q_pwr << 1); - q_thresh_h = (iq_est_l.q_pwr << 2) + iq_est_l.q_pwr; - if ((iq_est_h.i_pwr > i_thresh_l) && - (iq_est_h.i_pwr < i_thresh_h) && - (iq_est_h.q_pwr > q_thresh_l) && - (iq_est_h.q_pwr < q_thresh_h)) - return true; - - return false; -} - static bool wlc_lcnphy_rx_iq_cal(struct brcms_phy *pi, const struct lcnphy_rx_iqcomp *iqcomp, @@ -1382,8 +1342,8 @@ RFOverrideVal0_old, rfoverride2_old, rfoverride2val_old, rfoverride3_old, rfoverride3val_old, rfoverride4_old, rfoverride4val_old, afectrlovr_old, afectrlovrval_old; - int tia_gain, lna2_gain, biq1_gain; - bool set_gain; + int tia_gain; + u32 received_power, rx_pwr_threshold; u16 old_sslpnCalibClkEnCtrl, old_sslpnRxFeClkEnCtrl; u16 values_to_save[11]; s16 *ptr; @@ -1408,134 +1368,126 @@ goto cal_done; } - WARN_ON(module != 1); - tx_pwr_ctrl = wlc_lcnphy_get_tx_pwr_ctrl(pi); - wlc_lcnphy_set_tx_pwr_ctrl(pi, LCNPHY_TX_PWR_CTRL_OFF); - - for (i = 0; i < 11; i++) - values_to_save[i] = - read_radio_reg(pi, rxiq_cal_rf_reg[i]); - Core1TxControl_old = read_phy_reg(pi, 0x631); - - or_phy_reg(pi, 0x631, 0x0015); - - RFOverride0_old = read_phy_reg(pi, 0x44c); - RFOverrideVal0_old = read_phy_reg(pi, 0x44d); - rfoverride2_old = read_phy_reg(pi, 0x4b0); - rfoverride2val_old = read_phy_reg(pi, 0x4b1); - rfoverride3_old = read_phy_reg(pi, 0x4f9); - rfoverride3val_old = read_phy_reg(pi, 0x4fa); - rfoverride4_old = read_phy_reg(pi, 0x938); - rfoverride4val_old = read_phy_reg(pi, 0x939); - afectrlovr_old = read_phy_reg(pi, 0x43b); - afectrlovrval_old = read_phy_reg(pi, 0x43c); - old_sslpnCalibClkEnCtrl = read_phy_reg(pi, 0x6da); - old_sslpnRxFeClkEnCtrl = read_phy_reg(pi, 0x6db); - - tx_gain_override_old = wlc_lcnphy_tx_gain_override_enabled(pi); - if (tx_gain_override_old) { - wlc_lcnphy_get_tx_gain(pi, &old_gains); - tx_gain_index_old = pi_lcn->lcnphy_current_index; - } + if (module == 1) { - wlc_lcnphy_set_tx_pwr_by_index(pi, tx_gain_idx); - - mod_phy_reg(pi, 0x4f9, (0x1 << 0), 1 << 0); - mod_phy_reg(pi, 0x4fa, (0x1 << 0), 0 << 0); - - mod_phy_reg(pi, 0x43b, (0x1 << 1), 1 << 1); - mod_phy_reg(pi, 0x43c, (0x1 << 1), 0 << 1); + tx_pwr_ctrl = wlc_lcnphy_get_tx_pwr_ctrl(pi); + wlc_lcnphy_set_tx_pwr_ctrl(pi, LCNPHY_TX_PWR_CTRL_OFF); - write_radio_reg(pi, RADIO_2064_REG116, 0x06); - write_radio_reg(pi, RADIO_2064_REG12C, 0x07); - write_radio_reg(pi, RADIO_2064_REG06A, 0xd3); - write_radio_reg(pi, RADIO_2064_REG098, 0x03); - write_radio_reg(pi, RADIO_2064_REG00B, 0x7); - mod_radio_reg(pi, RADIO_2064_REG113, 1 << 4, 1 << 4); - write_radio_reg(pi, RADIO_2064_REG01D, 0x01); - write_radio_reg(pi, RADIO_2064_REG114, 0x01); - write_radio_reg(pi, RADIO_2064_REG02E, 0x10); - write_radio_reg(pi, RADIO_2064_REG12A, 0x08); - - mod_phy_reg(pi, 0x938, (0x1 << 0), 1 << 0); - mod_phy_reg(pi, 0x939, (0x1 << 0), 0 << 0); - mod_phy_reg(pi, 0x938, (0x1 << 1), 1 << 1); - mod_phy_reg(pi, 0x939, (0x1 << 1), 1 << 1); - mod_phy_reg(pi, 0x938, (0x1 << 2), 1 << 2); - mod_phy_reg(pi, 0x939, (0x1 << 2), 1 << 2); - mod_phy_reg(pi, 0x938, (0x1 << 3), 1 << 3); - mod_phy_reg(pi, 0x939, (0x1 << 3), 1 << 3); - mod_phy_reg(pi, 0x938, (0x1 << 5), 1 << 5); - mod_phy_reg(pi, 0x939, (0x1 << 5), 0 << 5); + for (i = 0; i < 11; i++) + values_to_save[i] = + read_radio_reg(pi, rxiq_cal_rf_reg[i]); + Core1TxControl_old = read_phy_reg(pi, 0x631); + + or_phy_reg(pi, 0x631, 0x0015); + + RFOverride0_old = read_phy_reg(pi, 0x44c); + RFOverrideVal0_old = read_phy_reg(pi, 0x44d); + rfoverride2_old = read_phy_reg(pi, 0x4b0); + rfoverride2val_old = read_phy_reg(pi, 0x4b1); + rfoverride3_old = read_phy_reg(pi, 0x4f9); + rfoverride3val_old = read_phy_reg(pi, 0x4fa); + rfoverride4_old = read_phy_reg(pi, 0x938); + rfoverride4val_old = read_phy_reg(pi, 0x939); + afectrlovr_old = read_phy_reg(pi, 0x43b); + afectrlovrval_old = read_phy_reg(pi, 0x43c); + old_sslpnCalibClkEnCtrl = read_phy_reg(pi, 0x6da); + old_sslpnRxFeClkEnCtrl = read_phy_reg(pi, 0x6db); + + tx_gain_override_old = wlc_lcnphy_tx_gain_override_enabled(pi); + if (tx_gain_override_old) { + wlc_lcnphy_get_tx_gain(pi, &old_gains); + tx_gain_index_old = pi_lcn->lcnphy_current_index; + } - mod_phy_reg(pi, 0x43b, (0x1 << 0), 1 << 0); - mod_phy_reg(pi, 0x43c, (0x1 << 0), 0 << 0); + wlc_lcnphy_set_tx_pwr_by_index(pi, tx_gain_idx); - write_phy_reg(pi, 0x6da, 0xffff); - or_phy_reg(pi, 0x6db, 0x3); + mod_phy_reg(pi, 0x4f9, (0x1 << 0), 1 << 0); + mod_phy_reg(pi, 0x4fa, (0x1 << 0), 0 << 0); - wlc_lcnphy_set_trsw_override(pi, tx_switch, rx_switch); - set_gain = false; + mod_phy_reg(pi, 0x43b, (0x1 << 1), 1 << 1); + mod_phy_reg(pi, 0x43c, (0x1 << 1), 0 << 1); - lna2_gain = 3; - while ((lna2_gain >= 0) && !set_gain) { - tia_gain = 4; - - while ((tia_gain >= 0) && !set_gain) { - biq1_gain = 6; - - while ((biq1_gain >= 0) && !set_gain) { - set_gain = wlc_lcnphy_rx_iq_cal_gain(pi, - (u16) - biq1_gain, - (u16) - tia_gain, - (u16) - lna2_gain); - biq1_gain -= 1; - } + write_radio_reg(pi, RADIO_2064_REG116, 0x06); + write_radio_reg(pi, RADIO_2064_REG12C, 0x07); + write_radio_reg(pi, RADIO_2064_REG06A, 0xd3); + write_radio_reg(pi, RADIO_2064_REG098, 0x03); + write_radio_reg(pi, RADIO_2064_REG00B, 0x7); + mod_radio_reg(pi, RADIO_2064_REG113, 1 << 4, 1 << 4); + write_radio_reg(pi, RADIO_2064_REG01D, 0x01); + write_radio_reg(pi, RADIO_2064_REG114, 0x01); + write_radio_reg(pi, RADIO_2064_REG02E, 0x10); + write_radio_reg(pi, RADIO_2064_REG12A, 0x08); + + mod_phy_reg(pi, 0x938, (0x1 << 0), 1 << 0); + mod_phy_reg(pi, 0x939, (0x1 << 0), 0 << 0); + mod_phy_reg(pi, 0x938, (0x1 << 1), 1 << 1); + mod_phy_reg(pi, 0x939, (0x1 << 1), 1 << 1); + mod_phy_reg(pi, 0x938, (0x1 << 2), 1 << 2); + mod_phy_reg(pi, 0x939, (0x1 << 2), 1 << 2); + mod_phy_reg(pi, 0x938, (0x1 << 3), 1 << 3); + mod_phy_reg(pi, 0x939, (0x1 << 3), 1 << 3); + mod_phy_reg(pi, 0x938, (0x1 << 5), 1 << 5); + mod_phy_reg(pi, 0x939, (0x1 << 5), 0 << 5); + + mod_phy_reg(pi, 0x43b, (0x1 << 0), 1 << 0); + mod_phy_reg(pi, 0x43c, (0x1 << 0), 0 << 0); + + wlc_lcnphy_start_tx_tone(pi, 2000, 120, 0); + write_phy_reg(pi, 0x6da, 0xffff); + or_phy_reg(pi, 0x6db, 0x3); + wlc_lcnphy_set_trsw_override(pi, tx_switch, rx_switch); + wlc_lcnphy_rx_gain_override_enable(pi, true); + + tia_gain = 8; + rx_pwr_threshold = 950; + while (tia_gain > 0) { tia_gain -= 1; + wlc_lcnphy_set_rx_gain_by_distribution(pi, + 0, 0, 2, 2, + (u16) + tia_gain, 1, 0); + udelay(500); + + received_power = + wlc_lcnphy_measure_digital_power(pi, 2000); + if (received_power < rx_pwr_threshold) + break; } - lna2_gain -= 1; - } - - if (set_gain) - result = wlc_lcnphy_calc_rx_iq_comp(pi, 1024); - else - result = false; - - wlc_lcnphy_stop_tx_tone(pi); - - write_phy_reg(pi, 0x631, Core1TxControl_old); - - write_phy_reg(pi, 0x44c, RFOverrideVal0_old); - write_phy_reg(pi, 0x44d, RFOverrideVal0_old); - write_phy_reg(pi, 0x4b0, rfoverride2_old); - write_phy_reg(pi, 0x4b1, rfoverride2val_old); - write_phy_reg(pi, 0x4f9, rfoverride3_old); - write_phy_reg(pi, 0x4fa, rfoverride3val_old); - write_phy_reg(pi, 0x938, rfoverride4_old); - write_phy_reg(pi, 0x939, rfoverride4val_old); - write_phy_reg(pi, 0x43b, afectrlovr_old); - write_phy_reg(pi, 0x43c, afectrlovrval_old); - write_phy_reg(pi, 0x6da, old_sslpnCalibClkEnCtrl); - write_phy_reg(pi, 0x6db, old_sslpnRxFeClkEnCtrl); + result = wlc_lcnphy_calc_rx_iq_comp(pi, 0xffff); - wlc_lcnphy_clear_trsw_override(pi); + wlc_lcnphy_stop_tx_tone(pi); - mod_phy_reg(pi, 0x44c, (0x1 << 2), 0 << 2); + write_phy_reg(pi, 0x631, Core1TxControl_old); - for (i = 0; i < 11; i++) - write_radio_reg(pi, rxiq_cal_rf_reg[i], - values_to_save[i]); + write_phy_reg(pi, 0x44c, RFOverrideVal0_old); + write_phy_reg(pi, 0x44d, RFOverrideVal0_old); + write_phy_reg(pi, 0x4b0, rfoverride2_old); + write_phy_reg(pi, 0x4b1, rfoverride2val_old); + write_phy_reg(pi, 0x4f9, rfoverride3_old); + write_phy_reg(pi, 0x4fa, rfoverride3val_old); + write_phy_reg(pi, 0x938, rfoverride4_old); + write_phy_reg(pi, 0x939, rfoverride4val_old); + write_phy_reg(pi, 0x43b, afectrlovr_old); + write_phy_reg(pi, 0x43c, afectrlovrval_old); + write_phy_reg(pi, 0x6da, old_sslpnCalibClkEnCtrl); + write_phy_reg(pi, 0x6db, old_sslpnRxFeClkEnCtrl); + + wlc_lcnphy_clear_trsw_override(pi); + + mod_phy_reg(pi, 0x44c, (0x1 << 2), 0 << 2); + + for (i = 0; i < 11; i++) + write_radio_reg(pi, rxiq_cal_rf_reg[i], + values_to_save[i]); - if (tx_gain_override_old) - wlc_lcnphy_set_tx_pwr_by_index(pi, tx_gain_index_old); - else - wlc_lcnphy_disable_tx_gain_override(pi); + if (tx_gain_override_old) + wlc_lcnphy_set_tx_pwr_by_index(pi, tx_gain_index_old); + else + wlc_lcnphy_disable_tx_gain_override(pi); - wlc_lcnphy_set_tx_pwr_ctrl(pi, tx_pwr_ctrl); - wlc_lcnphy_rx_gain_override_enable(pi, false); + wlc_lcnphy_set_tx_pwr_ctrl(pi, tx_pwr_ctrl); + wlc_lcnphy_rx_gain_override_enable(pi, false); + } cal_done: kfree(ptr); @@ -1829,17 +1781,6 @@ write_radio_reg(pi, RADIO_2064_REG038, 3); write_radio_reg(pi, RADIO_2064_REG091, 7); } - - if (!(pi->sh->boardflags & BFL_FEM)) { - u8 reg038[14] = {0xd, 0xe, 0xd, 0xd, 0xd, 0xc, - 0xa, 0xb, 0xb, 0x3, 0x3, 0x2, 0x0, 0x0}; - - write_radio_reg(pi, RADIO_2064_REG02A, 0xf); - write_radio_reg(pi, RADIO_2064_REG091, 0x3); - write_radio_reg(pi, RADIO_2064_REG038, 0x3); - - write_radio_reg(pi, RADIO_2064_REG038, reg038[channel - 1]); - } } static int @@ -2034,16 +1975,6 @@ } else { mod_radio_reg(pi, RADIO_2064_REG03A, 1, 0x1); mod_radio_reg(pi, RADIO_2064_REG11A, 0x8, 0x8); - mod_radio_reg(pi, RADIO_2064_REG028, 0x1, 0x0); - mod_radio_reg(pi, RADIO_2064_REG11A, 0x4, 1<<2); - mod_radio_reg(pi, RADIO_2064_REG036, 0x10, 0x0); - mod_radio_reg(pi, RADIO_2064_REG11A, 0x10, 1<<4); - mod_radio_reg(pi, RADIO_2064_REG036, 0x3, 0x0); - mod_radio_reg(pi, RADIO_2064_REG035, 0xff, 0x77); - mod_radio_reg(pi, RADIO_2064_REG028, 0x1e, 0xe<<1); - mod_radio_reg(pi, RADIO_2064_REG112, 0x80, 1<<7); - mod_radio_reg(pi, RADIO_2064_REG005, 0x7, 1<<1); - mod_radio_reg(pi, RADIO_2064_REG029, 0xf0, 0<<4); } } else { mod_phy_reg(pi, 0x4d9, (0x1 << 2), (0x1) << 2); @@ -2130,14 +2061,12 @@ (auxpga_vmid_temp << 0) | (auxpga_gain_temp << 12)); mod_radio_reg(pi, RADIO_2064_REG082, (1 << 5), (1 << 5)); - mod_radio_reg(pi, RADIO_2064_REG07C, (1 << 0), (1 << 0)); } static void wlc_lcnphy_tssi_setup(struct brcms_phy *pi) { struct phytbl_info tab; u32 rfseq, ind; - u8 tssi_sel; tab.tbl_id = LCNPHY_TBL_ID_TXPWRCTL; tab.tbl_width = 32; @@ -2159,13 +2088,7 @@ mod_phy_reg(pi, 0x503, (0x1 << 4), (1) << 4); - if (pi->sh->boardflags & BFL_FEM) { - tssi_sel = 0x1; - wlc_lcnphy_set_tssi_mux(pi, LCNPHY_TSSI_EXT); - } else { - tssi_sel = 0xe; - wlc_lcnphy_set_tssi_mux(pi, LCNPHY_TSSI_POST_PA); - } + wlc_lcnphy_set_tssi_mux(pi, LCNPHY_TSSI_EXT); mod_phy_reg(pi, 0x4a4, (0x1 << 14), (0) << 14); mod_phy_reg(pi, 0x4a4, (0x1 << 15), (1) << 15); @@ -2201,10 +2124,9 @@ mod_phy_reg(pi, 0x49a, (0x1ff << 0), (0xff) << 0); if (LCNREV_IS(pi->pubpi.phy_rev, 2)) { - mod_radio_reg(pi, RADIO_2064_REG028, 0xf, tssi_sel); + mod_radio_reg(pi, RADIO_2064_REG028, 0xf, 0xe); mod_radio_reg(pi, RADIO_2064_REG086, 0x4, 0x4); } else { - mod_radio_reg(pi, RADIO_2064_REG028, 0x1e, tssi_sel << 1); mod_radio_reg(pi, RADIO_2064_REG03A, 0x1, 1); mod_radio_reg(pi, RADIO_2064_REG11A, 0x8, 1 << 3); } @@ -2251,10 +2173,6 @@ mod_phy_reg(pi, 0x4d7, (0xf << 8), (0) << 8); - mod_radio_reg(pi, RADIO_2064_REG035, 0xff, 0x0); - mod_radio_reg(pi, RADIO_2064_REG036, 0x3, 0x0); - mod_radio_reg(pi, RADIO_2064_REG11A, 0x8, 0x8); - wlc_lcnphy_pwrctrl_rssiparams(pi); } @@ -2873,8 +2791,6 @@ read_radio_reg(pi, RADIO_2064_REG007) & 1; u16 SAVE_jtag_auxpga = read_radio_reg(pi, RADIO_2064_REG0FF) & 0x10; u16 SAVE_iqadc_aux_en = read_radio_reg(pi, RADIO_2064_REG11F) & 4; - u8 SAVE_bbmult = wlc_lcnphy_get_bbmult(pi); - idleTssi = read_phy_reg(pi, 0x4ab); suspend = (0 == (bcma_read32(pi->d11core, D11REGOFFS(maccontrol)) & MCTL_EN_MAC)); @@ -2892,12 +2808,6 @@ mod_radio_reg(pi, RADIO_2064_REG0FF, 0x10, 1 << 4); mod_radio_reg(pi, RADIO_2064_REG11F, 0x4, 1 << 2); wlc_lcnphy_tssi_setup(pi); - - mod_phy_reg(pi, 0x4d7, (0x1 << 0), (1 << 0)); - mod_phy_reg(pi, 0x4d7, (0x1 << 6), (1 << 6)); - - wlc_lcnphy_set_bbmult(pi, 0x0); - wlc_phy_do_dummy_tx(pi, true, OFF); idleTssi = ((read_phy_reg(pi, 0x4ab) & (0x1ff << 0)) >> 0); @@ -2919,7 +2829,6 @@ mod_phy_reg(pi, 0x44c, (0x1 << 12), (0) << 12); - wlc_lcnphy_set_bbmult(pi, SAVE_bbmult); wlc_lcnphy_set_tx_gain_override(pi, tx_gain_override_old); wlc_lcnphy_set_tx_gain(pi, &old_gains); wlc_lcnphy_set_tx_pwr_ctrl(pi, SAVE_txpwrctrl); @@ -3133,11 +3042,6 @@ wlc_lcnphy_write_table(pi, &tab); tab.tbl_offset++; } - mod_phy_reg(pi, 0x4d0, (0x1 << 0), (0) << 0); - mod_phy_reg(pi, 0x4d3, (0xff << 0), (0) << 0); - mod_phy_reg(pi, 0x4d3, (0xff << 8), (0) << 8); - mod_phy_reg(pi, 0x4d0, (0x1 << 4), (0) << 4); - mod_phy_reg(pi, 0x4d0, (0x1 << 2), (0) << 2); mod_phy_reg(pi, 0x410, (0x1 << 7), (0) << 7); @@ -3939,6 +3843,7 @@ target_gains.pad_gain = 21; target_gains.dac_gain = 0; wlc_lcnphy_set_tx_gain(pi, &target_gains); + wlc_lcnphy_set_tx_pwr_by_index(pi, 16); if (LCNREV_IS(pi->pubpi.phy_rev, 1) || pi_lcn->lcnphy_hw_iqcal_en) { @@ -3949,7 +3854,6 @@ lcnphy_recal ? LCNPHY_CAL_RECAL : LCNPHY_CAL_FULL), false); } else { - wlc_lcnphy_set_tx_pwr_by_index(pi, 16); wlc_lcnphy_tx_iqlo_soft_cal_full(pi); } @@ -4374,22 +4278,17 @@ if (CHSPEC_IS5G(pi->radio_chanspec)) pa_gain = 0x70; else - pa_gain = 0x60; + pa_gain = 0x70; if (pi->sh->boardflags & BFL_FEM) pa_gain = 0x10; - tab.tbl_id = LCNPHY_TBL_ID_TXPWRCTL; tab.tbl_width = 32; tab.tbl_len = 1; tab.tbl_ptr = &val; for (j = 0; j < 128; j++) { - if (pi->sh->boardflags & BFL_FEM) - gm_gain = gain_table[j].gm; - else - gm_gain = 15; - + gm_gain = gain_table[j].gm; val = (((u32) pa_gain << 24) | (gain_table[j].pad << 16) | (gain_table[j].pga << 8) | gm_gain); @@ -4600,10 +4499,7 @@ write_phy_reg(pi, 0x4ea, 0x4688); - if (pi->sh->boardflags & BFL_FEM) - mod_phy_reg(pi, 0x4eb, (0x7 << 0), 2 << 0); - else - mod_phy_reg(pi, 0x4eb, (0x7 << 0), 3 << 0); + mod_phy_reg(pi, 0x4eb, (0x7 << 0), 2 << 0); mod_phy_reg(pi, 0x4eb, (0x7 << 6), 0 << 6); @@ -4614,13 +4510,6 @@ wlc_lcnphy_rcal(pi); wlc_lcnphy_rc_cal(pi); - - if (!(pi->sh->boardflags & BFL_FEM)) { - write_radio_reg(pi, RADIO_2064_REG032, 0x6f); - write_radio_reg(pi, RADIO_2064_REG033, 0x19); - write_radio_reg(pi, RADIO_2064_REG039, 0xe); - } - } static void wlc_lcnphy_radio_init(struct brcms_phy *pi) @@ -4650,20 +4539,22 @@ wlc_lcnphy_write_table(pi, &tab); } - if (!(pi->sh->boardflags & BFL_FEM)) { - tab.tbl_id = LCNPHY_TBL_ID_RFSEQ; - tab.tbl_width = 16; - tab.tbl_ptr = &val; - tab.tbl_len = 1; + tab.tbl_id = LCNPHY_TBL_ID_RFSEQ; + tab.tbl_width = 16; + tab.tbl_ptr = &val; + tab.tbl_len = 1; - val = 150; - tab.tbl_offset = 0; - wlc_lcnphy_write_table(pi, &tab); + val = 114; + tab.tbl_offset = 0; + wlc_lcnphy_write_table(pi, &tab); - val = 220; - tab.tbl_offset = 1; - wlc_lcnphy_write_table(pi, &tab); - } + val = 130; + tab.tbl_offset = 1; + wlc_lcnphy_write_table(pi, &tab); + + val = 6; + tab.tbl_offset = 8; + wlc_lcnphy_write_table(pi, &tab); if (CHSPEC_IS2G(pi->radio_chanspec)) { if (pi->sh->boardflags & BFL_FEM) @@ -5055,7 +4946,6 @@ wlc_lcnphy_load_tx_iir_filter(pi, true, 3); mod_phy_reg(pi, 0x4eb, (0x7 << 3), (1) << 3); - wlc_lcnphy_tssi_setup(pi); } void wlc_phy_detach_lcnphy(struct brcms_phy *pi) @@ -5094,7 +4984,8 @@ if (!wlc_phy_txpwr_srom_read_lcnphy(pi)) return false; - if (LCNREV_IS(pi->pubpi.phy_rev, 1)) { + if ((pi->sh->boardflags & BFL_FEM) && + (LCNREV_IS(pi->pubpi.phy_rev, 1))) { if (pi_lcn->lcnphy_tempsense_option == 3) { pi->hwpwrctrl = true; pi->hwpwrctrl_capable = true; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c @@ -1992,70 +1992,70 @@ }; static const u16 dot11lcn_sw_ctrl_tbl_4313_rev0[] = { - 0x0009, 0x000a, - 0x0005, - 0x0006, 0x0009, - 0x000a, - 0x0005, 0x0006, - 0x0009, - 0x000a, 0x0005, - 0x0006, - 0x0009, 0x000a, - 0x0005, - 0x0006, 0x0009, - 0x000a, - 0x0005, 0x0006, - 0x0009, - 0x000a, 0x0005, - 0x0006, - 0x0009, 0x000a, - 0x0005, - 0x0006, 0x0009, - 0x000a, - 0x0005, 0x0006, - 0x0009, - 0x000a, 0x0005, - 0x0006, - 0x0009, 0x000a, - 0x0005, - 0x0006, 0x0009, - 0x000a, - 0x0005, 0x0006, - 0x0009, - 0x000a, 0x0005, - 0x0006, + 0x000a, 0x0009, + 0x0006, + 0x0005, 0x000a, + 0x0009, + 0x0006, 0x0005, + 0x000a, + 0x0009, 0x0006, + 0x0005, + 0x000a, 0x0009, + 0x0006, + 0x0005, 0x000a, + 0x0009, + 0x0006, 0x0005, + 0x000a, + 0x0009, 0x0006, + 0x0005, + 0x000a, 0x0009, + 0x0006, + 0x0005, 0x000a, + 0x0009, + 0x0006, 0x0005, + 0x000a, + 0x0009, 0x0006, + 0x0005, + 0x000a, 0x0009, + 0x0006, + 0x0005, 0x000a, + 0x0009, + 0x0006, 0x0005, + 0x000a, + 0x0009, 0x0006, + 0x0005, }; static const u16 dot11lcn_sw_ctrl_tbl_rev0[] = { --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/Makefile +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/Makefile @@ -7,6 +7,7 @@ iwlwifi-objs += iwl-eeprom-read.o iwl-eeprom-parse.o iwlwifi-objs += pcie/drv.o pcie/rx.o pcie/tx.o pcie/trans.o iwlwifi-objs += pcie/1000.o pcie/2000.o pcie/5000.o pcie/6000.o +iwlwifi-objs += pcie/7000.o iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TRACING) += iwl-devtrace.o iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TESTMODE) += iwl-test.o --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/iwl-devtrace.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/iwl-devtrace.h @@ -349,25 +349,23 @@ TRACE_EVENT(iwlwifi_dev_hcmd, TP_PROTO(const struct device *dev, struct iwl_host_cmd *cmd, u16 total_size, - const void *hdr, size_t hdr_len), - TP_ARGS(dev, cmd, total_size, hdr, hdr_len), + struct iwl_cmd_header *hdr), + TP_ARGS(dev, cmd, total_size, hdr), TP_STRUCT__entry( DEV_ENTRY __dynamic_array(u8, hcmd, total_size) __field(u32, flags) ), TP_fast_assign( - int i, offset = hdr_len; + int i, offset = sizeof(*hdr); DEV_ASSIGN; __entry->flags = cmd->flags; - memcpy(__get_dynamic_array(hcmd), hdr, hdr_len); + memcpy(__get_dynamic_array(hcmd), hdr, sizeof(*hdr)); for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { if (!cmd->len[i]) continue; - if (!(cmd->dataflags[i] & IWL_HCMD_DFL_NOCOPY)) - continue; memcpy((u8 *)__get_dynamic_array(hcmd) + offset, cmd->data[i], cmd->len[i]); offset += cmd->len[i]; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/iwl-fh.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/iwl-fh.h @@ -410,6 +410,7 @@ * uCode/driver must write "1" in order to clear this flag */ #define FH_TSSR_TX_ERROR_REG (FH_TSSR_LOWER_BOUND + 0x018) +#define FH_TSSR_TX_MSG_CONFIG_REG (FH_TSSR_LOWER_BOUND + 0x008) #define FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(_chnl) ((1 << (_chnl)) << 16) --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/iwl-prph.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/iwl-prph.h @@ -97,6 +97,9 @@ #define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800) +/* Device system time */ +#define DEVICE_SYSTEM_TIME_REG 0xA0206C + /** * Tx Scheduler * --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/iwl-config.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/iwl-config.h @@ -83,6 +83,7 @@ IWL_DEVICE_FAMILY_6030, IWL_DEVICE_FAMILY_6050, IWL_DEVICE_FAMILY_6150, + IWL_DEVICE_FAMILY_7000, }; /* --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/dvm/rxon.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/dvm/rxon.c @@ -1377,7 +1377,7 @@ struct iwl_chain_noise_data *data = &priv->chain_noise_data; int ret; - if (!(priv->calib_disabled & IWL_CHAIN_NOISE_CALIB_DISABLED)) + if (priv->calib_disabled & IWL_CHAIN_NOISE_CALIB_DISABLED) return; if ((data->state == IWL_CHAIN_NOISE_ALIVE) && --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/dvm/sta.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/dvm/sta.c @@ -707,6 +707,7 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx) { struct iwl_addsta_cmd sta_cmd; + static const struct iwl_link_quality_cmd zero_lq = {}; struct iwl_link_quality_cmd lq; int i; bool found = false; @@ -745,7 +746,9 @@ else memcpy(&lq, priv->stations[i].lq, sizeof(struct iwl_link_quality_cmd)); - send_lq = true; + + if (memcmp(&lq, &zero_lq, sizeof(lq))) + send_lq = true; } spin_unlock_bh(&priv->sta_lock); ret = iwl_send_add_sta(priv, &sta_cmd, CMD_SYNC); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/dvm/lib.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/dvm/lib.c @@ -1262,6 +1262,15 @@ } /* + * This can happen upon FW ASSERT: we clear the STATUS_FW_ERROR flag + * in iwl_down but cancel the workers only later. + */ + if (!priv->ucode_loaded) { + IWL_ERR(priv, "Fw not loaded - dropping CMD: %x\n", cmd->id); + return -EIO; + } + + /* * Synchronous commands from this op-mode must hold * the mutex, this ensures we don't try to send two * (or more) synchronous commands at a time. --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/dvm/ucode.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/dvm/ucode.c @@ -450,6 +450,8 @@ return -EIO; } + priv->ucode_loaded = true; + /* * This step takes a long time (60-80ms!!) and * WoWLAN image should be loaded quickly, so @@ -474,8 +476,6 @@ return ret; } - priv->ucode_loaded = true; - return 0; } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/dvm/mac80211.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/dvm/mac80211.c @@ -786,9 +786,23 @@ mutex_lock(&priv->mutex); if (vif->type == NL80211_IFTYPE_STATION) { if (old_state == IEEE80211_STA_NOTEXIST && - new_state == IEEE80211_STA_NONE) + new_state == IEEE80211_STA_NONE) { + /* + * Firmware bug - it'll crash if the beacon interval is less + * than 16. We can't avoid connecting at all, so refuse the + * station state change, this will cause mac80211 to abandon + * attempts to connect to this AP, and eventually wpa_s will + * blacklist the AP... + */ + if (vif->bss_conf.beacon_int < 16) { + IWL_ERR(priv, + "AP %pM beacon interval is %d, refusing due to firmware bug!\n", + sta->addr, vif->bss_conf.beacon_int); + ret = -EINVAL; + goto out_unlock; + } op = ADD; - else if (old_state == IEEE80211_STA_NONE && + } else if (old_state == IEEE80211_STA_NONE && new_state == IEEE80211_STA_NOTEXIST) op = REMOVE; else if (old_state == IEEE80211_STA_AUTH && @@ -856,6 +870,7 @@ if (iwl_is_rfkill(priv)) ret = 0; +out_unlock: mutex_unlock(&priv->mutex); IWL_DEBUG_MAC80211(priv, "leave\n"); @@ -946,7 +961,10 @@ if (test_bit(STATUS_EXIT_PENDING, &priv->status)) return; - if (test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) + if (!test_and_clear_bit(STATUS_CHANNEL_SWITCH_PENDING, &priv->status)) + return; + + if (ctx->vif) ieee80211_chswitch_done(ctx->vif, is_success); } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/dvm/debugfs.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/dvm/debugfs.c @@ -2237,15 +2237,15 @@ size_t count, loff_t *ppos) { struct iwl_priv *priv = file->private_data; - char *buf; - int pos = 0; - ssize_t ret = -ENOMEM; + char *buf = NULL; + ssize_t ret; - ret = pos = iwl_dump_nic_event_log(priv, true, &buf, true); - if (buf) { - ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos); - kfree(buf); - } + ret = iwl_dump_nic_event_log(priv, true, &buf, true); + if (ret < 0) + goto err; + ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret); +err: + kfree(buf); return ret; } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/pcie/cfg.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/pcie/cfg.h @@ -109,5 +109,7 @@ extern const struct iwl_cfg iwl105_bgn_cfg; extern const struct iwl_cfg iwl105_bgn_d_cfg; extern const struct iwl_cfg iwl135_bgn_cfg; +extern const struct iwl_cfg iwl7260_2ac_cfg; +extern const struct iwl_cfg iwl3160_ac_cfg; #endif /* __iwl_pci_h__ */ --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/pcie/7000.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/pcie/7000.c @@ -0,0 +1,111 @@ +/****************************************************************************** + * + * Copyright(c) 2008 - 2013 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * 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, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * Intel Linux Wireless + * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + * + *****************************************************************************/ + +#include +#include +#include "iwl-config.h" +#include "iwl-agn-hw.h" +#include "cfg.h" + +/* Highest firmware API version supported */ +#define IWL7260_UCODE_API_MAX 6 +#define IWL3160_UCODE_API_MAX 6 + +/* Oldest version we won't warn about */ +#define IWL7260_UCODE_API_OK 6 +#define IWL3160_UCODE_API_OK 6 + +/* Lowest firmware API version supported */ +#define IWL7260_UCODE_API_MIN 6 +#define IWL3160_UCODE_API_MIN 6 + +/* NVM versions */ +#define IWL7260_NVM_VERSION 0x0a1d +#define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */ +#define IWL3160_NVM_VERSION 0x709 +#define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */ + +#define IWL7260_FW_PRE "iwlwifi-7260-" +#define IWL7260_MODULE_FIRMWARE(api) IWL7260_FW_PRE __stringify(api) ".ucode" + +#define IWL3160_FW_PRE "iwlwifi-3160-" +#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode" + +static const struct iwl_base_params iwl7000_base_params = { + .eeprom_size = OTP_LOW_IMAGE_SIZE, + .num_of_queues = IWLAGN_NUM_QUEUES, + .pll_cfg_val = 0, + .shadow_ram_support = true, + .led_compensation = 57, + .adv_thermal_throttle = true, + .support_ct_kill_exit = true, + .plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF, + .chain_noise_scale = 1000, + .wd_timeout = IWL_LONG_WD_TIMEOUT, + .max_event_log_size = 512, + .shadow_reg_enable = false, /* TODO: fix bugs using this feature */ +}; + +static const struct iwl_ht_params iwl7000_ht_params = { + .ht_greenfield_support = true, + .use_rts_for_aggregation = true, /* use rts/cts protection */ + .ht40_bands = BIT(IEEE80211_BAND_2GHZ) | BIT(IEEE80211_BAND_5GHZ), +}; + +#define IWL_DEVICE_7000 \ + .ucode_api_max = IWL7260_UCODE_API_MAX, \ + .ucode_api_ok = IWL7260_UCODE_API_OK, \ + .ucode_api_min = IWL7260_UCODE_API_MIN, \ + .device_family = IWL_DEVICE_FAMILY_7000, \ + .max_inst_size = IWL60_RTC_INST_SIZE, \ + .max_data_size = IWL60_RTC_DATA_SIZE, \ + .base_params = &iwl7000_base_params, \ + /* TODO: .bt_params? */ \ + .need_temp_offset_calib = true, \ + .led_mode = IWL_LED_RF_STATE, \ + .adv_pm = true \ + + +const struct iwl_cfg iwl7260_2ac_cfg = { + .name = "Intel(R) Dual Band Wireless AC7260", + .fw_name_pre = IWL7260_FW_PRE, + IWL_DEVICE_7000, + .ht_params = &iwl7000_ht_params, + .nvm_ver = IWL7260_NVM_VERSION, + .nvm_calib_ver = IWL7260_TX_POWER_VERSION, +}; + +const struct iwl_cfg iwl3160_ac_cfg = { + .name = "Intel(R) Dual Band Wireless AC3160", + .fw_name_pre = IWL3160_FW_PRE, + IWL_DEVICE_7000, + .ht_params = &iwl7000_ht_params, + .nvm_ver = IWL3160_NVM_VERSION, + .nvm_calib_ver = IWL3160_TX_POWER_VERSION, +}; + +MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); +MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/pcie/trans.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/pcie/trans.c @@ -1262,16 +1262,16 @@ spin_lock_init(&trans_pcie->irq_lock); init_waitqueue_head(&trans_pcie->ucode_write_waitq); - /* W/A - seems to solve weird behavior. We need to remove this if we - * don't want to stay in L1 all the time. This wastes a lot of power */ - pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 | - PCIE_LINK_STATE_CLKPM); - if (pci_enable_device(pdev)) { err = -ENODEV; goto out_no_pci; } + /* W/A - seems to solve weird behavior. We need to remove this if we + * don't want to stay in L1 all the time. This wastes a lot of power */ + pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 | + PCIE_LINK_STATE_CLKPM); + pci_set_master(pdev); err = pci_set_dma_mask(pdev, DMA_BIT_MASK(36)); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/pcie/drv.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/pcie/drv.c @@ -131,6 +131,7 @@ {IWL_PCI_DEVICE(0x423C, 0x1306, iwl5150_abg_cfg)}, /* Half Mini Card */ {IWL_PCI_DEVICE(0x423C, 0x1221, iwl5150_agn_cfg)}, /* Mini Card */ {IWL_PCI_DEVICE(0x423C, 0x1321, iwl5150_agn_cfg)}, /* Half Mini Card */ + {IWL_PCI_DEVICE(0x423C, 0x1326, iwl5150_abg_cfg)}, /* Half Mini Card */ {IWL_PCI_DEVICE(0x423D, 0x1211, iwl5150_agn_cfg)}, /* Mini Card */ {IWL_PCI_DEVICE(0x423D, 0x1311, iwl5150_agn_cfg)}, /* Half Mini Card */ @@ -243,6 +244,7 @@ {IWL_PCI_DEVICE(0x088F, 0x4260, iwl6035_2agn_cfg)}, {IWL_PCI_DEVICE(0x088E, 0x4460, iwl6035_2agn_cfg)}, {IWL_PCI_DEVICE(0x088E, 0x4860, iwl6035_2agn_cfg)}, + {IWL_PCI_DEVICE(0x088F, 0x5260, iwl6035_2agn_cfg)}, /* 105 Series */ {IWL_PCI_DEVICE(0x0894, 0x0022, iwl105_bgn_cfg)}, @@ -255,6 +257,12 @@ {IWL_PCI_DEVICE(0x0893, 0x0262, iwl135_bgn_cfg)}, {IWL_PCI_DEVICE(0x0892, 0x0462, iwl135_bgn_cfg)}, +/* 7000 Series */ + {IWL_PCI_DEVICE(0x08B1, 0x4070, iwl7260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x08B1, 0xC070, iwl7260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x08B3, 0x0070, iwl3160_ac_cfg)}, + {IWL_PCI_DEVICE(0x08B3, 0x8070, iwl3160_ac_cfg)}, + {0} }; MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/pcie/tx.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/pcie/tx.c @@ -574,10 +574,16 @@ spin_lock_bh(&txq->lock); while (q->write_ptr != q->read_ptr) { + IWL_DEBUG_TX_REPLY(trans, "Q %d Free %d\n", + txq_id, q->read_ptr); iwl_pcie_txq_free_tfd(trans, txq, dma_dir); q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd); } + txq->active = false; spin_unlock_bh(&txq->lock); + + /* just in case - this queue may have been stopped */ + iwl_wake_queue(trans, txq); } /* @@ -907,6 +913,12 @@ spin_lock(&txq->lock); + if (!txq->active) { + IWL_DEBUG_TX_QUEUES(trans, "Q %d inactive - ignoring idx %d\n", + txq_id, ssn); + goto out; + } + if (txq->q.read_ptr == tfd_num) goto out; @@ -1083,6 +1095,7 @@ (fifo << SCD_QUEUE_STTS_REG_POS_TXF) | (1 << SCD_QUEUE_STTS_REG_POS_WSL) | SCD_QUEUE_STTS_REG_MSK); + trans_pcie->txq[txq_id].active = true; IWL_DEBUG_TX_QUEUES(trans, "Activate queue %d on FIFO %d WrPtr: %d\n", txq_id, fifo, ssn & 0xff); } @@ -1131,10 +1144,12 @@ void *dup_buf = NULL; dma_addr_t phys_addr; int idx; - u16 copy_size, cmd_size; + u16 copy_size, cmd_size, dma_size; bool had_nocopy = false; int i; u32 cmd_pos; + const u8 *cmddata[IWL_MAX_CMD_TFDS]; + u16 cmdlen[IWL_MAX_CMD_TFDS]; copy_size = sizeof(out_cmd->hdr); cmd_size = sizeof(out_cmd->hdr); @@ -1143,8 +1158,23 @@ BUILD_BUG_ON(IWL_MAX_CMD_TFDS > IWL_NUM_OF_TBS - 1); for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { + cmddata[i] = cmd->data[i]; + cmdlen[i] = cmd->len[i]; + if (!cmd->len[i]) continue; + + /* need at least IWL_HCMD_MIN_COPY_SIZE copied */ + if (copy_size < IWL_HCMD_MIN_COPY_SIZE) { + int copy = IWL_HCMD_MIN_COPY_SIZE - copy_size; + + if (copy > cmdlen[i]) + copy = cmdlen[i]; + cmdlen[i] -= copy; + cmddata[i] += copy; + copy_size += copy; + } + if (cmd->dataflags[i] & IWL_HCMD_DFL_NOCOPY) { had_nocopy = true; if (WARN_ON(cmd->dataflags[i] & IWL_HCMD_DFL_DUP)) { @@ -1164,7 +1194,7 @@ goto free_dup_buf; } - dup_buf = kmemdup(cmd->data[i], cmd->len[i], + dup_buf = kmemdup(cmddata[i], cmdlen[i], GFP_ATOMIC); if (!dup_buf) return -ENOMEM; @@ -1174,7 +1204,7 @@ idx = -EINVAL; goto free_dup_buf; } - copy_size += cmd->len[i]; + copy_size += cmdlen[i]; } cmd_size += cmd->len[i]; } @@ -1221,14 +1251,31 @@ /* and copy the data that needs to be copied */ cmd_pos = offsetof(struct iwl_device_cmd, payload); + copy_size = sizeof(out_cmd->hdr); for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { + int copy = 0; + if (!cmd->len[i]) continue; - if (cmd->dataflags[i] & (IWL_HCMD_DFL_NOCOPY | - IWL_HCMD_DFL_DUP)) - break; - memcpy((u8 *)out_cmd + cmd_pos, cmd->data[i], cmd->len[i]); - cmd_pos += cmd->len[i]; + + /* need at least IWL_HCMD_MIN_COPY_SIZE copied */ + if (copy_size < IWL_HCMD_MIN_COPY_SIZE) { + copy = IWL_HCMD_MIN_COPY_SIZE - copy_size; + + if (copy > cmd->len[i]) + copy = cmd->len[i]; + } + + /* copy everything if not nocopy/dup */ + if (!(cmd->dataflags[i] & (IWL_HCMD_DFL_NOCOPY | + IWL_HCMD_DFL_DUP))) + copy = cmd->len[i]; + + if (copy) { + memcpy((u8 *)out_cmd + cmd_pos, cmd->data[i], copy); + cmd_pos += copy; + copy_size += copy; + } } WARN_ON_ONCE(txq->entries[idx].copy_cmd); @@ -1254,7 +1301,14 @@ out_cmd->hdr.cmd, le16_to_cpu(out_cmd->hdr.sequence), cmd_size, q->write_ptr, idx, trans_pcie->cmd_queue); - phys_addr = dma_map_single(trans->dev, &out_cmd->hdr, copy_size, + /* + * If the entire command is smaller than IWL_HCMD_MIN_COPY_SIZE, we must + * still map at least that many bytes for the hardware to write back to. + * We have enough space, so that's not a problem. + */ + dma_size = max_t(u16, copy_size, IWL_HCMD_MIN_COPY_SIZE); + + phys_addr = dma_map_single(trans->dev, &out_cmd->hdr, dma_size, DMA_BIDIRECTIONAL); if (unlikely(dma_mapping_error(trans->dev, phys_addr))) { idx = -ENOMEM; @@ -1262,14 +1316,15 @@ } dma_unmap_addr_set(out_meta, mapping, phys_addr); - dma_unmap_len_set(out_meta, len, copy_size); + dma_unmap_len_set(out_meta, len, dma_size); iwl_pcie_txq_build_tfd(trans, txq, phys_addr, copy_size, 1); + /* map the remaining (adjusted) nocopy/dup fragments */ for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { - const void *data = cmd->data[i]; + const void *data = cmddata[i]; - if (!cmd->len[i]) + if (!cmdlen[i]) continue; if (!(cmd->dataflags[i] & (IWL_HCMD_DFL_NOCOPY | IWL_HCMD_DFL_DUP))) @@ -1277,7 +1332,7 @@ if (cmd->dataflags[i] & IWL_HCMD_DFL_DUP) data = dup_buf; phys_addr = dma_map_single(trans->dev, (void *)data, - cmd->len[i], DMA_BIDIRECTIONAL); + cmdlen[i], DMA_BIDIRECTIONAL); if (dma_mapping_error(trans->dev, phys_addr)) { iwl_pcie_tfd_unmap(trans, out_meta, &txq->tfds[q->write_ptr], @@ -1286,7 +1341,7 @@ goto out; } - iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmd->len[i], 0); + iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmdlen[i], 0); } out_meta->flags = cmd->flags; @@ -1296,8 +1351,7 @@ txq->need_update = 1; - trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, - &out_cmd->hdr, copy_size); + trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr); /* start timer if queue currently empty */ if (q->read_ptr == q->write_ptr && trans_pcie->wd_timeout) --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/iwlwifi/pcie/internal.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/iwlwifi/pcie/internal.h @@ -182,6 +182,15 @@ #define TFD_TX_CMD_SLOTS 256 #define TFD_CMD_SLOTS 32 +/* + * The FH will write back to the first TB only, so we need + * to copy some data into the buffer regardless of whether + * it should be mapped or not. This indicates how much to + * copy, even for HCMDs it must be big enough to fit the + * DRAM scratch from the TX cmd, at least 16 bytes. + */ +#define IWL_HCMD_MIN_COPY_SIZE 16 + struct iwl_pcie_txq_entry { struct iwl_device_cmd *cmd; struct iwl_device_cmd *copy_cmd; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/p54/p54usb.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/p54/p54usb.c @@ -83,9 +83,10 @@ {USB_DEVICE(0x06a9, 0x000e)}, /* Westell 802.11g USB (A90-211WG-01) */ {USB_DEVICE(0x06b9, 0x0121)}, /* Thomson SpeedTouch 121g */ {USB_DEVICE(0x0707, 0xee13)}, /* SMC 2862W-G version 2 */ + {USB_DEVICE(0x07aa, 0x0020)}, /* Corega WLUSB2GTST USB */ {USB_DEVICE(0x0803, 0x4310)}, /* Zoom 4410a */ - {USB_DEVICE(0x083a, 0x4503)}, /* T-Com Sinus 154 data II */ {USB_DEVICE(0x083a, 0x4521)}, /* Siemens Gigaset USB Adapter 54 version 2 */ + {USB_DEVICE(0x083a, 0x4531)}, /* T-Com Sinus 154 data II */ {USB_DEVICE(0x083a, 0xc501)}, /* Zoom Wireless-G 4410 */ {USB_DEVICE(0x083a, 0xf503)}, /* Accton FD7050E ver 1010ec */ {USB_DEVICE(0x0846, 0x4240)}, /* Netgear WG111 (v2) */ --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9485_initvals.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9485_initvals.h @@ -874,7 +874,7 @@ {0x0000a284, 0x00000000, 0x00000000, 0x000002a0, 0x000002a0}, {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, - {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18}, + {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00058d18, 0x00058d18}, {0x0000a2d0, 0x00071981, 0x00071981, 0x00071982, 0x00071982}, {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a}, {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c @@ -3563,14 +3563,18 @@ { struct ath9k_hw_capabilities *pCap = &ah->caps; int chain; - u32 regval; + u32 regval, value; static const u32 switch_chain_reg[AR9300_MAX_CHAINS] = { AR_PHY_SWITCH_CHAIN_0, AR_PHY_SWITCH_CHAIN_1, AR_PHY_SWITCH_CHAIN_2, }; - u32 value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz); + if (AR_SREV_9485(ah) && (ar9003_hw_get_rx_gain_idx(ah) == 0)) + ath9k_hw_cfg_output(ah, AR9300_EXT_LNA_CTL_GPIO_AR9485, + AR_GPIO_OUTPUT_MUX_AS_PCIE_ATTENTION_LED); + + value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz); if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) { REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/calib.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/calib.c @@ -389,7 +389,6 @@ if (!caldata) { chan->noisefloor = nf; - ah->noise = ath9k_hw_getchan_noise(ah, chan); return false; } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/Kconfig +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/Kconfig @@ -91,13 +91,17 @@ This option enables collection of statistics for Rx/Tx status data and some other MAC related statistics -config ATH9K_RATE_CONTROL +config ATH9K_LEGACY_RATE_CONTROL bool "Atheros ath9k rate control" depends on ATH9K - default y + default n ---help--- Say Y, if you want to use the ath9k specific rate control - module instead of minstrel_ht. + module instead of minstrel_ht. Be warned that there are various + issues with the ath9k RC and minstrel is a more robust algorithm. + Note that even if this option is selected, "ath9k_rate_control" + has to be passed to mac80211 using the module parameter, + ieee80211_default_rc_algo. config ATH9K_HTC tristate "Atheros HTC based wireless cards support" --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c @@ -448,6 +448,7 @@ struct ieee80211_conf *cur_conf = &priv->hw->conf; bool txok; int slot; + int hdrlen, padsize; slot = strip_drv_header(priv, skb); if (slot < 0) { @@ -504,6 +505,15 @@ ath9k_htc_tx_clear_slot(priv, slot); + /* Remove padding before handing frame back to mac80211 */ + hdrlen = ieee80211_get_hdrlen_from_skb(skb); + + padsize = hdrlen & 3; + if (padsize && skb->len > hdrlen + padsize) { + memmove(skb->data + padsize, skb->data, hdrlen); + skb_pull(skb, padsize); + } + /* Send status to mac80211 */ ieee80211_tx_status(priv->hw, skb); } @@ -1067,15 +1077,19 @@ last_rssi = priv->rx.last_rssi; - if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) - rxbuf->rxstatus.rs_rssi = ATH_EP_RND(last_rssi, - ATH_RSSI_EP_MULTIPLIER); + if (ieee80211_is_beacon(hdr->frame_control) && + !is_zero_ether_addr(common->curbssid) && + ether_addr_equal(hdr->addr3, common->curbssid)) { + s8 rssi = rxbuf->rxstatus.rs_rssi; + + if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) + rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER); - if (rxbuf->rxstatus.rs_rssi < 0) - rxbuf->rxstatus.rs_rssi = 0; + if (rssi < 0) + rssi = 0; - if (ieee80211_is_beacon(fc)) - priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi; + priv->ah->stats.avgbrssi = rssi; + } rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp); rx_status->band = hw->conf.channel->band; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ath9k.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ath9k.h @@ -79,10 +79,6 @@ sizeof(struct ath_buf_state)); \ } while (0) -#define ATH_RXBUF_RESET(_bf) do { \ - (_bf)->bf_stale = false; \ - } while (0) - /** * enum buffer_type - Buffer type flags * @@ -322,6 +318,7 @@ struct ath_buf *rx_bufptr; struct ath_rx_edma rx_edma[ATH9K_RX_QUEUE_MAX]; + struct ath_buf *buf_hold; struct sk_buff *frag; }; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/recv.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/recv.c @@ -41,8 +41,6 @@ struct ath_desc *ds; struct sk_buff *skb; - ATH_RXBUF_RESET(bf); - ds = bf->bf_desc; ds->ds_link = 0; /* link to null */ ds->ds_data = bf->bf_buf_addr; @@ -69,6 +67,14 @@ sc->rx.rxlink = &ds->ds_link; } +static void ath_rx_buf_relink(struct ath_softc *sc, struct ath_buf *bf) +{ + if (sc->rx.buf_hold) + ath_rx_buf_link(sc, sc->rx.buf_hold); + + sc->rx.buf_hold = bf; +} + static void ath_setdefantenna(struct ath_softc *sc, u32 antenna) { /* XXX block beacon interrupts */ @@ -116,7 +122,6 @@ skb = bf->bf_mpdu; - ATH_RXBUF_RESET(bf); memset(skb->data, 0, ah->caps.rx_status_len); dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, ah->caps.rx_status_len, DMA_TO_DEVICE); @@ -444,6 +449,7 @@ if (list_empty(&sc->rx.rxbuf)) goto start_recv; + sc->rx.buf_hold = NULL; sc->rx.rxlink = NULL; list_for_each_entry_safe(bf, tbf, &sc->rx.rxbuf, list) { ath_rx_buf_link(sc, bf); @@ -689,6 +695,9 @@ } bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list); + if (bf == sc->rx.buf_hold) + return NULL; + ds = bf->bf_desc; /* @@ -1238,7 +1247,7 @@ if (edma) { ath_rx_edma_buf_link(sc, qtype); } else { - ath_rx_buf_link(sc, bf); + ath_rx_buf_relink(sc, bf); ath9k_hw_rxena(ah); } } while (1); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9003_calib.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9003_calib.c @@ -959,23 +959,70 @@ AR_PHY_65NM_RXRF_AGC_AGC_CAL_OVR, 0); } +static void ar9003_hw_do_manual_peak_cal(struct ath_hw *ah, + struct ath9k_channel *chan) +{ + int i; + + if (!AR_SREV_9462(ah) && !AR_SREV_9565(ah) && !AR_SREV_9485(ah)) + return; + + for (i = 0; i < AR9300_MAX_CHAINS; i++) { + if (!(ah->rxchainmask & (1 << i))) + continue; + ar9003_hw_manual_peak_cal(ah, i, IS_CHAN_2GHZ(chan)); + } +} + +static void ar9003_hw_cl_cal_post_proc(struct ath_hw *ah, bool is_reusable) +{ + u32 cl_idx[AR9300_MAX_CHAINS] = { AR_PHY_CL_TAB_0, + AR_PHY_CL_TAB_1, + AR_PHY_CL_TAB_2 }; + struct ath9k_hw_cal_data *caldata = ah->caldata; + bool txclcal_done = false; + int i, j; + + if (!caldata || !(ah->enabled_cals & TX_CL_CAL)) + return; + + txclcal_done = !!(REG_READ(ah, AR_PHY_AGC_CONTROL) & + AR_PHY_AGC_CONTROL_CLC_SUCCESS); + + if (caldata->done_txclcal_once) { + for (i = 0; i < AR9300_MAX_CHAINS; i++) { + if (!(ah->txchainmask & (1 << i))) + continue; + for (j = 0; j < MAX_CL_TAB_ENTRY; j++) + REG_WRITE(ah, CL_TAB_ENTRY(cl_idx[i]), + caldata->tx_clcal[i][j]); + } + } else if (is_reusable && txclcal_done) { + for (i = 0; i < AR9300_MAX_CHAINS; i++) { + if (!(ah->txchainmask & (1 << i))) + continue; + for (j = 0; j < MAX_CL_TAB_ENTRY; j++) + caldata->tx_clcal[i][j] = + REG_READ(ah, CL_TAB_ENTRY(cl_idx[i])); + } + caldata->done_txclcal_once = true; + } +} + static bool ar9003_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan) { struct ath_common *common = ath9k_hw_common(ah); struct ath9k_hw_cal_data *caldata = ah->caldata; - bool txiqcal_done = false, txclcal_done = false; + bool txiqcal_done = false; bool is_reusable = true, status = true; bool run_rtt_cal = false, run_agc_cal; bool rtt = !!(ah->caps.hw_caps & ATH9K_HW_CAP_RTT); u32 agc_ctrl = 0, agc_supp_cals = AR_PHY_AGC_CONTROL_OFFSET_CAL | AR_PHY_AGC_CONTROL_FLTR_CAL | AR_PHY_AGC_CONTROL_PKDET_CAL; - int i, j; - u32 cl_idx[AR9300_MAX_CHAINS] = { AR_PHY_CL_TAB_0, - AR_PHY_CL_TAB_1, - AR_PHY_CL_TAB_2 }; + /* Use chip chainmask only for calibration */ ar9003_hw_set_chain_masks(ah, ah->caps.rx_chainmask, ah->caps.tx_chainmask); if (rtt) { @@ -1059,14 +1106,8 @@ status = ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL, 0, AH_WAIT_TIMEOUT); - if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) { - for (i = 0; i < AR9300_MAX_CHAINS; i++) { - if (!(ah->rxchainmask & (1 << i))) - continue; - ar9003_hw_manual_peak_cal(ah, i, - IS_CHAN_2GHZ(chan)); - } - } + + ar9003_hw_do_manual_peak_cal(ah, chan); } if (ath9k_hw_mci_is_enabled(ah) && IS_CHAN_2GHZ(chan) && run_agc_cal) @@ -1091,31 +1132,7 @@ else if (caldata && caldata->done_txiqcal_once) ar9003_hw_tx_iq_cal_reload(ah); -#define CL_TAB_ENTRY(reg_base) (reg_base + (4 * j)) - if (caldata && (ah->enabled_cals & TX_CL_CAL)) { - txclcal_done = !!(REG_READ(ah, AR_PHY_AGC_CONTROL) & - AR_PHY_AGC_CONTROL_CLC_SUCCESS); - if (caldata->done_txclcal_once) { - for (i = 0; i < AR9300_MAX_CHAINS; i++) { - if (!(ah->txchainmask & (1 << i))) - continue; - for (j = 0; j < MAX_CL_TAB_ENTRY; j++) - REG_WRITE(ah, CL_TAB_ENTRY(cl_idx[i]), - caldata->tx_clcal[i][j]); - } - } else if (is_reusable && txclcal_done) { - for (i = 0; i < AR9300_MAX_CHAINS; i++) { - if (!(ah->txchainmask & (1 << i))) - continue; - for (j = 0; j < MAX_CL_TAB_ENTRY; j++) - caldata->tx_clcal[i][j] = - REG_READ(ah, - CL_TAB_ENTRY(cl_idx[i])); - } - caldata->done_txclcal_once = true; - } - } -#undef CL_TAB_ENTRY + ar9003_hw_cl_cal_post_proc(ah, is_reusable); if (run_rtt_cal && caldata) { if (is_reusable) { @@ -1131,6 +1148,9 @@ ar9003_hw_rtt_disable(ah); } + /* Revert chainmask to runtime parameters */ + ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); + /* Initialize list pointers */ ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL; ah->supp_cals = IQ_MISMATCH_CAL; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/hw.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/hw.c @@ -1480,7 +1480,9 @@ reset_type = ATH9K_RESET_POWER_ON; else reset_type = ATH9K_RESET_COLD; - } + } else if (ah->chip_fullsleep || REG_READ(ah, AR_Q_TXE) || + (REG_READ(ah, AR_CR) & AR_CR_RXE)) + reset_type = ATH9K_RESET_COLD; if (!ath9k_hw_set_reset_reg(ah, reset_type)) return false; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/Makefile +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/Makefile @@ -8,7 +8,7 @@ antenna.o ath9k-$(CONFIG_ATH9K_BTCOEX_SUPPORT) += mci.o -ath9k-$(CONFIG_ATH9K_RATE_CONTROL) += rc.o +ath9k-$(CONFIG_ATH9K_LEGACY_RATE_CONTROL) += rc.o ath9k-$(CONFIG_ATH9K_PCI) += pci.o ath9k-$(CONFIG_ATH9K_AHB) += ahb.o ath9k-$(CONFIG_ATH9K_DEBUGFS) += debug.o --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/main.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/main.c @@ -173,8 +173,7 @@ { ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0); - if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) || - AR_SREV_9550(sc->sc_ah)) + if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah)) ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work, msecs_to_jiffies(ATH_PLL_WORK_INTERVAL)); @@ -1236,6 +1235,7 @@ struct ath_common *common = ath9k_hw_common(sc->sc_ah); struct ath_node *an = (struct ath_node *) sta->drv_priv; struct ieee80211_key_conf ps_key = { }; + int key; ath_node_attach(sc, sta, vif); @@ -1243,7 +1243,9 @@ vif->type != NL80211_IFTYPE_AP_VLAN) return 0; - an->ps_key = ath_key_config(common, vif, sta, &ps_key); + key = ath_key_config(common, vif, sta, &ps_key); + if (key > 0) + an->ps_key = key; return 0; } @@ -1260,6 +1262,7 @@ return; ath_key_delete(common, &ps_key); + an->ps_key = 0; } static int ath9k_sta_remove(struct ieee80211_hw *hw, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h @@ -68,13 +68,16 @@ #define AR9300_BASE_ADDR 0x3ff #define AR9300_BASE_ADDR_512 0x1ff -#define AR9300_OTP_BASE (AR_SREV_9340(ah) ? 0x30000 : 0x14000) -#define AR9300_OTP_STATUS (AR_SREV_9340(ah) ? 0x30018 : 0x15f18) +#define AR9300_OTP_BASE \ + ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30000 : 0x14000) +#define AR9300_OTP_STATUS \ + ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30018 : 0x15f18) #define AR9300_OTP_STATUS_TYPE 0x7 #define AR9300_OTP_STATUS_VALID 0x4 #define AR9300_OTP_STATUS_ACCESS_BUSY 0x2 #define AR9300_OTP_STATUS_SM_BUSY 0x1 -#define AR9300_OTP_READ_DATA (AR_SREV_9340(ah) ? 0x3001c : 0x15f1c) +#define AR9300_OTP_READ_DATA \ + ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x3001c : 0x15f1c) enum targetPowerHTRates { HT_TARGET_RATE_0_8_16, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/init.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/init.c @@ -774,8 +774,7 @@ hw->wiphy->iface_combinations = &if_comb; hw->wiphy->n_iface_combinations = 1; - if (AR_SREV_5416(sc->sc_ah)) - hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; + hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; @@ -817,10 +816,6 @@ sc->ant_rx = hw->wiphy->available_antennas_rx; sc->ant_tx = hw->wiphy->available_antennas_tx; -#ifdef CONFIG_ATH9K_RATE_CONTROL - hw->rate_control_algorithm = "ath9k_rate_control"; -#endif - if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &sc->sbands[IEEE80211_BAND_2GHZ]; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/xmit.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/xmit.c @@ -2467,6 +2467,7 @@ for (acno = 0, ac = &an->ac[acno]; acno < IEEE80211_NUM_ACS; acno++, ac++) { ac->sched = false; + ac->clear_ps_filter = true; ac->txq = sc->tx.txq_map[acno]; INIT_LIST_HEAD(&ac->tid_q); } --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/htc_drv_main.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/htc_drv_main.c @@ -1174,7 +1174,7 @@ mutex_lock(&priv->htc_pm_lock); priv->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE); - if (priv->ps_idle) + if (!priv->ps_idle) chip_reset = true; mutex_unlock(&priv->htc_pm_lock); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/htc.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/htc.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/common.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/common.h @@ -27,7 +27,7 @@ #define WME_MAX_BA WME_BA_BMP_SIZE #define ATH_TID_MAX_BUFS (2 * WME_MAX_BA) -#define ATH_RSSI_DUMMY_MARKER 0x127 +#define ATH_RSSI_DUMMY_MARKER 127 #define ATH_RSSI_LPF_LEN 10 #define RSSI_LPF_THRESHOLD -20 #define ATH_RSSI_EP_MULTIPLIER (1<<7) --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9003_phy.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9003_phy.c @@ -1072,6 +1072,10 @@ * is_on == 0 means MRC CCK is OFF (more noise imm) */ bool is_on = param ? 1 : 0; + + if (ah->caps.rx_chainmask == 1) + break; + REG_RMW_FIELD(ah, AR_PHY_MRC_CCK_CTRL, AR_PHY_MRC_CCK_ENABLE, is_on); REG_RMW_FIELD(ah, AR_PHY_MRC_CCK_CTRL, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/hw.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/hw.h @@ -397,6 +397,7 @@ #define MAX_RTT_TABLE_ENTRY 6 #define MAX_IQCAL_MEASUREMENT 8 #define MAX_CL_TAB_ENTRY 16 +#define CL_TAB_ENTRY(reg_base) (reg_base + (4 * j)) struct ath9k_hw_cal_data { u16 channel; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h @@ -519,7 +519,7 @@ {0x00008258, 0x00000000}, {0x0000825c, 0x40000000}, {0x00008260, 0x00080922}, - {0x00008264, 0x9bc00010}, + {0x00008264, 0x9d400010}, {0x00008268, 0xffffffff}, {0x0000826c, 0x0000ffff}, {0x00008270, 0x00000000}, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/htc_drv_init.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/htc_drv_init.c @@ -796,7 +796,7 @@ * required version. */ if (priv->fw_version_major != MAJOR_VERSION_REQ || - priv->fw_version_minor != MINOR_VERSION_REQ) { + priv->fw_version_minor < MINOR_VERSION_REQ) { dev_err(priv->dev, "ath9k_htc: Please upgrade to FW version %d.%d\n", MAJOR_VERSION_REQ, MINOR_VERSION_REQ); return -EINVAL; @@ -846,6 +846,7 @@ if (error != 0) goto err_rx; + ath9k_hw_disable(priv->ah); #ifdef CONFIG_MAC80211_LEDS /* must be initialized before ieee80211_register_hw */ priv->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(priv->hw, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/rc.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/rc.h @@ -231,7 +231,7 @@ } #endif -#ifdef CONFIG_ATH9K_RATE_CONTROL +#ifdef CONFIG_ATH9K_LEGACY_RATE_CONTROL int ath_rate_control_register(void); void ath_rate_control_unregister(void); #else --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/link.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/link.c @@ -28,21 +28,21 @@ int i; bool needreset = false; - for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) - if (ATH_TXQ_SETUP(sc, i)) { - txq = &sc->tx.txq[i]; - ath_txq_lock(sc, txq); - if (txq->axq_depth) { - if (txq->axq_tx_inprogress) { - needreset = true; - ath_txq_unlock(sc, txq); - break; - } else { - txq->axq_tx_inprogress = true; - } + for (i = 0; i < IEEE80211_NUM_ACS; i++) { + txq = sc->tx.txq_map[i]; + + ath_txq_lock(sc, txq); + if (txq->axq_depth) { + if (txq->axq_tx_inprogress) { + needreset = true; + ath_txq_unlock(sc, txq); + break; + } else { + txq->axq_tx_inprogress = true; } - ath_txq_unlock_complete(sc, txq); } + ath_txq_unlock_complete(sc, txq); + } if (needreset) { ath_dbg(ath9k_hw_common(sc->sc_ah), RESET, @@ -170,7 +170,8 @@ { struct ath_softc *sc = (struct ath_softc *)data; - ieee80211_queue_work(sc->hw, &sc->hw_check_work); + if (!test_bit(SC_OP_INVALID, &sc->sc_flags)) + ieee80211_queue_work(sc->hw, &sc->hw_check_work); } /* --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/hif_usb.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/hif_usb.c @@ -1289,7 +1289,9 @@ usb_set_intfdata(interface, NULL); - if (!unplugged && (hif_dev->flags & HIF_USB_START)) + /* If firmware was loaded we should drop it + * go back to first stage bootloader. */ + if (!unplugged && (hif_dev->flags & HIF_USB_READY)) ath9k_hif_usb_reboot(udev); kfree(hif_dev); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9003_phy.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9003_phy.h @@ -351,6 +351,8 @@ #define AR_PHY_CCA_NOM_VAL_9330_2GHZ -118 +#define AR9300_EXT_LNA_CTL_GPIO_AR9485 9 + /* * AGC Field Definitions */ --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h @@ -778,11 +778,11 @@ {0x0000a074, 0x00000000}, {0x0000a078, 0x00000000}, {0x0000a07c, 0x00000000}, - {0x0000a080, 0x1a1a1a1a}, - {0x0000a084, 0x1a1a1a1a}, - {0x0000a088, 0x1a1a1a1a}, - {0x0000a08c, 0x1a1a1a1a}, - {0x0000a090, 0x171a1a1a}, + {0x0000a080, 0x22222229}, + {0x0000a084, 0x1d1d1d1d}, + {0x0000a088, 0x1d1d1d1d}, + {0x0000a08c, 0x1d1d1d1d}, + {0x0000a090, 0x171d1d1d}, {0x0000a094, 0x11111717}, {0x0000a098, 0x00030311}, {0x0000a09c, 0x00000000}, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/hostap/hostap_ioctl.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/hostap/hostap_ioctl.c @@ -523,9 +523,9 @@ data->length = prism2_ap_get_sta_qual(local, addr, qual, IW_MAX_AP, 1); - memcpy(extra, &addr, sizeof(struct sockaddr) * data->length); + memcpy(extra, addr, sizeof(struct sockaddr) * data->length); data->flags = 1; /* has quality information */ - memcpy(extra + sizeof(struct sockaddr) * data->length, &qual, + memcpy(extra + sizeof(struct sockaddr) * data->length, qual, sizeof(struct iw_quality) * data->length); kfree(addr); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/hostap/hostap_hw.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/hostap/hostap_hw.c @@ -68,7 +68,7 @@ module_param_string(essid, essid, sizeof(essid), 0444); MODULE_PARM_DESC(essid, "Host AP's ESSID"); -static int iw_mode[MAX_PARM_DEVICES] = { IW_MODE_MASTER, DEF_INTS }; +static int iw_mode[MAX_PARM_DEVICES] = { IW_MODE_INFRA, DEF_INTS }; module_param_array(iw_mode, int, NULL, 0444); MODULE_PARM_DESC(iw_mode, "Initial operation mode"); --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/b43/Kconfig +++ linux-lts-raring-3.8.0/drivers/net/wireless/b43/Kconfig @@ -28,7 +28,7 @@ config B43_BCMA bool "Support for BCMA bus" - depends on B43 && BCMA + depends on B43 && (BCMA = y || BCMA = B43) default y config B43_BCMA_EXTRA @@ -39,7 +39,7 @@ config B43_SSB bool - depends on B43 && SSB + depends on B43 && (SSB = y || SSB = B43) default y # Auto-select SSB PCI-HOST support, if possible --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/b43/main.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/b43/main.c @@ -1895,30 +1895,18 @@ } } - if (unlikely(merged_dma_reason & (B43_DMAIRQ_FATALMASK | - B43_DMAIRQ_NONFATALMASK))) { - if (merged_dma_reason & B43_DMAIRQ_FATALMASK) { - b43err(dev->wl, "Fatal DMA error: " - "0x%08X, 0x%08X, 0x%08X, " - "0x%08X, 0x%08X, 0x%08X\n", - dma_reason[0], dma_reason[1], - dma_reason[2], dma_reason[3], - dma_reason[4], dma_reason[5]); - b43err(dev->wl, "This device does not support DMA " + if (unlikely(merged_dma_reason & (B43_DMAIRQ_FATALMASK))) { + b43err(dev->wl, + "Fatal DMA error: 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X\n", + dma_reason[0], dma_reason[1], + dma_reason[2], dma_reason[3], + dma_reason[4], dma_reason[5]); + b43err(dev->wl, "This device does not support DMA " "on your system. It will now be switched to PIO.\n"); - /* Fall back to PIO transfers if we get fatal DMA errors! */ - dev->use_pio = true; - b43_controller_restart(dev, "DMA error"); - return; - } - if (merged_dma_reason & B43_DMAIRQ_NONFATALMASK) { - b43err(dev->wl, "DMA error: " - "0x%08X, 0x%08X, 0x%08X, " - "0x%08X, 0x%08X, 0x%08X\n", - dma_reason[0], dma_reason[1], - dma_reason[2], dma_reason[3], - dma_reason[4], dma_reason[5]); - } + /* Fall back to PIO transfers if we get fatal DMA errors! */ + dev->use_pio = true; + b43_controller_restart(dev, "DMA error"); + return; } if (unlikely(reason & B43_IRQ_UCODE_DEBUG)) @@ -1937,6 +1925,11 @@ handle_irq_noise(dev); /* Check the DMA reason registers for received data. */ + if (dma_reason[0] & B43_DMAIRQ_RDESC_UFLOW) { + if (B43_DEBUG) + b43warn(dev->wl, "RX descriptor underrun\n"); + b43_dma_handle_rx_overflow(dev->dma.rx_ring); + } if (dma_reason[0] & B43_DMAIRQ_RX_DONE) { if (b43_using_pio_transfers(dev)) b43_pio_rx(dev->pio.rx_queue); @@ -1994,7 +1987,7 @@ return IRQ_NONE; dev->dma_reason[0] = b43_read32(dev, B43_MMIO_DMA0_REASON) - & 0x0001DC00; + & 0x0001FC00; dev->dma_reason[1] = b43_read32(dev, B43_MMIO_DMA1_REASON) & 0x0000DC00; dev->dma_reason[2] = b43_read32(dev, B43_MMIO_DMA2_REASON) @@ -2458,7 +2451,7 @@ for (i = 0; i < B43_NR_FWTYPES; i++) { errmsg = ctx->errors[i]; if (strlen(errmsg)) - b43err(dev->wl, errmsg); + b43err(dev->wl, "%s", errmsg); } b43_print_fw_helptext(dev->wl, 1); goto out; @@ -3126,7 +3119,7 @@ b43_write32(dev, 0x018C, 0x02000000); } b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, 0x00004000); - b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001DC00); + b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001FC00); b43_write32(dev, B43_MMIO_DMA1_IRQ_MASK, 0x0000DC00); b43_write32(dev, B43_MMIO_DMA2_IRQ_MASK, 0x0000DC00); b43_write32(dev, B43_MMIO_DMA3_IRQ_MASK, 0x0001DC00); @@ -4214,7 +4207,6 @@ mutex_unlock(&wl->mutex); cancel_delayed_work_sync(&dev->periodic_work); cancel_work_sync(&wl->tx_work); - cancel_work_sync(&wl->firmware_load); mutex_lock(&wl->mutex); dev = wl->current_dev; if (!dev || b43_status(dev) < B43_STAT_STARTED) { @@ -5434,6 +5426,7 @@ /* We must cancel any work here before unregistering from ieee80211, * as the ieee80211 unreg will destroy the workqueue. */ cancel_work_sync(&wldev->restart_work); + cancel_work_sync(&wl->firmware_load); B43_WARN_ON(!wl); if (!wldev->fw.ucode.data) @@ -5510,6 +5503,7 @@ /* We must cancel any work here before unregistering from ieee80211, * as the ieee80211 unreg will destroy the workqueue. */ cancel_work_sync(&wldev->restart_work); + cancel_work_sync(&wl->firmware_load); B43_WARN_ON(!wl); if (!wldev->fw.ucode.data) --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/b43/dma.h +++ linux-lts-raring-3.8.0/drivers/net/wireless/b43/dma.h @@ -9,7 +9,7 @@ /* DMA-Interrupt reasons. */ #define B43_DMAIRQ_FATALMASK ((1 << 10) | (1 << 11) | (1 << 12) \ | (1 << 14) | (1 << 15)) -#define B43_DMAIRQ_NONFATALMASK (1 << 13) +#define B43_DMAIRQ_RDESC_UFLOW (1 << 13) #define B43_DMAIRQ_RX_DONE (1 << 16) /*** 32-bit DMA Engine. ***/ @@ -169,7 +169,7 @@ /* DMA engine tuning knobs */ #define B43_TXRING_SLOTS 256 -#define B43_RXRING_SLOTS 64 +#define B43_RXRING_SLOTS 256 #define B43_DMA0_RX_FW598_BUFSIZE (B43_DMA0_RX_FW598_FO + IEEE80211_MAX_FRAME_LEN) #define B43_DMA0_RX_FW351_BUFSIZE (B43_DMA0_RX_FW351_FO + IEEE80211_MAX_FRAME_LEN) @@ -295,6 +295,8 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev, const struct b43_txstatus *status); +void b43_dma_handle_rx_overflow(struct b43_dmaring *ring); + void b43_dma_rx(struct b43_dmaring *ring); void b43_dma_direct_fifo_rx(struct b43_wldev *dev, --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/b43/dma.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/b43/dma.c @@ -1487,8 +1487,12 @@ const struct b43_dma_ops *ops; struct b43_dmaring *ring; struct b43_dmadesc_meta *meta; + static const struct b43_txstatus fake; /* filled with 0 */ + const struct b43_txstatus *txstat; int slot, firstused; bool frame_succeed; + int skip; + static u8 err_out1, err_out2; ring = parse_cookie(dev, status->cookie, &slot); if (unlikely(!ring)) @@ -1501,13 +1505,36 @@ firstused = ring->current_slot - ring->used_slots + 1; if (firstused < 0) firstused = ring->nr_slots + firstused; + + skip = 0; if (unlikely(slot != firstused)) { /* This possibly is a firmware bug and will result in - * malfunction, memory leaks and/or stall of DMA functionality. */ - b43dbg(dev->wl, "Out of order TX status report on DMA ring %d. " - "Expected %d, but got %d\n", - ring->index, firstused, slot); - return; + * malfunction, memory leaks and/or stall of DMA functionality. + */ + if (slot == next_slot(ring, next_slot(ring, firstused))) { + /* If a single header/data pair was missed, skip over + * the first two slots in an attempt to recover. + */ + slot = firstused; + skip = 2; + if (!err_out1) { + /* Report the error once. */ + b43dbg(dev->wl, + "Skip on DMA ring %d slot %d.\n", + ring->index, slot); + err_out1 = 1; + } + } else { + /* More than a single header/data pair were missed. + * Report this error once. + */ + if (!err_out2) + b43dbg(dev->wl, + "Out of order TX status report on DMA ring %d. Expected %d, but got %d\n", + ring->index, firstused, slot); + err_out2 = 1; + return; + } } ops = ring->ops; @@ -1522,11 +1549,13 @@ slot, firstused, ring->index); break; } + if (meta->skb) { struct b43_private_tx_info *priv_info = - b43_get_priv_tx_info(IEEE80211_SKB_CB(meta->skb)); + b43_get_priv_tx_info(IEEE80211_SKB_CB(meta->skb)); - unmap_descbuffer(ring, meta->dmaaddr, meta->skb->len, 1); + unmap_descbuffer(ring, meta->dmaaddr, + meta->skb->len, 1); kfree(priv_info->bouncebuffer); priv_info->bouncebuffer = NULL; } else { @@ -1538,8 +1567,9 @@ struct ieee80211_tx_info *info; if (unlikely(!meta->skb)) { - /* This is a scatter-gather fragment of a frame, so - * the skb pointer must not be NULL. */ + /* This is a scatter-gather fragment of a frame, + * so the skb pointer must not be NULL. + */ b43dbg(dev->wl, "TX status unexpected NULL skb " "at slot %d (first=%d) on ring %d\n", slot, firstused, ring->index); @@ -1550,9 +1580,18 @@ /* * Call back to inform the ieee80211 subsystem about - * the status of the transmission. + * the status of the transmission. When skipping over + * a missed TX status report, use a status structure + * filled with zeros to indicate that the frame was not + * sent (frame_count 0) and not acknowledged */ - frame_succeed = b43_fill_txstatus_report(dev, info, status); + if (unlikely(skip)) + txstat = &fake; + else + txstat = status; + + frame_succeed = b43_fill_txstatus_report(dev, info, + txstat); #ifdef CONFIG_B43_DEBUG if (frame_succeed) ring->nr_succeed_tx_packets++; @@ -1580,12 +1619,14 @@ /* Everything unmapped and free'd. So it's not used anymore. */ ring->used_slots--; - if (meta->is_last_fragment) { + if (meta->is_last_fragment && !skip) { /* This is the last scatter-gather * fragment of the frame. We are done. */ break; } slot = next_slot(ring, slot); + if (skip > 0) + --skip; } if (ring->stopped) { B43_WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME); @@ -1692,6 +1733,25 @@ sync_descbuffer_for_device(ring, dmaaddr, ring->rx_buffersize); } +void b43_dma_handle_rx_overflow(struct b43_dmaring *ring) +{ + int current_slot, previous_slot; + + B43_WARN_ON(ring->tx); + + /* Device has filled all buffers, drop all packets and let TCP + * decrease speed. + * Decrement RX index by one will let the device to see all slots + * as free again + */ + /* + *TODO: How to increase rx_drop in mac80211? + */ + current_slot = ring->ops->get_current_rxslot(ring); + previous_slot = prev_slot(ring, current_slot); + ring->ops->set_current_rxslot(ring, previous_slot); +} + void b43_dma_rx(struct b43_dmaring *ring) { const struct b43_dma_ops *ops = ring->ops; --- linux-lts-raring-3.8.0.orig/drivers/net/wireless/b43/phy_n.c +++ linux-lts-raring-3.8.0/drivers/net/wireless/b43/phy_n.c @@ -1564,7 +1564,7 @@ u16 clip_off[2] = { 0xFFFF, 0xFFFF }; u8 vcm_final = 0; - s8 offset[4]; + s32 offset[4]; s32 results[8][4] = { }; s32 results_min[4] = { }; s32 poll_results[4] = { }; @@ -1615,7 +1615,7 @@ } for (i = 0; i < 4; i += 2) { s32 curr; - s32 mind = 40; + s32 mind = 0x100000; s32 minpoll = 249; u8 minvcm = 0; if (2 * core != i) @@ -1732,7 +1732,7 @@ u8 regs_save_radio[2]; u16 regs_save_phy[2]; - s8 offset[4]; + s32 offset[4]; u8 core; u8 rail; @@ -1799,7 +1799,7 @@ } for (i = 0; i < 4; i++) { - s32 mind = 40; + s32 mind = 0x100000; u8 minvcm = 0; s32 minpoll = 249; s32 curr; @@ -5165,7 +5165,8 @@ #endif #ifdef CONFIG_B43_SSB case B43_BUS_SSB: - /* FIXME */ + ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco, + avoid); break; #endif } --- linux-lts-raring-3.8.0.orig/drivers/net/can/mcp251x.c +++ linux-lts-raring-3.8.0/drivers/net/can/mcp251x.c @@ -922,6 +922,7 @@ struct mcp251x_priv *priv = netdev_priv(net); struct spi_device *spi = priv->spi; struct mcp251x_platform_data *pdata = spi->dev.platform_data; + unsigned long flags; int ret; ret = open_candev(net); @@ -938,9 +939,14 @@ priv->tx_skb = NULL; priv->tx_len = 0; + flags = IRQF_ONESHOT; + if (pdata->irq_flags) + flags |= pdata->irq_flags; + else + flags |= IRQF_TRIGGER_FALLING; + ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, - pdata->irq_flags ? pdata->irq_flags : IRQF_TRIGGER_FALLING, - DEVICE_NAME, priv); + flags, DEVICE_NAME, priv); if (ret) { dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); if (pdata->transceiver_enable) --- linux-lts-raring-3.8.0.orig/drivers/net/can/usb/kvaser_usb.c +++ linux-lts-raring-3.8.0/drivers/net/can/usb/kvaser_usb.c @@ -136,6 +136,9 @@ #define KVASER_CTRL_MODE_SELFRECEPTION 3 #define KVASER_CTRL_MODE_OFF 4 +/* log message */ +#define KVASER_EXTENDED_FRAME BIT(31) + struct kvaser_msg_simple { u8 tid; u8 channel; @@ -818,8 +821,13 @@ priv = dev->nets[channel]; stats = &priv->netdev->stats; - if (msg->u.rx_can.flag & (MSG_FLAG_ERROR_FRAME | MSG_FLAG_NERR | - MSG_FLAG_OVERRUN)) { + if ((msg->u.rx_can.flag & MSG_FLAG_ERROR_FRAME) && + (msg->id == CMD_LOG_MESSAGE)) { + kvaser_usb_rx_error(dev, msg); + return; + } else if (msg->u.rx_can.flag & (MSG_FLAG_ERROR_FRAME | + MSG_FLAG_NERR | + MSG_FLAG_OVERRUN)) { kvaser_usb_rx_can_err(priv, msg); return; } else if (msg->u.rx_can.flag & ~MSG_FLAG_REMOTE_FRAME) { @@ -835,22 +843,40 @@ return; } - cf->can_id = ((msg->u.rx_can.msg[0] & 0x1f) << 6) | - (msg->u.rx_can.msg[1] & 0x3f); - cf->can_dlc = get_can_dlc(msg->u.rx_can.msg[5]); - - if (msg->id == CMD_RX_EXT_MESSAGE) { - cf->can_id <<= 18; - cf->can_id |= ((msg->u.rx_can.msg[2] & 0x0f) << 14) | - ((msg->u.rx_can.msg[3] & 0xff) << 6) | - (msg->u.rx_can.msg[4] & 0x3f); - cf->can_id |= CAN_EFF_FLAG; - } - - if (msg->u.rx_can.flag & MSG_FLAG_REMOTE_FRAME) - cf->can_id |= CAN_RTR_FLAG; - else - memcpy(cf->data, &msg->u.rx_can.msg[6], cf->can_dlc); + if (msg->id == CMD_LOG_MESSAGE) { + cf->can_id = le32_to_cpu(msg->u.log_message.id); + if (cf->can_id & KVASER_EXTENDED_FRAME) + cf->can_id &= CAN_EFF_MASK | CAN_EFF_FLAG; + else + cf->can_id &= CAN_SFF_MASK; + + cf->can_dlc = get_can_dlc(msg->u.log_message.dlc); + + if (msg->u.log_message.flags & MSG_FLAG_REMOTE_FRAME) + cf->can_id |= CAN_RTR_FLAG; + else + memcpy(cf->data, &msg->u.log_message.data, + cf->can_dlc); + } else { + cf->can_id = ((msg->u.rx_can.msg[0] & 0x1f) << 6) | + (msg->u.rx_can.msg[1] & 0x3f); + + if (msg->id == CMD_RX_EXT_MESSAGE) { + cf->can_id <<= 18; + cf->can_id |= ((msg->u.rx_can.msg[2] & 0x0f) << 14) | + ((msg->u.rx_can.msg[3] & 0xff) << 6) | + (msg->u.rx_can.msg[4] & 0x3f); + cf->can_id |= CAN_EFF_FLAG; + } + + cf->can_dlc = get_can_dlc(msg->u.rx_can.msg[5]); + + if (msg->u.rx_can.flag & MSG_FLAG_REMOTE_FRAME) + cf->can_id |= CAN_RTR_FLAG; + else + memcpy(cf->data, &msg->u.rx_can.msg[6], + cf->can_dlc); + } netif_rx(skb); @@ -912,6 +938,7 @@ case CMD_RX_STD_MESSAGE: case CMD_RX_EXT_MESSAGE: + case CMD_LOG_MESSAGE: kvaser_usb_rx_can_msg(dev, msg); break; @@ -920,11 +947,6 @@ kvaser_usb_rx_error(dev, msg); break; - case CMD_LOG_MESSAGE: - if (msg->u.log_message.flags & MSG_FLAG_ERROR_FRAME) - kvaser_usb_rx_error(dev, msg); - break; - case CMD_TX_ACKNOWLEDGE: kvaser_usb_tx_acknowledge(dev, msg); break; --- linux-lts-raring-3.8.0.orig/drivers/net/can/usb/peak_usb/pcan_usb.c +++ linux-lts-raring-3.8.0/drivers/net/can/usb/peak_usb/pcan_usb.c @@ -649,7 +649,7 @@ if ((mc->ptr + rec_len) > mc->end) goto decode_failed; - memcpy(cf->data, mc->ptr, rec_len); + memcpy(cf->data, mc->ptr, cf->can_dlc); mc->ptr += rec_len; } --- linux-lts-raring-3.8.0.orig/drivers/net/can/sja1000/plx_pci.c +++ linux-lts-raring-3.8.0/drivers/net/can/sja1000/plx_pci.c @@ -348,7 +348,7 @@ */ if ((priv->read_reg(priv, REG_CR) & REG_CR_BASICCAN_INITIAL_MASK) == REG_CR_BASICCAN_INITIAL && - (priv->read_reg(priv, REG_SR) == REG_SR_BASICCAN_INITIAL) && + (priv->read_reg(priv, SJA1000_REG_SR) == REG_SR_BASICCAN_INITIAL) && (priv->read_reg(priv, REG_IR) == REG_IR_BASICCAN_INITIAL)) flag = 1; @@ -360,7 +360,7 @@ * See states on p. 23 of the Datasheet. */ if (priv->read_reg(priv, REG_MOD) == REG_MOD_PELICAN_INITIAL && - priv->read_reg(priv, REG_SR) == REG_SR_PELICAN_INITIAL && + priv->read_reg(priv, SJA1000_REG_SR) == REG_SR_PELICAN_INITIAL && priv->read_reg(priv, REG_IR) == REG_IR_PELICAN_INITIAL) return flag; --- linux-lts-raring-3.8.0.orig/drivers/net/can/sja1000/sja1000.c +++ linux-lts-raring-3.8.0/drivers/net/can/sja1000/sja1000.c @@ -91,7 +91,7 @@ */ spin_lock_irqsave(&priv->cmdreg_lock, flags); priv->write_reg(priv, REG_CMR, val); - priv->read_reg(priv, REG_SR); + priv->read_reg(priv, SJA1000_REG_SR); spin_unlock_irqrestore(&priv->cmdreg_lock, flags); } @@ -499,7 +499,7 @@ while ((isrc = priv->read_reg(priv, REG_IR)) && (n < SJA1000_MAX_IRQ)) { n++; - status = priv->read_reg(priv, REG_SR); + status = priv->read_reg(priv, SJA1000_REG_SR); /* check for absent controller due to hw unplug */ if (status == 0xFF && sja1000_is_absent(priv)) return IRQ_NONE; @@ -526,7 +526,7 @@ /* receive interrupt */ while (status & SR_RBS) { sja1000_rx(dev); - status = priv->read_reg(priv, REG_SR); + status = priv->read_reg(priv, SJA1000_REG_SR); /* check for absent controller */ if (status == 0xFF && sja1000_is_absent(priv)) return IRQ_NONE; --- linux-lts-raring-3.8.0.orig/drivers/net/can/sja1000/sja1000.h +++ linux-lts-raring-3.8.0/drivers/net/can/sja1000/sja1000.h @@ -56,7 +56,7 @@ /* SJA1000 registers - manual section 6.4 (Pelican Mode) */ #define REG_MOD 0x00 #define REG_CMR 0x01 -#define REG_SR 0x02 +#define SJA1000_REG_SR 0x02 #define REG_IR 0x03 #define REG_IER 0x04 #define REG_ALC 0x0B --- linux-lts-raring-3.8.0.orig/drivers/net/can/sja1000/sja1000_of_platform.c +++ linux-lts-raring-3.8.0/drivers/net/can/sja1000/sja1000_of_platform.c @@ -96,8 +96,8 @@ struct net_device *dev; struct sja1000_priv *priv; struct resource res; - const u32 *prop; - int err, irq, res_size, prop_size; + u32 prop; + int err, irq, res_size; void __iomem *base; err = of_address_to_resource(np, 0, &res); @@ -138,27 +138,27 @@ priv->read_reg = sja1000_ofp_read_reg; priv->write_reg = sja1000_ofp_write_reg; - prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size); - if (prop && (prop_size == sizeof(u32))) - priv->can.clock.freq = *prop / 2; + err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop); + if (!err) + priv->can.clock.freq = prop / 2; else priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */ - prop = of_get_property(np, "nxp,tx-output-mode", &prop_size); - if (prop && (prop_size == sizeof(u32))) - priv->ocr |= *prop & OCR_MODE_MASK; + err = of_property_read_u32(np, "nxp,tx-output-mode", &prop); + if (!err) + priv->ocr |= prop & OCR_MODE_MASK; else priv->ocr |= OCR_MODE_NORMAL; /* default */ - prop = of_get_property(np, "nxp,tx-output-config", &prop_size); - if (prop && (prop_size == sizeof(u32))) - priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK; + err = of_property_read_u32(np, "nxp,tx-output-config", &prop); + if (!err) + priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK; else priv->ocr |= OCR_TX0_PULLDOWN; /* default */ - prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size); - if (prop && (prop_size == sizeof(u32)) && *prop) { - u32 divider = priv->can.clock.freq * 2 / *prop; + err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop); + if (!err && prop) { + u32 divider = priv->can.clock.freq * 2 / prop; if (divider > 1) priv->cdr |= divider / 2 - 1; @@ -168,8 +168,7 @@ priv->cdr |= CDR_CLK_OFF; /* default */ } - prop = of_get_property(np, "nxp,no-comparator-bypass", NULL); - if (!prop) + if (!of_property_read_bool(np, "nxp,no-comparator-bypass")) priv->cdr |= CDR_CBP; /* default */ priv->irq_flags = IRQF_SHARED; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/calxeda/xgmac.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/calxeda/xgmac.c @@ -1141,6 +1141,9 @@ struct sk_buff *skb; int frame_len; + if (!dma_ring_cnt(priv->rx_head, priv->rx_tail, DMA_RX_RING_SZ)) + break; + entry = priv->rx_tail; p = priv->dma_rx + entry; if (desc_get_owner(p)) --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/intel/e1000e/ethtool.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/intel/e1000e/ethtool.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "e1000.h" @@ -2053,7 +2054,19 @@ } } +static int e1000e_ethtool_begin(struct net_device *netdev) +{ + return pm_runtime_get_sync(netdev->dev.parent); +} + +static void e1000e_ethtool_complete(struct net_device *netdev) +{ + pm_runtime_put_sync(netdev->dev.parent); +} + static const struct ethtool_ops e1000_ethtool_ops = { + .begin = e1000e_ethtool_begin, + .complete = e1000e_ethtool_complete, .get_settings = e1000_get_settings, .set_settings = e1000_set_settings, .get_drvinfo = e1000_get_drvinfo, --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/intel/e1000e/netdev.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/intel/e1000e/netdev.c @@ -65,6 +65,10 @@ module_param(debug, int, 0); MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); +static int eeprom_bad_csum_allow __read_mostly = 0; +module_param(eeprom_bad_csum_allow, int, 0); +MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad EEPROM checksums"); + static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state); static const struct e1000_info *e1000_info_tbl[] = { @@ -3952,6 +3956,7 @@ netif_start_queue(netdev); adapter->idle_check = true; + hw->mac.get_link_status = true; pm_runtime_put(&pdev->dev); /* fire a link status change interrupt to start the watchdog */ @@ -4312,6 +4317,7 @@ (adapter->hw.phy.media_type == e1000_media_type_copper)) { int ret_val; + pm_runtime_get_sync(&adapter->pdev->dev); ret_val = e1e_rphy(hw, PHY_CONTROL, &phy->bmcr); ret_val |= e1e_rphy(hw, PHY_STATUS, &phy->bmsr); ret_val |= e1e_rphy(hw, PHY_AUTONEG_ADV, &phy->advertise); @@ -4322,6 +4328,7 @@ ret_val |= e1e_rphy(hw, PHY_EXT_STATUS, &phy->estatus); if (ret_val) e_warn("Error reading PHY register\n"); + pm_runtime_put_sync(&adapter->pdev->dev); } else { /* Do not read PHY registers if link is not up * Set values to typical power-on defaults @@ -5450,8 +5457,7 @@ return retval; } -static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake, - bool runtime) +static int __e1000_shutdown(struct pci_dev *pdev, bool runtime) { struct net_device *netdev = pci_get_drvdata(pdev); struct e1000_adapter *adapter = netdev_priv(netdev); @@ -5475,10 +5481,6 @@ } e1000e_reset_interrupt_capability(adapter); - retval = pci_save_state(pdev); - if (retval) - return retval; - status = er32(STATUS); if (status & E1000_STATUS_LU) wufc &= ~E1000_WUFC_LNKC; @@ -5534,13 +5536,6 @@ ew32(WUFC, 0); } - *enable_wake = !!wufc; - - /* make sure adapter isn't asleep if manageability is enabled */ - if ((adapter->flags & FLAG_MNG_PT_ENABLED) || - (hw->mac.ops.check_mng_mode(hw))) - *enable_wake = true; - if (adapter->hw.phy.type == e1000_phy_igp_3) e1000e_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw); @@ -5549,27 +5544,7 @@ */ e1000e_release_hw_control(adapter); - pci_disable_device(pdev); - - return 0; -} - -static void e1000_power_off(struct pci_dev *pdev, bool sleep, bool wake) -{ - if (sleep && wake) { - pci_prepare_to_sleep(pdev); - return; - } - - pci_wake_from_d3(pdev, wake); - pci_set_power_state(pdev, PCI_D3hot); -} - -static void e1000_complete_shutdown(struct pci_dev *pdev, bool sleep, - bool wake) -{ - struct net_device *netdev = pci_get_drvdata(pdev); - struct e1000_adapter *adapter = netdev_priv(netdev); + pci_clear_master(pdev); /* The pci-e switch on some quad port adapters will report a * correctable error when the MAC transitions from D0 to D3. To @@ -5584,12 +5559,13 @@ pcie_capability_write_word(us_dev, PCI_EXP_DEVCTL, (devctl & ~PCI_EXP_DEVCTL_CERE)); - e1000_power_off(pdev, sleep, wake); + pci_save_state(pdev); + pci_prepare_to_sleep(pdev); pcie_capability_write_word(us_dev, PCI_EXP_DEVCTL, devctl); - } else { - e1000_power_off(pdev, sleep, wake); } + + return 0; } #ifdef CONFIG_PCIEASPM @@ -5640,9 +5616,7 @@ if (aspm_disable_flag) e1000e_disable_aspm(pdev, aspm_disable_flag); - pci_set_power_state(pdev, PCI_D0); - pci_restore_state(pdev); - pci_save_state(pdev); + pci_set_master(pdev); e1000e_set_interrupt_capability(adapter); if (netif_running(netdev)) { @@ -5708,14 +5682,8 @@ static int e1000_suspend(struct device *dev) { struct pci_dev *pdev = to_pci_dev(dev); - int retval; - bool wake; - - retval = __e1000_shutdown(pdev, &wake, false); - if (!retval) - e1000_complete_shutdown(pdev, true, wake); - return retval; + return __e1000_shutdown(pdev, false); } static int e1000_resume(struct device *dev) @@ -5738,13 +5706,10 @@ struct net_device *netdev = pci_get_drvdata(pdev); struct e1000_adapter *adapter = netdev_priv(netdev); - if (e1000e_pm_ready(adapter)) { - bool wake; - - __e1000_shutdown(pdev, &wake, true); - } + if (!e1000e_pm_ready(adapter)) + return 0; - return 0; + return __e1000_shutdown(pdev, true); } static int e1000_idle(struct device *dev) @@ -5782,12 +5747,7 @@ static void e1000_shutdown(struct pci_dev *pdev) { - bool wake = false; - - __e1000_shutdown(pdev, &wake, false); - - if (system_state == SYSTEM_POWER_OFF) - e1000_complete_shutdown(pdev, false, wake); + __e1000_shutdown(pdev, false); } #ifdef CONFIG_NET_POLL_CONTROLLER @@ -5908,9 +5868,9 @@ "Cannot re-enable PCI device after reset.\n"); result = PCI_ERS_RESULT_DISCONNECT; } else { - pci_set_master(pdev); pdev->state_saved = true; pci_restore_state(pdev); + pci_set_master(pdev); pci_enable_wake(pdev, PCI_D3hot, 0); pci_enable_wake(pdev, PCI_D3cold, 0); @@ -6261,8 +6221,14 @@ break; if (i == 2) { dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n"); - err = -EIO; - goto err_eeprom; + + /* if we allow bad checksums, just break */ + if (eeprom_bad_csum_allow) { + break; + } else { + err = -EIO; + goto err_eeprom; + } } } @@ -6341,7 +6307,11 @@ /* initialize the wol settings based on the eeprom settings */ adapter->wol = adapter->eeprom_wol; - device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); + + /* make sure adapter isn't asleep if manageability is enabled */ + if (adapter->wol || (adapter->flags & FLAG_MNG_PT_ENABLED) || + (hw->mac.ops.check_mng_mode(hw))) + device_wakeup_enable(&pdev->dev); /* save off EEPROM version number */ e1000_read_nvm(&adapter->hw, 5, 1, &adapter->eeprom_vers); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.c @@ -108,9 +108,8 @@ /* Enable arbiter */ reg &= ~IXGBE_DPMCS_ARBDIS; - /* Enable DFP and Recycle mode */ - reg |= (IXGBE_DPMCS_TDPAC | IXGBE_DPMCS_TRM); reg |= IXGBE_DPMCS_TSOEF; + /* Configure Max TSO packet size 34KB including payload and headers */ reg |= (0x4 << IXGBE_DPMCS_MTSOS_SHIFT); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -2407,6 +2407,16 @@ * with the write to EICR. */ eicr = IXGBE_READ_REG(hw, IXGBE_EICS); + + /* The lower 16bits of the EICR register are for the queue interrupts + * which should be masked here in order to not accidently clear them if + * the bits are high when ixgbe_msix_other is called. There is a race + * condition otherwise which results in possible performance loss + * especially if the ixgbe_msix_other interrupt is triggering + * consistently (as it would when PPS is turned on for the X540 device) + */ + eicr &= 0xFFFF0000; + IXGBE_WRITE_REG(hw, IXGBE_EICR, eicr); if (eicr & IXGBE_EICR_LSC) @@ -7858,12 +7868,19 @@ ixgbe_dbg_init(); #endif /* CONFIG_DEBUG_FS */ + ret = pci_register_driver(&ixgbe_driver); + if (ret) { +#ifdef CONFIG_DEBUG_FS + ixgbe_dbg_exit(); +#endif /* CONFIG_DEBUG_FS */ + return ret; + } + #ifdef CONFIG_IXGBE_DCA dca_register_notify(&dca_notifier); #endif - ret = pci_register_driver(&ixgbe_driver); - return ret; + return 0; } module_init(ixgbe_init_module); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/intel/e1000/e1000_main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/intel/e1000/e1000_main.c @@ -187,6 +187,10 @@ MODULE_PARM_DESC(copybreak, "Maximum size of packet that is copied to a new buffer on receive"); +static int eeprom_bad_csum_allow __read_mostly = 0; +module_param(eeprom_bad_csum_allow, int, 0); +MODULE_PARM_DESC(eeprom_bad_csum_allow, "Allow bad EEPROM checksums"); + static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev, pci_channel_state_t state); static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev); @@ -1103,8 +1107,8 @@ e1000_reset_hw(hw); - /* make sure the EEPROM is good */ - if (e1000_validate_eeprom_checksum(hw) < 0) { + /* make sure the EEPROM is good, skip if eeprom_bad_csum_allow is 1 */ + if ((e1000_validate_eeprom_checksum(hw) < 0) && (!eeprom_bad_csum_allow)) { e_err(probe, "The EEPROM Checksum Is Not Valid\n"); e1000_dump_eeprom(adapter); /* --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c @@ -1726,9 +1726,9 @@ skb->protocol = eth_type_trans(skb, netdev); if (tcp_ip_status & PCH_GBE_RXD_ACC_STAT_TCPIPOK) - skb->ip_summed = CHECKSUM_NONE; - else skb->ip_summed = CHECKSUM_UNNECESSARY; + else + skb->ip_summed = CHECKSUM_NONE; napi_gro_receive(&adapter->napi, skb); (*work_done)++; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/davicom/dm9000.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/davicom/dm9000.c @@ -257,6 +257,107 @@ tmp = readl(reg); } +/* + * Sleep, either by using msleep() or if we are suspending, then + * use mdelay() to sleep. + */ +static void dm9000_msleep(board_info_t *db, unsigned int ms) +{ + if (db->in_suspend) + mdelay(ms); + else + msleep(ms); +} + +/* Read a word from phyxcer */ +static int +dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg) +{ + board_info_t *db = netdev_priv(dev); + unsigned long flags; + unsigned int reg_save; + int ret; + + mutex_lock(&db->addr_lock); + + spin_lock_irqsave(&db->lock, flags); + + /* Save previous register address */ + reg_save = readb(db->io_addr); + + /* Fill the phyxcer register into REG_0C */ + iow(db, DM9000_EPAR, DM9000_PHY | reg); + + /* Issue phyxcer read command */ + iow(db, DM9000_EPCR, EPCR_ERPRR | EPCR_EPOS); + + writeb(reg_save, db->io_addr); + spin_unlock_irqrestore(&db->lock, flags); + + dm9000_msleep(db, 1); /* Wait read complete */ + + spin_lock_irqsave(&db->lock, flags); + reg_save = readb(db->io_addr); + + iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer read command */ + + /* The read data keeps on REG_0D & REG_0E */ + ret = (ior(db, DM9000_EPDRH) << 8) | ior(db, DM9000_EPDRL); + + /* restore the previous address */ + writeb(reg_save, db->io_addr); + spin_unlock_irqrestore(&db->lock, flags); + + mutex_unlock(&db->addr_lock); + + dm9000_dbg(db, 5, "phy_read[%02x] -> %04x\n", reg, ret); + return ret; +} + +/* Write a word to phyxcer */ +static void +dm9000_phy_write(struct net_device *dev, + int phyaddr_unused, int reg, int value) +{ + board_info_t *db = netdev_priv(dev); + unsigned long flags; + unsigned long reg_save; + + dm9000_dbg(db, 5, "phy_write[%02x] = %04x\n", reg, value); + mutex_lock(&db->addr_lock); + + spin_lock_irqsave(&db->lock, flags); + + /* Save previous register address */ + reg_save = readb(db->io_addr); + + /* Fill the phyxcer register into REG_0C */ + iow(db, DM9000_EPAR, DM9000_PHY | reg); + + /* Fill the written data into REG_0D & REG_0E */ + iow(db, DM9000_EPDRL, value); + iow(db, DM9000_EPDRH, value >> 8); + + /* Issue phyxcer write command */ + iow(db, DM9000_EPCR, EPCR_EPOS | EPCR_ERPRW); + + writeb(reg_save, db->io_addr); + spin_unlock_irqrestore(&db->lock, flags); + + dm9000_msleep(db, 1); /* Wait write complete */ + + spin_lock_irqsave(&db->lock, flags); + reg_save = readb(db->io_addr); + + iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer write command */ + + /* restore the previous address */ + writeb(reg_save, db->io_addr); + + spin_unlock_irqrestore(&db->lock, flags); + mutex_unlock(&db->addr_lock); +} + /* dm9000_set_io * * select the specified set of io routines to use with the @@ -794,6 +895,9 @@ iow(db, DM9000_GPCR, GPCR_GEP_CNTL); /* Let GPIO0 output */ + dm9000_phy_write(dev, 0, MII_BMCR, BMCR_RESET); /* PHY RESET */ + dm9000_phy_write(dev, 0, MII_DM_DSPCR, DSPCR_INIT_PARAM); /* Init */ + ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0; /* if wol is needed, then always set NCR_WAKEEN otherwise we end @@ -1200,109 +1304,6 @@ return 0; } -/* - * Sleep, either by using msleep() or if we are suspending, then - * use mdelay() to sleep. - */ -static void dm9000_msleep(board_info_t *db, unsigned int ms) -{ - if (db->in_suspend) - mdelay(ms); - else - msleep(ms); -} - -/* - * Read a word from phyxcer - */ -static int -dm9000_phy_read(struct net_device *dev, int phy_reg_unused, int reg) -{ - board_info_t *db = netdev_priv(dev); - unsigned long flags; - unsigned int reg_save; - int ret; - - mutex_lock(&db->addr_lock); - - spin_lock_irqsave(&db->lock,flags); - - /* Save previous register address */ - reg_save = readb(db->io_addr); - - /* Fill the phyxcer register into REG_0C */ - iow(db, DM9000_EPAR, DM9000_PHY | reg); - - iow(db, DM9000_EPCR, EPCR_ERPRR | EPCR_EPOS); /* Issue phyxcer read command */ - - writeb(reg_save, db->io_addr); - spin_unlock_irqrestore(&db->lock,flags); - - dm9000_msleep(db, 1); /* Wait read complete */ - - spin_lock_irqsave(&db->lock,flags); - reg_save = readb(db->io_addr); - - iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer read command */ - - /* The read data keeps on REG_0D & REG_0E */ - ret = (ior(db, DM9000_EPDRH) << 8) | ior(db, DM9000_EPDRL); - - /* restore the previous address */ - writeb(reg_save, db->io_addr); - spin_unlock_irqrestore(&db->lock,flags); - - mutex_unlock(&db->addr_lock); - - dm9000_dbg(db, 5, "phy_read[%02x] -> %04x\n", reg, ret); - return ret; -} - -/* - * Write a word to phyxcer - */ -static void -dm9000_phy_write(struct net_device *dev, - int phyaddr_unused, int reg, int value) -{ - board_info_t *db = netdev_priv(dev); - unsigned long flags; - unsigned long reg_save; - - dm9000_dbg(db, 5, "phy_write[%02x] = %04x\n", reg, value); - mutex_lock(&db->addr_lock); - - spin_lock_irqsave(&db->lock,flags); - - /* Save previous register address */ - reg_save = readb(db->io_addr); - - /* Fill the phyxcer register into REG_0C */ - iow(db, DM9000_EPAR, DM9000_PHY | reg); - - /* Fill the written data into REG_0D & REG_0E */ - iow(db, DM9000_EPDRL, value); - iow(db, DM9000_EPDRH, value >> 8); - - iow(db, DM9000_EPCR, EPCR_EPOS | EPCR_ERPRW); /* Issue phyxcer write command */ - - writeb(reg_save, db->io_addr); - spin_unlock_irqrestore(&db->lock, flags); - - dm9000_msleep(db, 1); /* Wait write complete */ - - spin_lock_irqsave(&db->lock,flags); - reg_save = readb(db->io_addr); - - iow(db, DM9000_EPCR, 0x0); /* Clear phyxcer write command */ - - /* restore the previous address */ - writeb(reg_save, db->io_addr); - - spin_unlock_irqrestore(&db->lock, flags); - mutex_unlock(&db->addr_lock); -} - static void dm9000_shutdown(struct net_device *dev) { @@ -1501,7 +1502,12 @@ db->flags |= DM9000_PLATF_SIMPLE_PHY; #endif - dm9000_reset(db); + /* Fixing bug on dm9000_probe, takeover dm9000_reset(db), + * Need 'NCR_MAC_LBK' bit to indeed stable our DM9000 fifo + * while probe stage. + */ + + iow(db, DM9000_NCR, NCR_MAC_LBK | NCR_RST); /* try multiple times, DM9000 sometimes gets the read wrong */ for (i = 0; i < 8; i++) { --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/davicom/dm9000.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/davicom/dm9000.h @@ -69,7 +69,9 @@ #define NCR_WAKEEN (1<<6) #define NCR_FCOL (1<<4) #define NCR_FDX (1<<3) -#define NCR_LBK (3<<1) + +#define NCR_RESERVED (3<<1) +#define NCR_MAC_LBK (1<<1) #define NCR_RST (1<<0) #define NSR_SPEED (1<<7) @@ -167,5 +169,12 @@ #define ISR_LNKCHNG (1<<5) #define ISR_UNDERRUN (1<<4) +/* Davicom MII registers. + */ + +#define MII_DM_DSPCR 0x1b /* DSP Control Register */ + +#define DSPCR_INIT_PARAM 0xE100 /* DSP init parameter */ + #endif /* _DM9000X_H_ */ --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/ibm/ibmveth.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/ibm/ibmveth.c @@ -1326,7 +1326,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id) { - int rc, i; + int rc, i, mac_len; struct net_device *netdev; struct ibmveth_adapter *adapter; unsigned char *mac_addr_p; @@ -1336,11 +1336,19 @@ dev->unit_address); mac_addr_p = (unsigned char *)vio_get_attribute(dev, VETH_MAC_ADDR, - NULL); + &mac_len); if (!mac_addr_p) { dev_err(&dev->dev, "Can't find VETH_MAC_ADDR attribute\n"); return -EINVAL; } + /* Workaround for old/broken pHyp */ + if (mac_len == 8) + mac_addr_p += 2; + else if (mac_len != 6) { + dev_err(&dev->dev, "VETH_MAC_ADDR attribute wrong len %d\n", + mac_len); + return -EINVAL; + } mcastFilterSize_p = (unsigned int *)vio_get_attribute(dev, VETH_MCAST_FILTER_SIZE, NULL); @@ -1365,17 +1373,6 @@ netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16); - /* - * Some older boxes running PHYP non-natively have an OF that returns - * a 8-byte local-mac-address field (and the first 2 bytes have to be - * ignored) while newer boxes' OF return a 6-byte field. Note that - * IEEE 1275 specifies that local-mac-address must be a 6-byte field. - * The RPA doc specifies that the first byte must be 10b, so we'll - * just look for it to solve this 8 vs. 6 byte field issue - */ - if ((*mac_addr_p & 0x3) != 0x02) - mac_addr_p += 2; - adapter->mac_addr = 0; memcpy(&adapter->mac_addr, mac_addr_p, 6); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/broadcom/tg3.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/broadcom/tg3.h @@ -65,6 +65,9 @@ #define TG3PCI_DEVICE_TIGON3_57766 0x1686 #define TG3PCI_DEVICE_TIGON3_57786 0x16b3 #define TG3PCI_DEVICE_TIGON3_57782 0x16b7 +#define TG3PCI_DEVICE_TIGON3_5762 0x1687 +#define TG3PCI_DEVICE_TIGON3_5725 0x1643 +#define TG3PCI_DEVICE_TIGON3_5727 0x16f3 /* 0x04 --> 0x2c unused */ #define TG3PCI_SUBVENDOR_ID_BROADCOM PCI_VENDOR_ID_BROADCOM #define TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6 0x1644 @@ -159,6 +162,7 @@ #define CHIPREV_ID_57765_A0 0x57785000 #define CHIPREV_ID_5719_A0 0x05719000 #define CHIPREV_ID_5720_A0 0x05720000 +#define CHIPREV_ID_5762_A0 0x05762000 #define GET_ASIC_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 12) #define ASIC_REV_5700 0x07 #define ASIC_REV_5701 0x00 @@ -182,6 +186,7 @@ #define ASIC_REV_5719 0x5719 #define ASIC_REV_5720 0x5720 #define ASIC_REV_57766 0x57766 +#define ASIC_REV_5762 0x5762 #define GET_CHIP_REV(CHIP_REV_ID) ((CHIP_REV_ID) >> 8) #define CHIPREV_5700_AX 0x70 #define CHIPREV_5700_BX 0x71 @@ -1159,6 +1164,8 @@ #define CPMU_MUTEX_GNT_DRIVER 0x00001000 #define TG3_CPMU_PHY_STRAP 0x00003664 #define TG3_CPMU_PHY_STRAP_IS_SERDES 0x00000020 +#define TG3_CPMU_PADRNG_CTL 0x00003668 +#define TG3_CPMU_PADRNG_CTL_RDIV2 0x00040000 /* 0x3664 --> 0x36b0 unused */ #define TG3_CPMU_EEE_MODE 0x000036b0 @@ -1178,6 +1185,7 @@ #define TG3_CPMU_EEE_LNKIDL_CTRL 0x000036bc #define TG3_CPMU_EEE_LNKIDL_PCIE_NL0 0x01000000 #define TG3_CPMU_EEE_LNKIDL_UART_IDL 0x00000004 +#define TG3_CPMU_EEE_LNKIDL_APE_TX_MT 0x00000002 /* 0x36c0 --> 0x36d0 unused */ #define TG3_CPMU_EEE_CTRL 0x000036d0 @@ -1400,7 +1408,10 @@ #define RDMAC_STATUS_FIFOURUN 0x00000080 #define RDMAC_STATUS_FIFOOREAD 0x00000100 #define RDMAC_STATUS_LNGREAD 0x00000200 -/* 0x4808 --> 0x4900 unused */ +/* 0x4808 --> 0x4890 unused */ + +#define TG3_RDMA_RSRVCTRL_REG2 0x00004890 +#define TG3_LSO_RD_DMA_CRPTEN_CTRL2 0x000048a0 #define TG3_RDMA_RSRVCTRL_REG 0x00004900 #define TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX 0x00000004 @@ -1415,7 +1426,8 @@ #define TG3_LSO_RD_DMA_CRPTEN_CTRL 0x00004910 #define TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K 0x00030000 #define TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K 0x000c0000 -#define TG3_LSO_RD_DMA_TX_LENGTH_WA 0x02000000 +#define TG3_LSO_RD_DMA_TX_LENGTH_WA_5719 0x02000000 +#define TG3_LSO_RD_DMA_TX_LENGTH_WA_5720 0x00200000 /* 0x4914 --> 0x4be0 unused */ #define TG3_NUM_RDMA_CHANNELS 4 @@ -1850,6 +1862,7 @@ #define FLASH_VENDOR_SST_SMALL 0x00000001 #define FLASH_VENDOR_SST_LARGE 0x02000001 #define NVRAM_CFG1_5752VENDOR_MASK 0x03c00003 +#define NVRAM_CFG1_5762VENDOR_MASK 0x03e00003 #define FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ 0x00000000 #define FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ 0x02000000 #define FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED 0x02000003 @@ -1910,6 +1923,8 @@ #define FLASH_5717VENDOR_ST_45USPT 0x03400001 #define FLASH_5720_EEPROM_HD 0x00000001 #define FLASH_5720_EEPROM_LD 0x00000003 +#define FLASH_5762_EEPROM_HD 0x02000001 +#define FLASH_5762_EEPROM_LD 0x02000003 #define FLASH_5720VENDOR_M_ATMEL_DB011D 0x01000000 #define FLASH_5720VENDOR_M_ATMEL_DB021D 0x01000002 #define FLASH_5720VENDOR_M_ATMEL_DB041D 0x01000001 @@ -2365,6 +2380,20 @@ #define APE_LOCK_REQ_DRIVER 0x00001000 #define TG3_APE_LOCK_GRANT 0x004c #define APE_LOCK_GRANT_DRIVER 0x00001000 +#define TG3_APE_OTP_CTRL 0x00e8 +#define APE_OTP_CTRL_PROG_EN 0x200000 +#define APE_OTP_CTRL_CMD_RD 0x000000 +#define APE_OTP_CTRL_START 0x000001 +#define TG3_APE_OTP_STATUS 0x00ec +#define APE_OTP_STATUS_CMD_DONE 0x000001 +#define TG3_APE_OTP_ADDR 0x00f0 +#define APE_OTP_ADDR_CPU_ENABLE 0x80000000 +#define TG3_APE_OTP_RD_DATA 0x00f8 + +#define OTP_ADDRESS_MAGIC0 0x00000050 +#define TG3_OTP_MAGIC0_VALID(val) \ + ((((val) & 0xf0000000) == 0xa0000000) ||\ + (((val) & 0x0f000000) == 0x0a000000)) /* APE shared memory. Accessible through BAR1 */ #define TG3_APE_SHMEM_BASE 0x4000 @@ -3019,7 +3048,7 @@ TG3_FLAG_APE_HAS_NCSI, TG3_FLAG_TX_TSTAMP_EN, TG3_FLAG_4K_FIFO_LIMIT, - TG3_FLAG_5719_RDMA_BUG, + TG3_FLAG_5719_5720_RDMA_BUG, TG3_FLAG_RESET_TASK_PENDING, TG3_FLAG_PTP_CAPABLE, TG3_FLAG_5705_PLUS, @@ -3206,6 +3235,7 @@ #define TG3_PHY_ID_BCM57765 0x5c0d8a40 #define TG3_PHY_ID_BCM5719C 0x5c0d8a20 #define TG3_PHY_ID_BCM5720C 0x5c0d8b60 +#define TG3_PHY_ID_BCM5762 0x85803780 #define TG3_PHY_ID_BCM5906 0xdc00ac40 #define TG3_PHY_ID_BCM8002 0x60010140 #define TG3_PHY_ID_INVALID 0xffffffff @@ -3230,6 +3260,7 @@ (X) == TG3_PHY_ID_BCM5906 || (X) == TG3_PHY_ID_BCM5761 || \ (X) == TG3_PHY_ID_BCM5718C || (X) == TG3_PHY_ID_BCM5718S || \ (X) == TG3_PHY_ID_BCM57765 || (X) == TG3_PHY_ID_BCM5719C || \ + (X) == TG3_PHY_ID_BCM5720C || (X) == TG3_PHY_ID_BCM5762 || \ (X) == TG3_PHY_ID_BCM8002) u32 phy_flags; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/broadcom/tg3.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/broadcom/tg3.c @@ -330,6 +330,10 @@ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, + {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)}, + {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)}, + {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)}, + {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)}, {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, @@ -1778,6 +1782,9 @@ int i; u32 val; + if (tg3_flag(tp, NO_FWARE_REPORTED)) + return 0; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { /* Wait up to 20ms for init done. */ for (i = 0; i < 200; i++) { @@ -1843,6 +1850,8 @@ tg3_ump_link_report(tp); } + + tp->link_up = netif_carrier_ok(tp->dev); } static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) @@ -2496,12 +2505,6 @@ return err; } -static void tg3_carrier_on(struct tg3 *tp) -{ - netif_carrier_on(tp->dev); - tp->link_up = true; -} - static void tg3_carrier_off(struct tg3 *tp) { netif_carrier_off(tp->dev); @@ -2527,7 +2530,7 @@ return -EBUSY; if (netif_running(tp->dev) && tp->link_up) { - tg3_carrier_off(tp); + netif_carrier_off(tp->dev); tg3_link_report(tp); } @@ -2644,6 +2647,9 @@ tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); } + if (tp->pci_chip_rev_id == CHIPREV_ID_5762_A0) + tg3_phydsp_write(tp, 0xffb, 0x4000); + tg3_phy_toggle_automdix(tp, 1); tg3_phy_set_wirespeed(tp); return 0; @@ -2896,6 +2902,45 @@ return 0; } +static bool tg3_phy_power_bug(struct tg3 *tp) +{ + switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { + case ASIC_REV_5700: + case ASIC_REV_5704: + return true; + case ASIC_REV_5780: + if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) + return true; + return false; + case ASIC_REV_5717: + if (!tp->pci_fn) + return true; + return false; + case ASIC_REV_5719: + case ASIC_REV_5720: + if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && + !tp->pci_fn) + return true; + return false; + } + + return false; +} + +static bool tg3_phy_led_bug(struct tg3 *tp) +{ + switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { + case ASIC_REV_5719: + case ASIC_REV_5720: + if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && + !tp->pci_fn) + return true; + return false; + } + + return false; +} + static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) { u32 val; @@ -2940,8 +2985,9 @@ } return; } else if (do_low_power) { - tg3_writephy(tp, MII_TG3_EXT_CTRL, - MII_TG3_EXT_CTRL_FORCE_LED_OFF); + if (!tg3_phy_led_bug(tp)) + tg3_writephy(tp, MII_TG3_EXT_CTRL, + MII_TG3_EXT_CTRL_FORCE_LED_OFF); val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | @@ -2952,12 +2998,7 @@ /* The PHY should not be powered down on some chips because * of bugs. */ - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || - (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 && - (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) || - (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && - !tp->pci_fn)) + if (tg3_phy_power_bug(tp)) return; if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || @@ -4049,6 +4090,7 @@ tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); /* Fall through */ case ASIC_REV_5720: + case ASIC_REV_5762: if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | MII_TG3_DSP_CH34TP2_HIBW01); @@ -4097,6 +4139,14 @@ tp->link_config.active_speed = tp->link_config.speed; tp->link_config.active_duplex = tp->link_config.duplex; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { + /* With autoneg disabled, 5715 only links up when the + * advertisement register has the configured speed + * enabled. + */ + tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL); + } + bmcr = 0; switch (tp->link_config.speed) { default: @@ -4225,9 +4275,9 @@ { if (curr_link_up != tp->link_up) { if (curr_link_up) { - tg3_carrier_on(tp); + netif_carrier_on(tp->dev); } else { - tg3_carrier_off(tp); + netif_carrier_off(tp->dev); if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; } @@ -5496,7 +5546,8 @@ val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | (6 << TX_LENGTHS_IPG_SHIFT); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) val |= tr32(MAC_TX_LENGTHS) & (TX_LENGTHS_JMB_FRM_LEN_MSK | TX_LENGTHS_CNT_DWN_VAL_MSK); @@ -6990,6 +7041,20 @@ return (base > 0xffffdcc0) && (base + len + 8 < base); } +/* Test for TSO DMA buffers that cross into regions which are within MSS bytes + * of any 4GB boundaries: 4G, 8G, etc + */ +static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping, + u32 len, u32 mss) +{ + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762 && mss) { + u32 base = (u32) mapping & 0xffffffff; + + return ((base + len + (mss & 0x3fff)) < base); + } + return 0; +} + /* Test for DMA addresses > 40-bit */ static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, int len) @@ -7026,6 +7091,9 @@ if (tg3_4g_overflow_test(map, len)) hwbug = true; + if (tg3_4g_tso_overflow_test(tp, map, len, mss)) + hwbug = true; + if (tg3_40bit_overflow_test(tp, map, len)) hwbug = true; @@ -8687,7 +8755,8 @@ limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; else if (tg3_flag(tp, 5717_PLUS)) limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; - else if (tg3_flag(tp, 57765_CLASS)) + else if (tg3_flag(tp, 57765_CLASS) || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; else limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; @@ -8704,6 +8773,7 @@ else if (!tg3_flag(tp, 5705_PLUS)) limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762 || tg3_flag(tp, 57765_CLASS)) limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; else @@ -8976,6 +9046,14 @@ } } +static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp) +{ + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) + return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719; + else + return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720; +} + /* tp->lock is held. */ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) { @@ -8994,9 +9072,12 @@ /* Enable MAC control of LPI */ if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { - tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, - TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | - TG3_CPMU_EEE_LNKIDL_UART_IDL); + val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | + TG3_CPMU_EEE_LNKIDL_UART_IDL; + if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) + val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT; + + tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val); tw32_f(TG3_CPMU_EEE_CTRL, TG3_CPMU_EEE_CTRL_EXIT_20_1_US); @@ -9099,7 +9180,14 @@ } if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) { - u32 grc_mode = tr32(GRC_MODE); + u32 grc_mode; + + /* Fix transmit hangs */ + val = tr32(TG3_CPMU_PADRNG_CTL); + val |= TG3_CPMU_PADRNG_CTL_RDIV2; + tw32(TG3_CPMU_PADRNG_CTL, val); + + grc_mode = tr32(GRC_MODE); /* Access the lower 1K of DL PCIE block registers. */ val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; @@ -9171,7 +9259,8 @@ if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; if (!tg3_flag(tp, 57765_CLASS) && - GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && + GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5762) val |= DMA_RWCTRL_TAGGED_STAT_WA; tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && @@ -9323,7 +9412,8 @@ tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, val | BDINFO_FLAGS_USE_EXT_RECV); if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || - tg3_flag(tp, 57765_CLASS)) + tg3_flag(tp, 57765_CLASS) || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, NIC_SRAM_RX_JUMBO_BUFFER_DESC); } else { @@ -9365,7 +9455,8 @@ (6 << TX_LENGTHS_IPG_SHIFT) | (32 << TX_LENGTHS_SLOT_TIME_SHIFT); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) val |= tr32(MAC_TX_LENGTHS) & (TX_LENGTHS_JMB_FRM_LEN_MSK | TX_LENGTHS_CNT_DWN_VAL_MSK); @@ -9409,6 +9500,14 @@ if (tg3_flag(tp, PCI_EXPRESS)) rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) { + tp->dma_limit = 0; + if (tp->dev->mtu <= ETH_DATA_LEN) { + rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR; + tp->dma_limit = TG3_TX_BD_DMA_MAX_2K; + } + } + if (tg3_flag(tp, HW_TSO_1) || tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) @@ -9419,7 +9518,8 @@ GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || @@ -9427,8 +9527,16 @@ GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || tg3_flag(tp, 57765_PLUS)) { - val = tr32(TG3_RDMA_RSRVCTRL_REG); - if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) { + u32 tgtreg; + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) + tgtreg = TG3_RDMA_RSRVCTRL_REG2; + else + tgtreg = TG3_RDMA_RSRVCTRL_REG; + + val = tr32(tgtreg); + if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); @@ -9436,14 +9544,21 @@ TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; } - tw32(TG3_RDMA_RSRVCTRL_REG, - val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); + tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); } if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { - val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); - tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val | + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { + u32 tgtreg; + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) + tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2; + else + tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL; + + val = tr32(tgtreg); + tw32(tgtreg, val | TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); } @@ -9618,16 +9733,17 @@ tw32_f(RDMAC_MODE, rdmac_mode); udelay(40); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) break; } if (i < TG3_NUM_RDMA_CHANNELS) { val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); - val |= TG3_LSO_RD_DMA_TX_LENGTH_WA; + val |= tg3_lso_rd_dma_workaround_bit(tp); tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); - tg3_flag_set(tp, 5719_RDMA_BUG); + tg3_flag_set(tp, 5719_5720_RDMA_BUG); } } @@ -9676,7 +9792,8 @@ GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; tp->tx_mode &= ~val; tp->tx_mode |= tr32(MAC_TX_MODE) & val; @@ -9852,6 +9969,13 @@ */ static int tg3_init_hw(struct tg3 *tp, int reset_phy) { + /* Chip may have been just powered on. If so, the boot code may still + * be running initialization. Wait for it to finish to avoid races in + * accessing the hardware. + */ + tg3_enable_register_access(tp); + tg3_poll_fw(tp); + tg3_switch_clocks(tp); tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); @@ -9983,15 +10107,15 @@ TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); - if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) && + if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) && (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { u32 val; val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); - val &= ~TG3_LSO_RD_DMA_TX_LENGTH_WA; + val &= ~tg3_lso_rd_dma_workaround_bit(tp); tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); - tg3_flag_clear(tp, 5719_RDMA_BUG); + tg3_flag_clear(tp, 5719_5720_RDMA_BUG); } TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); @@ -12357,7 +12481,8 @@ if (tg3_flag(tp, 5717_PLUS)) mem_tbl = mem_tbl_5717; - else if (tg3_flag(tp, 57765_CLASS)) + else if (tg3_flag(tp, 57765_CLASS) || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) mem_tbl = mem_tbl_57765; else if (tg3_flag(tp, 5755_PLUS)) mem_tbl = mem_tbl_5755; @@ -13698,6 +13823,22 @@ nvcfg1 = tr32(NVRAM_CFG1); nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { + if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) { + tg3_flag_set(tp, NO_NVRAM); + return; + } + + switch (nvmpinstrp) { + case FLASH_5762_EEPROM_HD: + nvmpinstrp = FLASH_5720_EEPROM_HD; + break; + case FLASH_5762_EEPROM_LD: + nvmpinstrp = FLASH_5720_EEPROM_LD; + break; + } + } + switch (nvmpinstrp) { case FLASH_5720_EEPROM_HD: case FLASH_5720_EEPROM_LD: @@ -13743,7 +13884,8 @@ tp->nvram_size = TG3_NVRAM_SIZE_1MB; break; default: - tp->nvram_size = TG3_NVRAM_SIZE_128KB; + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5762) + tp->nvram_size = TG3_NVRAM_SIZE_128KB; break; } break; @@ -13789,7 +13931,8 @@ tp->nvram_size = TG3_NVRAM_SIZE_1MB; break; default: - tp->nvram_size = TG3_NVRAM_SIZE_128KB; + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5762) + tp->nvram_size = TG3_NVRAM_SIZE_128KB; break; } break; @@ -13801,6 +13944,17 @@ tg3_nvram_get_pagesize(tp, nvcfg1); if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); + + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) { + u32 val; + + if (tg3_nvram_read(tp, 0, &val)) + return; + + if (val != TG3_EEPROM_MAGIC && + (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) + tg3_flag_set(tp, NO_NVRAM); + } } /* Chips other than 5700/5701 use the NVRAM for fetching info. */ @@ -13850,7 +14004,8 @@ else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) tg3_get_5717_nvram_info(tp); - else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) tg3_get_5720_nvram_info(tp); else tg3_get_nvram_info(tp); @@ -14152,6 +14307,39 @@ device_set_wakeup_capable(&tp->pdev->dev, false); } +static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val) +{ + int i, err; + u32 val2, off = offset * 8; + + err = tg3_nvram_lock(tp); + if (err) + return err; + + tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE); + tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN | + APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START); + tg3_ape_read32(tp, TG3_APE_OTP_CTRL); + udelay(10); + + for (i = 0; i < 100; i++) { + val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS); + if (val2 & APE_OTP_STATUS_CMD_DONE) { + *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA); + break; + } + udelay(10); + } + + tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0); + + tg3_nvram_unlock(tp); + if (val2 & APE_OTP_STATUS_CMD_DONE) + return 0; + + return -EBUSY; +} + static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) { int i; @@ -14311,6 +14499,7 @@ if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762 || (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && @@ -14399,8 +14588,11 @@ if (j + len > block_end) goto partno; - memcpy(tp->fw_ver, &vpd_data[j], len); - strncat(tp->fw_ver, " bc ", vpdlen - len - 1); + if (len >= sizeof(tp->fw_ver)) + len = sizeof(tp->fw_ver) - 1; + memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); + snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, + &vpd_data[j]); } partno: @@ -14691,6 +14883,8 @@ if (tg3_flag(tp, APE_HAS_NCSI)) fwtype = "NCSI"; + else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725) + fwtype = "SMASH"; else fwtype = "DASH"; @@ -14704,6 +14898,31 @@ (apedata & APE_FW_VERSION_BLDMSK)); } +static void tg3_read_otp_ver(struct tg3 *tp) +{ + u32 val, val2; + + if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5762) + return; + + if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) && + !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) && + TG3_OTP_MAGIC0_VALID(val)) { + u64 val64 = (u64) val << 32 | val2; + u32 ver = 0; + int i, vlen; + + for (i = 0; i < 7; i++) { + if ((val64 & 0xff) == 0) + break; + ver = val64 & 0xff; + val64 >>= 8; + } + vlen = strlen(tp->fw_ver); + snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver); + } +} + static void tg3_read_fw_ver(struct tg3 *tp) { u32 val; @@ -14714,6 +14933,7 @@ if (tg3_flag(tp, NO_NVRAM)) { strcat(tp->fw_ver, "sb"); + tg3_read_otp_ver(tp); return; } @@ -14800,7 +15020,10 @@ tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || - tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727) reg = TG3PCI_GEN2_PRODID_ASICREV; else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || @@ -14837,7 +15060,8 @@ GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) tg3_flag_set(tp, 57765_CLASS); - if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS)) + if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) tg3_flag_set(tp, 57765_PLUS); /* Intentionally exclude ASIC_REV_5906 */ @@ -15128,7 +15352,8 @@ if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) tg3_flag_set(tp, LRG_PROD_RING_CAP); if (tg3_flag(tp, 57765_PLUS) && @@ -15406,6 +15631,10 @@ GRC_LCLCTRL_GPIO_OUTPUT0; } + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) + tp->grc_local_ctrl |= + tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL; + /* Switch out of Vaux if it is a NIC */ tg3_pwrsrc_switch_to_vmain(tp); @@ -15496,7 +15725,8 @@ /* Initialize data/descriptor byte/word swapping. */ val = tr32(GRC_MODE); - if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | GRC_MODE_WORD_SWAP_B2HRX_DATA | GRC_MODE_B2HRX_ENABLE | @@ -16253,6 +16483,7 @@ case TG3_PHY_ID_BCM57765: return "57765"; case TG3_PHY_ID_BCM5719C: return "5719C"; case TG3_PHY_ID_BCM5720C: return "5720C"; + case TG3_PHY_ID_BCM5762: return "5762C"; case TG3_PHY_ID_BCM8002: return "8002/serdes"; case 0: return "serdes"; default: return "unknown"; @@ -16429,7 +16660,10 @@ tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || - tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) { + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 || + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 || + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 || + tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727) { tg3_flag_set(tp, ENABLE_APE); tp->aperegs = pci_ioremap_bar(pdev, BAR_2); if (!tp->aperegs) { @@ -16624,7 +16858,8 @@ pci_set_drvdata(pdev, dev); if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || - GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || + GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5762) tg3_flag_set(tp, PTP_CAPABLE); if (tg3_flag(tp, 5717_PLUS)) { --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h @@ -456,8 +456,9 @@ #define UPDATE_QSTAT(s, t) \ do { \ - qstats->t##_hi = qstats_old->t##_hi + le32_to_cpu(s.hi); \ qstats->t##_lo = qstats_old->t##_lo + le32_to_cpu(s.lo); \ + qstats->t##_hi = qstats_old->t##_hi + le32_to_cpu(s.hi) \ + + ((qstats->t##_lo < qstats_old->t##_lo) ? 1 : 0); \ } while (0) #define UPDATE_QSTAT_OLD(f) \ --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c @@ -2523,6 +2523,7 @@ bp->port.pmf = 0; load_error1: bnx2x_napi_disable(bp); + bnx2x_del_all_napi(bp); /* clear pf_load status, as it was already set */ bnx2x_clear_pf_load(bp); load_error0: --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/mellanox/mlx4/main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/mellanox/mlx4/main.c @@ -371,7 +371,7 @@ dev->caps.sqp_demux = (mlx4_is_master(dev)) ? MLX4_MAX_NUM_SLAVES : 0; - if (!enable_64b_cqe_eqe) { + if (!enable_64b_cqe_eqe && !mlx4_is_slave(dev)) { if (dev_cap->flags & (MLX4_DEV_CAP_FLAG_64B_CQE | MLX4_DEV_CAP_FLAG_64B_EQE)) { mlx4_warn(dev, "64B EQEs/CQEs supported by the device but not enabled\n"); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/mellanox/mlx4/en_netdev.c @@ -1434,12 +1434,11 @@ } #ifdef CONFIG_RFS_ACCEL - priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->rx_ring_num); - if (!priv->dev->rx_cpu_rmap) - goto err; - - INIT_LIST_HEAD(&priv->filters); - spin_lock_init(&priv->filters_lock); + if (priv->mdev->dev->caps.comp_pool) { + priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->mdev->dev->caps.comp_pool); + if (!priv->dev->rx_cpu_rmap) + goto err; + } #endif return 0; @@ -1597,7 +1596,7 @@ err = -ENOMEM; goto out; } - priv->tx_cq = kzalloc(sizeof(struct mlx4_en_cq) * MAX_RX_RINGS, + priv->tx_cq = kzalloc(sizeof(struct mlx4_en_cq) * MAX_TX_RINGS, GFP_KERNEL); if (!priv->tx_cq) { err = -ENOMEM; @@ -1634,6 +1633,11 @@ if (err) goto out; +#ifdef CONFIG_RFS_ACCEL + INIT_LIST_HEAD(&priv->filters); + spin_lock_init(&priv->filters_lock); +#endif + /* Allocate page for receive rings */ err = mlx4_alloc_hwq_res(mdev->dev, &priv->res, MLX4_EN_PAGE_SIZE, MLX4_EN_PAGE_SIZE); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/realtek/8139cp.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/realtek/8139cp.c @@ -478,7 +478,7 @@ while (1) { u32 status, len; - dma_addr_t mapping; + dma_addr_t mapping, new_mapping; struct sk_buff *skb, *new_skb; struct cp_desc *desc; const unsigned buflen = cp->rx_buf_sz; @@ -520,6 +520,14 @@ goto rx_next; } + new_mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen, + PCI_DMA_FROMDEVICE); + if (dma_mapping_error(&cp->pdev->dev, new_mapping)) { + dev->stats.rx_dropped++; + kfree_skb(new_skb); + goto rx_next; + } + dma_unmap_single(&cp->pdev->dev, mapping, buflen, PCI_DMA_FROMDEVICE); @@ -531,12 +539,11 @@ skb_put(skb, len); - mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen, - PCI_DMA_FROMDEVICE); cp->rx_skb[rx_tail] = new_skb; cp_rx_skb(cp, skb, desc); rx++; + mapping = new_mapping; rx_next: cp->rx_ring[rx_tail].opts2 = 0; @@ -716,6 +723,22 @@ TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00; } +static void unwind_tx_frag_mapping(struct cp_private *cp, struct sk_buff *skb, + int first, int entry_last) +{ + int frag, index; + struct cp_desc *txd; + skb_frag_t *this_frag; + for (frag = 0; frag+first < entry_last; frag++) { + index = first+frag; + cp->tx_skb[index] = NULL; + txd = &cp->tx_ring[index]; + this_frag = &skb_shinfo(skb)->frags[frag]; + dma_unmap_single(&cp->pdev->dev, le64_to_cpu(txd->addr), + skb_frag_size(this_frag), PCI_DMA_TODEVICE); + } +} + static netdev_tx_t cp_start_xmit (struct sk_buff *skb, struct net_device *dev) { @@ -749,6 +772,9 @@ len = skb->len; mapping = dma_map_single(&cp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE); + if (dma_mapping_error(&cp->pdev->dev, mapping)) + goto out_dma_error; + txd->opts2 = opts2; txd->addr = cpu_to_le64(mapping); wmb(); @@ -786,6 +812,9 @@ first_len = skb_headlen(skb); first_mapping = dma_map_single(&cp->pdev->dev, skb->data, first_len, PCI_DMA_TODEVICE); + if (dma_mapping_error(&cp->pdev->dev, first_mapping)) + goto out_dma_error; + cp->tx_skb[entry] = skb; entry = NEXT_TX(entry); @@ -799,6 +828,11 @@ mapping = dma_map_single(&cp->pdev->dev, skb_frag_address(this_frag), len, PCI_DMA_TODEVICE); + if (dma_mapping_error(&cp->pdev->dev, mapping)) { + unwind_tx_frag_mapping(cp, skb, first_entry, entry); + goto out_dma_error; + } + eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0; ctrl = eor | len | DescOwn; @@ -859,11 +893,16 @@ if (TX_BUFFS_AVAIL(cp) <= (MAX_SKB_FRAGS + 1)) netif_stop_queue(dev); +out_unlock: spin_unlock_irqrestore(&cp->lock, intr_flags); cpw8(TxPoll, NormalTxPoll); return NETDEV_TX_OK; +out_dma_error: + kfree_skb(skb); + cp->dev->stats.tx_dropped++; + goto out_unlock; } /* Set or clear the multicast filter for this adaptor. @@ -1054,6 +1093,10 @@ mapping = dma_map_single(&cp->pdev->dev, skb->data, cp->rx_buf_sz, PCI_DMA_FROMDEVICE); + if (dma_mapping_error(&cp->pdev->dev, mapping)) { + kfree_skb(skb); + goto err_out; + } cp->rx_skb[i] = skb; cp->rx_ring[i].opts2 = 0; @@ -1136,6 +1179,7 @@ cp->dev->stats.tx_dropped++; } } + netdev_reset_queue(cp->dev); memset(cp->rx_ring, 0, sizeof(struct cp_desc) * CP_RX_RING_SIZE); memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/realtek/r8169.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/realtek/r8169.c @@ -3819,6 +3819,30 @@ } } +static void rtl_speed_down(struct rtl8169_private *tp) +{ + u32 adv; + int lpa; + + rtl_writephy(tp, 0x1f, 0x0000); + lpa = rtl_readphy(tp, MII_LPA); + + if (lpa & (LPA_10HALF | LPA_10FULL)) + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full; + else if (lpa & (LPA_100HALF | LPA_100FULL)) + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | + ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full; + else + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | + ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | + (tp->mii.supports_gmii ? + ADVERTISED_1000baseT_Half | + ADVERTISED_1000baseT_Full : 0); + + rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, + adv); +} + static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) { void __iomem *ioaddr = tp->mmio_addr; @@ -3849,9 +3873,7 @@ if (!(__rtl8169_get_wol(tp) & WAKE_ANY)) return false; - rtl_writephy(tp, 0x1f, 0x0000); - rtl_writephy(tp, MII_BMCR, 0x0000); - + rtl_speed_down(tp); rtl_wol_suspend_quirk(tp); return true; @@ -4766,8 +4788,10 @@ RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); - rtl_tx_performance_tweak(pdev, - (0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN); + if (tp->dev->mtu <= ETH_DATA_LEN) { + rtl_tx_performance_tweak(pdev, (0x5 << MAX_READ_REQUEST_SHIFT) | + PCI_EXP_DEVCTL_NOSNOOP_EN); + } } static void rtl_hw_start_8168bef(struct rtl8169_private *tp) @@ -4790,7 +4814,8 @@ RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); rtl_disable_clock_request(pdev); @@ -4823,7 +4848,8 @@ RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); } @@ -4842,7 +4868,8 @@ RTL_W8(MaxTxPacketSize, TxPacketMax); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); } @@ -4902,7 +4929,8 @@ RTL_W8(MaxTxPacketSize, TxPacketMax); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); } @@ -4914,7 +4942,8 @@ rtl_csi_access_enable_1(tp); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); RTL_W8(MaxTxPacketSize, TxPacketMax); @@ -4973,7 +5002,8 @@ rtl_ephy_init(tp, e_info_8168e_1, ARRAY_SIZE(e_info_8168e_1)); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); RTL_W8(MaxTxPacketSize, TxPacketMax); @@ -4999,7 +5029,8 @@ rtl_ephy_init(tp, e_info_8168e_2, ARRAY_SIZE(e_info_8168e_2)); - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); + if (tp->dev->mtu <= ETH_DATA_LEN) + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); @@ -5717,7 +5748,20 @@ return -EIO; } -static inline void rtl8169_tso_csum(struct rtl8169_private *tp, +static bool rtl_skb_pad(struct sk_buff *skb) +{ + if (skb_padto(skb, ETH_ZLEN)) + return false; + skb_put(skb, ETH_ZLEN - skb->len); + return true; +} + +static bool rtl_test_hw_pad_bug(struct rtl8169_private *tp, struct sk_buff *skb) +{ + return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34; +} + +static inline bool rtl8169_tso_csum(struct rtl8169_private *tp, struct sk_buff *skb, u32 *opts) { const struct rtl_tx_desc_info *info = tx_desc_info + tp->txd_version; @@ -5730,13 +5774,20 @@ } else if (skb->ip_summed == CHECKSUM_PARTIAL) { const struct iphdr *ip = ip_hdr(skb); + if (unlikely(rtl_test_hw_pad_bug(tp, skb))) + return skb_checksum_help(skb) == 0 && rtl_skb_pad(skb); + if (ip->protocol == IPPROTO_TCP) opts[offset] |= info->checksum.tcp; else if (ip->protocol == IPPROTO_UDP) opts[offset] |= info->checksum.udp; else WARN_ON_ONCE(1); + } else { + if (unlikely(rtl_test_hw_pad_bug(tp, skb))) + return rtl_skb_pad(skb); } + return true; } static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, @@ -5760,6 +5811,12 @@ if (unlikely(le32_to_cpu(txd->opts1) & DescOwn)) goto err_stop_0; + opts[1] = cpu_to_le32(rtl8169_tx_vlan_tag(skb)); + opts[0] = DescOwn; + + if (!rtl8169_tso_csum(tp, skb, opts)) + goto err_update_stats; + len = skb_headlen(skb); mapping = dma_map_single(d, skb->data, len, DMA_TO_DEVICE); if (unlikely(dma_mapping_error(d, mapping))) { @@ -5771,11 +5828,6 @@ tp->tx_skb[entry].len = len; txd->addr = cpu_to_le64(mapping); - opts[1] = cpu_to_le32(rtl8169_tx_vlan_tag(skb)); - opts[0] = DescOwn; - - rtl8169_tso_csum(tp, skb, opts); - frags = rtl8169_xmit_frags(tp, skb, opts); if (frags < 0) goto err_dma_1; @@ -5828,6 +5880,7 @@ rtl8169_unmap_tx_skb(d, tp->tx_skb + entry, txd); err_dma_0: dev_kfree_skb(skb); +err_update_stats: dev->stats.tx_dropped++; return NETDEV_TX_OK; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/3com/3c59x.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/3com/3c59x.c @@ -632,7 +632,6 @@ pm_state_valid:1, /* pci_dev->saved_config_space has sane contents */ open:1, medialock:1, - must_free_region:1, /* Flag: if zero, Cardbus owns the I/O region */ large_frames:1, /* accept large frames */ handling_irq:1; /* private in_irq indicator */ /* {get|set}_wol operations are already serialized by rtnl. @@ -951,7 +950,7 @@ unregister_netdev(dev); iowrite16(TotalReset|0x14, ioaddr + EL3_CMD); - release_region(dev->base_addr, VORTEX_TOTAL_SIZE); + release_region(edev->base_addr, VORTEX_TOTAL_SIZE); free_netdev(dev); return 0; @@ -1012,6 +1011,12 @@ if (rc < 0) goto out; + rc = pci_request_regions(pdev, DRV_NAME); + if (rc < 0) { + pci_disable_device(pdev); + goto out; + } + unit = vortex_cards_found; if (global_use_mmio < 0 && (unit >= MAX_UNITS || use_mmio[unit] < 0)) { @@ -1027,6 +1032,7 @@ if (!ioaddr) /* If mapping fails, fall-back to BAR 0... */ ioaddr = pci_iomap(pdev, 0, 0); if (!ioaddr) { + pci_release_regions(pdev); pci_disable_device(pdev); rc = -ENOMEM; goto out; @@ -1036,6 +1042,7 @@ ent->driver_data, unit); if (rc < 0) { pci_iounmap(pdev, ioaddr); + pci_release_regions(pdev); pci_disable_device(pdev); goto out; } @@ -1178,11 +1185,6 @@ /* PCI-only startup logic */ if (pdev) { - /* EISA resources already marked, so only PCI needs to do this here */ - /* Ignore return value, because Cardbus drivers already allocate for us */ - if (request_region(dev->base_addr, vci->io_size, print_name) != NULL) - vp->must_free_region = 1; - /* enable bus-mastering if necessary */ if (vci->flags & PCI_USES_MASTER) pci_set_master(pdev); @@ -1220,7 +1222,7 @@ &vp->rx_ring_dma); retval = -ENOMEM; if (!vp->rx_ring) - goto free_region; + goto free_device; vp->tx_ring = (struct boom_tx_desc *)(vp->rx_ring + RX_RING_SIZE); vp->tx_ring_dma = vp->rx_ring_dma + sizeof(struct boom_rx_desc) * RX_RING_SIZE; @@ -1485,9 +1487,7 @@ + sizeof(struct boom_tx_desc) * TX_RING_SIZE, vp->rx_ring, vp->rx_ring_dma); -free_region: - if (vp->must_free_region) - release_region(dev->base_addr, vci->io_size); +free_device: free_netdev(dev); pr_err(PFX "vortex_probe1 fails. Returns %d\n", retval); out: @@ -3255,8 +3255,9 @@ + sizeof(struct boom_tx_desc) * TX_RING_SIZE, vp->rx_ring, vp->rx_ring_dma); - if (vp->must_free_region) - release_region(dev->base_addr, vp->io_size); + + pci_release_regions(pdev); + free_netdev(dev); } --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/3com/3c509.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/3com/3c509.c @@ -306,6 +306,7 @@ if (!dev) return -ENOMEM; + SET_NETDEV_DEV(dev, pdev); netdev_boot_setup_check(dev); if (!request_region(ioaddr, EL3_IO_EXTENT, "3c509-isa")) { @@ -595,6 +596,7 @@ return -ENOMEM; } + SET_NETDEV_DEV(dev, device); netdev_boot_setup_check(dev); el3_dev_fill(dev, phys_addr, ioaddr, irq, if_port, EL3_EISA); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/atheros/atl1e/atl1e_main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/atheros/atl1e/atl1e_main.c @@ -1669,8 +1669,8 @@ return 0; } -static void atl1e_tx_map(struct atl1e_adapter *adapter, - struct sk_buff *skb, struct atl1e_tpd_desc *tpd) +static int atl1e_tx_map(struct atl1e_adapter *adapter, + struct sk_buff *skb, struct atl1e_tpd_desc *tpd) { struct atl1e_tpd_desc *use_tpd = NULL; struct atl1e_tx_buffer *tx_buffer = NULL; @@ -1681,6 +1681,8 @@ u16 nr_frags; u16 f; int segment; + int ring_start = adapter->tx_ring.next_to_use; + int ring_end; nr_frags = skb_shinfo(skb)->nr_frags; segment = (tpd->word3 >> TPD_SEGMENT_EN_SHIFT) & TPD_SEGMENT_EN_MASK; @@ -1693,6 +1695,9 @@ tx_buffer->length = map_len; tx_buffer->dma = pci_map_single(adapter->pdev, skb->data, hdr_len, PCI_DMA_TODEVICE); + if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) + return -ENOSPC; + ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE); mapped_len += map_len; use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma); @@ -1719,6 +1724,22 @@ tx_buffer->dma = pci_map_single(adapter->pdev, skb->data + mapped_len, map_len, PCI_DMA_TODEVICE); + + if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) { + /* We need to unwind the mappings we've done */ + ring_end = adapter->tx_ring.next_to_use; + adapter->tx_ring.next_to_use = ring_start; + while (adapter->tx_ring.next_to_use != ring_end) { + tpd = atl1e_get_tpd(adapter); + tx_buffer = atl1e_get_tx_buffer(adapter, tpd); + pci_unmap_single(adapter->pdev, tx_buffer->dma, + tx_buffer->length, PCI_DMA_TODEVICE); + } + /* Reset the tx rings next pointer */ + adapter->tx_ring.next_to_use = ring_start; + return -ENOSPC; + } + ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_SINGLE); mapped_len += map_len; use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma); @@ -1754,6 +1775,23 @@ (i * MAX_TX_BUF_LEN), tx_buffer->length, DMA_TO_DEVICE); + + if (dma_mapping_error(&adapter->pdev->dev, tx_buffer->dma)) { + /* We need to unwind the mappings we've done */ + ring_end = adapter->tx_ring.next_to_use; + adapter->tx_ring.next_to_use = ring_start; + while (adapter->tx_ring.next_to_use != ring_end) { + tpd = atl1e_get_tpd(adapter); + tx_buffer = atl1e_get_tx_buffer(adapter, tpd); + dma_unmap_page(&adapter->pdev->dev, tx_buffer->dma, + tx_buffer->length, DMA_TO_DEVICE); + } + + /* Reset the ring next to use pointer */ + adapter->tx_ring.next_to_use = ring_start; + return -ENOSPC; + } + ATL1E_SET_PCIMAP_TYPE(tx_buffer, ATL1E_TX_PCIMAP_PAGE); use_tpd->buffer_addr = cpu_to_le64(tx_buffer->dma); use_tpd->word2 = (use_tpd->word2 & (~TPD_BUFLEN_MASK)) | @@ -1771,6 +1809,7 @@ /* The last buffer info contain the skb address, so it will be free after unmap */ tx_buffer->skb = skb; + return 0; } static void atl1e_tx_queue(struct atl1e_adapter *adapter, u16 count, @@ -1838,10 +1877,15 @@ return NETDEV_TX_OK; } - atl1e_tx_map(adapter, skb, tpd); + if (atl1e_tx_map(adapter, skb, tpd)) { + dev_kfree_skb_any(skb); + goto out; + } + atl1e_tx_queue(adapter, tpd_req, tpd); netdev->trans_start = jiffies; /* NETIF_F_LLTX driver :( */ +out: spin_unlock_irqrestore(&adapter->tx_lock, flags); return NETDEV_TX_OK; } @@ -1851,34 +1895,19 @@ struct net_device *netdev = adapter->netdev; free_irq(adapter->pdev->irq, netdev); - - if (adapter->have_msi) - pci_disable_msi(adapter->pdev); } static int atl1e_request_irq(struct atl1e_adapter *adapter) { struct pci_dev *pdev = adapter->pdev; struct net_device *netdev = adapter->netdev; - int flags = 0; int err = 0; - adapter->have_msi = true; - err = pci_enable_msi(pdev); - if (err) { - netdev_dbg(netdev, - "Unable to allocate MSI interrupt Error: %d\n", err); - adapter->have_msi = false; - } - - if (!adapter->have_msi) - flags |= IRQF_SHARED; - err = request_irq(pdev->irq, atl1e_intr, flags, netdev->name, netdev); + err = request_irq(pdev->irq, atl1e_intr, IRQF_SHARED, netdev->name, + netdev); if (err) { netdev_dbg(adapter->netdev, "Unable to allocate interrupt Error: %d\n", err); - if (adapter->have_msi) - pci_disable_msi(pdev); return err; } netdev_dbg(netdev, "atl1e_request_irq OK\n"); @@ -2347,6 +2376,7 @@ INIT_WORK(&adapter->reset_task, atl1e_reset_task); INIT_WORK(&adapter->link_chg_task, atl1e_link_chg_task); + netif_set_gso_max_size(netdev, MAX_TSO_SEG_SIZE); err = register_netdev(netdev); if (err) { netdev_err(netdev, "register netdevice failed\n"); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/atheros/atl1e/atl1e.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/atheros/atl1e/atl1e.h @@ -186,7 +186,7 @@ /* how about 0x2000 */ #define MAX_TX_BUF_LEN 0x2000 #define MAX_TX_BUF_SHIFT 13 -/*#define MAX_TX_BUF_LEN 0x3000 */ +#define MAX_TSO_SEG_SIZE 0x3c00 /* rrs word 1 bit 0:31 */ #define RRS_RX_CSUM_MASK 0xFFFF @@ -438,7 +438,6 @@ struct atl1e_hw hw; struct atl1e_hw_stats hw_stats; - bool have_msi; u32 wol; u16 link_speed; u16 link_duplex; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -482,10 +482,15 @@ static void atl1c_set_rxbufsize(struct atl1c_adapter *adapter, struct net_device *dev) { + unsigned int head_size; int mtu = dev->mtu; adapter->rx_buffer_len = mtu > AT_RX_BUF_SIZE ? roundup(mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN, 8) : AT_RX_BUF_SIZE; + + head_size = SKB_DATA_ALIGN(adapter->rx_buffer_len + NET_SKB_PAD) + + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); + adapter->rx_frag_size = roundup_pow_of_two(head_size); } static netdev_features_t atl1c_fix_features(struct net_device *netdev, @@ -953,6 +958,10 @@ kfree(adapter->tpd_ring[0].buffer_info); adapter->tpd_ring[0].buffer_info = NULL; } + if (adapter->rx_page) { + put_page(adapter->rx_page); + adapter->rx_page = NULL; + } } /** @@ -1642,6 +1651,35 @@ skb_checksum_none_assert(skb); } +static struct sk_buff *atl1c_alloc_skb(struct atl1c_adapter *adapter) +{ + struct sk_buff *skb; + struct page *page; + + if (adapter->rx_frag_size > PAGE_SIZE) + return netdev_alloc_skb(adapter->netdev, + adapter->rx_buffer_len); + + page = adapter->rx_page; + if (!page) { + adapter->rx_page = page = alloc_page(GFP_ATOMIC); + if (unlikely(!page)) + return NULL; + adapter->rx_page_offset = 0; + } + + skb = build_skb(page_address(page) + adapter->rx_page_offset, + adapter->rx_frag_size); + if (likely(skb)) { + adapter->rx_page_offset += adapter->rx_frag_size; + if (adapter->rx_page_offset >= PAGE_SIZE) + adapter->rx_page = NULL; + else + get_page(page); + } + return skb; +} + static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter) { struct atl1c_rfd_ring *rfd_ring = &adapter->rfd_ring; @@ -1663,7 +1701,7 @@ while (next_info->flags & ATL1C_BUFFER_FREE) { rfd_desc = ATL1C_RFD_DESC(rfd_ring, rfd_next_to_use); - skb = netdev_alloc_skb(adapter->netdev, adapter->rx_buffer_len); + skb = atl1c_alloc_skb(adapter); if (unlikely(!skb)) { if (netif_msg_rx_err(adapter)) dev_warn(&pdev->dev, "alloc rx buffer failed\n"); @@ -2075,7 +2113,7 @@ if (unlikely(pci_dma_mapping_error(adapter->pdev, buffer_info->dma))) goto err_dma; - + ATL1C_SET_BUFFER_STATE(buffer_info, ATL1C_BUFFER_BUSY); ATL1C_SET_PCIMAP_TYPE(buffer_info, ATL1C_PCIMAP_SINGLE, ATL1C_PCIMAP_TODEVICE); mapped_len += map_len; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/atheros/atl1c/atl1c.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/atheros/atl1c/atl1c.h @@ -520,6 +520,9 @@ struct net_device *netdev; struct pci_dev *pdev; struct napi_struct napi; + struct page *rx_page; + unsigned int rx_page_offset; + unsigned int rx_frag_size; struct atl1c_hw hw; struct atl1c_hw_stats hw_stats; struct mii_if_info mii; /* MII interface info */ --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/renesas/sh_eth.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/renesas/sh_eth.h @@ -472,7 +472,7 @@ #define DEFAULT_TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | \ EESR_RTO) -#define DEFAULT_EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | \ +#define DEFAULT_EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE | \ EESR_RDE | EESR_RFRMER | EESR_ADE | \ EESR_TFE | EESR_TDE | EESR_ECI) #define DEFAULT_TX_ERROR_CHECK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | \ --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/renesas/sh_eth.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/renesas/sh_eth.c @@ -172,8 +172,9 @@ .rmcr_value = 0x00000001, .tx_check = EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO, - .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE | - EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI, + .eesr_err_check = EESR_TWB | EESR_TABT | EESR_RABT | EESR_RFE | + EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | + EESR_ECI, .tx_error_check = EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE, .apr = 1, @@ -286,9 +287,9 @@ .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff, .tx_check = EESR_TC1 | EESR_FTC, - .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \ - EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \ - EESR_ECI, + .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | + EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | + EESR_TDE | EESR_ECI, .tx_error_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \ EESR_TFE, .fdr_value = 0x0000072f, @@ -368,9 +369,9 @@ .eesipr_value = DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff, .tx_check = EESR_TC1 | EESR_FTC, - .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | \ - EESR_RDE | EESR_RFRMER | EESR_TFE | EESR_TDE | \ - EESR_ECI, + .eesr_err_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_RABT | + EESR_RFE | EESR_RDE | EESR_RFRMER | EESR_TFE | + EESR_TDE | EESR_ECI, .tx_error_check = EESR_TWB1 | EESR_TWB | EESR_TABT | EESR_TDE | \ EESR_TFE, @@ -1102,16 +1103,23 @@ desc_status = edmac_to_cpu(mdp, rxdesc->status); pkt_len = rxdesc->frame_length; -#if defined(CONFIG_ARCH_R8A7740) - desc_status >>= 16; -#endif - if (--boguscnt < 0) break; if (!(desc_status & RDFEND)) ndev->stats.rx_length_errors++; +#if defined(CONFIG_ARCH_R8A7740) + /* + * In case of almost all GETHER/ETHERs, the Receive Frame State + * (RFS) bits in the Receive Descriptor 0 are from bit 9 to + * bit 0. However, in case of the R8A7740's GETHER, the RFS + * bits are from bit 25 to bit 16. So, the driver needs right + * shifting by 16. + */ + desc_status >>= 16; +#endif + if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 | RD_RFS5 | RD_RFS6 | RD_RFS10)) { ndev->stats.rx_errors++; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/neterion/vxge/vxge-main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/neterion/vxge/vxge-main.c @@ -4200,6 +4200,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; @@ -4242,9 +4245,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 @@ -4852,3 +4855,5 @@ } module_init(vxge_starter); module_exit(vxge_closer); +MODULE_FIRMWARE(VXGE_PXE_FIRMWARE); +MODULE_FIRMWARE(VXGE_FIRMWARE); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/nic.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/nic.c @@ -376,7 +376,8 @@ return false; tx_queue->empty_read_count = 0; - return ((empty_read_count ^ write_count) & ~EFX_EMPTY_COUNT_VALID) == 0; + return ((empty_read_count ^ write_count) & ~EFX_EMPTY_COUNT_VALID) == 0 + && tx_queue->write_count - write_count == 1; } /* For each entry inserted into the software descriptor ring, create a --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/efx.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/efx.c @@ -779,6 +779,7 @@ tx_queue->txd.entries); } + efx_device_detach_sync(efx); efx_stop_all(efx); efx_stop_interrupts(efx, true); @@ -832,6 +833,7 @@ efx_start_interrupts(efx, true); efx_start_all(efx); + netif_device_attach(efx->net_dev); return rc; rollback: @@ -1641,8 +1643,12 @@ /* Flush efx_mac_work(), refill_workqueue, monitor_work */ efx_flush_all(efx); - /* Stop the kernel transmit interface late, so the watchdog - * timer isn't ticking over the flush */ + /* Stop the kernel transmit interface. This is only valid if + * the device is stopped or detached; otherwise the watchdog + * may fire immediately. + */ + WARN_ON(netif_running(efx->net_dev) && + netif_device_present(efx->net_dev)); netif_tx_disable(efx->net_dev); efx_stop_datapath(efx); @@ -1963,16 +1969,18 @@ if (new_mtu > EFX_MAX_MTU) return -EINVAL; - efx_stop_all(efx); - netif_dbg(efx, drv, efx->net_dev, "changing MTU to %d\n", new_mtu); + efx_device_detach_sync(efx); + efx_stop_all(efx); + mutex_lock(&efx->mac_lock); net_dev->mtu = new_mtu; efx->type->reconfigure_mac(efx); mutex_unlock(&efx->mac_lock); efx_start_all(efx); + netif_device_attach(efx->net_dev); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/net_driver.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/net_driver.h @@ -210,6 +210,7 @@ * Will be %NULL if the buffer slot is currently free. * @page: The associated page buffer. Valif iff @flags & %EFX_RX_BUF_PAGE. * Will be %NULL if the buffer slot is currently free. + * @page_offset: Offset within page. Valid iff @flags & %EFX_RX_BUF_PAGE. * @len: Buffer length, in bytes. * @flags: Flags for buffer and packet state. */ @@ -219,7 +220,8 @@ struct sk_buff *skb; struct page *page; } u; - unsigned int len; + u16 page_offset; + u16 len; u16 flags; }; #define EFX_RX_BUF_PAGE 0x0001 --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/efx.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/efx.h @@ -171,9 +171,9 @@ * TX scheduler is stopped when we're done and before * netif_device_present() becomes false. */ - netif_tx_lock(dev); + netif_tx_lock_bh(dev); netif_device_detach(dev); - netif_tx_unlock(dev); + netif_tx_unlock_bh(dev); } #endif /* EFX_EFX_H */ --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/ptp.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/ptp.c @@ -1439,7 +1439,7 @@ delta = timespec_sub(*e_ts, time_now); - efx_phc_adjtime(ptp, timespec_to_ns(&delta)); + rc = efx_phc_adjtime(ptp, timespec_to_ns(&delta)); if (rc != 0) return rc; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/mcdi.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/mcdi.c @@ -667,7 +667,7 @@ int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, u16 *fw_subtype_list, u32 *capabilities) { - uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LENMIN]; + uint8_t outbuf[MC_CMD_GET_BOARD_CFG_OUT_LENMAX]; size_t outlen, offset, i; int port_num = efx_port_num(efx); int rc; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sfc/rx.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sfc/rx.c @@ -90,11 +90,7 @@ static inline unsigned int efx_rx_buf_offset(struct efx_nic *efx, struct efx_rx_buffer *buf) { - /* Offset is always within one page, so we don't need to consider - * the page order. - */ - return ((unsigned int) buf->dma_addr & (PAGE_SIZE - 1)) + - efx->type->rx_buffer_hash_size; + return buf->page_offset + efx->type->rx_buffer_hash_size; } static inline unsigned int efx_rx_buf_size(struct efx_nic *efx) { @@ -187,6 +183,7 @@ struct efx_nic *efx = rx_queue->efx; struct efx_rx_buffer *rx_buf; struct page *page; + unsigned int page_offset; struct efx_rx_page_state *state; dma_addr_t dma_addr; unsigned index, count; @@ -211,12 +208,14 @@ state->dma_addr = dma_addr; dma_addr += sizeof(struct efx_rx_page_state); + page_offset = sizeof(struct efx_rx_page_state); split: index = rx_queue->added_count & rx_queue->ptr_mask; rx_buf = efx_rx_buffer(rx_queue, index); rx_buf->dma_addr = dma_addr + EFX_PAGE_IP_ALIGN; rx_buf->u.page = page; + rx_buf->page_offset = page_offset + EFX_PAGE_IP_ALIGN; rx_buf->len = efx->rx_buffer_len - EFX_PAGE_IP_ALIGN; rx_buf->flags = EFX_RX_BUF_PAGE; ++rx_queue->added_count; @@ -227,6 +226,7 @@ /* Use the second half of the page */ get_page(page); dma_addr += (PAGE_SIZE >> 1); + page_offset += (PAGE_SIZE >> 1); ++count; goto split; } @@ -236,7 +236,8 @@ } static void efx_unmap_rx_buffer(struct efx_nic *efx, - struct efx_rx_buffer *rx_buf) + struct efx_rx_buffer *rx_buf, + unsigned int used_len) { if ((rx_buf->flags & EFX_RX_BUF_PAGE) && rx_buf->u.page) { struct efx_rx_page_state *state; @@ -247,6 +248,10 @@ state->dma_addr, efx_rx_buf_size(efx), DMA_FROM_DEVICE); + } else if (used_len) { + dma_sync_single_for_cpu(&efx->pci_dev->dev, + rx_buf->dma_addr, used_len, + DMA_FROM_DEVICE); } } else if (!(rx_buf->flags & EFX_RX_BUF_PAGE) && rx_buf->u.skb) { dma_unmap_single(&efx->pci_dev->dev, rx_buf->dma_addr, @@ -269,7 +274,7 @@ static void efx_fini_rx_buffer(struct efx_rx_queue *rx_queue, struct efx_rx_buffer *rx_buf) { - efx_unmap_rx_buffer(rx_queue->efx, rx_buf); + efx_unmap_rx_buffer(rx_queue->efx, rx_buf, 0); efx_free_rx_buffer(rx_queue->efx, rx_buf); } @@ -297,8 +302,9 @@ index = rx_queue->added_count & rx_queue->ptr_mask; new_buf = efx_rx_buffer(rx_queue, index); - new_buf->dma_addr = rx_buf->dma_addr ^ (PAGE_SIZE >> 1); new_buf->u.page = rx_buf->u.page; + new_buf->page_offset = rx_buf->page_offset ^ (PAGE_SIZE >> 1); + new_buf->dma_addr = state->dma_addr + new_buf->page_offset; new_buf->len = rx_buf->len; new_buf->flags = EFX_RX_BUF_PAGE; ++rx_queue->added_count; @@ -535,10 +541,10 @@ goto out; } - /* Release card resources - assumes all RX buffers consumed in-order - * per RX queue + /* Release and/or sync DMA mapping - assumes all RX buffers + * consumed in-order per RX queue */ - efx_unmap_rx_buffer(efx, rx_buf); + efx_unmap_rx_buffer(efx, rx_buf, len); /* Prefetch nice and early so data will (hopefully) be in cache by * the time we look at it. --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or @@ -34,7 +34,7 @@ #include "be_hw.h" #include "be_roce.h" -#define DRV_VER "4.4.161.0u" +#define DRV_VER "4.6.62.0u" #define DRV_NAME "be2net" #define BE_NAME "Emulex BladeEngine2" #define BE3_NAME "Emulex BladeEngine3" @@ -214,6 +214,7 @@ }; struct be_tx_obj { + u32 db_offset; struct be_queue_info q; struct be_queue_info cq; /* Remember the skbs that were transmitted */ @@ -292,7 +293,7 @@ u32 rx_in_range_errors; u32 rx_out_range_errors; u32 rx_frame_too_long; - u32 rx_address_mismatch_drops; + u32 rx_address_filtered; u32 rx_dropped_too_small; u32 rx_dropped_too_short; u32 rx_dropped_header_too_small; @@ -326,6 +327,7 @@ #define BE_FLAGS_LINK_STATUS_INIT 1 #define BE_FLAGS_WORKER_SCHEDULED (1 << 3) +#define BE_FLAGS_NAPI_ENABLED (1 << 9) #define BE_UC_PMAC_COUNT 30 #define BE_VF_UC_PMAC_COUNT 2 @@ -349,6 +351,7 @@ struct pci_dev *pdev; struct net_device *netdev; + u8 __iomem *csr; /* CSR BAR used only for BE2/3 */ u8 __iomem *db; /* Door Bell */ struct mutex mbox_lock; /* For serializing mbox cmds to BE card */ @@ -433,6 +436,7 @@ u8 wol_cap; bool wol; u32 uc_macs; /* Count of secondary UC MAC programmed */ + u16 asic_rev; u32 msg_enable; int be_get_temp_freq; u16 max_mcast_mac; @@ -444,6 +448,7 @@ u16 max_event_queues; u32 if_cap_flags; u8 pf_number; + u64 rss_flags; }; #define be_physfn(adapter) (!adapter->virtfn) --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_roce.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_roce.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_hw.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_hw.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or @@ -32,8 +32,8 @@ #define MPU_EP_CONTROL 0 /********** MPU semphore: used for SH & BE *************/ -#define SLIPORT_SEMAPHORE_OFFSET_BE 0x7c -#define SLIPORT_SEMAPHORE_OFFSET_SH 0x94 +#define SLIPORT_SEMAPHORE_OFFSET_BEx 0xac /* CSR BAR offset */ +#define SLIPORT_SEMAPHORE_OFFSET_SH 0x94 /* PCI-CFG offset */ #define POST_STAGE_MASK 0x0000FFFF #define POST_ERR_MASK 0x1 #define POST_ERR_SHIFT 31 @@ -72,6 +72,10 @@ */ #define MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK (1 << 29) /* bit 29 */ +/********* PCI Function Capability *********/ +#define BE_FUNCTION_CAPS_RSS 0x2 +#define BE_FUNCTION_CAPS_SUPER_NIC 0x40 + /********* Power management (WOL) **********/ #define PCICFG_PM_CONTROL_OFFSET 0x44 #define PCICFG_PM_CONTROL_MASK 0x108 /* bits 3 & 8 */ @@ -495,7 +499,8 @@ u32 antidote; u32 num_imgs; u8 build[24]; - u8 rsvd[32]; + u8 asic_type_rev; + u8 rsvd[31]; }; struct flash_section_hdr { --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_ethtool.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_ethtool.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or @@ -54,7 +54,7 @@ /* Received packets dropped when they don't pass the unicast or * multicast address filtering. */ - {DRVSTAT_INFO(rx_address_mismatch_drops)}, + {DRVSTAT_INFO(rx_address_filtered)}, /* Received packets dropped when IP packet length field is less than * the IP header length field. */ @@ -85,6 +85,7 @@ {DRVSTAT_INFO(tx_pauseframes)}, {DRVSTAT_INFO(tx_controlframes)}, {DRVSTAT_INFO(rx_priority_pause_frames)}, + {DRVSTAT_INFO(tx_priority_pauseframes)}, /* Received packets dropped when an internal fifo going into * main packet buffer tank (PMEM) overflows. */ @@ -680,7 +681,8 @@ if (be_is_wol_supported(adapter)) { wol->supported |= WAKE_MAGIC; - wol->wolopts |= WAKE_MAGIC; + if (adapter->wol) + wol->wolopts |= WAKE_MAGIC; } else wol->wolopts = 0; memset(&wol->sopass, 0, sizeof(wol->sopass)); @@ -757,6 +759,12 @@ int status; u8 link_status = 0; + if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) { + dev_err(&adapter->pdev->dev, "Self test not supported\n"); + test->flags |= ETH_TEST_FL_FAILED; + return; + } + memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM); if (test->flags & ETH_TEST_FL_OFFLINE) { @@ -939,6 +947,159 @@ return; } +static u64 be_get_rss_hash_opts(struct be_adapter *adapter, u64 flow_type) +{ + u64 data = 0; + + switch (flow_type) { + case TCP_V4_FLOW: + if (adapter->rss_flags & RSS_ENABLE_IPV4) + data |= RXH_IP_DST | RXH_IP_SRC; + if (adapter->rss_flags & RSS_ENABLE_TCP_IPV4) + data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; + break; + case UDP_V4_FLOW: + if (adapter->rss_flags & RSS_ENABLE_IPV4) + data |= RXH_IP_DST | RXH_IP_SRC; + if (adapter->rss_flags & RSS_ENABLE_UDP_IPV4) + data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; + break; + case TCP_V6_FLOW: + if (adapter->rss_flags & RSS_ENABLE_IPV6) + data |= RXH_IP_DST | RXH_IP_SRC; + if (adapter->rss_flags & RSS_ENABLE_TCP_IPV6) + data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; + break; + case UDP_V6_FLOW: + if (adapter->rss_flags & RSS_ENABLE_IPV6) + data |= RXH_IP_DST | RXH_IP_SRC; + if (adapter->rss_flags & RSS_ENABLE_UDP_IPV6) + data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; + break; + } + + return data; +} + +static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd, + u32 *rule_locs) +{ + struct be_adapter *adapter = netdev_priv(netdev); + + if (!be_multi_rxq(adapter)) { + dev_info(&adapter->pdev->dev, + "ethtool::get_rxnfc: RX flow hashing is disabled\n"); + return -EINVAL; + } + + switch (cmd->cmd) { + case ETHTOOL_GRXFH: + cmd->data = be_get_rss_hash_opts(adapter, cmd->flow_type); + break; + case ETHTOOL_GRXRINGS: + cmd->data = adapter->num_rx_qs - 1; + break; + default: + return -EINVAL; + } + + return 0; +} + +static int be_set_rss_hash_opts(struct be_adapter *adapter, + struct ethtool_rxnfc *cmd) +{ + struct be_rx_obj *rxo; + int status = 0, i, j; + u8 rsstable[128]; + u32 rss_flags = adapter->rss_flags; + + if (cmd->data != L3_RSS_FLAGS && + cmd->data != (L3_RSS_FLAGS | L4_RSS_FLAGS)) + return -EINVAL; + + switch (cmd->flow_type) { + case TCP_V4_FLOW: + if (cmd->data == L3_RSS_FLAGS) + rss_flags &= ~RSS_ENABLE_TCP_IPV4; + else if (cmd->data == (L3_RSS_FLAGS | L4_RSS_FLAGS)) + rss_flags |= RSS_ENABLE_IPV4 | + RSS_ENABLE_TCP_IPV4; + break; + case TCP_V6_FLOW: + if (cmd->data == L3_RSS_FLAGS) + rss_flags &= ~RSS_ENABLE_TCP_IPV6; + else if (cmd->data == (L3_RSS_FLAGS | L4_RSS_FLAGS)) + rss_flags |= RSS_ENABLE_IPV6 | + RSS_ENABLE_TCP_IPV6; + break; + case UDP_V4_FLOW: + if ((cmd->data == (L3_RSS_FLAGS | L4_RSS_FLAGS)) && + BEx_chip(adapter)) + return -EINVAL; + + if (cmd->data == L3_RSS_FLAGS) + rss_flags &= ~RSS_ENABLE_UDP_IPV4; + else if (cmd->data == (L3_RSS_FLAGS | L4_RSS_FLAGS)) + rss_flags |= RSS_ENABLE_IPV4 | + RSS_ENABLE_UDP_IPV4; + break; + case UDP_V6_FLOW: + if ((cmd->data == (L3_RSS_FLAGS | L4_RSS_FLAGS)) && + BEx_chip(adapter)) + return -EINVAL; + + if (cmd->data == L3_RSS_FLAGS) + rss_flags &= ~RSS_ENABLE_UDP_IPV6; + else if (cmd->data == (L3_RSS_FLAGS | L4_RSS_FLAGS)) + rss_flags |= RSS_ENABLE_IPV6 | + RSS_ENABLE_UDP_IPV6; + break; + default: + return -EINVAL; + } + + if (rss_flags == adapter->rss_flags) + return status; + + if (be_multi_rxq(adapter)) { + for (j = 0; j < 128; j += adapter->num_rx_qs - 1) { + for_all_rss_queues(adapter, rxo, i) { + if ((j + i) >= 128) + break; + rsstable[j + i] = rxo->rss_id; + } + } + } + status = be_cmd_rss_config(adapter, rsstable, rss_flags, 128); + if (!status) + adapter->rss_flags = rss_flags; + + return status; +} + +static int be_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd) +{ + struct be_adapter *adapter = netdev_priv(netdev); + int status = 0; + + if (!be_multi_rxq(adapter)) { + dev_err(&adapter->pdev->dev, + "ethtool::set_rxnfc: RX flow hashing is disabled\n"); + return -EINVAL; + } + + switch (cmd->cmd) { + case ETHTOOL_SRXFH: + status = be_set_rss_hash_opts(adapter, cmd); + break; + default: + return -EINVAL; + } + + return status; +} + const struct ethtool_ops be_ethtool_ops = { .get_settings = be_get_settings, .get_drvinfo = be_get_drvinfo, @@ -962,4 +1123,6 @@ .get_regs = be_get_regs, .flash_device = be_do_flash, .self_test = be_self_test, + .get_rxnfc = be_get_rxnfc, + .set_rxnfc = be_set_rxnfc, }; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_roce.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_roce.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_cmds.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_cmds.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or @@ -93,13 +93,16 @@ * little endian) */ static inline bool be_mcc_compl_is_new(struct be_mcc_compl *compl) { + u32 flags; + if (compl->flags != 0) { - compl->flags = le32_to_cpu(compl->flags); - BUG_ON((compl->flags & CQE_FLAGS_VALID_MASK) == 0); - return true; - } else { - return false; + flags = le32_to_cpu(compl->flags); + if (flags & CQE_FLAGS_VALID_MASK) { + compl->flags = flags; + return true; + } } + return false; } /* Need to reset the entire word that houses the valid bit */ @@ -470,19 +473,17 @@ return 0; } -static int be_POST_stage_get(struct be_adapter *adapter, u16 *stage) +static u16 be_POST_stage_get(struct be_adapter *adapter) { u32 sem; - u32 reg = skyhawk_chip(adapter) ? SLIPORT_SEMAPHORE_OFFSET_SH : - SLIPORT_SEMAPHORE_OFFSET_BE; - - pci_read_config_dword(adapter->pdev, reg, &sem); - *stage = sem & POST_STAGE_MASK; - if ((sem >> POST_ERR_SHIFT) & POST_ERR_MASK) - return -1; + if (BEx_chip(adapter)) + sem = ioread32(adapter->csr + SLIPORT_SEMAPHORE_OFFSET_BEx); else - return 0; + pci_read_config_dword(adapter->pdev, + SLIPORT_SEMAPHORE_OFFSET_SH, &sem); + + return sem & POST_STAGE_MASK; } int lancer_wait_ready(struct be_adapter *adapter) @@ -576,19 +577,17 @@ } do { - status = be_POST_stage_get(adapter, &stage); - if (status) { - dev_err(dev, "POST error; stage=0x%x\n", stage); - return -1; - } else if (stage != POST_STAGE_ARMFW_RDY) { - if (msleep_interruptible(2000)) { - dev_err(dev, "Waiting for POST aborted\n"); - return -EINTR; - } - timeout += 2; - } else { + stage = be_POST_stage_get(adapter); + if (stage == POST_STAGE_ARMFW_RDY) return 0; + + dev_info(dev, "Waiting for POST, %ds elapsed\n", + timeout); + if (msleep_interruptible(2000)) { + dev_err(dev, "Waiting for POST aborted\n"); + return -EINTR; } + timeout += 2; } while (timeout < 60); dev_err(dev, "POST timeout; stage=0x%x\n", stage); @@ -688,10 +687,8 @@ if (!mccq->created) return NULL; - if (atomic_read(&mccq->used) >= mccq->len) { - dev_err(&adapter->pdev->dev, "Out of MCCQ wrbs\n"); + if (atomic_read(&mccq->used) >= mccq->len) return NULL; - } wrb = queue_head_node(mccq); queue_head_inc(mccq); @@ -933,19 +930,8 @@ OPCODE_COMMON_CQ_CREATE, sizeof(*req), wrb, NULL); req->num_pages = cpu_to_le16(PAGES_4K_SPANNED(q_mem->va, q_mem->size)); - if (lancer_chip(adapter)) { - req->hdr.version = 2; - req->page_size = 1; /* 1 for 4K */ - AMAP_SET_BITS(struct amap_cq_context_lancer, nodelay, ctxt, - no_delay); - AMAP_SET_BITS(struct amap_cq_context_lancer, count, ctxt, - __ilog2_u32(cq->len/256)); - AMAP_SET_BITS(struct amap_cq_context_lancer, valid, ctxt, 1); - AMAP_SET_BITS(struct amap_cq_context_lancer, eventable, - ctxt, 1); - AMAP_SET_BITS(struct amap_cq_context_lancer, eqid, - ctxt, eq->id); - } else { + + if (BEx_chip(adapter)) { AMAP_SET_BITS(struct amap_cq_context_be, coalescwm, ctxt, coalesce_wm); AMAP_SET_BITS(struct amap_cq_context_be, nodelay, @@ -955,6 +941,18 @@ AMAP_SET_BITS(struct amap_cq_context_be, valid, ctxt, 1); AMAP_SET_BITS(struct amap_cq_context_be, eventable, ctxt, 1); AMAP_SET_BITS(struct amap_cq_context_be, eqid, ctxt, eq->id); + } else { + req->hdr.version = 2; + req->page_size = 1; /* 1 for 4K */ + AMAP_SET_BITS(struct amap_cq_context_v2, nodelay, ctxt, + no_delay); + AMAP_SET_BITS(struct amap_cq_context_v2, count, ctxt, + __ilog2_u32(cq->len/256)); + AMAP_SET_BITS(struct amap_cq_context_v2, valid, ctxt, 1); + AMAP_SET_BITS(struct amap_cq_context_v2, eventable, + ctxt, 1); + AMAP_SET_BITS(struct amap_cq_context_v2, eqid, + ctxt, eq->id); } be_dws_cpu_to_le(ctxt, sizeof(req->context)); @@ -1096,15 +1094,14 @@ return status; } -int be_cmd_txq_create(struct be_adapter *adapter, - struct be_queue_info *txq, - struct be_queue_info *cq) +int be_cmd_txq_create(struct be_adapter *adapter, struct be_tx_obj *txo) { struct be_mcc_wrb *wrb; struct be_cmd_req_eth_tx_create *req; + struct be_queue_info *txq = &txo->q; + struct be_queue_info *cq = &txo->cq; struct be_dma_mem *q_mem = &txq->dma_mem; - void *ctxt; - int status; + int status, ver = 0; spin_lock_bh(&adapter->mcc_lock); @@ -1115,34 +1112,37 @@ } req = embedded_payload(wrb); - ctxt = &req->context; be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ETH, OPCODE_ETH_TX_CREATE, sizeof(*req), wrb, NULL); if (lancer_chip(adapter)) { req->hdr.version = 1; - AMAP_SET_BITS(struct amap_tx_context, if_id, ctxt, - adapter->if_handle); + req->if_id = cpu_to_le16(adapter->if_handle); + } else if (BEx_chip(adapter)) { + if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) + req->hdr.version = 2; + } else { /* For SH */ + req->hdr.version = 2; } req->num_pages = PAGES_4K_SPANNED(q_mem->va, q_mem->size); req->ulp_num = BE_ULP1_NUM; req->type = BE_ETH_TX_RING_TYPE_STANDARD; - - AMAP_SET_BITS(struct amap_tx_context, tx_ring_size, ctxt, - be_encoded_q_len(txq->len)); - AMAP_SET_BITS(struct amap_tx_context, ctx_valid, ctxt, 1); - AMAP_SET_BITS(struct amap_tx_context, cq_id_send, ctxt, cq->id); - - be_dws_cpu_to_le(ctxt, sizeof(req->context)); - + req->cq_id = cpu_to_le16(cq->id); + req->queue_size = be_encoded_q_len(txq->len); be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem); + ver = req->hdr.version; + status = be_mcc_notify_wait(adapter); if (!status) { struct be_cmd_resp_eth_tx_create *resp = embedded_payload(wrb); txq->id = le16_to_cpu(resp->cid); + if (ver == 2) + txo->db_offset = le32_to_cpu(resp->db_offset); + else + txo->db_offset = DB_TXULP1_OFFSET; txq->created = true; } @@ -1732,10 +1732,12 @@ req->if_id = cpu_to_le32(adapter->if_handle); if (flags & IFF_PROMISC) { req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS | - BE_IF_FLAGS_VLAN_PROMISCUOUS); + BE_IF_FLAGS_VLAN_PROMISCUOUS | + BE_IF_FLAGS_MCAST_PROMISCUOUS); if (value == ON) req->if_flags = cpu_to_le32(BE_IF_FLAGS_PROMISCUOUS | - BE_IF_FLAGS_VLAN_PROMISCUOUS); + BE_IF_FLAGS_VLAN_PROMISCUOUS | + BE_IF_FLAGS_MCAST_PROMISCUOUS); } else if (flags & IFF_ALLMULTI) { req->if_flags_mask = req->if_flags = cpu_to_le32(BE_IF_FLAGS_MCAST_PROMISCUOUS); @@ -1835,7 +1837,7 @@ /* Uses mbox */ int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num, - u32 *mode, u32 *caps) + u32 *mode, u32 *caps, u16 *asic_rev) { struct be_mcc_wrb *wrb; struct be_cmd_req_query_fw_cfg *req; @@ -1856,6 +1858,7 @@ *port_num = le32_to_cpu(resp->phys_port); *mode = le32_to_cpu(resp->function_mode); *caps = le32_to_cpu(resp->function_caps); + *asic_rev = le32_to_cpu(resp->asic_revision) & 0xFF; } mutex_unlock(&adapter->mbox_lock); @@ -1898,7 +1901,8 @@ return status; } -int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, u16 table_size) +int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, + u32 rss_hash_opts, u16 table_size) { struct be_mcc_wrb *wrb; struct be_cmd_req_rss_config *req; @@ -1917,16 +1921,12 @@ OPCODE_ETH_RSS_CONFIG, sizeof(*req), wrb, NULL); req->if_id = cpu_to_le32(adapter->if_handle); - req->enable_rss = cpu_to_le16(RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 | - RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6); + req->enable_rss = cpu_to_le16(rss_hash_opts); + req->cpu_table_size_log2 = cpu_to_le16(fls(table_size) - 1); - if (lancer_chip(adapter) || skyhawk_chip(adapter)) { + if (lancer_chip(adapter) || skyhawk_chip(adapter)) req->hdr.version = 1; - req->enable_rss |= cpu_to_le16(RSS_ENABLE_UDP_IPV4 | - RSS_ENABLE_UDP_IPV6); - } - req->cpu_table_size_log2 = cpu_to_le16(fls(table_size) - 1); memcpy(req->cpu_table, rsstable, table_size); memcpy(req->hash, myhash, sizeof(myhash)); be_dws_cpu_to_le(req->hash, sizeof(req->hash)); @@ -2055,7 +2055,7 @@ spin_unlock_bh(&adapter->mcc_lock); if (!wait_for_completion_timeout(&adapter->flash_compl, - msecs_to_jiffies(30000))) + msecs_to_jiffies(60000))) status = -1; else status = adapter->flash_status; @@ -2344,7 +2344,6 @@ { struct be_mcc_wrb *wrb; struct be_cmd_req_seeprom_read *req; - struct be_sge *sge; int status; spin_lock_bh(&adapter->mcc_lock); @@ -2355,7 +2354,6 @@ goto err; } req = nonemb_cmd->va; - sge = nonembedded_sgl(wrb); be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, OPCODE_COMMON_SEEPROM_READ, sizeof(*req), wrb, @@ -2462,6 +2460,9 @@ struct mgmt_controller_attrib *attribs; struct be_dma_mem attribs_cmd; + if (mutex_lock_interruptible(&adapter->mbox_lock)) + return -1; + memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, @@ -2469,12 +2470,10 @@ if (!attribs_cmd.va) { dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); - return -ENOMEM; + status = -ENOMEM; + goto err; } - if (mutex_lock_interruptible(&adapter->mbox_lock)) - return -1; - wrb = wrb_from_mbox(adapter); if (!wrb) { status = -EBUSY; @@ -2494,8 +2493,9 @@ err: mutex_unlock(&adapter->mbox_lock); - pci_free_consistent(adapter->pdev, attribs_cmd.size, attribs_cmd.va, - attribs_cmd.dma); + if (attribs_cmd.va) + pci_free_consistent(adapter->pdev, attribs_cmd.size, + attribs_cmd.va, attribs_cmd.dma); return status; } @@ -2795,6 +2795,9 @@ CMD_SUBSYSTEM_ETH)) return -EPERM; + if (mutex_lock_interruptible(&adapter->mbox_lock)) + return -1; + memset(&cmd, 0, sizeof(struct be_dma_mem)); cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, @@ -2802,12 +2805,10 @@ if (!cmd.va) { dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); - return -ENOMEM; + status = -ENOMEM; + goto err; } - if (mutex_lock_interruptible(&adapter->mbox_lock)) - return -1; - wrb = wrb_from_mbox(adapter); if (!wrb) { status = -EBUSY; @@ -2838,7 +2839,8 @@ } err: mutex_unlock(&adapter->mbox_lock); - pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); + if (cmd.va) + pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); return status; } @@ -2943,14 +2945,15 @@ int i; for (i = 0; i < desc_count; i++) { - desc->desc_len = RESOURCE_DESC_SIZE; + desc->desc_len = desc->desc_len ? : RESOURCE_DESC_SIZE; if (((void *)desc + desc->desc_len) > (void *)(buf + max_buf_size)) { desc = NULL; break; } - if (desc->desc_type == NIC_RESOURCE_DESC_TYPE_ID) + if (desc->desc_type == NIC_RESOURCE_DESC_TYPE_V0 || + desc->desc_type == NIC_RESOURCE_DESC_TYPE_V1) break; desc = (void *)desc + desc->desc_len; @@ -2970,16 +2973,18 @@ int status; struct be_dma_mem cmd; + if (mutex_lock_interruptible(&adapter->mbox_lock)) + return -1; + memset(&cmd, 0, sizeof(struct be_dma_mem)); cmd.size = sizeof(struct be_cmd_resp_get_func_config); cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, &cmd.dma); if (!cmd.va) { dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); - return -ENOMEM; + status = -ENOMEM; + goto err; } - if (mutex_lock_interruptible(&adapter->mbox_lock)) - return -1; wrb = wrb_from_mbox(adapter); if (!wrb) { @@ -2993,6 +2998,9 @@ OPCODE_COMMON_GET_FUNC_CONFIG, cmd.size, wrb, &cmd); + if (skyhawk_chip(adapter)) + req->hdr.version = 1; + status = be_mbox_notify_wait(adapter); if (!status) { struct be_cmd_resp_get_func_config *resp = cmd.va; @@ -3019,28 +3027,46 @@ } err: mutex_unlock(&adapter->mbox_lock); - pci_free_consistent(adapter->pdev, cmd.size, - cmd.va, cmd.dma); + if (cmd.va) + pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); return status; } - /* Uses sync mcc */ -int be_cmd_get_profile_config(struct be_adapter *adapter, u32 *cap_flags, - u8 domain) +/* Uses mbox */ +int be_cmd_get_profile_config_mbox(struct be_adapter *adapter, + u8 domain, struct be_dma_mem *cmd) { struct be_mcc_wrb *wrb; struct be_cmd_req_get_profile_config *req; int status; - struct be_dma_mem cmd; - memset(&cmd, 0, sizeof(struct be_dma_mem)); - cmd.size = sizeof(struct be_cmd_resp_get_profile_config); - cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, - &cmd.dma); - if (!cmd.va) { - dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); - return -ENOMEM; - } + if (mutex_lock_interruptible(&adapter->mbox_lock)) + return -1; + wrb = wrb_from_mbox(adapter); + + req = cmd->va; + be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, + OPCODE_COMMON_GET_PROFILE_CONFIG, + cmd->size, wrb, cmd); + + req->type = ACTIVE_PROFILE_TYPE; + req->hdr.domain = domain; + if (!lancer_chip(adapter)) + req->hdr.version = 1; + + status = be_mbox_notify_wait(adapter); + + mutex_unlock(&adapter->mbox_lock); + return status; +} + +/* Uses sync mcc */ +int be_cmd_get_profile_config_mccq(struct be_adapter *adapter, + u8 domain, struct be_dma_mem *cmd) +{ + struct be_mcc_wrb *wrb; + struct be_cmd_req_get_profile_config *req; + int status; spin_lock_bh(&adapter->mcc_lock); @@ -3050,16 +3076,47 @@ goto err; } - req = cmd.va; - + req = cmd->va; be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, OPCODE_COMMON_GET_PROFILE_CONFIG, - cmd.size, wrb, &cmd); + cmd->size, wrb, cmd); req->type = ACTIVE_PROFILE_TYPE; req->hdr.domain = domain; + if (!lancer_chip(adapter)) + req->hdr.version = 1; status = be_mcc_notify_wait(adapter); + +err: + spin_unlock_bh(&adapter->mcc_lock); + return status; +} + +/* Uses sync mcc, if MCCQ is already created otherwise mbox */ +int be_cmd_get_profile_config(struct be_adapter *adapter, u32 *cap_flags, + u16 *txq_count, u8 domain) +{ + struct be_queue_info *mccq = &adapter->mcc_obj.q; + struct be_dma_mem cmd; + int status; + + memset(&cmd, 0, sizeof(struct be_dma_mem)); + if (!lancer_chip(adapter)) + cmd.size = sizeof(struct be_cmd_resp_get_profile_config_v1); + else + cmd.size = sizeof(struct be_cmd_resp_get_profile_config); + cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, + &cmd.dma); + if (!cmd.va) { + dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); + return -ENOMEM; + } + + if (!mccq->created) + status = be_cmd_get_profile_config_mbox(adapter, domain, &cmd); + else + status = be_cmd_get_profile_config_mccq(adapter, domain, &cmd); if (!status) { struct be_cmd_resp_get_profile_config *resp = cmd.va; u32 desc_count = le32_to_cpu(resp->desc_count); @@ -3072,12 +3129,15 @@ status = -EINVAL; goto err; } - *cap_flags = le32_to_cpu(desc->cap_flags); + if (cap_flags) + *cap_flags = le32_to_cpu(desc->cap_flags); + if (txq_count) + *txq_count = le32_to_cpu(desc->txq_count); } err: - spin_unlock_bh(&adapter->mcc_lock); - pci_free_consistent(adapter->pdev, cmd.size, - cmd.va, cmd.dma); + if (cmd.va) + pci_free_consistent(adapter->pdev, cmd.size, + cmd.va, cmd.dma); return status; } @@ -3106,7 +3166,7 @@ req->hdr.domain = domain; req->desc_count = cpu_to_le32(1); - req->nic_desc.desc_type = NIC_RESOURCE_DESC_TYPE_ID; + req->nic_desc.desc_type = NIC_RESOURCE_DESC_TYPE_V0; req->nic_desc.desc_len = RESOURCE_DESC_SIZE; req->nic_desc.flags = (1 << QUN) | (1 << IMM) | (1 << NOSV); req->nic_desc.pf_num = adapter->pf_number; @@ -3138,6 +3198,39 @@ return status; } +int be_cmd_get_if_id(struct be_adapter *adapter, struct be_vf_cfg *vf_cfg, + int vf_num) +{ + struct be_mcc_wrb *wrb; + struct be_cmd_req_get_iface_list *req; + struct be_cmd_resp_get_iface_list *resp; + int status; + + spin_lock_bh(&adapter->mcc_lock); + + wrb = wrb_from_mccq(adapter); + if (!wrb) { + status = -EBUSY; + goto err; + } + req = embedded_payload(wrb); + + be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, + OPCODE_COMMON_GET_IFACE_LIST, sizeof(*resp), + wrb, NULL); + req->hdr.domain = vf_num + 1; + + status = be_mcc_notify_wait(adapter); + if (!status) { + resp = (struct be_cmd_resp_get_iface_list *)req; + vf_cfg->if_handle = le32_to_cpu(resp->if_desc.if_id); + } + +err: + spin_unlock_bh(&adapter->mcc_lock); + return status; +} + /* Uses sync mcc */ int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain) { @@ -3170,6 +3263,31 @@ return status; } +int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable) +{ + struct be_mcc_wrb *wrb; + struct be_cmd_req_intr_set *req; + int status; + + if (mutex_lock_interruptible(&adapter->mbox_lock)) + return -1; + + wrb = wrb_from_mbox(adapter); + + req = embedded_payload(wrb); + + be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, + OPCODE_COMMON_SET_INTERRUPT_ENABLE, sizeof(*req), + wrb, NULL); + + req->intr_enabled = intr_enable; + + status = be_mbox_notify_wait(adapter); + + mutex_unlock(&adapter->mbox_lock); + return status; +} + int be_roce_mcc_cmd(void *netdev_handle, void *wrb_payload, int wrb_payload_size, u16 *cmd_status, u16 *ext_status) { --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_cmds.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_cmds.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or @@ -188,6 +188,7 @@ #define OPCODE_COMMON_GET_BEACON_STATE 70 #define OPCODE_COMMON_READ_TRANSRECV_DATA 73 #define OPCODE_COMMON_GET_PORT_NAME 77 +#define OPCODE_COMMON_SET_INTERRUPT_ENABLE 89 #define OPCODE_COMMON_GET_PHY_DETAILS 102 #define OPCODE_COMMON_SET_DRIVER_FUNCTION_CAP 103 #define OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES 121 @@ -203,6 +204,7 @@ #define OPCODE_COMMON_GET_FN_PRIVILEGES 170 #define OPCODE_COMMON_READ_OBJECT 171 #define OPCODE_COMMON_WRITE_OBJECT 172 +#define OPCODE_COMMON_GET_IFACE_LIST 194 #define OPCODE_COMMON_ENABLE_DISABLE_VF 196 #define OPCODE_ETH_RSS_CONFIG 1 @@ -366,7 +368,7 @@ u8 rsvd5[32]; /* dword 3*/ } __packed; -struct amap_cq_context_lancer { +struct amap_cq_context_v2 { u8 rsvd0[12]; /* dword 0*/ u8 coalescwm[2]; /* dword 0*/ u8 nodelay; /* dword 0*/ @@ -472,46 +474,27 @@ #define BE_ETH_TX_RING_TYPE_STANDARD 2 #define BE_ULP1_NUM 1 -/* Pseudo amap definition in which each bit of the actual structure is defined - * as a byte: used to calculate offset/shift/mask of each field */ -struct amap_tx_context { - u8 if_id[16]; /* dword 0 */ - u8 tx_ring_size[4]; /* dword 0 */ - u8 rsvd1[26]; /* dword 0 */ - u8 pci_func_id[8]; /* dword 1 */ - u8 rsvd2[9]; /* dword 1 */ - u8 ctx_valid; /* dword 1 */ - u8 cq_id_send[16]; /* dword 2 */ - u8 rsvd3[16]; /* dword 2 */ - u8 rsvd4[32]; /* dword 3 */ - u8 rsvd5[32]; /* dword 4 */ - u8 rsvd6[32]; /* dword 5 */ - u8 rsvd7[32]; /* dword 6 */ - u8 rsvd8[32]; /* dword 7 */ - u8 rsvd9[32]; /* dword 8 */ - u8 rsvd10[32]; /* dword 9 */ - u8 rsvd11[32]; /* dword 10 */ - u8 rsvd12[32]; /* dword 11 */ - u8 rsvd13[32]; /* dword 12 */ - u8 rsvd14[32]; /* dword 13 */ - u8 rsvd15[32]; /* dword 14 */ - u8 rsvd16[32]; /* dword 15 */ -} __packed; - struct be_cmd_req_eth_tx_create { struct be_cmd_req_hdr hdr; u8 num_pages; u8 ulp_num; - u8 type; - u8 bound_port; - u8 context[sizeof(struct amap_tx_context) / 8]; + u16 type; + u16 if_id; + u8 queue_size; + u8 rsvd0; + u32 rsvd1; + u16 cq_id; + u16 rsvd2; + u32 rsvd3[13]; struct phys_addr pages[8]; } __packed; struct be_cmd_resp_eth_tx_create { struct be_cmd_resp_hdr hdr; u16 cid; - u16 rsvd0; + u16 rid; + u32 db_offset; + u32 rsvd0[4]; } __packed; /******************** Create RxQ ***************************/ @@ -607,8 +590,8 @@ u32 rx_in_range_errors; /* dword 10*/ u32 rx_out_range_errors; /* dword 11*/ u32 rx_frame_too_long; /* dword 12*/ - u32 rx_address_mismatch_drops; /* dword 13*/ - u32 rx_vlan_mismatch_drops; /* dword 14*/ + u32 rx_address_filtered; /* dword 13*/ + u32 rx_vlan_filtered; /* dword 14*/ u32 rx_dropped_too_small; /* dword 15*/ u32 rx_dropped_too_short; /* dword 16*/ u32 rx_dropped_header_too_small; /* dword 17*/ @@ -814,8 +797,8 @@ u32 rx_control_frames_unknown_opcode_hi; u32 rx_in_range_errors; u32 rx_out_of_range_errors; - u32 rx_address_mismatch_drops; - u32 rx_vlan_mismatch_drops; + u32 rx_address_filtered; + u32 rx_vlan_filtered; u32 rx_dropped_too_small; u32 rx_dropped_too_short; u32 rx_dropped_header_too_small; @@ -1065,7 +1048,6 @@ } __packed; /******************** Get FW Config *******************/ -#define BE_FUNCTION_CAPS_RSS 0x2 /* The HW can come up in either of the following multi-channel modes * based on the skew/IPL. */ @@ -1108,6 +1090,9 @@ #define RSS_ENABLE_UDP_IPV4 0x10 #define RSS_ENABLE_UDP_IPV6 0x20 +#define L3_RSS_FLAGS (RXH_IP_DST | RXH_IP_SRC) +#define L4_RSS_FLAGS (RXH_L4_B_0_1 | RXH_L4_B_2_3) + struct be_cmd_req_rss_config { struct be_cmd_req_hdr hdr; u32 if_id; @@ -1591,7 +1576,7 @@ u32 rx_in_range_errors; u32 rx_out_range_errors; u32 rx_frame_too_long; - u32 rx_address_mismatch_drops; + u32 rx_address_filtered; u32 rx_dropped_too_small; u32 rx_dropped_too_short; u32 rx_dropped_header_too_small; @@ -1705,9 +1690,11 @@ struct be_fat_conf_params set_params; }; -#define RESOURCE_DESC_SIZE 72 -#define NIC_RESOURCE_DESC_TYPE_ID 0x41 +#define RESOURCE_DESC_SIZE 88 +#define NIC_RESOURCE_DESC_TYPE_V0 0x41 +#define NIC_RESOURCE_DESC_TYPE_V1 0x51 #define MAX_RESOURCE_DESC 4 +#define MAX_RESOURCE_DESC_V1 32 /* QOS unit number */ #define QUN 4 @@ -1754,7 +1741,7 @@ }; struct be_cmd_resp_get_func_config { - struct be_cmd_req_hdr hdr; + struct be_cmd_resp_hdr hdr; u32 desc_count; u8 func_param[MAX_RESOURCE_DESC * RESOURCE_DESC_SIZE]; }; @@ -1773,6 +1760,12 @@ u8 func_param[MAX_RESOURCE_DESC * RESOURCE_DESC_SIZE]; }; +struct be_cmd_resp_get_profile_config_v1 { + struct be_cmd_req_hdr hdr; + u32 desc_count; + u8 func_param[MAX_RESOURCE_DESC_V1 * RESOURCE_DESC_SIZE]; +}; + struct be_cmd_req_set_profile_config { struct be_cmd_req_hdr hdr; u32 rsvd; @@ -1790,11 +1783,34 @@ u8 rsvd[3]; }; +struct be_cmd_req_intr_set { + struct be_cmd_req_hdr hdr; + u8 intr_enabled; + u8 rsvd[3]; +}; + static inline bool check_privilege(struct be_adapter *adapter, u32 flags) { return flags & adapter->cmd_privileges ? true : false; } +/************** Get IFACE LIST *******************/ +struct be_if_desc { + u32 if_id; + u32 cap_flags; + u32 en_flags; +}; + +struct be_cmd_req_get_iface_list { + struct be_cmd_req_hdr hdr; +}; + +struct be_cmd_resp_get_iface_list { + struct be_cmd_req_hdr hdr; + u32 if_cnt; + struct be_if_desc if_desc; +}; + extern int be_pci_fnum_get(struct be_adapter *adapter); extern int be_fw_wait_ready(struct be_adapter *adapter); extern int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr, @@ -1816,8 +1832,7 @@ struct be_queue_info *mccq, struct be_queue_info *cq); extern int be_cmd_txq_create(struct be_adapter *adapter, - struct be_queue_info *txq, - struct be_queue_info *cq); + struct be_tx_obj *txo); extern int be_cmd_rxq_create(struct be_adapter *adapter, struct be_queue_info *rxq, u16 cq_id, u16 frag_size, u32 if_id, u32 rss, u8 *rss_id); @@ -1844,11 +1859,11 @@ u32 tx_fc, u32 rx_fc); extern int be_cmd_get_flow_control(struct be_adapter *adapter, u32 *tx_fc, u32 *rx_fc); -extern int be_cmd_query_fw_cfg(struct be_adapter *adapter, - u32 *port_num, u32 *function_mode, u32 *function_caps); +extern int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num, + u32 *function_mode, u32 *function_caps, u16 *asic_rev); extern int be_cmd_reset_function(struct be_adapter *adapter); extern int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, - u16 table_size); + u32 rss_hash_opts, u16 table_size); extern int be_process_mcc(struct be_adapter *adapter); extern int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, u8 beacon, u8 status, u8 state); @@ -1913,8 +1928,11 @@ extern int be_cmd_query_port_name(struct be_adapter *adapter, u8 *port_name); extern int be_cmd_get_func_config(struct be_adapter *adapter); extern int be_cmd_get_profile_config(struct be_adapter *adapter, u32 *cap_flags, - u8 domain); + u16 *txq_count, u8 domain); extern int be_cmd_set_profile_config(struct be_adapter *adapter, u32 bps, u8 domain); +extern int be_cmd_get_if_id(struct be_adapter *adapter, + struct be_vf_cfg *vf_cfg, int vf_num); extern int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain); +extern int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/emulex/benet/be_main.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/emulex/benet/be_main.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005 - 2011 Emulex + * Copyright (C) 2005 - 2013 Emulex * All rights reserved. * * This program is free software; you can redistribute it and/or @@ -153,13 +153,10 @@ return 0; } -static void be_intr_set(struct be_adapter *adapter, bool enable) +static void be_reg_intr_set(struct be_adapter *adapter, bool enable) { u32 reg, enabled; - if (adapter->eeh_error) - return; - pci_read_config_dword(adapter->pdev, PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, ®); enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK; @@ -175,6 +172,22 @@ PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg); } +static void be_intr_set(struct be_adapter *adapter, bool enable) +{ + int status = 0; + + /* On lancer interrupts can't be controlled via this register */ + if (lancer_chip(adapter)) + return; + + if (adapter->eeh_error) + return; + + status = be_cmd_intr_set(adapter, enable); + if (status) + be_reg_intr_set(adapter, enable); +} + static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted) { u32 val = 0; @@ -185,14 +198,15 @@ iowrite32(val, adapter->db + DB_RQ_OFFSET); } -static void be_txq_notify(struct be_adapter *adapter, u16 qid, u16 posted) +static void be_txq_notify(struct be_adapter *adapter, struct be_tx_obj *txo, + u16 posted) { u32 val = 0; - val |= qid & DB_TXULP_RING_ID_MASK; + val |= txo->q.id & DB_TXULP_RING_ID_MASK; val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT; wmb(); - iowrite32(val, adapter->db + DB_TXULP1_OFFSET); + iowrite32(val, adapter->db + txo->db_offset); } static void be_eq_notify(struct be_adapter *adapter, u16 qid, @@ -340,9 +354,9 @@ drvs->rx_input_fifo_overflow_drop = port_stats->rx_input_fifo_overflow; drvs->rx_dropped_header_too_small = port_stats->rx_dropped_header_too_small; - drvs->rx_address_mismatch_drops = - port_stats->rx_address_mismatch_drops + - port_stats->rx_vlan_mismatch_drops; + drvs->rx_address_filtered = + port_stats->rx_address_filtered + + port_stats->rx_vlan_filtered; drvs->rx_alignment_symbol_errors = port_stats->rx_alignment_symbol_errors; @@ -391,12 +405,13 @@ port_stats->rx_dropped_header_too_small; drvs->rx_input_fifo_overflow_drop = port_stats->rx_input_fifo_overflow_drop; - drvs->rx_address_mismatch_drops = port_stats->rx_address_mismatch_drops; + drvs->rx_address_filtered = port_stats->rx_address_filtered; drvs->rx_alignment_symbol_errors = port_stats->rx_alignment_symbol_errors; drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop; drvs->tx_pauseframes = port_stats->tx_pauseframes; drvs->tx_controlframes = port_stats->tx_controlframes; + drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes; drvs->jabber_events = port_stats->jabber_events; drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf; drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr; @@ -432,9 +447,9 @@ drvs->rx_dropped_header_too_small = pport_stats->rx_dropped_header_too_small; drvs->rx_input_fifo_overflow_drop = pport_stats->rx_fifo_overflow; - drvs->rx_address_mismatch_drops = - pport_stats->rx_address_mismatch_drops + - pport_stats->rx_vlan_mismatch_drops; + drvs->rx_address_filtered = + pport_stats->rx_address_filtered + + pport_stats->rx_vlan_filtered; drvs->rx_alignment_symbol_errors = pport_stats->rx_symbol_errors_lo; drvs->rxpp_fifo_overflow_drop = pport_stats->rx_fifo_overflow; drvs->tx_pauseframes = pport_stats->tx_pause_frames_lo; @@ -458,11 +473,26 @@ ACCESS_ONCE(*acc) = newacc; } +void populate_erx_stats(struct be_adapter *adapter, + struct be_rx_obj *rxo, + u32 erx_stat) +{ + if (!BEx_chip(adapter)) + rx_stats(rxo)->rx_drops_no_frags = erx_stat; + else + /* below erx HW counter can actually wrap around after + * 65535. Driver accumulates a 32-bit value + */ + accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags, + (u16)erx_stat); +} + void be_parse_stats(struct be_adapter *adapter) { struct be_erx_stats_v1 *erx = be_erx_stats_from_cmd(adapter); struct be_rx_obj *rxo; int i; + u32 erx_stat; if (lancer_chip(adapter)) { populate_lancer_stats(adapter); @@ -475,12 +505,8 @@ /* as erx_v1 is longer than v0, ok to use v1 for v0 access */ for_all_rx_queues(adapter, rxo, i) { - /* below erx HW counter can actually wrap around after - * 65535. Driver accumulates a 32-bit value - */ - accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags, - (u16)erx->rx_drops_no_fragments \ - [rxo->q.id]); + erx_stat = erx->rx_drops_no_fragments[rxo->q.id]; + populate_erx_stats(adapter, rxo, erx_stat); } } } @@ -759,8 +785,9 @@ if (vlan_tx_tag_present(skb)) { vlan_tag = be_get_tx_vlan_tag(adapter, skb); - __vlan_put_tag(skb, vlan_tag); - skb->vlan_tci = 0; + skb = __vlan_put_tag(skb, vlan_tag); + if (skb) + skb->vlan_tci = 0; } return skb; @@ -821,7 +848,7 @@ stopped = true; } - be_txq_notify(adapter, txq->id, wrb_cnt); + be_txq_notify(adapter, txo, wrb_cnt); be_tx_stats_update(txo, wrb_cnt, copied, gso_segs, stopped); } else { @@ -1957,7 +1984,7 @@ if (status) return status; - status = be_cmd_txq_create(adapter, &txo->q, &txo->cq); + status = be_cmd_txq_create(adapter, txo); if (status) return status; } @@ -2277,7 +2304,7 @@ return num; } -static void be_msix_enable(struct be_adapter *adapter) +static int be_msix_enable(struct be_adapter *adapter) { #define BE_MIN_MSIX_VECTORS 1 int i, status, num_vec, num_roce_vec = 0; @@ -2302,13 +2329,17 @@ goto done; } else if (status >= BE_MIN_MSIX_VECTORS) { num_vec = status; - if (pci_enable_msix(adapter->pdev, adapter->msix_entries, - num_vec) == 0) + status = pci_enable_msix(adapter->pdev, adapter->msix_entries, + num_vec); + if (!status) goto done; } dev_warn(dev, "MSIx enable failed\n"); - return; + /* INTx is not supported in VFs, so fail probe if enable_msix fails */ + if (!be_physfn(adapter)) + return status; + return 0; done: if (be_roce_supported(adapter)) { if (num_vec > num_roce_vec) { @@ -2322,7 +2353,7 @@ } else adapter->num_msix_vec = num_vec; dev_info(dev, "enabled %d MSI-x vector(s)\n", adapter->num_msix_vec); - return; + return 0; } static inline int be_msix_vec_get(struct be_adapter *adapter, @@ -2435,11 +2466,11 @@ be_roce_dev_close(adapter); - if (!lancer_chip(adapter)) - be_intr_set(adapter, false); - - for_all_evt_queues(adapter, eqo, i) - napi_disable(&eqo->napi); + if (adapter->flags & BE_FLAGS_NAPI_ENABLED) { + for_all_evt_queues(adapter, eqo, i) + napi_disable(&eqo->napi); + adapter->flags &= ~BE_FLAGS_NAPI_ENABLED; + } be_async_mcc_disable(adapter); @@ -2499,9 +2530,19 @@ rsstable[j + i] = rxo->rss_id; } } - rc = be_cmd_rss_config(adapter, rsstable, 128); - if (rc) + adapter->rss_flags = RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 | + RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6; + + if (!BEx_chip(adapter)) + adapter->rss_flags |= RSS_ENABLE_UDP_IPV4 | + RSS_ENABLE_UDP_IPV6; + + rc = be_cmd_rss_config(adapter, rsstable, adapter->rss_flags, + 128); + if (rc) { + adapter->rss_flags = 0; return rc; + } } /* First time posting */ @@ -2523,10 +2564,9 @@ if (status) goto err; - be_irq_register(adapter); - - if (!lancer_chip(adapter)) - be_intr_set(adapter, true); + status = be_irq_register(adapter); + if (status) + goto err; for_all_rx_queues(adapter, rxo, i) be_cq_notify(adapter, rxo->cq.id, true, 0); @@ -2540,6 +2580,7 @@ napi_enable(&eqo->napi); be_eq_notify(adapter, eqo->q.id, true, false, 0); } + adapter->flags |= BE_FLAGS_NAPI_ENABLED; status = be_cmd_link_status_query(adapter, NULL, &link_status, 0); if (!status) @@ -2597,7 +2638,7 @@ * These addresses are programmed in the ASIC by the PF and the VF driver * queries for the MAC address during its probe. */ -static inline int be_vf_eth_addr_config(struct be_adapter *adapter) +static int be_vf_eth_addr_config(struct be_adapter *adapter) { u32 vf; int status = 0; @@ -2626,13 +2667,34 @@ return status; } +static int be_vfs_mac_query(struct be_adapter *adapter) +{ + int status, vf; + u8 mac[ETH_ALEN]; + struct be_vf_cfg *vf_cfg; + bool active; + + for_all_vfs(adapter, vf_cfg, vf) { + be_cmd_get_mac_from_list(adapter, mac, &active, + &vf_cfg->pmac_id, 0); + + status = be_cmd_mac_addr_query(adapter, mac, false, + vf_cfg->if_handle, 0); + if (status) + return status; + memcpy(vf_cfg->mac_addr, mac, ETH_ALEN); + } + return 0; +} + static void be_vf_clear(struct be_adapter *adapter) { struct be_vf_cfg *vf_cfg; u32 vf; if (be_find_vfs(adapter, ASSIGNED)) { - dev_warn(&adapter->pdev->dev, "VFs are assigned to VMs\n"); + dev_warn(&adapter->pdev->dev, + "VFs are assigned to VMs: not disabling VFs\n"); goto done; } @@ -2681,21 +2743,30 @@ return 0; } -static void be_get_vf_if_cap_flags(struct be_adapter *adapter, - u32 *cap_flags, u8 domain) +static int be_vfs_if_create(struct be_adapter *adapter) { - bool profile_present = false; + struct be_vf_cfg *vf_cfg; + u32 cap_flags, en_flags, vf; int status; - if (lancer_chip(adapter)) { - status = be_cmd_get_profile_config(adapter, cap_flags, domain); - if (!status) - profile_present = true; - } + cap_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST | + BE_IF_FLAGS_MULTICAST; + + for_all_vfs(adapter, vf_cfg, vf) { + if (!BE3_chip(adapter)) + be_cmd_get_profile_config(adapter, &cap_flags, + NULL, vf + 1); - if (!profile_present) - *cap_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST | - BE_IF_FLAGS_MULTICAST; + /* If a FW profile exists, then cap_flags are updated */ + en_flags = cap_flags & (BE_IF_FLAGS_UNTAGGED | + BE_IF_FLAGS_BROADCAST | BE_IF_FLAGS_MULTICAST); + status = be_cmd_if_create(adapter, cap_flags, en_flags, + &vf_cfg->if_handle, vf + 1); + if (status) + goto err; + } +err: + return status; } static int be_vf_setup_init(struct be_adapter *adapter) @@ -2718,65 +2789,70 @@ static int be_vf_setup(struct be_adapter *adapter) { struct be_vf_cfg *vf_cfg; - struct device *dev = &adapter->pdev->dev; - u32 cap_flags, en_flags, vf; u16 def_vlan, lnk_speed; - int status, enabled_vfs; - - enabled_vfs = be_find_vfs(adapter, ENABLED); - if (enabled_vfs) { - dev_warn(dev, "%d VFs are already enabled\n", enabled_vfs); - dev_warn(dev, "Ignoring num_vfs=%d setting\n", num_vfs); - return 0; - } - - if (num_vfs > adapter->dev_num_vfs) { - dev_warn(dev, "Device supports %d VFs and not %d\n", - adapter->dev_num_vfs, num_vfs); - num_vfs = adapter->dev_num_vfs; - } + int status, old_vfs, vf; + struct device *dev = &adapter->pdev->dev; - status = pci_enable_sriov(adapter->pdev, num_vfs); - if (!status) { - adapter->num_vfs = num_vfs; + old_vfs = be_find_vfs(adapter, ENABLED); + if (old_vfs) { + dev_info(dev, "%d VFs are already enabled\n", old_vfs); + if (old_vfs != num_vfs) + dev_warn(dev, "Ignoring num_vfs=%d setting\n", num_vfs); + adapter->num_vfs = old_vfs; } else { - /* Platform doesn't support SRIOV though device supports it */ - dev_warn(dev, "SRIOV enable failed\n"); - return 0; + if (num_vfs > adapter->dev_num_vfs) + dev_info(dev, "Device supports %d VFs and not %d\n", + adapter->dev_num_vfs, num_vfs); + adapter->num_vfs = min_t(u16, num_vfs, adapter->dev_num_vfs); + + status = pci_enable_sriov(adapter->pdev, num_vfs); + if (status) { + dev_err(dev, "SRIOV enable failed\n"); + adapter->num_vfs = 0; + return 0; + } } status = be_vf_setup_init(adapter); if (status) goto err; - for_all_vfs(adapter, vf_cfg, vf) { - be_get_vf_if_cap_flags(adapter, &cap_flags, vf + 1); - - en_flags = cap_flags & (BE_IF_FLAGS_UNTAGGED | - BE_IF_FLAGS_BROADCAST | - BE_IF_FLAGS_MULTICAST); - - status = be_cmd_if_create(adapter, cap_flags, en_flags, - &vf_cfg->if_handle, vf + 1); + if (old_vfs) { + for_all_vfs(adapter, vf_cfg, vf) { + status = be_cmd_get_if_id(adapter, vf_cfg, vf); + if (status) + goto err; + } + } else { + status = be_vfs_if_create(adapter); if (status) goto err; } - if (!enabled_vfs) { + if (old_vfs) { + status = be_vfs_mac_query(adapter); + if (status) + goto err; + } else { status = be_vf_eth_addr_config(adapter); if (status) goto err; } for_all_vfs(adapter, vf_cfg, vf) { - lnk_speed = 1000; - status = be_cmd_set_qos(adapter, lnk_speed, vf + 1); - if (status) - goto err; - vf_cfg->tx_rate = lnk_speed * 10; + /* BE3 FW, by default, caps VF TX-rate to 100mbps. + * Allow full available bandwidth + */ + if (BE3_chip(adapter) && !old_vfs) + be_cmd_set_qos(adapter, 1000, vf+1); + + status = be_cmd_link_status_query(adapter, &lnk_speed, + NULL, vf + 1); + if (!status) + vf_cfg->tx_rate = lnk_speed; status = be_cmd_get_hsw_config(adapter, &def_vlan, - vf + 1, vf_cfg->if_handle); + vf + 1, vf_cfg->if_handle); if (status) goto err; vf_cfg->def_vid = def_vlan; @@ -2785,6 +2861,8 @@ } return 0; err: + dev_err(dev, "VF setup failed\n"); + be_vf_clear(adapter); return status; } @@ -2838,14 +2916,17 @@ static void be_get_resources(struct be_adapter *adapter) { - int status; + u16 dev_num_vfs; + int pos, status; bool profile_present = false; + u16 txq_count = 0; - if (lancer_chip(adapter)) { + if (!BEx_chip(adapter)) { status = be_cmd_get_func_config(adapter); - if (!status) profile_present = true; + } else if (BE3_chip(adapter) && be_physfn(adapter)) { + be_cmd_get_profile_config(adapter, NULL, &txq_count, 0); } if (profile_present) { @@ -2883,7 +2964,9 @@ adapter->max_vlans = BE_NUM_VLANS_SUPPORTED; adapter->max_mcast_mac = BE_MAX_MC; - adapter->max_tx_queues = MAX_TX_QS; + adapter->max_tx_queues = txq_count ? txq_count : MAX_TX_QS; + adapter->max_tx_queues = min_t(u16, adapter->max_tx_queues, + MAX_TX_QS); adapter->max_rss_queues = (adapter->be3_native) ? BE3_MAX_RSS_QS : BE2_MAX_RSS_QS; adapter->max_event_queues = BE3_MAX_RSS_QS; @@ -2899,17 +2982,26 @@ if (adapter->function_caps & BE_FUNCTION_CAPS_RSS) adapter->if_cap_flags |= BE_IF_FLAGS_RSS; } + + pos = pci_find_ext_capability(adapter->pdev, PCI_EXT_CAP_ID_SRIOV); + if (pos) { + pci_read_config_word(adapter->pdev, pos + PCI_SRIOV_TOTAL_VF, + &dev_num_vfs); + if (BE3_chip(adapter)) + dev_num_vfs = min_t(u16, dev_num_vfs, MAX_VFS); + adapter->dev_num_vfs = dev_num_vfs; + } } /* Routine to query per function resource limits */ static int be_get_config(struct be_adapter *adapter) { - int pos, status; - u16 dev_num_vfs; + int status; status = be_cmd_query_fw_cfg(adapter, &adapter->port_num, &adapter->function_mode, - &adapter->function_caps); + &adapter->function_caps, + &adapter->asic_rev); if (status) goto err; @@ -2923,14 +3015,6 @@ goto err; } - pos = pci_find_ext_capability(adapter->pdev, PCI_EXT_CAP_ID_SRIOV); - if (pos) { - pci_read_config_word(adapter->pdev, pos + PCI_SRIOV_TOTAL_VF, - &dev_num_vfs); - if (!lancer_chip(adapter)) - dev_num_vfs = min_t(u16, dev_num_vfs, MAX_VFS); - adapter->dev_num_vfs = dev_num_vfs; - } err: return status; } @@ -2953,7 +3037,9 @@ if (status) goto err; - be_msix_enable(adapter); + status = be_msix_enable(adapter); + if (status) + goto err; status = be_evt_queues_create(adapter); if (status) @@ -3178,7 +3264,7 @@ return 0; } -/* For BE2 and BE3 */ +/* For BE2, BE3 and BE3-R */ static int be_flash_BEx(struct be_adapter *adapter, const struct firmware *fw, struct be_dma_mem *flash_cmd, @@ -3493,18 +3579,22 @@ #define UFI_TYPE2 2 #define UFI_TYPE3 3 +#define UFI_TYPE3R 10 #define UFI_TYPE4 4 static int be_get_ufi_type(struct be_adapter *adapter, - struct flash_file_hdr_g2 *fhdr) + struct flash_file_hdr_g3 *fhdr) { if (fhdr == NULL) goto be_get_ufi_exit; if (skyhawk_chip(adapter) && fhdr->build[0] == '4') return UFI_TYPE4; - else if (BE3_chip(adapter) && fhdr->build[0] == '3') - return UFI_TYPE3; - else if (BE2_chip(adapter) && fhdr->build[0] == '2') + else if (BE3_chip(adapter) && fhdr->build[0] == '3') { + if (fhdr->asic_type_rev == 0x10) + return UFI_TYPE3R; + else + return UFI_TYPE3; + } else if (BE2_chip(adapter) && fhdr->build[0] == '2') return UFI_TYPE2; be_get_ufi_exit: @@ -3515,7 +3605,6 @@ static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw) { - struct flash_file_hdr_g2 *fhdr; struct flash_file_hdr_g3 *fhdr3; struct image_hdr *img_hdr_ptr = NULL; struct be_dma_mem flash_cmd; @@ -3533,23 +3622,37 @@ } p = fw->data; - fhdr = (struct flash_file_hdr_g2 *)p; + fhdr3 = (struct flash_file_hdr_g3 *)p; - ufi_type = be_get_ufi_type(adapter, fhdr); + ufi_type = be_get_ufi_type(adapter, fhdr3); - fhdr3 = (struct flash_file_hdr_g3 *)fw->data; num_imgs = le32_to_cpu(fhdr3->num_imgs); for (i = 0; i < num_imgs; i++) { img_hdr_ptr = (struct image_hdr *)(fw->data + (sizeof(struct flash_file_hdr_g3) + i * sizeof(struct image_hdr))); if (le32_to_cpu(img_hdr_ptr->imageid) == 1) { - if (ufi_type == UFI_TYPE4) + switch (ufi_type) { + case UFI_TYPE4: status = be_flash_skyhawk(adapter, fw, &flash_cmd, num_imgs); - else if (ufi_type == UFI_TYPE3) + break; + case UFI_TYPE3R: status = be_flash_BEx(adapter, fw, &flash_cmd, num_imgs); + break; + case UFI_TYPE3: + /* Do not flash this ufi on BE3-R cards */ + if (adapter->asic_rev < 0x10) + status = be_flash_BEx(adapter, fw, + &flash_cmd, + num_imgs); + else { + status = -1; + dev_err(&adapter->pdev->dev, + "Can't load BE3 UFI on BE3R\n"); + } + } } } @@ -3652,6 +3755,8 @@ static void be_unmap_pci_bars(struct be_adapter *adapter) { + if (adapter->csr) + pci_iounmap(adapter->pdev, adapter->csr); if (adapter->db) pci_iounmap(adapter->pdev, adapter->db); } @@ -3685,6 +3790,12 @@ adapter->if_type = (sli_intf & SLI_INTF_IF_TYPE_MASK) >> SLI_INTF_IF_TYPE_SHIFT; + if (BEx_chip(adapter) && be_physfn(adapter)) { + adapter->csr = pci_iomap(adapter->pdev, 2, 0); + if (adapter->csr == NULL) + return -ENOMEM; + } + addr = pci_iomap(adapter->pdev, db_bar(adapter), 0); if (addr == NULL) goto pci_map_err; @@ -3809,6 +3920,7 @@ return; be_roce_dev_remove(adapter); + be_intr_set(adapter, false); cancel_delayed_work_sync(&adapter->func_recovery_work); @@ -4063,6 +4175,11 @@ status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); if (!status) { + status = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); + if (status < 0) { + dev_err(&pdev->dev, "dma_set_coherent_mask failed\n"); + goto free_netdev; + } netdev->features |= NETIF_F_HIGHDMA; } else { status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); @@ -4087,22 +4204,22 @@ goto ctrl_clean; } - /* tell fw we're ready to fire cmds */ - status = be_cmd_fw_init(adapter); - if (status) - goto ctrl_clean; - if (be_reset_required(adapter)) { status = be_cmd_reset_function(adapter); if (status) goto ctrl_clean; + + /* Wait for interrupts to quiesce after an FLR */ + msleep(100); } - /* The INTR bit may be set in the card when probed by a kdump kernel - * after a crash. - */ - if (!lancer_chip(adapter)) - be_intr_set(adapter, false); + /* Allow interrupts for other ULPs running on NIC function */ + be_intr_set(adapter, true); + + /* tell fw we're ready to fire cmds */ + status = be_cmd_fw_init(adapter); + if (status) + goto ctrl_clean; status = be_stats_init(adapter); if (status) @@ -4293,6 +4410,8 @@ pci_restore_state(pdev); /* Check if card is ok and fw is ready */ + dev_info(&adapter->pdev->dev, + "Waiting for FW to be ready after EEH reset\n"); status = be_fw_wait_ready(adapter); if (status) return PCI_ERS_RESULT_DISCONNECT; @@ -4311,12 +4430,12 @@ pci_save_state(pdev); - /* tell fw we're ready to fire cmds */ - status = be_cmd_fw_init(adapter); + status = be_cmd_reset_function(adapter); if (status) goto err; - status = be_cmd_reset_function(adapter); + /* tell fw we're ready to fire cmds */ + status = be_cmd_fw_init(adapter); if (status) goto err; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/marvell/Kconfig +++ linux-lts-raring-3.8.0/drivers/net/ethernet/marvell/Kconfig @@ -33,6 +33,7 @@ config MVMDIO tristate "Marvell MDIO interface support" + select PHYLIB ---help--- This driver supports the MDIO interface found in the network interface units of the Marvell EBU SoCs (Kirkwood, Orion5x, @@ -45,7 +46,6 @@ config MVNETA tristate "Marvell Armada 370/XP network interface support" depends on MACH_ARMADA_370_XP - select PHYLIB select MVMDIO ---help--- This driver supports the network interface units in the --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/marvell/sky2.h +++ linux-lts-raring-3.8.0/drivers/net/ethernet/marvell/sky2.h @@ -2074,7 +2074,7 @@ GM_IS_RX_FF_OR = 1<<1, /* Receive FIFO Overrun */ GM_IS_RX_COMPL = 1<<0, /* Frame Reception Complete */ -#define GMAC_DEF_MSK GM_IS_TX_FF_UR +#define GMAC_DEF_MSK (GM_IS_TX_FF_UR | GM_IS_RX_FF_OR) }; /* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */ --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/marvell/sky2.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/marvell/sky2.c @@ -1067,7 +1067,7 @@ sky2_write32(hw, RB_ADDR(q, RB_RX_UTHP), tp); sky2_write32(hw, RB_ADDR(q, RB_RX_LTHP), space/2); - tp = space - 2048/8; + tp = space - 8192/8; sky2_write32(hw, RB_ADDR(q, RB_RX_UTPP), tp); sky2_write32(hw, RB_ADDR(q, RB_RX_LTPP), space/4); } else { --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/marvell/mvneta.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/marvell/mvneta.c @@ -137,7 +137,9 @@ #define MVNETA_GMAC_FORCE_LINK_PASS BIT(1) #define MVNETA_GMAC_CONFIG_MII_SPEED BIT(5) #define MVNETA_GMAC_CONFIG_GMII_SPEED BIT(6) +#define MVNETA_GMAC_AN_SPEED_EN BIT(7) #define MVNETA_GMAC_CONFIG_FULL_DUPLEX BIT(12) +#define MVNETA_GMAC_AN_DUPLEX_EN BIT(13) #define MVNETA_MIB_COUNTERS_BASE 0x3080 #define MVNETA_MIB_LATE_COLLISION 0x7c #define MVNETA_DA_FILT_SPEC_MCAST 0x3400 @@ -375,7 +377,6 @@ static int txq_number = 8; static int rxq_def; -static int txq_def; #define MVNETA_DRIVER_NAME "mvneta" #define MVNETA_DRIVER_VERSION "1.0" @@ -913,6 +914,13 @@ /* Assign port SDMA configuration */ mvreg_write(pp, MVNETA_SDMA_CONFIG, val); + /* Disable PHY polling in hardware, since we're using the + * kernel phylib to do this. + */ + val = mvreg_read(pp, MVNETA_UNIT_CONTROL); + val &= ~MVNETA_PHY_POLLING_ENABLE; + mvreg_write(pp, MVNETA_UNIT_CONTROL, val); + mvneta_set_ucast_table(pp, -1); mvneta_set_special_mcast_table(pp, -1); mvneta_set_other_mcast_table(pp, -1); @@ -1476,7 +1484,8 @@ static int mvneta_tx(struct sk_buff *skb, struct net_device *dev) { struct mvneta_port *pp = netdev_priv(dev); - struct mvneta_tx_queue *txq = &pp->txqs[txq_def]; + u16 txq_id = skb_get_queue_mapping(skb); + struct mvneta_tx_queue *txq = &pp->txqs[txq_id]; struct mvneta_tx_desc *tx_desc; struct netdev_queue *nq; int frags = 0; @@ -1486,7 +1495,7 @@ goto out; frags = skb_shinfo(skb)->nr_frags + 1; - nq = netdev_get_tx_queue(dev, txq_def); + nq = netdev_get_tx_queue(dev, txq_id); /* Get a descriptor for the first part of the packet */ tx_desc = mvneta_txq_next_desc_get(txq); @@ -2299,7 +2308,9 @@ val = mvreg_read(pp, MVNETA_GMAC_AUTONEG_CONFIG); val &= ~(MVNETA_GMAC_CONFIG_MII_SPEED | MVNETA_GMAC_CONFIG_GMII_SPEED | - MVNETA_GMAC_CONFIG_FULL_DUPLEX); + MVNETA_GMAC_CONFIG_FULL_DUPLEX | + MVNETA_GMAC_AN_SPEED_EN | + MVNETA_GMAC_AN_DUPLEX_EN); if (phydev->duplex) val |= MVNETA_GMAC_CONFIG_FULL_DUPLEX; @@ -2690,7 +2701,7 @@ return -EINVAL; } - dev = alloc_etherdev_mq(sizeof(struct mvneta_port), 8); + dev = alloc_etherdev_mqs(sizeof(struct mvneta_port), txq_number, rxq_number); if (!dev) return -ENOMEM; @@ -2844,4 +2855,3 @@ module_param(txq_number, int, S_IRUGO); module_param(rxq_def, int, S_IRUGO); -module_param(txq_def, int, S_IRUGO); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/freescale/gianfar_ptp.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/freescale/gianfar_ptp.c @@ -127,7 +127,6 @@ #define DRIVER "gianfar_ptp" #define DEFAULT_CKSEL 1 -#define N_ALARM 1 /* first alarm is used internally to reset fipers */ #define N_EXT_TS 2 #define REG_SIZE sizeof(struct gianfar_ptp_registers) @@ -410,7 +409,7 @@ .owner = THIS_MODULE, .name = "gianfar clock", .max_adj = 512000, - .n_alarm = N_ALARM, + .n_alarm = 0, .n_ext_ts = N_EXT_TS, .n_per_out = 0, .pps = 1, @@ -522,6 +521,7 @@ return 0; no_clock: + iounmap(etsects->regs); no_ioremap: release_resource(etsects->rsrc); no_resource: --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/freescale/fec_ptp.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/freescale/fec_ptp.c @@ -128,6 +128,7 @@ spin_unlock_irqrestore(&fep->tmreg_lock, flags); } +EXPORT_SYMBOL(fec_ptp_start_cyclecounter); /** * fec_ptp_adjfreq - adjust ptp cycle frequency @@ -318,6 +319,7 @@ return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ? -EFAULT : 0; } +EXPORT_SYMBOL(fec_ptp_ioctl); /** * fec_time_keep - call timecounter_read every second to avoid timer overrun @@ -381,3 +383,4 @@ pr_info("registered PHC device on %s\n", ndev->name); } } +EXPORT_SYMBOL(fec_ptp_init); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/tile/tilegx.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/tile/tilegx.c @@ -930,7 +930,7 @@ if (info->has_iqueue) { gxio_mpipe_request_notif_ring_interrupt( &context, cpu_x(cpu), cpu_y(cpu), - 1, ingress_irq, info->iqueue.ring); + KERNEL_PL, ingress_irq, info->iqueue.ring); } } --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/ti/cpsw.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/ti/cpsw.c @@ -375,7 +375,7 @@ struct cpsw_priv *priv = netdev_priv(ndev); if (unlikely(netif_queue_stopped(ndev))) - netif_start_queue(ndev); + netif_wake_queue(ndev); cpts_tx_timestamp(&priv->cpts, skb); priv->stats.tx_packets++; priv->stats.tx_bytes += len; @@ -1111,7 +1111,7 @@ struct platform_device *mdio; parp = of_get_property(slave_node, "phy_id", &lenp); - if ((parp == NULL) && (lenp != (sizeof(void *) * 2))) { + if ((parp == NULL) || (lenp != (sizeof(void *) * 2))) { pr_err("Missing slave[%d] phy_id property\n", i); ret = -EINVAL; goto error_ret; --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/ti/davinci_emac.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/ti/davinci_emac.c @@ -1055,7 +1055,7 @@ atomic_dec(&priv->cur_tx); if (unlikely(netif_queue_stopped(ndev))) - netif_start_queue(ndev); + netif_wake_queue(ndev); ndev->stats.tx_packets++; ndev->stats.tx_bytes += len; dev_kfree_skb_any(skb); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/micrel/ks8851.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/micrel/ks8851.c @@ -547,7 +547,7 @@ for (; rxfc != 0; rxfc--) { rxh = ks8851_rdreg32(ks, KS_RXFHSR); rxstat = rxh & 0xffff; - rxlen = rxh >> 16; + rxlen = (rxh >> 16) & 0xfff; netif_dbg(ks, rx_status, ks->netdev, "rx: stat 0x%04x, len 0x%04x\n", rxstat, rxlen); --- linux-lts-raring-3.8.0.orig/drivers/net/ethernet/sun/sunvnet.c +++ linux-lts-raring-3.8.0/drivers/net/ethernet/sun/sunvnet.c @@ -1242,6 +1242,8 @@ dev_set_drvdata(&vdev->dev, NULL); kfree(port); + + unregister_netdev(vp->dev); } return 0; } --- linux-lts-raring-3.8.0.orig/drivers/net/arcnet/arcnet.c +++ linux-lts-raring-3.8.0/drivers/net/arcnet/arcnet.c @@ -1007,7 +1007,7 @@ soft = &pkt.soft.rfc1201; - lp->hw.copy_from_card(dev, bufnum, 0, &pkt, sizeof(ARC_HDR_SIZE)); + lp->hw.copy_from_card(dev, bufnum, 0, &pkt, ARC_HDR_SIZE); if (pkt.hard.offset[0]) { ofs = pkt.hard.offset[0]; length = 256 - ofs; --- linux-lts-raring-3.8.0.orig/drivers/net/bonding/bond_sysfs.c +++ linux-lts-raring-3.8.0/drivers/net/bonding/bond_sysfs.c @@ -183,6 +183,11 @@ sprintf(linkname, "slave_%s", slave->name); ret = sysfs_create_link(&(master->dev.kobj), &(slave->dev.kobj), linkname); + + /* free the master link created earlier in case of error */ + if (ret) + sysfs_remove_link(&(slave->dev.kobj), "master"); + return ret; } @@ -522,7 +527,7 @@ goto out; } if (new_value < 0) { - pr_err("%s: Invalid arp_interval value %d not in range 1-%d; rejected.\n", + pr_err("%s: Invalid arp_interval value %d not in range 0-%d; rejected.\n", bond->dev->name, new_value, INT_MAX); ret = -EINVAL; goto out; @@ -537,14 +542,15 @@ pr_info("%s: Setting ARP monitoring interval to %d.\n", bond->dev->name, new_value); bond->params.arp_interval = new_value; - if (bond->params.miimon) { - pr_info("%s: ARP monitoring cannot be used with MII monitoring. %s Disabling MII monitoring.\n", - bond->dev->name, bond->dev->name); - bond->params.miimon = 0; - } - if (!bond->params.arp_targets[0]) { - pr_info("%s: ARP monitoring has been set up, but no ARP targets have been specified.\n", - bond->dev->name); + if (new_value) { + if (bond->params.miimon) { + pr_info("%s: ARP monitoring cannot be used with MII monitoring. %s Disabling MII monitoring.\n", + bond->dev->name, bond->dev->name); + bond->params.miimon = 0; + } + if (!bond->params.arp_targets[0]) + pr_info("%s: ARP monitoring has been set up, but no ARP targets have been specified.\n", + bond->dev->name); } if (bond->dev->flags & IFF_UP) { /* If the interface is up, we may need to fire off @@ -552,10 +558,13 @@ * timer will get fired off when the open function * is called. */ - cancel_delayed_work_sync(&bond->mii_work); - queue_delayed_work(bond->wq, &bond->arp_work, 0); + if (!new_value) { + cancel_delayed_work_sync(&bond->arp_work); + } else { + cancel_delayed_work_sync(&bond->mii_work); + queue_delayed_work(bond->wq, &bond->arp_work, 0); + } } - out: rtnl_unlock(); return ret; @@ -697,7 +706,7 @@ } if (new_value < 0) { pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n", - bond->dev->name, new_value, 1, INT_MAX); + bond->dev->name, new_value, 0, INT_MAX); ret = -EINVAL; goto out; } else { @@ -752,8 +761,8 @@ goto out; } if (new_value < 0) { - pr_err("%s: Invalid down delay value %d not in range %d-%d; rejected.\n", - bond->dev->name, new_value, 1, INT_MAX); + pr_err("%s: Invalid up delay value %d not in range %d-%d; rejected.\n", + bond->dev->name, new_value, 0, INT_MAX); ret = -EINVAL; goto out; } else { @@ -963,37 +972,37 @@ } if (new_value < 0) { pr_err("%s: Invalid miimon value %d not in range %d-%d; rejected.\n", - bond->dev->name, new_value, 1, INT_MAX); + bond->dev->name, new_value, 0, INT_MAX); ret = -EINVAL; goto out; - } else { - pr_info("%s: Setting MII monitoring interval to %d.\n", - bond->dev->name, new_value); - bond->params.miimon = new_value; - if (bond->params.updelay) - pr_info("%s: Note: Updating updelay (to %d) since it is a multiple of the miimon value.\n", - bond->dev->name, - bond->params.updelay * bond->params.miimon); - if (bond->params.downdelay) - pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n", - bond->dev->name, - bond->params.downdelay * bond->params.miimon); - if (bond->params.arp_interval) { - pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n", - bond->dev->name); - bond->params.arp_interval = 0; - if (bond->params.arp_validate) { - bond->params.arp_validate = - BOND_ARP_VALIDATE_NONE; - } - } - - if (bond->dev->flags & IFF_UP) { - /* If the interface is up, we may need to fire off - * the MII timer. If the interface is down, the - * timer will get fired off when the open function - * is called. - */ + } + pr_info("%s: Setting MII monitoring interval to %d.\n", + bond->dev->name, new_value); + bond->params.miimon = new_value; + if (bond->params.updelay) + pr_info("%s: Note: Updating updelay (to %d) since it is a multiple of the miimon value.\n", + bond->dev->name, + bond->params.updelay * bond->params.miimon); + if (bond->params.downdelay) + pr_info("%s: Note: Updating downdelay (to %d) since it is a multiple of the miimon value.\n", + bond->dev->name, + bond->params.downdelay * bond->params.miimon); + if (new_value && bond->params.arp_interval) { + pr_info("%s: MII monitoring cannot be used with ARP monitoring. Disabling ARP monitoring...\n", + bond->dev->name); + bond->params.arp_interval = 0; + if (bond->params.arp_validate) + bond->params.arp_validate = BOND_ARP_VALIDATE_NONE; + } + if (bond->dev->flags & IFF_UP) { + /* If the interface is up, we may need to fire off + * the MII timer. If the interface is down, the + * timer will get fired off when the open function + * is called. + */ + if (!new_value) { + cancel_delayed_work_sync(&bond->mii_work); + } else { cancel_delayed_work_sync(&bond->arp_work); queue_delayed_work(bond->wq, &bond->mii_work, 0); } --- linux-lts-raring-3.8.0.orig/drivers/net/bonding/bond_main.c +++ linux-lts-raring-3.8.0/drivers/net/bonding/bond_main.c @@ -1728,6 +1728,8 @@ bond_compute_features(bond); + bond_update_speed_duplex(new_slave); + read_lock(&bond->lock); new_slave->last_arp_rx = jiffies - @@ -1780,8 +1782,6 @@ new_slave->link == BOND_LINK_DOWN ? "DOWN" : (new_slave->link == BOND_LINK_UP ? "UP" : "BACK")); - bond_update_speed_duplex(new_slave); - if (USES_PRIMARY(bond->params.mode) && bond->params.primary[0]) { /* if there is a primary slave, remember it */ if (strcmp(bond->params.primary, new_slave->dev->name) == 0) { @@ -1888,6 +1888,7 @@ write_unlock_bh(&bond->lock); err_close: + slave_dev->priv_flags &= ~IFF_BONDING; dev_close(slave_dev); err_unset_master: @@ -1943,7 +1944,6 @@ } block_netpoll_tx(); - call_netdevice_notifiers(NETDEV_RELEASE, bond_dev); write_lock_bh(&bond->lock); slave = bond_get_slave_by_dev(bond, slave_dev); @@ -1956,12 +1956,11 @@ return -EINVAL; } + write_unlock_bh(&bond->lock); /* unregister rx_handler early so bond_handle_frame wouldn't be called * for this slave anymore. */ netdev_rx_handler_unregister(slave_dev); - write_unlock_bh(&bond->lock); - synchronize_net(); write_lock_bh(&bond->lock); if (!bond->params.fail_over_mac) { @@ -2047,8 +2046,10 @@ write_unlock_bh(&bond->lock); unblock_netpoll_tx(); - if (bond->slave_cnt == 0) + if (bond->slave_cnt == 0) { call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev); + call_netdevice_notifiers(NETDEV_RELEASE, bond->dev); + } bond_compute_features(bond); if (!(bond_dev->features & NETIF_F_VLAN_CHALLENGED) && @@ -2462,8 +2463,6 @@ bond_set_backup_slave(slave); } - bond_update_speed_duplex(slave); - pr_info("%s: link status definitely up for interface %s, %u Mbps %s duplex.\n", bond->dev->name, slave->dev->name, slave->speed, slave->duplex ? "full" : "half"); @@ -3381,20 +3380,22 @@ */ static int bond_xmit_hash_policy_l23(struct sk_buff *skb, int count) { - struct ethhdr *data = (struct ethhdr *)skb->data; - struct iphdr *iph; - struct ipv6hdr *ipv6h; + const struct ethhdr *data; + const struct iphdr *iph; + const struct ipv6hdr *ipv6h; u32 v6hash; - __be32 *s, *d; + const __be32 *s, *d; if (skb->protocol == htons(ETH_P_IP) && - skb_network_header_len(skb) >= sizeof(*iph)) { + pskb_network_may_pull(skb, sizeof(*iph))) { iph = ip_hdr(skb); + data = (struct ethhdr *)skb->data; return ((ntohl(iph->saddr ^ iph->daddr) & 0xffff) ^ (data->h_dest[5] ^ data->h_source[5])) % count; } else if (skb->protocol == htons(ETH_P_IPV6) && - skb_network_header_len(skb) >= sizeof(*ipv6h)) { + pskb_network_may_pull(skb, sizeof(*ipv6h))) { ipv6h = ipv6_hdr(skb); + data = (struct ethhdr *)skb->data; s = &ipv6h->saddr.s6_addr32[0]; d = &ipv6h->daddr.s6_addr32[0]; v6hash = (s[1] ^ d[1]) ^ (s[2] ^ d[2]) ^ (s[3] ^ d[3]); @@ -3413,33 +3414,36 @@ static int bond_xmit_hash_policy_l34(struct sk_buff *skb, int count) { u32 layer4_xor = 0; - struct iphdr *iph; - struct ipv6hdr *ipv6h; - __be32 *s, *d; - __be16 *layer4hdr; + const struct iphdr *iph; + const struct ipv6hdr *ipv6h; + const __be32 *s, *d; + const __be16 *l4 = NULL; + __be16 _l4[2]; + int noff = skb_network_offset(skb); + int poff; if (skb->protocol == htons(ETH_P_IP) && - skb_network_header_len(skb) >= sizeof(*iph)) { + pskb_may_pull(skb, noff + sizeof(*iph))) { iph = ip_hdr(skb); - if (!ip_is_fragment(iph) && - (iph->protocol == IPPROTO_TCP || - iph->protocol == IPPROTO_UDP) && - (skb_headlen(skb) - skb_network_offset(skb) >= - iph->ihl * sizeof(u32) + sizeof(*layer4hdr) * 2)) { - layer4hdr = (__be16 *)((u32 *)iph + iph->ihl); - layer4_xor = ntohs(*layer4hdr ^ *(layer4hdr + 1)); + poff = proto_ports_offset(iph->protocol); + + if (!ip_is_fragment(iph) && poff >= 0) { + l4 = skb_header_pointer(skb, noff + (iph->ihl << 2) + poff, + sizeof(_l4), &_l4); + if (l4) + layer4_xor = ntohs(l4[0] ^ l4[1]); } return (layer4_xor ^ ((ntohl(iph->saddr ^ iph->daddr)) & 0xffff)) % count; } else if (skb->protocol == htons(ETH_P_IPV6) && - skb_network_header_len(skb) >= sizeof(*ipv6h)) { + pskb_may_pull(skb, noff + sizeof(*ipv6h))) { ipv6h = ipv6_hdr(skb); - if ((ipv6h->nexthdr == IPPROTO_TCP || - ipv6h->nexthdr == IPPROTO_UDP) && - (skb_headlen(skb) - skb_network_offset(skb) >= - sizeof(*ipv6h) + sizeof(*layer4hdr) * 2)) { - layer4hdr = (__be16 *)(ipv6h + 1); - layer4_xor = ntohs(*layer4hdr ^ *(layer4hdr + 1)); + poff = proto_ports_offset(ipv6h->nexthdr); + if (poff >= 0) { + l4 = skb_header_pointer(skb, noff + sizeof(*ipv6h) + poff, + sizeof(_l4), &_l4); + if (l4) + layer4_xor = ntohs(l4[0] ^ l4[1]); } s = &ipv6h->saddr.s6_addr32[0]; d = &ipv6h->daddr.s6_addr32[0]; @@ -3806,11 +3810,17 @@ * The bonding ndo_neigh_setup is called at init time beofre any * slave exists. So we must declare proxy setup function which will * be used at run time to resolve the actual slave neigh param setup. + * + * It's also called by master devices (such as vlans) to setup their + * underlying devices. In that case - do nothing, we're already set up from + * our init. */ static int bond_neigh_setup(struct net_device *dev, struct neigh_parms *parms) { - parms->neigh_setup = bond_neigh_init; + /* modify only our neigh_parms */ + if (parms->dev == dev) + parms->neigh_setup = bond_neigh_init; return 0; } @@ -4921,9 +4931,18 @@ static void __net_exit bond_net_exit(struct net *net) { struct bond_net *bn = net_generic(net, bond_net_id); + struct bonding *bond, *tmp_bond; + LIST_HEAD(list); bond_destroy_sysfs(bn); bond_destroy_proc_dir(bn); + + /* Kill off any bonds created after unregistering bond rtnl ops */ + rtnl_lock(); + list_for_each_entry_safe(bond, tmp_bond, &bn->dev_list, bond_list) + unregister_netdevice_queue(bond->dev, &list); + unregister_netdevice_many(&list); + rtnl_unlock(); } static struct pernet_operations bond_net_ops = { --- linux-lts-raring-3.8.0.orig/drivers/net/wan/dlci.c +++ linux-lts-raring-3.8.0/drivers/net/wan/dlci.c @@ -384,21 +384,37 @@ struct frad_local *flp; struct net_device *master, *slave; int err; + bool found = false; + + rtnl_lock(); /* validate slave device */ master = __dev_get_by_name(&init_net, dlci->devname); - if (!master) - return -ENODEV; + if (!master) { + err = -ENODEV; + goto out; + } + + list_for_each_entry(dlp, &dlci_devs, list) { + if (dlp->master == master) { + found = true; + break; + } + } + if (!found) { + err = -ENODEV; + goto out; + } if (netif_running(master)) { - return -EBUSY; + err = -EBUSY; + goto out; } dlp = netdev_priv(master); slave = dlp->slave; flp = netdev_priv(slave); - rtnl_lock(); err = (*flp->deassoc)(slave, master); if (!err) { list_del(&dlp->list); @@ -407,8 +423,8 @@ dev_put(slave); } +out: rtnl_unlock(); - return err; } --- linux-lts-raring-3.8.0.orig/drivers/mailbox/Kconfig +++ linux-lts-raring-3.8.0/drivers/mailbox/Kconfig @@ -0,0 +1,19 @@ +menuconfig MAILBOX + bool "Mailbox Hardware Support" + help + Mailbox is a framework to control hardware communication between + on-chip processors through queued messages and interrupt driven + signals. Say Y if your platform supports hardware mailboxes. + +if MAILBOX +config PL320_MBOX + bool "ARM PL320 Mailbox" + depends on ARM_AMBA + help + An implementation of the ARM PL320 Interprocessor Communication + Mailbox (IPCM), tailored for the Calxeda Highbank. It is used to + send short messages between Highbank's A9 cores and the EnergyCore + Management Engine, primarily for cpufreq. Say Y here if you want + to use the PL320 IPCM support. + +endif --- linux-lts-raring-3.8.0.orig/drivers/mailbox/pl320-ipc.c +++ linux-lts-raring-3.8.0/drivers/mailbox/pl320-ipc.c @@ -0,0 +1,198 @@ +/* + * Copyright 2012 Calxeda, Inc. + * + * 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. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define IPCMxSOURCE(m) ((m) * 0x40) +#define IPCMxDSET(m) (((m) * 0x40) + 0x004) +#define IPCMxDCLEAR(m) (((m) * 0x40) + 0x008) +#define IPCMxDSTATUS(m) (((m) * 0x40) + 0x00C) +#define IPCMxMODE(m) (((m) * 0x40) + 0x010) +#define IPCMxMSET(m) (((m) * 0x40) + 0x014) +#define IPCMxMCLEAR(m) (((m) * 0x40) + 0x018) +#define IPCMxMSTATUS(m) (((m) * 0x40) + 0x01C) +#define IPCMxSEND(m) (((m) * 0x40) + 0x020) +#define IPCMxDR(m, dr) (((m) * 0x40) + ((dr) * 4) + 0x024) + +#define IPCMMIS(irq) (((irq) * 8) + 0x800) +#define IPCMRIS(irq) (((irq) * 8) + 0x804) + +#define MBOX_MASK(n) (1 << (n)) +#define IPC_TX_MBOX 1 +#define IPC_RX_MBOX 2 + +#define CHAN_MASK(n) (1 << (n)) +#define A9_SOURCE 1 +#define M3_SOURCE 0 + +static void __iomem *ipc_base; +static int ipc_irq; +static DEFINE_MUTEX(ipc_m1_lock); +static DECLARE_COMPLETION(ipc_completion); +static ATOMIC_NOTIFIER_HEAD(ipc_notifier); + +static inline void set_destination(int source, int mbox) +{ + __raw_writel(CHAN_MASK(source), ipc_base + IPCMxDSET(mbox)); + __raw_writel(CHAN_MASK(source), ipc_base + IPCMxMSET(mbox)); +} + +static inline void clear_destination(int source, int mbox) +{ + __raw_writel(CHAN_MASK(source), ipc_base + IPCMxDCLEAR(mbox)); + __raw_writel(CHAN_MASK(source), ipc_base + IPCMxMCLEAR(mbox)); +} + +static void __ipc_send(int mbox, u32 *data) +{ + int i; + for (i = 0; i < 7; i++) + __raw_writel(data[i], ipc_base + IPCMxDR(mbox, i)); + __raw_writel(0x1, ipc_base + IPCMxSEND(mbox)); +} + +static u32 __ipc_rcv(int mbox, u32 *data) +{ + int i; + for (i = 0; i < 7; i++) + data[i] = __raw_readl(ipc_base + IPCMxDR(mbox, i)); + return data[1]; +} + +/* blocking implmentation from the A9 side, not usuable in interrupts! */ +int pl320_ipc_transmit(u32 *data) +{ + int ret; + + mutex_lock(&ipc_m1_lock); + + init_completion(&ipc_completion); + __ipc_send(IPC_TX_MBOX, data); + ret = wait_for_completion_timeout(&ipc_completion, + msecs_to_jiffies(1000)); + if (ret == 0) { + ret = -ETIMEDOUT; + goto out; + } + + ret = __ipc_rcv(IPC_TX_MBOX, data); +out: + mutex_unlock(&ipc_m1_lock); + return ret; +} +EXPORT_SYMBOL_GPL(pl320_ipc_transmit); + +static irqreturn_t ipc_handler(int irq, void *dev) +{ + u32 irq_stat; + u32 data[7]; + + irq_stat = __raw_readl(ipc_base + IPCMMIS(1)); + if (irq_stat & MBOX_MASK(IPC_TX_MBOX)) { + __raw_writel(0, ipc_base + IPCMxSEND(IPC_TX_MBOX)); + complete(&ipc_completion); + } + if (irq_stat & MBOX_MASK(IPC_RX_MBOX)) { + __ipc_rcv(IPC_RX_MBOX, data); + atomic_notifier_call_chain(&ipc_notifier, data[0], data + 1); + __raw_writel(2, ipc_base + IPCMxSEND(IPC_RX_MBOX)); + } + + return IRQ_HANDLED; +} + +int pl320_ipc_register_notifier(struct notifier_block *nb) +{ + return atomic_notifier_chain_register(&ipc_notifier, nb); +} +EXPORT_SYMBOL_GPL(pl320_ipc_register_notifier); + +int pl320_ipc_unregister_notifier(struct notifier_block *nb) +{ + return atomic_notifier_chain_unregister(&ipc_notifier, nb); +} +EXPORT_SYMBOL_GPL(pl320_ipc_unregister_notifier); + +static int pl320_probe(struct amba_device *adev, const struct amba_id *id) +{ + int ret; + + ipc_base = ioremap(adev->res.start, resource_size(&adev->res)); + if (ipc_base == NULL) + return -ENOMEM; + + __raw_writel(0, ipc_base + IPCMxSEND(IPC_TX_MBOX)); + + ipc_irq = adev->irq[0]; + ret = request_irq(ipc_irq, ipc_handler, 0, dev_name(&adev->dev), NULL); + if (ret < 0) + goto err; + + /* Init slow mailbox */ + __raw_writel(CHAN_MASK(A9_SOURCE), + ipc_base + IPCMxSOURCE(IPC_TX_MBOX)); + __raw_writel(CHAN_MASK(M3_SOURCE), + ipc_base + IPCMxDSET(IPC_TX_MBOX)); + __raw_writel(CHAN_MASK(M3_SOURCE) | CHAN_MASK(A9_SOURCE), + ipc_base + IPCMxMSET(IPC_TX_MBOX)); + + /* Init receive mailbox */ + __raw_writel(CHAN_MASK(M3_SOURCE), + ipc_base + IPCMxSOURCE(IPC_RX_MBOX)); + __raw_writel(CHAN_MASK(A9_SOURCE), + ipc_base + IPCMxDSET(IPC_RX_MBOX)); + __raw_writel(CHAN_MASK(M3_SOURCE) | CHAN_MASK(A9_SOURCE), + ipc_base + IPCMxMSET(IPC_RX_MBOX)); + + return 0; +err: + iounmap(ipc_base); + return ret; +} + +static struct amba_id pl320_ids[] = { + { + .id = 0x00041320, + .mask = 0x000fffff, + }, + { 0, 0 }, +}; + +static struct amba_driver pl320_driver = { + .drv = { + .name = "pl320", + }, + .id_table = pl320_ids, + .probe = pl320_probe, +}; + +static int __init ipc_init(void) +{ + return amba_driver_register(&pl320_driver); +} +module_init(ipc_init); --- linux-lts-raring-3.8.0.orig/drivers/mailbox/Makefile +++ linux-lts-raring-3.8.0/drivers/mailbox/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_PL320_MBOX) += pl320-ipc.o --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_file.h +++ linux-lts-raring-3.8.0/drivers/target/target_core_file.h @@ -7,7 +7,7 @@ #define FD_DEVICE_QUEUE_DEPTH 32 #define FD_MAX_DEVICE_QUEUE_DEPTH 128 #define FD_BLOCKSIZE 512 -#define FD_MAX_SECTORS 1024 +#define FD_MAX_SECTORS 2048 #define RRF_EMULATE_CDB 0x01 #define RRF_GOT_LBA 0x02 --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_pscsi.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_pscsi.c @@ -940,7 +940,6 @@ bio = NULL; } - page++; len -= bytes; data_len -= bytes; off = 0; --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_file.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_file.c @@ -151,10 +151,6 @@ struct request_queue *q = bdev_get_queue(inode->i_bdev); unsigned long long dev_size; - dev->dev_attrib.hw_block_size = - bdev_logical_block_size(inode->i_bdev); - dev->dev_attrib.hw_max_sectors = queue_max_hw_sectors(q); - /* * Determine the number of bytes from i_size_read() minus * one (1) logical sector from underlying struct block_device @@ -173,13 +169,12 @@ " block_device\n"); goto fail; } - - dev->dev_attrib.hw_block_size = FD_BLOCKSIZE; - dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS; } fd_dev->fd_block_size = dev->dev_attrib.hw_block_size; + dev->dev_attrib.hw_block_size = FD_BLOCKSIZE; + dev->dev_attrib.hw_max_sectors = FD_MAX_SECTORS; dev->dev_attrib.hw_queue_depth = FD_MAX_DEVICE_QUEUE_DEPTH; if (fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE) { --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_alua.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_alua.c @@ -408,6 +408,7 @@ case REPORT_LUNS: case RECEIVE_DIAGNOSTIC: case SEND_DIAGNOSTIC: + return 0; case MAINTENANCE_IN: switch (cdb[1] & 0x1f) { case MI_REPORT_TARGET_PGS: @@ -450,6 +451,7 @@ switch (cdb[0]) { case INQUIRY: case REPORT_LUNS: + return 0; case MAINTENANCE_IN: switch (cdb[1] & 0x1f) { case MI_REPORT_TARGET_PGS: @@ -490,6 +492,7 @@ switch (cdb[0]) { case INQUIRY: case REPORT_LUNS: + return 0; case MAINTENANCE_IN: switch (cdb[1] & 0x1f) { case MI_REPORT_TARGET_PGS: --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_device.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_device.c @@ -1182,24 +1182,18 @@ struct se_lun_acl *core_dev_init_initiator_node_lun_acl( struct se_portal_group *tpg, + struct se_node_acl *nacl, u32 mapped_lun, - char *initiatorname, int *ret) { struct se_lun_acl *lacl; - struct se_node_acl *nacl; - if (strlen(initiatorname) >= TRANSPORT_IQN_LEN) { + if (strlen(nacl->initiatorname) >= TRANSPORT_IQN_LEN) { pr_err("%s InitiatorName exceeds maximum size.\n", tpg->se_tpg_tfo->get_fabric_name()); *ret = -EOVERFLOW; return NULL; } - nacl = core_tpg_get_initiator_node_acl(tpg, initiatorname); - if (!nacl) { - *ret = -EINVAL; - return NULL; - } lacl = kzalloc(sizeof(struct se_lun_acl), GFP_KERNEL); if (!lacl) { pr_err("Unable to allocate memory for struct se_lun_acl.\n"); @@ -1210,7 +1204,8 @@ INIT_LIST_HEAD(&lacl->lacl_list); lacl->mapped_lun = mapped_lun; lacl->se_lun_nacl = nacl; - snprintf(lacl->initiatorname, TRANSPORT_IQN_LEN, "%s", initiatorname); + snprintf(lacl->initiatorname, TRANSPORT_IQN_LEN, "%s", + nacl->initiatorname); return lacl; } --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_tpg.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_tpg.c @@ -111,16 +111,10 @@ struct se_node_acl *acl; spin_lock_irq(&tpg->acl_node_lock); - list_for_each_entry(acl, &tpg->acl_node_list, acl_list) { - if (!strcmp(acl->initiatorname, initiatorname) && - !acl->dynamic_node_acl) { - spin_unlock_irq(&tpg->acl_node_lock); - return acl; - } - } + acl = __core_tpg_get_initiator_node_acl(tpg, initiatorname); spin_unlock_irq(&tpg->acl_node_lock); - return NULL; + return acl; } /* core_tpg_add_node_to_devs(): --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_transport.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_transport.c @@ -1136,8 +1136,10 @@ return ret; ret = target_check_reservation(cmd); - if (ret) + if (ret) { + cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT; return ret; + } ret = dev->transport->parse_cdb(cmd); if (ret) @@ -2207,21 +2209,19 @@ { struct se_cmd *se_cmd = container_of(kref, struct se_cmd, cmd_kref); struct se_session *se_sess = se_cmd->se_sess; - unsigned long flags; - spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); if (list_empty(&se_cmd->se_cmd_list)) { - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); + spin_unlock(&se_sess->sess_cmd_lock); se_cmd->se_tfo->release_cmd(se_cmd); return; } if (se_sess->sess_tearing_down && se_cmd->cmd_wait_set) { - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); + spin_unlock(&se_sess->sess_cmd_lock); complete(&se_cmd->cmd_wait_comp); return; } list_del(&se_cmd->se_cmd_list); - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); + spin_unlock(&se_sess->sess_cmd_lock); se_cmd->se_tfo->release_cmd(se_cmd); } @@ -2232,7 +2232,8 @@ */ int target_put_sess_cmd(struct se_session *se_sess, struct se_cmd *se_cmd) { - return kref_put(&se_cmd->cmd_kref, target_release_cmd_kref); + return kref_put_spinlock_irqsave(&se_cmd->cmd_kref, target_release_cmd_kref, + &se_sess->sess_cmd_lock); } EXPORT_SYMBOL(target_put_sess_cmd); --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_fabric_configfs.c +++ linux-lts-raring-3.8.0/drivers/target/target_core_fabric_configfs.c @@ -354,9 +354,17 @@ ret = -EINVAL; goto out; } + if (mapped_lun > (TRANSPORT_MAX_LUNS_PER_TPG-1)) { + pr_err("Mapped LUN: %lu exceeds TRANSPORT_MAX_LUNS_PER_TPG" + "-1: %u for Target Portal Group: %u\n", mapped_lun, + TRANSPORT_MAX_LUNS_PER_TPG-1, + se_tpg->se_tpg_tfo->tpg_get_tag(se_tpg)); + ret = -EINVAL; + goto out; + } - lacl = core_dev_init_initiator_node_lun_acl(se_tpg, mapped_lun, - config_item_name(acl_ci), &ret); + lacl = core_dev_init_initiator_node_lun_acl(se_tpg, se_nacl, + mapped_lun, &ret); if (!lacl) { ret = -EINVAL; goto out; --- linux-lts-raring-3.8.0.orig/drivers/target/target_core_internal.h +++ linux-lts-raring-3.8.0/drivers/target/target_core_internal.h @@ -45,7 +45,7 @@ int core_dev_del_lun(struct se_portal_group *, u32); struct se_lun *core_get_lun_from_tpg(struct se_portal_group *, u32); struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *, - u32, char *, int *); + struct se_node_acl *, u32, int *); int core_dev_add_initiator_node_lun_acl(struct se_portal_group *, struct se_lun_acl *, u32, u32); int core_dev_del_initiator_node_lun_acl(struct se_portal_group *, --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target_erl0.c +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target_erl0.c @@ -842,11 +842,11 @@ return 0; sess->time2retain_timer_flags |= ISCSI_TF_STOP; - spin_unlock_bh(&se_tpg->session_lock); + spin_unlock(&se_tpg->session_lock); del_timer_sync(&sess->time2retain_timer); - spin_lock_bh(&se_tpg->session_lock); + spin_lock(&se_tpg->session_lock); sess->time2retain_timer_flags &= ~ISCSI_TF_RUNNING; pr_debug("Stopped Time2Retain Timer for SID: %u\n", sess->sid); --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target_erl1.c +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target_erl1.c @@ -819,7 +819,7 @@ /* * CmdSN is greater than the tail of the list. */ - if (ooo_tail->cmdsn < ooo_cmdsn->cmdsn) + if (iscsi_sna_lt(ooo_tail->cmdsn, ooo_cmdsn->cmdsn)) list_add_tail(&ooo_cmdsn->ooo_list, &sess->sess_ooo_cmdsn_list); else { @@ -829,11 +829,12 @@ */ list_for_each_entry(ooo_tmp, &sess->sess_ooo_cmdsn_list, ooo_list) { - if (ooo_tmp->cmdsn < ooo_cmdsn->cmdsn) + if (iscsi_sna_lt(ooo_tmp->cmdsn, ooo_cmdsn->cmdsn)) continue; + /* Insert before this entry */ list_add(&ooo_cmdsn->ooo_list, - &ooo_tmp->ooo_list); + ooo_tmp->ooo_list.prev); break; } } --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target_configfs.c +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target_configfs.c @@ -393,7 +393,7 @@ if (!capable(CAP_SYS_ADMIN)) \ return -EPERM; \ \ - snprintf(auth->name, PAGE_SIZE, "%s", page); \ + snprintf(auth->name, sizeof(auth->name), "%s", page); \ if (!strncmp("NULL", auth->name, 4)) \ auth->naf_flags &= ~flags; \ else \ --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target_auth.c +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target_auth.c @@ -166,6 +166,7 @@ { char *endptr; unsigned long id; + unsigned char id_as_uchar; unsigned char digest[MD5_SIGNATURE_SIZE]; unsigned char type, response[MD5_SIGNATURE_SIZE * 2 + 2]; unsigned char identifier[10], *challenge = NULL; @@ -355,7 +356,9 @@ goto out; } - sg_init_one(&sg, &id, 1); + /* To handle both endiannesses */ + id_as_uchar = id; + sg_init_one(&sg, &id_as_uchar, 1); ret = crypto_hash_update(&desc, &sg, 1); if (ret < 0) { pr_err("crypto_hash_update() failed for id\n"); --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target_parameters.c +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target_parameters.c @@ -712,9 +712,9 @@ } INIT_LIST_HEAD(&extra_response->er_list); - strncpy(extra_response->key, key, strlen(key) + 1); - strncpy(extra_response->value, NOTUNDERSTOOD, - strlen(NOTUNDERSTOOD) + 1); + strlcpy(extra_response->key, key, sizeof(extra_response->key)); + strlcpy(extra_response->value, NOTUNDERSTOOD, + sizeof(extra_response->value)); list_add_tail(&extra_response->er_list, ¶m_list->extra_response_list); @@ -1583,8 +1583,6 @@ if (phase & PHASE_SECURITY) { if (iscsi_check_for_auth_key(key) > 0) { - char *tmpptr = key + strlen(key); - *tmpptr = '='; kfree(tmpbuf); return 1; } --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target.c +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target.c @@ -3570,6 +3570,10 @@ spin_lock_bh(&cmd->istate_lock); cmd->i_state = ISTATE_SENT_STATUS; spin_unlock_bh(&cmd->istate_lock); + + if (atomic_read(&conn->check_immediate_queue)) + return 1; + continue; } else if (ret == 2) { /* Still must send status, @@ -3659,7 +3663,7 @@ } if (atomic_read(&conn->check_immediate_queue)) - break; + return 1; } return 0; @@ -3703,12 +3707,15 @@ signal_pending(current)) goto transport_err; +get_immediate: ret = handle_immediate_queue(conn); if (ret < 0) goto transport_err; ret = handle_response_queue(conn); - if (ret == -EAGAIN) + if (ret == 1) + goto get_immediate; + else if (ret == -EAGAIN) goto restart; else if (ret < 0) goto transport_err; --- linux-lts-raring-3.8.0.orig/drivers/target/iscsi/iscsi_target_parameters.h +++ linux-lts-raring-3.8.0/drivers/target/iscsi/iscsi_target_parameters.h @@ -1,8 +1,10 @@ #ifndef ISCSI_PARAMETERS_H #define ISCSI_PARAMETERS_H +#include + struct iscsi_extra_response { - char key[64]; + char key[KEY_MAXLEN]; char value[32]; struct list_head er_list; } ____cacheline_aligned; --- linux-lts-raring-3.8.0.orig/drivers/connector/cn_proc.c +++ linux-lts-raring-3.8.0/drivers/connector/cn_proc.c @@ -313,6 +313,12 @@ (task_active_pid_ns(current) != &init_pid_ns)) return; + /* Can only change if privileged. */ + if (!capable(CAP_NET_ADMIN)) { + err = EPERM; + goto out; + } + mc_op = (enum proc_cn_mcast_op *)msg->data; switch (*mc_op) { case PROC_CN_MCAST_LISTEN: @@ -325,6 +331,8 @@ err = EINVAL; break; } + +out: cn_proc_ack(err, msg->seq, msg->ack); } --- linux-lts-raring-3.8.0.orig/drivers/cdrom/cdrom.c +++ linux-lts-raring-3.8.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 */ @@ -2882,7 +2882,7 @@ if (lba < 0) return -EINVAL; - cgc->buffer = kmalloc(blocksize, GFP_KERNEL); + cgc->buffer = kzalloc(blocksize, GFP_KERNEL); if (cgc->buffer == NULL) return -ENOMEM; --- linux-lts-raring-3.8.0.orig/drivers/block/loop.c +++ linux-lts-raring-3.8.0/drivers/block/loop.c @@ -917,6 +917,11 @@ lo->lo_flags |= LO_FLAGS_PARTSCAN; if (lo->lo_flags & LO_FLAGS_PARTSCAN) ioctl_by_bdev(bdev, BLKRRPART, 0); + + /* Grab the block_device to prevent its destruction after we + * put /dev/loopXX inode. Later in loop_clr_fd() we bdput(bdev). + */ + bdgrab(bdev); return 0; out_clr: @@ -1026,8 +1031,10 @@ memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE); memset(lo->lo_crypt_name, 0, LO_NAME_SIZE); memset(lo->lo_file_name, 0, LO_NAME_SIZE); - if (bdev) + if (bdev) { + bdput(bdev); invalidate_bdev(bdev); + } set_capacity(lo->lo_disk, 0); loop_sysfs_exit(lo); if (bdev) { @@ -1285,11 +1292,9 @@ /* the width of sector_t may be narrow for bit-shift */ sz = sec; sz <<= 9; - mutex_lock(&bdev->bd_mutex); bd_set_size(bdev, sz); /* let user-space know about the new size */ kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE); - mutex_unlock(&bdev->bd_mutex); out: return err; @@ -1858,11 +1863,15 @@ max_part = (1UL << part_shift) - 1; } - if ((1UL << part_shift) > DISK_MAX_PARTS) - return -EINVAL; + if ((1UL << part_shift) > DISK_MAX_PARTS) { + err = -EINVAL; + goto misc_out; + } - if (max_loop > 1UL << (MINORBITS - part_shift)) - return -EINVAL; + if (max_loop > 1UL << (MINORBITS - part_shift)) { + err = -EINVAL; + goto misc_out; + } /* * If max_loop is specified, create that many devices upfront. @@ -1880,8 +1889,10 @@ range = 1UL << MINORBITS; } - if (register_blkdev(LOOP_MAJOR, "loop")) - return -EIO; + if (register_blkdev(LOOP_MAJOR, "loop")) { + err = -EIO; + goto misc_out; + } blk_register_region(MKDEV(LOOP_MAJOR, 0), range, THIS_MODULE, loop_probe, NULL, NULL); @@ -1894,6 +1905,10 @@ printk(KERN_INFO "loop: module loaded\n"); return 0; + +misc_out: + misc_deregister(&loop_misc); + return err; } static int loop_exit_cb(int id, void *ptr, void *data) --- linux-lts-raring-3.8.0.orig/drivers/block/brd.c +++ linux-lts-raring-3.8.0/drivers/block/brd.c @@ -117,13 +117,13 @@ spin_lock(&brd->brd_lock); idx = sector >> PAGE_SECTORS_SHIFT; + page->index = idx; if (radix_tree_insert(&brd->brd_pages, idx, page)) { __free_page(page); page = radix_tree_lookup(&brd->brd_pages, idx); BUG_ON(!page); BUG_ON(page->index != idx); - } else - page->index = idx; + } spin_unlock(&brd->brd_lock); radix_tree_preload_end(); --- linux-lts-raring-3.8.0.orig/drivers/block/rbd.c +++ linux-lts-raring-3.8.0/drivers/block/rbd.c @@ -329,8 +329,8 @@ }; /* - * Initialize an rbd client instance. - * We own *ceph_opts. + * Initialize an rbd client instance. Success or not, this function + * consumes ceph_opts. */ static struct rbd_client *rbd_client_create(struct ceph_options *ceph_opts) { @@ -469,7 +469,8 @@ /* * Get a ceph client with specific addr and configuration, if one does - * not exist create it. + * not exist create it. Either way, ceph_opts is consumed by this + * function. */ static struct rbd_client *rbd_get_client(struct ceph_options *ceph_opts) { @@ -866,7 +867,7 @@ /* Find first affected segment... */ resid = offset; - __bio_for_each_segment(bv, bio_src, idx, 0) { + bio_for_each_segment(bv, bio_src, idx) { if (resid < bv->bv_len) break; resid -= bv->bv_len; @@ -3629,7 +3630,6 @@ rc = PTR_ERR(rbdc); goto err_out_args; } - ceph_opts = NULL; /* rbd_dev client now owns this */ /* pick the pool */ osdc = &rbdc->client->osdc; @@ -3658,8 +3658,6 @@ err_out_client: rbd_put_client(rbdc); err_out_args: - if (ceph_opts) - ceph_destroy_options(ceph_opts); kfree(rbd_opts); rbd_spec_put(spec); err_out_module: --- linux-lts-raring-3.8.0.orig/drivers/block/cciss.c +++ linux-lts-raring-3.8.0/drivers/block/cciss.c @@ -162,8 +162,6 @@ static int cciss_open(struct block_device *bdev, fmode_t mode); static int cciss_unlocked_open(struct block_device *bdev, fmode_t mode); static int cciss_release(struct gendisk *disk, fmode_t mode); -static int do_ioctl(struct block_device *bdev, fmode_t mode, - unsigned int cmd, unsigned long arg); static int cciss_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo); @@ -229,7 +227,7 @@ .owner = THIS_MODULE, .open = cciss_unlocked_open, .release = cciss_release, - .ioctl = do_ioctl, + .ioctl = cciss_ioctl, .getgeo = cciss_getgeo, #ifdef CONFIG_COMPAT .compat_ioctl = cciss_compat_ioctl, @@ -1138,16 +1136,6 @@ return 0; } -static int do_ioctl(struct block_device *bdev, fmode_t mode, - unsigned cmd, unsigned long arg) -{ - int ret; - mutex_lock(&cciss_mutex); - ret = cciss_ioctl(bdev, mode, cmd, arg); - mutex_unlock(&cciss_mutex); - return ret; -} - #ifdef CONFIG_COMPAT static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode, @@ -1174,7 +1162,7 @@ case CCISS_REGNEWD: case CCISS_RESCANDISK: case CCISS_GETLUNINFO: - return do_ioctl(bdev, mode, cmd, arg); + return cciss_ioctl(bdev, mode, cmd, arg); case CCISS_PASSTHRU32: return cciss_ioctl32_passthru(bdev, mode, cmd, arg); @@ -1196,6 +1184,7 @@ int err; u32 cp; + memset(&arg64, 0, sizeof(arg64)); err = 0; err |= copy_from_user(&arg64.LUN_info, &arg32->LUN_info, @@ -1214,7 +1203,7 @@ if (err) return -EFAULT; - err = do_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p); + err = cciss_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p); if (err) return err; err |= @@ -1256,7 +1245,7 @@ if (err) return -EFAULT; - err = do_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p); + err = cciss_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p); if (err) return err; err |= @@ -1306,11 +1295,14 @@ static int cciss_getintinfo(ctlr_info_t *h, void __user *argp) { cciss_coalint_struct intinfo; + unsigned long flags; if (!argp) return -EINVAL; + spin_lock_irqsave(&h->lock, flags); intinfo.delay = readl(&h->cfgtable->HostWrite.CoalIntDelay); intinfo.count = readl(&h->cfgtable->HostWrite.CoalIntCount); + spin_unlock_irqrestore(&h->lock, flags); if (copy_to_user (argp, &intinfo, sizeof(cciss_coalint_struct))) return -EFAULT; @@ -1351,12 +1343,15 @@ static int cciss_getnodename(ctlr_info_t *h, void __user *argp) { NodeName_type NodeName; + unsigned long flags; int i; if (!argp) return -EINVAL; + spin_lock_irqsave(&h->lock, flags); for (i = 0; i < 16; i++) NodeName[i] = readb(&h->cfgtable->ServerName[i]); + spin_unlock_irqrestore(&h->lock, flags); if (copy_to_user(argp, NodeName, sizeof(NodeName_type))) return -EFAULT; return 0; @@ -1393,10 +1388,13 @@ static int cciss_getheartbeat(ctlr_info_t *h, void __user *argp) { Heartbeat_type heartbeat; + unsigned long flags; if (!argp) return -EINVAL; + spin_lock_irqsave(&h->lock, flags); heartbeat = readl(&h->cfgtable->HeartBeat); + spin_unlock_irqrestore(&h->lock, flags); if (copy_to_user(argp, &heartbeat, sizeof(Heartbeat_type))) return -EFAULT; return 0; @@ -1405,10 +1403,13 @@ static int cciss_getbustypes(ctlr_info_t *h, void __user *argp) { BusTypes_type BusTypes; + unsigned long flags; if (!argp) return -EINVAL; + spin_lock_irqsave(&h->lock, flags); BusTypes = readl(&h->cfgtable->BusTypes); + spin_unlock_irqrestore(&h->lock, flags); if (copy_to_user(argp, &BusTypes, sizeof(BusTypes_type))) return -EFAULT; return 0; --- linux-lts-raring-3.8.0.orig/drivers/block/cpqarray.c +++ linux-lts-raring-3.8.0/drivers/block/cpqarray.c @@ -1195,6 +1195,7 @@ ida_pci_info_struct pciinfo; if (!arg) return -EINVAL; + memset(&pciinfo, 0, sizeof(pciinfo)); pciinfo.bus = host->pci_dev->bus->number; pciinfo.dev_fn = host->pci_dev->devfn; pciinfo.board_id = host->board_id; --- linux-lts-raring-3.8.0.orig/drivers/block/nbd.c +++ linux-lts-raring-3.8.0/drivers/block/nbd.c @@ -57,7 +57,7 @@ static unsigned int nbds_max = 16; static struct nbd_device *nbd_dev; -static int max_part; +static int max_part = 15; /* * Use just one lock (or at most 1 per NIC). Two arguments for this: @@ -595,14 +595,24 @@ struct request sreq; dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n"); + if (!nbd->sock) + return -EINVAL; + mutex_unlock(&nbd->tx_lock); + fsync_bdev(bdev); + mutex_lock(&nbd->tx_lock); blk_rq_init(NULL, &sreq); sreq.cmd_type = REQ_TYPE_SPECIAL; nbd_cmd(&sreq) = NBD_CMD_DISC; + + /* Check again after getting mutex back. */ if (!nbd->sock) return -EINVAL; + + nbd->disconnect = 1; + nbd_send_req(nbd, &sreq); - return 0; + return 0; } case NBD_CLEAR_SOCK: { @@ -614,6 +624,7 @@ nbd_clear_que(nbd); BUG_ON(!list_empty(&nbd->queue_head)); BUG_ON(!list_empty(&nbd->waiting_queue)); + kill_bdev(bdev); if (file) fput(file); return 0; @@ -631,6 +642,7 @@ nbd->sock = SOCKET_I(inode); if (max_part > 0) bdev->bd_invalidated = 1; + nbd->disconnect = 0; /* we're connected now */ return 0; } else { fput(file); @@ -685,7 +697,8 @@ queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue); - thread = kthread_create(nbd_thread, nbd, nbd->disk->disk_name); + thread = kthread_create(nbd_thread, nbd, "%s", + nbd->disk->disk_name); if (IS_ERR(thread)) { mutex_lock(&nbd->tx_lock); return PTR_ERR(thread); @@ -702,6 +715,7 @@ nbd->file = NULL; nbd_clear_que(nbd); dev_warn(disk_to_dev(nbd->disk), "queue cleared\n"); + kill_bdev(bdev); queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue); if (file) fput(file); @@ -710,6 +724,8 @@ set_capacity(nbd->disk, 0); if (max_part > 0) ioctl_by_bdev(bdev, BLKRRPART, 0); + if (nbd->disconnect) /* user requested, ignore socket errors */ + return 0; return nbd->harderror; } --- linux-lts-raring-3.8.0.orig/drivers/block/xen-blkfront.c +++ linux-lts-raring-3.8.0/drivers/block/xen-blkfront.c @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include @@ -68,7 +68,7 @@ struct grant { grant_ref_t gref; unsigned long pfn; - struct llist_node node; + struct list_head node; }; struct blk_shadow { @@ -105,7 +105,7 @@ struct work_struct work; struct gnttab_free_callback callback; struct blk_shadow shadow[BLK_RING_SIZE]; - struct llist_head persistent_gnts; + struct list_head persistent_gnts; unsigned int persistent_gnts_c; unsigned long shadow_free; unsigned int feature_flush; @@ -371,10 +371,11 @@ lsect = fsect + (sg->length >> 9) - 1; if (info->persistent_gnts_c) { - BUG_ON(llist_empty(&info->persistent_gnts)); - gnt_list_entry = llist_entry( - llist_del_first(&info->persistent_gnts), - struct grant, node); + BUG_ON(list_empty(&info->persistent_gnts)); + gnt_list_entry = list_first_entry( + &info->persistent_gnts, + struct grant, node); + list_del(&gnt_list_entry->node); ref = gnt_list_entry->gref; buffer_mfn = pfn_to_mfn(gnt_list_entry->pfn); @@ -790,9 +791,8 @@ static void blkif_free(struct blkfront_info *info, int suspend) { - struct llist_node *all_gnts; struct grant *persistent_gnt; - struct llist_node *n; + struct grant *n; /* Prevent new requests being issued until we fix things up. */ spin_lock_irq(&info->io_lock); @@ -804,13 +804,15 @@ /* Remove all persistent grants */ if (info->persistent_gnts_c) { - all_gnts = llist_del_all(&info->persistent_gnts); - llist_for_each_entry_safe(persistent_gnt, n, all_gnts, node) { + list_for_each_entry_safe(persistent_gnt, n, + &info->persistent_gnts, node) { + list_del(&persistent_gnt->node); gnttab_end_foreign_access(persistent_gnt->gref, 0, 0UL); __free_page(pfn_to_page(persistent_gnt->pfn)); kfree(persistent_gnt); + info->persistent_gnts_c--; } - info->persistent_gnts_c = 0; + BUG_ON(info->persistent_gnts_c != 0); } /* No more gnttab callback work. */ @@ -868,7 +870,7 @@ } /* Add the persistent grant into the list of free grants */ for (i = 0; i < s->req.u.rw.nr_segments; i++) { - llist_add(&s->grants_used[i]->node, &info->persistent_gnts); + list_add(&s->grants_used[i]->node, &info->persistent_gnts); info->persistent_gnts_c++; } } @@ -1164,7 +1166,7 @@ spin_lock_init(&info->io_lock); info->xbdev = dev; info->vdevice = vdevice; - init_llist_head(&info->persistent_gnts); + INIT_LIST_HEAD(&info->persistent_gnts); info->persistent_gnts_c = 0; info->connected = BLKIF_STATE_DISCONNECTED; INIT_WORK(&info->work, blkif_restart_queue); --- linux-lts-raring-3.8.0.orig/drivers/block/drbd/drbd_main.c +++ linux-lts-raring-3.8.0/drivers/block/drbd/drbd_main.c @@ -2798,6 +2798,7 @@ blkdev_put(ldev->backing_bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL); blkdev_put(ldev->md_bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL); + kfree(ldev->disk_conf); kfree(ldev); } --- linux-lts-raring-3.8.0.orig/drivers/block/drbd/drbd_receiver.c +++ linux-lts-raring-3.8.0/drivers/block/drbd/drbd_receiver.c @@ -2661,7 +2661,6 @@ if (hg == -1 && mdev->state.role == R_PRIMARY) { enum drbd_state_rv rv2; - drbd_set_role(mdev, R_SECONDARY, 0); /* drbd_change_state() does not sleep while in SS_IN_TRANSIENT_STATE, * we might be here in C_WF_REPORT_PARAMS which is transient. * we do not need to wait for the after state change work either. */ @@ -4659,8 +4658,8 @@ #if !defined(CONFIG_CRYPTO_HMAC) && !defined(CONFIG_CRYPTO_HMAC_MODULE) static int drbd_do_auth(struct drbd_tconn *tconn) { - dev_err(DEV, "This kernel was build without CONFIG_CRYPTO_HMAC.\n"); - dev_err(DEV, "You need to disable 'cram-hmac-alg' in drbd.conf.\n"); + conn_err(tconn, "This kernel was build without CONFIG_CRYPTO_HMAC.\n"); + conn_err(tconn, "You need to disable 'cram-hmac-alg' in drbd.conf.\n"); return -1; } #else --- linux-lts-raring-3.8.0.orig/drivers/block/xen-blkback/xenbus.c +++ linux-lts-raring-3.8.0/drivers/block/xen-blkback/xenbus.c @@ -367,6 +367,7 @@ be->blkif = NULL; } + kfree(be->mode); kfree(be); dev_set_drvdata(&dev->dev, NULL); return 0; @@ -502,6 +503,7 @@ = container_of(watch, struct backend_info, backend_watch); struct xenbus_device *dev = be->dev; int cdrom = 0; + unsigned long handle; char *device_type; DPRINTK(""); @@ -521,10 +523,10 @@ return; } - if ((be->major || be->minor) && - ((be->major != major) || (be->minor != minor))) { - pr_warn(DRV_PFX "changing physical device (from %x:%x to %x:%x) not supported.\n", - be->major, be->minor, major, minor); + if (be->major | be->minor) { + if (be->major != major || be->minor != minor) + pr_warn(DRV_PFX "changing physical device (from %x:%x to %x:%x) not supported.\n", + be->major, be->minor, major, minor); return; } @@ -542,36 +544,33 @@ kfree(device_type); } - if (be->major == 0 && be->minor == 0) { - /* Front end dir is a number, which is used as the handle. */ + /* Front end dir is a number, which is used as the handle. */ + err = strict_strtoul(strrchr(dev->otherend, '/') + 1, 0, &handle); + if (err) + return; - char *p = strrchr(dev->otherend, '/') + 1; - long handle; - err = strict_strtoul(p, 0, &handle); - if (err) - return; + be->major = major; + be->minor = minor; - be->major = major; - be->minor = minor; - - err = xen_vbd_create(be->blkif, handle, major, minor, - (NULL == strchr(be->mode, 'w')), cdrom); - if (err) { - be->major = 0; - be->minor = 0; - xenbus_dev_fatal(dev, err, "creating vbd structure"); - return; - } + err = xen_vbd_create(be->blkif, handle, major, minor, + !strchr(be->mode, 'w'), cdrom); + if (err) + xenbus_dev_fatal(dev, err, "creating vbd structure"); + else { err = xenvbd_sysfs_addif(dev); if (err) { xen_vbd_free(&be->blkif->vbd); - be->major = 0; - be->minor = 0; xenbus_dev_fatal(dev, err, "creating sysfs entries"); - return; } + } + if (err) { + kfree(be->mode); + be->mode = NULL; + be->major = 0; + be->minor = 0; + } else { /* We're potentially connected now */ xen_update_blkif_status(be->blkif); } --- linux-lts-raring-3.8.0.orig/drivers/block/xen-blkback/common.h +++ linux-lts-raring-3.8.0/drivers/block/xen-blkback/common.h @@ -77,11 +77,18 @@ uint64_t nr_sectors; } __attribute__((__packed__)); +struct blkif_x86_32_request_other { + uint8_t _pad1; + blkif_vdev_t _pad2; + uint64_t id; /* private guest value, echoed in resp */ +} __attribute__((__packed__)); + struct blkif_x86_32_request { uint8_t operation; /* BLKIF_OP_??? */ union { struct blkif_x86_32_request_rw rw; struct blkif_x86_32_request_discard discard; + struct blkif_x86_32_request_other other; } u; } __attribute__((__packed__)); @@ -113,11 +120,19 @@ uint64_t nr_sectors; } __attribute__((__packed__)); +struct blkif_x86_64_request_other { + uint8_t _pad1; + blkif_vdev_t _pad2; + uint32_t _pad3; /* offsetof(blkif_..,u.discard.id)==8 */ + uint64_t id; /* private guest value, echoed in resp */ +} __attribute__((__packed__)); + struct blkif_x86_64_request { uint8_t operation; /* BLKIF_OP_??? */ union { struct blkif_x86_64_request_rw rw; struct blkif_x86_64_request_discard discard; + struct blkif_x86_64_request_other other; } u; } __attribute__((__packed__)); @@ -278,6 +293,11 @@ dst->u.discard.nr_sectors = src->u.discard.nr_sectors; break; default: + /* + * Don't know how to translate this op. Only get the + * ID so failure can be reported to the frontend. + */ + dst->u.other.id = src->u.other.id; break; } } @@ -309,6 +329,11 @@ dst->u.discard.nr_sectors = src->u.discard.nr_sectors; break; default: + /* + * Don't know how to translate this op. Only get the + * ID so failure can be reported to the frontend. + */ + dst->u.other.id = src->u.other.id; break; } } --- linux-lts-raring-3.8.0.orig/drivers/block/xen-blkback/blkback.c +++ linux-lts-raring-3.8.0/drivers/block/xen-blkback/blkback.c @@ -46,6 +46,7 @@ #include #include #include +#include #include "common.h" /* @@ -239,6 +240,7 @@ ret = gnttab_unmap_refs(unmap, NULL, pages, segs_to_unmap); BUG_ON(ret); + free_xenballooned_pages(segs_to_unmap, pages); segs_to_unmap = 0; } @@ -527,8 +529,8 @@ GFP_KERNEL); if (!persistent_gnt) return -ENOMEM; - persistent_gnt->page = alloc_page(GFP_KERNEL); - if (!persistent_gnt->page) { + if (alloc_xenballooned_pages(1, &persistent_gnt->page, + false)) { kfree(persistent_gnt); return -ENOMEM; } @@ -654,7 +656,18 @@ int status = BLKIF_RSP_OKAY; struct block_device *bdev = blkif->vbd.bdev; unsigned long secure; + struct phys_req preq; + + preq.sector_number = req->u.discard.sector_number; + preq.nr_sects = req->u.discard.nr_sectors; + err = xen_vbd_translate(&preq, blkif, WRITE); + if (err) { + pr_warn(DRV_PFX "access denied: DISCARD [%llu->%llu] on dev=%04x\n", + preq.sector_number, + preq.sector_number + preq.nr_sects, blkif->vbd.pdevice); + goto fail_response; + } blkif->st_ds_req++; xen_blkif_get(blkif); @@ -665,7 +678,7 @@ err = blkdev_issue_discard(bdev, req->u.discard.sector_number, req->u.discard.nr_sectors, GFP_KERNEL, secure); - +fail_response: if (err == -EOPNOTSUPP) { pr_debug(DRV_PFX "discard op failed, not supported\n"); status = BLKIF_RSP_EOPNOTSUPP; @@ -677,6 +690,16 @@ return err; } +static int dispatch_other_io(struct xen_blkif *blkif, + struct blkif_request *req, + struct pending_req *pending_req) +{ + free_req(pending_req); + make_response(blkif, req->u.other.id, req->operation, + BLKIF_RSP_EOPNOTSUPP); + return -EIO; +} + static void xen_blk_drain_io(struct xen_blkif *blkif) { atomic_set(&blkif->drain, 1); @@ -798,17 +821,30 @@ /* Apply all sanity checks to /private copy/ of request. */ barrier(); - if (unlikely(req.operation == BLKIF_OP_DISCARD)) { + + switch (req.operation) { + case BLKIF_OP_READ: + case BLKIF_OP_WRITE: + case BLKIF_OP_WRITE_BARRIER: + case BLKIF_OP_FLUSH_DISKCACHE: + if (dispatch_rw_block_io(blkif, &req, pending_req)) + goto done; + break; + case BLKIF_OP_DISCARD: free_req(pending_req); if (dispatch_discard_io(blkif, &req)) - break; - } else if (dispatch_rw_block_io(blkif, &req, pending_req)) + goto done; + break; + default: + if (dispatch_other_io(blkif, &req, pending_req)) + goto done; break; + } /* Yield point for this unbounded loop. */ cond_resched(); } - +done: return more_to_do; } @@ -976,13 +1012,7 @@ bio->bi_end_io = end_block_io_op; } - /* - * We set it one so that the last submit_bio does not have to call - * atomic_inc. - */ atomic_set(&pending_req->pendcnt, nbio); - - /* Get a reference count for the disk queue and start sending I/O */ blk_start_plug(&plug); for (i = 0; i < nbio; i++) @@ -1010,6 +1040,7 @@ fail_put_bio: for (i = 0; i < nbio; i++) bio_put(biolist[i]); + atomic_set(&pending_req->pendcnt, 1); __end_block_io_op(pending_req, -EINVAL); msleep(1); /* back off a bit */ return -EIO; --- linux-lts-raring-3.8.0.orig/drivers/block/aoe/aoecmd.c +++ linux-lts-raring-3.8.0/drivers/block/aoe/aoecmd.c @@ -51,8 +51,9 @@ { struct sk_buff *skb; - skb = alloc_skb(len, GFP_ATOMIC); + skb = alloc_skb(len + MAX_HEADER, GFP_ATOMIC); if (skb) { + skb_reserve(skb, MAX_HEADER); skb_reset_mac_header(skb); skb_reset_network_header(skb); skb->protocol = __constant_htons(ETH_P_AOE); --- linux-lts-raring-3.8.0.orig/drivers/eisa/pci_eisa.c +++ linux-lts-raring-3.8.0/drivers/eisa/pci_eisa.c @@ -19,10 +19,10 @@ /* There is only *one* pci_eisa device per machine, right ? */ static struct eisa_root_device pci_eisa_root; -static int __init pci_eisa_init(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int __init pci_eisa_init(struct pci_dev *pdev) { - int rc; + int rc, i; + struct resource *res, *bus_res = NULL; if ((rc = pci_enable_device (pdev))) { printk (KERN_ERR "pci_eisa : Could not enable device %s\n", @@ -30,9 +30,30 @@ return rc; } + /* + * The Intel 82375 PCI-EISA bridge is a subtractive-decode PCI + * device, so the resources available on EISA are the same as those + * available on the 82375 bus. This works the same as a PCI-PCI + * bridge in subtractive-decode mode (see pci_read_bridge_bases()). + * We assume other PCI-EISA bridges are similar. + * + * eisa_root_register() can only deal with a single io port resource, + * so we use the first valid io port resource. + */ + pci_bus_for_each_resource(pdev->bus, res, i) + if (res && (res->flags & IORESOURCE_IO)) { + bus_res = res; + break; + } + + if (!bus_res) { + dev_err(&pdev->dev, "No resources available\n"); + return -1; + } + pci_eisa_root.dev = &pdev->dev; - pci_eisa_root.res = pdev->bus->resource[0]; - pci_eisa_root.bus_base_addr = pdev->bus->resource[0]->start; + pci_eisa_root.res = bus_res; + pci_eisa_root.bus_base_addr = bus_res->start; pci_eisa_root.slots = EISA_MAX_SLOTS; pci_eisa_root.dma_mask = pdev->dma_mask; dev_set_drvdata(pci_eisa_root.dev, &pci_eisa_root); @@ -45,22 +66,26 @@ return 0; } -static struct pci_device_id pci_eisa_pci_tbl[] = { - { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_BRIDGE_EISA << 8, 0xffff00, 0 }, - { 0, } -}; - -static struct pci_driver __refdata pci_eisa_driver = { - .name = "pci_eisa", - .id_table = pci_eisa_pci_tbl, - .probe = pci_eisa_init, -}; - -static int __init pci_eisa_init_module (void) +/* + * We have to call pci_eisa_init_early() before pnpacpi_init()/isapnp_init(). + * Otherwise pnp resource will get enabled early and could prevent eisa + * to be initialized. + * Also need to make sure pci_eisa_init_early() is called after + * x86/pci_subsys_init(). + * So need to use subsys_initcall_sync with it. + */ +static int __init pci_eisa_init_early(void) { - return pci_register_driver (&pci_eisa_driver); -} + struct pci_dev *dev = NULL; + int ret; + + for_each_pci_dev(dev) + if ((dev->class >> 8) == PCI_CLASS_BRIDGE_EISA) { + ret = pci_eisa_init(dev); + if (ret) + return ret; + } -device_initcall(pci_eisa_init_module); -MODULE_DEVICE_TABLE(pci, pci_eisa_pci_tbl); + return 0; +} +subsys_initcall_sync(pci_eisa_init_early); --- linux-lts-raring-3.8.0.orig/drivers/regulator/core.c +++ linux-lts-raring-3.8.0/drivers/regulator/core.c @@ -200,8 +200,8 @@ } if (*min_uV > *max_uV) { - dev_err(regulator->dev, "Restricting voltage, %u-%uuV\n", - regulator->min_uV, regulator->max_uV); + rdev_err(rdev, "Restricting voltage, %u-%uuV\n", + *min_uV, *max_uV); return -EINVAL; } @@ -3032,9 +3032,13 @@ return 0; err: - pr_err("Failed to enable %s: %d\n", consumers[i].supply, ret); - while (--i >= 0) - regulator_disable(consumers[i].consumer); + for (i = 0; i < num_consumers; i++) { + if (consumers[i].ret < 0) + pr_err("Failed to enable %s: %d\n", consumers[i].supply, + consumers[i].ret); + else + regulator_disable(consumers[i].consumer); + } return ret; } --- linux-lts-raring-3.8.0.orig/drivers/regulator/palmas-regulator.c +++ linux-lts-raring-3.8.0/drivers/regulator/palmas-regulator.c @@ -679,7 +679,7 @@ pmic->desc[id].vsel_mask = SMPS10_VSEL; pmic->desc[id].enable_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, - PALMAS_SMPS10_STATUS); + PALMAS_SMPS10_CTRL); pmic->desc[id].enable_mask = SMPS10_BOOST_EN; pmic->desc[id].min_uV = 3750000; pmic->desc[id].uV_step = 1250000; --- linux-lts-raring-3.8.0.orig/drivers/staging/iio/light/tsl2x7x_core.c +++ linux-lts-raring-3.8.0/drivers/staging/iio/light/tsl2x7x_core.c @@ -1923,6 +1923,7 @@ dev_info(&chip->client->dev, "%s: i2c device found does not match expected id\n", __func__); + ret = -EINVAL; goto fail1; } @@ -1961,7 +1962,7 @@ if (ret) { dev_err(&clientp->dev, "%s: irq request failed", __func__); - goto fail2; + goto fail1; } } @@ -1974,17 +1975,17 @@ if (ret) { dev_err(&clientp->dev, "%s: iio registration failed\n", __func__); - goto fail1; + goto fail2; } dev_info(&clientp->dev, "%s Light sensor found.\n", id->name); return 0; -fail1: +fail2: if (clientp->irq) free_irq(clientp->irq, indio_dev); -fail2: +fail1: iio_device_free(indio_dev); return ret; --- linux-lts-raring-3.8.0.orig/drivers/staging/zram/zram_sysfs.c +++ linux-lts-raring-3.8.0/drivers/staging/zram/zram_sysfs.c @@ -186,8 +186,10 @@ u64 val = 0; struct zram *zram = dev_to_zram(dev); + down_read(&zram->init_lock); if (zram->init_done) val = zs_get_total_size_bytes(zram->mem_pool); + up_read(&zram->init_lock); return sprintf(buf, "%llu\n", val); } --- linux-lts-raring-3.8.0.orig/drivers/staging/zram/zram_drv.c +++ linux-lts-raring-3.8.0/drivers/staging/zram/zram_drv.c @@ -228,11 +228,12 @@ return 0; } - user_mem = kmap_atomic(page); if (is_partial_io(bvec)) /* Use a temporary buffer to decompress the page */ - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL); - else + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO); + + user_mem = kmap_atomic(page); + if (!is_partial_io(bvec)) uncmem = user_mem; if (!uncmem) { @@ -279,7 +280,7 @@ * This is a partial IO. We need to read the full page * before to write the changes. */ - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL); + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO); if (!uncmem) { pr_info("Error allocating temp memory!\n"); ret = -ENOMEM; @@ -460,13 +461,20 @@ */ static inline int valid_io_request(struct zram *zram, struct bio *bio) { - if (unlikely( - (bio->bi_sector >= (zram->disksize >> SECTOR_SHIFT)) || - (bio->bi_sector & (ZRAM_SECTOR_PER_LOGICAL_BLOCK - 1)) || - (bio->bi_size & (ZRAM_LOGICAL_BLOCK_SIZE - 1)))) { + u64 start, end, bound; + + /* unaligned request */ + if (unlikely(bio->bi_sector & (ZRAM_SECTOR_PER_LOGICAL_BLOCK - 1))) + return 0; + if (unlikely(bio->bi_size & (ZRAM_LOGICAL_BLOCK_SIZE - 1))) + return 0; + start = bio->bi_sector; + end = start + (bio->bi_size >> SECTOR_SHIFT); + bound = zram->disksize >> SECTOR_SHIFT; + /* out of range range */ + if (unlikely(start >= bound || end > bound || start > end)) return 0; - } /* I/O request is valid */ return 1; @@ -625,7 +633,7 @@ static int create_device(struct zram *zram, int device_id) { - int ret = 0; + int ret = -ENOMEM; init_rwsem(&zram->lock); init_rwsem(&zram->init_lock); @@ -635,7 +643,6 @@ if (!zram->queue) { pr_err("Error allocating disk queue for device %d\n", device_id); - ret = -ENOMEM; goto out; } @@ -645,11 +652,9 @@ /* gendisk structure */ zram->disk = alloc_disk(1); if (!zram->disk) { - blk_cleanup_queue(zram->queue); pr_warn("Error allocating disk structure for device %d\n", device_id); - ret = -ENOMEM; - goto out; + goto out_free_queue; } zram->disk->major = zram_major; @@ -678,11 +683,17 @@ &zram_disk_attr_group); if (ret < 0) { pr_warn("Error creating sysfs group"); - goto out; + goto out_free_disk; } zram->init_done = 0; + return 0; +out_free_disk: + del_gendisk(zram->disk); + put_disk(zram->disk); +out_free_queue: + blk_cleanup_queue(zram->queue); out: return ret; } @@ -763,9 +774,11 @@ for (i = 0; i < num_devices; i++) { zram = &zram_devices[i]; + get_disk(zram->disk); destroy_device(zram); if (zram->init_done) zram_reset_device(zram); + put_disk(zram->disk); } unregister_blkdev(zram_major, "zram"); --- linux-lts-raring-3.8.0.orig/drivers/staging/android/logger.c +++ linux-lts-raring-3.8.0/drivers/staging/android/logger.c @@ -371,7 +371,7 @@ unsigned long nr_segs, loff_t ppos) { struct logger_log *log = file_get_log(iocb->ki_filp); - size_t orig = log->w_off; + size_t orig; struct logger_entry header; struct timespec now; ssize_t ret = 0; @@ -390,6 +390,8 @@ mutex_lock(&log->mutex); + orig = log->w_off; + /* * Fix up any readers, pulling them forward to the first readable * entry after (what will be) the new write offset. We do this now --- linux-lts-raring-3.8.0.orig/drivers/staging/comedi/comedi_fops.c +++ linux-lts-raring-3.8.0/drivers/staging/comedi/comedi_fops.c @@ -1180,22 +1180,19 @@ DPRINTK("subdevice busy\n"); return -EBUSY; } - s->busy = file; /* make sure channel/gain list isn't too long */ if (cmd.chanlist_len > s->len_chanlist) { DPRINTK("channel/gain list too long %u > %d\n", cmd.chanlist_len, s->len_chanlist); - ret = -EINVAL; - goto cleanup; + return -EINVAL; } /* make sure channel/gain list isn't too short */ if (cmd.chanlist_len < 1) { DPRINTK("channel/gain list too short %u < 1\n", cmd.chanlist_len); - ret = -EINVAL; - goto cleanup; + return -EINVAL; } async->cmd = cmd; @@ -1205,8 +1202,7 @@ kmalloc(async->cmd.chanlist_len * sizeof(int), GFP_KERNEL); if (!async->cmd.chanlist) { DPRINTK("allocation failed\n"); - ret = -ENOMEM; - goto cleanup; + return -ENOMEM; } if (copy_from_user(async->cmd.chanlist, user_chanlist, @@ -1258,6 +1254,9 @@ comedi_set_subdevice_runflags(s, ~0, SRF_USER | SRF_RUNNING); + /* set s->busy _after_ setting SRF_RUNNING flag to avoid race with + * comedi_read() or comedi_write() */ + s->busy = file; ret = s->do_cmd(dev, s); if (ret == 0) return 0; @@ -1472,6 +1471,7 @@ void *file) { struct comedi_subdevice *s; + int ret; if (arg >= dev->n_subdevices) return -EINVAL; @@ -1488,7 +1488,11 @@ if (s->busy != file) return -EBUSY; - return do_cancel(dev, s); + ret = do_cancel(dev, s); + if (comedi_get_subdevice_runflags(s) & SRF_USER) + wake_up_interruptible(&s->async->wait_head); + + return ret; } /* @@ -1547,6 +1551,11 @@ /* Device config is special, because it must work on * an unconfigured device. */ if (cmd == COMEDI_DEVCONFIG) { + if (minor >= COMEDI_NUM_BOARD_MINORS) { + /* Device config not appropriate on non-board minors. */ + rc = -ENOTTY; + goto done; + } rc = do_devconfig_ioctl(dev, (struct comedi_devconfig __user *)arg); if (rc == 0) @@ -1774,7 +1783,7 @@ mask = 0; read_subdev = comedi_get_read_subdevice(dev_file_info); - if (read_subdev) { + if (read_subdev && read_subdev->async) { poll_wait(file, &read_subdev->async->wait_head, wait); if (!read_subdev->busy || comedi_buf_read_n_available(read_subdev->async) > 0 @@ -1784,7 +1793,7 @@ } } write_subdev = comedi_get_write_subdevice(dev_file_info); - if (write_subdev) { + if (write_subdev && write_subdev->async) { poll_wait(file, &write_subdev->async->wait_head, wait); comedi_buf_write_alloc(write_subdev->async, write_subdev->async->prealloc_bufsz); @@ -1826,7 +1835,7 @@ } s = comedi_get_write_subdevice(dev_file_info); - if (s == NULL) { + if (s == NULL || s->async == NULL) { retval = -EIO; goto done; } @@ -1850,6 +1859,7 @@ if (!(comedi_get_subdevice_runflags(s) & SRF_RUNNING)) { if (count == 0) { + mutex_lock(&dev->mutex); if (comedi_get_subdevice_runflags(s) & SRF_ERROR) { retval = -EPIPE; @@ -1857,6 +1867,7 @@ retval = 0; } do_become_nonbusy(dev, s); + mutex_unlock(&dev->mutex); } break; } @@ -1937,7 +1948,7 @@ } s = comedi_get_read_subdevice(dev_file_info); - if (s == NULL) { + if (s == NULL || s->async == NULL) { retval = -EIO; goto done; } @@ -1971,6 +1982,7 @@ if (n == 0) { if (!(comedi_get_subdevice_runflags(s) & SRF_RUNNING)) { + mutex_lock(&dev->mutex); do_become_nonbusy(dev, s); if (comedi_get_subdevice_runflags(s) & SRF_ERROR) { @@ -1978,6 +1990,7 @@ } else { retval = 0; } + mutex_unlock(&dev->mutex); break; } if (file->f_flags & O_NONBLOCK) { @@ -2015,9 +2028,11 @@ buf += n; break; /* makes device work like a pipe */ } - if (!(comedi_get_subdevice_runflags(s) & (SRF_ERROR | SRF_RUNNING)) && - async->buf_read_count - async->buf_write_count == 0) { - do_become_nonbusy(dev, s); + if (!(comedi_get_subdevice_runflags(s) & (SRF_ERROR | SRF_RUNNING))) { + mutex_lock(&dev->mutex); + if (async->buf_read_count - async->buf_write_count == 0) + do_become_nonbusy(dev, s); + mutex_unlock(&dev->mutex); } set_current_state(TASK_RUNNING); remove_wait_queue(&async->wait_head, &wait); --- linux-lts-raring-3.8.0.orig/drivers/staging/comedi/drivers/dt9812.c +++ linux-lts-raring-3.8.0/drivers/staging/comedi/drivers/dt9812.c @@ -948,12 +948,13 @@ unsigned int *data) { struct comedi_dt9812 *devpriv = dev->private; + unsigned int channel = CR_CHAN(insn->chanspec); int n; u8 bits = 0; dt9812_digital_in(devpriv->slot, &bits); for (n = 0; n < insn->n; n++) - data[n] = ((1 << insn->chanspec) & bits) != 0; + data[n] = ((1 << channel) & bits) != 0; return n; } @@ -962,12 +963,13 @@ unsigned int *data) { struct comedi_dt9812 *devpriv = dev->private; + unsigned int channel = CR_CHAN(insn->chanspec); int n; u8 bits = 0; dt9812_digital_out_shadow(devpriv->slot, &bits); for (n = 0; n < insn->n; n++) { - u8 mask = 1 << insn->chanspec; + u8 mask = 1 << channel; bits &= ~mask; if (data[n]) @@ -982,13 +984,13 @@ unsigned int *data) { struct comedi_dt9812 *devpriv = dev->private; + unsigned int channel = CR_CHAN(insn->chanspec); int n; for (n = 0; n < insn->n; n++) { u16 value = 0; - dt9812_analog_in(devpriv->slot, insn->chanspec, &value, - DT9812_GAIN_1); + dt9812_analog_in(devpriv->slot, channel, &value, DT9812_GAIN_1); data[n] = value; } return n; @@ -999,12 +1001,13 @@ unsigned int *data) { struct comedi_dt9812 *devpriv = dev->private; + unsigned int channel = CR_CHAN(insn->chanspec); int n; u16 value; for (n = 0; n < insn->n; n++) { value = 0; - dt9812_analog_out_shadow(devpriv->slot, insn->chanspec, &value); + dt9812_analog_out_shadow(devpriv->slot, channel, &value); data[n] = value; } return n; @@ -1015,10 +1018,11 @@ unsigned int *data) { struct comedi_dt9812 *devpriv = dev->private; + unsigned int channel = CR_CHAN(insn->chanspec); int n; for (n = 0; n < insn->n; n++) - dt9812_analog_out(devpriv->slot, insn->chanspec, data[n]); + dt9812_analog_out(devpriv->slot, channel, data[n]); return n; } --- linux-lts-raring-3.8.0.orig/drivers/staging/comedi/drivers/s626.c +++ linux-lts-raring-3.8.0/drivers/staging/comedi/drivers/s626.c @@ -1482,7 +1482,7 @@ case TRIG_NONE: /* continous acquisition */ devpriv->ai_continous = 1; - devpriv->ai_sample_count = 0; + devpriv->ai_sample_count = 1; break; } --- linux-lts-raring-3.8.0.orig/drivers/staging/comedi/drivers/ni_labpc.c +++ linux-lts-raring-3.8.0/drivers/staging/comedi/drivers/ni_labpc.c @@ -1202,7 +1202,8 @@ else channel = CR_CHAN(cmd->chanlist[0]); /* munge channel bits for differential / scan disabled mode */ - if (mode != MODE_SINGLE_CHAN && aref == AREF_DIFF) + if ((mode == MODE_SINGLE_CHAN || mode == MODE_SINGLE_CHAN_INTERVAL) && + aref == AREF_DIFF) channel *= 2; devpriv->command1_bits |= ADC_CHAN_BITS(channel); devpriv->command1_bits |= thisboard->ai_range_code[range]; @@ -1217,21 +1218,6 @@ devpriv->write_byte(devpriv->command1_bits, dev->iobase + COMMAND1_REG); } - /* setup any external triggering/pacing (command4 register) */ - devpriv->command4_bits = 0; - if (cmd->convert_src != TRIG_EXT) - devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; - /* XXX should discard first scan when using interval scanning - * since manual says it is not synced with scan clock */ - if (labpc_use_continuous_mode(cmd, mode) == 0) { - devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; - if (cmd->scan_begin_src == TRIG_EXT) - devpriv->command4_bits |= EXT_SCAN_EN_BIT; - } - /* single-ended/differential */ - if (aref == AREF_DIFF) - devpriv->command4_bits |= ADC_DIFF_BIT; - devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG); devpriv->write_byte(cmd->chanlist_len, dev->iobase + INTERVAL_COUNT_REG); @@ -1311,6 +1297,22 @@ devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT; devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG); + /* setup any external triggering/pacing (command4 register) */ + devpriv->command4_bits = 0; + if (cmd->convert_src != TRIG_EXT) + devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; + /* XXX should discard first scan when using interval scanning + * since manual says it is not synced with scan clock */ + if (labpc_use_continuous_mode(cmd, mode) == 0) { + devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; + if (cmd->scan_begin_src == TRIG_EXT) + devpriv->command4_bits |= EXT_SCAN_EN_BIT; + } + /* single-ended/differential */ + if (aref == AREF_DIFF) + devpriv->command4_bits |= ADC_DIFF_BIT; + devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG); + /* startup acquisition */ /* command2 reg */ --- linux-lts-raring-3.8.0.orig/drivers/staging/comedi/drivers/dt282x.c +++ linux-lts-raring-3.8.0/drivers/staging/comedi/drivers/dt282x.c @@ -271,8 +271,9 @@ } \ udelay(5); \ } \ - if (_i) \ + if (_i) { \ b \ + } \ } while (0) static int prep_ai_dma(struct comedi_device *dev, int chan, int size); --- linux-lts-raring-3.8.0.orig/drivers/staging/line6/pcm.c +++ linux-lts-raring-3.8.0/drivers/staging/line6/pcm.c @@ -384,8 +384,11 @@ */ static void pcm_disconnect_substream(struct snd_pcm_substream *substream) { - if (substream->runtime && snd_pcm_running(substream)) + if (substream->runtime && snd_pcm_running(substream)) { + snd_pcm_stream_lock_irq(substream); snd_pcm_stop(substream, SNDRV_PCM_STATE_DISCONNECTED); + snd_pcm_stream_unlock_irq(substream); + } } /* --- linux-lts-raring-3.8.0.orig/drivers/staging/vt6656/usbpipe.c +++ linux-lts-raring-3.8.0/drivers/staging/vt6656/usbpipe.c @@ -165,6 +165,11 @@ if (pDevice->Flags & fMP_CONTROL_WRITES) return STATUS_FAILURE; + if (pDevice->Flags & fMP_CONTROL_READS) + return STATUS_FAILURE; + + MP_SET_FLAG(pDevice, fMP_CONTROL_WRITES); + pDevice->sUsbCtlRequest.bRequestType = 0x40; pDevice->sUsbCtlRequest.bRequest = byRequest; pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue); @@ -179,12 +184,13 @@ ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC); if (ntStatus != 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control send request submission failed: %d\n", ntStatus); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "control send request submission failed: %d\n", + ntStatus); + MP_CLEAR_FLAG(pDevice, fMP_CONTROL_WRITES); return STATUS_FAILURE; } - else { - MP_SET_FLAG(pDevice, fMP_CONTROL_WRITES); - } + spin_unlock_irq(&pDevice->lock); for (ii = 0; ii <= USB_CTL_WAIT; ii ++) { @@ -224,6 +230,11 @@ if (pDevice->Flags & fMP_CONTROL_READS) return STATUS_FAILURE; + if (pDevice->Flags & fMP_CONTROL_WRITES) + return STATUS_FAILURE; + + MP_SET_FLAG(pDevice, fMP_CONTROL_READS); + pDevice->sUsbCtlRequest.bRequestType = 0xC0; pDevice->sUsbCtlRequest.bRequest = byRequest; pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue); @@ -237,10 +248,11 @@ ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC); if (ntStatus != 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control request submission failed: %d\n", ntStatus); - }else { - MP_SET_FLAG(pDevice, fMP_CONTROL_READS); - } + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "control request submission failed: %d\n", ntStatus); + MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS); + return STATUS_FAILURE; + } spin_unlock_irq(&pDevice->lock); for (ii = 0; ii <= USB_CTL_WAIT; ii ++) { --- linux-lts-raring-3.8.0.orig/drivers/staging/vt6656/rxtx.c +++ linux-lts-raring-3.8.0/drivers/staging/vt6656/rxtx.c @@ -1454,7 +1454,7 @@ pvRrvTime = pMICHDR = pvRTS = pvCTS = pvTxDataHd = NULL; if (bNeedEncryption && pTransmitKey->pvKeyTable) { - if (((PSKeyTable)&pTransmitKey->pvKeyTable)->bSoftWEP == TRUE) + if (((PSKeyTable)pTransmitKey->pvKeyTable)->bSoftWEP == TRUE) bSoftWEP = TRUE; /* WEP 256 */ } --- linux-lts-raring-3.8.0.orig/drivers/staging/vt6656/main_usb.c +++ linux-lts-raring-3.8.0/drivers/staging/vt6656/main_usb.c @@ -644,8 +644,6 @@ if (device->flags & DEVICE_FLAGS_OPENED) device_close(device->dev); - usb_put_dev(interface_to_usbdev(intf)); - return 0; } @@ -656,8 +654,6 @@ if (!device || !device->dev) return -ENODEV; - usb_get_dev(interface_to_usbdev(intf)); - if (!(device->flags & DEVICE_FLAGS_OPENED)) device_open(device->dev); @@ -1116,6 +1112,8 @@ memset(pMgmt->abyCurrBSSID, 0, 6); pMgmt->eCurrState = WMAC_STATE_IDLE; + pDevice->flags &= ~DEVICE_FLAGS_OPENED; + device_free_tx_bufs(pDevice); device_free_rx_bufs(pDevice); device_free_int_bufs(pDevice); @@ -1127,7 +1125,6 @@ usb_free_urb(pDevice->pInterruptURB); BSSvClearNodeDBTable(pDevice, 0); - pDevice->flags &=(~DEVICE_FLAGS_OPENED); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close2 \n"); --- linux-lts-raring-3.8.0.orig/drivers/staging/vt6656/dpc.c +++ linux-lts-raring-3.8.0/drivers/staging/vt6656/dpc.c @@ -1190,7 +1190,7 @@ if (byDecMode == KEY_CTL_WEP) { // handle WEP if ((pDevice->byLocalID <= REV_ID_VT3253_A1) || - (((PSKeyTable)(&pKey->pvKeyTable))->bSoftWEP == TRUE)) { + (((PSKeyTable)(pKey->pvKeyTable))->bSoftWEP == TRUE)) { // Software WEP // 1. 3253A // 2. WEP 256 @@ -1299,7 +1299,7 @@ // handle WEP DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"byDecMode == KEY_CTL_WEP\n"); if ((pDevice->byLocalID <= REV_ID_VT3253_A1) || - (((PSKeyTable)(&pKey->pvKeyTable))->bSoftWEP == TRUE) || + (((PSKeyTable)(pKey->pvKeyTable))->bSoftWEP == TRUE) || (bOnFly == FALSE)) { // Software WEP // 1. 3253A --- linux-lts-raring-3.8.0.orig/drivers/staging/vt6656/hostap.c +++ linux-lts-raring-3.8.0/drivers/staging/vt6656/hostap.c @@ -133,7 +133,7 @@ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n", pDevice->dev->name, pDevice->apdev->name); } - kfree(pDevice->apdev); + free_netdev(pDevice->apdev); pDevice->apdev = NULL; pDevice->bEnable8021x = FALSE; pDevice->bEnableHostWEP = FALSE; --- linux-lts-raring-3.8.0.orig/drivers/staging/vt6656/iwctl.c +++ linux-lts-raring-3.8.0/drivers/staging/vt6656/iwctl.c @@ -1348,9 +1348,12 @@ return rc; } + spin_lock_irq(&pDevice->lock); + if (wrq->disabled) { pDevice->ePSMode = WMAC_POWER_CAM; PSvDisablePowerSaving(pDevice); + spin_unlock_irq(&pDevice->lock); return rc; } if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { @@ -1361,6 +1364,9 @@ pDevice->ePSMode = WMAC_POWER_FAST; PSvEnablePowerSaving((void *)pDevice, pMgmt->wListenInterval); } + + spin_unlock_irq(&pDevice->lock); + switch (wrq->flags & IW_POWER_MODE) { case IW_POWER_UNICAST_R: DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWPOWER: IW_POWER_UNICAST_R \n"); @@ -1631,6 +1637,9 @@ if (pMgmt == NULL) return -EFAULT; + if (!(pDevice->flags & DEVICE_FLAGS_OPENED)) + return -ENODEV; + buf = kzalloc(sizeof(struct viawget_wpa_param), GFP_KERNEL); if (buf == NULL) return -ENOMEM; --- linux-lts-raring-3.8.0.orig/drivers/staging/zsmalloc/Kconfig +++ linux-lts-raring-3.8.0/drivers/staging/zsmalloc/Kconfig @@ -1,5 +1,5 @@ config ZSMALLOC - tristate "Memory allocator for compressed pages" + bool "Memory allocator for compressed pages" default n help zsmalloc is a slab-based memory allocator designed to store --- linux-lts-raring-3.8.0.orig/drivers/staging/zsmalloc/zsmalloc-main.c +++ linux-lts-raring-3.8.0/drivers/staging/zsmalloc/zsmalloc-main.c @@ -222,11 +222,9 @@ /* * By default, zsmalloc uses a copy-based object mapping method to access * allocations that span two pages. However, if a particular architecture - * 1) Implements local_flush_tlb_kernel_range() and 2) Performs VM mapping - * faster than copying, then it should be added here so that - * USE_PGTABLE_MAPPING is defined. This causes zsmalloc to use page table - * mapping rather than copying - * for object mapping. + * performs VM mapping faster than copying, then it should be added here + * so that USE_PGTABLE_MAPPING is defined. This causes zsmalloc to use + * page table mapping rather than copying for object mapping. */ #if defined(CONFIG_ARM) #define USE_PGTABLE_MAPPING @@ -659,11 +657,8 @@ struct page *pages[2], int off, int size) { unsigned long addr = (unsigned long)area->vm_addr; - unsigned long end = addr + (PAGE_SIZE * 2); - flush_cache_vunmap(addr, end); - unmap_kernel_range_noflush(addr, PAGE_SIZE * 2); - local_flush_tlb_kernel_range(addr, end); + unmap_kernel_range(addr, PAGE_SIZE * 2); } #else /* USE_PGTABLE_MAPPING */ --- linux-lts-raring-3.8.0.orig/drivers/staging/tidspbridge/Kconfig +++ linux-lts-raring-3.8.0/drivers/staging/tidspbridge/Kconfig @@ -4,7 +4,7 @@ menuconfig TIDSPBRIDGE tristate "DSP Bridge driver" - depends on ARCH_OMAP3 + depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM select OMAP_MBOX_FWK help DSP/BIOS Bridge is designed for platforms that contain a GPP and --- linux-lts-raring-3.8.0.orig/drivers/md/dm-thin.c +++ linux-lts-raring-3.8.0/drivers/md/dm-thin.c @@ -2299,8 +2299,8 @@ * / * / */ -static int pool_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void pool_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { int r; unsigned sz = 0; @@ -2326,32 +2326,41 @@ if (!(status_flags & DM_STATUS_NOFLUSH_FLAG) && !dm_suspended(ti)) (void) commit_or_fallback(pool); - r = dm_pool_get_metadata_transaction_id(pool->pmd, - &transaction_id); - if (r) - return r; - - r = dm_pool_get_free_metadata_block_count(pool->pmd, - &nr_free_blocks_metadata); - if (r) - return r; + r = dm_pool_get_metadata_transaction_id(pool->pmd, &transaction_id); + if (r) { + DMERR("dm_pool_get_metadata_transaction_id returned %d", r); + goto err; + } + + r = dm_pool_get_free_metadata_block_count(pool->pmd, &nr_free_blocks_metadata); + if (r) { + DMERR("dm_pool_get_free_metadata_block_count returned %d", r); + goto err; + } r = dm_pool_get_metadata_dev_size(pool->pmd, &nr_blocks_metadata); - if (r) - return r; + if (r) { + DMERR("dm_pool_get_metadata_dev_size returned %d", r); + goto err; + } - r = dm_pool_get_free_block_count(pool->pmd, - &nr_free_blocks_data); - if (r) - return r; + r = dm_pool_get_free_block_count(pool->pmd, &nr_free_blocks_data); + if (r) { + DMERR("dm_pool_get_free_block_count returned %d", r); + goto err; + } r = dm_pool_get_data_dev_size(pool->pmd, &nr_blocks_data); - if (r) - return r; + if (r) { + DMERR("dm_pool_get_data_dev_size returned %d", r); + goto err; + } r = dm_pool_get_metadata_snap(pool->pmd, &held_root); - if (r) - return r; + if (r) { + DMERR("dm_pool_get_metadata_snap returned %d", r); + goto err; + } DMEMIT("%llu %llu/%llu %llu/%llu ", (unsigned long long)transaction_id, @@ -2388,8 +2397,10 @@ emit_flags(&pt->requested_pf, result, sz, maxlen); break; } + return; - return 0; +err: + DMEMIT("Error"); } static int pool_iterate_devices(struct dm_target *ti, @@ -2468,7 +2479,7 @@ .name = "thin-pool", .features = DM_TARGET_SINGLETON | DM_TARGET_ALWAYS_WRITEABLE | DM_TARGET_IMMUTABLE, - .version = {1, 6, 0}, + .version = {1, 7, 0}, .module = THIS_MODULE, .ctr = pool_ctr, .dtr = pool_dtr, @@ -2676,8 +2687,8 @@ /* * */ -static int thin_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void thin_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { int r; ssize_t sz = 0; @@ -2687,7 +2698,7 @@ if (get_pool_mode(tc->pool) == PM_FAIL) { DMEMIT("Fail"); - return 0; + return; } if (!tc->td) @@ -2696,12 +2707,16 @@ switch (type) { case STATUSTYPE_INFO: r = dm_thin_get_mapped_count(tc->td, &mapped); - if (r) - return r; + if (r) { + DMERR("dm_thin_get_mapped_count returned %d", r); + goto err; + } r = dm_thin_get_highest_mapped_block(tc->td, &highest); - if (r < 0) - return r; + if (r < 0) { + DMERR("dm_thin_get_highest_mapped_block returned %d", r); + goto err; + } DMEMIT("%llu ", mapped * tc->pool->sectors_per_block); if (r) @@ -2721,7 +2736,10 @@ } } - return 0; + return; + +err: + DMEMIT("Error"); } static int thin_iterate_devices(struct dm_target *ti, @@ -2748,7 +2766,7 @@ static struct target_type thin_target = { .name = "thin", - .version = {1, 7, 0}, + .version = {1, 8, 0}, .module = THIS_MODULE, .ctr = thin_ctr, .dtr = thin_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm-crypt.c +++ linux-lts-raring-3.8.0/drivers/md/dm-crypt.c @@ -1234,20 +1234,6 @@ return 0; } -/* - * Encode key into its hex representation - */ -static void crypt_encode_key(char *hex, u8 *key, unsigned int size) -{ - unsigned int i; - - for (i = 0; i < size; i++) { - sprintf(hex, "%02x", *key); - hex += 2; - key++; - } -} - static void crypt_free_tfms(struct crypt_config *cc) { unsigned i; @@ -1717,11 +1703,11 @@ return DM_MAPIO_SUBMITTED; } -static int crypt_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void crypt_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct crypt_config *cc = ti->private; - unsigned int sz = 0; + unsigned i, sz = 0; switch (type) { case STATUSTYPE_INFO: @@ -1731,17 +1717,11 @@ case STATUSTYPE_TABLE: DMEMIT("%s ", cc->cipher_string); - if (cc->key_size > 0) { - if ((maxlen - sz) < ((cc->key_size << 1) + 1)) - return -ENOMEM; - - crypt_encode_key(result + sz, cc->key, cc->key_size); - sz += cc->key_size << 1; - } else { - if (sz >= maxlen) - return -ENOMEM; - result[sz++] = '-'; - } + if (cc->key_size > 0) + for (i = 0; i < cc->key_size; i++) + DMEMIT("%02x", cc->key[i]); + else + DMEMIT("-"); DMEMIT(" %llu %s %llu", (unsigned long long)cc->iv_offset, cc->dev->name, (unsigned long long)cc->start); @@ -1751,7 +1731,6 @@ break; } - return 0; } static void crypt_postsuspend(struct dm_target *ti) @@ -1843,9 +1822,15 @@ return fn(ti, cc->dev, cc->start, ti->len, data); } +static void crypt_io_hints(struct dm_target *ti, + struct queue_limits *limits) +{ + limits->max_write_same_sectors = 0; +} + static struct target_type crypt_target = { .name = "crypt", - .version = {1, 12, 0}, + .version = {1, 12, 1}, .module = THIS_MODULE, .ctr = crypt_ctr, .dtr = crypt_dtr, @@ -1857,6 +1842,7 @@ .message = crypt_message, .merge = crypt_merge, .iterate_devices = crypt_iterate_devices, + .io_hints = crypt_io_hints, }; static int __init dm_crypt_init(void) --- linux-lts-raring-3.8.0.orig/drivers/md/dm-raid1.c +++ linux-lts-raring-3.8.0/drivers/md/dm-raid1.c @@ -1347,8 +1347,8 @@ } -static int mirror_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void mirror_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { unsigned int m, sz = 0; struct mirror_set *ms = (struct mirror_set *) ti->private; @@ -1383,8 +1383,6 @@ if (ms->features & DM_RAID1_HANDLE_ERRORS) DMEMIT(" 1 handle_errors"); } - - return 0; } static int mirror_iterate_devices(struct dm_target *ti, @@ -1403,7 +1401,7 @@ static struct target_type mirror_target = { .name = "mirror", - .version = {1, 13, 1}, + .version = {1, 13, 2}, .module = THIS_MODULE, .ctr = mirror_ctr, .dtr = mirror_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm-flakey.c +++ linux-lts-raring-3.8.0/drivers/md/dm-flakey.c @@ -337,8 +337,8 @@ return error; } -static int flakey_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void flakey_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { unsigned sz = 0; struct flakey_c *fc = ti->private; @@ -368,7 +368,6 @@ break; } - return 0; } static int flakey_ioctl(struct dm_target *ti, unsigned int cmd, unsigned long arg) @@ -411,7 +410,7 @@ static struct target_type flakey_target = { .name = "flakey", - .version = {1, 3, 0}, + .version = {1, 3, 1}, .module = THIS_MODULE, .ctr = flakey_ctr, .dtr = flakey_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm-table.c +++ linux-lts-raring-3.8.0/drivers/md/dm-table.c @@ -1443,7 +1443,7 @@ return false; if (!ti->type->iterate_devices || - !ti->type->iterate_devices(ti, device_not_write_same_capable, NULL)) + ti->type->iterate_devices(ti, device_not_write_same_capable, NULL)) return false; } --- linux-lts-raring-3.8.0.orig/drivers/md/dm-delay.c +++ linux-lts-raring-3.8.0/drivers/md/dm-delay.c @@ -293,8 +293,8 @@ return delay_bio(dc, dc->read_delay, bio); } -static int delay_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void delay_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct delay_c *dc = ti->private; int sz = 0; @@ -314,8 +314,6 @@ dc->write_delay); break; } - - return 0; } static int delay_iterate_devices(struct dm_target *ti, @@ -337,7 +335,7 @@ static struct target_type delay_target = { .name = "delay", - .version = {1, 2, 0}, + .version = {1, 2, 1}, .module = THIS_MODULE, .ctr = delay_ctr, .dtr = delay_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm-ioctl.c +++ linux-lts-raring-3.8.0/drivers/md/dm-ioctl.c @@ -1067,6 +1067,7 @@ num_targets = dm_table_get_num_targets(table); for (i = 0; i < num_targets; i++) { struct dm_target *ti = dm_table_get_target(table, i); + size_t l; remaining = len - (outptr - outbuf); if (remaining <= sizeof(struct dm_target_spec)) { @@ -1093,14 +1094,17 @@ if (ti->type->status) { if (param->flags & DM_NOFLUSH_FLAG) status_flags |= DM_STATUS_NOFLUSH_FLAG; - if (ti->type->status(ti, type, status_flags, outptr, remaining)) { - param->flags |= DM_BUFFER_FULL_FLAG; - break; - } + ti->type->status(ti, type, status_flags, outptr, remaining); } else outptr[0] = '\0'; - outptr += strlen(outptr) + 1; + l = strlen(outptr) + 1; + if (l == remaining) { + param->flags |= DM_BUFFER_FULL_FLAG; + break; + } + + outptr += l; used = param->data_start + (outptr - outbuf); outptr = align_ptr(outptr); @@ -1581,7 +1585,10 @@ dmi = kmalloc(tmp.data_size, GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN); if (!dmi) { + unsigned noio_flag; + noio_flag = memalloc_noio_save(); dmi = __vmalloc(tmp.data_size, GFP_NOIO | __GFP_REPEAT | __GFP_HIGH, PAGE_KERNEL); + memalloc_noio_restore(noio_flag); *param_flags |= DM_PARAMS_VMALLOC; } --- linux-lts-raring-3.8.0.orig/drivers/md/raid5.h +++ linux-lts-raring-3.8.0/drivers/md/raid5.h @@ -310,6 +310,7 @@ STRIPE_SYNC_REQUESTED, STRIPE_SYNCING, STRIPE_INSYNC, + STRIPE_REPLACED, STRIPE_PREREAD_ACTIVE, STRIPE_DELAYED, STRIPE_DEGRADED, @@ -323,6 +324,7 @@ STRIPE_COMPUTE_RUN, STRIPE_OPS_REQ_PENDING, STRIPE_ON_UNPLUG_LIST, + STRIPE_DISCARD, }; /* --- linux-lts-raring-3.8.0.orig/drivers/md/raid0.c +++ linux-lts-raring-3.8.0/drivers/md/raid0.c @@ -289,7 +289,7 @@ kfree(conf->strip_zone); kfree(conf->devlist); kfree(conf); - *private_conf = NULL; + *private_conf = ERR_PTR(err); return err; } @@ -411,7 +411,8 @@ "%s does not support generic reshape\n", __func__); rdev_for_each(rdev, mddev) - array_sectors += rdev->sectors; + array_sectors += (rdev->sectors & + ~(sector_t)(mddev->chunk_sectors-1)); return array_sectors; } --- linux-lts-raring-3.8.0.orig/drivers/md/dm-raid.c +++ linux-lts-raring-3.8.0/drivers/md/dm-raid.c @@ -1201,8 +1201,8 @@ return DM_MAPIO_SUBMITTED; } -static int raid_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void raid_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct raid_set *rs = ti->private; unsigned raid_param_cnt = 1; /* at least 1 for chunksize */ @@ -1344,8 +1344,6 @@ DMEMIT(" -"); } } - - return 0; } static int raid_iterate_devices(struct dm_target *ti, iterate_devices_callout_fn fn, void *data) @@ -1405,7 +1403,7 @@ static struct target_type raid_target = { .name = "raid", - .version = {1, 4, 1}, + .version = {1, 4, 2}, .module = THIS_MODULE, .ctr = raid_ctr, .dtr = raid_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm-snap.c +++ linux-lts-raring-3.8.0/drivers/md/dm-snap.c @@ -723,17 +723,16 @@ */ static int init_hash_tables(struct dm_snapshot *s) { - sector_t hash_size, cow_dev_size, origin_dev_size, max_buckets; + sector_t hash_size, cow_dev_size, max_buckets; /* * Calculate based on the size of the original volume or * the COW volume... */ cow_dev_size = get_dev_size(s->cow->bdev); - origin_dev_size = get_dev_size(s->origin->bdev); max_buckets = calc_max_buckets(); - hash_size = min(origin_dev_size, cow_dev_size) >> s->store->chunk_shift; + hash_size = cow_dev_size >> s->store->chunk_shift; hash_size = min(hash_size, max_buckets); if (hash_size < 64) @@ -1119,6 +1118,7 @@ s->pending_pool = mempool_create_slab_pool(MIN_IOS, pending_cache); if (!s->pending_pool) { ti->error = "Could not allocate mempool for pending exceptions"; + r = -ENOMEM; goto bad_pending_pool; } @@ -1837,8 +1837,8 @@ start_merge(s); } -static int snapshot_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void snapshot_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { unsigned sz = 0; struct dm_snapshot *snap = ti->private; @@ -1884,8 +1884,6 @@ maxlen - sz); break; } - - return 0; } static int snapshot_iterate_devices(struct dm_target *ti, @@ -2139,8 +2137,8 @@ ti->max_io_len = get_origin_minimum_chunksize(dev->bdev); } -static int origin_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void origin_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct dm_dev *dev = ti->private; @@ -2153,8 +2151,6 @@ snprintf(result, maxlen, "%s", dev->name); break; } - - return 0; } static int origin_merge(struct dm_target *ti, struct bvec_merge_data *bvm, @@ -2181,7 +2177,7 @@ static struct target_type origin_target = { .name = "snapshot-origin", - .version = {1, 8, 0}, + .version = {1, 8, 1}, .module = THIS_MODULE, .ctr = origin_ctr, .dtr = origin_dtr, @@ -2194,7 +2190,7 @@ static struct target_type snapshot_target = { .name = "snapshot", - .version = {1, 11, 0}, + .version = {1, 11, 1}, .module = THIS_MODULE, .ctr = snapshot_ctr, .dtr = snapshot_dtr, @@ -2307,3 +2303,5 @@ MODULE_DESCRIPTION(DM_NAME " snapshot target"); MODULE_AUTHOR("Joe Thornber"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("dm-snapshot-origin"); +MODULE_ALIAS("dm-snapshot-merge"); --- linux-lts-raring-3.8.0.orig/drivers/md/raid5.c +++ linux-lts-raring-3.8.0/drivers/md/raid5.c @@ -674,9 +674,11 @@ bi->bi_next = NULL; if (rrdev) set_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags); - trace_block_bio_remap(bdev_get_queue(bi->bi_bdev), - bi, disk_devt(conf->mddev->gendisk), - sh->dev[i].sector); + + if (conf->mddev->gendisk) + trace_block_bio_remap(bdev_get_queue(bi->bi_bdev), + bi, disk_devt(conf->mddev->gendisk), + sh->dev[i].sector); generic_make_request(bi); } if (rrdev) { @@ -704,9 +706,10 @@ rbi->bi_io_vec[0].bv_offset = 0; rbi->bi_size = STRIPE_SIZE; rbi->bi_next = NULL; - trace_block_bio_remap(bdev_get_queue(rbi->bi_bdev), - rbi, disk_devt(conf->mddev->gendisk), - sh->dev[i].sector); + if (conf->mddev->gendisk) + trace_block_bio_remap(bdev_get_queue(rbi->bi_bdev), + rbi, disk_devt(conf->mddev->gendisk), + sh->dev[i].sector); generic_make_request(rbi); } if (!rdev && !rrdev) { @@ -2319,17 +2322,6 @@ int level = conf->level; if (rcw) { - /* if we are not expanding this is a proper write request, and - * there will be bios with new data to be drained into the - * stripe cache - */ - if (!expand) { - sh->reconstruct_state = reconstruct_state_drain_run; - set_bit(STRIPE_OP_BIODRAIN, &s->ops_request); - } else - sh->reconstruct_state = reconstruct_state_run; - - set_bit(STRIPE_OP_RECONSTRUCT, &s->ops_request); for (i = disks; i--; ) { struct r5dev *dev = &sh->dev[i]; @@ -2342,6 +2334,21 @@ s->locked++; } } + /* if we are not expanding this is a proper write request, and + * there will be bios with new data to be drained into the + * stripe cache + */ + if (!expand) { + if (!s->locked) + /* False alarm, nothing to do */ + return; + sh->reconstruct_state = reconstruct_state_drain_run; + set_bit(STRIPE_OP_BIODRAIN, &s->ops_request); + } else + sh->reconstruct_state = reconstruct_state_run; + + set_bit(STRIPE_OP_RECONSTRUCT, &s->ops_request); + if (s->locked + conf->max_degraded == disks) if (!test_and_set_bit(STRIPE_FULL_WRITE, &sh->state)) atomic_inc(&conf->pending_full_writes); @@ -2350,11 +2357,6 @@ BUG_ON(!(test_bit(R5_UPTODATE, &sh->dev[pd_idx].flags) || test_bit(R5_Wantcompute, &sh->dev[pd_idx].flags))); - sh->reconstruct_state = reconstruct_state_prexor_drain_run; - set_bit(STRIPE_OP_PREXOR, &s->ops_request); - set_bit(STRIPE_OP_BIODRAIN, &s->ops_request); - set_bit(STRIPE_OP_RECONSTRUCT, &s->ops_request); - for (i = disks; i--; ) { struct r5dev *dev = &sh->dev[i]; if (i == pd_idx) @@ -2369,6 +2371,13 @@ s->locked++; } } + if (!s->locked) + /* False alarm - nothing to do */ + return; + sh->reconstruct_state = reconstruct_state_prexor_drain_run; + set_bit(STRIPE_OP_PREXOR, &s->ops_request); + set_bit(STRIPE_OP_BIODRAIN, &s->ops_request); + set_bit(STRIPE_OP_RECONSTRUCT, &s->ops_request); } /* keep the parity disk(s) locked while asynchronous operations @@ -2603,6 +2612,8 @@ int i; clear_bit(STRIPE_SYNCING, &sh->state); + if (test_and_clear_bit(R5_Overlap, &sh->dev[sh->pd_idx].flags)) + wake_up(&conf->wait_for_overlap); s->syncing = 0; s->replacing = 0; /* There is nothing more to do for sync/check/repair. @@ -2776,6 +2787,7 @@ { int i; struct r5dev *dev; + int discard_pending = 0; for (i = disks; i--; ) if (sh->dev[i].written) { @@ -2804,9 +2816,23 @@ STRIPE_SECTORS, !test_bit(STRIPE_DEGRADED, &sh->state), 0); - } - } else if (test_bit(R5_Discard, &sh->dev[i].flags)) - clear_bit(R5_Discard, &sh->dev[i].flags); + } else if (test_bit(R5_Discard, &dev->flags)) + discard_pending = 1; + } + if (!discard_pending && + test_bit(R5_Discard, &sh->dev[sh->pd_idx].flags)) { + clear_bit(R5_Discard, &sh->dev[sh->pd_idx].flags); + clear_bit(R5_UPTODATE, &sh->dev[sh->pd_idx].flags); + if (sh->qd_idx >= 0) { + clear_bit(R5_Discard, &sh->dev[sh->qd_idx].flags); + clear_bit(R5_UPTODATE, &sh->dev[sh->qd_idx].flags); + } + /* now that discard is done we can proceed with any sync */ + clear_bit(STRIPE_DISCARD, &sh->state); + if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state)) + set_bit(STRIPE_HANDLE, &sh->state); + + } if (test_and_clear_bit(STRIPE_FULL_WRITE, &sh->state)) if (atomic_dec_and_test(&conf->pending_full_writes)) @@ -2865,8 +2891,10 @@ set_bit(STRIPE_HANDLE, &sh->state); if (rmw < rcw && rmw > 0) { /* prefer read-modify-write, but need to get some data */ - blk_add_trace_msg(conf->mddev->queue, "raid5 rmw %llu %d", - (unsigned long long)sh->sector, rmw); + if (conf->mddev->queue) + blk_add_trace_msg(conf->mddev->queue, + "raid5 rmw %llu %d", + (unsigned long long)sh->sector, rmw); for (i = disks; i--; ) { struct r5dev *dev = &sh->dev[i]; if ((dev->towrite || i == sh->pd_idx) && @@ -2916,7 +2944,7 @@ } } } - if (rcw) + if (rcw && conf->mddev->queue) blk_add_trace_msg(conf->mddev->queue, "raid5 rcw %llu %d %d %d", (unsigned long long)sh->sector, rcw, qread, test_bit(STRIPE_DELAYED, &sh->state)); @@ -3456,9 +3484,16 @@ return; } - if (test_and_clear_bit(STRIPE_SYNC_REQUESTED, &sh->state)) { - set_bit(STRIPE_SYNCING, &sh->state); - clear_bit(STRIPE_INSYNC, &sh->state); + if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state)) { + spin_lock(&sh->stripe_lock); + /* Cannot process 'sync' concurrently with 'discard' */ + if (!test_bit(STRIPE_DISCARD, &sh->state) && + test_and_clear_bit(STRIPE_SYNC_REQUESTED, &sh->state)) { + set_bit(STRIPE_SYNCING, &sh->state); + clear_bit(STRIPE_INSYNC, &sh->state); + clear_bit(STRIPE_REPLACED, &sh->state); + } + spin_unlock(&sh->stripe_lock); } clear_bit(STRIPE_DELAYED, &sh->state); @@ -3602,22 +3637,28 @@ handle_parity_checks5(conf, sh, &s, disks); } - if (s.replacing && s.locked == 0 - && !test_bit(STRIPE_INSYNC, &sh->state)) { + if ((s.replacing || s.syncing) && s.locked == 0 + && !test_bit(STRIPE_COMPUTE_RUN, &sh->state) + && !test_bit(STRIPE_REPLACED, &sh->state)) { /* Write out to replacement devices where possible */ for (i = 0; i < conf->raid_disks; i++) - if (test_bit(R5_UPTODATE, &sh->dev[i].flags) && - test_bit(R5_NeedReplace, &sh->dev[i].flags)) { + if (test_bit(R5_NeedReplace, &sh->dev[i].flags)) { + WARN_ON(!test_bit(R5_UPTODATE, &sh->dev[i].flags)); set_bit(R5_WantReplace, &sh->dev[i].flags); set_bit(R5_LOCKED, &sh->dev[i].flags); s.locked++; } - set_bit(STRIPE_INSYNC, &sh->state); + if (s.replacing) + set_bit(STRIPE_INSYNC, &sh->state); + set_bit(STRIPE_REPLACED, &sh->state); } if ((s.syncing || s.replacing) && s.locked == 0 && + !test_bit(STRIPE_COMPUTE_RUN, &sh->state) && test_bit(STRIPE_INSYNC, &sh->state)) { md_done_sync(conf->mddev, STRIPE_SECTORS, 1); clear_bit(STRIPE_SYNCING, &sh->state); + if (test_and_clear_bit(R5_Overlap, &sh->dev[sh->pd_idx].flags)) + wake_up(&conf->wait_for_overlap); } /* If the failed drives are just a ReadError, then we might need @@ -4023,9 +4064,10 @@ atomic_inc(&conf->active_aligned_reads); spin_unlock_irq(&conf->device_lock); - trace_block_bio_remap(bdev_get_queue(align_bi->bi_bdev), - align_bi, disk_devt(mddev->gendisk), - raid_bio->bi_sector); + if (mddev->gendisk) + trace_block_bio_remap(bdev_get_queue(align_bi->bi_bdev), + align_bi, disk_devt(mddev->gendisk), + raid_bio->bi_sector); generic_make_request(align_bi); return 1; } else { @@ -4119,7 +4161,8 @@ } spin_unlock_irq(&conf->device_lock); } - trace_block_unplug(mddev->queue, cnt, !from_schedule); + if (mddev->queue) + trace_block_unplug(mddev->queue, cnt, !from_schedule); kfree(cb); } @@ -4182,6 +4225,13 @@ sh = get_active_stripe(conf, logical_sector, 0, 0, 0); prepare_to_wait(&conf->wait_for_overlap, &w, TASK_UNINTERRUPTIBLE); + set_bit(R5_Overlap, &sh->dev[sh->pd_idx].flags); + if (test_bit(STRIPE_SYNCING, &sh->state)) { + release_stripe(sh); + schedule(); + goto again; + } + clear_bit(R5_Overlap, &sh->dev[sh->pd_idx].flags); spin_lock_irq(&sh->stripe_lock); for (d = 0; d < conf->raid_disks; d++) { if (d == sh->pd_idx || d == sh->qd_idx) @@ -4194,6 +4244,7 @@ goto again; } } + set_bit(STRIPE_DISCARD, &sh->state); finish_wait(&conf->wait_for_overlap, &w); for (d = 0; d < conf->raid_disks; d++) { if (d == sh->pd_idx || d == sh->qd_idx) @@ -5448,7 +5499,7 @@ if (mddev->major_version == 0 && mddev->minor_version > 90) rdev->recovery_offset = reshape_offset; - + if (rdev->recovery_offset < reshape_offset) { /* We need to check old and new layout */ if (!only_parity(rdev->raid_disk, @@ -5571,6 +5622,8 @@ */ mddev->queue->limits.discard_zeroes_data = 0; + blk_queue_max_write_same_sectors(mddev->queue, 0); + rdev_for_each(rdev, mddev) { disk_stack_limits(mddev->gendisk, rdev->bdev, rdev->data_offset << 9); --- linux-lts-raring-3.8.0.orig/drivers/md/dm-snap-persistent.c +++ linux-lts-raring-3.8.0/drivers/md/dm-snap-persistent.c @@ -256,7 +256,7 @@ */ INIT_WORK_ONSTACK(&req.work, do_metadata); queue_work(ps->metadata_wq, &req.work); - flush_work(&req.work); + flush_workqueue(ps->metadata_wq); return req.result; } --- linux-lts-raring-3.8.0.orig/drivers/md/dm-mpath.c +++ linux-lts-raring-3.8.0/drivers/md/dm-mpath.c @@ -1378,8 +1378,8 @@ * [priority selector-name num_ps_args [ps_args]* * num_paths num_selector_args [path_dev [selector_args]* ]+ ]+ */ -static int multipath_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void multipath_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { int sz = 0; unsigned long flags; @@ -1485,8 +1485,6 @@ } spin_unlock_irqrestore(&m->lock, flags); - - return 0; } static int multipath_message(struct dm_target *ti, unsigned argc, char **argv) @@ -1562,7 +1560,6 @@ unsigned long flags; int r; -again: bdev = NULL; mode = 0; r = 0; @@ -1580,7 +1577,7 @@ } if ((pgpath && m->queue_io) || (!pgpath && m->queue_if_no_path)) - r = -EAGAIN; + r = -ENOTCONN; else if (!bdev) r = -EIO; @@ -1592,11 +1589,8 @@ if (!r && ti->len != i_size_read(bdev->bd_inode) >> SECTOR_SHIFT) r = scsi_verify_blk_ioctl(NULL, cmd); - if (r == -EAGAIN && !fatal_signal_pending(current)) { + if (r == -ENOTCONN && !fatal_signal_pending(current)) queue_work(kmultipathd, &m->process_queued_ios); - msleep(10); - goto again; - } return r ? : __blkdev_driver_ioctl(bdev, mode, cmd, arg); } @@ -1695,7 +1689,7 @@ *---------------------------------------------------------------*/ static struct target_type multipath_target = { .name = "multipath", - .version = {1, 5, 0}, + .version = {1, 5, 1}, .module = THIS_MODULE, .ctr = multipath_ctr, .dtr = multipath_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm.c +++ linux-lts-raring-3.8.0/drivers/md/dm.c @@ -404,10 +404,12 @@ unsigned int cmd, unsigned long arg) { struct mapped_device *md = bdev->bd_disk->private_data; - struct dm_table *map = dm_get_live_table(md); + struct dm_table *map; struct dm_target *tgt; int r = -ENOTTY; +retry: + map = dm_get_live_table(md); if (!map || !dm_table_get_size(map)) goto out; @@ -428,6 +430,11 @@ out: dm_table_put(map); + if (r == -ENOTCONN) { + msleep(10); + goto retry; + } + return r; } @@ -1973,15 +1980,27 @@ { struct dm_md_mempools *p = dm_table_get_md_mempools(t); - if (md->io_pool && (md->tio_pool || dm_table_get_type(t) == DM_TYPE_BIO_BASED) && md->bs) { - /* - * The md already has necessary mempools. Reload just the - * bioset because front_pad may have changed because - * a different table was loaded. - */ - bioset_free(md->bs); - md->bs = p->bs; - p->bs = NULL; + if (md->io_pool && md->bs) { + /* The md already has necessary mempools. */ + if (dm_table_get_type(t) == DM_TYPE_BIO_BASED) { + /* + * Reload bioset because front_pad may have changed + * because a different table was loaded. + */ + bioset_free(md->bs); + md->bs = p->bs; + p->bs = NULL; + } else if (dm_table_get_type(t) == DM_TYPE_REQUEST_BASED) { + BUG_ON(!md->tio_pool); + /* + * There's no need to reload with request-based dm + * because the size of front_pad doesn't change. + * Note for future: If you are to reload bioset, + * prep-ed requests in the queue may refer + * to bio from the old bioset, so you must walk + * through the queue to unprep. + */ + } goto out; } @@ -2421,7 +2440,7 @@ */ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table) { - struct dm_table *live_map, *map = ERR_PTR(-EINVAL); + struct dm_table *live_map = NULL, *map = ERR_PTR(-EINVAL); struct queue_limits limits; int r; @@ -2444,10 +2463,12 @@ dm_table_put(live_map); } - r = dm_calculate_queue_limits(table, &limits); - if (r) { - map = ERR_PTR(r); - goto out; + if (!live_map) { + r = dm_calculate_queue_limits(table, &limits); + if (r) { + map = ERR_PTR(r); + goto out; + } } map = __bind(md, table, &limits); @@ -2700,6 +2721,7 @@ { return md->disk; } +EXPORT_SYMBOL_GPL(dm_disk); struct kobject *dm_kobject(struct mapped_device *md) { --- linux-lts-raring-3.8.0.orig/drivers/md/raid10.c +++ linux-lts-raring-3.8.0/drivers/md/raid10.c @@ -475,7 +475,17 @@ sector_t first_bad; int bad_sectors; - set_bit(R10BIO_Uptodate, &r10_bio->state); + /* + * Do not set R10BIO_Uptodate if the current device is + * rebuilding or Faulty. This is because we cannot use + * such device for properly reading the data back (we could + * potentially use it, if the current write would have felt + * before rdev->recovery_offset, but for simplicity we don't + * check this here. + */ + if (test_bit(In_sync, &rdev->flags) && + !test_bit(Faulty, &rdev->flags)) + set_bit(R10BIO_Uptodate, &r10_bio->state); /* Maybe we can clear some bad blocks. */ if (is_badblock(rdev, @@ -1009,17 +1019,17 @@ wake_up(&conf->wait_barrier); } -static void freeze_array(struct r10conf *conf) +static void freeze_array(struct r10conf *conf, int extra) { /* stop syncio and normal IO and wait for everything to * go quiet. * We increment barrier and nr_waiting, and then - * wait until nr_pending match nr_queued+1 + * wait until nr_pending match nr_queued+extra * This is called in the context of one normal IO request * that has failed. Thus any sync request that might be pending * will be blocked by nr_pending, and we need to wait for * pending IO requests to complete or be queued for re-try. - * Thus the number queued (nr_queued) plus this request (1) + * Thus the number queued (nr_queued) plus this request (extra) * must match the number of pending IOs (nr_pending) before * we continue. */ @@ -1027,7 +1037,7 @@ conf->barrier++; conf->nr_waiting++; wait_event_lock_irq_cmd(conf->wait_barrier, - conf->nr_pending == conf->nr_queued+1, + conf->nr_pending == conf->nr_queued+extra, conf->resync_lock, flush_pending_writes(conf)); @@ -1073,6 +1083,7 @@ bio_list_merge(&conf->pending_bio_list, &plug->pending); conf->pending_count += plug->pending_cnt; spin_unlock_irq(&conf->device_lock); + wake_up(&conf->wait_barrier); md_wakeup_thread(mddev->thread); kfree(plug); return; @@ -1086,7 +1097,12 @@ while (bio) { /* submit pending writes */ struct bio *next = bio->bi_next; bio->bi_next = NULL; - generic_make_request(bio); + if (unlikely((bio->bi_rw & REQ_DISCARD) && + !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) + /* Just ignore it */ + bio_endio(bio, 0); + else + generic_make_request(bio); bio = next; } kfree(plug); @@ -1105,6 +1121,7 @@ const unsigned long do_fua = (bio->bi_rw & REQ_FUA); const unsigned long do_discard = (bio->bi_rw & (REQ_DISCARD | REQ_SECURE)); + const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME); unsigned long flags; struct md_rdev *blocked_rdev; struct blk_plug_cb *cb; @@ -1460,7 +1477,8 @@ rdev)); mbio->bi_bdev = rdev->bdev; mbio->bi_end_io = raid10_end_write_request; - mbio->bi_rw = WRITE | do_sync | do_fua | do_discard; + mbio->bi_rw = + WRITE | do_sync | do_fua | do_discard | do_same; mbio->bi_private = r10_bio; atomic_inc(&r10_bio->remaining); @@ -1502,7 +1520,8 @@ r10_bio, rdev)); mbio->bi_bdev = rdev->bdev; mbio->bi_end_io = raid10_end_write_request; - mbio->bi_rw = WRITE | do_sync | do_fua | do_discard; + mbio->bi_rw = + WRITE | do_sync | do_fua | do_discard | do_same; mbio->bi_private = r10_bio; atomic_inc(&r10_bio->remaining); @@ -1784,8 +1803,8 @@ * we wait for all outstanding requests to complete. */ synchronize_sched(); - raise_barrier(conf, 0); - lower_barrier(conf); + freeze_array(conf, 0); + unfreeze_array(conf); clear_bit(Unmerged, &rdev->flags); } md_integrity_add_rdev(rdev, mddev); @@ -2202,12 +2221,18 @@ d = r10_bio->devs[1].devnum; wbio = r10_bio->devs[1].bio; wbio2 = r10_bio->devs[1].repl_bio; + /* Need to test wbio2->bi_end_io before we call + * generic_make_request as if the former is NULL, + * the latter is free to free wbio2. + */ + if (wbio2 && !wbio2->bi_end_io) + wbio2 = NULL; if (wbio->bi_end_io) { atomic_inc(&conf->mirrors[d].rdev->nr_pending); md_sync_acct(conf->mirrors[d].rdev->bdev, wbio->bi_size >> 9); generic_make_request(wbio); } - if (wbio2 && wbio2->bi_end_io) { + if (wbio2) { atomic_inc(&conf->mirrors[d].replacement->nr_pending); md_sync_acct(conf->mirrors[d].replacement->bdev, wbio2->bi_size >> 9); @@ -2581,7 +2606,7 @@ r10_bio->devs[slot].bio = NULL; if (mddev->ro == 0) { - freeze_array(conf); + freeze_array(conf, 1); fix_read_error(conf, mddev, r10_bio); unfreeze_array(conf); } else @@ -3482,7 +3507,7 @@ /* FIXME calc properly */ conf->mirrors = kzalloc(sizeof(struct raid10_info)*(mddev->raid_disks + - max(0,mddev->delta_disks)), + max(0,-mddev->delta_disks)), GFP_KERNEL); if (!conf->mirrors) goto out; @@ -3569,6 +3594,7 @@ if (mddev->queue) { blk_queue_max_discard_sectors(mddev->queue, mddev->chunk_sectors); + blk_queue_max_write_same_sectors(mddev->queue, 0); blk_queue_io_min(mddev->queue, chunk_size); if (conf->geo.raid_disks % conf->geo.near_copies) blk_queue_io_opt(mddev->queue, chunk_size * conf->geo.raid_disks); @@ -3640,7 +3666,7 @@ conf->geo.far_offset == 0) goto out_free_conf; if (conf->prev.far_copies != 1 && - conf->geo.far_offset == 0) + conf->prev.far_offset == 0) goto out_free_conf; } --- linux-lts-raring-3.8.0.orig/drivers/md/dm-stripe.c +++ linux-lts-raring-3.8.0/drivers/md/dm-stripe.c @@ -94,7 +94,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv) { struct stripe_c *sc; - sector_t width; + sector_t width, tmp_len; uint32_t stripes; uint32_t chunk_size; int r; @@ -116,15 +116,16 @@ } width = ti->len; - if (sector_div(width, chunk_size)) { + if (sector_div(width, stripes)) { ti->error = "Target length not divisible by " - "chunk size"; + "number of stripes"; return -EINVAL; } - if (sector_div(width, stripes)) { + tmp_len = width; + if (sector_div(tmp_len, chunk_size)) { ti->error = "Target length not divisible by " - "number of stripes"; + "chunk size"; return -EINVAL; } @@ -312,8 +313,8 @@ * */ -static int stripe_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void stripe_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct stripe_c *sc = (struct stripe_c *) ti->private; char buffer[sc->stripes + 1]; @@ -340,7 +341,6 @@ (unsigned long long)sc->stripe[i].physical_start); break; } - return 0; } static int stripe_end_io(struct dm_target *ti, struct bio *bio, int error) @@ -428,7 +428,7 @@ static struct target_type stripe_target = { .name = "striped", - .version = {1, 5, 0}, + .version = {1, 5, 1}, .module = THIS_MODULE, .ctr = stripe_ctr, .dtr = stripe_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/md.c +++ linux-lts-raring-3.8.0/drivers/md/md.c @@ -307,6 +307,10 @@ bio_io_error(bio); return; } + if (mddev->ro == 1 && unlikely(rw == WRITE)) { + bio_endio(bio, bio_sectors(bio) == 0 ? 0 : -EROFS); + return; + } smp_rmb(); /* Ensure implications of 'active' are visible */ rcu_read_lock(); if (mddev->suspended) { @@ -1560,8 +1564,8 @@ sector, count, 1) == 0) return -EINVAL; } - } else if (sb->bblog_offset == 0) - rdev->badblocks.shift = -1; + } else if (sb->bblog_offset != 0) + rdev->badblocks.shift = 0; if (!refdev) { ret = 1; @@ -2994,6 +2998,9 @@ } else if (!sectors) sectors = (i_size_read(rdev->bdev->bd_inode) >> 9) - rdev->data_offset; + if (!my_mddev->pers->resize) + /* Cannot change size for RAID0 or Linear etc */ + return -EINVAL; } if (sectors < my_mddev->dev_sectors) return -EINVAL; /* component must fit device */ @@ -3214,7 +3221,7 @@ * be used - I wonder if that matters */ rdev->badblocks.count = 0; - rdev->badblocks.shift = 0; + rdev->badblocks.shift = -1; /* disabled until explicitly enabled */ rdev->badblocks.page = kmalloc(PAGE_SIZE, GFP_KERNEL); seqlock_init(&rdev->badblocks.lock); if (rdev->badblocks.page == NULL) @@ -3286,9 +3293,6 @@ goto abort_free; } } - if (super_format == -1) - /* hot-add for 0.90, or non-persistent: so no badblocks */ - rdev->badblocks.shift = -1; return rdev; --- linux-lts-raring-3.8.0.orig/drivers/md/dm-bufio.c +++ linux-lts-raring-3.8.0/drivers/md/dm-bufio.c @@ -319,6 +319,9 @@ static void *alloc_buffer_data(struct dm_bufio_client *c, gfp_t gfp_mask, enum data_mode *data_mode) { + unsigned noio_flag; + void *ptr; + if (c->block_size <= DM_BUFIO_BLOCK_SIZE_SLAB_LIMIT) { *data_mode = DATA_MODE_SLAB; return kmem_cache_alloc(DM_BUFIO_CACHE(c), gfp_mask); @@ -332,7 +335,26 @@ } *data_mode = DATA_MODE_VMALLOC; - return __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL); + + /* + * __vmalloc allocates the data pages and auxiliary structures with + * gfp_flags that were specified, but pagetables are always allocated + * with GFP_KERNEL, no matter what was specified as gfp_mask. + * + * Consequently, we must set per-process flag PF_MEMALLOC_NOIO so that + * all allocations done by this process (including pagetables) are done + * as if GFP_NOIO was specified. + */ + + if (gfp_mask & __GFP_NORETRY) + noio_flag = memalloc_noio_save(); + + ptr = __vmalloc(c->block_size, gfp_mask, PAGE_KERNEL); + + if (gfp_mask & __GFP_NORETRY) + memalloc_noio_restore(noio_flag); + + return ptr; } /* @@ -1026,6 +1048,8 @@ { struct blk_plug plug; + BUG_ON(dm_bufio_in_request()); + blk_start_plug(&plug); dm_bufio_lock(c); --- linux-lts-raring-3.8.0.orig/drivers/md/dm-verity.c +++ linux-lts-raring-3.8.0/drivers/md/dm-verity.c @@ -93,6 +93,13 @@ */ }; +struct dm_verity_prefetch_work { + struct work_struct work; + struct dm_verity *v; + sector_t block; + unsigned n_blocks; +}; + static struct shash_desc *io_hash_desc(struct dm_verity *v, struct dm_verity_io *io) { return (struct shash_desc *)(io + 1); @@ -424,15 +431,18 @@ * The root buffer is not prefetched, it is assumed that it will be cached * all the time. */ -static void verity_prefetch_io(struct dm_verity *v, struct dm_verity_io *io) +static void verity_prefetch_io(struct work_struct *work) { + struct dm_verity_prefetch_work *pw = + container_of(work, struct dm_verity_prefetch_work, work); + struct dm_verity *v = pw->v; int i; for (i = v->levels - 2; i >= 0; i--) { sector_t hash_block_start; sector_t hash_block_end; - verity_hash_at_level(v, io->block, i, &hash_block_start, NULL); - verity_hash_at_level(v, io->block + io->n_blocks - 1, i, &hash_block_end, NULL); + verity_hash_at_level(v, pw->block, i, &hash_block_start, NULL); + verity_hash_at_level(v, pw->block + pw->n_blocks - 1, i, &hash_block_end, NULL); if (!i) { unsigned cluster = ACCESS_ONCE(dm_verity_prefetch_cluster); @@ -452,6 +462,25 @@ dm_bufio_prefetch(v->bufio, hash_block_start, hash_block_end - hash_block_start + 1); } + + kfree(pw); +} + +static void verity_submit_prefetch(struct dm_verity *v, struct dm_verity_io *io) +{ + struct dm_verity_prefetch_work *pw; + + pw = kmalloc(sizeof(struct dm_verity_prefetch_work), + GFP_NOIO | __GFP_NORETRY | __GFP_NOMEMALLOC | __GFP_NOWARN); + + if (!pw) + return; + + INIT_WORK(&pw->work, verity_prefetch_io); + pw->v = v; + pw->block = io->block; + pw->n_blocks = io->n_blocks; + queue_work(v->verify_wq, &pw->work); } /* @@ -498,7 +527,7 @@ memcpy(io->io_vec, bio_iovec(bio), io->io_vec_size * sizeof(struct bio_vec)); - verity_prefetch_io(v, io); + verity_submit_prefetch(v, io); generic_make_request(bio); @@ -508,8 +537,8 @@ /* * Status: V (valid) or C (corruption found) */ -static int verity_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void verity_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct dm_verity *v = ti->private; unsigned sz = 0; @@ -540,8 +569,6 @@ DMEMIT("%02x", v->salt[x]); break; } - - return 0; } static int verity_ioctl(struct dm_target *ti, unsigned cmd, @@ -804,9 +831,8 @@ for (i = v->levels - 1; i >= 0; i--) { sector_t s; v->hash_level_block[i] = hash_position; - s = verity_position_at_level(v, v->data_blocks, i); - s = (s >> v->hash_per_block_bits) + - !!(s & ((1 << v->hash_per_block_bits) - 1)); + s = (v->data_blocks + ((sector_t)1 << ((i + 1) * v->hash_per_block_bits)) - 1) + >> ((i + 1) * v->hash_per_block_bits); if (hash_position + s < hash_position) { ti->error = "Hash device offset overflow"; r = -E2BIG; @@ -860,7 +886,7 @@ static struct target_type verity_target = { .name = "verity", - .version = {1, 1, 0}, + .version = {1, 2, 0}, .module = THIS_MODULE, .ctr = verity_ctr, .dtr = verity_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/dm-linear.c +++ linux-lts-raring-3.8.0/drivers/md/dm-linear.c @@ -95,8 +95,8 @@ return DM_MAPIO_REMAPPED; } -static int linear_status(struct dm_target *ti, status_type_t type, - unsigned status_flags, char *result, unsigned maxlen) +static void linear_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) { struct linear_c *lc = (struct linear_c *) ti->private; @@ -110,7 +110,6 @@ (unsigned long long)lc->start); break; } - return 0; } static int linear_ioctl(struct dm_target *ti, unsigned int cmd, @@ -155,7 +154,7 @@ static struct target_type linear_target = { .name = "linear", - .version = {1, 2, 0}, + .version = {1, 2, 1}, .module = THIS_MODULE, .ctr = linear_ctr, .dtr = linear_dtr, --- linux-lts-raring-3.8.0.orig/drivers/md/raid1.c +++ linux-lts-raring-3.8.0/drivers/md/raid1.c @@ -427,7 +427,17 @@ r1_bio->bios[mirror] = NULL; to_put = bio; - set_bit(R1BIO_Uptodate, &r1_bio->state); + /* + * Do not set R1BIO_Uptodate if the current device is + * rebuilding or Faulty. This is because we cannot use + * such device for properly reading the data back (we could + * potentially use it, if the current write would have felt + * before rdev->recovery_offset, but for simplicity we don't + * check this here. + */ + if (test_bit(In_sync, &conf->mirrors[mirror].rdev->flags) && + !test_bit(Faulty, &conf->mirrors[mirror].rdev->flags)) + set_bit(R1BIO_Uptodate, &r1_bio->state); /* Maybe we can clear some bad blocks. */ if (is_badblock(conf->mirrors[mirror].rdev, @@ -880,17 +890,17 @@ wake_up(&conf->wait_barrier); } -static void freeze_array(struct r1conf *conf) +static void freeze_array(struct r1conf *conf, int extra) { /* stop syncio and normal IO and wait for everything to * go quite. * We increment barrier and nr_waiting, and then - * wait until nr_pending match nr_queued+1 + * wait until nr_pending match nr_queued+extra * This is called in the context of one normal IO request * that has failed. Thus any sync request that might be pending * will be blocked by nr_pending, and we need to wait for * pending IO requests to complete or be queued for re-try. - * Thus the number queued (nr_queued) plus this request (1) + * Thus the number queued (nr_queued) plus this request (extra) * must match the number of pending IOs (nr_pending) before * we continue. */ @@ -898,7 +908,7 @@ conf->barrier++; conf->nr_waiting++; wait_event_lock_irq_cmd(conf->wait_barrier, - conf->nr_pending == conf->nr_queued+1, + conf->nr_pending == conf->nr_queued+extra, conf->resync_lock, flush_pending_writes(conf)); spin_unlock_irq(&conf->resync_lock); @@ -967,6 +977,7 @@ bio_list_merge(&conf->pending_bio_list, &plug->pending); conf->pending_count += plug->pending_cnt; spin_unlock_irq(&conf->device_lock); + wake_up(&conf->wait_barrier); md_wakeup_thread(mddev->thread); kfree(plug); return; @@ -980,7 +991,12 @@ while (bio) { /* submit pending writes */ struct bio *next = bio->bi_next; bio->bi_next = NULL; - generic_make_request(bio); + if (unlikely((bio->bi_rw & REQ_DISCARD) && + !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) + /* Just ignore it */ + bio_endio(bio, 0); + else + generic_make_request(bio); bio = next; } kfree(plug); @@ -1000,6 +1016,7 @@ const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | REQ_FUA)); const unsigned long do_discard = (bio->bi_rw & (REQ_DISCARD | REQ_SECURE)); + const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME); struct md_rdev *blocked_rdev; struct blk_plug_cb *cb; struct raid1_plug_cb *plug = NULL; @@ -1289,7 +1306,7 @@ * know the original bi_idx, so we just free * them all */ - __bio_for_each_segment(bvec, mbio, j, 0) + bio_for_each_segment_all(bvec, mbio, j) bvec->bv_page = r1_bio->behind_bvecs[j].bv_page; if (test_bit(WriteMostly, &conf->mirrors[i].rdev->flags)) atomic_inc(&r1_bio->behind_remaining); @@ -1301,7 +1318,8 @@ conf->mirrors[i].rdev->data_offset); mbio->bi_bdev = conf->mirrors[i].rdev->bdev; mbio->bi_end_io = raid1_end_write_request; - mbio->bi_rw = WRITE | do_flush_fua | do_sync | do_discard; + mbio->bi_rw = + WRITE | do_flush_fua | do_sync | do_discard | do_same; mbio->bi_private = r1_bio; atomic_inc(&r1_bio->remaining); @@ -1550,8 +1568,8 @@ * we wait for all outstanding requests to complete. */ synchronize_sched(); - raise_barrier(conf); - lower_barrier(conf); + freeze_array(conf, 0); + unfreeze_array(conf); clear_bit(Unmerged, &rdev->flags); } md_integrity_add_rdev(rdev, mddev); @@ -1601,11 +1619,11 @@ */ struct md_rdev *repl = conf->mirrors[conf->raid_disks + number].rdev; - raise_barrier(conf); + freeze_array(conf, 0); clear_bit(Replacement, &repl->flags); p->rdev = repl; conf->mirrors[conf->raid_disks + number].rdev = NULL; - lower_barrier(conf); + unfreeze_array(conf); clear_bit(WantReplacement, &rdev->flags); } else clear_bit(WantReplacement, &rdev->flags); @@ -2222,7 +2240,7 @@ * frozen */ if (mddev->ro == 0) { - freeze_array(conf); + freeze_array(conf, 1); fix_read_error(conf, r1_bio->read_disk, r1_bio->sector, r1_bio->sectors); unfreeze_array(conf); @@ -2818,6 +2836,9 @@ if (IS_ERR(conf)) return PTR_ERR(conf); + if (mddev->queue) + blk_queue_max_write_same_sectors(mddev->queue, 0); + rdev_for_each(rdev, mddev) { if (!mddev->gendisk) continue; @@ -2998,7 +3019,7 @@ return -ENOMEM; } - raise_barrier(conf); + freeze_array(conf, 0); /* ok, everything is stopped */ oldpool = conf->r1bio_pool; @@ -3029,7 +3050,7 @@ conf->raid_disks = mddev->raid_disks = raid_disks; mddev->delta_disks = 0; - lower_barrier(conf); + unfreeze_array(conf); set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); md_wakeup_thread(mddev->thread); --- linux-lts-raring-3.8.0.orig/drivers/md/persistent-data/dm-btree-remove.c +++ linux-lts-raring-3.8.0/drivers/md/persistent-data/dm-btree-remove.c @@ -139,15 +139,8 @@ struct btree_node *n; }; -static struct dm_btree_value_type le64_type = { - .context = NULL, - .size = sizeof(__le64), - .inc = NULL, - .dec = NULL, - .equal = NULL -}; - -static int init_child(struct dm_btree_info *info, struct btree_node *parent, +static int init_child(struct dm_btree_info *info, struct dm_btree_value_type *vt, + struct btree_node *parent, unsigned index, struct child *result) { int r, inc; @@ -164,7 +157,7 @@ result->n = dm_block_data(result->block); if (inc) - inc_children(info->tm, result->n, &le64_type); + inc_children(info->tm, result->n, vt); *((__le64 *) value_ptr(parent, index)) = cpu_to_le64(dm_block_location(result->block)); @@ -236,7 +229,7 @@ } static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info, - unsigned left_index) + struct dm_btree_value_type *vt, unsigned left_index) { int r; struct btree_node *parent; @@ -244,11 +237,11 @@ parent = dm_block_data(shadow_current(s)); - r = init_child(info, parent, left_index, &left); + r = init_child(info, vt, parent, left_index, &left); if (r) return r; - r = init_child(info, parent, left_index + 1, &right); + r = init_child(info, vt, parent, left_index + 1, &right); if (r) { exit_child(info, &left); return r; @@ -368,7 +361,7 @@ } static int rebalance3(struct shadow_spine *s, struct dm_btree_info *info, - unsigned left_index) + struct dm_btree_value_type *vt, unsigned left_index) { int r; struct btree_node *parent = dm_block_data(shadow_current(s)); @@ -377,17 +370,17 @@ /* * FIXME: fill out an array? */ - r = init_child(info, parent, left_index, &left); + r = init_child(info, vt, parent, left_index, &left); if (r) return r; - r = init_child(info, parent, left_index + 1, ¢er); + r = init_child(info, vt, parent, left_index + 1, ¢er); if (r) { exit_child(info, &left); return r; } - r = init_child(info, parent, left_index + 2, &right); + r = init_child(info, vt, parent, left_index + 2, &right); if (r) { exit_child(info, &left); exit_child(info, ¢er); @@ -434,7 +427,8 @@ } static int rebalance_children(struct shadow_spine *s, - struct dm_btree_info *info, uint64_t key) + struct dm_btree_info *info, + struct dm_btree_value_type *vt, uint64_t key) { int i, r, has_left_sibling, has_right_sibling; uint32_t child_entries; @@ -472,13 +466,13 @@ has_right_sibling = i < (le32_to_cpu(n->header.nr_entries) - 1); if (!has_left_sibling) - r = rebalance2(s, info, i); + r = rebalance2(s, info, vt, i); else if (!has_right_sibling) - r = rebalance2(s, info, i - 1); + r = rebalance2(s, info, vt, i - 1); else - r = rebalance3(s, info, i - 1); + r = rebalance3(s, info, vt, i - 1); return r; } @@ -529,7 +523,7 @@ if (le32_to_cpu(n->header.flags) & LEAF_NODE) return do_leaf(n, key, index); - r = rebalance_children(s, info, key); + r = rebalance_children(s, info, vt, key); if (r) break; @@ -550,6 +544,14 @@ return r; } +static struct dm_btree_value_type le64_type = { + .context = NULL, + .size = sizeof(__le64), + .inc = NULL, + .dec = NULL, + .equal = NULL +}; + int dm_btree_remove(struct dm_btree_info *info, dm_block_t root, uint64_t *keys, dm_block_t *new_root) { --- linux-lts-raring-3.8.0.orig/drivers/firewire/ohci.c +++ linux-lts-raring-3.8.0/drivers/firewire/ohci.c @@ -2729,8 +2729,11 @@ { u32 *ctx_hdr; - if (ctx->header_length + ctx->base.header_size > PAGE_SIZE) + if (ctx->header_length + ctx->base.header_size > PAGE_SIZE) { + if (ctx->base.drop_overflow_headers) + return; flush_iso_completions(ctx); + } ctx_hdr = ctx->header + ctx->header_length; ctx->last_timestamp = (u16)le32_to_cpu((__force __le32)dma_hdr[0]); @@ -2890,8 +2893,11 @@ sync_it_packet_for_cpu(context, d); - if (ctx->header_length + 4 > PAGE_SIZE) + if (ctx->header_length + 4 > PAGE_SIZE) { + if (ctx->base.drop_overflow_headers) + return 1; flush_iso_completions(ctx); + } ctx_hdr = ctx->header + ctx->header_length; ctx->last_timestamp = le16_to_cpu(last->res_count); --- linux-lts-raring-3.8.0.orig/drivers/firewire/core-device.c +++ linux-lts-raring-3.8.0/drivers/firewire/core-device.c @@ -1020,6 +1020,10 @@ ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ? idr_get_new(&fw_device_idr, device, &minor) : -ENOMEM; + if (minor >= 1 << MINORBITS) { + idr_remove(&fw_device_idr, minor); + minor = -ENOSPC; + } up_write(&fw_device_rwsem); if (ret < 0) --- linux-lts-raring-3.8.0.orig/drivers/firewire/core-cdev.c +++ linux-lts-raring-3.8.0/drivers/firewire/core-cdev.c @@ -54,6 +54,7 @@ #define FW_CDEV_KERNEL_VERSION 5 #define FW_CDEV_VERSION_EVENT_REQUEST2 4 #define FW_CDEV_VERSION_ALLOCATE_REGION_END 4 +#define FW_CDEV_VERSION_AUTO_FLUSH_ISO_OVERFLOW 5 struct client { u32 version; @@ -1009,6 +1010,8 @@ a->channel, a->speed, a->header_size, cb, client); if (IS_ERR(context)) return PTR_ERR(context); + if (client->version < FW_CDEV_VERSION_AUTO_FLUSH_ISO_OVERFLOW) + context->drop_overflow_headers = true; /* We only support one context at this time. */ spin_lock_irq(&client->lock); --- linux-lts-raring-3.8.0.orig/drivers/hwmon/applesmc.c +++ linux-lts-raring-3.8.0/drivers/hwmon/applesmc.c @@ -525,16 +525,25 @@ { struct applesmc_registers *s = &smcreg; bool left_light_sensor, right_light_sensor; + unsigned int count; u8 tmp[1]; int ret; if (s->init_complete) return 0; - ret = read_register_count(&s->key_count); + ret = read_register_count(&count); if (ret) return ret; + if (s->cache && s->key_count != count) { + pr_warn("key count changed from %d to %d\n", + s->key_count, count); + kfree(s->cache); + s->cache = NULL; + } + s->key_count = count; + if (!s->cache) s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL); if (!s->cache) --- linux-lts-raring-3.8.0.orig/drivers/hwmon/lineage-pem.c +++ linux-lts-raring-3.8.0/drivers/hwmon/lineage-pem.c @@ -422,6 +422,7 @@ &sensor_dev_attr_in2_input.dev_attr.attr, &sensor_dev_attr_curr1_input.dev_attr.attr, &sensor_dev_attr_power1_input.dev_attr.attr, + NULL }; static const struct attribute_group pem_input_group = { @@ -432,6 +433,7 @@ &sensor_dev_attr_fan1_input.dev_attr.attr, &sensor_dev_attr_fan2_input.dev_attr.attr, &sensor_dev_attr_fan3_input.dev_attr.attr, + NULL }; static const struct attribute_group pem_fan_group = { --- linux-lts-raring-3.8.0.orig/drivers/hwmon/sht15.c +++ linux-lts-raring-3.8.0/drivers/hwmon/sht15.c @@ -926,7 +926,13 @@ if (voltage) data->supply_uV = voltage; - regulator_enable(data->reg); + ret = regulator_enable(data->reg); + if (ret != 0) { + dev_err(&pdev->dev, + "failed to enable regulator: %d\n", ret); + return ret; + } + /* * Setup a notifier block to update this if another device * causes the voltage to change --- linux-lts-raring-3.8.0.orig/drivers/hwmon/abituguru.c +++ linux-lts-raring-3.8.0/drivers/hwmon/abituguru.c @@ -1411,14 +1411,18 @@ pr_info("found Abit uGuru\n"); /* Register sysfs hooks */ - for (i = 0; i < sysfs_attr_i; i++) - if (device_create_file(&pdev->dev, - &data->sysfs_attr[i].dev_attr)) + for (i = 0; i < sysfs_attr_i; i++) { + res = device_create_file(&pdev->dev, + &data->sysfs_attr[i].dev_attr); + if (res) goto abituguru_probe_error; - for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++) - if (device_create_file(&pdev->dev, - &abituguru_sysfs_attr[i].dev_attr)) + } + for (i = 0; i < ARRAY_SIZE(abituguru_sysfs_attr); i++) { + res = device_create_file(&pdev->dev, + &abituguru_sysfs_attr[i].dev_attr); + if (res) goto abituguru_probe_error; + } data->hwmon_dev = hwmon_device_register(&pdev->dev); if (!IS_ERR(data->hwmon_dev)) --- linux-lts-raring-3.8.0.orig/drivers/hwmon/adm1021.c +++ linux-lts-raring-3.8.0/drivers/hwmon/adm1021.c @@ -332,26 +332,68 @@ man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID); dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID); + if (man_id < 0 || dev_id < 0) + return -ENODEV; + if (man_id == 0x4d && dev_id == 0x01) type_name = "max1617a"; else if (man_id == 0x41) { if ((dev_id & 0xF0) == 0x30) type_name = "adm1023"; - else + else if ((dev_id & 0xF0) == 0x00) type_name = "adm1021"; + else + return -ENODEV; } else if (man_id == 0x49) type_name = "thmc10"; else if (man_id == 0x23) type_name = "gl523sm"; else if (man_id == 0x54) type_name = "mc1066"; - /* LM84 Mfr ID in a different place, and it has more unused bits */ - else if (conv_rate == 0x00 - && (config & 0x7F) == 0x00 - && (status & 0xAB) == 0x00) - type_name = "lm84"; - else - type_name = "max1617"; + else { + int lte, rte, lhi, rhi, llo, rlo; + + /* extra checks for LM84 and MAX1617 to avoid misdetections */ + + llo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(0)); + rlo = i2c_smbus_read_byte_data(client, ADM1021_REG_THYST_R(1)); + + /* fail if any of the additional register reads failed */ + if (llo < 0 || rlo < 0) + return -ENODEV; + + lte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(0)); + rte = i2c_smbus_read_byte_data(client, ADM1021_REG_TEMP(1)); + lhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(0)); + rhi = i2c_smbus_read_byte_data(client, ADM1021_REG_TOS_R(1)); + + /* + * Fail for negative temperatures and negative high limits. + * This check also catches read errors on the tested registers. + */ + if ((s8)lte < 0 || (s8)rte < 0 || (s8)lhi < 0 || (s8)rhi < 0) + return -ENODEV; + + /* fail if all registers hold the same value */ + if (lte == rte && lte == lhi && lte == rhi && lte == llo + && lte == rlo) + return -ENODEV; + + /* + * LM84 Mfr ID is in a different place, + * and it has more unused bits. + */ + if (conv_rate == 0x00 + && (config & 0x7F) == 0x00 + && (status & 0xAB) == 0x00) { + type_name = "lm84"; + } else { + /* fail if low limits are larger than high limits */ + if ((s8)llo > lhi || (s8)rlo > rhi) + return -ENODEV; + type_name = "max1617"; + } + } pr_debug("adm1021: Detected chip %s at adapter %d, address 0x%02x.\n", type_name, i2c_adapter_id(adapter), client->addr); --- linux-lts-raring-3.8.0.orig/drivers/hwmon/adt7470.c +++ linux-lts-raring-3.8.0/drivers/hwmon/adt7470.c @@ -215,7 +215,7 @@ u16 value) { return i2c_smbus_write_byte_data(client, reg, value & 0xFF) - && i2c_smbus_write_byte_data(client, reg + 1, value >> 8); + || i2c_smbus_write_byte_data(client, reg + 1, value >> 8); } static void adt7470_init_client(struct i2c_client *client) --- linux-lts-raring-3.8.0.orig/drivers/hwmon/pmbus/ltc2978.c +++ linux-lts-raring-3.8.0/drivers/hwmon/pmbus/ltc2978.c @@ -59,10 +59,10 @@ struct ltc2978_data { enum chips id; int vin_min, vin_max; - int temp_min, temp_max; + int temp_min, temp_max[2]; int vout_min[8], vout_max[8]; int iout_max[2]; - int temp2_max[2]; + int temp2_max; struct pmbus_driver_info info; }; @@ -113,9 +113,10 @@ ret = pmbus_read_word_data(client, page, LTC2978_MFR_TEMPERATURE_PEAK); if (ret >= 0) { - if (lin11_to_val(ret) > lin11_to_val(data->temp_max)) - data->temp_max = ret; - ret = data->temp_max; + if (lin11_to_val(ret) + > lin11_to_val(data->temp_max[page])) + data->temp_max[page] = ret; + ret = data->temp_max[page]; } break; case PMBUS_VIRT_RESET_VOUT_HISTORY: @@ -204,10 +205,9 @@ ret = pmbus_read_word_data(client, page, LTC3880_MFR_TEMPERATURE2_PEAK); if (ret >= 0) { - if (lin11_to_val(ret) - > lin11_to_val(data->temp2_max[page])) - data->temp2_max[page] = ret; - ret = data->temp2_max[page]; + if (lin11_to_val(ret) > lin11_to_val(data->temp2_max)) + data->temp2_max = ret; + ret = data->temp2_max; } break; case PMBUS_VIRT_READ_VIN_MIN: @@ -248,11 +248,11 @@ switch (reg) { case PMBUS_VIRT_RESET_IOUT_HISTORY: - data->iout_max[page] = 0x7fff; + data->iout_max[page] = 0x7c00; ret = ltc2978_clear_peaks(client, page, data->id); break; case PMBUS_VIRT_RESET_TEMP2_HISTORY: - data->temp2_max[page] = 0x7fff; + data->temp2_max = 0x7c00; ret = ltc2978_clear_peaks(client, page, data->id); break; case PMBUS_VIRT_RESET_VOUT_HISTORY: @@ -262,12 +262,12 @@ break; case PMBUS_VIRT_RESET_VIN_HISTORY: data->vin_min = 0x7bff; - data->vin_max = 0; + data->vin_max = 0x7c00; ret = ltc2978_clear_peaks(client, page, data->id); break; case PMBUS_VIRT_RESET_TEMP_HISTORY: data->temp_min = 0x7bff; - data->temp_max = 0x7fff; + data->temp_max[page] = 0x7c00; ret = ltc2978_clear_peaks(client, page, data->id); break; default: @@ -321,12 +321,14 @@ info = &data->info; info->write_word_data = ltc2978_write_word_data; - data->vout_min[0] = 0xffff; data->vin_min = 0x7bff; + data->vin_max = 0x7c00; data->temp_min = 0x7bff; - data->temp_max = 0x7fff; + for (i = 0; i < ARRAY_SIZE(data->temp_max); i++) + data->temp_max[i] = 0x7c00; + data->temp2_max = 0x7c00; - switch (id->driver_data) { + switch (data->id) { case ltc2978: info->read_word_data = ltc2978_read_word_data; info->pages = 8; @@ -336,7 +338,6 @@ for (i = 1; i < 8; i++) { info->func[i] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT; - data->vout_min[i] = 0xffff; } break; case ltc3880: @@ -352,11 +353,14 @@ | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | PMBUS_HAVE_POUT | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP; - data->vout_min[1] = 0xffff; + data->iout_max[0] = 0x7c00; + data->iout_max[1] = 0x7c00; break; default: return -ENODEV; } + for (i = 0; i < info->pages; i++) + data->vout_min[i] = 0xffff; return pmbus_do_probe(client, id, info); } --- linux-lts-raring-3.8.0.orig/drivers/video/Kconfig +++ linux-lts-raring-3.8.0/drivers/video/Kconfig @@ -753,8 +753,8 @@ If unsure, say N. config FB_VESA - bool "VESA VGA graphics support" - depends on (FB = y) && X86 + tristate "VESA VGA graphics support" + depends on FB && X86 select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT --- linux-lts-raring-3.8.0.orig/drivers/video/vesafb.c +++ linux-lts-raring-3.8.0/drivers/video/vesafb.c @@ -27,6 +27,12 @@ #define dac_reg (0x3c8) #define dac_val (0x3c9) +struct vesafb_info +{ + u32 pseudo_palette[256]; + int mtrr_hdl; +}; + /* --------------------------------------------------------------------- */ static struct fb_var_screeninfo vesafb_defined __initdata = { @@ -40,22 +46,44 @@ .vmode = FB_VMODE_NONINTERLACED, }; -static struct fb_fix_screeninfo vesafb_fix __initdata = { +static struct fb_fix_screeninfo vesafb_fix = { .id = "VESA VGA", .type = FB_TYPE_PACKED_PIXELS, .accel = FB_ACCEL_NONE, }; +#ifndef MODULE static int inverse __read_mostly; -static int mtrr __read_mostly; /* disable mtrr */ +#endif +static uint mtrr __read_mostly = 3; /* disable mtrr */ +static bool nomtrr __read_mostly; /* dummy */ static int vram_remap __initdata; /* Set amount of memory to be used */ static int vram_total __initdata; /* Set total amount of memory */ -static int pmi_setpal __read_mostly = 1; /* pmi for palette changes ??? */ -static int ypan __read_mostly; /* 0..nothing, 1..ypan, 2..ywrap */ +static bool pmi_setpal __read_mostly = true; /* pmi for palette changes ??? */ +static bool redraw __read_mostly; +static uint ypan __read_mostly; /* 0..nothing, 1..ypan, 2..ywrap */ +static bool ywrap __read_mostly; static void (*pmi_start)(void) __read_mostly; static void (*pmi_pal) (void) __read_mostly; static int depth __read_mostly; static int vga_compat __read_mostly; + +module_param(redraw, bool, 0); +module_param(ypan, uint, 0); +module_param(ywrap, bool, 0); +module_param_named(vgapal, pmi_setpal, invbool, 0); +MODULE_PARM_DESC(vgapal, "Use VGA for setting palette (default)"); +module_param_named(pmipal, pmi_setpal, bool, 0); +MODULE_PARM_DESC(pmipal, "Use PMI for setting palette"); +module_param(mtrr, uint, 0); +MODULE_PARM_DESC(mtrr, "Enable MTRR support (default)"); +module_param_named(nomtrr, nomtrr, invbool, 0); +MODULE_PARM_DESC(nomtrr, "Disable MTRR support"); +module_param(vram_remap, int, 0); +MODULE_PARM_DESC(vram_remap, "Set total amount of memory to be used"); +module_param(vram_total, int, 0); +MODULE_PARM_DESC(vram_total, "Total amount of memory"); + /* --------------------------------------------------------------------- */ static int vesafb_pan_display(struct fb_var_screeninfo *var, @@ -192,6 +220,7 @@ .fb_imageblit = cfb_imageblit, }; +#ifndef MODULE static int __init vesafb_setup(char *options) { char *this_opt; @@ -211,9 +240,9 @@ else if (! strcmp(this_opt, "ywrap")) ypan=2; else if (! strcmp(this_opt, "vgapal")) - pmi_setpal=0; + pmi_setpal=false; else if (! strcmp(this_opt, "pmipal")) - pmi_setpal=1; + pmi_setpal=true; else if (! strncmp(this_opt, "mtrr:", 5)) mtrr = simple_strtoul(this_opt+5, NULL, 0); else if (! strcmp(this_opt, "nomtrr")) @@ -225,10 +254,12 @@ } return 0; } +#endif static int __init vesafb_probe(struct platform_device *dev) { struct fb_info *info; + struct vesafb_info *vfb_info; int i, err; unsigned int size_vmode; unsigned int size_remap; @@ -287,13 +318,14 @@ spaces our resource handlers simply don't know about */ } - info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev); + info = framebuffer_alloc(sizeof(struct vesafb_info), &dev->dev); if (!info) { release_mem_region(vesafb_fix.smem_start, size_total); return -ENOMEM; } - info->pseudo_palette = info->par; - info->par = NULL; + vfb_info = (struct vesafb_info *) info->par; + vfb_info->mtrr_hdl = -1; + info->pseudo_palette = vfb_info->pseudo_palette; /* set vesafb aperture size for generic probing */ info->apertures = alloc_apertures(1); @@ -312,8 +344,10 @@ screen_info.vesapm_seg,screen_info.vesapm_off); } - if (screen_info.vesapm_seg < 0xc000) - ypan = pmi_setpal = 0; /* not available or some DOS TSR ... */ + if (screen_info.vesapm_seg < 0xc000) { + ypan = 0; + pmi_setpal = false; /* not available or some DOS TSR ... */ + } if (ypan || pmi_setpal) { unsigned short *pmi_base; @@ -334,7 +368,8 @@ * memory area and pass it in the ES register to the BIOS function. */ printk(KERN_INFO "vesafb: can't handle memory requests, pmi disabled\n"); - ypan = pmi_setpal = 0; + ypan = 0; + pmi_setpal = false; } } } @@ -423,17 +458,15 @@ } if (type) { - int rc; - /* Find the largest power-of-two */ temp_size = roundup_pow_of_two(temp_size); /* Try and find a power of two to add */ do { - rc = mtrr_add(vesafb_fix.smem_start, temp_size, + vfb_info->mtrr_hdl = mtrr_add(vesafb_fix.smem_start, temp_size, type, 1); temp_size >>= 1; - } while (temp_size >= PAGE_SIZE && rc == -EINVAL); + } while (temp_size >= PAGE_SIZE && vfb_info->mtrr_hdl == -EINVAL); } } #endif @@ -495,7 +528,27 @@ return err; } +static int __exit vesafb_remove(struct platform_device *device) +{ + struct fb_info *info = dev_get_drvdata(&device->dev); + + unregister_framebuffer(info); +#ifdef CONFIG_MTRR + { + struct vesafb_info *vfb_info = (struct vesafb_info *) info->par; + if (vfb_info->mtrr_hdl >= 0) + mtrr_del(vfb_info->mtrr_hdl, 0, 0); + } +#endif + iounmap(info->screen_base); + framebuffer_release(info); + release_mem_region(vesafb_fix.smem_start, vesafb_fix.smem_len); + + return 0; +} + static struct platform_driver vesafb_driver = { + .remove = vesafb_remove, .driver = { .name = "vesafb", }, @@ -506,11 +559,18 @@ static int __init vesafb_init(void) { int ret; +#ifndef MODULE char *option = NULL; /* ignore error return of fb_get_options */ fb_get_options("vesafb", &option); vesafb_setup(option); +#else + if (redraw) + ypan = 0; + if (ywrap) + ypan = 2; +#endif vesafb_device = platform_device_alloc("vesafb", 0); if (!vesafb_device) @@ -530,6 +590,14 @@ return ret; } + +static void __exit vesafb_exit(void) +{ + platform_device_unregister(vesafb_device); + platform_driver_unregister(&vesafb_driver); +} + module_init(vesafb_init); +module_exit(vesafb_exit); MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/drivers/video/fbsysfs.c +++ linux-lts-raring-3.8.0/drivers/video/fbsysfs.c @@ -177,6 +177,8 @@ if (i * sizeof(struct fb_videomode) != count) return -EINVAL; + if (!lock_fb_info(fb_info)) + return -ENODEV; console_lock(); list_splice(&fb_info->modelist, &old_list); fb_videomode_to_modelist((const struct fb_videomode *)buf, i, @@ -188,6 +190,7 @@ fb_destroy_modelist(&old_list); console_unlock(); + unlock_fb_info(fb_info); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/video/atmel_lcdfb.c +++ linux-lts-raring-3.8.0/drivers/video/atmel_lcdfb.c @@ -422,17 +422,22 @@ = var->bits_per_pixel; break; case 16: + /* Older SOCs use IBGR:555 rather than BGR:565. */ + if (sinfo->have_intensity_bit) + var->green.length = 5; + else + var->green.length = 6; + if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) { - /* RGB:565 mode */ - var->red.offset = 11; + /* RGB:5X5 mode */ + var->red.offset = var->green.length + 5; var->blue.offset = 0; } else { - /* BGR:565 mode */ + /* BGR:5X5 mode */ var->red.offset = 0; - var->blue.offset = 11; + var->blue.offset = var->green.length + 5; } var->green.offset = 5; - var->green.length = 6; var->red.length = var->blue.length = 5; break; case 32: @@ -679,8 +684,7 @@ case FB_VISUAL_PSEUDOCOLOR: if (regno < 256) { - if (cpu_is_at91sam9261() || cpu_is_at91sam9263() - || cpu_is_at91sam9rl()) { + if (sinfo->have_intensity_bit) { /* old style I+BGR:555 */ val = ((red >> 11) & 0x001f); val |= ((green >> 6) & 0x03e0); @@ -870,6 +874,10 @@ } sinfo->info = info; sinfo->pdev = pdev; + if (cpu_is_at91sam9261() || cpu_is_at91sam9263() || + cpu_is_at91sam9rl()) { + sinfo->have_intensity_bit = true; + } strcpy(info->fix.id, sinfo->pdev->name); info->flags = ATMEL_LCDFB_FBINFO_DEFAULT; --- linux-lts-raring-3.8.0.orig/drivers/video/fbmem.c +++ linux-lts-raring-3.8.0/drivers/video/fbmem.c @@ -1177,8 +1177,10 @@ event.data = &con2fb; if (!lock_fb_info(info)) return -ENODEV; + console_lock(); event.info = info; ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event); + console_unlock(); unlock_fb_info(info); break; case FBIOBLANK: @@ -1371,15 +1373,12 @@ { struct fb_info *info = file_fb_info(file); struct fb_ops *fb; - unsigned long off; + unsigned long mmio_pgoff; unsigned long start; u32 len; if (!info) return -ENODEV; - if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) - return -EINVAL; - off = vma->vm_pgoff << PAGE_SHIFT; fb = info->fbops; if (!fb) return -ENODEV; @@ -1391,32 +1390,24 @@ return res; } - /* frame buffer memory */ + /* + * Ugh. This can be either the frame buffer mapping, or + * if pgoff points past it, the mmio mapping. + */ start = info->fix.smem_start; - len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len); - if (off >= len) { - /* memory mapped io */ - off -= len; - if (info->var.accel_flags) { - mutex_unlock(&info->mm_lock); - return -EINVAL; - } + len = info->fix.smem_len; + mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT; + if (vma->vm_pgoff >= mmio_pgoff) { + vma->vm_pgoff -= mmio_pgoff; start = info->fix.mmio_start; - len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.mmio_len); + len = info->fix.mmio_len; } mutex_unlock(&info->mm_lock); - start &= PAGE_MASK; - if ((vma->vm_end - vma->vm_start + off) > len) - return -EINVAL; - off += start; - vma->vm_pgoff = off >> PAGE_SHIFT; - /* VM_IO | VM_DONTEXPAND | VM_DONTDUMP are set by io_remap_pfn_range()*/ + vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); - fb_pgprotect(file, vma, off); - if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT, - vma->vm_end - vma->vm_start, vma->vm_page_prot)) - return -EAGAIN; - return 0; + fb_pgprotect(file, vma, start); + + return vm_iomap_memory(vma, start, len); } static int @@ -1650,7 +1641,9 @@ event.info = fb_info; if (!lock_fb_info(fb_info)) return -ENODEV; + console_lock(); fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); + console_unlock(); unlock_fb_info(fb_info); return 0; } @@ -1666,8 +1659,10 @@ if (!lock_fb_info(fb_info)) return -ENODEV; + console_lock(); event.info = fb_info; ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event); + console_unlock(); unlock_fb_info(fb_info); if (ret) @@ -1682,7 +1677,9 @@ num_registered_fb--; fb_cleanup_device(fb_info); event.info = fb_info; + console_lock(); fb_notifier_call_chain(FB_EVENT_FB_UNREGISTERED, &event); + console_unlock(); /* this may free fb info */ put_fb_info(fb_info); @@ -1853,11 +1850,8 @@ err = 1; if (!list_empty(&info->modelist)) { - if (!lock_fb_info(info)) - return -ENODEV; event.info = info; err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event); - unlock_fb_info(info); } return err; --- linux-lts-raring-3.8.0.orig/drivers/video/fsl-diu-fb.c +++ linux-lts-raring-3.8.0/drivers/video/fsl-diu-fb.c @@ -944,7 +944,7 @@ #define PF_COMP_0_MASK 0x0000000F #define PF_COMP_0_SHIFT 0 -#define MAKE_PF(alpha, red, blue, green, size, c0, c1, c2, c3) \ +#define MAKE_PF(alpha, red, green, blue, size, c0, c1, c2, c3) \ cpu_to_le32(PF_BYTE_F | (alpha << PF_ALPHA_C_SHIFT) | \ (blue << PF_BLUE_C_SHIFT) | (green << PF_GREEN_C_SHIFT) | \ (red << PF_RED_C_SHIFT) | (c3 << PF_COMP_3_SHIFT) | \ @@ -954,10 +954,10 @@ switch (bits_per_pixel) { case 32: /* 0x88883316 */ - return MAKE_PF(3, 2, 0, 1, 3, 8, 8, 8, 8); + return MAKE_PF(3, 2, 1, 0, 3, 8, 8, 8, 8); case 24: /* 0x88082219 */ - return MAKE_PF(4, 0, 1, 2, 2, 0, 8, 8, 8); + return MAKE_PF(4, 0, 1, 2, 2, 8, 8, 8, 0); case 16: /* 0x65053118 */ return MAKE_PF(4, 2, 1, 0, 1, 5, 6, 5, 0); @@ -1232,6 +1232,16 @@ return 0; } +static inline void fsl_diu_enable_interrupts(struct fsl_diu_data *data) +{ + u32 int_mask = INT_UNDRUN; /* enable underrun detection */ + + if (IS_ENABLED(CONFIG_NOT_COHERENT_CACHE)) + int_mask |= INT_VSYNC; /* enable vertical sync */ + + clrbits32(&data->diu_reg->int_mask, int_mask); +} + /* turn on fb if count == 1 */ static int fsl_diu_open(struct fb_info *info, int user) @@ -1251,19 +1261,7 @@ if (res < 0) mfbi->count--; else { - struct fsl_diu_data *data = mfbi->parent; - -#ifdef CONFIG_NOT_COHERENT_CACHE - /* - * Enable underrun detection and vertical sync - * interrupts. - */ - clrbits32(&data->diu_reg->int_mask, - INT_UNDRUN | INT_VSYNC); -#else - /* Enable underrun detection */ - clrbits32(&data->diu_reg->int_mask, INT_UNDRUN); -#endif + fsl_diu_enable_interrupts(mfbi->parent); fsl_diu_enable_panel(info); } } @@ -1283,9 +1281,18 @@ mfbi->count--; if (mfbi->count == 0) { struct fsl_diu_data *data = mfbi->parent; + bool disable = true; + int i; + + /* Disable interrupts only if all AOIs are closed */ + for (i = 0; i < NUM_AOIS; i++) { + struct mfb_info *mi = data->fsl_diu_info[i].par; - /* Disable interrupts */ - out_be32(&data->diu_reg->int_mask, 0xffffffff); + if (mi->count) + disable = false; + } + if (disable) + out_be32(&data->diu_reg->int_mask, 0xffffffff); fsl_diu_disable_panel(info); } @@ -1614,14 +1621,6 @@ out_be32(&data->diu_reg->desc[1], data->dummy_ad.paddr); out_be32(&data->diu_reg->desc[2], data->dummy_ad.paddr); - for (i = 0; i < NUM_AOIS; i++) { - ret = install_fb(&data->fsl_diu_info[i]); - if (ret) { - dev_err(&pdev->dev, "could not register fb %d\n", i); - goto error; - } - } - /* * Older versions of U-Boot leave interrupts enabled, so disable * all of them and clear the status register. @@ -1630,12 +1629,21 @@ in_be32(&data->diu_reg->int_status); ret = request_irq(data->irq, fsl_diu_isr, 0, "fsl-diu-fb", - &data->diu_reg); + data->diu_reg); if (ret) { dev_err(&pdev->dev, "could not claim irq\n"); goto error; } + for (i = 0; i < NUM_AOIS; i++) { + ret = install_fb(&data->fsl_diu_info[i]); + if (ret) { + dev_err(&pdev->dev, "could not register fb %d\n", i); + free_irq(data->irq, data->diu_reg); + goto error; + } + } + sysfs_attr_init(&data->dev_attr.attr); data->dev_attr.attr.name = "monitor"; data->dev_attr.attr.mode = S_IRUGO|S_IWUSR; @@ -1667,7 +1675,7 @@ data = dev_get_drvdata(&pdev->dev); disable_lcdc(&data->fsl_diu_info[0]); - free_irq(data->irq, &data->diu_reg); + free_irq(data->irq, data->diu_reg); for (i = 0; i < NUM_AOIS; i++) uninstall_fb(&data->fsl_diu_info[i]); --- linux-lts-raring-3.8.0.orig/drivers/video/ep93xx-fb.c +++ linux-lts-raring-3.8.0/drivers/video/ep93xx-fb.c @@ -23,6 +23,7 @@ #include #include #include +#include #include --- linux-lts-raring-3.8.0.orig/drivers/video/backlight/adp8860_bl.c +++ linux-lts-raring-3.8.0/drivers/video/backlight/adp8860_bl.c @@ -783,7 +783,7 @@ static int adp8860_i2c_resume(struct i2c_client *client) { - adp8860_set_bits(client, ADP8860_MDCR, NSTBY); + adp8860_set_bits(client, ADP8860_MDCR, NSTBY | BLEN); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/video/backlight/adp8870_bl.c +++ linux-lts-raring-3.8.0/drivers/video/backlight/adp8870_bl.c @@ -957,7 +957,7 @@ static int adp8870_i2c_resume(struct i2c_client *client) { - adp8870_set_bits(client, ADP8870_MDCR, NSTBY); + adp8870_set_bits(client, ADP8870_MDCR, NSTBY | BLEN); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/video/console/vgacon.c +++ linux-lts-raring-3.8.0/drivers/video/console/vgacon.c @@ -1064,7 +1064,7 @@ unsigned short video_port_status = vga_video_port_reg + 6; int font_select = 0x00, beg, i; char *charmap; - + bool clear_attribs = false; if (vga_video_type != VIDEO_TYPE_EGAM) { charmap = (char *) VGA_MAP_MEM(colourmap, 0); beg = 0x0e; @@ -1169,12 +1169,6 @@ /* if 512 char mode is already enabled don't re-enable it. */ if ((set) && (ch512 != vga_512_chars)) { - /* attribute controller */ - for (i = 0; i < MAX_NR_CONSOLES; i++) { - struct vc_data *c = vc_cons[i].d; - if (c && c->vc_sw == &vga_con) - c->vc_hi_font_mask = ch512 ? 0x0800 : 0; - } vga_512_chars = ch512; /* 256-char: enable intensity bit 512-char: disable intensity bit */ @@ -1185,8 +1179,22 @@ it means, but it works, and it appears necessary */ inb_p(video_port_status); vga_wattr(state->vgabase, VGA_AR_ENABLE_DISPLAY, 0); + clear_attribs = true; } raw_spin_unlock_irq(&vga_lock); + + if (clear_attribs) { + for (i = 0; i < MAX_NR_CONSOLES; i++) { + struct vc_data *c = vc_cons[i].d; + if (c && c->vc_sw == &vga_con) { + /* force hi font mask to 0, so we always clear + the bit on either transition */ + c->vc_hi_font_mask = 0x00; + clear_buffer_attributes(c); + c->vc_hi_font_mask = ch512 ? 0x0800 : 0; + } + } + } return 0; } --- linux-lts-raring-3.8.0.orig/drivers/video/console/fbcon.c +++ linux-lts-raring-3.8.0/drivers/video/console/fbcon.c @@ -529,6 +529,33 @@ return retval; } +static int do_fbcon_takeover(int show_logo) +{ + int err, i; + + if (!num_registered_fb) + return -ENODEV; + + if (!show_logo) + logo_shown = FBCON_LOGO_DONTSHOW; + + for (i = first_fb_vc; i <= last_fb_vc; i++) + con2fb_map[i] = info_idx; + + err = do_take_over_console(&fb_con, first_fb_vc, last_fb_vc, + fbcon_is_default); + + if (err) { + for (i = first_fb_vc; i <= last_fb_vc; i++) + con2fb_map[i] = -1; + info_idx = -1; + } else { + fbcon_has_console_bind = 1; + } + + return err; +} + static int fbcon_takeover(int show_logo) { int err, i; @@ -815,6 +842,8 @@ * * Maps a virtual console @unit to a frame buffer device * @newidx. + * + * This should be called with the console lock held. */ static int set_con2fb_map(int unit, int newidx, int user) { @@ -832,7 +861,7 @@ if (!search_for_mapped_con() || !con_is_bound(&fb_con)) { info_idx = newidx; - return fbcon_takeover(0); + return do_fbcon_takeover(0); } if (oldidx != -1) @@ -840,7 +869,6 @@ found = search_fb_in_map(newidx); - console_lock(); con2fb_map[unit] = newidx; if (!err && !found) err = con2fb_acquire_newinfo(vc, info, unit, oldidx); @@ -867,7 +895,6 @@ if (!search_fb_in_map(info_idx)) info_idx = newidx; - console_unlock(); return err; } @@ -990,7 +1017,7 @@ } /* Setup default font */ - if (!p->fontdata) { + if (!p->fontdata && !vc->vc_font.data) { if (!fontname[0] || !(font = find_font(fontname))) font = get_default_font(info->var.xres, info->var.yres, @@ -1000,6 +1027,8 @@ vc->vc_font.height = font->height; vc->vc_font.data = (void *)(p->fontdata = font->data); vc->vc_font.charcount = 256; /* FIXME Need to support more fonts */ + } else { + p->fontdata = vc->vc_font.data; } cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); @@ -1159,9 +1188,9 @@ ops->p = &fb_display[fg_console]; } -static void fbcon_free_font(struct display *p) +static void fbcon_free_font(struct display *p, bool freefont) { - if (p->userfont && p->fontdata && (--REFCOUNT(p->fontdata) == 0)) + if (freefont && p->userfont && p->fontdata && (--REFCOUNT(p->fontdata) == 0)) kfree(p->fontdata - FONT_EXTRA_WORDS * sizeof(int)); p->fontdata = NULL; p->userfont = 0; @@ -1173,8 +1202,8 @@ struct fb_info *info; struct fbcon_ops *ops; int idx; + bool free_font = true; - fbcon_free_font(p); idx = con2fb_map[vc->vc_num]; if (idx == -1) @@ -1185,6 +1214,8 @@ if (!info) goto finished; + if (info->flags & FBINFO_MISC_FIRMWARE) + free_font = false; ops = info->fbcon_par; if (!ops) @@ -1196,6 +1227,10 @@ ops->flags &= ~FBCON_FLAGS_INIT; finished: + fbcon_free_font(p, free_font); + if (free_font) + vc->vc_font.data = NULL; + if (!con_is_bound(&fb_con)) fbcon_exit(); @@ -2977,7 +3012,7 @@ { int ret; - ret = unbind_con_driver(&fb_con, first_fb_vc, last_fb_vc, + ret = do_unbind_con_driver(&fb_con, first_fb_vc, last_fb_vc, fbcon_is_default); if (!ret) @@ -2992,6 +3027,7 @@ } #endif /* CONFIG_VT_HW_CONSOLE_BINDING */ +/* called with console_lock held */ static int fbcon_fb_unbind(int idx) { int i, new_idx = -1, ret = 0; @@ -3018,6 +3054,7 @@ return ret; } +/* called with console_lock held */ static int fbcon_fb_unregistered(struct fb_info *info) { int i, idx; @@ -3050,11 +3087,12 @@ primary_device = -1; if (!num_registered_fb) - unregister_con_driver(&fb_con); + do_unregister_con_driver(&fb_con); return 0; } +/* called with console_lock held */ static void fbcon_remap_all(int idx) { int i; @@ -3099,6 +3137,7 @@ } #endif /* CONFIG_FRAMEBUFFER_DETECT_PRIMARY */ +/* called with console_lock held */ static int fbcon_fb_registered(struct fb_info *info) { int ret = 0, i, idx; @@ -3115,7 +3154,7 @@ } if (info_idx != -1) - ret = fbcon_takeover(1); + ret = do_fbcon_takeover(1); } else { for (i = first_fb_vc; i <= last_fb_vc; i++) { if (con2fb_map_boot[i] == idx) @@ -3251,6 +3290,7 @@ ret = fbcon_fb_unregistered(info); break; case FB_EVENT_SET_CONSOLE_MAP: + /* called with console lock held */ con2fb = event->data; ret = set_con2fb_map(con2fb->console - 1, con2fb->framebuffer, 1); --- linux-lts-raring-3.8.0.orig/drivers/base/core.c +++ linux-lts-raring-3.8.0/drivers/base/core.c @@ -1825,7 +1825,7 @@ */ void device_shutdown(void) { - struct device *dev; + struct device *dev, *parent; spin_lock(&devices_kset->list_lock); /* @@ -1842,7 +1842,7 @@ * prevent it from being freed because parent's * lock is to be held */ - get_device(dev->parent); + parent = get_device(dev->parent); get_device(dev); /* * Make sure the device is off the kset list, in the @@ -1852,8 +1852,8 @@ spin_unlock(&devices_kset->list_lock); /* hold lock to avoid race with probe/release */ - if (dev->parent) - device_lock(dev->parent); + if (parent) + device_lock(parent); device_lock(dev); /* Don't allow any more runtime suspends */ @@ -1871,11 +1871,11 @@ } device_unlock(dev); - if (dev->parent) - device_unlock(dev->parent); + if (parent) + device_unlock(parent); put_device(dev); - put_device(dev->parent); + put_device(parent); spin_lock(&devices_kset->list_lock); } --- linux-lts-raring-3.8.0.orig/drivers/base/bus.c +++ linux-lts-raring-3.8.0/drivers/base/bus.c @@ -290,7 +290,7 @@ struct device *dev; int error = 0; - if (!bus) + if (!bus || !bus->p) return -EINVAL; klist_iter_init_node(&bus->p->klist_devices, &i, @@ -324,7 +324,7 @@ struct klist_iter i; struct device *dev; - if (!bus) + if (!bus || !bus->p) return NULL; klist_iter_init_node(&bus->p->klist_devices, &i, --- linux-lts-raring-3.8.0.orig/drivers/base/memory.c +++ linux-lts-raring-3.8.0/drivers/base/memory.c @@ -162,6 +162,8 @@ container_of(dev, struct memory_block, dev); for (i = 0; i < sections_per_block; i++) { + if (!present_section_nr(mem->start_section_nr + i)) + continue; pfn = section_nr_to_pfn(mem->start_section_nr + i); ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION); } --- linux-lts-raring-3.8.0.orig/drivers/base/dd.c +++ linux-lts-raring-3.8.0/drivers/base/dd.c @@ -172,6 +172,8 @@ driver_deferred_probe_enable = true; driver_deferred_probe_trigger(); + /* Sort as many dependencies as possible before exiting initcalls */ + flush_workqueue(deferred_wq); return 0; } late_initcall(deferred_probe_initcall); --- linux-lts-raring-3.8.0.orig/drivers/base/power/opp.c +++ linux-lts-raring-3.8.0/drivers/base/power/opp.c @@ -162,7 +162,7 @@ return v; } -EXPORT_SYMBOL(opp_get_voltage); +EXPORT_SYMBOL_GPL(opp_get_voltage); /** * opp_get_freq() - Gets the frequency corresponding to an available opp @@ -192,7 +192,7 @@ return f; } -EXPORT_SYMBOL(opp_get_freq); +EXPORT_SYMBOL_GPL(opp_get_freq); /** * opp_get_opp_count() - Get number of opps available in the opp list @@ -225,7 +225,7 @@ return count; } -EXPORT_SYMBOL(opp_get_opp_count); +EXPORT_SYMBOL_GPL(opp_get_opp_count); /** * opp_find_freq_exact() - search for an exact frequency @@ -276,7 +276,7 @@ return opp; } -EXPORT_SYMBOL(opp_find_freq_exact); +EXPORT_SYMBOL_GPL(opp_find_freq_exact); /** * opp_find_freq_ceil() - Search for an rounded ceil freq @@ -323,7 +323,7 @@ return opp; } -EXPORT_SYMBOL(opp_find_freq_ceil); +EXPORT_SYMBOL_GPL(opp_find_freq_ceil); /** * opp_find_freq_floor() - Search for a rounded floor freq @@ -374,7 +374,7 @@ return opp; } -EXPORT_SYMBOL(opp_find_freq_floor); +EXPORT_SYMBOL_GPL(opp_find_freq_floor); /** * opp_add() - Add an OPP table from a table definitions @@ -568,7 +568,7 @@ { return opp_set_availability(dev, freq, true); } -EXPORT_SYMBOL(opp_enable); +EXPORT_SYMBOL_GPL(opp_enable); /** * opp_disable() - Disable a specific OPP @@ -590,7 +590,7 @@ { return opp_set_availability(dev, freq, false); } -EXPORT_SYMBOL(opp_disable); +EXPORT_SYMBOL_GPL(opp_disable); #ifdef CONFIG_CPU_FREQ /** @@ -661,6 +661,7 @@ return 0; } +EXPORT_SYMBOL_GPL(opp_init_cpufreq_table); /** * opp_free_cpufreq_table() - free the cpufreq table @@ -678,6 +679,7 @@ kfree(*table); *table = NULL; } +EXPORT_SYMBOL_GPL(opp_free_cpufreq_table); #endif /* CONFIG_CPU_FREQ */ /** @@ -738,4 +740,5 @@ return 0; } +EXPORT_SYMBOL_GPL(of_init_opp_table); #endif --- linux-lts-raring-3.8.0.orig/drivers/base/regmap/regmap.c +++ linux-lts-raring-3.8.0/drivers/base/regmap/regmap.c @@ -662,12 +662,12 @@ } } + regmap_debugfs_init(map, config->name); + ret = regcache_init(map, config); if (ret != 0) goto err_range; - regmap_debugfs_init(map, config->name); - /* Add a devres resource for dev_get_regmap() */ m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); if (!m) { --- linux-lts-raring-3.8.0.orig/drivers/base/regmap/regcache-rbtree.c +++ linux-lts-raring-3.8.0/drivers/base/regmap/regcache-rbtree.c @@ -398,7 +398,7 @@ base = 0; if (max < rbnode->base_reg + rbnode->blklen) - end = rbnode->base_reg + rbnode->blklen - max; + end = max - rbnode->base_reg + 1; else end = rbnode->blklen; --- linux-lts-raring-3.8.0.orig/drivers/dca/dca-core.c +++ linux-lts-raring-3.8.0/drivers/dca/dca-core.c @@ -420,6 +420,11 @@ raw_spin_lock_irqsave(&dca_lock, flags); + if (list_empty(&dca_domains)) { + raw_spin_unlock_irqrestore(&dca_lock, flags); + return; + } + list_del(&dca->node); pci_rc = dca_pci_rc_from_dev(dev); --- linux-lts-raring-3.8.0.orig/drivers/pwm/pwm-spear.c +++ linux-lts-raring-3.8.0/drivers/pwm/pwm-spear.c @@ -143,7 +143,7 @@ u32 val; rc = clk_enable(pc->clk); - if (!rc) + if (rc) return rc; val = spear_pwm_readl(pc, pwm->hwpwm, PWMCR); @@ -209,12 +209,12 @@ pc->chip.npwm = NUM_PWM; ret = clk_prepare(pc->clk); - if (!ret) + if (ret) return ret; if (of_device_is_compatible(np, "st,spear1340-pwm")) { ret = clk_enable(pc->clk); - if (!ret) { + if (ret) { clk_unprepare(pc->clk); return ret; } --- linux-lts-raring-3.8.0.orig/drivers/pci/pci.c +++ linux-lts-raring-3.8.0/drivers/pci/pci.c @@ -651,15 +651,11 @@ error = platform_pci_set_power_state(dev, state); if (!error) pci_update_current_state(dev, state); - /* Fall back to PCI_D0 if native PM is not supported */ - if (!dev->pm_cap) - dev->current_state = PCI_D0; - } else { + } else error = -ENODEV; - /* Fall back to PCI_D0 if native PM is not supported */ - if (!dev->pm_cap) - dev->current_state = PCI_D0; - } + + if (error && !dev->pm_cap) /* Fall back to PCI_D0 */ + dev->current_state = PCI_D0; return error; } --- linux-lts-raring-3.8.0.orig/drivers/pci/pci-acpi.c +++ linux-lts-raring-3.8.0/drivers/pci/pci-acpi.c @@ -47,20 +47,21 @@ if (event != ACPI_NOTIFY_DEVICE_WAKE || !pci_dev) return; + if (pci_dev->pme_poll) + pci_dev->pme_poll = false; + if (pci_dev->current_state == PCI_D3cold) { pci_wakeup_event(pci_dev); pm_runtime_resume(&pci_dev->dev); return; } - if (!pci_dev->pm_cap || !pci_dev->pme_support - || pci_check_pme_status(pci_dev)) { - if (pci_dev->pme_poll) - pci_dev->pme_poll = false; + /* Clear PME Status if set. */ + if (pci_dev->pme_support) + pci_check_pme_status(pci_dev); - pci_wakeup_event(pci_dev); - pm_runtime_resume(&pci_dev->dev); - } + pci_wakeup_event(pci_dev); + pm_runtime_resume(&pci_dev->dev); if (pci_dev->subordinate) pci_pme_wakeup_bus(pci_dev->subordinate); --- linux-lts-raring-3.8.0.orig/drivers/pci/pci-driver.c +++ linux-lts-raring-3.8.0/drivers/pci/pci-driver.c @@ -628,6 +628,7 @@ goto Fixup; } + pci_dev->state_saved = false; if (pm->suspend) { pci_power_t prev = pci_dev->current_state; int error; @@ -774,6 +775,7 @@ return 0; } + pci_dev->state_saved = false; if (pm->freeze) { int error; @@ -862,6 +864,7 @@ goto Fixup; } + pci_dev->state_saved = false; if (pm->poweroff) { int error; @@ -987,6 +990,7 @@ if (!pm || !pm->runtime_suspend) return -ENOSYS; + pci_dev->state_saved = false; pci_dev->no_d3cold = false; error = pm->runtime_suspend(dev); suspend_report_result(pm->runtime_suspend, error); --- linux-lts-raring-3.8.0.orig/drivers/pci/probe.c +++ linux-lts-raring-3.8.0/drivers/pci/probe.c @@ -1667,8 +1667,10 @@ bridge->dev.release = pci_release_bus_bridge_dev; dev_set_name(&bridge->dev, "pci%04x:%02x", pci_domain_nr(b), bus); error = device_register(&bridge->dev); - if (error) - goto bridge_dev_reg_err; + if (error) { + put_device(&bridge->dev); + goto err_out; + } b->bridge = get_device(&bridge->dev); device_enable_async_suspend(b->bridge); pci_set_bus_of_node(b); @@ -1724,8 +1726,6 @@ class_dev_reg_err: put_device(&bridge->dev); device_unregister(&bridge->dev); -bridge_dev_reg_err: - kfree(bridge); err_out: kfree(b); return NULL; --- linux-lts-raring-3.8.0.orig/drivers/pci/quirks.c +++ linux-lts-raring-3.8.0/drivers/pci/quirks.c @@ -44,6 +44,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. @@ -1062,6 +1077,8 @@ DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE, quirk_amd_ide_mode); DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SATA_IDE, quirk_amd_ide_mode); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x7900, quirk_amd_ide_mode); +DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, 0x7900, quirk_amd_ide_mode); /* * Serverworks CSB5 IDE does not fully support native mode --- linux-lts-raring-3.8.0.orig/drivers/pci/access.c +++ linux-lts-raring-3.8.0/drivers/pci/access.c @@ -515,7 +515,7 @@ return false; switch (pos) { - case PCI_EXP_FLAGS_TYPE: + case PCI_EXP_FLAGS: return true; case PCI_EXP_DEVCAP: case PCI_EXP_DEVCTL: --- linux-lts-raring-3.8.0.orig/drivers/pci/xen-pcifront.c +++ linux-lts-raring-3.8.0/drivers/pci/xen-pcifront.c @@ -678,10 +678,9 @@ if (!pcifront_dev) { dev_info(&pdev->xdev->dev, "Installing PCI frontend\n"); pcifront_dev = pdev; - } else { - dev_err(&pdev->xdev->dev, "PCI frontend already installed!\n"); + } else err = -EEXIST; - } + spin_unlock(&pcifront_dev_lock); if (!err && !swiotlb_nr_tbl()) { @@ -848,7 +847,7 @@ goto out; err = pcifront_connect_and_init_dma(pdev); - if (err) { + if (err && err != -EEXIST) { xenbus_dev_fatal(pdev->xdev, err, "Error setting up PCI Frontend"); goto out; --- linux-lts-raring-3.8.0.orig/drivers/pci/pcie/portdrv_pci.c +++ linux-lts-raring-3.8.0/drivers/pci/pcie/portdrv_pci.c @@ -185,14 +185,6 @@ #endif /* !PM */ /* - * PCIe port runtime suspend is broken for some chipsets, so use a - * black list to disable runtime PM for these chipsets. - */ -static const struct pci_device_id port_runtime_pm_black_list[] = { - { /* end: all zeroes */ } -}; - -/* * pcie_portdrv_probe - Probe PCI-Express port devices * @dev: PCI-Express port device being probed * @@ -225,16 +217,11 @@ * it by default. */ dev->d3cold_allowed = false; - if (!pci_match_id(port_runtime_pm_black_list, dev)) - pm_runtime_put_noidle(&dev->dev); - return 0; } static void pcie_portdrv_remove(struct pci_dev *dev) { - if (!pci_match_id(port_runtime_pm_black_list, dev)) - pm_runtime_get_noresume(&dev->dev); pcie_port_device_remove(dev); pci_disable_device(dev); } --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-sensor-hub.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-sensor-hub.c @@ -223,7 +223,8 @@ mutex_lock(&data->mutex); report = sensor_hub_report(report_id, hsdev->hdev, HID_FEATURE_REPORT); - if (!report || (field_index >= report->maxfield)) { + if (!report || (field_index >= report->maxfield) || + report->field[field_index]->report_count < 1) { ret = -EINVAL; goto done_proc; } --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-wiimote-ext.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-wiimote-ext.c @@ -403,14 +403,14 @@ if (ext->motionp) { input_report_key(ext->input, - wiiext_keymap[WIIEXT_KEY_Z], !!(payload[5] & 0x04)); + wiiext_keymap[WIIEXT_KEY_Z], !(payload[5] & 0x04)); input_report_key(ext->input, - wiiext_keymap[WIIEXT_KEY_C], !!(payload[5] & 0x08)); + wiiext_keymap[WIIEXT_KEY_C], !(payload[5] & 0x08)); } else { input_report_key(ext->input, - wiiext_keymap[WIIEXT_KEY_Z], !!(payload[5] & 0x01)); + wiiext_keymap[WIIEXT_KEY_Z], !(payload[5] & 0x01)); input_report_key(ext->input, - wiiext_keymap[WIIEXT_KEY_C], !!(payload[5] & 0x02)); + wiiext_keymap[WIIEXT_KEY_C], !(payload[5] & 0x02)); } input_sync(ext->input); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-input.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-input.c @@ -340,7 +340,7 @@ { struct hid_device *dev = container_of(psy, struct hid_device, battery); int ret = 0; - __u8 buf[2] = {}; + __u8 *buf; switch (prop) { case POWER_SUPPLY_PROP_PRESENT: @@ -349,13 +349,19 @@ break; case POWER_SUPPLY_PROP_CAPACITY: + + buf = kmalloc(2 * sizeof(__u8), GFP_KERNEL); + if (!buf) { + ret = -ENOMEM; + break; + } ret = dev->hid_get_raw_report(dev, dev->battery_report_id, - buf, sizeof(buf), + buf, 2, dev->battery_report_type); if (ret != 2) { - if (ret >= 0) - ret = -EINVAL; + ret = -ENODATA; + kfree(buf); break; } @@ -364,6 +370,7 @@ buf[1] <= dev->battery_max) val->intval = (100 * (buf[1] - dev->battery_min)) / (dev->battery_max - dev->battery_min); + kfree(buf); break; case POWER_SUPPLY_PROP_MODEL_NAME: @@ -477,6 +484,10 @@ if (field->flags & HID_MAIN_ITEM_CONSTANT) goto ignore; + /* Ignore if report count is out of bounds. */ + if (field->report_count < 1) + goto ignore; + /* only LED usages are supported in output fields */ if (field->report_type == HID_OUTPUT_REPORT && (usage->hid & HID_USAGE_PAGE) != HID_UP_LED) { @@ -1155,7 +1166,11 @@ rep_enum = &hid->report_enum[HID_FEATURE_REPORT]; list_for_each_entry(rep, &rep_enum->report_list, list) - for (i = 0; i < rep->maxfield; i++) + for (i = 0; i < rep->maxfield; i++) { + /* Ignore if report count is out of bounds. */ + if (rep->field[i]->report_count < 1) + continue; + for (j = 0; j < rep->field[i]->maxusage; j++) { /* Verify if Battery Strength feature is available */ hidinput_setup_battery(hid, HID_FEATURE_REPORT, rep->field[i]); @@ -1164,6 +1179,7 @@ drv->feature_mapping(hid, rep->field[i], rep->field[i]->usage + j); } + } } static struct hid_input *hidinput_allocate(struct hid_device *hid) --- linux-lts-raring-3.8.0.orig/drivers/hid/Kconfig +++ linux-lts-raring-3.8.0/drivers/hid/Kconfig @@ -27,7 +27,7 @@ config HID_BATTERY_STRENGTH bool "Battery level reporting for HID devices" - depends on HID && POWER_SUPPLY && HID = POWER_SUPPLY + depends on HID && POWER_SUPPLY default n ---help--- This option adds support of reporting battery strength (for HID devices --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-picolcd_cir.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-picolcd_cir.c @@ -147,6 +147,7 @@ struct rc_dev *rdev = data->rc_dev; data->rc_dev = NULL; - rc_unregister_device(rdev); + if (rdev) + rc_unregister_device(rdev); } --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-lenovo-tpkbd.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-lenovo-tpkbd.c @@ -341,7 +341,15 @@ struct tpkbd_data_pointer *data_pointer; size_t name_sz = strlen(dev_name(dev)) + 16; char *name_mute, *name_micmute; - int ret; + int i, ret; + + /* Validate required reports. */ + for (i = 0; i < 4; i++) { + if (!hid_validate_values(hdev, HID_FEATURE_REPORT, 4, i, 1)) + return -ENODEV; + } + if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, 3, 0, 2)) + return -ENODEV; if (sysfs_create_group(&hdev->dev.kobj, &tpkbd_attr_group_pointer)) { @@ -408,22 +416,27 @@ ret = hid_parse(hdev); if (ret) { hid_err(hdev, "hid_parse failed\n"); - goto err_free; + goto err; } ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); if (ret) { hid_err(hdev, "hid_hw_start failed\n"); - goto err_free; + goto err; } uhdev = (struct usbhid_device *) hdev->driver_data; - if (uhdev->ifnum == 1) - return tpkbd_probe_tp(hdev); + if (uhdev->ifnum == 1) { + ret = tpkbd_probe_tp(hdev); + if (ret) + goto err_hid; + } return 0; -err_free: +err_hid: + hid_hw_stop(hdev); +err: return ret; } --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-lg4ff.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-lg4ff.c @@ -487,34 +487,16 @@ int lg4ff_init(struct hid_device *hid) { struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list); - struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list; struct input_dev *dev = hidinput->input; - struct hid_report *report; - struct hid_field *field; struct lg4ff_device_entry *entry; struct lg_drv_data *drv_data; struct usb_device_descriptor *udesc; int error, i, j; __u16 bcdDevice, rev_maj, rev_min; - /* Find the report to use */ - if (list_empty(report_list)) { - hid_err(hid, "No output report found\n"); - return -1; - } - /* Check that the report looks ok */ - report = list_entry(report_list->next, struct hid_report, list); - if (!report) { - hid_err(hid, "NULL output report\n"); - return -1; - } - - field = report->field[0]; - if (!field) { - hid_err(hid, "NULL field\n"); + if (!hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 7)) return -1; - } /* Check what wheel has been connected */ for (i = 0; i < ARRAY_SIZE(lg4ff_devices); i++) { --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-zpff.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-zpff.c @@ -70,21 +70,13 @@ struct hid_report *report; struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list); - struct list_head *report_list = - &hid->report_enum[HID_OUTPUT_REPORT].report_list; struct input_dev *dev = hidinput->input; - int error; + int i, error; - if (list_empty(report_list)) { - hid_err(hid, "no output report found\n"); - return -ENODEV; - } - - report = list_entry(report_list->next, struct hid_report, list); - - if (report->maxfield < 4) { - hid_err(hid, "not enough fields in report\n"); - return -ENODEV; + for (i = 0; i < 4; i++) { + report = hid_validate_values(hid, HID_OUTPUT_REPORT, 0, i, 1); + if (!report) + return -ENODEV; } zpff = kzalloc(sizeof(struct zpff_device), GFP_KERNEL); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-logitech-dj.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-logitech-dj.c @@ -459,19 +459,25 @@ struct dj_report *dj_report) { struct hid_device *hdev = djrcv_dev->hdev; - int sent_bytes; + struct hid_report *report; + struct hid_report_enum *output_report_enum; + u8 *data = (u8 *)(&dj_report->device_index); + unsigned int i; - if (!hdev->hid_output_raw_report) { - dev_err(&hdev->dev, "%s:" - "hid_output_raw_report is null\n", __func__); + output_report_enum = &hdev->report_enum[HID_OUTPUT_REPORT]; + report = output_report_enum->report_id_hash[REPORT_ID_DJ_SHORT]; + + if (!report) { + dev_err(&hdev->dev, "%s: unable to find dj report\n", __func__); return -ENODEV; } - sent_bytes = hdev->hid_output_raw_report(hdev, (u8 *) dj_report, - sizeof(struct dj_report), - HID_OUTPUT_REPORT); + for (i = 0; i < DJREPORT_SHORT_LENGTH - 1; i++) + report->field[0]->value[i] = data[i]; + + usbhid_submit_report(hdev, report, USB_DIR_OUT); - return (sent_bytes < 0) ? sent_bytes : 0; + return 0; } static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev) @@ -778,6 +784,12 @@ goto hid_parse_fail; } + if (!hid_validate_values(hdev, HID_OUTPUT_REPORT, REPORT_ID_DJ_SHORT, + 0, DJREPORT_SHORT_LENGTH - 1)) { + retval = -ENODEV; + goto hid_parse_fail; + } + /* Starts the usb device and connects to upper interfaces hiddev and * hidraw */ retval = hid_hw_start(hdev, HID_CONNECT_DEFAULT); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-ntrig.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-ntrig.c @@ -115,7 +115,8 @@ struct hid_report *report = hdev->report_enum[HID_FEATURE_REPORT]. report_id_hash[0x0d]; - if (!report) + if (!report || report->maxfield < 1 || + report->field[0]->report_count < 1) return -EINVAL; usbhid_submit_report(hdev, report, USB_DIR_IN); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-picolcd_fb.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-picolcd_fb.c @@ -595,10 +595,14 @@ void picolcd_exit_framebuffer(struct picolcd_data *data) { struct fb_info *info = data->fb_info; - struct picolcd_fb_data *fbdata = info->par; + struct picolcd_fb_data *fbdata; unsigned long flags; + if (!info) + return; + device_remove_file(&data->hdev->dev, &dev_attr_fb_update_rate); + fbdata = info->par; /* disconnect framebuffer from HID dev */ spin_lock_irqsave(&fbdata->lock, flags); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-magicmouse.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-magicmouse.c @@ -462,6 +462,21 @@ return 0; } +static void magicmouse_input_configured(struct hid_device *hdev, + struct hid_input *hi) + +{ + struct magicmouse_sc *msc = hid_get_drvdata(hdev); + + int ret = magicmouse_setup_input(msc->input, hdev); + if (ret) { + hid_err(hdev, "magicmouse setup input failed (%d)\n", ret); + /* clean msc->input to notify probe() of the failure */ + msc->input = NULL; + } +} + + static int magicmouse_probe(struct hid_device *hdev, const struct hid_device_id *id) { @@ -493,15 +508,10 @@ goto err_free; } - /* We do this after hid-input is done parsing reports so that - * hid-input uses the most natural button and axis IDs. - */ - if (msc->input) { - ret = magicmouse_setup_input(msc->input, hdev); - if (ret) { - hid_err(hdev, "magicmouse setup input failed (%d)\n", ret); - goto err_stop_hw; - } + if (!msc->input) { + hid_err(hdev, "magicmouse input not registered\n"); + ret = -ENOMEM; + goto err_stop_hw; } if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE) @@ -568,6 +578,7 @@ .remove = magicmouse_remove, .raw_event = magicmouse_raw_event, .input_mapping = magicmouse_input_mapping, + .input_configured = magicmouse_input_configured, }; static int __init magicmouse_init(void) --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-apple.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-apple.c @@ -529,6 +529,12 @@ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS), .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI), + .driver_data = APPLE_HAS_FN }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO), + .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS), + .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-core.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-core.c @@ -63,6 +63,8 @@ struct hid_report_enum *report_enum = device->report_enum + type; struct hid_report *report; + if (id >= HID_MAX_IDS) + return NULL; if (report_enum->report_id_hash[id]) return report_enum->report_id_hash[id]; @@ -92,7 +94,6 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values) { struct hid_field *field; - int i; if (report->maxfield == HID_MAX_FIELDS) { hid_err(report->device, "too many fields in report\n"); @@ -111,9 +112,6 @@ field->value = (s32 *)(field->usage + usages); field->report = report; - for (i = 0; i < usages; i++) - field->usage[i].usage_index = i; - return field; } @@ -224,9 +222,9 @@ { struct hid_report *report; struct hid_field *field; - int usages; + unsigned usages; unsigned offset; - int i; + unsigned i; report = hid_register_report(parser->device, report_type, parser->global.report_id); if (!report) { @@ -253,7 +251,8 @@ if (!parser->local.usage_index) /* Ignore padding fields */ return 0; - usages = max_t(int, parser->local.usage_index, parser->global.report_count); + usages = max_t(unsigned, parser->local.usage_index, + parser->global.report_count); field = hid_register_field(report, usages, parser->global.report_count); if (!field) @@ -264,13 +263,14 @@ field->application = hid_lookup_collection(parser, HID_COLLECTION_APPLICATION); for (i = 0; i < usages; i++) { - int j = i; + unsigned j = i; /* Duplicate the last usage we parsed if we have excess values */ if (i >= parser->local.usage_index) j = parser->local.usage_index - 1; field->usage[i].hid = parser->local.usage[j]; field->usage[i].collection_index = parser->local.collection_index[j]; + field->usage[i].usage_index = i; } field->maxusage = usages; @@ -404,8 +404,10 @@ case HID_GLOBAL_ITEM_TAG_REPORT_ID: parser->global.report_id = item_udata(item); - if (parser->global.report_id == 0) { - hid_err(parser->device, "report_id 0 is invalid\n"); + if (parser->global.report_id == 0 || + parser->global.report_id >= HID_MAX_IDS) { + hid_err(parser->device, "report_id %u is invalid\n", + parser->global.report_id); return -1; } return 0; @@ -575,7 +577,7 @@ for (i = 0; i < HID_REPORT_TYPES; i++) { struct hid_report_enum *report_enum = device->report_enum + i; - for (j = 0; j < 256; j++) { + for (j = 0; j < HID_MAX_IDS; j++) { struct hid_report *report = report_enum->report_id_hash[j]; if (report) hid_free_report(report); @@ -756,6 +758,64 @@ } EXPORT_SYMBOL_GPL(hid_parse_report); +static const char * const hid_report_names[] = { + "HID_INPUT_REPORT", + "HID_OUTPUT_REPORT", + "HID_FEATURE_REPORT", +}; +/** + * hid_validate_values - validate existing device report's value indexes + * + * @device: hid device + * @type: which report type to examine + * @id: which report ID to examine (0 for first) + * @field_index: which report field to examine + * @report_counts: expected number of values + * + * Validate the number of values in a given field of a given report, after + * parsing. + */ +struct hid_report *hid_validate_values(struct hid_device *hid, + unsigned int type, unsigned int id, + unsigned int field_index, + unsigned int report_counts) +{ + struct hid_report *report; + + if (type > HID_FEATURE_REPORT) { + hid_err(hid, "invalid HID report type %u\n", type); + return NULL; + } + + if (id >= HID_MAX_IDS) { + hid_err(hid, "invalid HID report id %u\n", id); + return NULL; + } + + /* + * Explicitly not using hid_get_report() here since it depends on + * ->numbered being checked, which may not always be the case when + * drivers go to access report values. + */ + report = hid->report_enum[type].report_id_hash[id]; + if (!report) { + hid_err(hid, "missing %s %u\n", hid_report_names[type], id); + return NULL; + } + if (report->maxfield <= field_index) { + hid_err(hid, "not enough fields in %s %u\n", + hid_report_names[type], id); + return NULL; + } + if (report->field[field_index]->report_count < report_counts) { + hid_err(hid, "not enough values in %s %u field %u\n", + hid_report_names[type], id, field_index); + return NULL; + } + return report; +} +EXPORT_SYMBOL_GPL(hid_validate_values); + /** * hid_open_report - open a driver-specific device report * @@ -1153,7 +1213,12 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value) { - unsigned size = field->report_size; + unsigned size; + + if (!field) + return -1; + + size = field->report_size; hid_dump_input(field->report->device, field->usage + offset, value); @@ -1228,7 +1293,7 @@ goto out; } - if (hid->claimed != HID_CLAIMED_HIDRAW) { + if (hid->claimed != HID_CLAIMED_HIDRAW && report->maxfield) { for (a = 0; a < report->maxfield; a++) hid_input_field(hid, report->field[a], cdata, interrupt); } @@ -1562,6 +1627,9 @@ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, @@ -1697,6 +1765,7 @@ { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, @@ -2070,6 +2139,7 @@ { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) }, { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) }, { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) }, + { HID_USB_DEVICE(USB_VENDOR_ID_MASTERKIT, USB_DEVICE_ID_MASTERKIT_MA901RADIO) }, { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) }, { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) }, @@ -2170,6 +2240,9 @@ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, { } --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-pl.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-pl.c @@ -129,8 +129,14 @@ strong = &report->field[0]->value[2]; weak = &report->field[0]->value[3]; debug("detected single-field device"); - } else if (report->maxfield >= 4 && report->field[0]->maxusage == 1 && - report->field[0]->usage[0].hid == (HID_UP_LED | 0x43)) { + } else if (report->field[0]->maxusage == 1 && + report->field[0]->usage[0].hid == + (HID_UP_LED | 0x43) && + report->maxfield >= 4 && + report->field[0]->report_count >= 1 && + report->field[1]->report_count >= 1 && + report->field[2]->report_count >= 1 && + report->field[3]->report_count >= 1) { report->field[0]->value[0] = 0x00; report->field[1]->value[0] = 0x00; strong = &report->field[2]->value[0]; --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-lg3ff.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-lg3ff.c @@ -68,10 +68,11 @@ int x, y; /* - * Maxusage should always be 63 (maximum fields) - * likely a better way to ensure this data is clean + * Available values in the field should always be 63, but we only use up to + * 35. Instead, clear the entire area, however big it is. */ - memset(report->field[0]->value, 0, sizeof(__s32)*report->field[0]->maxusage); + memset(report->field[0]->value, 0, + sizeof(__s32) * report->field[0]->report_count); switch (effect->type) { case FF_CONSTANT: @@ -131,32 +132,14 @@ int lg3ff_init(struct hid_device *hid) { struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list); - struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list; struct input_dev *dev = hidinput->input; - struct hid_report *report; - struct hid_field *field; const signed short *ff_bits = ff3_joystick_ac; int error; int i; - /* Find the report to use */ - if (list_empty(report_list)) { - hid_err(hid, "No output report found\n"); - return -1; - } - /* Check that the report looks ok */ - report = list_entry(report_list->next, struct hid_report, list); - if (!report) { - hid_err(hid, "NULL output report\n"); - return -1; - } - - field = report->field[0]; - if (!field) { - hid_err(hid, "NULL field\n"); - return -1; - } + if (!hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 35)) + return -ENODEV; /* Assume single fixed device G940 */ for (i = 0; ff_bits[i] >= 0; i++) --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-ids.h +++ linux-lts-raring-3.8.0/drivers/hid/hid-ids.h @@ -135,6 +135,9 @@ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI 0x0255 #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO 0x0256 +#define USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI 0x0291 +#define USB_DEVICE_ID_APPLE_WELLSPRING8_ISO 0x0292 +#define USB_DEVICE_ID_APPLE_WELLSPRING8_JIS 0x0293 #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b #define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241 @@ -554,6 +557,9 @@ #define USB_VENDOR_ID_MADCATZ 0x0738 #define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540 +#define USB_VENDOR_ID_MASTERKIT 0x16c0 +#define USB_DEVICE_ID_MASTERKIT_MA901RADIO 0x05df + #define USB_VENDOR_ID_MCC 0x09db #define USB_DEVICE_ID_MCC_PMD1024LS 0x0076 #define USB_DEVICE_ID_MCC_PMD1208LS 0x007a @@ -584,6 +590,9 @@ #define USB_VENDOR_ID_MONTEREY 0x0566 #define USB_DEVICE_ID_GENIUS_KB29E 0x3004 +#define USB_VENDOR_ID_MSI 0x1770 +#define USB_DEVICE_ID_MSI_GX680R_LED_PANEL 0xff00 + #define USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR 0x0400 #define USB_DEVICE_ID_N_S_HARMONY 0xc359 @@ -675,6 +684,9 @@ #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001 0x3001 #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008 0x3008 +#define USB_VENDOR_ID_REALTEK 0x0bda +#define USB_DEVICE_ID_REALTEK_READER 0x0152 + #define USB_VENDOR_ID_ROCCAT 0x1e7d #define USB_DEVICE_ID_ROCCAT_ARVO 0x30d4 #define USB_DEVICE_ID_ROCCAT_ISKU 0x319c @@ -709,6 +721,7 @@ #define USB_VENDOR_ID_SONY 0x054c #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b +#define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374 #define USB_DEVICE_ID_SONY_PS3_BDREMOTE 0x0306 #define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268 #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f --- linux-lts-raring-3.8.0.orig/drivers/hid/hidraw.c +++ linux-lts-raring-3.8.0/drivers/hid/hidraw.c @@ -113,7 +113,7 @@ __u8 *buf; int ret = 0; - if (!hidraw_table[minor]) { + if (!hidraw_table[minor] || !hidraw_table[minor]->exist) { ret = -ENODEV; goto out; } @@ -261,7 +261,7 @@ } mutex_lock(&minors_lock); - if (!hidraw_table[minor]) { + if (!hidraw_table[minor] || !hidraw_table[minor]->exist) { err = -ENODEV; goto out_unlock; } @@ -302,39 +302,38 @@ return fasync_helper(fd, file, on, &list->fasync); } +static void drop_ref(struct hidraw *hidraw, int exists_bit) +{ + if (exists_bit) { + hid_hw_close(hidraw->hid); + hidraw->exist = 0; + if (hidraw->open) + wake_up_interruptible(&hidraw->wait); + } else { + --hidraw->open; + } + + if (!hidraw->open && !hidraw->exist) { + device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor)); + hidraw_table[hidraw->minor] = NULL; + kfree(hidraw); + } +} + static int hidraw_release(struct inode * inode, struct file * file) { unsigned int minor = iminor(inode); - struct hidraw *dev; struct hidraw_list *list = file->private_data; - int ret; - int i; mutex_lock(&minors_lock); - if (!hidraw_table[minor]) { - ret = -ENODEV; - goto unlock; - } list_del(&list->node); - dev = hidraw_table[minor]; - if (!--dev->open) { - if (list->hidraw->exist) { - hid_hw_power(dev->hid, PM_HINT_NORMAL); - hid_hw_close(dev->hid); - } else { - kfree(list->hidraw); - } - } - - for (i = 0; i < HIDRAW_BUFFER_SIZE; ++i) - kfree(list->buffer[i].value); kfree(list); - ret = 0; -unlock: - mutex_unlock(&minors_lock); - return ret; + drop_ref(hidraw_table[minor], 0); + + mutex_unlock(&minors_lock); + return 0; } static long hidraw_ioctl(struct file *file, unsigned int cmd, @@ -539,18 +538,9 @@ struct hidraw *hidraw = hid->hidraw; mutex_lock(&minors_lock); - hidraw->exist = 0; - - device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor)); - hidraw_table[hidraw->minor] = NULL; + drop_ref(hidraw, 1); - if (hidraw->open) { - hid_hw_close(hid); - wake_up_interruptible(&hidraw->wait); - } else { - kfree(hidraw); - } mutex_unlock(&minors_lock); } EXPORT_SYMBOL_GPL(hidraw_disconnect); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-multitouch.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-multitouch.c @@ -85,9 +85,9 @@ multitouch fields */ unsigned last_field_index; /* last field index of the report */ unsigned last_slot_field; /* the last field of a slot */ - __s8 inputmode; /* InputMode HID feature, -1 if non-existent */ - __s8 inputmode_index; /* InputMode HID feature index in the report */ - __s8 maxcontact_report_id; /* Maximum Contact Number HID feature, + __s16 inputmode; /* InputMode HID feature, -1 if non-existent */ + __s16 inputmode_index; /* InputMode HID feature index in the report */ + __s16 maxcontact_report_id; /* Maximum Contact Number HID feature, -1 if non-existent */ __u8 num_received; /* how many contacts we received */ __u8 num_expected; /* expected last contact index */ @@ -268,20 +268,18 @@ struct hid_field *field, struct hid_usage *usage) { struct mt_device *td = hid_get_drvdata(hdev); - int i; switch (usage->hid) { case HID_DG_INPUTMODE: - td->inputmode = field->report->id; - td->inputmode_index = 0; /* has to be updated below */ - - for (i=0; i < field->maxusage; i++) { - if (field->usage[i].hid == usage->hid) { - td->inputmode_index = i; - break; - } + /* Ignore if value index is out of bounds. */ + if (usage->usage_index >= field->report_count) { + dev_err(&hdev->dev, "HID_DG_INPUTMODE out of range\n"); + break; } + td->inputmode = field->report->id; + td->inputmode_index = usage->usage_index; + break; case HID_DG_CONTACTMAX: td->maxcontact_report_id = field->report->id; @@ -459,6 +457,10 @@ td->last_field_index = field->index; return 1; case HID_DG_CONTACTCOUNT: + /* Ignore if indexes are out of bounds. */ + if (field->index >= field->report->maxfield || + usage->usage_index >= field->report_count) + return 1; td->last_field_index = field->index; return 1; case HID_DG_CONTACTMAX: --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-lg2ff.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-lg2ff.c @@ -66,26 +66,13 @@ struct hid_report *report; struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list); - struct list_head *report_list = - &hid->report_enum[HID_OUTPUT_REPORT].report_list; struct input_dev *dev = hidinput->input; int error; - if (list_empty(report_list)) { - hid_err(hid, "no output report found\n"); + /* Check that the report looks ok */ + report = hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 7); + if (!report) return -ENODEV; - } - - report = list_entry(report_list->next, struct hid_report, list); - - if (report->maxfield < 1) { - hid_err(hid, "output report is empty\n"); - return -ENODEV; - } - if (report->field[0]->report_count < 7) { - hid_err(hid, "not enough values in the field\n"); - return -ENODEV; - } lg2ff = kmalloc(sizeof(struct lg2ff_device), GFP_KERNEL); if (!lg2ff) --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-picolcd_core.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-picolcd_core.c @@ -292,7 +292,7 @@ buf += 10; cnt -= 10; } - if (!report) + if (!report || report->maxfield != 1) return -EINVAL; while (cnt > 0 && (buf[cnt-1] == '\n' || buf[cnt-1] == '\r')) --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-sony.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-sony.c @@ -43,9 +43,19 @@ { struct sony_sc *sc = hid_get_drvdata(hdev); - if ((sc->quirks & VAIO_RDESC_CONSTANT) && - *rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) { - hid_info(hdev, "Fixing up Sony Vaio VGX report descriptor\n"); + /* + * Some Sony RF receivers wrongly declare the mouse pointer as a + * a constant non-data variable. + */ + if ((sc->quirks & VAIO_RDESC_CONSTANT) && *rsize >= 56 && + /* usage page: generic desktop controls */ + /* rdesc[0] == 0x05 && rdesc[1] == 0x01 && */ + /* usage: mouse */ + rdesc[2] == 0x09 && rdesc[3] == 0x02 && + /* input (usage page for x,y axes): constant, variable, relative */ + rdesc[54] == 0x81 && rdesc[55] == 0x07) { + hid_info(hdev, "Fixing up Sony RF Receiver report descriptor\n"); + /* input: data, variable, relative */ rdesc[55] = 0x06; } @@ -217,6 +227,8 @@ .driver_data = SIXAXIS_CONTROLLER_BT }, { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE), .driver_data = VAIO_RDESC_CONSTANT }, + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE), + .driver_data = VAIO_RDESC_CONSTANT }, { } }; MODULE_DEVICE_TABLE(hid, sony_devices); --- linux-lts-raring-3.8.0.orig/drivers/hid/hid-lgff.c +++ linux-lts-raring-3.8.0/drivers/hid/hid-lgff.c @@ -130,27 +130,14 @@ int lgff_init(struct hid_device* hid) { struct hid_input *hidinput = list_entry(hid->inputs.next, struct hid_input, list); - struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT].report_list; struct input_dev *dev = hidinput->input; - struct hid_report *report; - struct hid_field *field; const signed short *ff_bits = ff_joystick; int error; int i; - /* Find the report to use */ - if (list_empty(report_list)) { - hid_err(hid, "No output report found\n"); - return -1; - } - /* Check that the report looks ok */ - report = list_entry(report_list->next, struct hid_report, list); - field = report->field[0]; - if (!field) { - hid_err(hid, "NULL field\n"); - return -1; - } + if (!hid_validate_values(hid, HID_OUTPUT_REPORT, 0, 0, 7)) + return -ENODEV; for (i = 0; i < ARRAY_SIZE(devices); i++) { if (dev->id.vendor == devices[i].idVendor && --- linux-lts-raring-3.8.0.orig/drivers/hid/usbhid/hid-quirks.c +++ linux-lts-raring-3.8.0/drivers/hid/usbhid/hid-quirks.c @@ -73,6 +73,7 @@ { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS }, { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET }, { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GX680R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS }, { USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS }, { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS }, { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS }, @@ -80,6 +81,7 @@ { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET }, { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001, HID_QUIRK_NOGET }, { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET }, + { USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER, HID_QUIRK_NO_INIT_REPORTS }, { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET }, { USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780, HID_QUIRK_NOGET }, { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, --- linux-lts-raring-3.8.0.orig/drivers/ssb/driver_chipcommon_pmu.c +++ linux-lts-raring-3.8.0/drivers/ssb/driver_chipcommon_pmu.c @@ -675,3 +675,32 @@ return 0; } } + +void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid) +{ + u32 pmu_ctl = 0; + + switch (cc->dev->bus->chip_id) { + case 0x4322: + ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100070); + ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x1014140a); + ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888854); + if (spuravoid == 1) + ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05201828); + else + ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05001828); + pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; + break; + case 43222: + /* TODO: BCM43222 requires updating PLLs too */ + return; + default: + ssb_printk(KERN_ERR PFX + "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", + cc->dev->bus->chip_id); + return; + } + + chipco_set32(cc, SSB_CHIPCO_PMU_CTL, pmu_ctl); +} +EXPORT_SYMBOL_GPL(ssb_pmu_spuravoid_pllupdate); --- linux-lts-raring-3.8.0.orig/drivers/scsi/dc395x.c +++ linux-lts-raring-3.8.0/drivers/scsi/dc395x.c @@ -3747,13 +3747,13 @@ dcb->max_command = 1; dcb->target_id = target; dcb->target_lun = lun; + dcb->dev_mode = eeprom->target[target].cfg0; #ifndef DC395x_NO_DISCONNECT dcb->identify_msg = IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun); #else dcb->identify_msg = IDENTIFY(0, lun); #endif - dcb->dev_mode = eeprom->target[target].cfg0; dcb->inquiry7 = 0; dcb->sync_mode = 0; dcb->min_nego_period = clock_period[period_index]; --- linux-lts-raring-3.8.0.orig/drivers/scsi/sr.c +++ linux-lts-raring-3.8.0/drivers/scsi/sr.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -79,6 +80,11 @@ static int sr_probe(struct device *); static int sr_remove(struct device *); static int sr_done(struct scsi_cmnd *); +static int sr_runtime_suspend(struct device *dev); + +static struct dev_pm_ops sr_pm_ops = { + .runtime_suspend = sr_runtime_suspend, +}; static struct scsi_driver sr_template = { .owner = THIS_MODULE, @@ -86,6 +92,7 @@ .name = "sr", .probe = sr_probe, .remove = sr_remove, + .pm = &sr_pm_ops, }, .done = sr_done, }; @@ -131,6 +138,16 @@ return container_of(disk->private_data, struct scsi_cd, driver); } +static int sr_runtime_suspend(struct device *dev) +{ + struct scsi_cd *cd = dev_get_drvdata(dev); + + if (cd->media_present) + return -EBUSY; + else + return 0; +} + /* * The get and put routines for the struct scsi_cd. Note this entity * has a scsi_device pointer and owns a reference to this. @@ -146,7 +163,8 @@ kref_get(&cd->kref); if (scsi_device_get(cd->device)) goto out_put; - goto out; + if (!scsi_autopm_get_device(cd->device)) + goto out; out_put: kref_put(&cd->kref, sr_kref_release); @@ -162,6 +180,7 @@ mutex_lock(&sr_ref_mutex); kref_put(&cd->kref, sr_kref_release); + scsi_autopm_put_device(sdev); scsi_device_put(sdev); mutex_unlock(&sr_ref_mutex); } @@ -540,6 +559,8 @@ void __user *argp = (void __user *)arg; int ret; + scsi_autopm_get_device(cd->device); + mutex_lock(&sr_mutex); /* @@ -571,6 +592,7 @@ out: mutex_unlock(&sr_mutex); + scsi_autopm_put_device(cd->device); return ret; } @@ -578,7 +600,17 @@ unsigned int clearing) { struct scsi_cd *cd = scsi_cd(disk); - return cdrom_check_events(&cd->cdi, clearing); + unsigned int ret; + + if (atomic_read(&cd->device->disk_events_disable_depth) == 0) { + scsi_autopm_get_device(cd->device); + ret = cdrom_check_events(&cd->cdi, clearing); + scsi_autopm_put_device(cd->device); + } else { + ret = 0; + } + + return ret; } static int sr_block_revalidate_disk(struct gendisk *disk) @@ -586,12 +618,16 @@ struct scsi_cd *cd = scsi_cd(disk); struct scsi_sense_hdr sshdr; + scsi_autopm_get_device(cd->device); + /* if the unit is not ready, nothing more to do */ if (scsi_test_unit_ready(cd->device, SR_TIMEOUT, MAX_RETRIES, &sshdr)) - return 0; + goto out; sr_cd_check(&cd->cdi); get_sectorsize(cd); +out: + scsi_autopm_put_device(cd->device); return 0; } @@ -718,6 +754,8 @@ sdev_printk(KERN_DEBUG, sdev, "Attached scsi CD-ROM %s\n", cd->cdi.name); + scsi_autopm_put_device(cd->device); + return 0; fail_put: @@ -965,6 +1003,8 @@ { struct scsi_cd *cd = dev_get_drvdata(dev); + scsi_autopm_get_device(cd->device); + blk_queue_prep_rq(cd->device->request_queue, scsi_prep_fn); del_gendisk(cd->disk); --- linux-lts-raring-3.8.0.orig/drivers/scsi/scsi_lib.c +++ linux-lts-raring-3.8.0/drivers/scsi/scsi_lib.c @@ -2617,3 +2617,17 @@ kunmap_atomic(virt); } EXPORT_SYMBOL(scsi_kunmap_atomic_sg); + +void sdev_disable_disk_events(struct scsi_device *sdev) +{ + atomic_inc(&sdev->disk_events_disable_depth); +} +EXPORT_SYMBOL(sdev_disable_disk_events); + +void sdev_enable_disk_events(struct scsi_device *sdev) +{ + if (WARN_ON_ONCE(atomic_read(&sdev->disk_events_disable_depth) <= 0)) + return; + atomic_dec(&sdev->disk_events_disable_depth); +} +EXPORT_SYMBOL(sdev_enable_disk_events); --- linux-lts-raring-3.8.0.orig/drivers/scsi/scsi.c +++ linux-lts-raring-3.8.0/drivers/scsi/scsi.c @@ -1031,6 +1031,9 @@ { int i, result; + if (sdev->skip_vpd_pages) + goto fail; + /* Ask for all the pages supported by this device */ result = scsi_vpd_inquiry(sdev, buf, 0, buf_len); if (result) @@ -1070,8 +1073,8 @@ * @opcode: opcode for command to look up * * Uses the REPORT SUPPORTED OPERATION CODES to look up the given - * opcode. Returns 0 if RSOC fails or if the command opcode is - * unsupported. Returns 1 if the device claims to support the command. + * opcode. Returns -EINVAL if RSOC fails, 0 if the command opcode is + * unsupported and 1 if the device claims to support the command. */ int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer, unsigned int len, unsigned char opcode) @@ -1081,7 +1084,7 @@ int result; if (sdev->no_report_opcodes || sdev->scsi_level < SCSI_SPC_3) - return 0; + return -EINVAL; memset(cmd, 0, 16); cmd[0] = MAINTENANCE_IN; @@ -1097,7 +1100,7 @@ if (result && scsi_sense_valid(&sshdr) && sshdr.sense_key == ILLEGAL_REQUEST && (sshdr.asc == 0x20 || sshdr.asc == 0x24) && sshdr.ascq == 0x00) - return 0; + return -EINVAL; if ((buffer[1] & 3) == 3) /* Command supported */ return 1; --- linux-lts-raring-3.8.0.orig/drivers/scsi/storvsc_drv.c +++ linux-lts-raring-3.8.0/drivers/scsi/storvsc_drv.c @@ -467,6 +467,7 @@ if (!bounce_sgl) return NULL; + sg_init_table(bounce_sgl, num_pages); for (i = 0; i < num_pages; i++) { page_buf = alloc_page(GFP_ATOMIC); if (!page_buf) @@ -1155,6 +1156,8 @@ blk_queue_bounce_limit(sdevice->request_queue, BLK_BOUNCE_ANY); + sdevice->no_write_same = 1; + return 0; } @@ -1237,6 +1240,8 @@ u8 scsi_op = scmnd->cmnd[0]; switch (scsi_op) { + /* the host does not handle WRITE_SAME, log accident usage */ + case WRITE_SAME: /* * smartd sends this command and the host does not handle * this. So, don't send it. --- linux-lts-raring-3.8.0.orig/drivers/scsi/sd.c +++ linux-lts-raring-3.8.0/drivers/scsi/sd.c @@ -142,6 +142,7 @@ char *buffer_data; struct scsi_mode_data data; struct scsi_sense_hdr sshdr; + static const char temp[] = "temporary "; int len; if (sdp->type != TYPE_DISK) @@ -150,6 +151,13 @@ * it's not worth the risk */ return -EINVAL; + if (strncmp(buf, temp, sizeof(temp) - 1) == 0) { + buf += sizeof(temp) - 1; + sdkp->cache_override = 1; + } else { + sdkp->cache_override = 0; + } + for (i = 0; i < ARRAY_SIZE(sd_cache_types); i++) { len = strlen(sd_cache_types[i]); if (strncmp(sd_cache_types[i], buf, len) == 0 && @@ -162,6 +170,13 @@ return -EINVAL; rcd = ct & 0x01 ? 1 : 0; wce = ct & 0x02 ? 1 : 0; + + if (sdkp->cache_override) { + sdkp->WCE = wce; + sdkp->RCD = rcd; + return count; + } + if (scsi_mode_sense(sdp, 0x08, 8, buffer, sizeof(buffer), SD_TIMEOUT, SD_MAX_RETRIES, &data, NULL)) return -EINVAL; @@ -427,8 +442,10 @@ if (max == 0) sdp->no_write_same = 1; - else if (max <= SD_MAX_WS16_BLOCKS) + else if (max <= SD_MAX_WS16_BLOCKS) { + sdp->no_write_same = 0; sdkp->max_ws_blocks = max; + } sd_config_write_same(sdkp); @@ -725,7 +742,6 @@ { struct request_queue *q = sdkp->disk->queue; unsigned int logical_block_size = sdkp->device->sector_size; - unsigned int blocks = 0; if (sdkp->device->no_write_same) { sdkp->max_ws_blocks = 0; @@ -737,18 +753,20 @@ * blocks per I/O unless the device explicitly advertises a * bigger limit. */ - if (sdkp->max_ws_blocks == 0) - sdkp->max_ws_blocks = SD_MAX_WS10_BLOCKS; - - if (sdkp->ws16 || sdkp->max_ws_blocks > SD_MAX_WS10_BLOCKS) - blocks = min_not_zero(sdkp->max_ws_blocks, - (u32)SD_MAX_WS16_BLOCKS); - else - blocks = min_not_zero(sdkp->max_ws_blocks, - (u32)SD_MAX_WS10_BLOCKS); + if (sdkp->max_ws_blocks > SD_MAX_WS10_BLOCKS) + sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks, + (u32)SD_MAX_WS16_BLOCKS); + else if (sdkp->ws16 || sdkp->ws10 || sdkp->device->no_report_opcodes) + sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks, + (u32)SD_MAX_WS10_BLOCKS); + else { + sdkp->device->no_write_same = 1; + sdkp->max_ws_blocks = 0; + } out: - blk_queue_max_write_same_sectors(q, blocks * (logical_block_size >> 9)); + blk_queue_max_write_same_sectors(q, sdkp->max_ws_blocks * + (logical_block_size >> 9)); } /** @@ -810,10 +828,17 @@ static void sd_unprep_fn(struct request_queue *q, struct request *rq) { + struct scsi_cmnd *SCpnt = rq->special; + if (rq->cmd_flags & REQ_DISCARD) { free_page((unsigned long)rq->buffer); rq->buffer = NULL; } + if (SCpnt->cmnd != rq->cmd) { + mempool_free(SCpnt->cmnd, sd_cdb_pool); + SCpnt->cmnd = NULL; + SCpnt->cmd_len = 0; + } } /** @@ -1704,21 +1729,6 @@ if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt)) sd_dif_complete(SCpnt, good_bytes); - if (scsi_host_dif_capable(sdkp->device->host, sdkp->protection_type) - == SD_DIF_TYPE2_PROTECTION && SCpnt->cmnd != SCpnt->request->cmd) { - - /* We have to print a failed command here as the - * extended CDB gets freed before scsi_io_completion() - * is called. - */ - if (result) - scsi_print_command(SCpnt); - - mempool_free(SCpnt->cmnd, sd_cdb_pool); - SCpnt->cmnd = NULL; - SCpnt->cmd_len = 0; - } - return good_bytes; } @@ -2319,6 +2329,10 @@ int old_rcd = sdkp->RCD; int old_dpofua = sdkp->DPOFUA; + + if (sdkp->cache_override) + return; + first_len = 4; if (sdp->skip_ms_page_8) { if (sdp->type == TYPE_RBC) @@ -2407,14 +2421,9 @@ } } - if (modepage == 0x3F) { - sd_printk(KERN_ERR, sdkp, "No Caching mode page " - "present\n"); - goto defaults; - } else if ((buffer[offset] & 0x3f) != modepage) { - sd_printk(KERN_ERR, sdkp, "Got wrong page\n"); - goto defaults; - } + sd_printk(KERN_ERR, sdkp, "No Caching mode page found\n"); + goto defaults; + Page_found: if (modepage == 8) { sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0); @@ -2628,9 +2637,24 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer) { - if (scsi_report_opcode(sdkp->device, buffer, SD_BUF_SIZE, - WRITE_SAME_16)) + struct scsi_device *sdev = sdkp->device; + + if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) { + sdev->no_report_opcodes = 1; + + /* Disable WRITE SAME if REPORT SUPPORTED OPERATION + * CODES is unsupported and the device has an ATA + * Information VPD page (SAT). + */ + if (!scsi_get_vpd_page(sdev, 0x89, buffer, SD_BUF_SIZE)) + sdev->no_write_same = 1; + } + + if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME_16) == 1) sdkp->ws16 = 1; + + if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME) == 1) + sdkp->ws10 = 1; } static int sd_try_extended_inquiry(struct scsi_device *sdp) @@ -2812,6 +2836,7 @@ sdkp->capacity = 0; sdkp->media_present = 1; sdkp->write_prot = 0; + sdkp->cache_override = 0; sdkp->WCE = 0; sdkp->RCD = 0; sdkp->ATO = 0; --- linux-lts-raring-3.8.0.orig/drivers/scsi/sd.h +++ linux-lts-raring-3.8.0/drivers/scsi/sd.h @@ -73,6 +73,7 @@ u8 protection_type;/* Data Integrity Field */ u8 provisioning_mode; unsigned ATO : 1; /* state of disk ATO bit */ + unsigned cache_override : 1; /* temp override of WCE,RCD */ unsigned WCE : 1; /* state of disk WCE bit */ unsigned RCD : 1; /* state of disk RCD bit, unused */ unsigned DPOFUA : 1; /* state of disk DPOFUA bit */ @@ -83,6 +84,7 @@ unsigned lbpws : 1; unsigned lbpws10 : 1; unsigned lbpvpd : 1; + unsigned ws10 : 1; unsigned ws16 : 1; }; #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev) --- linux-lts-raring-3.8.0.orig/drivers/scsi/megaraid/megaraid_sas_base.c +++ linux-lts-raring-3.8.0/drivers/scsi/megaraid/megaraid_sas_base.c @@ -3508,11 +3508,21 @@ break; } - /* - * We expect the FW state to be READY - */ - if (megasas_transition_to_ready(instance, 0)) - goto fail_ready_state; + if (megasas_transition_to_ready(instance, 0)) { + atomic_set(&instance->fw_reset_no_pci_access, 1); + instance->instancet->adp_reset + (instance, instance->reg_set); + atomic_set(&instance->fw_reset_no_pci_access, 0); + dev_info(&instance->pdev->dev, + "megasas: FW restarted successfully from %s!\n", + __func__); + + /*waitting for about 30 second before retry*/ + ssleep(30); + + if (megasas_transition_to_ready(instance, 0)) + goto fail_ready_state; + } /* Check if MSI-X is supported while in ready state */ msix_enable = (instance->instancet->read_fw_status_reg(reg_set) & @@ -4852,10 +4862,12 @@ sense, sense_handle); } - for (i = 0; i < ioc->sge_count && kbuff_arr[i]; i++) { - dma_free_coherent(&instance->pdev->dev, - kern_sge32[i].length, - kbuff_arr[i], kern_sge32[i].phys_addr); + for (i = 0; i < ioc->sge_count; i++) { + if (kbuff_arr[i]) + dma_free_coherent(&instance->pdev->dev, + kern_sge32[i].length, + kbuff_arr[i], + kern_sge32[i].phys_addr); } megasas_return_cmd(instance, cmd); --- linux-lts-raring-3.8.0.orig/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ linux-lts-raring-3.8.0/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -1274,6 +1274,7 @@ struct MPT3SAS_DEVICE *sas_device_priv_data; struct scsi_target *starget; struct _raid_device *raid_device; + struct _sas_device *sas_device; unsigned long flags; sas_device_priv_data = kzalloc(sizeof(struct scsi_device), GFP_KERNEL); @@ -1302,6 +1303,19 @@ spin_unlock_irqrestore(&ioc->raid_device_lock, flags); } + if (!(sas_target_priv_data->flags & MPT_TARGET_FLAGS_VOLUME)) { + spin_lock_irqsave(&ioc->sas_device_lock, flags); + sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, + sas_target_priv_data->sas_address); + if (sas_device && (sas_device->starget == NULL)) { + sdev_printk(KERN_INFO, sdev, + "%s : sas_device->starget set to starget @ %d\n", + __func__, __LINE__); + sas_device->starget = starget; + } + spin_unlock_irqrestore(&ioc->sas_device_lock, flags); + } + return 0; } @@ -6395,7 +6409,7 @@ handle))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) break; handle = le16_to_cpu(sas_device_pg0.DevHandle); device_info = le32_to_cpu(sas_device_pg0.DeviceInfo); @@ -6497,7 +6511,7 @@ &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) break; handle = le16_to_cpu(volume_pg1.DevHandle); @@ -6521,7 +6535,7 @@ phys_disk_num))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) break; phys_disk_num = pd_pg0.PhysDiskNum; handle = le16_to_cpu(pd_pg0.DevHandle); @@ -6600,7 +6614,7 @@ ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) break; handle = le16_to_cpu(expander_pg0.DevHandle); @@ -6745,8 +6759,6 @@ MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL, handle))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) - break; if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { pr_info(MPT3SAS_FMT "\tbreak from expander scan: " \ "ioc_status(0x%04x), loginfo(0x%08x)\n", @@ -6790,8 +6802,6 @@ phys_disk_num))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) - break; if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { pr_info(MPT3SAS_FMT "\tbreak from phys disk scan: "\ "ioc_status(0x%04x), loginfo(0x%08x)\n", @@ -6857,8 +6867,6 @@ &volume_pg1, MPI2_RAID_VOLUME_PGAD_FORM_GET_NEXT_HANDLE, handle))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) - break; if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { pr_info(MPT3SAS_FMT "\tbreak from volume scan: " \ "ioc_status(0x%04x), loginfo(0x%08x)\n", @@ -6917,8 +6925,6 @@ handle))) { ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & MPI2_IOCSTATUS_MASK; - if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) - break; if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { pr_info(MPT3SAS_FMT "\tbreak from end device scan:"\ " ioc_status(0x%04x), loginfo(0x%08x)\n", --- linux-lts-raring-3.8.0.orig/drivers/scsi/mpt2sas/mpt2sas_base.h +++ linux-lts-raring-3.8.0/drivers/scsi/mpt2sas/mpt2sas_base.h @@ -1048,6 +1048,9 @@ void mpt2sas_halt_firmware(struct MPT2SAS_ADAPTER *ioc); +void mpt2sas_base_update_missing_delay(struct MPT2SAS_ADAPTER *ioc, + u16 device_missing_delay, u8 io_missing_delay); + int mpt2sas_port_enable(struct MPT2SAS_ADAPTER *ioc); /* scsih shared API */ --- linux-lts-raring-3.8.0.orig/drivers/scsi/mpt2sas/mpt2sas_base.c +++ linux-lts-raring-3.8.0/drivers/scsi/mpt2sas/mpt2sas_base.c @@ -80,10 +80,6 @@ module_param(msix_disable, int, 0); MODULE_PARM_DESC(msix_disable, " disable msix routed interrupts (default=0)"); -static int missing_delay[2] = {-1, -1}; -module_param_array(missing_delay, int, NULL, 0); -MODULE_PARM_DESC(missing_delay, " device missing delay , io missing delay"); - static int mpt2sas_fwfault_debug; MODULE_PARM_DESC(mpt2sas_fwfault_debug, " enable detection of firmware fault " "and halt firmware - (default=0)"); @@ -2175,7 +2171,7 @@ } /** - * _base_update_missing_delay - change the missing delay timers + * mpt2sas_base_update_missing_delay - change the missing delay timers * @ioc: per adapter object * @device_missing_delay: amount of time till device is reported missing * @io_missing_delay: interval IO is returned when there is a missing device @@ -2186,8 +2182,8 @@ * delay, as well as the io missing delay. This should be called at driver * load time. */ -static void -_base_update_missing_delay(struct MPT2SAS_ADAPTER *ioc, +void +mpt2sas_base_update_missing_delay(struct MPT2SAS_ADAPTER *ioc, u16 device_missing_delay, u8 io_missing_delay) { u16 dmd, dmd_new, dmd_orignal; @@ -4383,10 +4379,6 @@ if (r) goto out_free_resources; - if (missing_delay[0] != -1 && missing_delay[1] != -1) - _base_update_missing_delay(ioc, missing_delay[0], - missing_delay[1]); - return 0; out_free_resources: --- linux-lts-raring-3.8.0.orig/drivers/scsi/mpt2sas/mpt2sas_scsih.c +++ linux-lts-raring-3.8.0/drivers/scsi/mpt2sas/mpt2sas_scsih.c @@ -101,6 +101,10 @@ module_param(max_sectors, ushort, 0); MODULE_PARM_DESC(max_sectors, "max sectors, range 64 to 32767 default=32767"); +static int missing_delay[2] = {-1, -1}; +module_param_array(missing_delay, int, NULL, 0); +MODULE_PARM_DESC(missing_delay, " device missing delay , io missing delay"); + /* scsi-mid layer global parmeter is max_report_luns, which is 511 */ #define MPT2SAS_MAX_LUN (16895) static int max_lun = MPT2SAS_MAX_LUN; @@ -3994,11 +3998,7 @@ else mpi_control |= MPI2_SCSIIO_CONTROL_SIMPLEQ; } else -/* MPI Revision I (UNIT = 0xA) - removed MPI2_SCSIIO_CONTROL_UNTAGGED */ -/* mpi_control |= MPI2_SCSIIO_CONTROL_UNTAGGED; - */ - mpi_control |= (0x500); - + mpi_control |= MPI2_SCSIIO_CONTROL_SIMPLEQ; } else mpi_control |= MPI2_SCSIIO_CONTROL_SIMPLEQ; /* Make sure Device is not raid volume. @@ -7093,12 +7093,15 @@ struct _sas_device *sas_device; struct _sas_node *expander_device; static struct _raid_device *raid_device; + u8 retry_count; unsigned long flags; printk(MPT2SAS_INFO_FMT "scan devices: start\n", ioc->name); _scsih_sas_host_refresh(ioc); + printk(MPT2SAS_INFO_FMT "\tscan devices: expanders start\n", + ioc->name); /* expanders */ handle = 0xFFFF; while (!(mpt2sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, @@ -7107,6 +7110,13 @@ MPI2_IOCSTATUS_MASK; if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) break; + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { + printk(MPT2SAS_INFO_FMT "\tbreak from expander scan: " + "ioc_status(0x%04x), loginfo(0x%08x)\n", + ioc->name, ioc_status, + le32_to_cpu(mpi_reply.IOCLogInfo)); + break; + } handle = le16_to_cpu(expander_pg0.DevHandle); spin_lock_irqsave(&ioc->sas_node_lock, flags); expander_device = mpt2sas_scsih_expander_find_by_sas_address( @@ -7115,13 +7125,26 @@ if (expander_device) _scsih_refresh_expander_links(ioc, expander_device, handle); - else + else { + printk(MPT2SAS_INFO_FMT "\tBEFORE adding expander: " + "handle (0x%04x), sas_addr(0x%016llx)\n", + ioc->name, handle, (unsigned long long) + le64_to_cpu(expander_pg0.SASAddress)); _scsih_expander_add(ioc, handle); + printk(MPT2SAS_INFO_FMT "\tAFTER adding expander: " + "handle (0x%04x), sas_addr(0x%016llx)\n", + ioc->name, handle, (unsigned long long) + le64_to_cpu(expander_pg0.SASAddress)); + } } + printk(MPT2SAS_INFO_FMT "\tscan devices: expanders complete\n", + ioc->name); + if (!ioc->ir_firmware) goto skip_to_sas; + printk(MPT2SAS_INFO_FMT "\tscan devices phys disk start\n", ioc->name); /* phys disk */ phys_disk_num = 0xFF; while (!(mpt2sas_config_get_phys_disk_pg0(ioc, &mpi_reply, @@ -7131,6 +7154,13 @@ MPI2_IOCSTATUS_MASK; if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) break; + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { + printk(MPT2SAS_INFO_FMT "\tbreak from phys disk scan:" + "ioc_status(0x%04x), loginfo(0x%08x)\n", + ioc->name, ioc_status, + le32_to_cpu(mpi_reply.IOCLogInfo)); + break; + } phys_disk_num = pd_pg0.PhysDiskNum; handle = le16_to_cpu(pd_pg0.DevHandle); spin_lock_irqsave(&ioc->sas_device_lock, flags); @@ -7142,17 +7172,46 @@ &sas_device_pg0, MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, handle) != 0) continue; + ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & + MPI2_IOCSTATUS_MASK; + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { + printk(MPT2SAS_INFO_FMT "\tbreak from phys disk scan " + "ioc_status(0x%04x), loginfo(0x%08x)\n", + ioc->name, ioc_status, + le32_to_cpu(mpi_reply.IOCLogInfo)); + break; + } parent_handle = le16_to_cpu(sas_device_pg0.ParentDevHandle); if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) { + printk(MPT2SAS_INFO_FMT "\tBEFORE adding phys disk: " + " handle (0x%04x), sas_addr(0x%016llx)\n", + ioc->name, handle, (unsigned long long) + le64_to_cpu(sas_device_pg0.SASAddress)); mpt2sas_transport_update_links(ioc, sas_address, handle, sas_device_pg0.PhyNum, MPI2_SAS_NEG_LINK_RATE_1_5); set_bit(handle, ioc->pd_handles); - _scsih_add_device(ioc, handle, 0, 1); + retry_count = 0; + /* This will retry adding the end device. + * _scsih_add_device() will decide on retries and + * return "1" when it should be retried + */ + while (_scsih_add_device(ioc, handle, retry_count++, + 1)) { + ssleep(1); + } + printk(MPT2SAS_INFO_FMT "\tAFTER adding phys disk: " + " handle (0x%04x), sas_addr(0x%016llx)\n", + ioc->name, handle, (unsigned long long) + le64_to_cpu(sas_device_pg0.SASAddress)); } } + printk(MPT2SAS_INFO_FMT "\tscan devices: phys disk complete\n", + ioc->name); + + printk(MPT2SAS_INFO_FMT "\tscan devices: volumes start\n", ioc->name); /* volumes */ handle = 0xFFFF; while (!(mpt2sas_config_get_raid_volume_pg1(ioc, &mpi_reply, @@ -7161,6 +7220,13 @@ MPI2_IOCSTATUS_MASK; if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) break; + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { + printk(MPT2SAS_INFO_FMT "\tbreak from volume scan: " + "ioc_status(0x%04x), loginfo(0x%08x)\n", + ioc->name, ioc_status, + le32_to_cpu(mpi_reply.IOCLogInfo)); + break; + } handle = le16_to_cpu(volume_pg1.DevHandle); spin_lock_irqsave(&ioc->raid_device_lock, flags); raid_device = _scsih_raid_device_find_by_wwid(ioc, @@ -7172,18 +7238,38 @@ &volume_pg0, MPI2_RAID_VOLUME_PGAD_FORM_HANDLE, handle, sizeof(Mpi2RaidVolPage0_t))) continue; + ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & + MPI2_IOCSTATUS_MASK; + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { + printk(MPT2SAS_INFO_FMT "\tbreak from volume scan: " + "ioc_status(0x%04x), loginfo(0x%08x)\n", + ioc->name, ioc_status, + le32_to_cpu(mpi_reply.IOCLogInfo)); + break; + } if (volume_pg0.VolumeState == MPI2_RAID_VOL_STATE_OPTIMAL || volume_pg0.VolumeState == MPI2_RAID_VOL_STATE_ONLINE || volume_pg0.VolumeState == MPI2_RAID_VOL_STATE_DEGRADED) { memset(&element, 0, sizeof(Mpi2EventIrConfigElement_t)); element.ReasonCode = MPI2_EVENT_IR_CHANGE_RC_ADDED; element.VolDevHandle = volume_pg1.DevHandle; + printk(MPT2SAS_INFO_FMT "\tBEFORE adding volume: " + " handle (0x%04x)\n", ioc->name, + volume_pg1.DevHandle); _scsih_sas_volume_add(ioc, &element); + printk(MPT2SAS_INFO_FMT "\tAFTER adding volume: " + " handle (0x%04x)\n", ioc->name, + volume_pg1.DevHandle); } } + printk(MPT2SAS_INFO_FMT "\tscan devices: volumes complete\n", + ioc->name); + skip_to_sas: + printk(MPT2SAS_INFO_FMT "\tscan devices: end devices start\n", + ioc->name); /* sas devices */ handle = 0xFFFF; while (!(mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, @@ -7193,6 +7279,13 @@ MPI2_IOCSTATUS_MASK; if (ioc_status == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) break; + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { + printk(MPT2SAS_INFO_FMT "\tbreak from end device scan:" + " ioc_status(0x%04x), loginfo(0x%08x)\n", + ioc->name, ioc_status, + le32_to_cpu(mpi_reply.IOCLogInfo)); + break; + } handle = le16_to_cpu(sas_device_pg0.DevHandle); if (!(_scsih_is_end_device( le32_to_cpu(sas_device_pg0.DeviceInfo)))) @@ -7205,12 +7298,31 @@ continue; parent_handle = le16_to_cpu(sas_device_pg0.ParentDevHandle); if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) { + printk(MPT2SAS_INFO_FMT "\tBEFORE adding end device: " + "handle (0x%04x), sas_addr(0x%016llx)\n", + ioc->name, handle, (unsigned long long) + le64_to_cpu(sas_device_pg0.SASAddress)); mpt2sas_transport_update_links(ioc, sas_address, handle, sas_device_pg0.PhyNum, MPI2_SAS_NEG_LINK_RATE_1_5); - _scsih_add_device(ioc, handle, 0, 0); + retry_count = 0; + /* This will retry adding the end device. + * _scsih_add_device() will decide on retries and + * return "1" when it should be retried + */ + while (_scsih_add_device(ioc, handle, retry_count++, + 0)) { + ssleep(1); + } + printk(MPT2SAS_INFO_FMT "\tAFTER adding end device: " + "handle (0x%04x), sas_addr(0x%016llx)\n", + ioc->name, handle, (unsigned long long) + le64_to_cpu(sas_device_pg0.SASAddress)); } } + printk(MPT2SAS_INFO_FMT "\tscan devices: end devices complete\n", + ioc->name); + printk(MPT2SAS_INFO_FMT "scan devices: complete\n", ioc->name); } @@ -7303,7 +7415,9 @@ case MPT2SAS_PORT_ENABLE_COMPLETE: ioc->start_scan = 0; - + if (missing_delay[0] != -1 && missing_delay[1] != -1) + mpt2sas_base_update_missing_delay(ioc, missing_delay[0], + missing_delay[1]); dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "port enable: complete " "from worker thread\n", ioc->name)); @@ -8070,8 +8184,8 @@ if (max_sectors != 0xFFFF) { if (max_sectors < 64) { shost->max_sectors = 64; - printk(MPT2SAS_WARN_FMT "Invalid value %d passed "\ - "for max_sectors, range is 64 to 32767. Assigning "\ + printk(MPT2SAS_WARN_FMT "Invalid value %d passed " + "for max_sectors, range is 64 to 32767. Assigning " "value of 64.\n", ioc->name, max_sectors); } else if (max_sectors > 32767) { shost->max_sectors = 32767; --- linux-lts-raring-3.8.0.orig/drivers/scsi/libsas/sas_expander.c +++ linux-lts-raring-3.8.0/drivers/scsi/libsas/sas_expander.c @@ -235,6 +235,17 @@ linkrate = phy->linkrate; memcpy(sas_addr, phy->attached_sas_addr, SAS_ADDR_SIZE); + /* Handle vacant phy - rest of dr data is not valid so skip it */ + if (phy->phy_state == PHY_VACANT) { + memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE); + phy->attached_dev_type = NO_DEVICE; + if (!test_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state)) { + phy->phy_id = phy_id; + goto skip; + } else + goto out; + } + phy->attached_dev_type = to_dev_type(dr); if (test_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state)) goto out; @@ -272,6 +283,7 @@ phy->phy->maximum_linkrate = dr->pmax_linkrate; phy->phy->negotiated_linkrate = phy->linkrate; + skip: if (new_phy) if (sas_phy_add(phy->phy)) { sas_phy_free(phy->phy); --- linux-lts-raring-3.8.0.orig/drivers/scsi/aacraid/src.c +++ linux-lts-raring-3.8.0/drivers/scsi/aacraid/src.c @@ -93,6 +93,9 @@ int send_it = 0; extern int aac_sync_mode; + src_writel(dev, MUnit.ODR_C, bellbits); + src_readl(dev, MUnit.ODR_C); + if (!aac_sync_mode) { src_writel(dev, MUnit.ODR_C, bellbits); src_readl(dev, MUnit.ODR_C); --- linux-lts-raring-3.8.0.orig/drivers/scsi/isci/task.c +++ linux-lts-raring-3.8.0/drivers/scsi/isci/task.c @@ -491,6 +491,7 @@ struct isci_tmf tmf; int ret = TMF_RESP_FUNC_FAILED; unsigned long flags; + int target_done_already = 0; /* Get the isci_request reference from the task. Note that * this check does not depend on the pending request list @@ -505,9 +506,11 @@ /* If task is already done, the request isn't valid */ if (!(task->task_state_flags & SAS_TASK_STATE_DONE) && (task->task_state_flags & SAS_TASK_AT_INITIATOR) && - old_request) + old_request) { idev = isci_get_device(task->dev->lldd_dev); - + target_done_already = test_bit(IREQ_COMPLETE_IN_TARGET, + &old_request->flags); + } spin_unlock(&task->task_state_lock); spin_unlock_irqrestore(&ihost->scic_lock, flags); @@ -561,7 +564,7 @@ if (task->task_proto == SAS_PROTOCOL_SMP || sas_protocol_ata(task->task_proto) || - test_bit(IREQ_COMPLETE_IN_TARGET, &old_request->flags) || + target_done_already || test_bit(IDEV_GONE, &idev->flags)) { spin_unlock_irqrestore(&ihost->scic_lock, flags); --- linux-lts-raring-3.8.0.orig/drivers/scsi/osd/osd_uld.c +++ linux-lts-raring-3.8.0/drivers/scsi/osd/osd_uld.c @@ -493,7 +493,7 @@ oud->class_dev.class = &osd_uld_class; oud->class_dev.parent = dev; oud->class_dev.release = __remove; - error = dev_set_name(&oud->class_dev, disk->disk_name); + error = dev_set_name(&oud->class_dev, "%s", disk->disk_name); if (error) { OSD_ERR("dev_set_name failed => %d\n", error); goto err_put_cdev; --- linux-lts-raring-3.8.0.orig/drivers/scsi/qla2xxx/qla_iocb.c +++ linux-lts-raring-3.8.0/drivers/scsi/qla2xxx/qla_iocb.c @@ -418,6 +418,8 @@ __constant_cpu_to_le16(CF_SIMPLE_TAG); break; } + } else { + cmd_pkt->control_flags = __constant_cpu_to_le16(CF_SIMPLE_TAG); } /* Load SCSI command packet. */ @@ -1316,11 +1318,11 @@ fcp_cmnd->task_attribute = TSK_ORDERED; break; default: - fcp_cmnd->task_attribute = 0; + fcp_cmnd->task_attribute = TSK_SIMPLE; break; } } else { - fcp_cmnd->task_attribute = 0; + fcp_cmnd->task_attribute = TSK_SIMPLE; } cmd_pkt->fcp_rsp_dseg_len = 0; /* Let response come in status iocb */ @@ -1536,7 +1538,12 @@ case ORDERED_QUEUE_TAG: cmd_pkt->task = TSK_ORDERED; break; + default: + cmd_pkt->task = TSK_SIMPLE; + break; } + } else { + cmd_pkt->task = TSK_SIMPLE; } /* Load SCSI command packet. */ --- linux-lts-raring-3.8.0.orig/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ linux-lts-raring-3.8.0/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -688,8 +688,12 @@ * For FCP_READ with CHECK_CONDITION status, clear cmd->bufflen * for qla_tgt_xmit_response LLD code */ + if (se_cmd->se_cmd_flags & SCF_OVERFLOW_BIT) { + se_cmd->se_cmd_flags &= ~SCF_OVERFLOW_BIT; + se_cmd->residual_count = 0; + } se_cmd->se_cmd_flags |= SCF_UNDERFLOW_BIT; - se_cmd->residual_count = se_cmd->data_length; + se_cmd->residual_count += se_cmd->data_length; cmd->bufflen = 0; } --- linux-lts-raring-3.8.0.orig/drivers/iommu/amd_iommu_types.h +++ linux-lts-raring-3.8.0/drivers/iommu/amd_iommu_types.h @@ -99,6 +99,7 @@ #define PASID_MASK 0x000fffff /* MMIO status bits */ +#define MMIO_STATUS_EVT_INT_MASK (1 << 1) #define MMIO_STATUS_COM_WAIT_INT_MASK (1 << 2) #define MMIO_STATUS_PPR_INT_MASK (1 << 6) --- linux-lts-raring-3.8.0.orig/drivers/iommu/irq_remapping.h +++ linux-lts-raring-3.8.0/drivers/iommu/irq_remapping.h @@ -32,6 +32,7 @@ struct msi_msg; extern int disable_irq_remap; +extern int irq_remap_broken; extern int disable_sourceid_checking; extern int no_x2apic_optout; @@ -88,6 +89,7 @@ #define irq_remapping_enabled 0 #define disable_irq_remap 1 +#define irq_remap_broken 0 #endif /* CONFIG_IRQ_REMAP */ --- linux-lts-raring-3.8.0.orig/drivers/iommu/intel-iommu.c +++ linux-lts-raring-3.8.0/drivers/iommu/intel-iommu.c @@ -887,56 +887,54 @@ return order; } +static void dma_pte_free_level(struct dmar_domain *domain, int level, + struct dma_pte *pte, unsigned long pfn, + unsigned long start_pfn, unsigned long last_pfn) +{ + pfn = max(start_pfn, pfn); + pte = &pte[pfn_level_offset(pfn, level)]; + + do { + unsigned long level_pfn; + struct dma_pte *level_pte; + + if (!dma_pte_present(pte) || dma_pte_superpage(pte)) + goto next; + + level_pfn = pfn & level_mask(level - 1); + level_pte = phys_to_virt(dma_pte_addr(pte)); + + if (level > 2) + dma_pte_free_level(domain, level - 1, level_pte, + level_pfn, start_pfn, last_pfn); + + /* If range covers entire pagetable, free it */ + if (!(start_pfn > level_pfn || + last_pfn < level_pfn + level_size(level))) { + dma_clear_pte(pte); + domain_flush_cache(domain, pte, sizeof(*pte)); + free_pgtable_page(level_pte); + } +next: + pfn += level_size(level); + } while (!first_pte_in_page(++pte) && pfn <= last_pfn); +} + /* free page table pages. last level pte should already be cleared */ static void dma_pte_free_pagetable(struct dmar_domain *domain, unsigned long start_pfn, unsigned long last_pfn) { int addr_width = agaw_to_width(domain->agaw) - VTD_PAGE_SHIFT; - struct dma_pte *first_pte, *pte; - int total = agaw_to_level(domain->agaw); - int level; - unsigned long tmp; - int large_page = 2; BUG_ON(addr_width < BITS_PER_LONG && start_pfn >> addr_width); BUG_ON(addr_width < BITS_PER_LONG && last_pfn >> addr_width); BUG_ON(start_pfn > last_pfn); /* We don't need lock here; nobody else touches the iova range */ - level = 2; - while (level <= total) { - tmp = align_to_level(start_pfn, level); - - /* If we can't even clear one PTE at this level, we're done */ - if (tmp + level_size(level) - 1 > last_pfn) - return; - - do { - large_page = level; - first_pte = pte = dma_pfn_level_pte(domain, tmp, level, &large_page); - if (large_page > level) - level = large_page + 1; - if (!pte) { - tmp = align_to_level(tmp + 1, level + 1); - continue; - } - do { - if (dma_pte_present(pte)) { - free_pgtable_page(phys_to_virt(dma_pte_addr(pte))); - dma_clear_pte(pte); - } - pte++; - tmp += level_size(level); - } while (!first_pte_in_page(pte) && - tmp + level_size(level) - 1 <= last_pfn); + dma_pte_free_level(domain, agaw_to_level(domain->agaw), + domain->pgd, 0, start_pfn, last_pfn); - domain_flush_cache(domain, first_pte, - (void *)pte - (void *)first_pte); - - } while (tmp && tmp + level_size(level) - 1 <= last_pfn); - level++; - } /* free pgd */ if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) { free_pgtable_page(domain->pgd); @@ -4253,13 +4251,19 @@ { /* * Mobile 4 Series Chipset neglects to set RWBF capability, - * but needs it: + * but needs it. Same seems to hold for the desktop versions. */ printk(KERN_INFO "DMAR: Forcing write-buffer flush capability\n"); rwbf_quirk = 1; } DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2a40, quirk_iommu_rwbf); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e00, quirk_iommu_rwbf); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e10, quirk_iommu_rwbf); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e20, quirk_iommu_rwbf); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e30, quirk_iommu_rwbf); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e40, quirk_iommu_rwbf); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2e90, quirk_iommu_rwbf); #define GGC 0x52 #define GGC_MEMORY_SIZE_MASK (0xf << 8) --- linux-lts-raring-3.8.0.orig/drivers/iommu/amd_iommu.c +++ linux-lts-raring-3.8.0/drivers/iommu/amd_iommu.c @@ -700,11 +700,26 @@ static void iommu_poll_events(struct amd_iommu *iommu) { - u32 head, tail; + u32 head, tail, status; unsigned long flags; + /* enable event interrupts again */ + writel(MMIO_STATUS_EVT_INT_MASK, iommu->mmio_base + MMIO_STATUS_OFFSET); + spin_lock_irqsave(&iommu->lock, flags); + /* enable event interrupts again */ + do { + /* + * Workaround for Erratum ERBT1312 + * Clearing the EVT_INT bit may race in the hardware, so read + * it again and make sure it was really cleared + */ + status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET); + writel(MMIO_STATUS_EVT_INT_MASK, + iommu->mmio_base + MMIO_STATUS_OFFSET); + } while (status & MMIO_STATUS_EVT_INT_MASK); + head = readl(iommu->mmio_base + MMIO_EVT_HEAD_OFFSET); tail = readl(iommu->mmio_base + MMIO_EVT_TAIL_OFFSET); @@ -741,16 +756,25 @@ static void iommu_poll_ppr_log(struct amd_iommu *iommu) { unsigned long flags; - u32 head, tail; + u32 head, tail, status; if (iommu->ppr_log == NULL) return; - /* enable ppr interrupts again */ - writel(MMIO_STATUS_PPR_INT_MASK, iommu->mmio_base + MMIO_STATUS_OFFSET); - spin_lock_irqsave(&iommu->lock, flags); + /* enable ppr interrupts again */ + do { + /* + * Workaround for Erratum ERBT1312 + * Clearing the PPR_INT bit may race in the hardware, so read + * it again and make sure it was really cleared + */ + status = readl(iommu->mmio_base + MMIO_STATUS_OFFSET); + writel(MMIO_STATUS_PPR_INT_MASK, + iommu->mmio_base + MMIO_STATUS_OFFSET); + } while (status & MMIO_STATUS_PPR_INT_MASK); + head = readl(iommu->mmio_base + MMIO_PPR_HEAD_OFFSET); tail = readl(iommu->mmio_base + MMIO_PPR_TAIL_OFFSET); @@ -1484,6 +1508,10 @@ /* Large PTE found which maps this address */ unmap_size = PTE_PAGE_SIZE(*pte); + + /* Only unmap from the first pte in the page */ + if ((unmap_size - 1) & bus_addr) + break; count = PAGE_SIZE_PTE_COUNT(unmap_size); for (i = 0; i < count; i++) pte[i] = 0ULL; @@ -1493,7 +1521,7 @@ unmapped += unmap_size; } - BUG_ON(!is_power_of_2(unmapped)); + BUG_ON(unmapped && !is_power_of_2(unmapped)); return unmapped; } @@ -2466,18 +2494,16 @@ /* allocate a protection domain if a device is added */ dma_domain = find_protection_domain(devid); - if (dma_domain) - goto out; - dma_domain = dma_ops_domain_alloc(); - if (!dma_domain) - goto out; - dma_domain->target_dev = devid; - - spin_lock_irqsave(&iommu_pd_list_lock, flags); - list_add_tail(&dma_domain->list, &iommu_pd_list); - spin_unlock_irqrestore(&iommu_pd_list_lock, flags); - - dev_data = get_dev_data(dev); + if (!dma_domain) { + dma_domain = dma_ops_domain_alloc(); + if (!dma_domain) + goto out; + dma_domain->target_dev = devid; + + spin_lock_irqsave(&iommu_pd_list_lock, flags); + list_add_tail(&dma_domain->list, &iommu_pd_list); + spin_unlock_irqrestore(&iommu_pd_list_lock, flags); + } dev->archdata.dma_ops = &amd_iommu_dma_ops; @@ -3950,6 +3976,9 @@ if (!table) goto out; + /* Initialize table spin-lock */ + spin_lock_init(&table->lock); + if (ioapic) /* Keep the first 32 indexes free for IOAPIC interrupts */ table->min_index = 32; --- linux-lts-raring-3.8.0.orig/drivers/iommu/irq_remapping.c +++ linux-lts-raring-3.8.0/drivers/iommu/irq_remapping.c @@ -12,6 +12,7 @@ int irq_remapping_enabled; int disable_irq_remap; +int irq_remap_broken; int disable_sourceid_checking; int no_x2apic_optout; @@ -58,6 +59,11 @@ #endif } +void set_irq_remapping_broken(void) +{ + irq_remap_broken = 1; +} + int irq_remapping_supported(void) { if (disable_irq_remap) --- linux-lts-raring-3.8.0.orig/drivers/iommu/amd_iommu_init.c +++ linux-lts-raring-3.8.0/drivers/iommu/amd_iommu_init.c @@ -1876,11 +1876,6 @@ struct amd_iommu *iommu; int ret; - init_device_table_dma(); - - for_each_iommu(iommu) - iommu_flush_all_caches(iommu); - if (iommu_pass_through) ret = amd_iommu_init_passthrough(); else @@ -1889,6 +1884,11 @@ if (ret) return ret; + init_device_table_dma(); + + for_each_iommu(iommu) + iommu_flush_all_caches(iommu); + amd_iommu_init_api(); amd_iommu_init_notifier(); --- linux-lts-raring-3.8.0.orig/drivers/iommu/intel_irq_remapping.c +++ linux-lts-raring-3.8.0/drivers/iommu/intel_irq_remapping.c @@ -509,6 +509,16 @@ if (disable_irq_remap) return 0; + if (irq_remap_broken) { + WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND, + "This system BIOS has enabled interrupt remapping\n" + "on a chipset that contains an erratum making that\n" + "feature unstable. To maintain system stability\n" + "interrupt remapping is being disabled. Please\n" + "contact your BIOS vendor for an update\n"); + disable_irq_remap = 1; + return 0; + } if (!dmar_ir_support()) return 0; --- linux-lts-raring-3.8.0.orig/drivers/media/usb/uvc/uvc_driver.c +++ linux-lts-raring-3.8.0/drivers/media/usb/uvc/uvc_driver.c @@ -2163,6 +2163,33 @@ .bInterfaceSubClass = 1, .bInterfaceProtocol = 0, .driver_info = UVC_QUIRK_PROBE_DEF }, + /* Dell Studio Hybrid 140g (OmniVision webcam) */ + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE + | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x05a9, + .idProduct = 0x264a, + .bInterfaceClass = USB_CLASS_VIDEO, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0, + .driver_info = UVC_QUIRK_PROBE_DEF }, + /* Dell SP2008WFP Monitor */ + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE + | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x05a9, + .idProduct = 0x2641, + .bInterfaceClass = USB_CLASS_VIDEO, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0, + .driver_info = UVC_QUIRK_PROBE_DEF }, + /* Alienware X51*/ + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE + | USB_DEVICE_ID_MATCH_INT_INFO, + .idVendor = 0x05a9, + .idProduct = 0x2643, + .bInterfaceClass = USB_CLASS_VIDEO, + .bInterfaceSubClass = 1, + .bInterfaceProtocol = 0, + .driver_info = UVC_QUIRK_PROBE_DEF }, /* Apple Built-In iSight */ { .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, --- linux-lts-raring-3.8.0.orig/drivers/media/usb/hdpvr/hdpvr-core.c +++ linux-lts-raring-3.8.0/drivers/media/usb/hdpvr/hdpvr-core.c @@ -309,6 +309,11 @@ dev->workqueue = 0; + /* init video transfer queues first of all */ + /* to prevent oops in hdpvr_delete() on error paths */ + INIT_LIST_HEAD(&dev->free_buff_list); + INIT_LIST_HEAD(&dev->rec_buff_list); + /* register v4l2_device early so it can be used for printks */ if (v4l2_device_register(&interface->dev, &dev->v4l2_dev)) { dev_err(&interface->dev, "v4l2_device_register failed\n"); @@ -331,10 +336,6 @@ if (!dev->workqueue) goto error; - /* init video transfer queues */ - INIT_LIST_HEAD(&dev->free_buff_list); - INIT_LIST_HEAD(&dev->rec_buff_list); - dev->options = hdpvr_default_options; if (default_video_input < HDPVR_VIDEO_INPUTS) @@ -388,7 +389,7 @@ if (hdpvr_register_videodev(dev, &interface->dev, video_nr[atomic_inc_return(&dev_nr)])) { v4l2_err(&dev->v4l2_dev, "registering videodev failed\n"); - goto error; + goto reg_fail; } #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE) --- linux-lts-raring-3.8.0.orig/drivers/media/v4l2-core/v4l2-device.c +++ linux-lts-raring-3.8.0/drivers/media/v4l2-core/v4l2-device.c @@ -159,31 +159,21 @@ sd->v4l2_dev = v4l2_dev; if (sd->internal_ops && sd->internal_ops->registered) { err = sd->internal_ops->registered(sd); - if (err) { - module_put(sd->owner); - return err; - } + if (err) + goto error_module; } /* This just returns 0 if either of the two args is NULL */ err = v4l2_ctrl_add_handler(v4l2_dev->ctrl_handler, sd->ctrl_handler, NULL); - if (err) { - if (sd->internal_ops && sd->internal_ops->unregistered) - sd->internal_ops->unregistered(sd); - module_put(sd->owner); - return err; - } + if (err) + goto error_unregister; #if defined(CONFIG_MEDIA_CONTROLLER) /* Register the entity. */ if (v4l2_dev->mdev) { err = media_device_register_entity(v4l2_dev->mdev, entity); - if (err < 0) { - if (sd->internal_ops && sd->internal_ops->unregistered) - sd->internal_ops->unregistered(sd); - module_put(sd->owner); - return err; - } + if (err < 0) + goto error_unregister; } #endif @@ -192,6 +182,14 @@ spin_unlock(&v4l2_dev->lock); return 0; + +error_unregister: + if (sd->internal_ops && sd->internal_ops->unregistered) + sd->internal_ops->unregistered(sd); +error_module: + module_put(sd->owner); + sd->v4l2_dev = NULL; + return err; } EXPORT_SYMBOL_GPL(v4l2_device_register_subdev); --- linux-lts-raring-3.8.0.orig/drivers/media/rc/Kconfig +++ linux-lts-raring-3.8.0/drivers/media/rc/Kconfig @@ -291,7 +291,7 @@ config IR_RX51 tristate "Nokia N900 IR transmitter diode" - depends on OMAP_DM_TIMER && LIRC + depends on OMAP_DM_TIMER && LIRC && !ARCH_MULTIPLATFORM ---help--- Say Y or M here if you want to enable support for the IR transmitter diode built in the Nokia N900 (RX51) device. --- linux-lts-raring-3.8.0.orig/drivers/media/rc/rc-main.c +++ linux-lts-raring-3.8.0/drivers/media/rc/rc-main.c @@ -789,8 +789,10 @@ } else if (dev->raw) { enabled = dev->raw->enabled_protocols; allowed = ir_raw_get_allowed_protocols(); - } else + } else { + mutex_unlock(&dev->lock); return -ENODEV; + } IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n", (long long)allowed, --- linux-lts-raring-3.8.0.orig/drivers/media/pci/saa7134/saa7134-alsa.c +++ linux-lts-raring-3.8.0/drivers/media/pci/saa7134/saa7134-alsa.c @@ -172,7 +172,9 @@ dprintk("irq: overrun [full=%d/%d] - Blocks in %d\n",dev->dmasound.read_count, dev->dmasound.bufsize, dev->dmasound.blocks); spin_unlock(&dev->slock); + snd_pcm_stream_lock(dev->dmasound.substream); snd_pcm_stop(dev->dmasound.substream,SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock(dev->dmasound.substream); return; } --- linux-lts-raring-3.8.0.orig/drivers/media/pci/ivtv/ivtv-alsa-pcm.h +++ linux-lts-raring-3.8.0/drivers/media/pci/ivtv/ivtv-alsa-pcm.h @@ -20,4 +20,4 @@ * 02111-1307 USA */ -int __init snd_ivtv_pcm_create(struct snd_ivtv_card *itvsc); +int snd_ivtv_pcm_create(struct snd_ivtv_card *itvsc); --- linux-lts-raring-3.8.0.orig/drivers/media/pci/ivtv/ivtv-alsa-main.c +++ linux-lts-raring-3.8.0/drivers/media/pci/ivtv/ivtv-alsa-main.c @@ -205,7 +205,7 @@ return ret; } -static int __init ivtv_alsa_load(struct ivtv *itv) +static int ivtv_alsa_load(struct ivtv *itv) { struct v4l2_device *v4l2_dev = &itv->v4l2_dev; struct ivtv_stream *s; --- linux-lts-raring-3.8.0.orig/drivers/media/pci/bt8xx/bttv-driver.c +++ linux-lts-raring-3.8.0/drivers/media/pci/bt8xx/bttv-driver.c @@ -250,17 +250,19 @@ vdelay start of active video in 2 * field lines relative to trailing edge of /VRESET pulse (VDELAY register). sheight height of active video in 2 * field lines. + extraheight Added to sheight for cropcap.bounds.height only videostart0 ITU-R frame line number of the line corresponding to vdelay in the first field. */ #define CROPCAP(minhdelayx1, hdelayx1, swidth, totalwidth, sqwidth, \ - vdelay, sheight, videostart0) \ + vdelay, sheight, extraheight, videostart0) \ .cropcap.bounds.left = minhdelayx1, \ /* * 2 because vertically we count field lines times two, */ \ /* e.g. 23 * 2 to 23 * 2 + 576 in PAL-BGHI defrect. */ \ .cropcap.bounds.top = (videostart0) * 2 - (vdelay) + MIN_VDELAY, \ /* 4 is a safety margin at the end of the line. */ \ .cropcap.bounds.width = (totalwidth) - (minhdelayx1) - 4, \ - .cropcap.bounds.height = (sheight) + (vdelay) - MIN_VDELAY, \ + .cropcap.bounds.height = (sheight) + (extraheight) + (vdelay) - \ + MIN_VDELAY, \ .cropcap.defrect.left = hdelayx1, \ .cropcap.defrect.top = (videostart0) * 2, \ .cropcap.defrect.width = swidth, \ @@ -301,9 +303,10 @@ /* totalwidth */ 1135, /* sqwidth */ 944, /* vdelay */ 0x20, - /* bt878 (and bt848?) can capture another - line below active video. */ - /* sheight */ (576 + 2) + 0x20 - 2, + /* sheight */ 576, + /* bt878 (and bt848?) can capture another + line below active video. */ + /* extraheight */ 2, /* videostart0 */ 23) },{ .v4l2_id = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR, @@ -330,6 +333,7 @@ /* sqwidth */ 780, /* vdelay */ 0x1a, /* sheight */ 480, + /* extraheight */ 0, /* videostart0 */ 23) },{ .v4l2_id = V4L2_STD_SECAM, @@ -355,6 +359,7 @@ /* sqwidth */ 944, /* vdelay */ 0x20, /* sheight */ 576, + /* extraheight */ 0, /* videostart0 */ 23) },{ .v4l2_id = V4L2_STD_PAL_Nc, @@ -380,6 +385,7 @@ /* sqwidth */ 780, /* vdelay */ 0x1a, /* sheight */ 576, + /* extraheight */ 0, /* videostart0 */ 23) },{ .v4l2_id = V4L2_STD_PAL_M, @@ -405,6 +411,7 @@ /* sqwidth */ 780, /* vdelay */ 0x1a, /* sheight */ 480, + /* extraheight */ 0, /* videostart0 */ 23) },{ .v4l2_id = V4L2_STD_PAL_N, @@ -430,6 +437,7 @@ /* sqwidth */ 944, /* vdelay */ 0x20, /* sheight */ 576, + /* extraheight */ 0, /* videostart0 */ 23) },{ .v4l2_id = V4L2_STD_NTSC_M_JP, @@ -455,6 +463,7 @@ /* sqwidth */ 780, /* vdelay */ 0x16, /* sheight */ 480, + /* extraheight */ 0, /* videostart0 */ 23) },{ /* that one hopefully works with the strange timing @@ -484,6 +493,7 @@ /* sqwidth */ 944, /* vdelay */ 0x1a, /* sheight */ 480, + /* extraheight */ 0, /* videostart0 */ 23) } }; --- linux-lts-raring-3.8.0.orig/drivers/media/pci/cx18/cx18-alsa-pcm.h +++ linux-lts-raring-3.8.0/drivers/media/pci/cx18/cx18-alsa-pcm.h @@ -20,7 +20,7 @@ * 02111-1307 USA */ -int __init snd_cx18_pcm_create(struct snd_cx18_card *cxsc); +int snd_cx18_pcm_create(struct snd_cx18_card *cxsc); /* Used by cx18-mailbox to announce the PCM data to the module */ void cx18_alsa_announce_pcm_data(struct snd_cx18_card *card, u8 *pcm_data, --- linux-lts-raring-3.8.0.orig/drivers/media/pci/cx18/cx18-alsa-main.c +++ linux-lts-raring-3.8.0/drivers/media/pci/cx18/cx18-alsa-main.c @@ -197,7 +197,7 @@ return ret; } -static int __init cx18_alsa_load(struct cx18 *cx) +static int cx18_alsa_load(struct cx18 *cx) { struct v4l2_device *v4l2_dev = &cx->v4l2_dev; struct cx18_stream *s; --- linux-lts-raring-3.8.0.orig/drivers/media/dvb-core/dmxdev.c +++ linux-lts-raring-3.8.0/drivers/media/dvb-core/dmxdev.c @@ -377,10 +377,8 @@ ret = dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2, buffer2_len); } - if (ret < 0) { - dvb_ringbuffer_flush(&dmxdevfilter->buffer); + if (ret < 0) dmxdevfilter->buffer.error = ret; - } if (dmxdevfilter->params.sec.flags & DMX_ONESHOT) dmxdevfilter->state = DMXDEV_STATE_DONE; spin_unlock(&dmxdevfilter->dev->lock); @@ -416,10 +414,8 @@ ret = dvb_dmxdev_buffer_write(buffer, buffer1, buffer1_len); if (ret == buffer1_len) ret = dvb_dmxdev_buffer_write(buffer, buffer2, buffer2_len); - if (ret < 0) { - dvb_ringbuffer_flush(buffer); + if (ret < 0) buffer->error = ret; - } spin_unlock(&dmxdevfilter->dev->lock); wake_up(&buffer->queue); return 0; --- linux-lts-raring-3.8.0.orig/drivers/media/platform/coda.c +++ linux-lts-raring-3.8.0/drivers/media/platform/coda.c @@ -1884,7 +1884,7 @@ #ifdef CONFIG_OF static const struct of_device_id coda_dt_ids[] = { - { .compatible = "fsl,imx27-vpu", .data = &coda_platform_ids[CODA_IMX27] }, + { .compatible = "fsl,imx27-vpu", .data = &coda_devdata[CODA_IMX27] }, { .compatible = "fsl,imx53-vpu", .data = &coda_devdata[CODA_IMX53] }, { /* sentinel */ } }; --- linux-lts-raring-3.8.0.orig/drivers/media/platform/exynos-gsc/gsc-core.h +++ linux-lts-raring-3.8.0/drivers/media/platform/exynos-gsc/gsc-core.h @@ -343,6 +343,7 @@ unsigned long state; struct vb2_alloc_ctx *alloc_ctx; struct video_device vdev; + struct v4l2_device v4l2_dev; }; /** --- linux-lts-raring-3.8.0.orig/drivers/media/platform/exynos-gsc/gsc-m2m.c +++ linux-lts-raring-3.8.0/drivers/media/platform/exynos-gsc/gsc-m2m.c @@ -732,6 +732,7 @@ gsc->vdev.release = video_device_release_empty; gsc->vdev.lock = &gsc->lock; gsc->vdev.vfl_dir = VFL_DIR_M2M; + gsc->vdev.v4l2_dev = &gsc->v4l2_dev; snprintf(gsc->vdev.name, sizeof(gsc->vdev.name), "%s.%d:m2m", GSC_MODULE_NAME, gsc->id); --- linux-lts-raring-3.8.0.orig/drivers/media/platform/exynos-gsc/gsc-core.c +++ linux-lts-raring-3.8.0/drivers/media/platform/exynos-gsc/gsc-core.c @@ -1121,10 +1121,14 @@ goto err_clk; } - ret = gsc_register_m2m_device(gsc); + ret = v4l2_device_register(dev, &gsc->v4l2_dev); if (ret) goto err_clk; + ret = gsc_register_m2m_device(gsc); + if (ret) + goto err_v4l2; + platform_set_drvdata(pdev, gsc); pm_runtime_enable(dev); ret = pm_runtime_get_sync(&pdev->dev); @@ -1146,6 +1150,8 @@ pm_runtime_put(dev); err_m2m: gsc_unregister_m2m_device(gsc); +err_v4l2: + v4l2_device_unregister(&gsc->v4l2_dev); err_clk: gsc_clk_put(gsc); return ret; @@ -1156,6 +1162,7 @@ struct gsc_dev *gsc = platform_get_drvdata(pdev); gsc_unregister_m2m_device(gsc); + v4l2_device_unregister(&gsc->v4l2_dev); vb2_dma_contig_cleanup_ctx(gsc->alloc_ctx); pm_runtime_disable(&pdev->dev); --- linux-lts-raring-3.8.0.orig/drivers/media/platform/davinci/vpss.c +++ linux-lts-raring-3.8.0/drivers/media/platform/davinci/vpss.c @@ -25,7 +25,6 @@ #include #include #include -#include #include MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/drivers/media/platform/s5p-g2d/g2d.c +++ linux-lts-raring-3.8.0/drivers/media/platform/s5p-g2d/g2d.c @@ -772,6 +772,7 @@ } *vfd = g2d_videodev; vfd->lock = &dev->mutex; + vfd->v4l2_dev = &dev->v4l2_dev; ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0); if (ret) { v4l2_err(&dev->v4l2_dev, "Failed to register video device\n"); --- linux-lts-raring-3.8.0.orig/drivers/media/platform/omap/omap_vout.c +++ linux-lts-raring-3.8.0/drivers/media/platform/omap/omap_vout.c @@ -205,19 +205,21 @@ struct vm_area_struct *vma; struct mm_struct *mm = current->mm; - vma = find_vma(mm, virtp); /* For kernel direct-mapped memory, take the easy way */ - if (virtp >= PAGE_OFFSET) { - physp = virt_to_phys((void *) virtp); - } else if (vma && (vma->vm_flags & VM_IO) && vma->vm_pgoff) { + if (virtp >= PAGE_OFFSET) + return virt_to_phys((void *) virtp); + + down_read(¤t->mm->mmap_sem); + vma = find_vma(mm, virtp); + if (vma && (vma->vm_flags & VM_IO) && vma->vm_pgoff) { /* this will catch, kernel-allocated, mmaped-to-usermode addresses */ physp = (vma->vm_pgoff << PAGE_SHIFT) + (virtp - vma->vm_start); + up_read(¤t->mm->mmap_sem); } else { /* otherwise, use get_user_pages() for general userland pages */ int res, nr_pages = 1; struct page *pages; - down_read(¤t->mm->mmap_sem); res = get_user_pages(current, current->mm, virtp, nr_pages, 1, 0, &pages, NULL); --- linux-lts-raring-3.8.0.orig/drivers/thermal/thermal_sys.c +++ linux-lts-raring-3.8.0/drivers/thermal/thermal_sys.c @@ -1807,6 +1807,7 @@ idr_destroy(&thermal_cdev_idr); mutex_destroy(&thermal_idr_lock); mutex_destroy(&thermal_list_lock); + return result; } result = genetlink_init(); return result; --- linux-lts-raring-3.8.0.orig/drivers/clocksource/dw_apb_timer_of.c +++ linux-lts-raring-3.8.0/drivers/clocksource/dw_apb_timer_of.c @@ -44,7 +44,7 @@ u32 irq, rate; irq = irq_of_parse_and_map(event_timer, 0); - if (irq == NO_IRQ) + if (irq == 0) panic("No IRQ for clock event timer"); timer_get_base_and_rate(event_timer, &iobase, &rate); --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/Kconfig +++ linux-lts-raring-3.8.0/drivers/i2c/busses/Kconfig @@ -106,6 +106,7 @@ Panther Point (PCH) Lynx Point (PCH) Lynx Point-LP (PCH) + Avoton (SOC) This driver can also be built as a module. If so, the module will be called i2c-i801. @@ -121,6 +122,16 @@ This driver can also be built as a module. If so, the module will be called i2c-isch. +config I2C_ISMT + tristate "Intel iSMT SMBus Controller" + depends on PCI && X86 + help + If you say yes to this option, support will be included for the Intel + iSMT SMBus host controller interface. + + This driver can also be built as a module. If so, the module will be + called i2c-ismt. + config I2C_PIIX4 tristate "Intel PIIX4 and compatible (ATI/AMD/Serverworks/Broadcom/SMSC)" depends on PCI @@ -138,6 +149,7 @@ ATI SB700/SP5100 ATI SB800 AMD Hudson-2 + AMD CZ Serverworks OSB4 Serverworks CSB5 Serverworks CSB6 --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-ismt.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-ismt.c @@ -0,0 +1,965 @@ +/* + * This file is provided under a dual BSD/GPLv2 license. When using or + * redistributing this file, you may do so under either license. + * + * Copyright(c) 2012 Intel Corporation. All rights reserved. + * + * GPL LICENSE SUMMARY + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * 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. + * The full GNU General Public License is included in this distribution + * in the file called LICENSE.GPL. + * + * BSD LICENSE + * + * 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. + * * Neither the name of Intel Corporation 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 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. + */ + +/* + * Supports the SMBus Message Transport (SMT) in the Intel Atom Processor + * S12xx Product Family. + * + * Features supported by this driver: + * Hardware PEC yes + * Block buffer yes + * Block process call transaction no + * Slave mode no + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* PCI Address Constants */ +#define SMBBAR 0 + +/* PCI DIDs for the Intel SMBus Message Transport (SMT) Devices */ +#define PCI_DEVICE_ID_INTEL_S1200_SMT0 0x0c59 +#define PCI_DEVICE_ID_INTEL_S1200_SMT1 0x0c5a +#define PCI_DEVICE_ID_INTEL_AVOTON_SMT 0x1f15 + +#define ISMT_DESC_ENTRIES 32 /* number of descriptor entries */ +#define ISMT_MAX_RETRIES 3 /* number of SMBus retries to attempt */ + +/* Hardware Descriptor Constants - Control Field */ +#define ISMT_DESC_CWRL 0x01 /* Command/Write Length */ +#define ISMT_DESC_BLK 0X04 /* Perform Block Transaction */ +#define ISMT_DESC_FAIR 0x08 /* Set fairness flag upon successful arbit. */ +#define ISMT_DESC_PEC 0x10 /* Packet Error Code */ +#define ISMT_DESC_I2C 0x20 /* I2C Enable */ +#define ISMT_DESC_INT 0x40 /* Interrupt */ +#define ISMT_DESC_SOE 0x80 /* Stop On Error */ + +/* Hardware Descriptor Constants - Status Field */ +#define ISMT_DESC_SCS 0x01 /* Success */ +#define ISMT_DESC_DLTO 0x04 /* Data Low Time Out */ +#define ISMT_DESC_NAK 0x08 /* NAK Received */ +#define ISMT_DESC_CRC 0x10 /* CRC Error */ +#define ISMT_DESC_CLTO 0x20 /* Clock Low Time Out */ +#define ISMT_DESC_COL 0x40 /* Collisions */ +#define ISMT_DESC_LPR 0x80 /* Large Packet Received */ + +/* Macros */ +#define ISMT_DESC_ADDR_RW(addr, rw) (((addr) << 1) | (rw)) + +/* iSMT General Register address offsets (SMBBAR + ) */ +#define ISMT_GR_GCTRL 0x000 /* General Control */ +#define ISMT_GR_SMTICL 0x008 /* SMT Interrupt Cause Location */ +#define ISMT_GR_ERRINTMSK 0x010 /* Error Interrupt Mask */ +#define ISMT_GR_ERRAERMSK 0x014 /* Error AER Mask */ +#define ISMT_GR_ERRSTS 0x018 /* Error Status */ +#define ISMT_GR_ERRINFO 0x01c /* Error Information */ + +/* iSMT Master Registers */ +#define ISMT_MSTR_MDBA 0x100 /* Master Descriptor Base Address */ +#define ISMT_MSTR_MCTRL 0x108 /* Master Control */ +#define ISMT_MSTR_MSTS 0x10c /* Master Status */ +#define ISMT_MSTR_MDS 0x110 /* Master Descriptor Size */ +#define ISMT_MSTR_RPOLICY 0x114 /* Retry Policy */ + +/* iSMT Miscellaneous Registers */ +#define ISMT_SPGT 0x300 /* SMBus PHY Global Timing */ + +/* General Control Register (GCTRL) bit definitions */ +#define ISMT_GCTRL_TRST 0x04 /* Target Reset */ +#define ISMT_GCTRL_KILL 0x08 /* Kill */ +#define ISMT_GCTRL_SRST 0x40 /* Soft Reset */ + +/* Master Control Register (MCTRL) bit definitions */ +#define ISMT_MCTRL_SS 0x01 /* Start/Stop */ +#define ISMT_MCTRL_MEIE 0x10 /* Master Error Interrupt Enable */ +#define ISMT_MCTRL_FMHP 0x00ff0000 /* Firmware Master Head Ptr (FMHP) */ + +/* Master Status Register (MSTS) bit definitions */ +#define ISMT_MSTS_HMTP 0xff0000 /* HW Master Tail Pointer (HMTP) */ +#define ISMT_MSTS_MIS 0x20 /* Master Interrupt Status (MIS) */ +#define ISMT_MSTS_MEIS 0x10 /* Master Error Int Status (MEIS) */ +#define ISMT_MSTS_IP 0x01 /* In Progress */ + +/* Master Descriptor Size (MDS) bit definitions */ +#define ISMT_MDS_MASK 0xff /* Master Descriptor Size mask (MDS) */ + +/* SMBus PHY Global Timing Register (SPGT) bit definitions */ +#define ISMT_SPGT_SPD_MASK 0xc0000000 /* SMBus Speed mask */ +#define ISMT_SPGT_SPD_80K 0x00 /* 80 kHz */ +#define ISMT_SPGT_SPD_100K (0x1 << 30) /* 100 kHz */ +#define ISMT_SPGT_SPD_400K (0x2 << 30) /* 400 kHz */ +#define ISMT_SPGT_SPD_1M (0x3 << 30) /* 1 MHz */ + + +/* MSI Control Register (MSICTL) bit definitions */ +#define ISMT_MSICTL_MSIE 0x01 /* MSI Enable */ + +/* iSMT Hardware Descriptor */ +struct ismt_desc { + u8 tgtaddr_rw; /* target address & r/w bit */ + u8 wr_len_cmd; /* write length in bytes or a command */ + u8 rd_len; /* read length */ + u8 control; /* control bits */ + u8 status; /* status bits */ + u8 retry; /* collision retry and retry count */ + u8 rxbytes; /* received bytes */ + u8 txbytes; /* transmitted bytes */ + u32 dptr_low; /* lower 32 bit of the data pointer */ + u32 dptr_high; /* upper 32 bit of the data pointer */ +} __packed; + +struct ismt_priv { + struct i2c_adapter adapter; + void *smba; /* PCI BAR */ + struct pci_dev *pci_dev; + struct ismt_desc *hw; /* descriptor virt base addr */ + dma_addr_t io_rng_dma; /* descriptor HW base addr */ + u8 head; /* ring buffer head pointer */ + struct completion cmp; /* interrupt completion */ + u8 dma_buffer[I2C_SMBUS_BLOCK_MAX + 1]; /* temp R/W data buffer */ + bool using_msi; /* type of interrupt flag */ +}; + +/** + * ismt_ids - PCI device IDs supported by this driver + */ +static const DEFINE_PCI_DEVICE_TABLE(ismt_ids) = { + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT0) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT1) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMT) }, + { 0, } +}; + +MODULE_DEVICE_TABLE(pci, ismt_ids); + +/* Bus speed control bits for slow debuggers - refer to the docs for usage */ +static unsigned int bus_speed; +module_param(bus_speed, uint, S_IRUGO); +MODULE_PARM_DESC(bus_speed, "Bus Speed in kHz (0 = BIOS default)"); + +/** + * __ismt_desc_dump() - dump the contents of a specific descriptor + */ +static void __ismt_desc_dump(struct device *dev, const struct ismt_desc *desc) +{ + + dev_dbg(dev, "Descriptor struct: %p\n", desc); + dev_dbg(dev, "\ttgtaddr_rw=0x%02X\n", desc->tgtaddr_rw); + dev_dbg(dev, "\twr_len_cmd=0x%02X\n", desc->wr_len_cmd); + dev_dbg(dev, "\trd_len= 0x%02X\n", desc->rd_len); + dev_dbg(dev, "\tcontrol= 0x%02X\n", desc->control); + dev_dbg(dev, "\tstatus= 0x%02X\n", desc->status); + dev_dbg(dev, "\tretry= 0x%02X\n", desc->retry); + dev_dbg(dev, "\trxbytes= 0x%02X\n", desc->rxbytes); + dev_dbg(dev, "\ttxbytes= 0x%02X\n", desc->txbytes); + dev_dbg(dev, "\tdptr_low= 0x%08X\n", desc->dptr_low); + dev_dbg(dev, "\tdptr_high= 0x%08X\n", desc->dptr_high); +} +/** + * ismt_desc_dump() - dump the contents of a descriptor for debug purposes + * @priv: iSMT private data + */ +static void ismt_desc_dump(struct ismt_priv *priv) +{ + struct device *dev = &priv->pci_dev->dev; + struct ismt_desc *desc = &priv->hw[priv->head]; + + dev_dbg(dev, "Dump of the descriptor struct: 0x%X\n", priv->head); + __ismt_desc_dump(dev, desc); +} + +/** + * ismt_gen_reg_dump() - dump the iSMT General Registers + * @priv: iSMT private data + */ +static void ismt_gen_reg_dump(struct ismt_priv *priv) +{ + struct device *dev = &priv->pci_dev->dev; + + dev_dbg(dev, "Dump of the iSMT General Registers\n"); + dev_dbg(dev, " GCTRL.... : (0x%p)=0x%X\n", + priv->smba + ISMT_GR_GCTRL, + readl(priv->smba + ISMT_GR_GCTRL)); + dev_dbg(dev, " SMTICL... : (0x%p)=0x%016llX\n", + priv->smba + ISMT_GR_SMTICL, + (long long unsigned int)readq(priv->smba + ISMT_GR_SMTICL)); + dev_dbg(dev, " ERRINTMSK : (0x%p)=0x%X\n", + priv->smba + ISMT_GR_ERRINTMSK, + readl(priv->smba + ISMT_GR_ERRINTMSK)); + dev_dbg(dev, " ERRAERMSK : (0x%p)=0x%X\n", + priv->smba + ISMT_GR_ERRAERMSK, + readl(priv->smba + ISMT_GR_ERRAERMSK)); + dev_dbg(dev, " ERRSTS... : (0x%p)=0x%X\n", + priv->smba + ISMT_GR_ERRSTS, + readl(priv->smba + ISMT_GR_ERRSTS)); + dev_dbg(dev, " ERRINFO.. : (0x%p)=0x%X\n", + priv->smba + ISMT_GR_ERRINFO, + readl(priv->smba + ISMT_GR_ERRINFO)); +} + +/** + * ismt_mstr_reg_dump() - dump the iSMT Master Registers + * @priv: iSMT private data + */ +static void ismt_mstr_reg_dump(struct ismt_priv *priv) +{ + struct device *dev = &priv->pci_dev->dev; + + dev_dbg(dev, "Dump of the iSMT Master Registers\n"); + dev_dbg(dev, " MDBA..... : (0x%p)=0x%016llX\n", + priv->smba + ISMT_MSTR_MDBA, + (long long unsigned int)readq(priv->smba + ISMT_MSTR_MDBA)); + dev_dbg(dev, " MCTRL.... : (0x%p)=0x%X\n", + priv->smba + ISMT_MSTR_MCTRL, + readl(priv->smba + ISMT_MSTR_MCTRL)); + dev_dbg(dev, " MSTS..... : (0x%p)=0x%X\n", + priv->smba + ISMT_MSTR_MSTS, + readl(priv->smba + ISMT_MSTR_MSTS)); + dev_dbg(dev, " MDS...... : (0x%p)=0x%X\n", + priv->smba + ISMT_MSTR_MDS, + readl(priv->smba + ISMT_MSTR_MDS)); + dev_dbg(dev, " RPOLICY.. : (0x%p)=0x%X\n", + priv->smba + ISMT_MSTR_RPOLICY, + readl(priv->smba + ISMT_MSTR_RPOLICY)); + dev_dbg(dev, " SPGT..... : (0x%p)=0x%X\n", + priv->smba + ISMT_SPGT, + readl(priv->smba + ISMT_SPGT)); +} + +/** + * ismt_submit_desc() - add a descriptor to the ring + * @priv: iSMT private data + */ +static void ismt_submit_desc(struct ismt_priv *priv) +{ + uint fmhp; + uint val; + + ismt_desc_dump(priv); + ismt_gen_reg_dump(priv); + ismt_mstr_reg_dump(priv); + + /* Set the FMHP (Firmware Master Head Pointer)*/ + fmhp = ((priv->head + 1) % ISMT_DESC_ENTRIES) << 16; + val = readl(priv->smba + ISMT_MSTR_MCTRL); + writel((val & ~ISMT_MCTRL_FMHP) | fmhp, + priv->smba + ISMT_MSTR_MCTRL); + + /* Set the start bit */ + val = readl(priv->smba + ISMT_MSTR_MCTRL); + writel(val | ISMT_MCTRL_SS, + priv->smba + ISMT_MSTR_MCTRL); +} + +/** + * ismt_process_desc() - handle the completion of the descriptor + * @desc: the iSMT hardware descriptor + * @data: data buffer from the upper layer + * @priv: ismt_priv struct holding our dma buffer + * @size: SMBus transaction type + * @read_write: flag to indicate if this is a read or write + */ +static int ismt_process_desc(const struct ismt_desc *desc, + union i2c_smbus_data *data, + struct ismt_priv *priv, int size, + char read_write) +{ + u8 *dma_buffer = priv->dma_buffer; + + dev_dbg(&priv->pci_dev->dev, "Processing completed descriptor\n"); + __ismt_desc_dump(&priv->pci_dev->dev, desc); + + if (desc->status & ISMT_DESC_SCS) { + if (read_write == I2C_SMBUS_WRITE && + size != I2C_SMBUS_PROC_CALL) + return 0; + + switch (size) { + case I2C_SMBUS_BYTE: + case I2C_SMBUS_BYTE_DATA: + data->byte = dma_buffer[0]; + break; + case I2C_SMBUS_WORD_DATA: + case I2C_SMBUS_PROC_CALL: + data->word = dma_buffer[0] | (dma_buffer[1] << 8); + break; + case I2C_SMBUS_BLOCK_DATA: + memcpy(&data->block[1], dma_buffer, desc->rxbytes); + data->block[0] = desc->rxbytes; + break; + } + return 0; + } + + if (likely(desc->status & ISMT_DESC_NAK)) + return -ENXIO; + + if (desc->status & ISMT_DESC_CRC) + return -EBADMSG; + + if (desc->status & ISMT_DESC_COL) + return -EAGAIN; + + if (desc->status & ISMT_DESC_LPR) + return -EPROTO; + + if (desc->status & (ISMT_DESC_DLTO | ISMT_DESC_CLTO)) + return -ETIMEDOUT; + + return -EIO; +} + +/** + * ismt_access() - process an SMBus command + * @adap: the i2c host adapter + * @addr: address of the i2c/SMBus target + * @flags: command options + * @read_write: read from or write to device + * @command: the i2c/SMBus command to issue + * @size: SMBus transaction type + * @data: read/write data buffer + */ +static int ismt_access(struct i2c_adapter *adap, u16 addr, + unsigned short flags, char read_write, u8 command, + int size, union i2c_smbus_data *data) +{ + int ret; + dma_addr_t dma_addr = 0; /* address of the data buffer */ + u8 dma_size = 0; + enum dma_data_direction dma_direction = 0; + struct ismt_desc *desc; + struct ismt_priv *priv = i2c_get_adapdata(adap); + struct device *dev = &priv->pci_dev->dev; + + desc = &priv->hw[priv->head]; + + /* Initialize the descriptor */ + memset(desc, 0, sizeof(struct ismt_desc)); + desc->tgtaddr_rw = ISMT_DESC_ADDR_RW(addr, read_write); + + /* Initialize common control bits */ + if (likely(priv->using_msi)) + desc->control = ISMT_DESC_INT | ISMT_DESC_FAIR; + else + desc->control = ISMT_DESC_FAIR; + + if ((flags & I2C_CLIENT_PEC) && (size != I2C_SMBUS_QUICK) + && (size != I2C_SMBUS_I2C_BLOCK_DATA)) + desc->control |= ISMT_DESC_PEC; + + switch (size) { + case I2C_SMBUS_QUICK: + dev_dbg(dev, "I2C_SMBUS_QUICK\n"); + break; + + case I2C_SMBUS_BYTE: + if (read_write == I2C_SMBUS_WRITE) { + /* + * Send Byte + * The command field contains the write data + */ + dev_dbg(dev, "I2C_SMBUS_BYTE: WRITE\n"); + desc->control |= ISMT_DESC_CWRL; + desc->wr_len_cmd = command; + } else { + /* Receive Byte */ + dev_dbg(dev, "I2C_SMBUS_BYTE: READ\n"); + dma_size = 1; + dma_direction = DMA_FROM_DEVICE; + desc->rd_len = 1; + } + break; + + case I2C_SMBUS_BYTE_DATA: + if (read_write == I2C_SMBUS_WRITE) { + /* + * Write Byte + * Command plus 1 data byte + */ + dev_dbg(dev, "I2C_SMBUS_BYTE_DATA: WRITE\n"); + desc->wr_len_cmd = 2; + dma_size = 2; + dma_direction = DMA_TO_DEVICE; + priv->dma_buffer[0] = command; + priv->dma_buffer[1] = data->byte; + } else { + /* Read Byte */ + dev_dbg(dev, "I2C_SMBUS_BYTE_DATA: READ\n"); + desc->control |= ISMT_DESC_CWRL; + desc->wr_len_cmd = command; + desc->rd_len = 1; + dma_size = 1; + dma_direction = DMA_FROM_DEVICE; + } + break; + + case I2C_SMBUS_WORD_DATA: + if (read_write == I2C_SMBUS_WRITE) { + /* Write Word */ + dev_dbg(dev, "I2C_SMBUS_WORD_DATA: WRITE\n"); + desc->wr_len_cmd = 3; + dma_size = 3; + dma_direction = DMA_TO_DEVICE; + priv->dma_buffer[0] = command; + priv->dma_buffer[1] = data->word & 0xff; + priv->dma_buffer[2] = data->word >> 8; + } else { + /* Read Word */ + dev_dbg(dev, "I2C_SMBUS_WORD_DATA: READ\n"); + desc->wr_len_cmd = command; + desc->control |= ISMT_DESC_CWRL; + desc->rd_len = 2; + dma_size = 2; + dma_direction = DMA_FROM_DEVICE; + } + break; + + case I2C_SMBUS_PROC_CALL: + dev_dbg(dev, "I2C_SMBUS_PROC_CALL\n"); + desc->wr_len_cmd = 3; + desc->rd_len = 2; + dma_size = 3; + dma_direction = DMA_BIDIRECTIONAL; + priv->dma_buffer[0] = command; + priv->dma_buffer[1] = data->word & 0xff; + priv->dma_buffer[2] = data->word >> 8; + break; + + case I2C_SMBUS_BLOCK_DATA: + if (read_write == I2C_SMBUS_WRITE) { + /* Block Write */ + dev_dbg(dev, "I2C_SMBUS_BLOCK_DATA: WRITE\n"); + dma_size = data->block[0] + 1; + dma_direction = DMA_TO_DEVICE; + desc->wr_len_cmd = dma_size; + desc->control |= ISMT_DESC_BLK; + priv->dma_buffer[0] = command; + memcpy(&priv->dma_buffer[1], &data->block[1], dma_size); + } else { + /* Block Read */ + dev_dbg(dev, "I2C_SMBUS_BLOCK_DATA: READ\n"); + dma_size = I2C_SMBUS_BLOCK_MAX; + dma_direction = DMA_FROM_DEVICE; + desc->rd_len = dma_size; + desc->wr_len_cmd = command; + desc->control |= (ISMT_DESC_BLK | ISMT_DESC_CWRL); + } + break; + + default: + dev_err(dev, "Unsupported transaction %d\n", + size); + return -EOPNOTSUPP; + } + + /* map the data buffer */ + if (dma_size != 0) { + dev_dbg(dev, " dev=%p\n", dev); + dev_dbg(dev, " data=%p\n", data); + dev_dbg(dev, " dma_buffer=%p\n", priv->dma_buffer); + dev_dbg(dev, " dma_size=%d\n", dma_size); + dev_dbg(dev, " dma_direction=%d\n", dma_direction); + + dma_addr = dma_map_single(dev, + priv->dma_buffer, + dma_size, + dma_direction); + + if (dma_mapping_error(dev, dma_addr)) { + dev_err(dev, "Error in mapping dma buffer %p\n", + priv->dma_buffer); + return -EIO; + } + + dev_dbg(dev, " dma_addr = 0x%016llX\n", + (unsigned long long)dma_addr); + + desc->dptr_low = lower_32_bits(dma_addr); + desc->dptr_high = upper_32_bits(dma_addr); + } + + INIT_COMPLETION(priv->cmp); + + /* Add the descriptor */ + ismt_submit_desc(priv); + + /* Now we wait for interrupt completion, 1s */ + ret = wait_for_completion_timeout(&priv->cmp, HZ*1); + + /* unmap the data buffer */ + if (dma_size != 0) + dma_unmap_single(&adap->dev, dma_addr, dma_size, dma_direction); + + if (unlikely(!ret)) { + dev_err(dev, "completion wait timed out\n"); + ret = -ETIMEDOUT; + goto out; + } + + /* do any post processing of the descriptor here */ + ret = ismt_process_desc(desc, data, priv, size, read_write); + +out: + /* Update the ring pointer */ + priv->head++; + priv->head %= ISMT_DESC_ENTRIES; + + return ret; +} + +/** + * ismt_func() - report which i2c commands are supported by this adapter + * @adap: the i2c host adapter + */ +static u32 ismt_func(struct i2c_adapter *adap) +{ + return I2C_FUNC_SMBUS_QUICK | + I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | + I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_PROC_CALL | + I2C_FUNC_SMBUS_BLOCK_DATA | + I2C_FUNC_SMBUS_PEC; +} + +/** + * smbus_algorithm - the adapter algorithm and supported functionality + * @smbus_xfer: the adapter algorithm + * @functionality: functionality supported by the adapter + */ +static const struct i2c_algorithm smbus_algorithm = { + .smbus_xfer = ismt_access, + .functionality = ismt_func, +}; + +/** + * ismt_handle_isr() - interrupt handler bottom half + * @priv: iSMT private data + */ +static irqreturn_t ismt_handle_isr(struct ismt_priv *priv) +{ + complete(&priv->cmp); + + return IRQ_HANDLED; +} + + +/** + * ismt_do_interrupt() - IRQ interrupt handler + * @vec: interrupt vector + * @data: iSMT private data + */ +static irqreturn_t ismt_do_interrupt(int vec, void *data) +{ + u32 val; + struct ismt_priv *priv = data; + + /* + * check to see it's our interrupt, return IRQ_NONE if not ours + * since we are sharing interrupt + */ + val = readl(priv->smba + ISMT_MSTR_MSTS); + + if (!(val & (ISMT_MSTS_MIS | ISMT_MSTS_MEIS))) + return IRQ_NONE; + else + writel(val | ISMT_MSTS_MIS | ISMT_MSTS_MEIS, + priv->smba + ISMT_MSTR_MSTS); + + return ismt_handle_isr(priv); +} + +/** + * ismt_do_msi_interrupt() - MSI interrupt handler + * @vec: interrupt vector + * @data: iSMT private data + */ +static irqreturn_t ismt_do_msi_interrupt(int vec, void *data) +{ + return ismt_handle_isr(data); +} + +/** + * ismt_hw_init() - initialize the iSMT hardware + * @priv: iSMT private data + */ +static void ismt_hw_init(struct ismt_priv *priv) +{ + u32 val; + struct device *dev = &priv->pci_dev->dev; + + /* initialize the Master Descriptor Base Address (MDBA) */ + writeq(priv->io_rng_dma, priv->smba + ISMT_MSTR_MDBA); + + /* initialize the Master Control Register (MCTRL) */ + writel(ISMT_MCTRL_MEIE, priv->smba + ISMT_MSTR_MCTRL); + + /* initialize the Master Status Register (MSTS) */ + writel(0, priv->smba + ISMT_MSTR_MSTS); + + /* initialize the Master Descriptor Size (MDS) */ + val = readl(priv->smba + ISMT_MSTR_MDS); + writel((val & ~ISMT_MDS_MASK) | (ISMT_DESC_ENTRIES - 1), + priv->smba + ISMT_MSTR_MDS); + + /* + * Set the SMBus speed (could use this for slow HW debuggers) + */ + + val = readl(priv->smba + ISMT_SPGT); + + switch (bus_speed) { + case 0: + break; + + case 80: + dev_dbg(dev, "Setting SMBus clock to 80 kHz\n"); + writel(((val & ~ISMT_SPGT_SPD_MASK) | ISMT_SPGT_SPD_80K), + priv->smba + ISMT_SPGT); + break; + + case 100: + dev_dbg(dev, "Setting SMBus clock to 100 kHz\n"); + writel(((val & ~ISMT_SPGT_SPD_MASK) | ISMT_SPGT_SPD_100K), + priv->smba + ISMT_SPGT); + break; + + case 400: + dev_dbg(dev, "Setting SMBus clock to 400 kHz\n"); + writel(((val & ~ISMT_SPGT_SPD_MASK) | ISMT_SPGT_SPD_400K), + priv->smba + ISMT_SPGT); + break; + + case 1000: + dev_dbg(dev, "Setting SMBus clock to 1000 kHz\n"); + writel(((val & ~ISMT_SPGT_SPD_MASK) | ISMT_SPGT_SPD_1M), + priv->smba + ISMT_SPGT); + break; + + default: + dev_warn(dev, "Invalid SMBus clock speed, only 0, 80, 100, 400, and 1000 are valid\n"); + break; + } + + val = readl(priv->smba + ISMT_SPGT); + + switch (val & ISMT_SPGT_SPD_MASK) { + case ISMT_SPGT_SPD_80K: + bus_speed = 80; + break; + case ISMT_SPGT_SPD_100K: + bus_speed = 100; + break; + case ISMT_SPGT_SPD_400K: + bus_speed = 400; + break; + case ISMT_SPGT_SPD_1M: + bus_speed = 1000; + break; + } + dev_dbg(dev, "SMBus clock is running at %d kHz\n", bus_speed); +} + +/** + * ismt_dev_init() - initialize the iSMT data structures + * @priv: iSMT private data + */ +static int ismt_dev_init(struct ismt_priv *priv) +{ + /* allocate memory for the descriptor */ + priv->hw = dmam_alloc_coherent(&priv->pci_dev->dev, + (ISMT_DESC_ENTRIES + * sizeof(struct ismt_desc)), + &priv->io_rng_dma, + GFP_KERNEL); + if (!priv->hw) + return -ENOMEM; + + memset(priv->hw, 0, (ISMT_DESC_ENTRIES * sizeof(struct ismt_desc))); + + priv->head = 0; + init_completion(&priv->cmp); + + return 0; +} + +/** + * ismt_int_init() - initialize interrupts + * @priv: iSMT private data + */ +static int ismt_int_init(struct ismt_priv *priv) +{ + int err; + + /* Try using MSI interrupts */ + err = pci_enable_msi(priv->pci_dev); + if (err) { + dev_warn(&priv->pci_dev->dev, + "Unable to use MSI interrupts, falling back to legacy\n"); + goto intx; + } + + err = devm_request_irq(&priv->pci_dev->dev, + priv->pci_dev->irq, + ismt_do_msi_interrupt, + 0, + "ismt-msi", + priv); + if (err) { + pci_disable_msi(priv->pci_dev); + goto intx; + } + + priv->using_msi = true; + goto done; + + /* Try using legacy interrupts */ +intx: + err = devm_request_irq(&priv->pci_dev->dev, + priv->pci_dev->irq, + ismt_do_interrupt, + IRQF_SHARED, + "ismt-intx", + priv); + if (err) { + dev_err(&priv->pci_dev->dev, "no usable interrupts\n"); + return -ENODEV; + } + + priv->using_msi = false; + +done: + return 0; +} + +static struct pci_driver ismt_driver; + +/** + * ismt_probe() - probe for iSMT devices + * @pdev: PCI-Express device + * @id: PCI-Express device ID + */ +static int +ismt_probe(struct pci_dev *pdev, const struct pci_device_id *id) +{ + int err; + struct ismt_priv *priv; + unsigned long start, len; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + pci_set_drvdata(pdev, priv); + i2c_set_adapdata(&priv->adapter, priv); + priv->adapter.owner = THIS_MODULE; + + priv->adapter.class = I2C_CLASS_HWMON; + + priv->adapter.algo = &smbus_algorithm; + + /* set up the sysfs linkage to our parent device */ + priv->adapter.dev.parent = &pdev->dev; + + /* number of retries on lost arbitration */ + priv->adapter.retries = ISMT_MAX_RETRIES; + + priv->pci_dev = pdev; + + err = pcim_enable_device(pdev); + if (err) { + dev_err(&pdev->dev, "Failed to enable SMBus PCI device (%d)\n", + err); + return err; + } + + /* enable bus mastering */ + pci_set_master(pdev); + + /* Determine the address of the SMBus area */ + start = pci_resource_start(pdev, SMBBAR); + len = pci_resource_len(pdev, SMBBAR); + if (!start || !len) { + dev_err(&pdev->dev, + "SMBus base address uninitialized, upgrade BIOS\n"); + return -ENODEV; + } + + snprintf(priv->adapter.name, sizeof(priv->adapter.name), + "SMBus iSMT adapter at %lx", start); + + dev_dbg(&priv->pci_dev->dev, " start=0x%lX\n", start); + dev_dbg(&priv->pci_dev->dev, " len=0x%lX\n", len); + + err = acpi_check_resource_conflict(&pdev->resource[SMBBAR]); + if (err) { + dev_err(&pdev->dev, "ACPI resource conflict!\n"); + return err; + } + + err = pci_request_region(pdev, SMBBAR, ismt_driver.name); + if (err) { + dev_err(&pdev->dev, + "Failed to request SMBus region 0x%lx-0x%lx\n", + start, start + len); + return err; + } + + priv->smba = pcim_iomap(pdev, SMBBAR, len); + if (!priv->smba) { + dev_err(&pdev->dev, "Unable to ioremap SMBus BAR\n"); + err = -ENODEV; + goto fail; + } + + if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) || + (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0)) { + if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) || + (pci_set_consistent_dma_mask(pdev, + DMA_BIT_MASK(32)) != 0)) { + dev_err(&pdev->dev, "pci_set_dma_mask fail %p\n", + pdev); + goto fail; + } + } + + err = ismt_dev_init(priv); + if (err) + goto fail; + + ismt_hw_init(priv); + + err = ismt_int_init(priv); + if (err) + goto fail; + + err = i2c_add_adapter(&priv->adapter); + if (err) { + dev_err(&pdev->dev, "Failed to add SMBus iSMT adapter\n"); + err = -ENODEV; + goto fail; + } + return 0; + +fail: + pci_release_region(pdev, SMBBAR); + return err; +} + +/** + * ismt_remove() - release driver resources + * @pdev: PCI-Express device + */ +static void ismt_remove(struct pci_dev *pdev) +{ + struct ismt_priv *priv = pci_get_drvdata(pdev); + + i2c_del_adapter(&priv->adapter); + pci_release_region(pdev, SMBBAR); +} + +/** + * ismt_suspend() - place the device in suspend + * @pdev: PCI-Express device + * @mesg: PM message + */ +#ifdef CONFIG_PM +static int ismt_suspend(struct pci_dev *pdev, pm_message_t mesg) +{ + pci_save_state(pdev); + pci_set_power_state(pdev, pci_choose_state(pdev, mesg)); + return 0; +} + +/** + * ismt_resume() - PCI resume code + * @pdev: PCI-Express device + */ +static int ismt_resume(struct pci_dev *pdev) +{ + pci_set_power_state(pdev, PCI_D0); + pci_restore_state(pdev); + return pci_enable_device(pdev); +} + +#else + +#define ismt_suspend NULL +#define ismt_resume NULL + +#endif + +static struct pci_driver ismt_driver = { + .name = "ismt_smbus", + .id_table = ismt_ids, + .probe = ismt_probe, + .remove = ismt_remove, + .suspend = ismt_suspend, + .resume = ismt_resume, +}; + +module_pci_driver(ismt_driver); + +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Bill E. Brown "); +MODULE_DESCRIPTION("Intel SMBus Message Transport (iSMT) driver"); --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-i801.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-i801.c @@ -53,6 +53,7 @@ Panther Point (PCH) 0x1e22 32 hard yes yes yes Lynx Point (PCH) 0x8c22 32 hard yes yes yes Lynx Point-LP (PCH) 0x9c22 32 hard yes yes yes + Avoton (SOC) 0x1f3c 32 hard yes yes yes Features supported by this driver: Software PEC no @@ -162,6 +163,7 @@ #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1 0x1d71 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2 0x1d72 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS 0x1e22 +#define PCI_DEVICE_ID_INTEL_AVOTON_SMBUS 0x1f3c #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22 @@ -798,6 +800,7 @@ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) }, { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) }, { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS) }, + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMBUS) }, { 0, } }; --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/Makefile +++ linux-lts-raring-3.8.0/drivers/i2c/busses/Makefile @@ -14,6 +14,7 @@ obj-$(CONFIG_I2C_AMD8111) += i2c-amd8111.o obj-$(CONFIG_I2C_I801) += i2c-i801.o obj-$(CONFIG_I2C_ISCH) += i2c-isch.o +obj-$(CONFIG_I2C_ISMT) += i2c-ismt.o obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o obj-$(CONFIG_I2C_NFORCE2_S4985) += i2c-nforce2-s4985.o obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-piix4.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-piix4.c @@ -22,7 +22,7 @@ Intel PIIX4, 440MX Serverworks OSB4, CSB5, CSB6, HT-1000, HT-1100 ATI IXP200, IXP300, IXP400, SB600, SB700/SP5100, SB800 - AMD Hudson-2 + AMD Hudson-2, CZ SMSC Victory66 Note: we assume there can only be one device, with one or more @@ -522,6 +522,7 @@ { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS) }, { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SMBUS) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMD, 0x790b) }, { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4) }, { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-tegra.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-tegra.c @@ -392,7 +392,11 @@ u32 val; int err = 0; - tegra_i2c_clock_enable(i2c_dev); + err = tegra_i2c_clock_enable(i2c_dev); + if (err < 0) { + dev_err(i2c_dev->dev, "Clock enable failed %d\n", err); + return err; + } tegra_periph_reset_assert(i2c_dev->div_clk); udelay(2); @@ -599,7 +603,12 @@ if (i2c_dev->is_suspended) return -EBUSY; - tegra_i2c_clock_enable(i2c_dev); + ret = tegra_i2c_clock_enable(i2c_dev); + if (ret < 0) { + dev_err(i2c_dev->dev, "Clock enable failed %d\n", ret); + return ret; + } + for (i = 0; i < num; i++) { enum msg_end_type end_type = MSG_END_STOP; if (i < (num - 1)) { --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-xiic.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-xiic.c @@ -312,10 +312,8 @@ /* last message in transfer -> STOP */ data |= XIIC_TX_DYN_STOP_MASK; dev_dbg(i2c->adap.dev.parent, "%s TX STOP\n", __func__); - - xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, data); - } else - xiic_setreg8(i2c, XIIC_DTR_REG_OFFSET, data); + } + xiic_setreg16(i2c, XIIC_DTR_REG_OFFSET, data); } } --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-designware-platdrv.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-designware-platdrv.c @@ -37,8 +37,10 @@ #include #include #include +#include #include #include +#include #include "i2c-designware-core.h" static struct i2c_algorithm i2c_dw_algo = { @@ -50,6 +52,42 @@ return clk_get_rate(dev->clk)/1000; } +#ifdef CONFIG_ACPI +static int dw_i2c_acpi_configure(struct platform_device *pdev) +{ + struct dw_i2c_dev *dev = platform_get_drvdata(pdev); + struct acpi_device *adev; + int busno, ret; + + if (!ACPI_HANDLE(&pdev->dev)) + return -ENODEV; + + ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev); + if (ret) + return -ENODEV; + + dev->adapter.nr = -1; + if (adev->pnp.unique_id && !kstrtoint(adev->pnp.unique_id, 0, &busno)) + dev->adapter.nr = busno; + + dev->tx_fifo_depth = 32; + dev->rx_fifo_depth = 32; + return 0; +} + +static const struct acpi_device_id dw_i2c_acpi_match[] = { + { "INT33C2", 0 }, + { "INT33C3", 0 }, + { } +}; +MODULE_DEVICE_TABLE(acpi, dw_i2c_acpi_match); +#else +static inline int dw_i2c_acpi_configure(struct platform_device *pdev) +{ + return -ENODEV; +} +#endif + static int dw_i2c_probe(struct platform_device *pdev) { struct dw_i2c_dev *dev; @@ -114,18 +152,22 @@ r = -EBUSY; goto err_unuse_clocks; } - { + + /* Try first if we can configure the device from ACPI */ + r = dw_i2c_acpi_configure(pdev); + if (r) { u32 param1 = i2c_dw_read_comp_param(dev); dev->tx_fifo_depth = ((param1 >> 16) & 0xff) + 1; dev->rx_fifo_depth = ((param1 >> 8) & 0xff) + 1; + dev->adapter.nr = pdev->id; } r = i2c_dw_init(dev); if (r) goto err_iounmap; i2c_dw_disable_int(dev); - r = request_irq(dev->irq, i2c_dw_isr, IRQF_DISABLED, pdev->name, dev); + r = request_irq(dev->irq, i2c_dw_isr, IRQF_SHARED, pdev->name, dev); if (r) { dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); goto err_iounmap; @@ -140,14 +182,19 @@ adap->algo = &i2c_dw_algo; adap->dev.parent = &pdev->dev; adap->dev.of_node = pdev->dev.of_node; + ACPI_HANDLE_SET(&adap->dev, ACPI_HANDLE(&pdev->dev)); - adap->nr = pdev->id; r = i2c_add_numbered_adapter(adap); if (r) { dev_err(&pdev->dev, "failure adding adapter\n"); goto err_free_irq; } of_i2c_register_devices(adap); + acpi_i2c_register_devices(adap); + + pm_runtime_set_active(&pdev->dev); + pm_runtime_enable(&pdev->dev); + pm_runtime_put(&pdev->dev); return 0; @@ -175,6 +222,8 @@ struct resource *mem; platform_set_drvdata(pdev, NULL); + pm_runtime_get_sync(&pdev->dev); + i2c_del_adapter(&dev->adapter); put_device(&pdev->dev); @@ -186,6 +235,9 @@ free_irq(dev->irq, dev); kfree(dev); + pm_runtime_put(&pdev->dev); + pm_runtime_disable(&pdev->dev); + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); release_mem_region(mem->start, resource_size(mem)); return 0; @@ -233,6 +285,7 @@ .name = "i2c_designware", .owner = THIS_MODULE, .of_match_table = of_match_ptr(dw_i2c_of_match), + .acpi_match_table = ACPI_PTR(dw_i2c_acpi_match), .pm = &dw_i2c_dev_pm_ops, }, }; --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-designware-core.h +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-designware-core.h @@ -60,6 +60,7 @@ * @adapter: i2c subsystem adapter node * @tx_fifo_depth: depth of the hardware tx fifo * @rx_fifo_depth: depth of the hardware rx fifo + * @rx_outstanding: current master-rx elements in tx fifo */ struct dw_i2c_dev { struct device *dev; @@ -88,6 +89,7 @@ u32 master_cfg; unsigned int tx_fifo_depth; unsigned int rx_fifo_depth; + int rx_outstanding; }; #define ACCESS_SWAP 0x00000001 --- linux-lts-raring-3.8.0.orig/drivers/i2c/busses/i2c-designware-core.c +++ linux-lts-raring-3.8.0/drivers/i2c/busses/i2c-designware-core.c @@ -361,7 +361,8 @@ /* Enable the adapter */ dw_writel(dev, 1, DW_IC_ENABLE); - /* Enable interrupts */ + /* Clear and enable interrupts */ + i2c_dw_clear_int(dev); dw_writel(dev, DW_IC_INTR_DEFAULT_MASK, DW_IC_INTR_MASK); } @@ -413,11 +414,29 @@ rx_limit = dev->rx_fifo_depth - dw_readl(dev, DW_IC_RXFLR); while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) { + u32 cmd = 0; + + /* + * If IC_EMPTYFIFO_HOLD_MASTER_EN is set we must + * manually set the stop bit. However, it cannot be + * detected from the registers so we set it always + * when writing/reading the last byte. + */ + if (dev->msg_write_idx == dev->msgs_num - 1 && + buf_len == 1) + cmd |= BIT(9); + if (msgs[dev->msg_write_idx].flags & I2C_M_RD) { - dw_writel(dev, 0x100, DW_IC_DATA_CMD); + + /* avoid rx buffer overrun */ + if (rx_limit - dev->rx_outstanding <= 0) + break; + + dw_writel(dev, cmd | 0x100, DW_IC_DATA_CMD); rx_limit--; + dev->rx_outstanding++; } else - dw_writel(dev, *buf++, DW_IC_DATA_CMD); + dw_writel(dev, cmd | *buf++, DW_IC_DATA_CMD); tx_limit--; buf_len--; } @@ -527,6 +546,7 @@ dev->msg_err = 0; dev->status = STATUS_IDLE; dev->abort_source = 0; + dev->rx_outstanding = 0; ret = i2c_dw_wait_bus_not_busy(dev); if (ret < 0) --- linux-lts-raring-3.8.0.orig/drivers/vfio/pci/vfio_pci.c +++ linux-lts-raring-3.8.0/drivers/vfio/pci/vfio_pci.c @@ -331,6 +331,7 @@ if (!(hdr.flags & VFIO_IRQ_SET_DATA_NONE)) { size_t size; + int max = vfio_pci_get_irq_count(vdev, hdr.index); if (hdr.flags & VFIO_IRQ_SET_DATA_BOOL) size = sizeof(uint8_t); @@ -340,7 +341,7 @@ return -EINVAL; if (hdr.argsz - minsz < hdr.count * size || - hdr.count > vfio_pci_get_irq_count(vdev, hdr.index)) + hdr.start >= max || hdr.start + hdr.count > max) return -EINVAL; data = memdup_user((void __user *)(arg + minsz), --- linux-lts-raring-3.8.0.orig/drivers/idle/intel_idle.c +++ linux-lts-raring-3.8.0/drivers/idle/intel_idle.c @@ -109,6 +109,16 @@ #define CPUIDLE_FLAG_TLB_FLUSHED 0x10000 /* + * MWAIT takes an 8-bit "hint" in EAX "suggesting" + * the C-state (top nibble) and sub-state (bottom nibble) + * 0x00 means "MWAIT(C1)", 0x10 means "MWAIT(C2)" etc. + * + * We store the hint at the top of our "flags" for each state. + */ +#define flg2MWAIT(flags) (((flags) >> 24) & 0xFF) +#define MWAIT2flg(eax) ((eax & 0xFF) << 24) + +/* * States are indexed by the cstate number, * which is also the index into the MWAIT hint array. * Thus C0 is a dummy. @@ -118,21 +128,21 @@ { /* MWAIT C1 */ .name = "C1-NHM", .desc = "MWAIT 0x00", - .flags = CPUIDLE_FLAG_TIME_VALID, + .flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID, .exit_latency = 3, .target_residency = 6, .enter = &intel_idle }, { /* MWAIT C2 */ .name = "C3-NHM", .desc = "MWAIT 0x10", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 20, .target_residency = 80, .enter = &intel_idle }, { /* MWAIT C3 */ .name = "C6-NHM", .desc = "MWAIT 0x20", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 200, .target_residency = 800, .enter = &intel_idle }, @@ -143,28 +153,28 @@ { /* MWAIT C1 */ .name = "C1-SNB", .desc = "MWAIT 0x00", - .flags = CPUIDLE_FLAG_TIME_VALID, + .flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID, .exit_latency = 1, .target_residency = 1, .enter = &intel_idle }, { /* MWAIT C2 */ .name = "C3-SNB", .desc = "MWAIT 0x10", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 80, .target_residency = 211, .enter = &intel_idle }, { /* MWAIT C3 */ .name = "C6-SNB", .desc = "MWAIT 0x20", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 104, .target_residency = 345, .enter = &intel_idle }, { /* MWAIT C4 */ .name = "C7-SNB", .desc = "MWAIT 0x30", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x30) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 109, .target_residency = 345, .enter = &intel_idle }, @@ -175,46 +185,78 @@ { /* MWAIT C1 */ .name = "C1-IVB", .desc = "MWAIT 0x00", - .flags = CPUIDLE_FLAG_TIME_VALID, + .flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID, .exit_latency = 1, .target_residency = 1, .enter = &intel_idle }, { /* MWAIT C2 */ .name = "C3-IVB", .desc = "MWAIT 0x10", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 59, .target_residency = 156, .enter = &intel_idle }, { /* MWAIT C3 */ .name = "C6-IVB", .desc = "MWAIT 0x20", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 80, .target_residency = 300, .enter = &intel_idle }, { /* MWAIT C4 */ .name = "C7-IVB", .desc = "MWAIT 0x30", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x30) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 87, .target_residency = 300, .enter = &intel_idle }, }; +static struct cpuidle_state hsw_cstates[MWAIT_MAX_NUM_CSTATES] = { + { /* MWAIT C0 */ }, + { /* MWAIT C1 */ + .name = "C1-HSW", + .desc = "MWAIT 0x00", + .flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID, + .exit_latency = 2, + .target_residency = 2, + .enter = &intel_idle }, + { /* MWAIT C2 */ + .name = "C3-HSW", + .desc = "MWAIT 0x10", + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 33, + .target_residency = 100, + .enter = &intel_idle }, + { /* MWAIT C3 */ + .name = "C6-HSW", + .desc = "MWAIT 0x20", + .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 133, + .target_residency = 400, + .enter = &intel_idle }, + { /* MWAIT C4 */ + .name = "C7s-HSW", + .desc = "MWAIT 0x32", + .flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .exit_latency = 166, + .target_residency = 500, + .enter = &intel_idle }, +}; + static struct cpuidle_state atom_cstates[MWAIT_MAX_NUM_CSTATES] = { { /* MWAIT C0 */ }, { /* MWAIT C1 */ .name = "C1-ATM", .desc = "MWAIT 0x00", - .flags = CPUIDLE_FLAG_TIME_VALID, + .flags = MWAIT2flg(0x00) | CPUIDLE_FLAG_TIME_VALID, .exit_latency = 1, .target_residency = 4, .enter = &intel_idle }, { /* MWAIT C2 */ .name = "C2-ATM", .desc = "MWAIT 0x10", - .flags = CPUIDLE_FLAG_TIME_VALID, + .flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TIME_VALID, .exit_latency = 20, .target_residency = 80, .enter = &intel_idle }, @@ -222,7 +264,7 @@ { /* MWAIT C4 */ .name = "C4-ATM", .desc = "MWAIT 0x30", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x30) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 100, .target_residency = 400, .enter = &intel_idle }, @@ -230,41 +272,12 @@ { /* MWAIT C6 */ .name = "C6-ATM", .desc = "MWAIT 0x52", - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, + .flags = MWAIT2flg(0x52) | CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_TLB_FLUSHED, .exit_latency = 140, .target_residency = 560, .enter = &intel_idle }, }; -static long get_driver_data(int cstate) -{ - int driver_data; - switch (cstate) { - - case 1: /* MWAIT C1 */ - driver_data = 0x00; - break; - case 2: /* MWAIT C2 */ - driver_data = 0x10; - break; - case 3: /* MWAIT C3 */ - driver_data = 0x20; - break; - case 4: /* MWAIT C4 */ - driver_data = 0x30; - break; - case 5: /* MWAIT C5 */ - driver_data = 0x40; - break; - case 6: /* MWAIT C6 */ - driver_data = 0x52; - break; - default: - driver_data = 0x00; - } - return driver_data; -} - /** * intel_idle * @dev: cpuidle_device @@ -278,8 +291,7 @@ { unsigned long ecx = 1; /* break on interrupt flag */ struct cpuidle_state *state = &drv->states[index]; - struct cpuidle_state_usage *state_usage = &dev->states_usage[index]; - unsigned long eax = (unsigned long)cpuidle_get_statedata(state_usage); + unsigned long eax = flg2MWAIT(state->flags); unsigned int cstate; int cpu = smp_processor_id(); @@ -385,6 +397,10 @@ .state_table = ivb_cstates, }; +static const struct idle_cpu idle_cpu_hsw = { + .state_table = hsw_cstates, +}; + #define ICPU(model, cpu) \ { X86_VENDOR_INTEL, 6, model, X86_FEATURE_MWAIT, (unsigned long)&cpu } @@ -402,6 +418,10 @@ ICPU(0x2d, idle_cpu_snb), ICPU(0x3a, idle_cpu_ivb), ICPU(0x3e, idle_cpu_ivb), + ICPU(0x3c, idle_cpu_hsw), + ICPU(0x3f, idle_cpu_hsw), + ICPU(0x45, idle_cpu_hsw), + ICPU(0x46, idle_cpu_hsw), {} }; MODULE_DEVICE_TABLE(x86cpu, intel_idle_ids); @@ -558,9 +578,6 @@ if (cpuidle_state_table[cstate].enter == NULL) continue; - dev->states_usage[dev->state_count].driver_data = - (void *)get_driver_data(cstate); - dev->state_count += 1; } --- linux-lts-raring-3.8.0.orig/drivers/pcmcia/at91_cf.c +++ linux-lts-raring-3.8.0/drivers/pcmcia/at91_cf.c @@ -100,9 +100,9 @@ int vcc = gpio_is_valid(cf->board->vcc_pin); *sp = SS_DETECT | SS_3VCARD; - if (!rdy || gpio_get_value(rdy)) + if (!rdy || gpio_get_value(cf->board->irq_pin)) *sp |= SS_READY; - if (!vcc || gpio_get_value(vcc)) + if (!vcc || gpio_get_value(cf->board->vcc_pin)) *sp |= SS_POWERON; } else *sp = 0; --- linux-lts-raring-3.8.0.orig/drivers/pcmcia/vrc4171_card.c +++ linux-lts-raring-3.8.0/drivers/pcmcia/vrc4171_card.c @@ -246,6 +246,7 @@ socket = &vrc4171_sockets[slot]; socket->csc_irq = search_nonuse_irq(); socket->io_irq = search_nonuse_irq(); + spin_lock_init(&socket->lock); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/macintosh/windfarm_rm31.c +++ linux-lts-raring-3.8.0/drivers/macintosh/windfarm_rm31.c @@ -439,15 +439,15 @@ /* Slots fan */ static const struct wf_pid_param slots_param = { - .interval = 5, - .history_len = 2, - .gd = 30 << 20, - .gp = 5 << 20, - .gr = 0, - .itarget = 40 << 16, - .additive = 1, - .min = 300, - .max = 4000, + .interval = 1, + .history_len = 20, + .gd = 0, + .gp = 0, + .gr = 0x00100000, + .itarget = 3200000, + .additive = 0, + .min = 20, + .max = 100, }; static void slots_fan_tick(void) --- linux-lts-raring-3.8.0.orig/drivers/rapidio/devices/tsi721.c +++ linux-lts-raring-3.8.0/drivers/rapidio/devices/tsi721.c @@ -471,6 +471,10 @@ u32 intval; u32 ch_inte; + /* For MSI mode disable all device-level interrupts */ + if (priv->flags & TSI721_USING_MSI) + iowrite32(0, priv->regs + TSI721_DEV_INTE); + dev_int = ioread32(priv->regs + TSI721_DEV_INT); if (!dev_int) return IRQ_NONE; @@ -560,6 +564,14 @@ } } #endif + + /* For MSI mode re-enable device-level interrupts */ + if (priv->flags & TSI721_USING_MSI) { + dev_int = TSI721_DEV_INT_SR2PC_CH | TSI721_DEV_INT_SRIO | + TSI721_DEV_INT_SMSG_CH | TSI721_DEV_INT_BDMA_CH; + iowrite32(dev_int, priv->regs + TSI721_DEV_INTE); + } + return IRQ_HANDLED; } --- linux-lts-raring-3.8.0.orig/drivers/w1/w1.c +++ linux-lts-raring-3.8.0/drivers/w1/w1.c @@ -924,7 +924,8 @@ tmp64 = (triplet_ret >> 2); rn |= (tmp64 << i); - if (kthread_should_stop()) { + /* ensure we're called from kthread and not by netlink callback */ + if (!dev->priv && kthread_should_stop()) { mutex_unlock(&dev->bus_mutex); dev_dbg(&dev->dev, "Abort w1_search\n"); return; --- linux-lts-raring-3.8.0.orig/drivers/w1/masters/w1-gpio.c +++ linux-lts-raring-3.8.0/drivers/w1/masters/w1-gpio.c @@ -72,7 +72,7 @@ return 0; } -static int __init w1_gpio_probe(struct platform_device *pdev) +static int w1_gpio_probe(struct platform_device *pdev) { struct w1_bus_master *master; struct w1_gpio_platform_data *pdata; @@ -158,7 +158,7 @@ return err; } -static int __exit w1_gpio_remove(struct platform_device *pdev) +static int w1_gpio_remove(struct platform_device *pdev) { struct w1_bus_master *master = platform_get_drvdata(pdev); struct w1_gpio_platform_data *pdata = pdev->dev.platform_data; @@ -210,7 +210,7 @@ .of_match_table = of_match_ptr(w1_gpio_dt_ids), }, .probe = w1_gpio_probe, - .remove = __exit_p(w1_gpio_remove), + .remove = w1_gpio_remove, .suspend = w1_gpio_suspend, .resume = w1_gpio_resume, }; --- linux-lts-raring-3.8.0.orig/drivers/edac/edac_mc_sysfs.c +++ linux-lts-raring-3.8.0/drivers/edac/edac_mc_sysfs.c @@ -330,17 +330,17 @@ }; /* possible dynamic channel ce_count attribute files */ -DEVICE_CHANNEL(ch0_ce_count, S_IRUGO | S_IWUSR, +DEVICE_CHANNEL(ch0_ce_count, S_IRUGO, channel_ce_count_show, NULL, 0); -DEVICE_CHANNEL(ch1_ce_count, S_IRUGO | S_IWUSR, +DEVICE_CHANNEL(ch1_ce_count, S_IRUGO, channel_ce_count_show, NULL, 1); -DEVICE_CHANNEL(ch2_ce_count, S_IRUGO | S_IWUSR, +DEVICE_CHANNEL(ch2_ce_count, S_IRUGO, channel_ce_count_show, NULL, 2); -DEVICE_CHANNEL(ch3_ce_count, S_IRUGO | S_IWUSR, +DEVICE_CHANNEL(ch3_ce_count, S_IRUGO, channel_ce_count_show, NULL, 3); -DEVICE_CHANNEL(ch4_ce_count, S_IRUGO | S_IWUSR, +DEVICE_CHANNEL(ch4_ce_count, S_IRUGO, channel_ce_count_show, NULL, 4); -DEVICE_CHANNEL(ch5_ce_count, S_IRUGO | S_IWUSR, +DEVICE_CHANNEL(ch5_ce_count, S_IRUGO, channel_ce_count_show, NULL, 5); /* Total possible dynamic ce_count attribute file table */ --- linux-lts-raring-3.8.0.orig/drivers/nfc/pn544/pn544.c +++ linux-lts-raring-3.8.0/drivers/nfc/pn544/pn544.c @@ -675,11 +675,17 @@ static int pn544_hci_tm_send(struct nfc_hci_dev *hdev, struct sk_buff *skb) { + int r; + /* Set default false for multiple information chaining */ *skb_push(skb, 1) = 0; - return nfc_hci_send_event(hdev, PN544_RF_READER_NFCIP1_TARGET_GATE, - PN544_HCI_EVT_SND_DATA, skb->data, skb->len); + r = nfc_hci_send_event(hdev, PN544_RF_READER_NFCIP1_TARGET_GATE, + PN544_HCI_EVT_SND_DATA, skb->data, skb->len); + + kfree_skb(skb); + + return r; } static int pn544_hci_check_presence(struct nfc_hci_dev *hdev, @@ -714,35 +720,40 @@ return 0; } -static void pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, - u8 event, struct sk_buff *skb) +/* + * Returns: + * <= 0: driver handled the event, skb consumed + * 1: driver does not handle the event, please do standard processing + */ +static int pn544_hci_event_received(struct nfc_hci_dev *hdev, u8 gate, u8 event, + struct sk_buff *skb) { struct sk_buff *rgb_skb = NULL; - int r = 0; + int r; pr_debug("hci event %d", event); switch (event) { case PN544_HCI_EVT_ACTIVATED: - if (gate == PN544_RF_READER_NFCIP1_INITIATOR_GATE) - nfc_hci_target_discovered(hdev, gate); - else if (gate == PN544_RF_READER_NFCIP1_TARGET_GATE) { + if (gate == PN544_RF_READER_NFCIP1_INITIATOR_GATE) { + r = nfc_hci_target_discovered(hdev, gate); + } else if (gate == PN544_RF_READER_NFCIP1_TARGET_GATE) { r = nfc_hci_get_param(hdev, gate, PN544_DEP_ATR_REQ, - &rgb_skb); - + &rgb_skb); if (r < 0) goto exit; - nfc_tm_activated(hdev->ndev, NFC_PROTO_NFC_DEP_MASK, - NFC_COMM_PASSIVE, rgb_skb->data, - rgb_skb->len); + r = nfc_tm_activated(hdev->ndev, NFC_PROTO_NFC_DEP_MASK, + NFC_COMM_PASSIVE, rgb_skb->data, + rgb_skb->len); kfree_skb(rgb_skb); + } else { + r = -EINVAL; } - break; case PN544_HCI_EVT_DEACTIVATED: - nfc_hci_send_event(hdev, gate, - NFC_HCI_EVT_END_OPERATION, NULL, 0); + r = nfc_hci_send_event(hdev, gate, NFC_HCI_EVT_END_OPERATION, + NULL, 0); break; case PN544_HCI_EVT_RCV_DATA: if (skb->len < 2) { @@ -757,15 +768,15 @@ } skb_pull(skb, 2); - nfc_tm_data_received(hdev->ndev, skb); - - return; + return nfc_tm_data_received(hdev->ndev, skb); default: - break; + return 1; } exit: kfree_skb(skb); + + return r; } static struct nfc_hci_ops pn544_hci_ops = { @@ -822,7 +833,7 @@ NFC_PROTO_ISO14443_B_MASK | NFC_PROTO_NFC_DEP_MASK; - info->hdev = nfc_hci_allocate_device(&pn544_hci_ops, &init_data, + info->hdev = nfc_hci_allocate_device(&pn544_hci_ops, &init_data, 0, protocols, llc_name, phy_headroom + PN544_CMDS_HEADROOM, phy_tailroom, phy_payload); --- linux-lts-raring-3.8.0.orig/drivers/mtd/mtdchar.c +++ linux-lts-raring-3.8.0/drivers/mtd/mtdchar.c @@ -1159,45 +1159,17 @@ struct mtd_file_info *mfi = file->private_data; struct mtd_info *mtd = mfi->mtd; struct map_info *map = mtd->priv; - resource_size_t start, off; - unsigned long len, vma_len; /* This is broken because it assumes the MTD device is map-based and that mtd->priv is a valid struct map_info. It should be replaced with something that uses the mtd_get_unmapped_area() operation properly. */ if (0 /*mtd->type == MTD_RAM || mtd->type == MTD_ROM*/) { - off = get_vm_offset(vma); - start = map->phys; - len = PAGE_ALIGN((start & ~PAGE_MASK) + map->size); - start &= PAGE_MASK; - vma_len = get_vm_size(vma); - - /* Overflow in off+len? */ - if (vma_len + off < off) - return -EINVAL; - /* Does it fit in the mapping? */ - if (vma_len + off > len) - return -EINVAL; - - off += start; - /* Did that overflow? */ - if (off < start) - return -EINVAL; - if (set_vm_offset(vma, off) < 0) - return -EINVAL; - vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP; - #ifdef pgprot_noncached - if (file->f_flags & O_DSYNC || off >= __pa(high_memory)) + if (file->f_flags & O_DSYNC || map->phys >= __pa(high_memory)) vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); #endif - if (io_remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT, - vma->vm_end - vma->vm_start, - vma->vm_page_prot)) - return -EAGAIN; - - return 0; + return vm_iomap_memory(vma, map->phys, map->size); } return -ENOSYS; #else --- linux-lts-raring-3.8.0.orig/drivers/mtd/nand/nand_base.c +++ linux-lts-raring-3.8.0/drivers/mtd/nand/nand_base.c @@ -1527,6 +1527,14 @@ oobreadlen -= toread; } } + + if (chip->options & NAND_NEED_READRDY) { + /* Apply delay or wait for ready/busy pin */ + if (!chip->dev_ready) + udelay(chip->chip_delay); + else + nand_wait_ready(mtd); + } } else { memcpy(buf, chip->buffers->databuf + col, bytes); buf += bytes; @@ -1791,6 +1799,14 @@ len = min(len, readlen); buf = nand_transfer_oob(chip, buf, ops, len); + if (chip->options & NAND_NEED_READRDY) { + /* Apply delay or wait for ready/busy pin */ + if (!chip->dev_ready) + udelay(chip->chip_delay); + else + nand_wait_ready(mtd); + } + readlen -= len; if (!readlen) break; @@ -2794,7 +2810,9 @@ if (!chip->select_chip) chip->select_chip = nand_select_chip; - if (!chip->read_byte) + + /* If called twice, pointers that depend on busw may need to be reset */ + if (!chip->read_byte || chip->read_byte == nand_read_byte) chip->read_byte = busw ? nand_read_byte16 : nand_read_byte; if (!chip->read_word) chip->read_word = nand_read_word; @@ -2802,9 +2820,9 @@ chip->block_bad = nand_block_bad; if (!chip->block_markbad) chip->block_markbad = nand_default_block_markbad; - if (!chip->write_buf) + if (!chip->write_buf || chip->write_buf == nand_write_buf) chip->write_buf = busw ? nand_write_buf16 : nand_write_buf; - if (!chip->read_buf) + if (!chip->read_buf || chip->read_buf == nand_read_buf) chip->read_buf = busw ? nand_read_buf16 : nand_read_buf; if (!chip->scan_bbt) chip->scan_bbt = nand_default_bbt; --- linux-lts-raring-3.8.0.orig/drivers/mtd/nand/nand_ids.c +++ linux-lts-raring-3.8.0/drivers/mtd/nand/nand_ids.c @@ -22,49 +22,51 @@ * 512 512 Byte page size */ struct nand_flash_dev nand_flash_ids[] = { +#define SP_OPTIONS NAND_NEED_READRDY +#define SP_OPTIONS16 (SP_OPTIONS | NAND_BUSWIDTH_16) #ifdef CONFIG_MTD_NAND_MUSEUM_IDS - {"NAND 1MiB 5V 8-bit", 0x6e, 256, 1, 0x1000, 0}, - {"NAND 2MiB 5V 8-bit", 0x64, 256, 2, 0x1000, 0}, - {"NAND 4MiB 5V 8-bit", 0x6b, 512, 4, 0x2000, 0}, - {"NAND 1MiB 3,3V 8-bit", 0xe8, 256, 1, 0x1000, 0}, - {"NAND 1MiB 3,3V 8-bit", 0xec, 256, 1, 0x1000, 0}, - {"NAND 2MiB 3,3V 8-bit", 0xea, 256, 2, 0x1000, 0}, - {"NAND 4MiB 3,3V 8-bit", 0xd5, 512, 4, 0x2000, 0}, - {"NAND 4MiB 3,3V 8-bit", 0xe3, 512, 4, 0x2000, 0}, - {"NAND 4MiB 3,3V 8-bit", 0xe5, 512, 4, 0x2000, 0}, - {"NAND 8MiB 3,3V 8-bit", 0xd6, 512, 8, 0x2000, 0}, - - {"NAND 8MiB 1,8V 8-bit", 0x39, 512, 8, 0x2000, 0}, - {"NAND 8MiB 3,3V 8-bit", 0xe6, 512, 8, 0x2000, 0}, - {"NAND 8MiB 1,8V 16-bit", 0x49, 512, 8, 0x2000, NAND_BUSWIDTH_16}, - {"NAND 8MiB 3,3V 16-bit", 0x59, 512, 8, 0x2000, NAND_BUSWIDTH_16}, + {"NAND 1MiB 5V 8-bit", 0x6e, 256, 1, 0x1000, SP_OPTIONS}, + {"NAND 2MiB 5V 8-bit", 0x64, 256, 2, 0x1000, SP_OPTIONS}, + {"NAND 4MiB 5V 8-bit", 0x6b, 512, 4, 0x2000, SP_OPTIONS}, + {"NAND 1MiB 3,3V 8-bit", 0xe8, 256, 1, 0x1000, SP_OPTIONS}, + {"NAND 1MiB 3,3V 8-bit", 0xec, 256, 1, 0x1000, SP_OPTIONS}, + {"NAND 2MiB 3,3V 8-bit", 0xea, 256, 2, 0x1000, SP_OPTIONS}, + {"NAND 4MiB 3,3V 8-bit", 0xd5, 512, 4, 0x2000, SP_OPTIONS}, + {"NAND 4MiB 3,3V 8-bit", 0xe3, 512, 4, 0x2000, SP_OPTIONS}, + {"NAND 4MiB 3,3V 8-bit", 0xe5, 512, 4, 0x2000, SP_OPTIONS}, + {"NAND 8MiB 3,3V 8-bit", 0xd6, 512, 8, 0x2000, SP_OPTIONS}, + + {"NAND 8MiB 1,8V 8-bit", 0x39, 512, 8, 0x2000, SP_OPTIONS}, + {"NAND 8MiB 3,3V 8-bit", 0xe6, 512, 8, 0x2000, SP_OPTIONS}, + {"NAND 8MiB 1,8V 16-bit", 0x49, 512, 8, 0x2000, SP_OPTIONS16}, + {"NAND 8MiB 3,3V 16-bit", 0x59, 512, 8, 0x2000, SP_OPTIONS16}, #endif - {"NAND 16MiB 1,8V 8-bit", 0x33, 512, 16, 0x4000, 0}, - {"NAND 16MiB 3,3V 8-bit", 0x73, 512, 16, 0x4000, 0}, - {"NAND 16MiB 1,8V 16-bit", 0x43, 512, 16, 0x4000, NAND_BUSWIDTH_16}, - {"NAND 16MiB 3,3V 16-bit", 0x53, 512, 16, 0x4000, NAND_BUSWIDTH_16}, - - {"NAND 32MiB 1,8V 8-bit", 0x35, 512, 32, 0x4000, 0}, - {"NAND 32MiB 3,3V 8-bit", 0x75, 512, 32, 0x4000, 0}, - {"NAND 32MiB 1,8V 16-bit", 0x45, 512, 32, 0x4000, NAND_BUSWIDTH_16}, - {"NAND 32MiB 3,3V 16-bit", 0x55, 512, 32, 0x4000, NAND_BUSWIDTH_16}, - - {"NAND 64MiB 1,8V 8-bit", 0x36, 512, 64, 0x4000, 0}, - {"NAND 64MiB 3,3V 8-bit", 0x76, 512, 64, 0x4000, 0}, - {"NAND 64MiB 1,8V 16-bit", 0x46, 512, 64, 0x4000, NAND_BUSWIDTH_16}, - {"NAND 64MiB 3,3V 16-bit", 0x56, 512, 64, 0x4000, NAND_BUSWIDTH_16}, - - {"NAND 128MiB 1,8V 8-bit", 0x78, 512, 128, 0x4000, 0}, - {"NAND 128MiB 1,8V 8-bit", 0x39, 512, 128, 0x4000, 0}, - {"NAND 128MiB 3,3V 8-bit", 0x79, 512, 128, 0x4000, 0}, - {"NAND 128MiB 1,8V 16-bit", 0x72, 512, 128, 0x4000, NAND_BUSWIDTH_16}, - {"NAND 128MiB 1,8V 16-bit", 0x49, 512, 128, 0x4000, NAND_BUSWIDTH_16}, - {"NAND 128MiB 3,3V 16-bit", 0x74, 512, 128, 0x4000, NAND_BUSWIDTH_16}, - {"NAND 128MiB 3,3V 16-bit", 0x59, 512, 128, 0x4000, NAND_BUSWIDTH_16}, + {"NAND 16MiB 1,8V 8-bit", 0x33, 512, 16, 0x4000, SP_OPTIONS}, + {"NAND 16MiB 3,3V 8-bit", 0x73, 512, 16, 0x4000, SP_OPTIONS}, + {"NAND 16MiB 1,8V 16-bit", 0x43, 512, 16, 0x4000, SP_OPTIONS16}, + {"NAND 16MiB 3,3V 16-bit", 0x53, 512, 16, 0x4000, SP_OPTIONS16}, + + {"NAND 32MiB 1,8V 8-bit", 0x35, 512, 32, 0x4000, SP_OPTIONS}, + {"NAND 32MiB 3,3V 8-bit", 0x75, 512, 32, 0x4000, SP_OPTIONS}, + {"NAND 32MiB 1,8V 16-bit", 0x45, 512, 32, 0x4000, SP_OPTIONS16}, + {"NAND 32MiB 3,3V 16-bit", 0x55, 512, 32, 0x4000, SP_OPTIONS16}, + + {"NAND 64MiB 1,8V 8-bit", 0x36, 512, 64, 0x4000, SP_OPTIONS}, + {"NAND 64MiB 3,3V 8-bit", 0x76, 512, 64, 0x4000, SP_OPTIONS}, + {"NAND 64MiB 1,8V 16-bit", 0x46, 512, 64, 0x4000, SP_OPTIONS16}, + {"NAND 64MiB 3,3V 16-bit", 0x56, 512, 64, 0x4000, SP_OPTIONS16}, + + {"NAND 128MiB 1,8V 8-bit", 0x78, 512, 128, 0x4000, SP_OPTIONS}, + {"NAND 128MiB 1,8V 8-bit", 0x39, 512, 128, 0x4000, SP_OPTIONS}, + {"NAND 128MiB 3,3V 8-bit", 0x79, 512, 128, 0x4000, SP_OPTIONS}, + {"NAND 128MiB 1,8V 16-bit", 0x72, 512, 128, 0x4000, SP_OPTIONS16}, + {"NAND 128MiB 1,8V 16-bit", 0x49, 512, 128, 0x4000, SP_OPTIONS16}, + {"NAND 128MiB 3,3V 16-bit", 0x74, 512, 128, 0x4000, SP_OPTIONS16}, + {"NAND 128MiB 3,3V 16-bit", 0x59, 512, 128, 0x4000, SP_OPTIONS16}, - {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0}, + {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, SP_OPTIONS}, /* * These are the new chips with large page size. The pagesize and the --- linux-lts-raring-3.8.0.orig/drivers/input/touchscreen/egalax_ts.c +++ linux-lts-raring-3.8.0/drivers/input/touchscreen/egalax_ts.c @@ -216,7 +216,7 @@ input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, EGALAX_MAX_X, 0, 0); input_set_abs_params(input_dev, - ABS_MT_POSITION_X, 0, EGALAX_MAX_Y, 0, 0); + ABS_MT_POSITION_Y, 0, EGALAX_MAX_Y, 0, 0); input_mt_init_slots(input_dev, MAX_SUPPORT_POINTS, 0); input_set_drvdata(input_dev, ts); --- linux-lts-raring-3.8.0.orig/drivers/input/touchscreen/cyttsp_core.c +++ linux-lts-raring-3.8.0/drivers/input/touchscreen/cyttsp_core.c @@ -133,7 +133,7 @@ memcpy(bl_cmd, bl_command, sizeof(bl_command)); if (ts->pdata->bl_keys) memcpy(&bl_cmd[sizeof(bl_command) - CY_NUM_BL_KEYS], - ts->pdata->bl_keys, sizeof(bl_command)); + ts->pdata->bl_keys, CY_NUM_BL_KEYS); error = ttsp_write_block_data(ts, CY_REG_BASE, sizeof(bl_cmd), bl_cmd); --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/cypress_ps2.c +++ linux-lts-raring-3.8.0/drivers/input/mouse/cypress_ps2.c @@ -0,0 +1,750 @@ +/* + * Cypress Trackpad PS/2 mouse driver + * + * Copyright (c) 2012 Cypress Semiconductor Corporation. + * + * Author: + * Dudley Du + * + * Additional contributors include: + * Kamal Mostafa + * Kyle Fazzari + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published by + * the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cypress_ps2.h" + +#undef CYTP_DEBUG_VERBOSE /* define this and DEBUG for more verbose dump */ + +static void cypress_set_packet_size(struct psmouse *psmouse, unsigned int n) +{ + struct cytp_data *cytp = psmouse->private; + cytp->pkt_size = n; +} + +static const unsigned char cytp_rate[] = {10, 20, 40, 60, 100, 200}; +static const unsigned char cytp_resolution[] = {0x00, 0x01, 0x02, 0x03}; + +static int cypress_ps2_sendbyte(struct psmouse *psmouse, int value) +{ + struct ps2dev *ps2dev = &psmouse->ps2dev; + + if (ps2_sendbyte(ps2dev, value & 0xff, CYTP_CMD_TIMEOUT) < 0) { + psmouse_dbg(psmouse, + "sending command 0x%02x failed, resp 0x%02x\n", + value & 0xff, ps2dev->nak); + if (ps2dev->nak == CYTP_PS2_RETRY) + return CYTP_PS2_RETRY; + else + return CYTP_PS2_ERROR; + } + +#ifdef CYTP_DEBUG_VERBOSE + psmouse_dbg(psmouse, "sending command 0x%02x succeeded, resp 0xfa\n", + value & 0xff); +#endif + + return 0; +} + +static int cypress_ps2_ext_cmd(struct psmouse *psmouse, unsigned short cmd, + unsigned char data) +{ + struct ps2dev *ps2dev = &psmouse->ps2dev; + int tries = CYTP_PS2_CMD_TRIES; + int rc; + + ps2_begin_command(ps2dev); + + do { + /* + * Send extension command byte (0xE8 or 0xF3). + * If sending the command fails, send recovery command + * to make the device return to the ready state. + */ + rc = cypress_ps2_sendbyte(psmouse, cmd & 0xff); + if (rc == CYTP_PS2_RETRY) { + rc = cypress_ps2_sendbyte(psmouse, 0x00); + if (rc == CYTP_PS2_RETRY) + rc = cypress_ps2_sendbyte(psmouse, 0x0a); + } + if (rc == CYTP_PS2_ERROR) + continue; + + rc = cypress_ps2_sendbyte(psmouse, data); + if (rc == CYTP_PS2_RETRY) + rc = cypress_ps2_sendbyte(psmouse, data); + if (rc == CYTP_PS2_ERROR) + continue; + else + break; + } while (--tries > 0); + + ps2_end_command(ps2dev); + + return rc; +} + +static int cypress_ps2_read_cmd_status(struct psmouse *psmouse, + unsigned char cmd, + unsigned char *param) +{ + int rc; + struct ps2dev *ps2dev = &psmouse->ps2dev; + enum psmouse_state old_state; + int pktsize; + + ps2_begin_command(&psmouse->ps2dev); + + old_state = psmouse->state; + psmouse->state = PSMOUSE_CMD_MODE; + psmouse->pktcnt = 0; + + pktsize = (cmd == CYTP_CMD_READ_TP_METRICS) ? 8 : 3; + memset(param, 0, pktsize); + + rc = cypress_ps2_sendbyte(psmouse, 0xe9); + if (rc < 0) + goto out; + + wait_event_timeout(ps2dev->wait, + (psmouse->pktcnt >= pktsize), + msecs_to_jiffies(CYTP_CMD_TIMEOUT)); + + memcpy(param, psmouse->packet, pktsize); + + psmouse_dbg(psmouse, "Command 0x%02x response data (0x): %*ph\n", + cmd, pktsize, param); + +out: + psmouse->state = old_state; + psmouse->pktcnt = 0; + + ps2_end_command(&psmouse->ps2dev); + + return rc; +} + +static bool cypress_verify_cmd_state(struct psmouse *psmouse, + unsigned char cmd, unsigned char *param) +{ + bool rate_match = false; + bool resolution_match = false; + int i; + + /* callers will do further checking. */ + if (cmd == CYTP_CMD_READ_CYPRESS_ID || + cmd == CYTP_CMD_STANDARD_MODE || + cmd == CYTP_CMD_READ_TP_METRICS) + return true; + + if ((~param[0] & DFLT_RESP_BITS_VALID) == DFLT_RESP_BITS_VALID && + (param[0] & DFLT_RESP_BIT_MODE) == DFLT_RESP_STREAM_MODE) { + for (i = 0; i < sizeof(cytp_resolution); i++) + if (cytp_resolution[i] == param[1]) + resolution_match = true; + + for (i = 0; i < sizeof(cytp_rate); i++) + if (cytp_rate[i] == param[2]) + rate_match = true; + + if (resolution_match && rate_match) + return true; + } + + psmouse_dbg(psmouse, "verify cmd state failed.\n"); + return false; +} + +static int cypress_send_ext_cmd(struct psmouse *psmouse, unsigned char cmd, + unsigned char *param) +{ + int tries = CYTP_PS2_CMD_TRIES; + int rc; + + psmouse_dbg(psmouse, "send extension cmd 0x%02x, [%d %d %d %d]\n", + cmd, DECODE_CMD_AA(cmd), DECODE_CMD_BB(cmd), + DECODE_CMD_CC(cmd), DECODE_CMD_DD(cmd)); + + do { + cypress_ps2_ext_cmd(psmouse, + PSMOUSE_CMD_SETRES, DECODE_CMD_DD(cmd)); + cypress_ps2_ext_cmd(psmouse, + PSMOUSE_CMD_SETRES, DECODE_CMD_CC(cmd)); + cypress_ps2_ext_cmd(psmouse, + PSMOUSE_CMD_SETRES, DECODE_CMD_BB(cmd)); + cypress_ps2_ext_cmd(psmouse, + PSMOUSE_CMD_SETRES, DECODE_CMD_AA(cmd)); + + rc = cypress_ps2_read_cmd_status(psmouse, cmd, param); + if (rc) + continue; + + if (cypress_verify_cmd_state(psmouse, cmd, param)) + return 0; + + } while (--tries > 0); + + return -EIO; +} + +int cypress_detect(struct psmouse *psmouse, bool set_properties) +{ + unsigned char param[3]; + + if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param)) + return -ENODEV; + + /* Check for Cypress Trackpad signature bytes: 0x33 0xCC */ + if (param[0] != 0x33 || param[1] != 0xCC) + return -ENODEV; + + if (set_properties) { + psmouse->vendor = "Cypress"; + psmouse->name = "Trackpad"; + } + + return 0; +} + +static int cypress_read_fw_version(struct psmouse *psmouse) +{ + struct cytp_data *cytp = psmouse->private; + unsigned char param[3]; + + if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param)) + return -ENODEV; + + /* Check for Cypress Trackpad signature bytes: 0x33 0xCC */ + if (param[0] != 0x33 || param[1] != 0xCC) + return -ENODEV; + + cytp->fw_version = param[2] & FW_VERSION_MASX; + cytp->tp_metrics_supported = (param[2] & TP_METRICS_MASK) ? 1 : 0; + + /* + * Trackpad fw_version 11 (in Dell XPS12) yields a bogus response to + * CYTP_CMD_READ_TP_METRICS so do not try to use it. LP: #1103594. + */ + if (cytp->fw_version >= 11) + cytp->tp_metrics_supported = 0; + + psmouse_dbg(psmouse, "cytp->fw_version = %d\n", cytp->fw_version); + psmouse_dbg(psmouse, "cytp->tp_metrics_supported = %d\n", + cytp->tp_metrics_supported); + + return 0; +} + +static int cypress_read_tp_metrics(struct psmouse *psmouse) +{ + struct cytp_data *cytp = psmouse->private; + unsigned char param[8]; + + /* set default values for tp metrics. */ + cytp->tp_width = CYTP_DEFAULT_WIDTH; + cytp->tp_high = CYTP_DEFAULT_HIGH; + cytp->tp_max_abs_x = CYTP_ABS_MAX_X; + cytp->tp_max_abs_y = CYTP_ABS_MAX_Y; + cytp->tp_min_pressure = CYTP_MIN_PRESSURE; + cytp->tp_max_pressure = CYTP_MAX_PRESSURE; + cytp->tp_res_x = cytp->tp_max_abs_x / cytp->tp_width; + cytp->tp_res_y = cytp->tp_max_abs_y / cytp->tp_high; + + if (!cytp->tp_metrics_supported) + return 0; + + memset(param, 0, sizeof(param)); + if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_TP_METRICS, param) == 0) { + /* Update trackpad parameters. */ + cytp->tp_max_abs_x = (param[1] << 8) | param[0]; + cytp->tp_max_abs_y = (param[3] << 8) | param[2]; + cytp->tp_min_pressure = param[4]; + cytp->tp_max_pressure = param[5]; + } + + if (!cytp->tp_max_pressure || + cytp->tp_max_pressure < cytp->tp_min_pressure || + !cytp->tp_width || !cytp->tp_high || + !cytp->tp_max_abs_x || + cytp->tp_max_abs_x < cytp->tp_width || + !cytp->tp_max_abs_y || + cytp->tp_max_abs_y < cytp->tp_high) + return -EINVAL; + + cytp->tp_res_x = cytp->tp_max_abs_x / cytp->tp_width; + cytp->tp_res_y = cytp->tp_max_abs_y / cytp->tp_high; + +#ifdef CYTP_DEBUG_VERBOSE + psmouse_dbg(psmouse, "Dump trackpad hardware configuration as below:\n"); + psmouse_dbg(psmouse, "cytp->tp_width = %d\n", cytp->tp_width); + psmouse_dbg(psmouse, "cytp->tp_high = %d\n", cytp->tp_high); + psmouse_dbg(psmouse, "cytp->tp_max_abs_x = %d\n", cytp->tp_max_abs_x); + psmouse_dbg(psmouse, "cytp->tp_max_abs_y = %d\n", cytp->tp_max_abs_y); + psmouse_dbg(psmouse, "cytp->tp_min_pressure = %d\n", cytp->tp_min_pressure); + psmouse_dbg(psmouse, "cytp->tp_max_pressure = %d\n", cytp->tp_max_pressure); + psmouse_dbg(psmouse, "cytp->tp_res_x = %d\n", cytp->tp_res_x); + psmouse_dbg(psmouse, "cytp->tp_res_y = %d\n", cytp->tp_res_y); + + psmouse_dbg(psmouse, "tp_type_APA = %d\n", + (param[6] & TP_METRICS_BIT_APA) ? 1 : 0); + psmouse_dbg(psmouse, "tp_type_MTG = %d\n", + (param[6] & TP_METRICS_BIT_MTG) ? 1 : 0); + psmouse_dbg(psmouse, "tp_palm = %d\n", + (param[6] & TP_METRICS_BIT_PALM) ? 1 : 0); + psmouse_dbg(psmouse, "tp_stubborn = %d\n", + (param[6] & TP_METRICS_BIT_STUBBORN) ? 1 : 0); + psmouse_dbg(psmouse, "tp_1f_jitter = %d\n", + (param[6] & TP_METRICS_BIT_1F_JITTER) >> 2); + psmouse_dbg(psmouse, "tp_2f_jitter = %d\n", + (param[6] & TP_METRICS_BIT_2F_JITTER) >> 4); + psmouse_dbg(psmouse, "tp_1f_spike = %d\n", + param[7] & TP_METRICS_BIT_1F_SPIKE); + psmouse_dbg(psmouse, "tp_2f_spike = %d\n", + (param[7] & TP_METRICS_BIT_2F_SPIKE) >> 2); + psmouse_dbg(psmouse, "tp_abs_packet_format_set = %d\n", + (param[7] & TP_METRICS_BIT_ABS_PKT_FORMAT_SET) >> 4); +#endif + + return 0; +} + +static int cypress_query_hardware(struct psmouse *psmouse) +{ + int ret; + + ret = cypress_read_fw_version(psmouse); + if (ret) + return ret; + + ret = cypress_read_tp_metrics(psmouse); + if (ret) + return ret; + + return 0; +} + +static int cypress_set_absolute_mode(struct psmouse *psmouse) +{ + struct cytp_data *cytp = psmouse->private; + unsigned char param[3]; + + if (cypress_send_ext_cmd(psmouse, CYTP_CMD_ABS_WITH_PRESSURE_MODE, param) < 0) + return -1; + + cytp->mode = (cytp->mode & ~CYTP_BIT_ABS_REL_MASK) + | CYTP_BIT_ABS_PRESSURE; + cypress_set_packet_size(psmouse, 5); + + return 0; +} + +/* + * Reset trackpad device. + * This is also the default mode when trackpad powered on. + */ +static void cypress_reset(struct psmouse *psmouse) +{ + struct cytp_data *cytp = psmouse->private; + + cytp->mode = 0; + + psmouse_reset(psmouse); +} + +static int cypress_set_input_params(struct input_dev *input, + struct cytp_data *cytp) +{ + int ret; + + if (!cytp->tp_res_x || !cytp->tp_res_y) + return -EINVAL; + + __set_bit(EV_ABS, input->evbit); + input_set_abs_params(input, ABS_X, 0, cytp->tp_max_abs_x, 0, 0); + input_set_abs_params(input, ABS_Y, 0, cytp->tp_max_abs_y, 0, 0); + input_set_abs_params(input, ABS_PRESSURE, + cytp->tp_min_pressure, cytp->tp_max_pressure, 0, 0); + input_set_abs_params(input, ABS_TOOL_WIDTH, 0, 255, 0, 0); + + /* finger position */ + input_set_abs_params(input, ABS_MT_POSITION_X, 0, cytp->tp_max_abs_x, 0, 0); + input_set_abs_params(input, ABS_MT_POSITION_Y, 0, cytp->tp_max_abs_y, 0, 0); + input_set_abs_params(input, ABS_MT_PRESSURE, 0, 255, 0, 0); + + ret = input_mt_init_slots(input, CYTP_MAX_MT_SLOTS, + INPUT_MT_DROP_UNUSED|INPUT_MT_TRACK); + 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); + + input_abs_set_res(input, ABS_MT_POSITION_X, cytp->tp_res_x); + input_abs_set_res(input, ABS_MT_POSITION_Y, cytp->tp_res_y); + + __set_bit(BTN_TOUCH, input->keybit); + __set_bit(BTN_TOOL_FINGER, input->keybit); + __set_bit(BTN_TOOL_DOUBLETAP, input->keybit); + __set_bit(BTN_TOOL_TRIPLETAP, input->keybit); + __set_bit(BTN_TOOL_QUADTAP, input->keybit); + __set_bit(BTN_TOOL_QUINTTAP, input->keybit); + + __clear_bit(EV_REL, input->evbit); + __clear_bit(REL_X, input->relbit); + __clear_bit(REL_Y, input->relbit); + + __set_bit(INPUT_PROP_BUTTONPAD, input->propbit); + __set_bit(EV_KEY, input->evbit); + __set_bit(BTN_LEFT, input->keybit); + __set_bit(BTN_RIGHT, input->keybit); + __set_bit(BTN_MIDDLE, input->keybit); + + input_set_drvdata(input, cytp); + + return 0; +} + +static int cypress_get_finger_count(unsigned char header_byte) +{ + unsigned char bits6_7; + int finger_count; + + bits6_7 = header_byte >> 6; + finger_count = bits6_7 & 0x03; + + if (finger_count == 1) + return 1; + + if (header_byte & ABS_HSCROLL_BIT) { + /* HSCROLL gets added on to 0 finger count. */ + switch (finger_count) { + case 0: return 4; + case 2: return 5; + default: + /* Invalid contact (e.g. palm). Ignore it. */ + return 0; + } + } + + return finger_count; +} + + +static int cypress_parse_packet(struct psmouse *psmouse, + struct cytp_data *cytp, struct cytp_report_data *report_data) +{ + unsigned char *packet = psmouse->packet; + unsigned char header_byte = packet[0]; + int contact_cnt; + + memset(report_data, 0, sizeof(struct cytp_report_data)); + + contact_cnt = cypress_get_finger_count(header_byte); + + if (contact_cnt < 0) + return -EINVAL; + + report_data->contact_cnt = contact_cnt; + + report_data->tap = (header_byte & ABS_MULTIFINGER_TAP) ? 1 : 0; + + if (report_data->contact_cnt == 1) { + report_data->contacts[0].x = + ((packet[1] & 0x70) << 4) | packet[2]; + report_data->contacts[0].y = + ((packet[1] & 0x07) << 8) | packet[3]; + if (cytp->mode & CYTP_BIT_ABS_PRESSURE) + report_data->contacts[0].z = packet[4]; + + } else if (report_data->contact_cnt >= 2) { + report_data->contacts[0].x = + ((packet[1] & 0x70) << 4) | packet[2]; + report_data->contacts[0].y = + ((packet[1] & 0x07) << 8) | packet[3]; + if (cytp->mode & CYTP_BIT_ABS_PRESSURE) + report_data->contacts[0].z = packet[4]; + + report_data->contacts[1].x = + ((packet[5] & 0xf0) << 4) | packet[6]; + report_data->contacts[1].y = + ((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; + report_data->right = (header_byte & BTN_RIGHT_BIT) ? 1 : 0; + + /* + * This is only true if one of the mouse buttons were tapped. Make + * sure it doesn't turn into a click. The regular tap-to-click + * functionality will handle that on its own. If we don't do this, + * disabling tap-to-click won't affect the mouse button zones. + */ + if (report_data->tap) + report_data->left = 0; + +#ifdef CYTP_DEBUG_VERBOSE + { + int i; + int n = report_data->contact_cnt; + psmouse_dbg(psmouse, "Dump parsed report data as below:\n"); + psmouse_dbg(psmouse, "contact_cnt = %d\n", + report_data->contact_cnt); + if (n > CYTP_MAX_MT_SLOTS) + n = CYTP_MAX_MT_SLOTS; + for (i = 0; i < n; i++) + psmouse_dbg(psmouse, "contacts[%d] = {%d, %d, %d}\n", i, + report_data->contacts[i].x, + report_data->contacts[i].y, + report_data->contacts[i].z); + psmouse_dbg(psmouse, "left = %d\n", report_data->left); + psmouse_dbg(psmouse, "right = %d\n", report_data->right); + psmouse_dbg(psmouse, "middle = %d\n", report_data->middle); + } +#endif + + return 0; +} + +static void cypress_process_packet(struct psmouse *psmouse, bool zero_pkt) +{ + int i; + struct input_dev *input = psmouse->dev; + struct cytp_data *cytp = psmouse->private; + struct cytp_report_data report_data; + struct cytp_contact *contact; + struct input_mt_pos pos[CYTP_MAX_MT_SLOTS]; + int slots[CYTP_MAX_MT_SLOTS]; + int n; + + if (cypress_parse_packet(psmouse, cytp, &report_data)) + return; + + n = report_data.contact_cnt; + + if (n > CYTP_MAX_MT_SLOTS) + n = CYTP_MAX_MT_SLOTS; + + for (i = 0; i < n; i++) { + contact = &report_data.contacts[i]; + pos[i].x = contact->x; + pos[i].y = contact->y; + } + + input_mt_assign_slots(input, slots, pos, n); + + for (i = 0; i < n; i++) { + contact = &report_data.contacts[i]; + input_mt_slot(input, slots[i]); + input_mt_report_slot_state(input, MT_TOOL_FINGER, true); + input_report_abs(input, ABS_MT_POSITION_X, contact->x); + input_report_abs(input, ABS_MT_POSITION_Y, contact->y); + input_report_abs(input, ABS_MT_PRESSURE, contact->z); + } + + input_mt_sync_frame(input); + + input_mt_report_finger_count(input, report_data.contact_cnt); + + input_report_key(input, BTN_LEFT, report_data.left); + input_report_key(input, BTN_RIGHT, report_data.right); + input_report_key(input, BTN_MIDDLE, report_data.middle); + + input_sync(input); +} + +static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse) +{ + int contact_cnt; + int index = psmouse->pktcnt - 1; + unsigned char *packet = psmouse->packet; + struct cytp_data *cytp = psmouse->private; + + if (index < 0 || index > cytp->pkt_size) + return PSMOUSE_BAD_DATA; + + if (index == 0 && (packet[0] & 0xfc) == 0) { + /* call packet process for reporting finger leave. */ + cypress_process_packet(psmouse, 1); + return PSMOUSE_FULL_PACKET; + } + + /* + * Perform validation (and adjust packet size) based only on the + * first byte; allow all further bytes through. + */ + if (index != 0) + return PSMOUSE_GOOD_DATA; + + /* + * If absolute/relative mode bit has not been set yet, just pass + * the byte through. + */ + if ((cytp->mode & CYTP_BIT_ABS_REL_MASK) == 0) + return PSMOUSE_GOOD_DATA; + + if ((packet[0] & 0x08) == 0x08) + return PSMOUSE_BAD_DATA; + + contact_cnt = cypress_get_finger_count(packet[0]); + + if (contact_cnt < 0) + return PSMOUSE_BAD_DATA; + + if (cytp->mode & CYTP_BIT_ABS_NO_PRESSURE) + cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4); + else + cypress_set_packet_size(psmouse, contact_cnt == 2 ? 8 : 5); + + return PSMOUSE_GOOD_DATA; +} + +static psmouse_ret_t cypress_protocol_handler(struct psmouse *psmouse) +{ + struct cytp_data *cytp = psmouse->private; + + if (psmouse->pktcnt >= cytp->pkt_size) { + cypress_process_packet(psmouse, 0); + return PSMOUSE_FULL_PACKET; + } + + return cypress_validate_byte(psmouse); +} + +static void cypress_set_rate(struct psmouse *psmouse, unsigned int rate) +{ + struct cytp_data *cytp = psmouse->private; + + if (rate >= 80) { + psmouse->rate = 80; + cytp->mode |= CYTP_BIT_HIGH_RATE; + } else { + psmouse->rate = 40; + cytp->mode &= ~CYTP_BIT_HIGH_RATE; + } + + ps2_command(&psmouse->ps2dev, (unsigned char *)&psmouse->rate, + PSMOUSE_CMD_SETRATE); +} + +static void cypress_disconnect(struct psmouse *psmouse) +{ + cypress_reset(psmouse); + kfree(psmouse->private); + psmouse->private = NULL; +} + +static int cypress_reconnect(struct psmouse *psmouse) +{ + int tries = CYTP_PS2_CMD_TRIES; + int rc; + + do { + cypress_reset(psmouse); + rc = cypress_detect(psmouse, false); + } while (rc && (--tries > 0)); + + if (rc) { + psmouse_err(psmouse, "Reconnect: unable to detect trackpad.\n"); + return -1; + } + + if (cypress_set_absolute_mode(psmouse)) { + psmouse_err(psmouse, "Reconnect: Unable to initialize Cypress absolute mode.\n"); + return -1; + } + + return 0; +} + +int cypress_init(struct psmouse *psmouse) +{ + struct cytp_data *cytp; + + cytp = (struct cytp_data *)kzalloc(sizeof(struct cytp_data), GFP_KERNEL); + psmouse->private = (void *)cytp; + if (cytp == NULL) + return -ENOMEM; + + cypress_reset(psmouse); + + psmouse->pktsize = 8; + + if (cypress_query_hardware(psmouse)) { + psmouse_err(psmouse, "Unable to query Trackpad hardware.\n"); + goto err_exit; + } + + if (cypress_set_absolute_mode(psmouse)) { + psmouse_err(psmouse, "init: Unable to initialize Cypress absolute mode.\n"); + goto err_exit; + } + + if (cypress_set_input_params(psmouse->dev, cytp) < 0) { + psmouse_err(psmouse, "init: Unable to set input params.\n"); + goto err_exit; + } + + psmouse->model = 1; + psmouse->protocol_handler = cypress_protocol_handler; + psmouse->set_rate = cypress_set_rate; + psmouse->disconnect = cypress_disconnect; + psmouse->reconnect = cypress_reconnect; + psmouse->cleanup = cypress_reset; + psmouse->resync_time = 0; + + return 0; + +err_exit: + /* + * Reset Cypress Trackpad as a standard mouse. Then + * let psmouse driver commmunicating with it as default PS2 mouse. + */ + cypress_reset(psmouse); + + psmouse->private = NULL; + kfree(cytp); + + return -1; +} + +bool cypress_supported(void) +{ + return true; +} --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/psmouse-base.c +++ linux-lts-raring-3.8.0/drivers/input/mouse/psmouse-base.c @@ -34,6 +34,7 @@ #include "touchkit_ps2.h" #include "elantech.h" #include "sentelic.h" +#include "cypress_ps2.h" #define DRIVER_DESC "PS/2 mouse driver" @@ -759,6 +760,28 @@ } /* + * Try Cypress Trackpad. + * Must try it before Finger Sensing Pad because Finger Sensing Pad probe + * upsets some modules of Cypress Trackpads. + */ + if (max_proto > PSMOUSE_IMEX && + cypress_detect(psmouse, set_properties) == 0) { + if (cypress_supported()) { + if (cypress_init(psmouse) == 0) + return PSMOUSE_CYPRESS; + + /* + * Finger Sensing Pad probe upsets some modules of + * Cypress Trackpad, must avoid Finger Sensing Pad + * probe if Cypress Trackpad device detected. + */ + return PSMOUSE_PS2; + } + + max_proto = PSMOUSE_IMEX; + } + +/* * Try ALPS TouchPad */ if (max_proto > PSMOUSE_IMEX) { @@ -896,6 +919,15 @@ .alias = "thinkps", .detect = thinking_detect, }, +#ifdef CONFIG_MOUSE_PS2_CYPRESS + { + .type = PSMOUSE_CYPRESS, + .name = "CyPS/2", + .alias = "cypress", + .detect = cypress_detect, + .init = cypress_init, + }, +#endif { .type = PSMOUSE_GENPS, .name = "GenPS/2", --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/Kconfig +++ linux-lts-raring-3.8.0/drivers/input/mouse/Kconfig @@ -68,6 +68,16 @@ If unsure, say Y. +config MOUSE_PS2_CYPRESS + bool "Cypress PS/2 mouse protocol extension" if EXPERT + default y + depends on MOUSE_PS2 + help + Say Y here if you have a Cypress PS/2 Trackpad connected to + your system. + + If unsure, say Y. + config MOUSE_PS2_LIFEBOOK bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EXPERT default y --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/synaptics.h +++ linux-lts-raring-3.8.0/drivers/input/mouse/synaptics.h @@ -81,6 +81,7 @@ */ #define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */ #define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */ +#define SYN_CAP_CLICKPAD2BTN2(ex0c) ((ex0c) & 0x200000) /* 2-button ClickPad */ #define SYN_CAP_MAX_DIMENSIONS(ex0c) ((ex0c) & 0x020000) #define SYN_CAP_MIN_DIMENSIONS(ex0c) ((ex0c) & 0x002000) #define SYN_CAP_ADV_GESTURE(ex0c) ((ex0c) & 0x080000) --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/elantech.c +++ linux-lts-raring-3.8.0/drivers/input/mouse/elantech.c @@ -694,18 +694,18 @@ static int elantech_packet_check_v4(struct psmouse *psmouse) { unsigned char *packet = psmouse->packet; + unsigned char packet_type = packet[3] & 0x03; - if ((packet[0] & 0x0c) == 0x04 && - (packet[3] & 0x1f) == 0x11) + switch (packet_type) { + case 0: + return PACKET_V4_STATUS; + + case 1: return PACKET_V4_HEAD; - if ((packet[0] & 0x0c) == 0x04 && - (packet[3] & 0x1f) == 0x12) + case 2: return PACKET_V4_MOTION; - - if ((packet[0] & 0x0c) == 0x04 && - (packet[3] & 0x1f) == 0x10) - return PACKET_V4_STATUS; + } return PACKET_UNKNOWN; } @@ -1282,6 +1282,7 @@ etd->hw_version = 3; break; case 6: + case 7: etd->hw_version = 4; break; default: --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/Makefile +++ linux-lts-raring-3.8.0/drivers/input/mouse/Makefile @@ -32,3 +32,4 @@ psmouse-$(CONFIG_MOUSE_PS2_SENTELIC) += sentelic.o psmouse-$(CONFIG_MOUSE_PS2_TRACKPOINT) += trackpoint.o psmouse-$(CONFIG_MOUSE_PS2_TOUCHKIT) += touchkit_ps2.o +psmouse-$(CONFIG_MOUSE_PS2_CYPRESS) += cypress_ps2.o --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/synaptics.c +++ linux-lts-raring-3.8.0/drivers/input/mouse/synaptics.c @@ -1293,7 +1293,9 @@ /* Clickpads report only left button */ __clear_bit(BTN_RIGHT, dev->keybit); __clear_bit(BTN_MIDDLE, dev->keybit); - } + } else if (SYN_CAP_CLICKPAD2BTN(priv->ext_cap_0c) || + SYN_CAP_CLICKPAD2BTN2(priv->ext_cap_0c)) + __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit); } static ssize_t synaptics_show_disable_gesture(struct psmouse *psmouse, @@ -1355,6 +1357,7 @@ { struct synaptics_data *priv = psmouse->private; struct synaptics_data old_priv = *priv; + unsigned char param[2]; int retry = 0; int error; @@ -1370,6 +1373,7 @@ */ ssleep(1); } + ps2_command(&psmouse->ps2dev, param, PSMOUSE_CMD_GETID); error = synaptics_detect(psmouse, 0); } while (error && ++retry < 3); --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/cypress_ps2.h +++ linux-lts-raring-3.8.0/drivers/input/mouse/cypress_ps2.h @@ -0,0 +1,202 @@ +#ifndef _CYPRESS_PS2_H +#define _CYPRESS_PS2_H + +#include "psmouse.h" + +#define CMD_BITS_MASK 0x03 +#define COMPOSIT(x, s) (((x) & CMD_BITS_MASK) << (s)) + +#define ENCODE_CMD(aa, bb, cc, dd) \ + (COMPOSIT((aa), 6) | COMPOSIT((bb), 4) | COMPOSIT((cc), 2) | COMPOSIT((dd), 0)) +#define CYTP_CMD_ABS_NO_PRESSURE_MODE ENCODE_CMD(0, 1, 0, 0) +#define CYTP_CMD_ABS_WITH_PRESSURE_MODE ENCODE_CMD(0, 1, 0, 1) +#define CYTP_CMD_SMBUS_MODE ENCODE_CMD(0, 1, 1, 0) +#define CYTP_CMD_STANDARD_MODE ENCODE_CMD(0, 2, 0, 0) /* not implemented yet. */ +#define CYTP_CMD_CYPRESS_REL_MODE ENCODE_CMD(1, 1, 1, 1) /* not implemented yet. */ +#define CYTP_CMD_READ_CYPRESS_ID ENCODE_CMD(0, 0, 0, 0) +#define CYTP_CMD_READ_TP_METRICS ENCODE_CMD(0, 0, 0, 1) +#define CYTP_CMD_SET_HSCROLL_WIDTH(w) ENCODE_CMD(1, 1, 0, (w)) +#define CYTP_CMD_SET_HSCROLL_MASK ENCODE_CMD(1, 1, 0, 0) +#define CYTP_CMD_SET_VSCROLL_WIDTH(w) ENCODE_CMD(1, 2, 0, (w)) +#define CYTP_CMD_SET_VSCROLL_MASK ENCODE_CMD(1, 2, 0, 0) +#define CYTP_CMD_SET_PALM_GEOMETRY(e) ENCODE_CMD(1, 2, 1, (e)) +#define CYTP_CMD_PALM_GEMMETRY_MASK ENCODE_CMD(1, 2, 1, 0) +#define CYTP_CMD_SET_PALM_SENSITIVITY(s) ENCODE_CMD(1, 2, 2, (s)) +#define CYTP_CMD_PALM_SENSITIVITY_MASK ENCODE_CMD(1, 2, 2, 0) +#define CYTP_CMD_SET_MOUSE_SENSITIVITY(s) ENCODE_CMD(1, 3, ((s) >> 2), (s)) +#define CYTP_CMD_MOUSE_SENSITIVITY_MASK ENCODE_CMD(1, 3, 0, 0) +#define CYTP_CMD_REQUEST_BASELINE_STATUS ENCODE_CMD(2, 0, 0, 1) +#define CYTP_CMD_REQUEST_RECALIBRATION ENCODE_CMD(2, 0, 0, 3) + +#define DECODE_CMD_AA(x) (((x) >> 6) & CMD_BITS_MASK) +#define DECODE_CMD_BB(x) (((x) >> 4) & CMD_BITS_MASK) +#define DECODE_CMD_CC(x) (((x) >> 2) & CMD_BITS_MASK) +#define DECODE_CMD_DD(x) ((x) & CMD_BITS_MASK) + +/* Cypress trackpad working mode. */ +#define CYTP_BIT_ABS_PRESSURE (1 << 3) +#define CYTP_BIT_ABS_NO_PRESSURE (1 << 2) +#define CYTP_BIT_CYPRESS_REL (1 << 1) +#define CYTP_BIT_STANDARD_REL (1 << 0) +#define CYTP_BIT_REL_MASK (CYTP_BIT_CYPRESS_REL | CYTP_BIT_STANDARD_REL) +#define CYTP_BIT_ABS_MASK (CYTP_BIT_ABS_PRESSURE | CYTP_BIT_ABS_NO_PRESSURE) +#define CYTP_BIT_ABS_REL_MASK (CYTP_BIT_ABS_MASK | CYTP_BIT_REL_MASK) + +#define CYTP_BIT_HIGH_RATE (1 << 4) +/* + * report mode bit is set, firmware working in Remote Mode. + * report mode bit is cleared, firmware working in Stream Mode. + */ +#define CYTP_BIT_REPORT_MODE (1 << 5) + +/* scrolling width values for set HSCROLL and VSCROLL width command. */ +#define SCROLL_WIDTH_NARROW 1 +#define SCROLL_WIDTH_NORMAL 2 +#define SCROLL_WIDTH_WIDE 3 + +#define PALM_GEOMETRY_ENABLE 1 +#define PALM_GEOMETRY_DISABLE 0 + +#define TP_METRICS_MASK 0x80 +#define FW_VERSION_MASX 0x7f +#define FW_VER_HIGH_MASK 0x70 +#define FW_VER_LOW_MASK 0x0f + +/* Times to retry a ps2_command and millisecond delay between tries. */ +#define CYTP_PS2_CMD_TRIES 3 +#define CYTP_PS2_CMD_DELAY 500 + +/* time out for PS/2 command only in milliseconds. */ +#define CYTP_CMD_TIMEOUT 200 +#define CYTP_DATA_TIMEOUT 30 + +#define CYTP_EXT_CMD 0xe8 +#define CYTP_PS2_RETRY 0xfe +#define CYTP_PS2_ERROR 0xfc + +#define CYTP_RESP_RETRY 0x01 +#define CYTP_RESP_ERROR 0xfe + + +#define CYTP_105001_WIDTH 97 /* Dell XPS 13 */ +#define CYTP_105001_HIGH 59 +#define CYTP_DEFAULT_WIDTH (CYTP_105001_WIDTH) +#define CYTP_DEFAULT_HIGH (CYTP_105001_HIGH) + +#define CYTP_ABS_MAX_X 1600 +#define CYTP_ABS_MAX_Y 900 +#define CYTP_MAX_PRESSURE 255 +#define CYTP_MIN_PRESSURE 0 + +/* header byte bits of relative package. */ +#define BTN_LEFT_BIT 0x01 +#define BTN_RIGHT_BIT 0x02 +#define BTN_MIDDLE_BIT 0x04 +#define REL_X_SIGN_BIT 0x10 +#define REL_Y_SIGN_BIT 0x20 + +/* header byte bits of absolute package. */ +#define ABS_VSCROLL_BIT 0x10 +#define ABS_HSCROLL_BIT 0x20 +#define ABS_MULTIFINGER_TAP 0x04 +#define ABS_EDGE_MOTION_MASK 0x80 + +#define DFLT_RESP_BITS_VALID 0x88 /* SMBus bit should not be set. */ +#define DFLT_RESP_SMBUS_BIT 0x80 +#define DFLT_SMBUS_MODE 0x80 +#define DFLT_PS2_MODE 0x00 +#define DFLT_RESP_BIT_MODE 0x40 +#define DFLT_RESP_REMOTE_MODE 0x40 +#define DFLT_RESP_STREAM_MODE 0x00 +#define DFLT_RESP_BIT_REPORTING 0x20 +#define DFLT_RESP_BIT_SCALING 0x10 + +#define TP_METRICS_BIT_PALM 0x80 +#define TP_METRICS_BIT_STUBBORN 0x40 +#define TP_METRICS_BIT_2F_JITTER 0x30 +#define TP_METRICS_BIT_1F_JITTER 0x0c +#define TP_METRICS_BIT_APA 0x02 +#define TP_METRICS_BIT_MTG 0x01 +#define TP_METRICS_BIT_ABS_PKT_FORMAT_SET 0xf0 +#define TP_METRICS_BIT_2F_SPIKE 0x0c +#define TP_METRICS_BIT_1F_SPIKE 0x03 + +/* bits of first byte response of E9h-Status Request command. */ +#define RESP_BTN_RIGHT_BIT 0x01 +#define RESP_BTN_MIDDLE_BIT 0x02 +#define RESP_BTN_LEFT_BIT 0x04 +#define RESP_SCALING_BIT 0x10 +#define RESP_ENABLE_BIT 0x20 +#define RESP_REMOTE_BIT 0x40 +#define RESP_SMBUS_BIT 0x80 + +/* + * 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; + int y; + int z; /* also named as touch pressure. */ +}; + +/* The structure of Cypress Trackpad event data. */ +struct cytp_report_data { + int contact_cnt; + struct cytp_contact contacts[CYTP_MAX_MT_SLOTS]; + unsigned int left:1; + unsigned int right:1; + unsigned int middle:1; + unsigned int tap:1; /* multi-finger tap detected. */ +}; + +/* The structure of Cypress Trackpad device private data. */ +struct cytp_data { + int fw_version; + + int pkt_size; + int mode; + + int tp_min_pressure; + int tp_max_pressure; + int tp_width; /* X direction physical size in mm. */ + int tp_high; /* Y direction physical size in mm. */ + int tp_max_abs_x; /* Max X absolute units that can be reported. */ + int tp_max_abs_y; /* Max Y absolute units that can be reported. */ + + int tp_res_x; /* X resolution in units/mm. */ + int tp_res_y; /* Y resolution in units/mm. */ + + int tp_metrics_supported; +}; + + +#ifdef CONFIG_MOUSE_PS2_CYPRESS +int cypress_detect(struct psmouse *psmouse, bool set_properties); +int cypress_init(struct psmouse *psmouse); +bool cypress_supported(void); +#else +inline int cypress_detect(struct psmouse *psmouse, bool set_properties) +{ + return -ENOSYS; +} +inline int cypress_init(struct psmouse *psmouse) +{ + return -ENOSYS; +} +inline bool cypress_supported(void) +{ + return 0; +} +#endif /* CONFIG_MOUSE_PS2_CYPRESS */ + +#endif /* _CYPRESS_PS2_H */ --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/alps.c +++ linux-lts-raring-3.8.0/drivers/input/mouse/alps.c @@ -27,14 +27,11 @@ /* * Definitions for ALPS version 3 and 4 command mode protocol */ -#define ALPS_V3_X_MAX 2000 -#define ALPS_V3_Y_MAX 1400 - -#define ALPS_BITMAP_X_BITS 15 -#define ALPS_BITMAP_Y_BITS 11 - #define ALPS_CMD_NIBBLE_10 0x01f2 +#define ALPS_REG_BASE_RUSHMORE 0xc2c0 +#define ALPS_REG_BASE_PINNACLE 0x0000 + static const struct alps_nibble_commands alps_v3_nibble_commands[] = { { PSMOUSE_CMD_SETPOLL, 0x00 }, /* 0 */ { PSMOUSE_CMD_RESET_DIS, 0x00 }, /* 1 */ @@ -109,11 +106,14 @@ { { 0x73, 0x02, 0x50 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_FOUR_BUTTONS }, /* Dell Vostro 1400 */ { { 0x52, 0x01, 0x14 }, 0x00, ALPS_PROTO_V2, 0xff, 0xff, ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Toshiba Tecra A11-11L */ - { { 0x73, 0x02, 0x64 }, 0x9b, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT }, - { { 0x73, 0x02, 0x64 }, 0x9d, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT }, { { 0x73, 0x02, 0x64 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 }, }; +static void alps_set_abs_params_st(struct alps_data *priv, + struct input_dev *dev1); +static void alps_set_abs_params_mt(struct alps_data *priv, + struct input_dev *dev1); + /* * XXX - this entry is suspicious. First byte has zero lower nibble, * which is what a normal mouse would report. Also, the value 0x0e @@ -122,10 +122,10 @@ /* Packet formats are described in Documentation/input/alps.txt */ -static bool alps_is_valid_first_byte(const struct alps_model_info *model, +static bool alps_is_valid_first_byte(struct alps_data *priv, unsigned char data) { - return (data & model->mask0) == model->byte0; + return (data & priv->mask0) == priv->byte0; } static void alps_report_buttons(struct psmouse *psmouse, @@ -158,14 +158,13 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse) { struct alps_data *priv = psmouse->private; - const struct alps_model_info *model = priv->i; unsigned char *packet = psmouse->packet; struct input_dev *dev = psmouse->dev; struct input_dev *dev2 = priv->dev2; int x, y, z, ges, fin, left, right, middle; int back = 0, forward = 0; - if (model->proto_version == ALPS_PROTO_V1) { + if (priv->proto_version == ALPS_PROTO_V1) { left = packet[2] & 0x10; right = packet[2] & 0x08; middle = 0; @@ -181,12 +180,12 @@ z = packet[5]; } - if (model->flags & ALPS_FW_BK_1) { + if (priv->flags & ALPS_FW_BK_1) { back = packet[0] & 0x10; forward = packet[2] & 4; } - if (model->flags & ALPS_FW_BK_2) { + if (priv->flags & ALPS_FW_BK_2) { back = packet[3] & 4; forward = packet[2] & 4; if ((middle = forward && back)) @@ -196,7 +195,7 @@ ges = packet[2] & 1; fin = packet[2] & 2; - if ((model->flags & ALPS_DUALPOINT) && z == 127) { + if ((priv->flags & ALPS_DUALPOINT) && z == 127) { input_report_rel(dev2, REL_X, (x > 383 ? (x - 768) : x)); input_report_rel(dev2, REL_Y, -(y > 255 ? (y - 512) : y)); @@ -239,15 +238,15 @@ input_report_abs(dev, ABS_PRESSURE, z); input_report_key(dev, BTN_TOOL_FINGER, z > 0); - if (model->flags & ALPS_WHEEL) + if (priv->flags & ALPS_WHEEL) input_report_rel(dev, REL_WHEEL, ((packet[2] << 1) & 0x08) - ((packet[0] >> 4) & 0x07)); - if (model->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) { + if (priv->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) { input_report_key(dev, BTN_FORWARD, forward); input_report_key(dev, BTN_BACK, back); } - if (model->flags & ALPS_FOUR_BUTTONS) { + if (priv->flags & ALPS_FOUR_BUTTONS) { input_report_key(dev, BTN_0, packet[2] & 4); input_report_key(dev, BTN_1, packet[0] & 0x10); input_report_key(dev, BTN_2, packet[3] & 4); @@ -267,7 +266,8 @@ * These points are returned in x1, y1, x2, and y2 when the return value * is greater than 0. */ -static int alps_process_bitmap(unsigned int x_map, unsigned int y_map, +static int alps_process_bitmap(struct alps_data *priv, + unsigned int x_map, unsigned int y_map, int *x1, int *y1, int *x2, int *y2) { struct alps_bitmap_point { @@ -309,7 +309,7 @@ * y bitmap is reversed for what we need (lower positions are in * higher bits), so we process from the top end. */ - y_map = y_map << (sizeof(y_map) * BITS_PER_BYTE - ALPS_BITMAP_Y_BITS); + y_map = y_map << (sizeof(y_map) * BITS_PER_BYTE - priv->y_bits); prev_bit = 0; point = &y_low; for (i = 0; y_map != 0; i++, y_map <<= 1) { @@ -355,16 +355,18 @@ } } - *x1 = (ALPS_V3_X_MAX * (2 * x_low.start_bit + x_low.num_bits - 1)) / - (2 * (ALPS_BITMAP_X_BITS - 1)); - *y1 = (ALPS_V3_Y_MAX * (2 * y_low.start_bit + y_low.num_bits - 1)) / - (2 * (ALPS_BITMAP_Y_BITS - 1)); + *x1 = (priv->x_max * (2 * x_low.start_bit + x_low.num_bits - 1)) / + (2 * (priv->x_bits - 1)); + *y1 = (priv->y_max * (2 * y_low.start_bit + y_low.num_bits - 1)) / + (2 * (priv->y_bits - 1)); if (fingers > 1) { - *x2 = (ALPS_V3_X_MAX * (2 * x_high.start_bit + x_high.num_bits - 1)) / - (2 * (ALPS_BITMAP_X_BITS - 1)); - *y2 = (ALPS_V3_Y_MAX * (2 * y_high.start_bit + y_high.num_bits - 1)) / - (2 * (ALPS_BITMAP_Y_BITS - 1)); + *x2 = (priv->x_max * + (2 * x_high.start_bit + x_high.num_bits - 1)) / + (2 * (priv->x_bits - 1)); + *y2 = (priv->y_max * + (2 * y_high.start_bit + y_high.num_bits - 1)) / + (2 * (priv->y_bits - 1)); } return fingers; @@ -448,17 +450,80 @@ return; } +static void alps_decode_buttons_v3(struct alps_fields *f, unsigned char *p) +{ + f->left = !!(p[3] & 0x01); + f->right = !!(p[3] & 0x02); + f->middle = !!(p[3] & 0x04); + + f->ts_left = !!(p[3] & 0x10); + f->ts_right = !!(p[3] & 0x20); + f->ts_middle = !!(p[3] & 0x40); +} + +static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p) +{ + f->first_mp = !!(p[4] & 0x40); + f->is_mp = !!(p[0] & 0x40); + + f->fingers = (p[5] & 0x3) + 1; + f->x_map = ((p[4] & 0x7e) << 8) | + ((p[1] & 0x7f) << 2) | + ((p[0] & 0x30) >> 4); + f->y_map = ((p[3] & 0x70) << 4) | + ((p[2] & 0x7f) << 1) | + (p[4] & 0x01); + + f->x = ((p[1] & 0x7f) << 4) | ((p[4] & 0x30) >> 2) | + ((p[0] & 0x30) >> 4); + f->y = ((p[2] & 0x7f) << 4) | (p[4] & 0x0f); + f->z = p[5] & 0x7f; + + alps_decode_buttons_v3(f, p); +} + +static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p) +{ + alps_decode_pinnacle(f, p); + + f->x_map |= (p[5] & 0x10) << 11; + f->y_map |= (p[5] & 0x20) << 6; +} + +static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p) +{ + f->first_mp = !!(p[0] & 0x02); + f->is_mp = !!(p[0] & 0x20); + + f->fingers = ((p[0] & 0x6) >> 1 | + (p[0] & 0x10) >> 2); + f->x_map = ((p[2] & 0x60) >> 5) | + ((p[4] & 0x7f) << 2) | + ((p[5] & 0x7f) << 9) | + ((p[3] & 0x07) << 16) | + ((p[3] & 0x70) << 15) | + ((p[0] & 0x01) << 22); + f->y_map = (p[1] & 0x7f) | + ((p[2] & 0x1f) << 7); + + f->x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7)); + f->y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3)); + f->z = (p[0] & 4) ? 0 : p[5] & 0x7f; + + alps_decode_buttons_v3(f, p); +} + static void alps_process_touchpad_packet_v3(struct psmouse *psmouse) { struct alps_data *priv = psmouse->private; unsigned char *packet = psmouse->packet; struct input_dev *dev = psmouse->dev; struct input_dev *dev2 = priv->dev2; - int x, y, z; - int left, right, middle; int x1 = 0, y1 = 0, x2 = 0, y2 = 0; int fingers = 0, bmap_fingers; - unsigned int x_bitmap, y_bitmap; + struct alps_fields f; + + priv->decode_fields(&f, packet); /* * There's no single feature of touchpad position and bitmap packets @@ -473,16 +538,10 @@ * packet. Check for this, and when it happens process the * position packet as usual. */ - if (packet[0] & 0x40) { - fingers = (packet[5] & 0x3) + 1; - x_bitmap = ((packet[4] & 0x7e) << 8) | - ((packet[1] & 0x7f) << 2) | - ((packet[0] & 0x30) >> 4); - y_bitmap = ((packet[3] & 0x70) << 4) | - ((packet[2] & 0x7f) << 1) | - (packet[4] & 0x01); - - bmap_fingers = alps_process_bitmap(x_bitmap, y_bitmap, + if (f.is_mp) { + fingers = f.fingers; + bmap_fingers = alps_process_bitmap(priv, + f.x_map, f.y_map, &x1, &y1, &x2, &y2); /* @@ -493,7 +552,7 @@ fingers = bmap_fingers; /* Now process position packet */ - packet = priv->multi_data; + priv->decode_fields(&f, priv->multi_data); } else { priv->multi_packet = 0; } @@ -507,10 +566,10 @@ * out misidentified bitmap packets, we reject anything with this * bit set. */ - if (packet[0] & 0x40) + if (f.is_mp) return; - if (!priv->multi_packet && (packet[4] & 0x40)) { + if (!priv->multi_packet && f.first_mp) { priv->multi_packet = 1; memcpy(priv->multi_data, packet, sizeof(priv->multi_data)); return; @@ -518,22 +577,13 @@ priv->multi_packet = 0; - left = packet[3] & 0x01; - right = packet[3] & 0x02; - middle = packet[3] & 0x04; - - x = ((packet[1] & 0x7f) << 4) | ((packet[4] & 0x30) >> 2) | - ((packet[0] & 0x30) >> 4); - y = ((packet[2] & 0x7f) << 4) | (packet[4] & 0x0f); - z = packet[5] & 0x7f; - /* * Sometimes the hardware sends a single packet with z = 0 * in the middle of a stream. Real releases generate packets * with x, y, and z all zero, so these seem to be flukes. * Ignore them. */ - if (x && y && !z) + if (f.x && f.y && !f.z) return; /* @@ -541,12 +591,12 @@ * to rely on ST data. */ if (!fingers) { - x1 = x; - y1 = y; - fingers = z > 0 ? 1 : 0; + x1 = f.x; + y1 = f.y; + fingers = f.z > 0 ? 1 : 0; } - if (z >= 64) + if (f.z >= 64) input_report_key(dev, BTN_TOUCH, 1); else input_report_key(dev, BTN_TOUCH, 0); @@ -555,26 +605,22 @@ input_mt_report_finger_count(dev, fingers); - input_report_key(dev, BTN_LEFT, left); - input_report_key(dev, BTN_RIGHT, right); - input_report_key(dev, BTN_MIDDLE, middle); - - if (z > 0) { - input_report_abs(dev, ABS_X, x); - input_report_abs(dev, ABS_Y, y); + input_report_key(dev, BTN_LEFT, f.left); + input_report_key(dev, BTN_RIGHT, f.right); + input_report_key(dev, BTN_MIDDLE, f.middle); + + if (f.z > 0) { + input_report_abs(dev, ABS_X, f.x); + input_report_abs(dev, ABS_Y, f.y); } - input_report_abs(dev, ABS_PRESSURE, z); + input_report_abs(dev, ABS_PRESSURE, f.z); input_sync(dev); if (!(priv->quirks & ALPS_QUIRK_TRACKSTICK_BUTTONS)) { - left = packet[3] & 0x10; - right = packet[3] & 0x20; - middle = packet[3] & 0x40; - - input_report_key(dev2, BTN_LEFT, left); - input_report_key(dev2, BTN_RIGHT, right); - input_report_key(dev2, BTN_MIDDLE, middle); + input_report_key(dev2, BTN_LEFT, f.ts_left); + input_report_key(dev2, BTN_RIGHT, f.ts_right); + input_report_key(dev2, BTN_MIDDLE, f.ts_middle); input_sync(dev2); } } @@ -639,7 +685,7 @@ ((priv->multi_data[3] & 0x1f) << 5) | (priv->multi_data[1] & 0x1f); - fingers = alps_process_bitmap(x_bitmap, y_bitmap, + fingers = alps_process_bitmap(priv, x_bitmap, y_bitmap, &x1, &y1, &x2, &y2); /* Store MT data.*/ @@ -696,25 +742,6 @@ input_sync(dev); } -static void alps_process_packet(struct psmouse *psmouse) -{ - struct alps_data *priv = psmouse->private; - const struct alps_model_info *model = priv->i; - - switch (model->proto_version) { - case ALPS_PROTO_V1: - case ALPS_PROTO_V2: - alps_process_packet_v1_v2(psmouse); - break; - case ALPS_PROTO_V3: - alps_process_packet_v3(psmouse); - break; - case ALPS_PROTO_V4: - alps_process_packet_v4(psmouse); - break; - } -} - static void alps_report_bare_ps2_packet(struct psmouse *psmouse, unsigned char packet[], bool report_buttons) @@ -765,14 +792,14 @@ if (((psmouse->packet[3] | psmouse->packet[4] | psmouse->packet[5]) & 0x80) || - (!alps_is_valid_first_byte(priv->i, psmouse->packet[6]))) { + (!alps_is_valid_first_byte(priv, psmouse->packet[6]))) { psmouse_dbg(psmouse, "refusing packet %4ph (suspected interleaved ps/2)\n", psmouse->packet + 3); return PSMOUSE_BAD_DATA; } - alps_process_packet(psmouse); + priv->process_packet(psmouse); /* Continue with the next packet */ psmouse->packet[0] = psmouse->packet[6]; @@ -816,6 +843,7 @@ static void alps_flush_packet(unsigned long data) { struct psmouse *psmouse = (struct psmouse *)data; + struct alps_data *priv = psmouse->private; serio_pause_rx(psmouse->ps2dev.serio); @@ -833,7 +861,7 @@ "refusing packet %3ph (suspected interleaved ps/2)\n", psmouse->packet + 3); } else { - alps_process_packet(psmouse); + priv->process_packet(psmouse); } psmouse->pktcnt = 0; } @@ -844,7 +872,6 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse) { struct alps_data *priv = psmouse->private; - const struct alps_model_info *model = priv->i; if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */ if (psmouse->pktcnt == 3) { @@ -857,20 +884,21 @@ /* Check for PS/2 packet stuffed in the middle of ALPS packet. */ - if ((model->flags & ALPS_PS2_INTERLEAVED) && + if ((priv->flags & ALPS_PS2_INTERLEAVED) && psmouse->pktcnt >= 4 && (psmouse->packet[3] & 0x0f) == 0x0f) { return alps_handle_interleaved_ps2(psmouse); } - if (!alps_is_valid_first_byte(model, psmouse->packet[0])) { + if (!alps_is_valid_first_byte(priv, psmouse->packet[0])) { psmouse_dbg(psmouse, "refusing packet[0] = %x (mask0 = %x, byte0 = %x)\n", - psmouse->packet[0], model->mask0, model->byte0); + psmouse->packet[0], priv->mask0, priv->byte0); return PSMOUSE_BAD_DATA; } /* Bytes 2 - pktsize should have 0 in the highest bit */ - if (psmouse->pktcnt >= 2 && psmouse->pktcnt <= psmouse->pktsize && + if (priv->proto_version != ALPS_PROTO_V5 && + psmouse->pktcnt >= 2 && psmouse->pktcnt <= psmouse->pktsize && (psmouse->packet[psmouse->pktcnt - 1] & 0x80)) { psmouse_dbg(psmouse, "refusing packet[%i] = %x\n", psmouse->pktcnt - 1, @@ -879,7 +907,7 @@ } if (psmouse->pktcnt == psmouse->pktsize) { - alps_process_packet(psmouse); + priv->process_packet(psmouse); return PSMOUSE_FULL_PACKET; } @@ -967,29 +995,44 @@ return __alps_command_mode_write_reg(psmouse, value); } -static int alps_enter_command_mode(struct psmouse *psmouse, - unsigned char *resp) +static int alps_rpt_cmd(struct psmouse *psmouse, int init_command, + int repeated_command, unsigned char *param) { - unsigned char param[4]; struct ps2dev *ps2dev = &psmouse->ps2dev; - if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) || - ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { + param[0] = 0; + if (init_command && ps2_command(ps2dev, param, init_command)) + return -EIO; + + if (ps2_command(ps2dev, NULL, repeated_command) || + ps2_command(ps2dev, NULL, repeated_command) || + ps2_command(ps2dev, NULL, repeated_command)) + return -EIO; + + param[0] = param[1] = param[2] = 0xff; + if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) + return -EIO; + + psmouse_dbg(psmouse, "%2.2X report: %2.2x %2.2x %2.2x\n", + repeated_command, param[0], param[1], param[2]); + return 0; +} + +static int alps_enter_command_mode(struct psmouse *psmouse) +{ + unsigned char param[4]; + + if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_RESET_WRAP, param)) { psmouse_err(psmouse, "failed to enter command mode\n"); return -1; } - if (param[0] != 0x88 && param[1] != 0x07) { + if ((param[0] != 0x88 || (param[1] != 0x07 && param[1] != 0x08)) && + param[0] != 0x73) { psmouse_dbg(psmouse, - "unknown response while entering command mode: %2.2x %2.2x %2.2x\n", - param[0], param[1], param[2]); + "unknown response while entering command mode\n"); return -1; } - - if (resp) - *resp = param[2]; return 0; } @@ -1001,99 +1044,6 @@ return 0; } -static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int *version) -{ - struct ps2dev *ps2dev = &psmouse->ps2dev; - static const unsigned char rates[] = { 0, 10, 20, 40, 60, 80, 100, 200 }; - unsigned char param[4]; - const struct alps_model_info *model = NULL; - int i; - - /* - * First try "E6 report". - * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed. - * The bits 0-2 of the first byte will be 1s if some buttons are - * pressed. - */ - param[0] = 0; - if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11)) - return NULL; - - param[0] = param[1] = param[2] = 0xff; - if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) - return NULL; - - psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x", - param[0], param[1], param[2]); - - if ((param[0] & 0xf8) != 0 || param[1] != 0 || - (param[2] != 10 && param[2] != 100)) - return NULL; - - /* - * Now try "E7 report". Allowed responses are in - * alps_model_data[].signature - */ - param[0] = 0; - if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21)) - return NULL; - - param[0] = param[1] = param[2] = 0xff; - if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) - return NULL; - - psmouse_dbg(psmouse, "E7 report: %2.2x %2.2x %2.2x", - param[0], param[1], param[2]); - - if (version) { - for (i = 0; i < ARRAY_SIZE(rates) && param[2] != rates[i]; i++) - /* empty */; - *version = (param[0] << 8) | (param[1] << 4) | i; - } - - for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) { - if (!memcmp(param, alps_model_data[i].signature, - sizeof(alps_model_data[i].signature))) { - model = alps_model_data + i; - break; - } - } - - if (model && model->proto_version > ALPS_PROTO_V2) { - /* - * Need to check command mode response to identify - * model - */ - model = NULL; - if (alps_enter_command_mode(psmouse, param)) { - psmouse_warn(psmouse, - "touchpad failed to enter command mode\n"); - } else { - for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) { - if (alps_model_data[i].proto_version > ALPS_PROTO_V2 && - alps_model_data[i].command_mode_resp == param[0]) { - model = alps_model_data + i; - break; - } - } - alps_exit_command_mode(psmouse); - - if (!model) - psmouse_dbg(psmouse, - "Unknown command mode response %2.2x\n", - param[0]); - } - } - - return model; -} - /* * For DualPoint devices select the device that should respond to * subsequent commands. It looks like glidepad is behind stickpointer, @@ -1137,18 +1087,10 @@ static int alps_get_status(struct psmouse *psmouse, char *param) { - struct ps2dev *ps2dev = &psmouse->ps2dev; - /* Get status: 0xF5 0xF5 0xF5 0xE9 */ - if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE) || - ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) + if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_DISABLE, param)) return -1; - psmouse_dbg(psmouse, "Status: %2.2x %2.2x %2.2x", - param[0], param[1], param[2]); - return 0; } @@ -1190,16 +1132,16 @@ unsigned char buf[sizeof(psmouse->packet)]; bool poll_failed; - if (priv->i->flags & ALPS_PASS) + if (priv->flags & ALPS_PASS) alps_passthrough_mode_v2(psmouse, true); poll_failed = ps2_command(&psmouse->ps2dev, buf, PSMOUSE_CMD_POLL | (psmouse->pktsize << 8)) < 0; - if (priv->i->flags & ALPS_PASS) + if (priv->flags & ALPS_PASS) alps_passthrough_mode_v2(psmouse, false); - if (poll_failed || (buf[0] & priv->i->mask0) != priv->i->byte0) + if (poll_failed || (buf[0] & priv->mask0) != priv->byte0) return -1; if ((psmouse->badbyte & 0xc8) == 0x08) { @@ -1217,9 +1159,8 @@ static int alps_hw_init_v1_v2(struct psmouse *psmouse) { struct alps_data *priv = psmouse->private; - const struct alps_model_info *model = priv->i; - if ((model->flags & ALPS_PASS) && + if ((priv->flags & ALPS_PASS) && alps_passthrough_mode_v2(psmouse, true)) { return -1; } @@ -1234,7 +1175,7 @@ return -1; } - if ((model->flags & ALPS_PASS) && + if ((priv->flags & ALPS_PASS) && alps_passthrough_mode_v2(psmouse, false)) { return -1; } @@ -1249,26 +1190,31 @@ } /* - * Enable or disable passthrough mode to the trackstick. Must be in - * command mode when calling this function. + * Enable or disable passthrough mode to the trackstick. */ -static int alps_passthrough_mode_v3(struct psmouse *psmouse, bool enable) +static int alps_passthrough_mode_v3(struct psmouse *psmouse, + int reg_base, bool enable) { - int reg_val; + int reg_val, ret = -1; - reg_val = alps_command_mode_read_reg(psmouse, 0x0008); - if (reg_val == -1) + if (alps_enter_command_mode(psmouse)) return -1; + reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x0008); + if (reg_val == -1) + goto error; + if (enable) reg_val |= 0x01; else reg_val &= ~0x01; - if (__alps_command_mode_write_reg(psmouse, reg_val)) - return -1; + ret = __alps_command_mode_write_reg(psmouse, reg_val); - return 0; +error: + if (alps_exit_command_mode(psmouse)) + ret = -1; + return ret; } /* Must be in command mode when calling this function */ @@ -1287,73 +1233,102 @@ return 0; } -static int alps_hw_init_v3(struct psmouse *psmouse) +static int alps_probe_trackstick_v3(struct psmouse *psmouse, int reg_base) { - struct alps_data *priv = psmouse->private; - struct ps2dev *ps2dev = &psmouse->ps2dev; - int reg_val; - unsigned char param[4]; + int ret = -EIO, reg_val; - priv->nibble_commands = alps_v3_nibble_commands; - priv->addr_command = PSMOUSE_CMD_RESET_WRAP; - - if (alps_enter_command_mode(psmouse, NULL)) + if (alps_enter_command_mode(psmouse)) goto error; - /* Check for trackstick */ - reg_val = alps_command_mode_read_reg(psmouse, 0x0008); + reg_val = alps_command_mode_read_reg(psmouse, reg_base + 0x08); if (reg_val == -1) goto error; - if (reg_val & 0x80) { - if (alps_passthrough_mode_v3(psmouse, true)) - goto error; - if (alps_exit_command_mode(psmouse)) - goto error; + + /* bit 7: trackstick is present */ + ret = reg_val & 0x80 ? 0 : -ENODEV; + +error: + alps_exit_command_mode(psmouse); + return ret; +} + +static int alps_setup_trackstick_v3(struct psmouse *psmouse, int reg_base) +{ + struct ps2dev *ps2dev = &psmouse->ps2dev; + int ret = 0; + unsigned char param[4]; + + if (alps_passthrough_mode_v3(psmouse, reg_base, true)) + return -EIO; + + /* + * E7 report for the trackstick + * + * There have been reports of failures to seem to trace back + * to the above trackstick check failing. When these occur + * this E7 report fails, so when that happens we continue + * with the assumption that there isn't a trackstick after + * all. + */ + if (alps_rpt_cmd(psmouse, 0, PSMOUSE_CMD_SETSCALE21, param)) { + psmouse_warn(psmouse, "trackstick E7 report failed\n"); + ret = -ENODEV; + } else { + psmouse_dbg(psmouse, + "trackstick E7 report: %2.2x %2.2x %2.2x\n", + param[0], param[1], param[2]); /* - * E7 report for the trackstick - * - * There have been reports of failures to seem to trace back - * to the above trackstick check failing. When these occur - * this E7 report fails, so when that happens we continue - * with the assumption that there isn't a trackstick after - * all. + * Not sure what this does, but it is absolutely + * essential. Without it, the touchpad does not + * work at all and the trackstick just emits normal + * PS/2 packets. */ - param[0] = 0x64; - if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE21) || - ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) { - psmouse_warn(psmouse, "trackstick E7 report failed\n"); - } else { - psmouse_dbg(psmouse, - "trackstick E7 report: %2.2x %2.2x %2.2x\n", - param[0], param[1], param[2]); - - /* - * Not sure what this does, but it is absolutely - * essential. Without it, the touchpad does not - * work at all and the trackstick just emits normal - * PS/2 packets. - */ - if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || - ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || - alps_command_mode_send_nibble(psmouse, 0x9) || - alps_command_mode_send_nibble(psmouse, 0x4)) { - psmouse_err(psmouse, - "Error sending magic E6 sequence\n"); - goto error_passthrough; - } + if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || + ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || + ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSCALE11) || + alps_command_mode_send_nibble(psmouse, 0x9) || + alps_command_mode_send_nibble(psmouse, 0x4)) { + psmouse_err(psmouse, + "Error sending magic E6 sequence\n"); + ret = -EIO; + goto error; } - if (alps_enter_command_mode(psmouse, NULL)) - goto error_passthrough; - if (alps_passthrough_mode_v3(psmouse, false)) - goto error; + /* + * This ensures the trackstick packets are in the format + * supported by this driver. If bit 1 isn't set the packet + * format is different. + */ + if (alps_enter_command_mode(psmouse) || + alps_command_mode_write_reg(psmouse, + reg_base + 0x08, 0x82) || + alps_exit_command_mode(psmouse)) + ret = -EIO; } - if (alps_absolute_mode_v3(psmouse)) { +error: + if (alps_passthrough_mode_v3(psmouse, reg_base, false)) + ret = -EIO; + + return ret; +} + +static int alps_hw_init_v3(struct psmouse *psmouse) +{ + struct ps2dev *ps2dev = &psmouse->ps2dev; + int reg_val; + unsigned char param[4]; + + reg_val = alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE); + if (reg_val == -EIO) + goto error; + if (reg_val == 0 && + alps_setup_trackstick_v3(psmouse, ALPS_REG_BASE_PINNACLE) == -EIO) + goto error; + + if (alps_enter_command_mode(psmouse) || + alps_absolute_mode_v3(psmouse)) { psmouse_err(psmouse, "Failed to enter absolute mode\n"); goto error; } @@ -1390,14 +1365,6 @@ if (alps_command_mode_write_reg(psmouse, 0x0162, 0x04)) goto error; - /* - * This ensures the trackstick packets are in the format - * supported by this driver. If bit 1 isn't set the packet - * format is different. - */ - if (alps_command_mode_write_reg(psmouse, 0x0008, 0x82)) - goto error; - alps_exit_command_mode(psmouse); /* Set rate and enable data reporting */ @@ -1410,10 +1377,6 @@ return 0; -error_passthrough: - /* Something failed while in passthrough mode, so try to get out */ - if (!alps_enter_command_mode(psmouse, NULL)) - alps_passthrough_mode_v3(psmouse, false); error: /* * Leaving the touchpad in command mode will essentially render @@ -1424,6 +1387,50 @@ return -1; } +static int alps_hw_init_rushmore_v3(struct psmouse *psmouse) +{ + struct alps_data *priv = psmouse->private; + struct ps2dev *ps2dev = &psmouse->ps2dev; + int reg_val, ret = -1; + + if (priv->flags & ALPS_DUALPOINT) { + reg_val = alps_setup_trackstick_v3(psmouse, + ALPS_REG_BASE_RUSHMORE); + if (reg_val == -EIO) + goto error; + if (reg_val == -ENODEV) + priv->flags &= ~ALPS_DUALPOINT; + } + + if (alps_enter_command_mode(psmouse) || + alps_command_mode_read_reg(psmouse, 0xc2d9) == -1 || + alps_command_mode_write_reg(psmouse, 0xc2cb, 0x00)) + goto error; + + reg_val = alps_command_mode_read_reg(psmouse, 0xc2c6); + if (reg_val == -1) + goto error; + if (__alps_command_mode_write_reg(psmouse, reg_val & 0xfd)) + goto error; + + if (alps_command_mode_write_reg(psmouse, 0xc2c9, 0x64)) + goto error; + + /* enter absolute mode */ + reg_val = alps_command_mode_read_reg(psmouse, 0xc2c4); + if (reg_val == -1) + goto error; + if (__alps_command_mode_write_reg(psmouse, reg_val | 0x02)) + goto error; + + alps_exit_command_mode(psmouse); + return ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE); + +error: + alps_exit_command_mode(psmouse); + return ret; +} + /* Must be in command mode when calling this function */ static int alps_absolute_mode_v4(struct psmouse *psmouse) { @@ -1442,14 +1449,10 @@ static int alps_hw_init_v4(struct psmouse *psmouse) { - struct alps_data *priv = psmouse->private; struct ps2dev *ps2dev = &psmouse->ps2dev; unsigned char param[4]; - priv->nibble_commands = alps_v4_nibble_commands; - priv->addr_command = PSMOUSE_CMD_DISABLE; - - if (alps_enter_command_mode(psmouse, NULL)) + if (alps_enter_command_mode(psmouse)) goto error; if (alps_absolute_mode_v4(psmouse)) { @@ -1517,39 +1520,178 @@ return -1; } -static int alps_hw_init(struct psmouse *psmouse) +static int alps_hw_init_dolphin_v1(struct psmouse *psmouse) { - struct alps_data *priv = psmouse->private; - const struct alps_model_info *model = priv->i; - int ret = -1; + struct ps2dev *ps2dev = &psmouse->ps2dev; + unsigned char param[2]; - switch (model->proto_version) { + /* This is dolphin "v1" as empirically defined by florin9doi */ + param[0] = 0x64; + param[1] = 0x28; + + if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETSTREAM) || + ps2_command(ps2dev, ¶m[0], PSMOUSE_CMD_SETRATE) || + ps2_command(ps2dev, ¶m[1], PSMOUSE_CMD_SETRATE)) + return -1; + + return 0; +} + +static void alps_set_defaults(struct alps_data *priv) +{ + priv->byte0 = 0x8f; + priv->mask0 = 0x8f; + priv->flags = ALPS_DUALPOINT; + + priv->x_max = 2000; + priv->y_max = 1400; + priv->x_bits = 15; + priv->y_bits = 11; + + switch (priv->proto_version) { case ALPS_PROTO_V1: case ALPS_PROTO_V2: - ret = alps_hw_init_v1_v2(psmouse); + priv->hw_init = alps_hw_init_v1_v2; + priv->process_packet = alps_process_packet_v1_v2; + priv->set_abs_params = alps_set_abs_params_st; break; case ALPS_PROTO_V3: - ret = alps_hw_init_v3(psmouse); + priv->hw_init = alps_hw_init_v3; + priv->process_packet = alps_process_packet_v3; + priv->set_abs_params = alps_set_abs_params_mt; + priv->decode_fields = alps_decode_pinnacle; + priv->nibble_commands = alps_v3_nibble_commands; + priv->addr_command = PSMOUSE_CMD_RESET_WRAP; break; case ALPS_PROTO_V4: - ret = alps_hw_init_v4(psmouse); + priv->hw_init = alps_hw_init_v4; + priv->process_packet = alps_process_packet_v4; + priv->set_abs_params = alps_set_abs_params_mt; + priv->nibble_commands = alps_v4_nibble_commands; + priv->addr_command = PSMOUSE_CMD_DISABLE; + break; + case ALPS_PROTO_V5: + priv->hw_init = alps_hw_init_dolphin_v1; + priv->process_packet = alps_process_packet_v3; + priv->decode_fields = alps_decode_dolphin; + priv->set_abs_params = alps_set_abs_params_mt; + priv->nibble_commands = alps_v3_nibble_commands; + priv->addr_command = PSMOUSE_CMD_RESET_WRAP; + priv->byte0 = 0xc8; + priv->mask0 = 0xc8; + priv->flags = 0; + priv->x_max = 1360; + priv->y_max = 660; + priv->x_bits = 23; + priv->y_bits = 12; break; } +} - return ret; +static int alps_match_table(struct psmouse *psmouse, struct alps_data *priv, + unsigned char *e7, unsigned char *ec) +{ + const struct alps_model_info *model; + int i; + + for (i = 0; i < ARRAY_SIZE(alps_model_data); i++) { + model = &alps_model_data[i]; + + if (!memcmp(e7, model->signature, sizeof(model->signature)) && + (!model->command_mode_resp || + model->command_mode_resp == ec[2])) { + + priv->proto_version = model->proto_version; + alps_set_defaults(priv); + + priv->flags = model->flags; + priv->byte0 = model->byte0; + priv->mask0 = model->mask0; + + return 0; + } + } + + return -EINVAL; +} + +static int alps_identify(struct psmouse *psmouse, struct alps_data *priv) +{ + unsigned char e6[4], e7[4], ec[4]; + + /* + * First try "E6 report". + * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed. + * The bits 0-2 of the first byte will be 1s if some buttons are + * pressed. + */ + if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, + PSMOUSE_CMD_SETSCALE11, e6)) + return -EIO; + + if ((e6[0] & 0xf8) != 0 || e6[1] != 0 || (e6[2] != 10 && e6[2] != 100)) + return -EINVAL; + + /* + * Now get the "E7" and "EC" reports. These will uniquely identify + * most ALPS touchpads. + */ + if (alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, + PSMOUSE_CMD_SETSCALE21, e7) || + alps_rpt_cmd(psmouse, PSMOUSE_CMD_SETRES, + PSMOUSE_CMD_RESET_WRAP, ec) || + alps_exit_command_mode(psmouse)) + return -EIO; + + if (alps_match_table(psmouse, priv, e7, ec) == 0) { + return 0; + } else if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 && + ec[0] == 0x73 && ec[1] == 0x01) { + priv->proto_version = ALPS_PROTO_V5; + alps_set_defaults(priv); + + return 0; + } else if (ec[0] == 0x88 && ec[1] == 0x08) { + priv->proto_version = ALPS_PROTO_V3; + alps_set_defaults(priv); + + priv->hw_init = alps_hw_init_rushmore_v3; + priv->decode_fields = alps_decode_rushmore; + priv->x_bits = 16; + priv->y_bits = 12; + + /* hack to make addr_command, nibble_command available */ + psmouse->private = priv; + + if (alps_probe_trackstick_v3(psmouse, ALPS_REG_BASE_RUSHMORE)) + priv->flags &= ~ALPS_DUALPOINT; + + return 0; + } else if (ec[0] == 0x88 && ec[1] == 0x07 && + ec[2] >= 0x90 && ec[2] <= 0x9d) { + priv->proto_version = ALPS_PROTO_V3; + alps_set_defaults(priv); + + return 0; + } + + psmouse_info(psmouse, + "Unknown ALPS touchpad: E7=%2.2x %2.2x %2.2x, EC=%2.2x %2.2x %2.2x\n", + e7[0], e7[1], e7[2], ec[0], ec[1], ec[2]); + + return -EINVAL; } static int alps_reconnect(struct psmouse *psmouse) { - const struct alps_model_info *model; + struct alps_data *priv = psmouse->private; psmouse_reset(psmouse); - model = alps_get_model(psmouse, NULL); - if (!model) + if (alps_identify(psmouse, priv) < 0) return -1; - return alps_hw_init(psmouse); + return priv->hw_init(psmouse); } static void alps_disconnect(struct psmouse *psmouse) @@ -1562,12 +1704,33 @@ kfree(priv); } +static void alps_set_abs_params_st(struct alps_data *priv, + struct input_dev *dev1) +{ + input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0); + input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0); +} + +static void alps_set_abs_params_mt(struct alps_data *priv, + struct input_dev *dev1) +{ + set_bit(INPUT_PROP_SEMI_MT, dev1->propbit); + input_mt_init_slots(dev1, 2, 0); + input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0); + input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0); + + set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit); + set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit); + set_bit(BTN_TOOL_QUADTAP, dev1->keybit); + + input_set_abs_params(dev1, ABS_X, 0, priv->x_max, 0, 0); + input_set_abs_params(dev1, ABS_Y, 0, priv->y_max, 0, 0); +} + int alps_init(struct psmouse *psmouse) { struct alps_data *priv; - const struct alps_model_info *model; struct input_dev *dev1 = psmouse->dev, *dev2; - int version; priv = kzalloc(sizeof(struct alps_data), GFP_KERNEL); dev2 = input_allocate_device(); @@ -1581,13 +1744,10 @@ psmouse_reset(psmouse); - model = alps_get_model(psmouse, &version); - if (!model) + if (alps_identify(psmouse, priv) < 0) goto init_fail; - priv->i = model; - - if (alps_hw_init(psmouse)) + if (priv->hw_init(psmouse)) goto init_fail; /* @@ -1609,41 +1769,20 @@ dev1->evbit[BIT_WORD(EV_ABS)] |= BIT_MASK(EV_ABS); - switch (model->proto_version) { - case ALPS_PROTO_V1: - case ALPS_PROTO_V2: - input_set_abs_params(dev1, ABS_X, 0, 1023, 0, 0); - input_set_abs_params(dev1, ABS_Y, 0, 767, 0, 0); - break; - case ALPS_PROTO_V3: - case ALPS_PROTO_V4: - set_bit(INPUT_PROP_SEMI_MT, dev1->propbit); - input_mt_init_slots(dev1, 2, 0); - input_set_abs_params(dev1, ABS_MT_POSITION_X, 0, ALPS_V3_X_MAX, 0, 0); - input_set_abs_params(dev1, ABS_MT_POSITION_Y, 0, ALPS_V3_Y_MAX, 0, 0); - - set_bit(BTN_TOOL_DOUBLETAP, dev1->keybit); - set_bit(BTN_TOOL_TRIPLETAP, dev1->keybit); - set_bit(BTN_TOOL_QUADTAP, dev1->keybit); - - input_set_abs_params(dev1, ABS_X, 0, ALPS_V3_X_MAX, 0, 0); - input_set_abs_params(dev1, ABS_Y, 0, ALPS_V3_Y_MAX, 0, 0); - break; - } - + priv->set_abs_params(priv, dev1); input_set_abs_params(dev1, ABS_PRESSURE, 0, 127, 0, 0); - if (model->flags & ALPS_WHEEL) { + if (priv->flags & ALPS_WHEEL) { dev1->evbit[BIT_WORD(EV_REL)] |= BIT_MASK(EV_REL); dev1->relbit[BIT_WORD(REL_WHEEL)] |= BIT_MASK(REL_WHEEL); } - if (model->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) { + if (priv->flags & (ALPS_FW_BK_1 | ALPS_FW_BK_2)) { dev1->keybit[BIT_WORD(BTN_FORWARD)] |= BIT_MASK(BTN_FORWARD); dev1->keybit[BIT_WORD(BTN_BACK)] |= BIT_MASK(BTN_BACK); } - if (model->flags & ALPS_FOUR_BUTTONS) { + if (priv->flags & ALPS_FOUR_BUTTONS) { dev1->keybit[BIT_WORD(BTN_0)] |= BIT_MASK(BTN_0); dev1->keybit[BIT_WORD(BTN_1)] |= BIT_MASK(BTN_1); dev1->keybit[BIT_WORD(BTN_2)] |= BIT_MASK(BTN_2); @@ -1654,7 +1793,8 @@ snprintf(priv->phys, sizeof(priv->phys), "%s/input1", psmouse->ps2dev.serio->phys); dev2->phys = priv->phys; - dev2->name = (model->flags & ALPS_DUALPOINT) ? "DualPoint Stick" : "PS/2 Mouse"; + dev2->name = (priv->flags & ALPS_DUALPOINT) ? + "DualPoint Stick" : "PS/2 Mouse"; dev2->id.bustype = BUS_I8042; dev2->id.vendor = 0x0002; dev2->id.product = PSMOUSE_ALPS; @@ -1673,7 +1813,7 @@ psmouse->poll = alps_poll; psmouse->disconnect = alps_disconnect; psmouse->reconnect = alps_reconnect; - psmouse->pktsize = model->proto_version == ALPS_PROTO_V4 ? 8 : 6; + psmouse->pktsize = priv->proto_version == ALPS_PROTO_V4 ? 8 : 6; /* We are having trouble resyncing ALPS touchpads so disable it for now */ psmouse->resync_time = 0; @@ -1690,18 +1830,16 @@ int alps_detect(struct psmouse *psmouse, bool set_properties) { - int version; - const struct alps_model_info *model; + struct alps_data dummy; - model = alps_get_model(psmouse, &version); - if (!model) + if (alps_identify(psmouse, &dummy) < 0) return -1; if (set_properties) { psmouse->vendor = "ALPS"; - psmouse->name = model->flags & ALPS_DUALPOINT ? + psmouse->name = dummy.flags & ALPS_DUALPOINT ? "DualPoint TouchPad" : "GlidePoint"; - psmouse->model = version; + psmouse->model = dummy.proto_version << 8; } return 0; } --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/psmouse.h +++ linux-lts-raring-3.8.0/drivers/input/mouse/psmouse.h @@ -95,6 +95,7 @@ PSMOUSE_ELANTECH, PSMOUSE_FSP, PSMOUSE_SYNAPTICS_RELATIVE, + PSMOUSE_CYPRESS, PSMOUSE_AUTO /* This one should always be last */ }; --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/bcm5974.c +++ linux-lts-raring-3.8.0/drivers/input/mouse/bcm5974.c @@ -88,6 +88,10 @@ #define USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI 0x0259 #define USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO 0x025a #define USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS 0x025b +/* MacbookAir6,2 (unibody, June 2013) */ +#define USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI 0x0291 +#define USB_DEVICE_ID_APPLE_WELLSPRING8_ISO 0x0292 +#define USB_DEVICE_ID_APPLE_WELLSPRING8_JIS 0x0293 #define BCM5974_DEVICE(prod) { \ .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \ @@ -145,6 +149,10 @@ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI), BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO), BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS), + /* MacbookAir6,2 */ + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING8_ISO), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING8_JIS), /* Terminating entry */ {} }; @@ -172,15 +180,18 @@ /* trackpad header types */ enum tp_type { TYPE1, /* plain trackpad */ - TYPE2 /* button integrated in trackpad */ + TYPE2, /* button integrated in trackpad */ + TYPE3 /* additional header fields since June 2013 */ }; /* trackpad finger data offsets, le16-aligned */ #define FINGER_TYPE1 (13 * sizeof(__le16)) #define FINGER_TYPE2 (15 * sizeof(__le16)) +#define FINGER_TYPE3 (19 * sizeof(__le16)) /* trackpad button data offsets */ #define BUTTON_TYPE2 15 +#define BUTTON_TYPE3 23 /* list of device capability bits */ #define HAS_INTEGRATED_BUTTON 1 @@ -400,6 +411,19 @@ { SN_COORD, -150, 6730 }, { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION } }, + { + USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI, + USB_DEVICE_ID_APPLE_WELLSPRING8_ISO, + USB_DEVICE_ID_APPLE_WELLSPRING8_JIS, + HAS_INTEGRATED_BUTTON, + 0, sizeof(struct bt_data), + 0x83, TYPE3, FINGER_TYPE3, FINGER_TYPE3 + SIZEOF_ALL_FINGERS, + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4620, 5140 }, + { SN_COORD, -150, 6600 }, + { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION } + }, {} }; @@ -557,6 +581,9 @@ input_report_key(input, BTN_LEFT, ibt); } + if (c->tp_type == TYPE3) + input_report_key(input, BTN_LEFT, dev->tp_data[BUTTON_TYPE3]); + input_sync(input); return 0; @@ -572,9 +599,14 @@ static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) { - char *data = kmalloc(8, GFP_KERNEL); int retval = 0, size; + char *data; + + /* Type 3 does not require a mode switch */ + if (dev->cfg.tp_type == TYPE3) + return 0; + data = kmalloc(8, GFP_KERNEL); if (!data) { dev_err(&dev->intf->dev, "out of memory\n"); retval = -ENOMEM; --- linux-lts-raring-3.8.0.orig/drivers/input/mouse/alps.h +++ linux-lts-raring-3.8.0/drivers/input/mouse/alps.h @@ -12,35 +12,147 @@ #ifndef _ALPS_H #define _ALPS_H -#define ALPS_PROTO_V1 0 -#define ALPS_PROTO_V2 1 -#define ALPS_PROTO_V3 2 -#define ALPS_PROTO_V4 3 +#define ALPS_PROTO_V1 1 +#define ALPS_PROTO_V2 2 +#define ALPS_PROTO_V3 3 +#define ALPS_PROTO_V4 4 +#define ALPS_PROTO_V5 5 +/** + * struct alps_model_info - touchpad ID table + * @signature: E7 response string to match. + * @command_mode_resp: For V3/V4 touchpads, the final byte of the EC response + * (aka command mode response) identifies the firmware minor version. This + * can be used to distinguish different hardware models which are not + * uniquely identifiable through their E7 responses. + * @proto_version: Indicates V1/V2/V3/... + * @byte0: Helps figure out whether a position report packet matches the + * known format for this model. The first byte of the report, ANDed with + * mask0, should match byte0. + * @mask0: The mask used to check the first byte of the report. + * @flags: Additional device capabilities (passthrough port, trackstick, etc.). + * + * Many (but not all) ALPS touchpads can be identified by looking at the + * values returned in the "E7 report" and/or the "EC report." This table + * lists a number of such touchpads. + */ struct alps_model_info { - unsigned char signature[3]; - unsigned char command_mode_resp; /* v3/v4 only */ + unsigned char signature[3]; + unsigned char command_mode_resp; unsigned char proto_version; - unsigned char byte0, mask0; - unsigned char flags; + unsigned char byte0, mask0; + unsigned char flags; }; +/** + * struct alps_nibble_commands - encodings for register accesses + * @command: PS/2 command used for the nibble + * @data: Data supplied as an argument to the PS/2 command, if applicable + * + * The ALPS protocol uses magic sequences to transmit binary data to the + * touchpad, as it is generally not OK to send arbitrary bytes out the + * PS/2 port. Each of the sequences in this table sends one nibble of the + * register address or (write) data. Different versions of the ALPS protocol + * use slightly different encodings. + */ struct alps_nibble_commands { int command; unsigned char data; }; +/** + * struct alps_fields - decoded version of the report packet + * @x_map: Bitmap of active X positions for MT. + * @y_map: Bitmap of active Y positions for MT. + * @fingers: Number of fingers for MT. + * @x: X position for ST. + * @y: Y position for ST. + * @z: Z position for ST. + * @first_mp: Packet is the first of a multi-packet report. + * @is_mp: Packet is part of a multi-packet report. + * @left: Left touchpad button is active. + * @right: Right touchpad button is active. + * @middle: Middle touchpad button is active. + * @ts_left: Left trackstick button is active. + * @ts_right: Right trackstick button is active. + * @ts_middle: Middle trackstick button is active. + */ +struct alps_fields { + unsigned int x_map; + unsigned int y_map; + unsigned int fingers; + unsigned int x; + unsigned int y; + unsigned int z; + unsigned int first_mp:1; + unsigned int is_mp:1; + + unsigned int left:1; + unsigned int right:1; + unsigned int middle:1; + + unsigned int ts_left:1; + unsigned int ts_right:1; + unsigned int ts_middle:1; +}; + +/** + * struct alps_data - private data structure for the ALPS driver + * @dev2: "Relative" device used to report trackstick or mouse activity. + * @phys: Physical path for the relative device. + * @nibble_commands: Command mapping used for touchpad register accesses. + * @addr_command: Command used to tell the touchpad that a register address + * follows. + * @proto_version: Indicates V1/V2/V3/... + * @byte0: Helps figure out whether a position report packet matches the + * known format for this model. The first byte of the report, ANDed with + * mask0, should match byte0. + * @mask0: The mask used to check the first byte of the report. + * @flags: Additional device capabilities (passthrough port, trackstick, etc.). + * @x_max: Largest possible X position value. + * @y_max: Largest possible Y position value. + * @x_bits: Number of X bits in the MT bitmap. + * @y_bits: Number of Y bits in the MT bitmap. + * @hw_init: Protocol-specific hardware init function. + * @process_packet: Protocol-specific function to process a report packet. + * @decode_fields: Protocol-specific function to read packet bitfields. + * @set_abs_params: Protocol-specific function to configure the input_dev. + * @prev_fin: Finger bit from previous packet. + * @multi_packet: Multi-packet data in progress. + * @multi_data: Saved multi-packet data. + * @x1: First X coordinate from last MT report. + * @x2: Second X coordinate from last MT report. + * @y1: First Y coordinate from last MT report. + * @y2: Second Y coordinate from last MT report. + * @fingers: Number of fingers from last MT report. + * @quirks: Bitmap of ALPS_QUIRK_*. + * @timer: Timer for flushing out the final report packet in the stream. + */ struct alps_data { - struct input_dev *dev2; /* Relative device */ - char phys[32]; /* Phys */ - const struct alps_model_info *i;/* Info */ + struct input_dev *dev2; + char phys[32]; + + /* these are autodetected when the device is identified */ const struct alps_nibble_commands *nibble_commands; - int addr_command; /* Command to set register address */ - int prev_fin; /* Finger bit from previous packet */ - int multi_packet; /* Multi-packet data in progress */ - unsigned char multi_data[6]; /* Saved multi-packet data */ - int x1, x2, y1, y2; /* Coordinates from last MT report */ - int fingers; /* Number of fingers from MT report */ + int addr_command; + unsigned char proto_version; + unsigned char byte0, mask0; + unsigned char flags; + int x_max; + int y_max; + int x_bits; + int y_bits; + + int (*hw_init)(struct psmouse *psmouse); + void (*process_packet)(struct psmouse *psmouse); + void (*decode_fields)(struct alps_fields *f, unsigned char *p); + void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1); + + int prev_fin; + int multi_packet; + unsigned char multi_data[6]; + int x1, x2, y1, y2; + int fingers; u8 quirks; struct timer_list timer; }; --- linux-lts-raring-3.8.0.orig/drivers/infiniband/ulp/srpt/ib_srpt.c +++ linux-lts-raring-3.8.0/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -1588,7 +1588,7 @@ int resp_data_len; int resp_len; - resp_data_len = (rsp_code == SRP_TSK_MGMT_SUCCESS) ? 0 : 4; + resp_data_len = 4; resp_len = sizeof(*srp_rsp) + resp_data_len; srp_rsp = ioctx->ioctx.buf; @@ -1600,11 +1600,9 @@ + atomic_xchg(&ch->req_lim_delta, 0)); srp_rsp->tag = tag; - if (rsp_code != SRP_TSK_MGMT_SUCCESS) { - srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID; - srp_rsp->resp_data_len = cpu_to_be32(resp_data_len); - srp_rsp->data[3] = rsp_code; - } + srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID; + srp_rsp->resp_data_len = cpu_to_be32(resp_data_len); + srp_rsp->data[3] = rsp_code; return resp_len; } @@ -2227,6 +2225,27 @@ } /** + * srpt_shutdown_session() - Whether or not a session may be shut down. + */ +static int srpt_shutdown_session(struct se_session *se_sess) +{ + struct srpt_rdma_ch *ch = se_sess->fabric_sess_ptr; + unsigned long flags; + + spin_lock_irqsave(&ch->spinlock, flags); + if (ch->in_shutdown) { + spin_unlock_irqrestore(&ch->spinlock, flags); + return true; + } + + ch->in_shutdown = true; + target_sess_cmd_list_set_waiting(se_sess); + spin_unlock_irqrestore(&ch->spinlock, flags); + + return true; +} + +/** * srpt_drain_channel() - Drain a channel by resetting the IB queue pair. * @cm_id: Pointer to the CM ID of the channel to be drained. * @@ -2264,6 +2283,9 @@ spin_unlock_irq(&sdev->spinlock); if (do_reset) { + if (ch->sess) + srpt_shutdown_session(ch->sess); + ret = srpt_ch_qp_err(ch); if (ret < 0) printk(KERN_ERR "Setting queue pair in error state" @@ -2334,6 +2356,8 @@ transport_deregister_session(se_sess); ch->sess = NULL; + ib_destroy_cm_id(ch->cm_id); + srpt_destroy_ch_ib(ch); srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring, @@ -2344,8 +2368,6 @@ list_del(&ch->list); spin_unlock_irq(&sdev->spinlock); - ib_destroy_cm_id(ch->cm_id); - if (ch->release_done) complete(ch->release_done); @@ -3467,14 +3489,6 @@ } /** - * srpt_shutdown_session() - Whether or not a session may be shut down. - */ -static int srpt_shutdown_session(struct se_session *se_sess) -{ - return true; -} - -/** * srpt_close_session() - Forcibly close a session. * * Callback function invoked by the TCM core to clean up sessions associated --- linux-lts-raring-3.8.0.orig/drivers/infiniband/ulp/srpt/ib_srpt.h +++ linux-lts-raring-3.8.0/drivers/infiniband/ulp/srpt/ib_srpt.h @@ -325,6 +325,7 @@ u8 sess_name[36]; struct work_struct release_work; struct completion *release_done; + bool in_shutdown; }; /** --- linux-lts-raring-3.8.0.orig/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ linux-lts-raring-3.8.0/drivers/infiniband/ulp/ipoib/ipoib_cm.c @@ -758,9 +758,13 @@ if (++priv->tx_outstanding == ipoib_sendq_size) { ipoib_dbg(priv, "TX ring 0x%x full, stopping kernel net queue\n", tx->qp->qp_num); - if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP)) - ipoib_warn(priv, "request notify on send CQ failed\n"); netif_stop_queue(dev); + rc = ib_req_notify_cq(priv->send_cq, + IB_CQ_NEXT_COMP | IB_CQ_REPORT_MISSED_EVENTS); + if (rc < 0) + ipoib_warn(priv, "request notify on send CQ failed\n"); + else if (rc) + ipoib_send_comp_handler(priv->send_cq, dev); } } } --- linux-lts-raring-3.8.0.orig/drivers/infiniband/ulp/srp/ib_srp.c +++ linux-lts-raring-3.8.0/drivers/infiniband/ulp/srp/ib_srp.c @@ -700,23 +700,24 @@ struct Scsi_Host *shost = target->scsi_host; int i, ret; - if (target->state != SRP_TARGET_LIVE) - return -EAGAIN; - scsi_target_block(&shost->shost_gendev); srp_disconnect_target(target); /* - * Now get a new local CM ID so that we avoid confusing the - * target in case things are really fouled up. + * Now get a new local CM ID so that we avoid confusing the target in + * case things are really fouled up. Doing so also ensures that all CM + * callbacks will have finished before a new QP is allocated. */ ret = srp_new_cm_id(target); - if (ret) - goto unblock; - - ret = srp_create_target_ib(target); - if (ret) - goto unblock; + /* + * Whether or not creating a new CM ID succeeded, create a new + * QP. This guarantees that all completion callback function + * invocations have finished before request resetting starts. + */ + if (ret == 0) + ret = srp_create_target_ib(target); + else + srp_create_target_ib(target); for (i = 0; i < SRP_CMD_SQ_SIZE; ++i) { struct srp_request *req = &target->req_ring[i]; @@ -728,11 +729,12 @@ for (i = 0; i < SRP_SQ_SIZE; ++i) list_add(&target->tx_ring[i]->list, &target->free_tx); - ret = srp_connect_target(target); + if (ret == 0) + ret = srp_connect_target(target); -unblock: scsi_target_unblock(&shost->shost_gendev, ret == 0 ? SDEV_RUNNING : SDEV_TRANSPORT_OFFLINE); + target->transport_offline = !!ret; if (ret) goto err; @@ -1352,6 +1354,12 @@ unsigned long flags; int len; + if (unlikely(target->transport_offline)) { + scmnd->result = DID_NO_CONNECT << 16; + scmnd->scsi_done(scmnd); + return 0; + } + spin_lock_irqsave(&target->lock, flags); iu = __srp_get_tx_iu(target, SRP_IU_CMD); if (!iu) @@ -1695,6 +1703,9 @@ struct srp_iu *iu; struct srp_tsk_mgmt *tsk_mgmt; + if (!target->connected || target->qp_in_error) + return -1; + init_completion(&target->tsk_mgmt_done); spin_lock_irq(&target->lock); @@ -1736,7 +1747,7 @@ shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); - if (!req || target->qp_in_error || !srp_claim_req(target, req, scmnd)) + if (!req || !srp_claim_req(target, req, scmnd)) return FAILED; srp_send_tsk_mgmt(target, req->index, scmnd->device->lun, SRP_TSK_ABORT_TASK); @@ -1754,8 +1765,6 @@ shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); - if (target->qp_in_error) - return FAILED; if (srp_send_tsk_mgmt(target, SRP_TAG_NO_REQ, scmnd->device->lun, SRP_TSK_LUN_RESET)) return FAILED; @@ -1972,7 +1981,6 @@ spin_unlock(&host->target_lock); target->state = SRP_TARGET_LIVE; - target->connected = false; scsi_scan_target(&target->scsi_host->shost_gendev, 0, target->scsi_id, SCAN_WILD_CARD, 0); --- linux-lts-raring-3.8.0.orig/drivers/infiniband/ulp/srp/ib_srp.h +++ linux-lts-raring-3.8.0/drivers/infiniband/ulp/srp/ib_srp.h @@ -140,6 +140,7 @@ unsigned int cmd_sg_cnt; unsigned int indirect_size; bool allow_ext_sg; + bool transport_offline; /* Everything above this point is used in the hot path of * command processing. Try to keep them packed into cachelines. --- linux-lts-raring-3.8.0.orig/drivers/infiniband/hw/cxgb4/qp.c +++ linux-lts-raring-3.8.0/drivers/infiniband/hw/cxgb4/qp.c @@ -100,6 +100,16 @@ return 0; } +static int alloc_sq(struct c4iw_rdev *rdev, struct t4_sq *sq, int user) +{ + int ret = -ENOSYS; + if (user) + ret = alloc_oc_sq(rdev, sq); + if (ret) + ret = alloc_host_sq(rdev, sq); + return ret; +} + static int destroy_qp(struct c4iw_rdev *rdev, struct t4_wq *wq, struct c4iw_dev_ucontext *uctx) { @@ -168,18 +178,9 @@ goto free_sw_rq; } - if (user) { - ret = alloc_oc_sq(rdev, &wq->sq); - if (ret) - goto free_hwaddr; - - ret = alloc_host_sq(rdev, &wq->sq); - if (ret) - goto free_sq; - } else - ret = alloc_host_sq(rdev, &wq->sq); - if (ret) - goto free_hwaddr; + ret = alloc_sq(rdev, &wq->sq, user); + if (ret) + goto free_hwaddr; memset(wq->sq.queue, 0, wq->sq.memsize); dma_unmap_addr_set(&wq->sq, mapping, wq->sq.dma_addr); --- linux-lts-raring-3.8.0.orig/drivers/tty/tty_io.c +++ linux-lts-raring-3.8.0/drivers/tty/tty_io.c @@ -941,6 +941,14 @@ EXPORT_SYMBOL(start_tty); +/* We limit tty time update visibility to every 8 seconds or so. */ +static void tty_update_time(struct timespec *time) +{ + unsigned long sec = get_seconds() & ~7; + if ((long)(sec - time->tv_sec) > 0) + time->tv_sec = sec; +} + /** * tty_read - read method for tty device files * @file: pointer to tty file @@ -977,8 +985,10 @@ else i = -EIO; tty_ldisc_deref(ld); + if (i > 0) - inode->i_atime = current_fs_time(inode->i_sb); + tty_update_time(&inode->i_atime); + return i; } @@ -1081,7 +1091,7 @@ } if (written) { struct inode *inode = file->f_path.dentry->d_inode; - inode->i_mtime = current_fs_time(inode->i_sb); + tty_update_time(&inode->i_mtime); ret = written; } out: --- linux-lts-raring-3.8.0.orig/drivers/tty/n_gsm.c +++ linux-lts-raring-3.8.0/drivers/tty/n_gsm.c @@ -1689,6 +1689,8 @@ tty_port_put(&dlci->port); } +static void gsm_destroy_network(struct gsm_dlci *dlci); + /** * gsm_dlci_release - release DLCI * @dlci: DLCI to destroy @@ -1702,9 +1704,19 @@ { struct tty_struct *tty = tty_port_tty_get(&dlci->port); if (tty) { + mutex_lock(&dlci->mutex); + gsm_destroy_network(dlci); + mutex_unlock(&dlci->mutex); + + /* tty_vhangup needs the tty_lock, so unlock and + relock after doing the hangup. */ + tty_unlock(tty); tty_vhangup(tty); + tty_lock(tty); + tty_port_tty_set(&dlci->port, NULL); tty_kref_put(tty); } + dlci->state = DLCI_CLOSED; dlci_put(dlci); } @@ -2947,6 +2959,8 @@ if (dlci == NULL) return; + if (dlci->state == DLCI_CLOSED) + return; mutex_lock(&dlci->mutex); gsm_destroy_network(dlci); mutex_unlock(&dlci->mutex); @@ -2965,6 +2979,8 @@ static void gsmtty_hangup(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return; tty_port_hangup(&dlci->port); gsm_dlci_begin_close(dlci); } @@ -2972,9 +2988,12 @@ static int gsmtty_write(struct tty_struct *tty, const unsigned char *buf, int len) { + int sent; struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return -EINVAL; /* Stuff the bytes into the fifo queue */ - int sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock); + sent = kfifo_in_locked(dlci->fifo, buf, len, &dlci->lock); /* Need to kick the channel */ gsm_dlci_data_kick(dlci); return sent; @@ -2983,18 +3002,24 @@ static int gsmtty_write_room(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return -EINVAL; return TX_SIZE - kfifo_len(dlci->fifo); } static int gsmtty_chars_in_buffer(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return -EINVAL; return kfifo_len(dlci->fifo); } static void gsmtty_flush_buffer(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return; /* Caution needed: If we implement reliable transport classes then the data being transmitted can't simply be junked once it has first hit the stack. Until then we can just blow it @@ -3013,6 +3038,8 @@ static int gsmtty_tiocmget(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return -EINVAL; return dlci->modem_rx; } @@ -3022,6 +3049,8 @@ struct gsm_dlci *dlci = tty->driver_data; unsigned int modem_tx = dlci->modem_tx; + if (dlci->state == DLCI_CLOSED) + return -EINVAL; modem_tx &= ~clear; modem_tx |= set; @@ -3040,6 +3069,8 @@ struct gsm_netconfig nc; int index; + if (dlci->state == DLCI_CLOSED) + return -EINVAL; switch (cmd) { case GSMIOC_ENABLE_NET: if (copy_from_user(&nc, (void __user *)arg, sizeof(nc))) @@ -3066,6 +3097,9 @@ static void gsmtty_set_termios(struct tty_struct *tty, struct ktermios *old) { + struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return; /* For the moment its fixed. In actual fact the speed information for the virtual channel can be propogated in both directions by the RPN control message. This however rapidly gets nasty as we @@ -3077,6 +3111,8 @@ static void gsmtty_throttle(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return; if (tty->termios.c_cflag & CRTSCTS) dlci->modem_tx &= ~TIOCM_DTR; dlci->throttled = 1; @@ -3087,6 +3123,8 @@ static void gsmtty_unthrottle(struct tty_struct *tty) { struct gsm_dlci *dlci = tty->driver_data; + if (dlci->state == DLCI_CLOSED) + return; if (tty->termios.c_cflag & CRTSCTS) dlci->modem_tx |= TIOCM_DTR; dlci->throttled = 0; @@ -3098,6 +3136,8 @@ { struct gsm_dlci *dlci = tty->driver_data; int encode = 0; /* Off */ + if (dlci->state == DLCI_CLOSED) + return -EINVAL; if (state == -1) /* "On indefinitely" - we can't encode this properly */ --- linux-lts-raring-3.8.0.orig/drivers/tty/pty.c +++ linux-lts-raring-3.8.0/drivers/tty/pty.c @@ -47,7 +47,6 @@ /* Review - krefs on tty_link ?? */ if (!tty->link) return; - tty->link->packet = 0; set_bit(TTY_OTHER_CLOSED, &tty->link->flags); wake_up_interruptible(&tty->link->read_wait); wake_up_interruptible(&tty->link->write_wait); @@ -676,6 +675,9 @@ nonseekable_open(inode, filp); + /* We refuse fsnotify events on ptmx, since it's a shared resource */ + filp->f_mode |= FMODE_NONOTIFY; + retval = tty_alloc_file(filp); if (retval) return retval; --- linux-lts-raring-3.8.0.orig/drivers/tty/tty_buffer.c +++ linux-lts-raring-3.8.0/drivers/tty/tty_buffer.c @@ -473,7 +473,7 @@ struct tty_ldisc *disc; tty = port->itty; - if (WARN_RATELIMIT(tty == NULL, "tty is NULL\n")) + if (tty == NULL) return; disc = tty_ldisc_ref(tty); --- linux-lts-raring-3.8.0.orig/drivers/tty/tty_ldisc.c +++ linux-lts-raring-3.8.0/drivers/tty/tty_ldisc.c @@ -934,17 +934,17 @@ * race with the set_ldisc code path. */ - tty_lock_pair(tty, o_tty); tty_ldisc_halt(tty); - tty_ldisc_flush_works(tty); - if (o_tty) { + if (o_tty) tty_ldisc_halt(o_tty); + + tty_ldisc_flush_works(tty); + if (o_tty) tty_ldisc_flush_works(o_tty); - } + tty_lock_pair(tty, o_tty); /* This will need doing differently if we need to lock */ tty_ldisc_kill(tty); - if (o_tty) tty_ldisc_kill(o_tty); --- linux-lts-raring-3.8.0.orig/drivers/tty/n_tty.c +++ linux-lts-raring-3.8.0/drivers/tty/n_tty.c @@ -142,9 +142,16 @@ * pending newlines, let characters through without limit, so * that erase characters will be handled. Other excess * characters will be beeped. + * If there is no reader waiting for the input, block instead of + * letting the characters through. */ if (left <= 0) - left = ldata->icanon && !ldata->canon_data; + if (waitqueue_active(&tty->read_wait)) { + left = ldata->icanon && !ldata->canon_data; + } else { + left = 0; + } + old_left = tty->receive_room; tty->receive_room = left; @@ -1587,6 +1594,14 @@ ldata->real_raw = 0; } n_tty_set_room(tty); + /* + * Fix tty hang when I_IXON(tty) is cleared, but the tty + * been stopped by STOP_CHAR(tty) before it. + */ + if (!I_IXON(tty) && old && (old->c_iflag & IXON) && !tty->flow_stopped) { + start_tty(tty); + } + /* The termios change make the tty ready for I/O */ wake_up_interruptible(&tty->write_wait); wake_up_interruptible(&tty->read_wait); --- linux-lts-raring-3.8.0.orig/drivers/tty/tty_ioctl.c +++ linux-lts-raring-3.8.0/drivers/tty/tty_ioctl.c @@ -617,7 +617,7 @@ if (opt & TERMIOS_WAIT) { tty_wait_until_sent(tty, 0); if (signal_pending(current)) - return -EINTR; + return -ERESTARTSYS; } tty_set_termios(tty, &tmp_termios); @@ -684,7 +684,7 @@ if (opt & TERMIOS_WAIT) { tty_wait_until_sent(tty, 0); if (signal_pending(current)) - return -EINTR; + return -ERESTARTSYS; } mutex_lock(&tty->termios_mutex); --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/arc_uart.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/arc_uart.c @@ -741,6 +741,6 @@ module_exit(arc_serial_exit); MODULE_LICENSE("GPL"); -MODULE_ALIAS("plat-arcfpga/uart"); +MODULE_ALIAS("platform:" DRIVER_NAME); MODULE_AUTHOR("Vineet Gupta"); MODULE_DESCRIPTION("ARC(Synopsys) On-Chip(fpga) serial driver"); --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/Kconfig +++ linux-lts-raring-3.8.0/drivers/tty/serial/Kconfig @@ -209,14 +209,14 @@ config SERIAL_SAMSUNG_UARTS_4 bool depends on PLAT_SAMSUNG - default y if !(CPU_S3C2410 || SERIAL_S3C2412 || CPU_S3C2440 || CPU_S3C2442) + default y if !(CPU_S3C2410 || CPU_S3C2412 || CPU_S3C2440 || CPU_S3C2442) help Internal node for the common case of 4 Samsung compatible UARTs config SERIAL_SAMSUNG_UARTS int depends on PLAT_SAMSUNG - default 6 if ARCH_S5P6450 + default 6 if CPU_S5P6450 default 4 if SERIAL_SAMSUNG_UARTS_4 || CPU_S3C2416 default 3 help --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/atmel_serial.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/atmel_serial.c @@ -158,7 +158,7 @@ }; static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART]; -static unsigned long atmel_ports_in_use; +static DECLARE_BITMAP(atmel_ports_in_use, ATMEL_MAX_UART); #ifdef SUPPORT_SYSRQ static struct console atmel_console; @@ -1768,15 +1768,14 @@ if (ret < 0) /* port id not found in platform data nor device-tree aliases: * auto-enumerate it */ - ret = find_first_zero_bit(&atmel_ports_in_use, - sizeof(atmel_ports_in_use)); + ret = find_first_zero_bit(atmel_ports_in_use, ATMEL_MAX_UART); - if (ret > ATMEL_MAX_UART) { + if (ret >= ATMEL_MAX_UART) { ret = -ENODEV; goto err; } - if (test_and_set_bit(ret, &atmel_ports_in_use)) { + if (test_and_set_bit(ret, atmel_ports_in_use)) { /* port already in use */ ret = -EBUSY; goto err; @@ -1856,7 +1855,7 @@ /* "port" is allocated statically, so we shouldn't free it */ - clear_bit(port->line, &atmel_ports_in_use); + clear_bit(port->line, atmel_ports_in_use); clk_put(atmel_port->clk); --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/pch_uart.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/pch_uart.c @@ -214,6 +214,7 @@ #define FRI2_64_UARTCLK 64000000 /* 64.0000 MHz */ #define FRI2_48_UARTCLK 48000000 /* 48.0000 MHz */ #define NTC1_UARTCLK 64000000 /* 64.0000 MHz */ +#define MINNOW_UARTCLK 50000000 /* 50.0000 MHz */ struct pch_uart_buffer { unsigned char *buf; @@ -395,6 +396,10 @@ strstr(cmp, "nanoETXexpress-TT"))) return NTC1_UARTCLK; + cmp = dmi_get_system_info(DMI_BOARD_NAME); + if (cmp && strstr(cmp, "MinnowBoard")) + return MINNOW_UARTCLK; + return DEFAULT_UARTCLK; } @@ -643,11 +648,12 @@ dev_warn(port->dev, "Rx overrun: dropping %u bytes\n", size - room); if (!room) - return room; + goto out; tty_insert_flip_string(tty, sg_virt(&priv->sg_rx), size); port->icount.rx += room; +out: tty_kref_put(tty); return room; --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/of_serial.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/of_serial.c @@ -240,6 +240,12 @@ { .compatible = "ns16850", .data = (void *)PORT_16850, }, { .compatible = "nvidia,tegra20-uart", .data = (void *)PORT_TEGRA, }, { .compatible = "nxp,lpc3220-uart", .data = (void *)PORT_LPC3220, }, + { .compatible = "altr,16550-FIFO32", + .data = (void *)PORT_ALTR_16550_F32, }, + { .compatible = "altr,16550-FIFO64", + .data = (void *)PORT_ALTR_16550_F64, }, + { .compatible = "altr,16550-FIFO128", + .data = (void *)PORT_ALTR_16550_F128, }, #ifdef CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL { .compatible = "ibm,qpace-nwp-serial", .data = (void *)PORT_NWPSERIAL, }, --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/imx.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/imx.c @@ -1213,8 +1213,14 @@ struct imx_port_ucrs old_ucr; unsigned int ucr1; unsigned long flags; + int locked = 1; - spin_lock_irqsave(&sport->port.lock, flags); + if (sport->port.sysrq) + locked = 0; + else if (oops_in_progress) + locked = spin_trylock_irqsave(&sport->port.lock, flags); + else + spin_lock_irqsave(&sport->port.lock, flags); /* * First, save UCR1/2/3 and then disable interrupts @@ -1241,7 +1247,8 @@ imx_port_ucrs_restore(&sport->port, &old_ucr); - spin_unlock_irqrestore(&sport->port.lock, flags); + if (locked) + spin_unlock_irqrestore(&sport->port.lock, flags); } /* --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/serial_core.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/serial_core.c @@ -1940,6 +1940,8 @@ mutex_unlock(&port->mutex); return 0; } + put_device(tty_dev); + if (console_suspend_enabled || !uart_console(uport)) uport->suspended = 1; @@ -2005,9 +2007,11 @@ disable_irq_wake(uport->irq); uport->irq_wake = 0; } + put_device(tty_dev); mutex_unlock(&port->mutex); return 0; } + put_device(tty_dev); uport->suspended = 0; /* --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/sunsu.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/sunsu.c @@ -974,6 +974,7 @@ #define UART_NR 4 static struct uart_sunsu_port sunsu_ports[UART_NR]; +static int nr_inst; /* Number of already registered ports */ #ifdef CONFIG_SERIO @@ -1343,13 +1344,8 @@ printk("Console: ttyS%d (SU)\n", (sunsu_reg.minor - 64) + co->index); - /* - * Check whether an invalid uart number has been specified, and - * if so, search for the first available port that does have - * console support. - */ - if (co->index >= UART_NR) - co->index = 0; + if (co->index > nr_inst) + return -ENODEV; port = &sunsu_ports[co->index].port; /* @@ -1414,7 +1410,6 @@ static int su_probe(struct platform_device *op) { - static int inst; struct device_node *dp = op->dev.of_node; struct uart_sunsu_port *up; struct resource *rp; @@ -1424,16 +1419,16 @@ type = su_get_type(dp); if (type == SU_PORT_PORT) { - if (inst >= UART_NR) + if (nr_inst >= UART_NR) return -EINVAL; - up = &sunsu_ports[inst]; + up = &sunsu_ports[nr_inst]; } else { up = kzalloc(sizeof(*up), GFP_KERNEL); if (!up) return -ENOMEM; } - up->port.line = inst; + up->port.line = nr_inst; spin_lock_init(&up->port.lock); @@ -1467,6 +1462,8 @@ } dev_set_drvdata(&op->dev, up); + nr_inst++; + return 0; } @@ -1494,7 +1491,7 @@ dev_set_drvdata(&op->dev, up); - inst++; + nr_inst++; return 0; --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/mxs-auart.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/mxs-auart.c @@ -710,11 +710,18 @@ static irqreturn_t mxs_auart_irq_handle(int irq, void *context) { - u32 istatus, istat; + u32 istat; struct mxs_auart_port *s = context; u32 stat = readl(s->port.membase + AUART_STAT); - istatus = istat = readl(s->port.membase + AUART_INTR); + istat = readl(s->port.membase + AUART_INTR); + + /* ack irq */ + writel(istat & (AUART_INTR_RTIS + | AUART_INTR_TXIS + | AUART_INTR_RXIS + | AUART_INTR_CTSMIS), + s->port.membase + AUART_INTR_CLR); if (istat & AUART_INTR_CTSMIS) { uart_handle_cts_change(&s->port, stat & AUART_STAT_CTS); @@ -734,12 +741,6 @@ istat &= ~AUART_INTR_TXIS; } - writel(istatus & (AUART_INTR_RTIS - | AUART_INTR_TXIS - | AUART_INTR_RXIS - | AUART_INTR_CTSMIS), - s->port.membase + AUART_INTR_CLR); - return IRQ_HANDLED; } @@ -882,9 +883,9 @@ struct mxs_auart_port *s; struct uart_port *port; unsigned int old_ctrl0, old_ctrl2; - unsigned int to = 1000; + unsigned int to = 20000; - if (co->index > MXS_AUART_PORTS || co->index < 0) + if (co->index >= MXS_AUART_PORTS || co->index < 0) return; s = auart_port[co->index]; @@ -903,18 +904,23 @@ uart_console_write(port, str, count, mxs_auart_console_putchar); - /* - * Finally, wait for transmitter to become empty - * and restore the TCR - */ + /* Finally, wait for transmitter to become empty ... */ while (readl(port->membase + AUART_STAT) & AUART_STAT_BUSY) { + udelay(1); if (!to--) break; - udelay(1); } - writel(old_ctrl0, port->membase + AUART_CTRL0); - writel(old_ctrl2, port->membase + AUART_CTRL2); + /* + * ... and restore the TCR if we waited long enough for the transmitter + * to be idle. This might keep the transmitter enabled although it is + * unused, but that is better than to disable it while it is still + * transmitting. + */ + if (!(readl(port->membase + AUART_STAT) & AUART_STAT_BUSY)) { + writel(old_ctrl0, port->membase + AUART_CTRL0); + writel(old_ctrl2, port->membase + AUART_CTRL2); + } clk_disable(s->clk); } --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/8250_pci.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/8250_pci.c @@ -1040,6 +1040,253 @@ return pci_default_setup(priv, board, port, idx); } +/* Quatech devices have their own extra interface features */ + +struct quatech_feature { + u16 devid; + bool amcc; +}; + +#define QPCR_TEST_FOR1 0x3F +#define QPCR_TEST_GET1 0x00 +#define QPCR_TEST_FOR2 0x40 +#define QPCR_TEST_GET2 0x40 +#define QPCR_TEST_FOR3 0x80 +#define QPCR_TEST_GET3 0x40 +#define QPCR_TEST_FOR4 0xC0 +#define QPCR_TEST_GET4 0x80 + +#define QOPR_CLOCK_X1 0x0000 +#define QOPR_CLOCK_X2 0x0001 +#define QOPR_CLOCK_X4 0x0002 +#define QOPR_CLOCK_X8 0x0003 +#define QOPR_CLOCK_RATE_MASK 0x0003 + + +static struct quatech_feature quatech_cards[] = { + { PCI_DEVICE_ID_QUATECH_QSC100, 1 }, + { PCI_DEVICE_ID_QUATECH_DSC100, 1 }, + { PCI_DEVICE_ID_QUATECH_DSC100E, 0 }, + { PCI_DEVICE_ID_QUATECH_DSC200, 1 }, + { PCI_DEVICE_ID_QUATECH_DSC200E, 0 }, + { PCI_DEVICE_ID_QUATECH_ESC100D, 1 }, + { PCI_DEVICE_ID_QUATECH_ESC100M, 1 }, + { PCI_DEVICE_ID_QUATECH_QSCP100, 1 }, + { PCI_DEVICE_ID_QUATECH_DSCP100, 1 }, + { PCI_DEVICE_ID_QUATECH_QSCP200, 1 }, + { PCI_DEVICE_ID_QUATECH_DSCP200, 1 }, + { PCI_DEVICE_ID_QUATECH_ESCLP100, 0 }, + { PCI_DEVICE_ID_QUATECH_QSCLP100, 0 }, + { PCI_DEVICE_ID_QUATECH_DSCLP100, 0 }, + { PCI_DEVICE_ID_QUATECH_SSCLP100, 0 }, + { PCI_DEVICE_ID_QUATECH_QSCLP200, 0 }, + { PCI_DEVICE_ID_QUATECH_DSCLP200, 0 }, + { PCI_DEVICE_ID_QUATECH_SSCLP200, 0 }, + { PCI_DEVICE_ID_QUATECH_SPPXP_100, 0 }, + { 0, } +}; + +static int pci_quatech_amcc(u16 devid) +{ + struct quatech_feature *qf = &quatech_cards[0]; + while (qf->devid) { + if (qf->devid == devid) + return qf->amcc; + qf++; + } + pr_err("quatech: unknown port type '0x%04X'.\n", devid); + return 0; +}; + +static int pci_quatech_rqopr(struct uart_8250_port *port) +{ + unsigned long base = port->port.iobase; + u8 LCR, val; + + LCR = inb(base + UART_LCR); + outb(0xBF, base + UART_LCR); + val = inb(base + UART_SCR); + outb(LCR, base + UART_LCR); + return val; +} + +static void pci_quatech_wqopr(struct uart_8250_port *port, u8 qopr) +{ + unsigned long base = port->port.iobase; + u8 LCR, val; + + LCR = inb(base + UART_LCR); + outb(0xBF, base + UART_LCR); + val = inb(base + UART_SCR); + outb(qopr, base + UART_SCR); + outb(LCR, base + UART_LCR); +} + +static int pci_quatech_rqmcr(struct uart_8250_port *port) +{ + unsigned long base = port->port.iobase; + u8 LCR, val, qmcr; + + LCR = inb(base + UART_LCR); + outb(0xBF, base + UART_LCR); + val = inb(base + UART_SCR); + outb(val | 0x10, base + UART_SCR); + qmcr = inb(base + UART_MCR); + outb(val, base + UART_SCR); + outb(LCR, base + UART_LCR); + + return qmcr; +} + +static void pci_quatech_wqmcr(struct uart_8250_port *port, u8 qmcr) +{ + unsigned long base = port->port.iobase; + u8 LCR, val; + + LCR = inb(base + UART_LCR); + outb(0xBF, base + UART_LCR); + val = inb(base + UART_SCR); + outb(val | 0x10, base + UART_SCR); + outb(qmcr, base + UART_MCR); + outb(val, base + UART_SCR); + outb(LCR, base + UART_LCR); +} + +static int pci_quatech_has_qmcr(struct uart_8250_port *port) +{ + unsigned long base = port->port.iobase; + u8 LCR, val; + + LCR = inb(base + UART_LCR); + outb(0xBF, base + UART_LCR); + val = inb(base + UART_SCR); + if (val & 0x20) { + outb(0x80, UART_LCR); + if (!(inb(UART_SCR) & 0x20)) { + outb(LCR, base + UART_LCR); + return 1; + } + } + return 0; +} + +static int pci_quatech_test(struct uart_8250_port *port) +{ + u8 reg; + u8 qopr = pci_quatech_rqopr(port); + pci_quatech_wqopr(port, qopr & QPCR_TEST_FOR1); + reg = pci_quatech_rqopr(port) & 0xC0; + if (reg != QPCR_TEST_GET1) + return -EINVAL; + pci_quatech_wqopr(port, (qopr & QPCR_TEST_FOR1)|QPCR_TEST_FOR2); + reg = pci_quatech_rqopr(port) & 0xC0; + if (reg != QPCR_TEST_GET2) + return -EINVAL; + pci_quatech_wqopr(port, (qopr & QPCR_TEST_FOR1)|QPCR_TEST_FOR3); + reg = pci_quatech_rqopr(port) & 0xC0; + if (reg != QPCR_TEST_GET3) + return -EINVAL; + pci_quatech_wqopr(port, (qopr & QPCR_TEST_FOR1)|QPCR_TEST_FOR4); + reg = pci_quatech_rqopr(port) & 0xC0; + if (reg != QPCR_TEST_GET4) + return -EINVAL; + + pci_quatech_wqopr(port, qopr); + return 0; +} + +static int pci_quatech_clock(struct uart_8250_port *port) +{ + u8 qopr, reg, set; + unsigned long clock; + + if (pci_quatech_test(port) < 0) + return 1843200; + + qopr = pci_quatech_rqopr(port); + + pci_quatech_wqopr(port, qopr & ~QOPR_CLOCK_X8); + reg = pci_quatech_rqopr(port); + if (reg & QOPR_CLOCK_X8) { + clock = 1843200; + goto out; + } + pci_quatech_wqopr(port, qopr | QOPR_CLOCK_X8); + reg = pci_quatech_rqopr(port); + if (!(reg & QOPR_CLOCK_X8)) { + clock = 1843200; + goto out; + } + reg &= QOPR_CLOCK_X8; + if (reg == QOPR_CLOCK_X2) { + clock = 3685400; + set = QOPR_CLOCK_X2; + } else if (reg == QOPR_CLOCK_X4) { + clock = 7372800; + set = QOPR_CLOCK_X4; + } else if (reg == QOPR_CLOCK_X8) { + clock = 14745600; + set = QOPR_CLOCK_X8; + } else { + clock = 1843200; + set = QOPR_CLOCK_X1; + } + qopr &= ~QOPR_CLOCK_RATE_MASK; + qopr |= set; + +out: + pci_quatech_wqopr(port, qopr); + return clock; +} + +static int pci_quatech_rs422(struct uart_8250_port *port) +{ + u8 qmcr; + int rs422 = 0; + + if (!pci_quatech_has_qmcr(port)) + return 0; + qmcr = pci_quatech_rqmcr(port); + pci_quatech_wqmcr(port, 0xFF); + if (pci_quatech_rqmcr(port)) + rs422 = 1; + pci_quatech_wqmcr(port, qmcr); + return rs422; +} + +static int pci_quatech_init(struct pci_dev *dev) +{ + if (pci_quatech_amcc(dev->device)) { + unsigned long base = pci_resource_start(dev, 0); + if (base) { + u32 tmp; + outl(inl(base + 0x38), base + 0x38); + tmp = inl(base + 0x3c); + outl(tmp | 0x01000000, base + 0x3c); + outl(tmp, base + 0x3c); + } + } + return 0; +} + +static int pci_quatech_setup(struct serial_private *priv, + const struct pciserial_board *board, + struct uart_8250_port *port, int idx) +{ + /* Needed by pci_quatech calls below */ + port->port.iobase = pci_resource_start(priv->dev, FL_GET_BASE(board->flags)); + /* Set up the clocking */ + port->port.uartclk = pci_quatech_clock(port); + /* For now just warn about RS422 */ + if (pci_quatech_rs422(port)) + pr_warn("quatech: software control of RS422 features not currently supported.\n"); + return pci_default_setup(priv, board, port, idx); +} + +static void pci_quatech_exit(struct pci_dev *dev) +{ +} + static int pci_default_setup(struct serial_private *priv, const struct pciserial_board *board, struct uart_8250_port *port, int idx) @@ -1321,6 +1568,7 @@ /* Unknown vendors/cards - this should not be in linux/pci_ids.h */ #define PCI_SUBDEVICE_ID_UNKNOWN_0x1584 0x1584 +#define PCI_SUBDEVICE_ID_UNKNOWN_0x1588 0x1588 /* * Master list of serial port init/setup/exit quirks. @@ -1541,6 +1789,16 @@ .setup = pci_ni8430_setup, .exit = pci_ni8430_exit, }, + /* Quatech */ + { + .vendor = PCI_VENDOR_ID_QUATECH, + .device = PCI_ANY_ID, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .init = pci_quatech_init, + .setup = pci_quatech_setup, + .exit = pci_quatech_exit, + }, /* * Panacom */ @@ -1592,15 +1850,6 @@ }, { .vendor = PCI_VENDOR_ID_PLX, - .device = PCI_DEVICE_ID_PLX_9050, - .subvendor = PCI_VENDOR_ID_PLX, - .subdevice = PCI_SUBDEVICE_ID_UNKNOWN_0x1584, - .init = pci_plx9050_init, - .setup = pci_default_setup, - .exit = pci_plx9050_exit, - }, - { - .vendor = PCI_VENDOR_ID_PLX, .device = PCI_DEVICE_ID_PLX_ROMULUS, .subvendor = PCI_VENDOR_ID_PLX, .subdevice = PCI_DEVICE_ID_PLX_ROMULUS, @@ -3456,7 +3705,12 @@ { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, PCI_VENDOR_ID_PLX, PCI_SUBDEVICE_ID_UNKNOWN_0x1584, 0, 0, - pbn_b0_4_115200 }, + pbn_b2_4_115200 }, + /* Unknown card - subdevice 0x1588 */ + { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, + PCI_VENDOR_ID_PLX, + PCI_SUBDEVICE_ID_UNKNOWN_0x1588, 0, 0, + pbn_b2_8_115200 }, { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, PCI_SUBVENDOR_ID_KEYSPAN, PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0, @@ -3506,18 +3760,70 @@ { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS, 0x10b5, 0x106a, 0, 0, pbn_plx_romulus }, + /* + * Quatech cards. These actually have configurable clocks but for + * now we just use the default. + * + * 100 series are RS232, 200 series RS422, + */ { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_4_115200 }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100E, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b1_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC200E, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b1_4_115200 }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_8_115200 }, { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b1_8_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCP100, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b1_4_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCP100, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b1_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCP200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b1_4_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCP200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b1_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCLP100, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_4_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCLP100, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SSCLP100, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_1_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSCLP200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_4_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSCLP200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_2_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SSCLP200, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b2_1_115200 }, + { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESCLP100, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b0_8_115200 }, + { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954, PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0, --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/Kconfig +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/Kconfig @@ -84,6 +84,14 @@ depends on SERIAL_8250 && GSC default SERIAL_8250 +config SERIAL_8250_DMA + bool "DMA support for 16550 compatible UART controllers" if EXPERT + depends on SERIAL_8250 && DMADEVICES=y + default SERIAL_8250 + help + This builds DMA support that can be used with 8250/16650 + compatible UART controllers that support DMA signaling. + config SERIAL_8250_PCI tristate "8250/16550 PCI device support" if EXPERT depends on SERIAL_8250 && PCI @@ -249,15 +257,6 @@ system, say Y to this option. The driver can handle 1, 2, or 3 port cards. If unsure, say N. -config SERIAL_8250_RM9K - bool "Support for MIPS RM9xxx integrated serial port" - depends on SERIAL_8250 != n && SERIAL_RM9000 - select SERIAL_8250_SHARE_IRQ - help - Selecting this option will add support for the integrated serial - port hardware found on MIPS RM9122 and similar processors. - If unsure, say N. - config SERIAL_8250_FSL bool depends on SERIAL_8250_CONSOLE && PPC_UDBG_16550 @@ -265,7 +264,7 @@ config SERIAL_8250_DW tristate "Support for Synopsys DesignWare 8250 quirks" - depends on SERIAL_8250 && OF + depends on SERIAL_8250 help Selecting this option will enable handling of the extra features present in the Synopsys DesignWare APB UART. --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/8250.h +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/8250.h @@ -12,6 +12,35 @@ */ #include +#include + +struct uart_8250_dma { + dma_filter_fn fn; + void *rx_param; + void *tx_param; + + int rx_chan_id; + int tx_chan_id; + + struct dma_slave_config rxconf; + struct dma_slave_config txconf; + + struct dma_chan *rxchan; + struct dma_chan *txchan; + + dma_addr_t rx_addr; + dma_addr_t tx_addr; + + dma_cookie_t rx_cookie; + dma_cookie_t tx_cookie; + + void *rx_buf; + + size_t rx_size; + size_t tx_size; + + unsigned char tx_running:1; +}; struct old_serial_port { unsigned int uart; @@ -143,3 +172,24 @@ return 0; } #endif + +#ifdef CONFIG_SERIAL_8250_DMA +extern int serial8250_tx_dma(struct uart_8250_port *); +extern int serial8250_rx_dma(struct uart_8250_port *, unsigned int iir); +extern int serial8250_request_dma(struct uart_8250_port *); +extern void serial8250_release_dma(struct uart_8250_port *); +#else +static inline int serial8250_tx_dma(struct uart_8250_port *p) +{ + return -1; +} +static inline int serial8250_rx_dma(struct uart_8250_port *p, unsigned int iir) +{ + return -1; +} +static inline int serial8250_request_dma(struct uart_8250_port *p) +{ + return -1; +} +static inline void serial8250_release_dma(struct uart_8250_port *p) { } +#endif --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/8250.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/8250.c @@ -239,13 +239,6 @@ .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, .flags = UART_CAP_FIFO | UART_CAP_UUE | UART_CAP_RTOIE, }, - [PORT_RM9000] = { - .name = "RM9000", - .fifo_size = 16, - .tx_loadsz = 16, - .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, - .flags = UART_CAP_FIFO, - }, [PORT_OCTEON] = { .name = "OCTEON", .fifo_size = 64, @@ -308,7 +301,28 @@ }, [PORT_8250_CIR] = { .name = "CIR port" - } + }, + [PORT_ALTR_16550_F32] = { + .name = "Altera 16550 FIFO32", + .fifo_size = 32, + .tx_loadsz = 32, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, + .flags = UART_CAP_FIFO | UART_CAP_AFE, + }, + [PORT_ALTR_16550_F64] = { + .name = "Altera 16550 FIFO64", + .fifo_size = 64, + .tx_loadsz = 64, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, + .flags = UART_CAP_FIFO | UART_CAP_AFE, + }, + [PORT_ALTR_16550_F128] = { + .name = "Altera 16550 FIFO128", + .fifo_size = 128, + .tx_loadsz = 128, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10, + .flags = UART_CAP_FIFO | UART_CAP_AFE, + }, }; /* Uart divisor latch read */ @@ -370,56 +384,6 @@ #endif -#ifdef CONFIG_SERIAL_8250_RM9K - -static const u8 - regmap_in[8] = { - [UART_RX] = 0x00, - [UART_IER] = 0x0c, - [UART_IIR] = 0x14, - [UART_LCR] = 0x1c, - [UART_MCR] = 0x20, - [UART_LSR] = 0x24, - [UART_MSR] = 0x28, - [UART_SCR] = 0x2c - }, - regmap_out[8] = { - [UART_TX] = 0x04, - [UART_IER] = 0x0c, - [UART_FCR] = 0x18, - [UART_LCR] = 0x1c, - [UART_MCR] = 0x20, - [UART_LSR] = 0x24, - [UART_MSR] = 0x28, - [UART_SCR] = 0x2c - }; - -static unsigned int rm9k_serial_in(struct uart_port *p, int offset) -{ - offset = regmap_in[offset] << p->regshift; - return readl(p->membase + offset); -} - -static void rm9k_serial_out(struct uart_port *p, int offset, int value) -{ - offset = regmap_out[offset] << p->regshift; - writel(value, p->membase + offset); -} - -static int rm9k_serial_dl_read(struct uart_8250_port *up) -{ - return ((__raw_readl(up->port.membase + 0x10) << 8) | - (__raw_readl(up->port.membase + 0x08) & 0xff)) & 0xffff; -} - -static void rm9k_serial_dl_write(struct uart_8250_port *up, int value) -{ - __raw_writel(value, up->port.membase + 0x08); - __raw_writel(value >> 8, up->port.membase + 0x10); -} - -#endif - static unsigned int hub6_serial_in(struct uart_port *p, int offset) { offset = offset << p->regshift; @@ -497,15 +461,6 @@ p->serial_out = mem32_serial_out; break; -#ifdef CONFIG_SERIAL_8250_RM9K - case UPIO_RM9000: - p->serial_in = rm9k_serial_in; - p->serial_out = rm9k_serial_out; - up->dl_read = rm9k_serial_dl_read; - up->dl_write = rm9k_serial_dl_write; - break; -#endif - #ifdef CONFIG_MIPS_ALCHEMY case UPIO_AU: p->serial_in = au_serial_in; @@ -1341,7 +1296,9 @@ struct uart_8250_port *up = container_of(port, struct uart_8250_port, port); - if (!(up->ier & UART_IER_THRI)) { + if (up->dma && !serial8250_tx_dma(up)) { + return; + } else if (!(up->ier & UART_IER_THRI)) { up->ier |= UART_IER_THRI; serial_port_out(port, UART_IER, up->ier); @@ -1349,9 +1306,7 @@ unsigned char lsr; lsr = serial_in(up, UART_LSR); up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; - if ((port->type == PORT_RM9000) ? - (lsr & UART_LSR_THRE) : - (lsr & UART_LSR_TEMT)) + if (lsr & UART_LSR_TEMT) serial8250_tx_chars(up); } } @@ -1547,6 +1502,7 @@ unsigned long flags; struct uart_8250_port *up = container_of(port, struct uart_8250_port, port); + int dma_err = 0; if (iir & UART_IIR_NO_INT) return 0; @@ -1557,8 +1513,13 @@ DEBUG_INTR("status = %x...", status); - if (status & (UART_LSR_DR | UART_LSR_BI)) - status = serial8250_rx_chars(up, status); + if (status & (UART_LSR_DR | UART_LSR_BI)) { + if (up->dma) + dma_err = serial8250_rx_dma(up, iir); + + if (!up->dma || dma_err) + status = serial8250_rx_chars(up, status); + } serial8250_modem_status(up); if (status & UART_LSR_THRE) serial8250_tx_chars(up); @@ -1991,9 +1952,12 @@ if (port->type == PORT_8250_CIR) return -ENODEV; - port->fifosize = uart_config[up->port.type].fifo_size; - up->tx_loadsz = uart_config[up->port.type].tx_loadsz; - up->capabilities = uart_config[up->port.type].flags; + if (!port->fifosize) + port->fifosize = uart_config[port->type].fifo_size; + if (!up->tx_loadsz) + up->tx_loadsz = uart_config[port->type].tx_loadsz; + if (!up->capabilities) + up->capabilities = uart_config[port->type].flags; up->mcr = 0; if (port->iotype != up->cur_iotype) @@ -2198,6 +2162,18 @@ up->msr_saved_flags = 0; /* + * Request DMA channels for both RX and TX. + */ + if (up->dma) { + retval = serial8250_request_dma(up); + if (retval) { + pr_warn_ratelimited("ttyS%d - failed to request DMA\n", + serial_index(port)); + up->dma = NULL; + } + } + + /* * Finally, enable interrupts. Note: Modem status interrupts * are set via set_termios(), which will be occurring imminently * anyway, so we don't enable them here. @@ -2230,6 +2206,9 @@ up->ier = 0; serial_port_out(port, UART_IER, 0); + if (up->dma) + serial8250_release_dma(up); + spin_lock_irqsave(&port->lock, flags); if (port->flags & UPF_FOURPORT) { /* reset interrupts on the AST Fourport board */ @@ -2826,9 +2805,12 @@ serial8250_init_fixed_type_port(struct uart_8250_port *up, unsigned int type) { up->port.type = type; - up->port.fifosize = uart_config[type].fifo_size; - up->capabilities = uart_config[type].flags; - up->tx_loadsz = uart_config[type].tx_loadsz; + if (!up->port.fifosize) + up->port.fifosize = uart_config[type].fifo_size; + if (!up->tx_loadsz) + up->tx_loadsz = uart_config[type].tx_loadsz; + if (!up->capabilities) + up->capabilities = uart_config[type].flags; } static void __init @@ -3262,6 +3244,10 @@ uart->bugs = up->bugs; uart->port.mapbase = up->port.mapbase; uart->port.private_data = up->port.private_data; + uart->port.fifosize = up->port.fifosize; + uart->tx_loadsz = up->tx_loadsz; + uart->capabilities = up->capabilities; + if (up->port.dev) uart->port.dev = up->port.dev; @@ -3287,6 +3273,8 @@ uart->dl_read = up->dl_read; if (up->dl_write) uart->dl_write = up->dl_write; + if (up->dma) + uart->dma = up->dma; if (serial8250_isa_config != NULL) serial8250_isa_config(0, &uart->port, @@ -3430,3 +3418,32 @@ MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); #endif MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); + +#ifndef MODULE +/* This module was renamed to 8250_core in 3.7. Keep the old "8250" name + * working as well for the module options so we don't break people. We + * need to keep the names identical and the convenient macros will happily + * refuse to let us do that by failing the build with redefinition errors + * of global variables. So we stick them inside a dummy function to avoid + * those conflicts. The options still get parsed, and the redefined + * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive. + * + * This is hacky. I'm sorry. + */ +static void __used s8250_options(void) +{ +#undef MODULE_PARAM_PREFIX +#define MODULE_PARAM_PREFIX "8250." + + module_param_cb(share_irqs, ¶m_ops_uint, &share_irqs, 0644); + module_param_cb(nr_uarts, ¶m_ops_uint, &nr_uarts, 0644); + module_param_cb(skip_txen_test, ¶m_ops_uint, &skip_txen_test, 0644); +#ifdef CONFIG_SERIAL_8250_RSA + __module_param_call(MODULE_PARAM_PREFIX, probe_rsa, + ¶m_array_ops, .arr = &__param_arr_probe_rsa, + 0444, -1); +#endif +} +#else +MODULE_ALIAS("8250"); +#endif --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/Makefile +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/Makefile @@ -5,6 +5,7 @@ obj-$(CONFIG_SERIAL_8250) += 8250_core.o 8250_core-y := 8250.o 8250_core-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o +8250_core-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/8250_dw.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/8250_dw.c @@ -2,6 +2,7 @@ * Synopsys DesignWare 8250 driver. * * Copyright 2011 Picochip, Jamie Iles. + * Copyright 2013 Intel Corporation * * 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 @@ -24,6 +25,34 @@ #include #include #include +#include + +#include "8250.h" + +/* Offsets for the DesignWare specific registers */ +#define DW_UART_USR 0x1f /* UART Status Register */ +#define DW_UART_CPR 0xf4 /* Component Parameter Register */ +#define DW_UART_UCV 0xf8 /* UART Component Version */ + +/* Intel Low Power Subsystem specific */ +#define LPSS_PRV_CLOCK_PARAMS 0x800 + +/* Component Parameter Register bits */ +#define DW_UART_CPR_ABP_DATA_WIDTH (3 << 0) +#define DW_UART_CPR_AFCE_MODE (1 << 4) +#define DW_UART_CPR_THRE_MODE (1 << 5) +#define DW_UART_CPR_SIR_MODE (1 << 6) +#define DW_UART_CPR_SIR_LP_MODE (1 << 7) +#define DW_UART_CPR_ADDITIONAL_FEATURES (1 << 8) +#define DW_UART_CPR_FIFO_ACCESS (1 << 9) +#define DW_UART_CPR_FIFO_STAT (1 << 10) +#define DW_UART_CPR_SHADOW (1 << 11) +#define DW_UART_CPR_ENCODED_PARMS (1 << 12) +#define DW_UART_CPR_DMA_EXTRA (1 << 13) +#define DW_UART_CPR_FIFO_MODE (0xff << 16) +/* Helper for fifo size calculation */ +#define DW_UART_CPR_FIFO_SIZE(a) (((a >> 16) & 0xff) * 16) + struct dw8250_data { int last_lcr; @@ -66,9 +95,6 @@ return readl(p->membase + offset); } -/* Offset for the DesignWare's UART Status Register. */ -#define UART_USR 0x1f - static int dw8250_handle_irq(struct uart_port *p) { struct dw8250_data *d = p->private_data; @@ -78,7 +104,7 @@ return 1; } else if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) { /* Clear the USR and write the LCR again. */ - (void)p->serial_in(p, UART_USR); + (void)p->serial_in(p, DW_UART_USR); p->serial_out(p, UART_LCR, d->last_lcr); return 1; @@ -87,61 +113,208 @@ return 0; } +static int dw8250_probe_of(struct uart_port *p) +{ + struct device_node *np = p->dev->of_node; + u32 val; + + if (!of_property_read_u32(np, "reg-io-width", &val)) { + switch (val) { + case 1: + break; + case 4: + p->iotype = UPIO_MEM32; + p->serial_in = dw8250_serial_in32; + p->serial_out = dw8250_serial_out32; + break; + default: + dev_err(p->dev, "unsupported reg-io-width (%u)\n", val); + return -EINVAL; + } + } + + if (!of_property_read_u32(np, "reg-shift", &val)) + p->regshift = val; + + if (of_property_read_u32(np, "clock-frequency", &val)) { + dev_err(p->dev, "no clock-frequency property set\n"); + return -EINVAL; + } + p->uartclk = val; + + return 0; +} + +#ifdef CONFIG_ACPI +static bool dw8250_acpi_dma_filter(struct dma_chan *chan, void *parm) +{ + return chan->chan_id == *(int *)parm; +} + +static acpi_status +dw8250_acpi_walk_resource(struct acpi_resource *res, void *data) +{ + struct uart_port *p = data; + struct uart_8250_port *port; + struct uart_8250_dma *dma; + struct acpi_resource_fixed_dma *fixed_dma; + struct dma_slave_config *slave; + + port = container_of(p, struct uart_8250_port, port); + + switch (res->type) { + case ACPI_RESOURCE_TYPE_FIXED_DMA: + fixed_dma = &res->data.fixed_dma; + + /* TX comes first */ + if (!port->dma) { + dma = devm_kzalloc(p->dev, sizeof(*dma), GFP_KERNEL); + if (!dma) + return AE_NO_MEMORY; + + port->dma = dma; + slave = &dma->txconf; + + slave->direction = DMA_MEM_TO_DEV; + slave->dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; + slave->slave_id = fixed_dma->request_lines; + + dma->tx_chan_id = fixed_dma->channels; + dma->tx_param = &dma->tx_chan_id; + dma->fn = dw8250_acpi_dma_filter; + } else { + dma = port->dma; + slave = &dma->rxconf; + + slave->direction = DMA_DEV_TO_MEM; + slave->src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; + slave->slave_id = fixed_dma->request_lines; + + dma->rx_chan_id = fixed_dma->channels; + dma->rx_param = &dma->rx_chan_id; + } + + break; + } + + return AE_OK; +} + +static int dw8250_probe_acpi(struct uart_port *p) +{ + const struct acpi_device_id *id; + acpi_status status; + u32 reg; + + id = acpi_match_device(p->dev->driver->acpi_match_table, p->dev); + if (!id) + return -ENODEV; + + p->iotype = UPIO_MEM32; + p->serial_in = dw8250_serial_in32; + p->serial_out = dw8250_serial_out32; + p->regshift = 2; + p->uartclk = (unsigned int)id->driver_data; + + status = acpi_walk_resources(ACPI_HANDLE(p->dev), METHOD_NAME__CRS, + dw8250_acpi_walk_resource, p); + if (ACPI_FAILURE(status)) { + dev_err_ratelimited(p->dev, "%s failed \"%s\"\n", __func__, + acpi_format_exception(status)); + return -ENODEV; + } + + /* Fix Haswell issue where the clocks do not get enabled */ + if (!strcmp(id->id, "INT33C4") || !strcmp(id->id, "INT33C5")) { + reg = readl(p->membase + LPSS_PRV_CLOCK_PARAMS); + writel(reg | 1, p->membase + LPSS_PRV_CLOCK_PARAMS); + } + + return 0; +} +#else +static inline int dw8250_probe_acpi(struct uart_port *p) +{ + return -ENODEV; +} +#endif /* CONFIG_ACPI */ + +static void dw8250_setup_port(struct uart_8250_port *up) +{ + struct uart_port *p = &up->port; + u32 reg = readl(p->membase + DW_UART_UCV); + + /* + * If the Component Version Register returns zero, we know that + * ADDITIONAL_FEATURES are not enabled. No need to go any further. + */ + if (!reg) + return; + + dev_dbg_ratelimited(p->dev, "Designware UART version %c.%c%c\n", + (reg >> 24) & 0xff, (reg >> 16) & 0xff, (reg >> 8) & 0xff); + + reg = readl(p->membase + DW_UART_CPR); + if (!reg) + return; + + /* Select the type based on fifo */ + if (reg & DW_UART_CPR_FIFO_MODE) { + p->type = PORT_16550A; + p->flags |= UPF_FIXED_TYPE; + p->fifosize = DW_UART_CPR_FIFO_SIZE(reg); + up->tx_loadsz = p->fifosize; + } +} + static int dw8250_probe(struct platform_device *pdev) { struct uart_8250_port uart = {}; struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); struct resource *irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - struct device_node *np = pdev->dev.of_node; - u32 val; struct dw8250_data *data; + int err; if (!regs || !irq) { dev_err(&pdev->dev, "no registers/irq defined\n"); return -EINVAL; } - data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); - if (!data) - return -ENOMEM; - uart.port.private_data = data; - spin_lock_init(&uart.port.lock); uart.port.mapbase = regs->start; uart.port.irq = irq->start; uart.port.handle_irq = dw8250_handle_irq; uart.port.type = PORT_8250; - uart.port.flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP | - UPF_FIXED_PORT | UPF_FIXED_TYPE; + uart.port.flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_FIXED_PORT; uart.port.dev = &pdev->dev; + uart.port.membase = ioremap(regs->start, resource_size(regs)); + if (!uart.port.membase) + return -ENOMEM; + uart.port.iotype = UPIO_MEM; uart.port.serial_in = dw8250_serial_in; uart.port.serial_out = dw8250_serial_out; - if (!of_property_read_u32(np, "reg-io-width", &val)) { - switch (val) { - case 1: - break; - case 4: - uart.port.iotype = UPIO_MEM32; - uart.port.serial_in = dw8250_serial_in32; - uart.port.serial_out = dw8250_serial_out32; - break; - default: - dev_err(&pdev->dev, "unsupported reg-io-width (%u)\n", - val); - return -EINVAL; - } + + if (pdev->dev.of_node) { + err = dw8250_probe_of(&uart.port); + if (err) + return err; + } else if (ACPI_HANDLE(&pdev->dev)) { + err = dw8250_probe_acpi(&uart.port); + if (err) + return err; + } else { + return -ENODEV; } - if (!of_property_read_u32(np, "reg-shift", &val)) - uart.port.regshift = val; + dw8250_setup_port(&uart); - if (of_property_read_u32(np, "clock-frequency", &val)) { - dev_err(&pdev->dev, "no clock-frequency property set\n"); - return -EINVAL; - } - uart.port.uartclk = val; + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + uart.port.private_data = data; data->line = serial8250_register_8250_port(&uart); if (data->line < 0) @@ -184,17 +357,25 @@ #define dw8250_resume NULL #endif /* CONFIG_PM */ -static const struct of_device_id dw8250_match[] = { +static const struct of_device_id dw8250_of_match[] = { { .compatible = "snps,dw-apb-uart" }, { /* Sentinel */ } }; -MODULE_DEVICE_TABLE(of, dw8250_match); +MODULE_DEVICE_TABLE(of, dw8250_of_match); + +static const struct acpi_device_id dw8250_acpi_match[] = { + { "INT33C4", 100000000 }, + { "INT33C5", 100000000 }, + { }, +}; +MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match); static struct platform_driver dw8250_platform_driver = { .driver = { .name = "dw-apb-uart", .owner = THIS_MODULE, - .of_match_table = dw8250_match, + .of_match_table = dw8250_of_match, + .acpi_match_table = ACPI_PTR(dw8250_acpi_match), }, .probe = dw8250_probe, .remove = dw8250_remove, --- linux-lts-raring-3.8.0.orig/drivers/tty/serial/8250/8250_dma.c +++ linux-lts-raring-3.8.0/drivers/tty/serial/8250/8250_dma.c @@ -0,0 +1,213 @@ +/* + * 8250_dma.c - DMA Engine API support for 8250.c + * + * Copyright (C) 2013 Intel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ +#include +#include +#include +#include + +#include "8250.h" + +static void __dma_tx_complete(void *param) +{ + struct uart_8250_port *p = param; + struct uart_8250_dma *dma = p->dma; + struct circ_buf *xmit = &p->port.state->xmit; + + dma->tx_running = 0; + + dma_sync_single_for_cpu(dma->txchan->device->dev, dma->tx_addr, + UART_XMIT_SIZE, DMA_TO_DEVICE); + + xmit->tail += dma->tx_size; + xmit->tail &= UART_XMIT_SIZE - 1; + p->port.icount.tx += dma->tx_size; + + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) + uart_write_wakeup(&p->port); + + if (!uart_circ_empty(xmit) && !uart_tx_stopped(&p->port)) { + serial8250_tx_dma(p); + uart_write_wakeup(&p->port); + } +} + +static void __dma_rx_complete(void *param) +{ + struct uart_8250_port *p = param; + struct uart_8250_dma *dma = p->dma; + struct tty_struct *tty = p->port.state->port.tty; + struct dma_tx_state state; + + dma_sync_single_for_cpu(dma->rxchan->device->dev, dma->rx_addr, + dma->rx_size, DMA_FROM_DEVICE); + + dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state); + dmaengine_terminate_all(dma->rxchan); + + tty_insert_flip_string(tty, dma->rx_buf, dma->rx_size - state.residue); + p->port.icount.rx += dma->rx_size - state.residue; + + tty_flip_buffer_push(tty); +} + +int serial8250_tx_dma(struct uart_8250_port *p) +{ + struct uart_8250_dma *dma = p->dma; + struct circ_buf *xmit = &p->port.state->xmit; + struct dma_async_tx_descriptor *desc; + + if (dma->tx_running) { + uart_write_wakeup(&p->port); + return -EBUSY; + } + + dma->tx_size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE); + + desc = dmaengine_prep_slave_single(dma->txchan, + dma->tx_addr + xmit->tail, + dma->tx_size, DMA_MEM_TO_DEV, + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); + if (!desc) + return -EBUSY; + + dma->tx_running = 1; + + desc->callback = __dma_tx_complete; + desc->callback_param = p; + + dma->tx_cookie = dmaengine_submit(desc); + + dma_sync_single_for_device(dma->txchan->device->dev, dma->tx_addr, + UART_XMIT_SIZE, DMA_TO_DEVICE); + + dma_async_issue_pending(dma->txchan); + + return 0; +} +EXPORT_SYMBOL_GPL(serial8250_tx_dma); + +int serial8250_rx_dma(struct uart_8250_port *p, unsigned int iir) +{ + struct uart_8250_dma *dma = p->dma; + struct dma_async_tx_descriptor *desc; + struct dma_tx_state state; + int dma_status; + + /* + * If RCVR FIFO trigger level was not reached, complete the transfer and + * let 8250.c copy the remaining data. + */ + if ((iir & 0x3f) == UART_IIR_RX_TIMEOUT) { + dma_status = dmaengine_tx_status(dma->rxchan, dma->rx_cookie, + &state); + if (dma_status == DMA_IN_PROGRESS) { + dmaengine_pause(dma->rxchan); + __dma_rx_complete(p); + } + return -ETIMEDOUT; + } + + desc = dmaengine_prep_slave_single(dma->rxchan, dma->rx_addr, + dma->rx_size, DMA_DEV_TO_MEM, + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); + if (!desc) + return -EBUSY; + + desc->callback = __dma_rx_complete; + desc->callback_param = p; + + dma->rx_cookie = dmaengine_submit(desc); + + dma_sync_single_for_device(dma->rxchan->device->dev, dma->rx_addr, + dma->rx_size, DMA_FROM_DEVICE); + + dma_async_issue_pending(dma->rxchan); + + return 0; +} +EXPORT_SYMBOL_GPL(serial8250_rx_dma); + +int serial8250_request_dma(struct uart_8250_port *p) +{ + struct uart_8250_dma *dma = p->dma; + dma_cap_mask_t mask; + + dma->rxconf.src_addr = p->port.mapbase + UART_RX; + dma->txconf.dst_addr = p->port.mapbase + UART_TX; + + dma_cap_zero(mask); + dma_cap_set(DMA_SLAVE, mask); + + /* Get a channel for RX */ + dma->rxchan = dma_request_channel(mask, dma->fn, dma->rx_param); + if (!dma->rxchan) + return -ENODEV; + + dmaengine_slave_config(dma->rxchan, &dma->rxconf); + + /* Get a channel for TX */ + dma->txchan = dma_request_channel(mask, dma->fn, dma->tx_param); + if (!dma->txchan) { + dma_release_channel(dma->rxchan); + return -ENODEV; + } + + dmaengine_slave_config(dma->txchan, &dma->txconf); + + /* RX buffer */ + if (!dma->rx_size) + dma->rx_size = PAGE_SIZE; + + dma->rx_buf = dma_alloc_coherent(dma->rxchan->device->dev, dma->rx_size, + &dma->rx_addr, GFP_KERNEL); + if (!dma->rx_buf) { + dma_release_channel(dma->rxchan); + dma_release_channel(dma->txchan); + return -ENOMEM; + } + + /* TX buffer */ + dma->tx_addr = dma_map_single(dma->txchan->device->dev, + p->port.state->xmit.buf, + UART_XMIT_SIZE, + DMA_TO_DEVICE); + + dev_dbg_ratelimited(p->port.dev, "got both dma channels\n"); + + return 0; +} +EXPORT_SYMBOL_GPL(serial8250_request_dma); + +void serial8250_release_dma(struct uart_8250_port *p) +{ + struct uart_8250_dma *dma = p->dma; + + if (!dma) + return; + + /* Release RX resources */ + dmaengine_terminate_all(dma->rxchan); + dma_free_coherent(dma->rxchan->device->dev, dma->rx_size, dma->rx_buf, + dma->rx_addr); + dma_release_channel(dma->rxchan); + dma->rxchan = NULL; + + /* Release TX resources */ + dmaengine_terminate_all(dma->txchan); + dma_unmap_single(dma->txchan->device->dev, dma->tx_addr, + UART_XMIT_SIZE, DMA_TO_DEVICE); + dma_release_channel(dma->txchan); + dma->txchan = NULL; + dma->tx_running = 0; + + dev_dbg_ratelimited(p->port.dev, "dma channels released\n"); +} +EXPORT_SYMBOL_GPL(serial8250_release_dma); --- linux-lts-raring-3.8.0.orig/drivers/tty/hvc/hvsi_lib.c +++ linux-lts-raring-3.8.0/drivers/tty/hvc/hvsi_lib.c @@ -341,8 +341,8 @@ pr_devel("HVSI@%x: ... waiting handshake\n", pv->termno); - /* Try for up to 200s */ - for (timeout = 0; timeout < 20; timeout++) { + /* Try for up to 400ms */ + for (timeout = 0; timeout < 40; timeout++) { if (pv->established) goto established; if (!hvsi_get_packet(pv)) --- linux-lts-raring-3.8.0.orig/drivers/tty/hvc/hvc_xen.c +++ linux-lts-raring-3.8.0/drivers/tty/hvc/hvc_xen.c @@ -636,6 +636,7 @@ .name = "xenboot", .write = xenboot_write_console, .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME, + .index = -1, }; #endif /* CONFIG_EARLY_PRINTK */ --- linux-lts-raring-3.8.0.orig/drivers/tty/vt/vc_screen.c +++ linux-lts-raring-3.8.0/drivers/tty/vt/vc_screen.c @@ -93,7 +93,7 @@ static struct vcs_poll_data * vcs_poll_data_get(struct file *file) { - struct vcs_poll_data *poll = file->private_data; + struct vcs_poll_data *poll = file->private_data, *kill = NULL; if (poll) return poll; @@ -122,10 +122,12 @@ file->private_data = poll; } else { /* someone else raced ahead of us */ - vcs_poll_data_free(poll); + kill = poll; poll = file->private_data; } spin_unlock(&file->f_lock); + if (kill) + vcs_poll_data_free(kill); return poll; } --- linux-lts-raring-3.8.0.orig/drivers/tty/vt/vt.c +++ linux-lts-raring-3.8.0/drivers/tty/vt/vt.c @@ -539,7 +539,7 @@ { unsigned short *p = (unsigned short *) vc->vc_pos; - scr_memmovew(p + nr, p, (vc->vc_cols - vc->vc_x) * 2); + scr_memmovew(p + nr, p, (vc->vc_cols - vc->vc_x - nr) * 2); scr_memsetw(p, vc->vc_video_erase_char, nr * 2); vc->vc_need_wrap = 0; if (DO_UPDATE(vc)) @@ -638,7 +638,7 @@ * Redrawing of screen */ -static void clear_buffer_attributes(struct vc_data *vc) +void clear_buffer_attributes(struct vc_data *vc) { unsigned short *p = (unsigned short *)vc->vc_origin; int count = vc->vc_screenbuf_size / 2; @@ -2987,7 +2987,7 @@ static struct class *vtconsole_class; -static int bind_con_driver(const struct consw *csw, int first, int last, +static int do_bind_con_driver(const struct consw *csw, int first, int last, int deflt) { struct module *owner = csw->owner; @@ -2998,7 +2998,7 @@ if (!try_module_get(owner)) return -ENODEV; - console_lock(); + WARN_CONSOLE_UNLOCKED(); /* check if driver is registered */ for (i = 0; i < MAX_NR_CON_DRIVER; i++) { @@ -3083,11 +3083,22 @@ retval = 0; err: - console_unlock(); module_put(owner); return retval; }; + +static int bind_con_driver(const struct consw *csw, int first, int last, + int deflt) +{ + int ret; + + console_lock(); + ret = do_bind_con_driver(csw, first, last, deflt); + console_unlock(); + return ret; +} + #ifdef CONFIG_VT_HW_CONSOLE_BINDING static int con_is_graphics(const struct consw *csw, int first, int last) { @@ -3124,6 +3135,18 @@ */ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt) { + int retval; + + console_lock(); + retval = do_unbind_con_driver(csw, first, last, deflt); + console_unlock(); + return retval; +} +EXPORT_SYMBOL(unbind_con_driver); + +/* unlocked version of unbind_con_driver() */ +int do_unbind_con_driver(const struct consw *csw, int first, int last, int deflt) +{ struct module *owner = csw->owner; const struct consw *defcsw = NULL; struct con_driver *con_driver = NULL, *con_back = NULL; @@ -3132,7 +3155,7 @@ if (!try_module_get(owner)) return -ENODEV; - console_lock(); + WARN_CONSOLE_UNLOCKED(); /* check if driver is registered and if it is unbindable */ for (i = 0; i < MAX_NR_CON_DRIVER; i++) { @@ -3145,10 +3168,8 @@ } } - if (retval) { - console_unlock(); + if (retval) goto err; - } retval = -ENODEV; @@ -3164,15 +3185,11 @@ } } - if (retval) { - console_unlock(); + if (retval) goto err; - } - if (!con_is_bound(csw)) { - console_unlock(); + if (!con_is_bound(csw)) goto err; - } first = max(first, con_driver->first); last = min(last, con_driver->last); @@ -3199,15 +3216,14 @@ if (!con_is_bound(csw)) con_driver->flag &= ~CON_DRIVER_FLAG_INIT; - console_unlock(); /* ignore return value, binding should not fail */ - bind_con_driver(defcsw, first, last, deflt); + do_bind_con_driver(defcsw, first, last, deflt); err: module_put(owner); return retval; } -EXPORT_SYMBOL(unbind_con_driver); +EXPORT_SYMBOL_GPL(do_unbind_con_driver); static int vt_bind(struct con_driver *con) { @@ -3492,28 +3508,18 @@ } EXPORT_SYMBOL_GPL(con_debug_leave); -/** - * register_con_driver - register console driver to console layer - * @csw: console driver - * @first: the first console to take over, minimum value is 0 - * @last: the last console to take over, maximum value is MAX_NR_CONSOLES -1 - * - * DESCRIPTION: This function registers a console driver which can later - * bind to a range of consoles specified by @first and @last. It will - * also initialize the console driver by calling con_startup(). - */ -int register_con_driver(const struct consw *csw, int first, int last) +static int do_register_con_driver(const struct consw *csw, int first, int last) { struct module *owner = csw->owner; struct con_driver *con_driver; const char *desc; int i, retval = 0; + WARN_CONSOLE_UNLOCKED(); + if (!try_module_get(owner)) return -ENODEV; - console_lock(); - for (i = 0; i < MAX_NR_CON_DRIVER; i++) { con_driver = ®istered_con_driver[i]; @@ -3566,10 +3572,29 @@ } err: - console_unlock(); module_put(owner); return retval; } + +/** + * register_con_driver - register console driver to console layer + * @csw: console driver + * @first: the first console to take over, minimum value is 0 + * @last: the last console to take over, maximum value is MAX_NR_CONSOLES -1 + * + * DESCRIPTION: This function registers a console driver which can later + * bind to a range of consoles specified by @first and @last. It will + * also initialize the console driver by calling con_startup(). + */ +int register_con_driver(const struct consw *csw, int first, int last) +{ + int retval; + + console_lock(); + retval = do_register_con_driver(csw, first, last); + console_unlock(); + return retval; +} EXPORT_SYMBOL(register_con_driver); /** @@ -3585,9 +3610,18 @@ */ int unregister_con_driver(const struct consw *csw) { - int i, retval = -ENODEV; + int retval; console_lock(); + retval = do_unregister_con_driver(csw); + console_unlock(); + return retval; +} +EXPORT_SYMBOL(unregister_con_driver); + +int do_unregister_con_driver(const struct consw *csw) +{ + int i, retval = -ENODEV; /* cannot unregister a bound driver */ if (con_is_bound(csw)) @@ -3613,27 +3647,53 @@ } } err: - console_unlock(); return retval; } -EXPORT_SYMBOL(unregister_con_driver); +EXPORT_SYMBOL_GPL(do_unregister_con_driver); /* * If we support more console drivers, this function is used * when a driver wants to take over some existing consoles * and become default driver for newly opened ones. * - * take_over_console is basically a register followed by unbind + * take_over_console is basically a register followed by unbind + */ +int do_take_over_console(const struct consw *csw, int first, int last, int deflt) +{ + int err; + + err = do_register_con_driver(csw, first, last); + /* + * If we get an busy error we still want to bind the console driver + * and return success, as we may have unbound the console driver + * but not unregistered it. + */ + if (err == -EBUSY) + err = 0; + if (!err) + do_bind_con_driver(csw, first, last, deflt); + + return err; +} +EXPORT_SYMBOL_GPL(do_take_over_console); + +/* + * If we support more console drivers, this function is used + * when a driver wants to take over some existing consoles + * and become default driver for newly opened ones. + * + * take_over_console is basically a register followed by unbind */ int take_over_console(const struct consw *csw, int first, int last, int deflt) { int err; err = register_con_driver(csw, first, last); - /* if we get an busy error we still want to bind the console driver + /* + * If we get an busy error we still want to bind the console driver * and return success, as we may have unbound the console driver -  * but not unregistered it. - */ + * but not unregistered it. + */ if (err == -EBUSY) err = 0; if (!err) --- linux-lts-raring-3.8.0.orig/drivers/spi/Kconfig +++ linux-lts-raring-3.8.0/drivers/spi/Kconfig @@ -297,9 +297,20 @@ help This selects a driver for the PPC4xx SPI Controller. +config SPI_PXA2XX_PXADMA + bool "PXA2xx SSP legacy PXA DMA API support" + depends on SPI_PXA2XX && ARCH_PXA + help + Enable PXA private legacy DMA API support. Note that this is + deprecated in favor of generic DMA engine API. + +config SPI_PXA2XX_DMA + def_bool y + depends on SPI_PXA2XX && !SPI_PXA2XX_PXADMA + config SPI_PXA2XX tristate "PXA2xx SSP SPI master" - depends on (ARCH_PXA || (X86_32 && PCI)) && EXPERIMENTAL + depends on ARCH_PXA || PCI || ACPI select PXA_SSP if ARCH_PXA help This enables using a PXA2xx or Sodaville SSP port as a SPI master @@ -307,7 +318,7 @@ additional documentation can be found a Documentation/spi/pxa2xx. config SPI_PXA2XX_PCI - def_bool SPI_PXA2XX && X86_32 && PCI + def_tristate SPI_PXA2XX && PCI config SPI_RSPI tristate "Renesas RSPI controller" --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-pxa2xx-pxadma.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-pxa2xx-pxadma.c @@ -0,0 +1,490 @@ +/* + * PXA2xx SPI private DMA support. + * + * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "spi-pxa2xx.h" + +#define DMA_INT_MASK (DCSR_ENDINTR | DCSR_STARTINTR | DCSR_BUSERR) +#define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK) + +bool pxa2xx_spi_dma_is_possible(size_t len) +{ + /* Try to map dma buffer and do a dma transfer if successful, but + * only if the length is non-zero and less than MAX_DMA_LEN. + * + * Zero-length non-descriptor DMA is illegal on PXA2xx; force use + * of PIO instead. Care is needed above because the transfer may + * have have been passed with buffers that are already dma mapped. + * A zero-length transfer in PIO mode will not try to write/read + * to/from the buffers + * + * REVISIT large transfers are exactly where we most want to be + * using DMA. If this happens much, split those transfers into + * multiple DMA segments rather than forcing PIO. + */ + return len > 0 && len <= MAX_DMA_LEN; +} + +int pxa2xx_spi_map_dma_buffers(struct driver_data *drv_data) +{ + struct spi_message *msg = drv_data->cur_msg; + struct device *dev = &msg->spi->dev; + + if (!drv_data->cur_chip->enable_dma) + return 0; + + if (msg->is_dma_mapped) + return drv_data->rx_dma && drv_data->tx_dma; + + if (!IS_DMA_ALIGNED(drv_data->rx) || !IS_DMA_ALIGNED(drv_data->tx)) + return 0; + + /* Modify setup if rx buffer is null */ + if (drv_data->rx == NULL) { + *drv_data->null_dma_buf = 0; + drv_data->rx = drv_data->null_dma_buf; + drv_data->rx_map_len = 4; + } else + drv_data->rx_map_len = drv_data->len; + + + /* Modify setup if tx buffer is null */ + if (drv_data->tx == NULL) { + *drv_data->null_dma_buf = 0; + drv_data->tx = drv_data->null_dma_buf; + drv_data->tx_map_len = 4; + } else + drv_data->tx_map_len = drv_data->len; + + /* Stream map the tx buffer. Always do DMA_TO_DEVICE first + * so we flush the cache *before* invalidating it, in case + * the tx and rx buffers overlap. + */ + drv_data->tx_dma = dma_map_single(dev, drv_data->tx, + drv_data->tx_map_len, DMA_TO_DEVICE); + if (dma_mapping_error(dev, drv_data->tx_dma)) + return 0; + + /* Stream map the rx buffer */ + drv_data->rx_dma = dma_map_single(dev, drv_data->rx, + drv_data->rx_map_len, DMA_FROM_DEVICE); + if (dma_mapping_error(dev, drv_data->rx_dma)) { + dma_unmap_single(dev, drv_data->tx_dma, + drv_data->tx_map_len, DMA_TO_DEVICE); + return 0; + } + + return 1; +} + +static void pxa2xx_spi_unmap_dma_buffers(struct driver_data *drv_data) +{ + struct device *dev; + + if (!drv_data->dma_mapped) + return; + + if (!drv_data->cur_msg->is_dma_mapped) { + dev = &drv_data->cur_msg->spi->dev; + dma_unmap_single(dev, drv_data->rx_dma, + drv_data->rx_map_len, DMA_FROM_DEVICE); + dma_unmap_single(dev, drv_data->tx_dma, + drv_data->tx_map_len, DMA_TO_DEVICE); + } + + drv_data->dma_mapped = 0; +} + +static int wait_ssp_rx_stall(void const __iomem *ioaddr) +{ + unsigned long limit = loops_per_jiffy << 1; + + while ((read_SSSR(ioaddr) & SSSR_BSY) && --limit) + cpu_relax(); + + return limit; +} + +static int wait_dma_channel_stop(int channel) +{ + unsigned long limit = loops_per_jiffy << 1; + + while (!(DCSR(channel) & DCSR_STOPSTATE) && --limit) + cpu_relax(); + + return limit; +} + +static void pxa2xx_spi_dma_error_stop(struct driver_data *drv_data, + const char *msg) +{ + void __iomem *reg = drv_data->ioaddr; + + /* Stop and reset */ + DCSR(drv_data->rx_channel) = RESET_DMA_CHANNEL; + DCSR(drv_data->tx_channel) = RESET_DMA_CHANNEL; + write_SSSR_CS(drv_data, drv_data->clear_sr); + write_SSCR1(read_SSCR1(reg) & ~drv_data->dma_cr1, reg); + if (!pxa25x_ssp_comp(drv_data)) + write_SSTO(0, reg); + pxa2xx_spi_flush(drv_data); + write_SSCR0(read_SSCR0(reg) & ~SSCR0_SSE, reg); + + pxa2xx_spi_unmap_dma_buffers(drv_data); + + dev_err(&drv_data->pdev->dev, "%s\n", msg); + + drv_data->cur_msg->state = ERROR_STATE; + tasklet_schedule(&drv_data->pump_transfers); +} + +static void pxa2xx_spi_dma_transfer_complete(struct driver_data *drv_data) +{ + void __iomem *reg = drv_data->ioaddr; + struct spi_message *msg = drv_data->cur_msg; + + /* Clear and disable interrupts on SSP and DMA channels*/ + write_SSCR1(read_SSCR1(reg) & ~drv_data->dma_cr1, reg); + write_SSSR_CS(drv_data, drv_data->clear_sr); + DCSR(drv_data->tx_channel) = RESET_DMA_CHANNEL; + DCSR(drv_data->rx_channel) = RESET_DMA_CHANNEL; + + if (wait_dma_channel_stop(drv_data->rx_channel) == 0) + dev_err(&drv_data->pdev->dev, + "dma_handler: dma rx channel stop failed\n"); + + if (wait_ssp_rx_stall(drv_data->ioaddr) == 0) + dev_err(&drv_data->pdev->dev, + "dma_transfer: ssp rx stall failed\n"); + + pxa2xx_spi_unmap_dma_buffers(drv_data); + + /* update the buffer pointer for the amount completed in dma */ + drv_data->rx += drv_data->len - + (DCMD(drv_data->rx_channel) & DCMD_LENGTH); + + /* read trailing data from fifo, it does not matter how many + * bytes are in the fifo just read until buffer is full + * or fifo is empty, which ever occurs first */ + drv_data->read(drv_data); + + /* return count of what was actually read */ + msg->actual_length += drv_data->len - + (drv_data->rx_end - drv_data->rx); + + /* Transfer delays and chip select release are + * handled in pump_transfers or giveback + */ + + /* Move to next transfer */ + msg->state = pxa2xx_spi_next_transfer(drv_data); + + /* Schedule transfer tasklet */ + tasklet_schedule(&drv_data->pump_transfers); +} + +void pxa2xx_spi_dma_handler(int channel, void *data) +{ + struct driver_data *drv_data = data; + u32 irq_status = DCSR(channel) & DMA_INT_MASK; + + if (irq_status & DCSR_BUSERR) { + + if (channel == drv_data->tx_channel) + pxa2xx_spi_dma_error_stop(drv_data, + "dma_handler: bad bus address on tx channel"); + else + pxa2xx_spi_dma_error_stop(drv_data, + "dma_handler: bad bus address on rx channel"); + return; + } + + /* PXA255x_SSP has no timeout interrupt, wait for tailing bytes */ + if ((channel == drv_data->tx_channel) + && (irq_status & DCSR_ENDINTR) + && (drv_data->ssp_type == PXA25x_SSP)) { + + /* Wait for rx to stall */ + if (wait_ssp_rx_stall(drv_data->ioaddr) == 0) + dev_err(&drv_data->pdev->dev, + "dma_handler: ssp rx stall failed\n"); + + /* finish this transfer, start the next */ + pxa2xx_spi_dma_transfer_complete(drv_data); + } +} + +irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data) +{ + u32 irq_status; + void __iomem *reg = drv_data->ioaddr; + + irq_status = read_SSSR(reg) & drv_data->mask_sr; + if (irq_status & SSSR_ROR) { + pxa2xx_spi_dma_error_stop(drv_data, + "dma_transfer: fifo overrun"); + return IRQ_HANDLED; + } + + /* Check for false positive timeout */ + if ((irq_status & SSSR_TINT) + && (DCSR(drv_data->tx_channel) & DCSR_RUN)) { + write_SSSR(SSSR_TINT, reg); + return IRQ_HANDLED; + } + + if (irq_status & SSSR_TINT || drv_data->rx == drv_data->rx_end) { + + /* Clear and disable timeout interrupt, do the rest in + * dma_transfer_complete */ + if (!pxa25x_ssp_comp(drv_data)) + write_SSTO(0, reg); + + /* finish this transfer, start the next */ + pxa2xx_spi_dma_transfer_complete(drv_data); + + return IRQ_HANDLED; + } + + /* Opps problem detected */ + return IRQ_NONE; +} + +int pxa2xx_spi_dma_prepare(struct driver_data *drv_data, u32 dma_burst) +{ + u32 dma_width; + + switch (drv_data->n_bytes) { + case 1: + dma_width = DCMD_WIDTH1; + break; + case 2: + dma_width = DCMD_WIDTH2; + break; + default: + dma_width = DCMD_WIDTH4; + break; + } + + /* Setup rx DMA Channel */ + DCSR(drv_data->rx_channel) = RESET_DMA_CHANNEL; + DSADR(drv_data->rx_channel) = drv_data->ssdr_physical; + DTADR(drv_data->rx_channel) = drv_data->rx_dma; + if (drv_data->rx == drv_data->null_dma_buf) + /* No target address increment */ + DCMD(drv_data->rx_channel) = DCMD_FLOWSRC + | dma_width + | dma_burst + | drv_data->len; + else + DCMD(drv_data->rx_channel) = DCMD_INCTRGADDR + | DCMD_FLOWSRC + | dma_width + | dma_burst + | drv_data->len; + + /* Setup tx DMA Channel */ + DCSR(drv_data->tx_channel) = RESET_DMA_CHANNEL; + DSADR(drv_data->tx_channel) = drv_data->tx_dma; + DTADR(drv_data->tx_channel) = drv_data->ssdr_physical; + if (drv_data->tx == drv_data->null_dma_buf) + /* No source address increment */ + DCMD(drv_data->tx_channel) = DCMD_FLOWTRG + | dma_width + | dma_burst + | drv_data->len; + else + DCMD(drv_data->tx_channel) = DCMD_INCSRCADDR + | DCMD_FLOWTRG + | dma_width + | dma_burst + | drv_data->len; + + /* Enable dma end irqs on SSP to detect end of transfer */ + if (drv_data->ssp_type == PXA25x_SSP) + DCMD(drv_data->tx_channel) |= DCMD_ENDIRQEN; + + return 0; +} + +void pxa2xx_spi_dma_start(struct driver_data *drv_data) +{ + DCSR(drv_data->rx_channel) |= DCSR_RUN; + DCSR(drv_data->tx_channel) |= DCSR_RUN; +} + +int pxa2xx_spi_dma_setup(struct driver_data *drv_data) +{ + struct device *dev = &drv_data->pdev->dev; + struct ssp_device *ssp = drv_data->ssp; + + /* Get two DMA channels (rx and tx) */ + drv_data->rx_channel = pxa_request_dma("pxa2xx_spi_ssp_rx", + DMA_PRIO_HIGH, + pxa2xx_spi_dma_handler, + drv_data); + if (drv_data->rx_channel < 0) { + dev_err(dev, "problem (%d) requesting rx channel\n", + drv_data->rx_channel); + return -ENODEV; + } + drv_data->tx_channel = pxa_request_dma("pxa2xx_spi_ssp_tx", + DMA_PRIO_MEDIUM, + pxa2xx_spi_dma_handler, + drv_data); + if (drv_data->tx_channel < 0) { + dev_err(dev, "problem (%d) requesting tx channel\n", + drv_data->tx_channel); + pxa_free_dma(drv_data->rx_channel); + return -ENODEV; + } + + DRCMR(ssp->drcmr_rx) = DRCMR_MAPVLD | drv_data->rx_channel; + DRCMR(ssp->drcmr_tx) = DRCMR_MAPVLD | drv_data->tx_channel; + + return 0; +} + +void pxa2xx_spi_dma_release(struct driver_data *drv_data) +{ + struct ssp_device *ssp = drv_data->ssp; + + DRCMR(ssp->drcmr_rx) = 0; + DRCMR(ssp->drcmr_tx) = 0; + + if (drv_data->tx_channel != 0) + pxa_free_dma(drv_data->tx_channel); + if (drv_data->rx_channel != 0) + pxa_free_dma(drv_data->rx_channel); +} + +void pxa2xx_spi_dma_resume(struct driver_data *drv_data) +{ + if (drv_data->rx_channel != -1) + DRCMR(drv_data->ssp->drcmr_rx) = + DRCMR_MAPVLD | drv_data->rx_channel; + if (drv_data->tx_channel != -1) + DRCMR(drv_data->ssp->drcmr_tx) = + DRCMR_MAPVLD | drv_data->tx_channel; +} + +int pxa2xx_spi_set_dma_burst_and_threshold(struct chip_data *chip, + struct spi_device *spi, + u8 bits_per_word, u32 *burst_code, + u32 *threshold) +{ + struct pxa2xx_spi_chip *chip_info = + (struct pxa2xx_spi_chip *)spi->controller_data; + int bytes_per_word; + int burst_bytes; + int thresh_words; + int req_burst_size; + int retval = 0; + + /* Set the threshold (in registers) to equal the same amount of data + * as represented by burst size (in bytes). The computation below + * is (burst_size rounded up to nearest 8 byte, word or long word) + * divided by (bytes/register); the tx threshold is the inverse of + * the rx, so that there will always be enough data in the rx fifo + * to satisfy a burst, and there will always be enough space in the + * tx fifo to accept a burst (a tx burst will overwrite the fifo if + * there is not enough space), there must always remain enough empty + * space in the rx fifo for any data loaded to the tx fifo. + * Whenever burst_size (in bytes) equals bits/word, the fifo threshold + * will be 8, or half the fifo; + * The threshold can only be set to 2, 4 or 8, but not 16, because + * to burst 16 to the tx fifo, the fifo would have to be empty; + * however, the minimum fifo trigger level is 1, and the tx will + * request service when the fifo is at this level, with only 15 spaces. + */ + + /* find bytes/word */ + if (bits_per_word <= 8) + bytes_per_word = 1; + else if (bits_per_word <= 16) + bytes_per_word = 2; + else + bytes_per_word = 4; + + /* use struct pxa2xx_spi_chip->dma_burst_size if available */ + if (chip_info) + req_burst_size = chip_info->dma_burst_size; + else { + switch (chip->dma_burst_size) { + default: + /* if the default burst size is not set, + * do it now */ + chip->dma_burst_size = DCMD_BURST8; + case DCMD_BURST8: + req_burst_size = 8; + break; + case DCMD_BURST16: + req_burst_size = 16; + break; + case DCMD_BURST32: + req_burst_size = 32; + break; + } + } + if (req_burst_size <= 8) { + *burst_code = DCMD_BURST8; + burst_bytes = 8; + } else if (req_burst_size <= 16) { + if (bytes_per_word == 1) { + /* don't burst more than 1/2 the fifo */ + *burst_code = DCMD_BURST8; + burst_bytes = 8; + retval = 1; + } else { + *burst_code = DCMD_BURST16; + burst_bytes = 16; + } + } else { + if (bytes_per_word == 1) { + /* don't burst more than 1/2 the fifo */ + *burst_code = DCMD_BURST8; + burst_bytes = 8; + retval = 1; + } else if (bytes_per_word == 2) { + /* don't burst more than 1/2 the fifo */ + *burst_code = DCMD_BURST16; + burst_bytes = 16; + retval = 1; + } else { + *burst_code = DCMD_BURST32; + burst_bytes = 32; + } + } + + thresh_words = burst_bytes / bytes_per_word; + + /* thresh_words will be between 2 and 8 */ + *threshold = (SSCR1_RxTresh(thresh_words) & SSCR1_RFT) + | (SSCR1_TxTresh(16-thresh_words) & SSCR1_TFT); + + return retval; +} --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-mpc512x-psc.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-mpc512x-psc.c @@ -164,7 +164,7 @@ for (i = count; i > 0; i--) { data = tx_buf ? *tx_buf++ : 0; - if (len == EOFBYTE) + if (len == EOFBYTE && t->cs_change) setbits32(&fifo->txcmd, MPC512x_PSC_FIFO_EOF); out_8(&fifo->txdata_8, data); len--; --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-s3c64xx.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-s3c64xx.c @@ -997,25 +997,30 @@ { struct s3c64xx_spi_driver_data *sdd = data; struct spi_master *spi = sdd->master; - unsigned int val; - - val = readl(sdd->regs + S3C64XX_SPI_PENDING_CLR); - - val &= S3C64XX_SPI_PND_RX_OVERRUN_CLR | - S3C64XX_SPI_PND_RX_UNDERRUN_CLR | - S3C64XX_SPI_PND_TX_OVERRUN_CLR | - S3C64XX_SPI_PND_TX_UNDERRUN_CLR; + unsigned int val, clr = 0; - writel(val, sdd->regs + S3C64XX_SPI_PENDING_CLR); + val = readl(sdd->regs + S3C64XX_SPI_STATUS); - if (val & S3C64XX_SPI_PND_RX_OVERRUN_CLR) + if (val & S3C64XX_SPI_ST_RX_OVERRUN_ERR) { + clr = S3C64XX_SPI_PND_RX_OVERRUN_CLR; dev_err(&spi->dev, "RX overrun\n"); - if (val & S3C64XX_SPI_PND_RX_UNDERRUN_CLR) + } + if (val & S3C64XX_SPI_ST_RX_UNDERRUN_ERR) { + clr |= S3C64XX_SPI_PND_RX_UNDERRUN_CLR; dev_err(&spi->dev, "RX underrun\n"); - if (val & S3C64XX_SPI_PND_TX_OVERRUN_CLR) + } + if (val & S3C64XX_SPI_ST_TX_OVERRUN_ERR) { + clr |= S3C64XX_SPI_PND_TX_OVERRUN_CLR; dev_err(&spi->dev, "TX overrun\n"); - if (val & S3C64XX_SPI_PND_TX_UNDERRUN_CLR) + } + if (val & S3C64XX_SPI_ST_TX_UNDERRUN_ERR) { + clr |= S3C64XX_SPI_PND_TX_UNDERRUN_CLR; dev_err(&spi->dev, "TX underrun\n"); + } + + /* Clear the pending irq by setting and then clearing it */ + writel(clr, sdd->regs + S3C64XX_SPI_PENDING_CLR); + writel(0, sdd->regs + S3C64XX_SPI_PENDING_CLR); return IRQ_HANDLED; } @@ -1039,9 +1044,13 @@ writel(0, regs + S3C64XX_SPI_MODE_CFG); writel(0, regs + S3C64XX_SPI_PACKET_CNT); - /* Clear any irq pending bits */ - writel(readl(regs + S3C64XX_SPI_PENDING_CLR), - regs + S3C64XX_SPI_PENDING_CLR); + /* Clear any irq pending bits, should set and clear the bits */ + val = S3C64XX_SPI_PND_RX_OVERRUN_CLR | + S3C64XX_SPI_PND_RX_UNDERRUN_CLR | + S3C64XX_SPI_PND_TX_OVERRUN_CLR | + S3C64XX_SPI_PND_TX_UNDERRUN_CLR; + writel(val, regs + S3C64XX_SPI_PENDING_CLR); + writel(0, regs + S3C64XX_SPI_PENDING_CLR); writel(0, regs + S3C64XX_SPI_SWAP_CFG); --- linux-lts-raring-3.8.0.orig/drivers/spi/Makefile +++ linux-lts-raring-3.8.0/drivers/spi/Makefile @@ -47,7 +47,10 @@ obj-$(CONFIG_SPI_ORION) += spi-orion.o obj-$(CONFIG_SPI_PL022) += spi-pl022.o obj-$(CONFIG_SPI_PPC4xx) += spi-ppc4xx.o -obj-$(CONFIG_SPI_PXA2XX) += spi-pxa2xx.o +spi-pxa2xx-platform-objs := spi-pxa2xx.o +spi-pxa2xx-platform-$(CONFIG_SPI_PXA2XX_PXADMA) += spi-pxa2xx-pxadma.o +spi-pxa2xx-platform-$(CONFIG_SPI_PXA2XX_DMA) += spi-pxa2xx-dma.o +obj-$(CONFIG_SPI_PXA2XX) += spi-pxa2xx-platform.o obj-$(CONFIG_SPI_PXA2XX_PCI) += spi-pxa2xx-pci.o obj-$(CONFIG_SPI_RSPI) += spi-rspi.o obj-$(CONFIG_SPI_S3C24XX) += spi-s3c24xx-hw.o --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-davinci.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-davinci.c @@ -608,7 +608,7 @@ else buf = (void *)t->tx_buf; t->tx_dma = dma_map_single(&spi->dev, buf, - t->len, DMA_FROM_DEVICE); + t->len, DMA_TO_DEVICE); if (!t->tx_dma) { ret = -EFAULT; goto err_tx_map; --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-pxa2xx.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-pxa2xx.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs + * Copyright (C) 2013, Intel Corporation * * 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 @@ -24,17 +25,20 @@ #include #include #include -#include #include #include #include #include #include +#include +#include +#include #include #include #include +#include "spi-pxa2xx.h" MODULE_AUTHOR("Stephen Street"); MODULE_DESCRIPTION("PXA2xx SSP SPI Controller"); @@ -45,12 +49,6 @@ #define TIMOUT_DFLT 1000 -#define DMA_INT_MASK (DCSR_ENDINTR | DCSR_STARTINTR | DCSR_BUSERR) -#define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK) -#define IS_DMA_ALIGNED(x) ((((u32)(x)) & 0x07) == 0) -#define MAX_DMA_LEN 8191 -#define DMA_ALIGNMENT 8 - /* * for testing SSCR1 changes that require SSP restart, basically * everything except the service and interrupt enables, the pxa270 developer @@ -65,115 +63,97 @@ | SSCR1_RFT | SSCR1_TFT | SSCR1_MWDS \ | SSCR1_SPH | SSCR1_SPO | SSCR1_LBM) -#define DEFINE_SSP_REG(reg, off) \ -static inline u32 read_##reg(void const __iomem *p) \ -{ return __raw_readl(p + (off)); } \ -\ -static inline void write_##reg(u32 v, void __iomem *p) \ -{ __raw_writel(v, p + (off)); } - -DEFINE_SSP_REG(SSCR0, 0x00) -DEFINE_SSP_REG(SSCR1, 0x04) -DEFINE_SSP_REG(SSSR, 0x08) -DEFINE_SSP_REG(SSITR, 0x0c) -DEFINE_SSP_REG(SSDR, 0x10) -DEFINE_SSP_REG(SSTO, 0x28) -DEFINE_SSP_REG(SSPSP, 0x2c) - -#define START_STATE ((void*)0) -#define RUNNING_STATE ((void*)1) -#define DONE_STATE ((void*)2) -#define ERROR_STATE ((void*)-1) - -#define QUEUE_RUNNING 0 -#define QUEUE_STOPPED 1 - -struct driver_data { - /* Driver model hookup */ - struct platform_device *pdev; +#define LPSS_RX_THRESH_DFLT 64 +#define LPSS_TX_LOTHRESH_DFLT 160 +#define LPSS_TX_HITHRESH_DFLT 224 + +/* Offset from drv_data->lpss_base */ +#define SPI_CS_CONTROL 0x18 +#define SPI_CS_CONTROL_SW_MODE BIT(0) +#define SPI_CS_CONTROL_CS_HIGH BIT(1) - /* SSP Info */ - struct ssp_device *ssp; +static bool is_lpss_ssp(const struct driver_data *drv_data) +{ + return drv_data->ssp_type == LPSS_SSP; +} - /* SPI framework hookup */ - enum pxa_ssp_type ssp_type; - struct spi_master *master; +/* + * Read and write LPSS SSP private registers. Caller must first check that + * is_lpss_ssp() returns true before these can be called. + */ +static u32 __lpss_ssp_read_priv(struct driver_data *drv_data, unsigned offset) +{ + WARN_ON(!drv_data->lpss_base); + return readl(drv_data->lpss_base + offset); +} - /* PXA hookup */ - struct pxa2xx_spi_master *master_info; +static void __lpss_ssp_write_priv(struct driver_data *drv_data, + unsigned offset, u32 value) +{ + WARN_ON(!drv_data->lpss_base); + writel(value, drv_data->lpss_base + offset); +} - /* DMA setup stuff */ - int rx_channel; - int tx_channel; - u32 *null_dma_buf; - - /* SSP register addresses */ - void __iomem *ioaddr; - u32 ssdr_physical; - - /* SSP masks*/ - u32 dma_cr1; - u32 int_cr1; - u32 clear_sr; - u32 mask_sr; - - /* Driver message queue */ - struct workqueue_struct *workqueue; - struct work_struct pump_messages; - spinlock_t lock; - struct list_head queue; - int busy; - int run; - - /* Message Transfer pump */ - struct tasklet_struct pump_transfers; - - /* Current message transfer state info */ - struct spi_message* cur_msg; - struct spi_transfer* cur_transfer; - struct chip_data *cur_chip; - size_t len; - void *tx; - void *tx_end; - void *rx; - void *rx_end; - int dma_mapped; - dma_addr_t rx_dma; - dma_addr_t tx_dma; - size_t rx_map_len; - size_t tx_map_len; - u8 n_bytes; - u32 dma_width; - int (*write)(struct driver_data *drv_data); - int (*read)(struct driver_data *drv_data); - irqreturn_t (*transfer_handler)(struct driver_data *drv_data); - void (*cs_control)(u32 command); -}; +/* + * lpss_ssp_setup - perform LPSS SSP specific setup + * @drv_data: pointer to the driver private data + * + * Perform LPSS SSP specific setup. This function must be called first if + * one is going to use LPSS SSP private registers. + */ +static void lpss_ssp_setup(struct driver_data *drv_data) +{ + unsigned offset = 0x400; + u32 value, orig; -struct chip_data { - u32 cr0; - u32 cr1; - u32 psp; - u32 timeout; - u8 n_bytes; - u32 dma_width; - u32 dma_burst_size; - u32 threshold; - u32 dma_threshold; - u8 enable_dma; - u8 bits_per_word; - u32 speed_hz; - union { - int gpio_cs; - unsigned int frm; - }; - int gpio_cs_inverted; - int (*write)(struct driver_data *drv_data); - int (*read)(struct driver_data *drv_data); - void (*cs_control)(u32 command); -}; + if (!is_lpss_ssp(drv_data)) + return; + + /* + * Perform auto-detection of the LPSS SSP private registers. They + * can be either at 1k or 2k offset from the base address. + */ + orig = readl(drv_data->ioaddr + offset + SPI_CS_CONTROL); + + value = orig | SPI_CS_CONTROL_SW_MODE; + writel(value, drv_data->ioaddr + offset + SPI_CS_CONTROL); + value = readl(drv_data->ioaddr + offset + SPI_CS_CONTROL); + if (value != (orig | SPI_CS_CONTROL_SW_MODE)) { + offset = 0x800; + goto detection_done; + } + + value &= ~SPI_CS_CONTROL_SW_MODE; + writel(value, drv_data->ioaddr + offset + SPI_CS_CONTROL); + value = readl(drv_data->ioaddr + offset + SPI_CS_CONTROL); + if (value != orig) { + offset = 0x800; + goto detection_done; + } + +detection_done: + /* Now set the LPSS base */ + drv_data->lpss_base = drv_data->ioaddr + offset; -static void pump_messages(struct work_struct *work); + /* Enable software chip select control */ + value = SPI_CS_CONTROL_SW_MODE | SPI_CS_CONTROL_CS_HIGH; + __lpss_ssp_write_priv(drv_data, SPI_CS_CONTROL, value); +} + +static void lpss_ssp_cs_control(struct driver_data *drv_data, bool enable) +{ + u32 value; + + if (!is_lpss_ssp(drv_data)) + return; + + value = __lpss_ssp_read_priv(drv_data, SPI_CS_CONTROL); + if (enable) + value &= ~SPI_CS_CONTROL_CS_HIGH; + else + value |= SPI_CS_CONTROL_CS_HIGH; + __lpss_ssp_write_priv(drv_data, SPI_CS_CONTROL, value); +} static void cs_assert(struct driver_data *drv_data) { @@ -189,8 +169,12 @@ return; } - if (gpio_is_valid(chip->gpio_cs)) + if (gpio_is_valid(chip->gpio_cs)) { gpio_set_value(chip->gpio_cs, chip->gpio_cs_inverted); + return; + } + + lpss_ssp_cs_control(drv_data, true); } static void cs_deassert(struct driver_data *drv_data) @@ -205,30 +189,15 @@ return; } - if (gpio_is_valid(chip->gpio_cs)) + if (gpio_is_valid(chip->gpio_cs)) { gpio_set_value(chip->gpio_cs, !chip->gpio_cs_inverted); -} - -static void write_SSSR_CS(struct driver_data *drv_data, u32 val) -{ - void __iomem *reg = drv_data->ioaddr; - - if (drv_data->ssp_type == CE4100_SSP) - val |= read_SSSR(reg) & SSSR_ALT_FRM_MASK; + return; + } - write_SSSR(val, reg); + lpss_ssp_cs_control(drv_data, false); } -static int pxa25x_ssp_comp(struct driver_data *drv_data) -{ - if (drv_data->ssp_type == PXA25x_SSP) - return 1; - if (drv_data->ssp_type == CE4100_SSP) - return 1; - return 0; -} - -static int flush(struct driver_data *drv_data) +int pxa2xx_spi_flush(struct driver_data *drv_data) { unsigned long limit = loops_per_jiffy << 1; @@ -354,7 +323,7 @@ return drv_data->rx == drv_data->rx_end; } -static void *next_transfer(struct driver_data *drv_data) +void *pxa2xx_spi_next_transfer(struct driver_data *drv_data) { struct spi_message *msg = drv_data->cur_msg; struct spi_transfer *trans = drv_data->cur_transfer; @@ -370,89 +339,15 @@ return DONE_STATE; } -static int map_dma_buffers(struct driver_data *drv_data) -{ - struct spi_message *msg = drv_data->cur_msg; - struct device *dev = &msg->spi->dev; - - if (!drv_data->cur_chip->enable_dma) - return 0; - - if (msg->is_dma_mapped) - return drv_data->rx_dma && drv_data->tx_dma; - - if (!IS_DMA_ALIGNED(drv_data->rx) || !IS_DMA_ALIGNED(drv_data->tx)) - return 0; - - /* Modify setup if rx buffer is null */ - if (drv_data->rx == NULL) { - *drv_data->null_dma_buf = 0; - drv_data->rx = drv_data->null_dma_buf; - drv_data->rx_map_len = 4; - } else - drv_data->rx_map_len = drv_data->len; - - - /* Modify setup if tx buffer is null */ - if (drv_data->tx == NULL) { - *drv_data->null_dma_buf = 0; - drv_data->tx = drv_data->null_dma_buf; - drv_data->tx_map_len = 4; - } else - drv_data->tx_map_len = drv_data->len; - - /* Stream map the tx buffer. Always do DMA_TO_DEVICE first - * so we flush the cache *before* invalidating it, in case - * the tx and rx buffers overlap. - */ - drv_data->tx_dma = dma_map_single(dev, drv_data->tx, - drv_data->tx_map_len, DMA_TO_DEVICE); - if (dma_mapping_error(dev, drv_data->tx_dma)) - return 0; - - /* Stream map the rx buffer */ - drv_data->rx_dma = dma_map_single(dev, drv_data->rx, - drv_data->rx_map_len, DMA_FROM_DEVICE); - if (dma_mapping_error(dev, drv_data->rx_dma)) { - dma_unmap_single(dev, drv_data->tx_dma, - drv_data->tx_map_len, DMA_TO_DEVICE); - return 0; - } - - return 1; -} - -static void unmap_dma_buffers(struct driver_data *drv_data) -{ - struct device *dev; - - if (!drv_data->dma_mapped) - return; - - if (!drv_data->cur_msg->is_dma_mapped) { - dev = &drv_data->cur_msg->spi->dev; - dma_unmap_single(dev, drv_data->rx_dma, - drv_data->rx_map_len, DMA_FROM_DEVICE); - dma_unmap_single(dev, drv_data->tx_dma, - drv_data->tx_map_len, DMA_TO_DEVICE); - } - - drv_data->dma_mapped = 0; -} - /* caller already set message->status; dma and pio irqs are blocked */ static void giveback(struct driver_data *drv_data) { struct spi_transfer* last_transfer; - unsigned long flags; struct spi_message *msg; - spin_lock_irqsave(&drv_data->lock, flags); msg = drv_data->cur_msg; drv_data->cur_msg = NULL; drv_data->cur_transfer = NULL; - queue_work(drv_data->workqueue, &drv_data->pump_messages); - spin_unlock_irqrestore(&drv_data->lock, flags); last_transfer = list_entry(msg->transfers.prev, struct spi_transfer, @@ -481,13 +376,7 @@ */ /* get a pointer to the next message, if any */ - spin_lock_irqsave(&drv_data->lock, flags); - if (list_empty(&drv_data->queue)) - next_msg = NULL; - else - next_msg = list_entry(drv_data->queue.next, - struct spi_message, queue); - spin_unlock_irqrestore(&drv_data->lock, flags); + next_msg = spi_get_next_queued_message(drv_data->master); /* see if the next and current messages point * to the same chip @@ -498,168 +387,10 @@ cs_deassert(drv_data); } - msg->state = NULL; - if (msg->complete) - msg->complete(msg->context); - + spi_finalize_current_message(drv_data->master); drv_data->cur_chip = NULL; } -static int wait_ssp_rx_stall(void const __iomem *ioaddr) -{ - unsigned long limit = loops_per_jiffy << 1; - - while ((read_SSSR(ioaddr) & SSSR_BSY) && --limit) - cpu_relax(); - - return limit; -} - -static int wait_dma_channel_stop(int channel) -{ - unsigned long limit = loops_per_jiffy << 1; - - while (!(DCSR(channel) & DCSR_STOPSTATE) && --limit) - cpu_relax(); - - return limit; -} - -static void dma_error_stop(struct driver_data *drv_data, const char *msg) -{ - void __iomem *reg = drv_data->ioaddr; - - /* Stop and reset */ - DCSR(drv_data->rx_channel) = RESET_DMA_CHANNEL; - DCSR(drv_data->tx_channel) = RESET_DMA_CHANNEL; - write_SSSR_CS(drv_data, drv_data->clear_sr); - write_SSCR1(read_SSCR1(reg) & ~drv_data->dma_cr1, reg); - if (!pxa25x_ssp_comp(drv_data)) - write_SSTO(0, reg); - flush(drv_data); - write_SSCR0(read_SSCR0(reg) & ~SSCR0_SSE, reg); - - unmap_dma_buffers(drv_data); - - dev_err(&drv_data->pdev->dev, "%s\n", msg); - - drv_data->cur_msg->state = ERROR_STATE; - tasklet_schedule(&drv_data->pump_transfers); -} - -static void dma_transfer_complete(struct driver_data *drv_data) -{ - void __iomem *reg = drv_data->ioaddr; - struct spi_message *msg = drv_data->cur_msg; - - /* Clear and disable interrupts on SSP and DMA channels*/ - write_SSCR1(read_SSCR1(reg) & ~drv_data->dma_cr1, reg); - write_SSSR_CS(drv_data, drv_data->clear_sr); - DCSR(drv_data->tx_channel) = RESET_DMA_CHANNEL; - DCSR(drv_data->rx_channel) = RESET_DMA_CHANNEL; - - if (wait_dma_channel_stop(drv_data->rx_channel) == 0) - dev_err(&drv_data->pdev->dev, - "dma_handler: dma rx channel stop failed\n"); - - if (wait_ssp_rx_stall(drv_data->ioaddr) == 0) - dev_err(&drv_data->pdev->dev, - "dma_transfer: ssp rx stall failed\n"); - - unmap_dma_buffers(drv_data); - - /* update the buffer pointer for the amount completed in dma */ - drv_data->rx += drv_data->len - - (DCMD(drv_data->rx_channel) & DCMD_LENGTH); - - /* read trailing data from fifo, it does not matter how many - * bytes are in the fifo just read until buffer is full - * or fifo is empty, which ever occurs first */ - drv_data->read(drv_data); - - /* return count of what was actually read */ - msg->actual_length += drv_data->len - - (drv_data->rx_end - drv_data->rx); - - /* Transfer delays and chip select release are - * handled in pump_transfers or giveback - */ - - /* Move to next transfer */ - msg->state = next_transfer(drv_data); - - /* Schedule transfer tasklet */ - tasklet_schedule(&drv_data->pump_transfers); -} - -static void dma_handler(int channel, void *data) -{ - struct driver_data *drv_data = data; - u32 irq_status = DCSR(channel) & DMA_INT_MASK; - - if (irq_status & DCSR_BUSERR) { - - if (channel == drv_data->tx_channel) - dma_error_stop(drv_data, - "dma_handler: " - "bad bus address on tx channel"); - else - dma_error_stop(drv_data, - "dma_handler: " - "bad bus address on rx channel"); - return; - } - - /* PXA255x_SSP has no timeout interrupt, wait for tailing bytes */ - if ((channel == drv_data->tx_channel) - && (irq_status & DCSR_ENDINTR) - && (drv_data->ssp_type == PXA25x_SSP)) { - - /* Wait for rx to stall */ - if (wait_ssp_rx_stall(drv_data->ioaddr) == 0) - dev_err(&drv_data->pdev->dev, - "dma_handler: ssp rx stall failed\n"); - - /* finish this transfer, start the next */ - dma_transfer_complete(drv_data); - } -} - -static irqreturn_t dma_transfer(struct driver_data *drv_data) -{ - u32 irq_status; - void __iomem *reg = drv_data->ioaddr; - - irq_status = read_SSSR(reg) & drv_data->mask_sr; - if (irq_status & SSSR_ROR) { - dma_error_stop(drv_data, "dma_transfer: fifo overrun"); - return IRQ_HANDLED; - } - - /* Check for false positive timeout */ - if ((irq_status & SSSR_TINT) - && (DCSR(drv_data->tx_channel) & DCSR_RUN)) { - write_SSSR(SSSR_TINT, reg); - return IRQ_HANDLED; - } - - if (irq_status & SSSR_TINT || drv_data->rx == drv_data->rx_end) { - - /* Clear and disable timeout interrupt, do the rest in - * dma_transfer_complete */ - if (!pxa25x_ssp_comp(drv_data)) - write_SSTO(0, reg); - - /* finish this transfer, start the next */ - dma_transfer_complete(drv_data); - - return IRQ_HANDLED; - } - - /* Opps problem detected */ - return IRQ_NONE; -} - static void reset_sccr1(struct driver_data *drv_data) { void __iomem *reg = drv_data->ioaddr; @@ -681,7 +412,7 @@ reset_sccr1(drv_data); if (!pxa25x_ssp_comp(drv_data)) write_SSTO(0, reg); - flush(drv_data); + pxa2xx_spi_flush(drv_data); write_SSCR0(read_SSCR0(reg) & ~SSCR0_SSE, reg); dev_err(&drv_data->pdev->dev, "%s\n", msg); @@ -709,7 +440,7 @@ */ /* Move to next transfer */ - drv_data->cur_msg->state = next_transfer(drv_data); + drv_data->cur_msg->state = pxa2xx_spi_next_transfer(drv_data); /* Schedule transfer tasklet */ tasklet_schedule(&drv_data->pump_transfers); @@ -789,10 +520,20 @@ { struct driver_data *drv_data = dev_id; void __iomem *reg = drv_data->ioaddr; - u32 sccr1_reg = read_SSCR1(reg); + u32 sccr1_reg; u32 mask = drv_data->mask_sr; u32 status; + /* + * The IRQ might be shared with other peripherals so we must first + * check that are we RPM suspended or not. If we are we assume that + * the IRQ was not for us (we shouldn't be RPM suspended when the + * interrupt is enabled). + */ + if (pm_runtime_suspended(&drv_data->pdev->dev)) + return IRQ_NONE; + + sccr1_reg = read_SSCR1(reg); status = read_SSSR(reg); /* Ignore possible writes if we don't need to write */ @@ -820,106 +561,12 @@ return drv_data->transfer_handler(drv_data); } -static int set_dma_burst_and_threshold(struct chip_data *chip, - struct spi_device *spi, - u8 bits_per_word, u32 *burst_code, - u32 *threshold) -{ - struct pxa2xx_spi_chip *chip_info = - (struct pxa2xx_spi_chip *)spi->controller_data; - int bytes_per_word; - int burst_bytes; - int thresh_words; - int req_burst_size; - int retval = 0; - - /* Set the threshold (in registers) to equal the same amount of data - * as represented by burst size (in bytes). The computation below - * is (burst_size rounded up to nearest 8 byte, word or long word) - * divided by (bytes/register); the tx threshold is the inverse of - * the rx, so that there will always be enough data in the rx fifo - * to satisfy a burst, and there will always be enough space in the - * tx fifo to accept a burst (a tx burst will overwrite the fifo if - * there is not enough space), there must always remain enough empty - * space in the rx fifo for any data loaded to the tx fifo. - * Whenever burst_size (in bytes) equals bits/word, the fifo threshold - * will be 8, or half the fifo; - * The threshold can only be set to 2, 4 or 8, but not 16, because - * to burst 16 to the tx fifo, the fifo would have to be empty; - * however, the minimum fifo trigger level is 1, and the tx will - * request service when the fifo is at this level, with only 15 spaces. - */ - - /* find bytes/word */ - if (bits_per_word <= 8) - bytes_per_word = 1; - else if (bits_per_word <= 16) - bytes_per_word = 2; - else - bytes_per_word = 4; - - /* use struct pxa2xx_spi_chip->dma_burst_size if available */ - if (chip_info) - req_burst_size = chip_info->dma_burst_size; - else { - switch (chip->dma_burst_size) { - default: - /* if the default burst size is not set, - * do it now */ - chip->dma_burst_size = DCMD_BURST8; - case DCMD_BURST8: - req_burst_size = 8; - break; - case DCMD_BURST16: - req_burst_size = 16; - break; - case DCMD_BURST32: - req_burst_size = 32; - break; - } - } - if (req_burst_size <= 8) { - *burst_code = DCMD_BURST8; - burst_bytes = 8; - } else if (req_burst_size <= 16) { - if (bytes_per_word == 1) { - /* don't burst more than 1/2 the fifo */ - *burst_code = DCMD_BURST8; - burst_bytes = 8; - retval = 1; - } else { - *burst_code = DCMD_BURST16; - burst_bytes = 16; - } - } else { - if (bytes_per_word == 1) { - /* don't burst more than 1/2 the fifo */ - *burst_code = DCMD_BURST8; - burst_bytes = 8; - retval = 1; - } else if (bytes_per_word == 2) { - /* don't burst more than 1/2 the fifo */ - *burst_code = DCMD_BURST16; - burst_bytes = 16; - retval = 1; - } else { - *burst_code = DCMD_BURST32; - burst_bytes = 32; - } - } - - thresh_words = burst_bytes / bytes_per_word; - - /* thresh_words will be between 2 and 8 */ - *threshold = (SSCR1_RxTresh(thresh_words) & SSCR1_RFT) - | (SSCR1_TxTresh(16-thresh_words) & SSCR1_TFT); - - return retval; -} - -static unsigned int ssp_get_clk_div(struct ssp_device *ssp, int rate) +static unsigned int ssp_get_clk_div(struct driver_data *drv_data, int rate) { - unsigned long ssp_clk = clk_get_rate(ssp->clk); + unsigned long ssp_clk = drv_data->max_clk_rate; + const struct ssp_device *ssp = drv_data->ssp; + + rate = min_t(int, ssp_clk, rate); if (ssp->type == PXA25x_SSP || ssp->type == CE4100_SSP) return ((ssp_clk / (2 * rate) - 1) & 0xff) << 8; @@ -934,7 +581,6 @@ struct spi_transfer *transfer = NULL; struct spi_transfer *previous = NULL; struct chip_data *chip = NULL; - struct ssp_device *ssp = drv_data->ssp; void __iomem *reg = drv_data->ioaddr; u32 clk_div = 0; u8 bits = 0; @@ -976,8 +622,8 @@ cs_deassert(drv_data); } - /* Check for transfers that need multiple DMA segments */ - if (transfer->len > MAX_DMA_LEN && chip->enable_dma) { + /* Check if we can DMA this transfer */ + if (!pxa2xx_spi_dma_is_possible(transfer->len) && chip->enable_dma) { /* reject already-mapped transfers; PIO won't always work */ if (message->is_dma_mapped @@ -1000,21 +646,20 @@ } /* Setup the transfer state based on the type of transfer */ - if (flush(drv_data) == 0) { + if (pxa2xx_spi_flush(drv_data) == 0) { dev_err(&drv_data->pdev->dev, "pump_transfers: flush failed\n"); message->status = -EIO; giveback(drv_data); return; } drv_data->n_bytes = chip->n_bytes; - drv_data->dma_width = chip->dma_width; drv_data->tx = (void *)transfer->tx_buf; drv_data->tx_end = drv_data->tx + transfer->len; drv_data->rx = transfer->rx_buf; drv_data->rx_end = drv_data->rx + transfer->len; drv_data->rx_dma = transfer->rx_dma; drv_data->tx_dma = transfer->tx_dma; - drv_data->len = transfer->len & DCMD_LENGTH; + drv_data->len = transfer->len; drv_data->write = drv_data->tx ? chip->write : null_writer; drv_data->read = drv_data->rx ? chip->read : null_reader; @@ -1031,25 +676,22 @@ if (transfer->bits_per_word) bits = transfer->bits_per_word; - clk_div = ssp_get_clk_div(ssp, speed); + clk_div = ssp_get_clk_div(drv_data, speed); if (bits <= 8) { drv_data->n_bytes = 1; - drv_data->dma_width = DCMD_WIDTH1; drv_data->read = drv_data->read != null_reader ? u8_reader : null_reader; drv_data->write = drv_data->write != null_writer ? u8_writer : null_writer; } else if (bits <= 16) { drv_data->n_bytes = 2; - drv_data->dma_width = DCMD_WIDTH2; drv_data->read = drv_data->read != null_reader ? u16_reader : null_reader; drv_data->write = drv_data->write != null_writer ? u16_writer : null_writer; } else if (bits <= 32) { drv_data->n_bytes = 4; - drv_data->dma_width = DCMD_WIDTH4; drv_data->read = drv_data->read != null_reader ? u32_reader : null_reader; drv_data->write = drv_data->write != null_writer ? @@ -1058,7 +700,8 @@ /* if bits/word is changed in dma mode, then must check the * thresholds and burst also */ if (chip->enable_dma) { - if (set_dma_burst_and_threshold(chip, message->spi, + if (pxa2xx_spi_set_dma_burst_and_threshold(chip, + message->spi, bits, &dma_burst, &dma_thresh)) if (printk_ratelimit()) @@ -1077,70 +720,21 @@ message->state = RUNNING_STATE; - /* Try to map dma buffer and do a dma transfer if successful, but - * only if the length is non-zero and less than MAX_DMA_LEN. - * - * Zero-length non-descriptor DMA is illegal on PXA2xx; force use - * of PIO instead. Care is needed above because the transfer may - * have have been passed with buffers that are already dma mapped. - * A zero-length transfer in PIO mode will not try to write/read - * to/from the buffers - * - * REVISIT large transfers are exactly where we most want to be - * using DMA. If this happens much, split those transfers into - * multiple DMA segments rather than forcing PIO. - */ drv_data->dma_mapped = 0; - if (drv_data->len > 0 && drv_data->len <= MAX_DMA_LEN) - drv_data->dma_mapped = map_dma_buffers(drv_data); + if (pxa2xx_spi_dma_is_possible(drv_data->len)) + drv_data->dma_mapped = pxa2xx_spi_map_dma_buffers(drv_data); if (drv_data->dma_mapped) { /* Ensure we have the correct interrupt handler */ - drv_data->transfer_handler = dma_transfer; + drv_data->transfer_handler = pxa2xx_spi_dma_transfer; - /* Setup rx DMA Channel */ - DCSR(drv_data->rx_channel) = RESET_DMA_CHANNEL; - DSADR(drv_data->rx_channel) = drv_data->ssdr_physical; - DTADR(drv_data->rx_channel) = drv_data->rx_dma; - if (drv_data->rx == drv_data->null_dma_buf) - /* No target address increment */ - DCMD(drv_data->rx_channel) = DCMD_FLOWSRC - | drv_data->dma_width - | dma_burst - | drv_data->len; - else - DCMD(drv_data->rx_channel) = DCMD_INCTRGADDR - | DCMD_FLOWSRC - | drv_data->dma_width - | dma_burst - | drv_data->len; - - /* Setup tx DMA Channel */ - DCSR(drv_data->tx_channel) = RESET_DMA_CHANNEL; - DSADR(drv_data->tx_channel) = drv_data->tx_dma; - DTADR(drv_data->tx_channel) = drv_data->ssdr_physical; - if (drv_data->tx == drv_data->null_dma_buf) - /* No source address increment */ - DCMD(drv_data->tx_channel) = DCMD_FLOWTRG - | drv_data->dma_width - | dma_burst - | drv_data->len; - else - DCMD(drv_data->tx_channel) = DCMD_INCSRCADDR - | DCMD_FLOWTRG - | drv_data->dma_width - | dma_burst - | drv_data->len; - - /* Enable dma end irqs on SSP to detect end of transfer */ - if (drv_data->ssp_type == PXA25x_SSP) - DCMD(drv_data->tx_channel) |= DCMD_ENDIRQEN; + pxa2xx_spi_dma_prepare(drv_data, dma_burst); /* Clear status and start DMA engine */ cr1 = chip->cr1 | dma_thresh | drv_data->dma_cr1; write_SSSR(drv_data->clear_sr, reg); - DCSR(drv_data->rx_channel) |= DCSR_RUN; - DCSR(drv_data->tx_channel) |= DCSR_RUN; + + pxa2xx_spi_dma_start(drv_data); } else { /* Ensure we have the correct interrupt handler */ drv_data->transfer_handler = interrupt_transfer; @@ -1150,6 +744,13 @@ write_SSSR_CS(drv_data, drv_data->clear_sr); } + if (is_lpss_ssp(drv_data)) { + if ((read_SSIRF(reg) & 0xff) != chip->lpss_rx_threshold) + write_SSIRF(chip->lpss_rx_threshold, reg); + if ((read_SSITF(reg) & 0xffff) != chip->lpss_tx_threshold) + write_SSITF(chip->lpss_tx_threshold, reg); + } + /* see if we need to reload the config registers */ if ((read_SSCR0(reg) != cr0) || (read_SSCR1(reg) & SSCR1_CHANGE_MASK) != @@ -1176,31 +777,12 @@ write_SSCR1(cr1, reg); } -static void pump_messages(struct work_struct *work) +static int pxa2xx_spi_transfer_one_message(struct spi_master *master, + struct spi_message *msg) { - struct driver_data *drv_data = - container_of(work, struct driver_data, pump_messages); - unsigned long flags; - - /* Lock queue and check for queue work */ - spin_lock_irqsave(&drv_data->lock, flags); - if (list_empty(&drv_data->queue) || drv_data->run == QUEUE_STOPPED) { - drv_data->busy = 0; - spin_unlock_irqrestore(&drv_data->lock, flags); - return; - } - - /* Make sure we are not already running a message */ - if (drv_data->cur_msg) { - spin_unlock_irqrestore(&drv_data->lock, flags); - return; - } - - /* Extract head of queue */ - drv_data->cur_msg = list_entry(drv_data->queue.next, - struct spi_message, queue); - list_del_init(&drv_data->cur_msg->queue); + struct driver_data *drv_data = spi_master_get_devdata(master); + drv_data->cur_msg = msg; /* Initial message state*/ drv_data->cur_msg->state = START_STATE; drv_data->cur_transfer = list_entry(drv_data->cur_msg->transfers.next, @@ -1213,34 +795,27 @@ /* Mark as busy and launch transfers */ tasklet_schedule(&drv_data->pump_transfers); - - drv_data->busy = 1; - spin_unlock_irqrestore(&drv_data->lock, flags); + return 0; } -static int transfer(struct spi_device *spi, struct spi_message *msg) +static int pxa2xx_spi_prepare_transfer(struct spi_master *master) { - struct driver_data *drv_data = spi_master_get_devdata(spi->master); - unsigned long flags; + struct driver_data *drv_data = spi_master_get_devdata(master); - spin_lock_irqsave(&drv_data->lock, flags); - - if (drv_data->run == QUEUE_STOPPED) { - spin_unlock_irqrestore(&drv_data->lock, flags); - return -ESHUTDOWN; - } - - msg->actual_length = 0; - msg->status = -EINPROGRESS; - msg->state = START_STATE; - - list_add_tail(&msg->queue, &drv_data->queue); + pm_runtime_get_sync(&drv_data->pdev->dev); + return 0; +} - if (drv_data->run == QUEUE_RUNNING && !drv_data->busy) - queue_work(drv_data->workqueue, &drv_data->pump_messages); +static int pxa2xx_spi_unprepare_transfer(struct spi_master *master) +{ + struct driver_data *drv_data = spi_master_get_devdata(master); - spin_unlock_irqrestore(&drv_data->lock, flags); + /* Disable the SSP now */ + write_SSCR0(read_SSCR0(drv_data->ioaddr) & ~SSCR0_SSE, + drv_data->ioaddr); + pm_runtime_mark_last_busy(&drv_data->pdev->dev); + pm_runtime_put_autosuspend(&drv_data->pdev->dev); return 0; } @@ -1287,10 +862,18 @@ struct pxa2xx_spi_chip *chip_info = NULL; struct chip_data *chip; struct driver_data *drv_data = spi_master_get_devdata(spi->master); - struct ssp_device *ssp = drv_data->ssp; unsigned int clk_div; - uint tx_thres = TX_THRESH_DFLT; - uint rx_thres = RX_THRESH_DFLT; + uint tx_thres, tx_hi_thres, rx_thres; + + if (is_lpss_ssp(drv_data)) { + tx_thres = LPSS_TX_LOTHRESH_DFLT; + tx_hi_thres = LPSS_TX_HITHRESH_DFLT; + rx_thres = LPSS_RX_THRESH_DFLT; + } else { + tx_thres = TX_THRESH_DFLT; + tx_hi_thres = 0; + rx_thres = RX_THRESH_DFLT; + } if (!pxa25x_ssp_comp(drv_data) && (spi->bits_per_word < 4 || spi->bits_per_word > 32)) { @@ -1330,8 +913,6 @@ chip->gpio_cs = -1; chip->enable_dma = 0; chip->timeout = TIMOUT_DFLT; - chip->dma_burst_size = drv_data->master_info->enable_dma ? - DCMD_BURST8 : 0; } /* protocol drivers may change the chip settings, so... @@ -1345,23 +926,37 @@ chip->timeout = chip_info->timeout; if (chip_info->tx_threshold) tx_thres = chip_info->tx_threshold; + if (chip_info->tx_hi_threshold) + tx_hi_thres = chip_info->tx_hi_threshold; if (chip_info->rx_threshold) rx_thres = chip_info->rx_threshold; chip->enable_dma = drv_data->master_info->enable_dma; chip->dma_threshold = 0; if (chip_info->enable_loopback) chip->cr1 = SSCR1_LBM; + } else if (ACPI_HANDLE(&spi->dev)) { + /* + * Slave devices enumerated from ACPI namespace don't + * usually have chip_info but we still might want to use + * DMA with them. + */ + chip->enable_dma = drv_data->master_info->enable_dma; } chip->threshold = (SSCR1_RxTresh(rx_thres) & SSCR1_RFT) | (SSCR1_TxTresh(tx_thres) & SSCR1_TFT); + chip->lpss_rx_threshold = SSIRF_RxThresh(rx_thres); + chip->lpss_tx_threshold = SSITF_TxLoThresh(tx_thres) + | SSITF_TxHiThresh(tx_hi_thres); + /* set dma burst and threshold outside of chip_info path so that if * chip_info goes away after setting chip->enable_dma, the * burst and threshold can still respond to changes in bits_per_word */ if (chip->enable_dma) { /* set up legal burst and threshold for dma */ - if (set_dma_burst_and_threshold(chip, spi, spi->bits_per_word, + if (pxa2xx_spi_set_dma_burst_and_threshold(chip, spi, + spi->bits_per_word, &chip->dma_burst_size, &chip->dma_threshold)) { dev_warn(&spi->dev, "in setup: DMA burst size reduced " @@ -1369,7 +964,7 @@ } } - clk_div = ssp_get_clk_div(ssp, spi->max_speed_hz); + clk_div = ssp_get_clk_div(drv_data, spi->max_speed_hz); chip->speed_hz = spi->max_speed_hz; chip->cr0 = clk_div @@ -1382,32 +977,32 @@ chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) ? SSCR1_SPH : 0) | (((spi->mode & SPI_CPOL) != 0) ? SSCR1_SPO : 0); + if (spi->mode & SPI_LOOP) + chip->cr1 |= SSCR1_LBM; + /* NOTE: PXA25x_SSP _could_ use external clocking ... */ if (!pxa25x_ssp_comp(drv_data)) dev_dbg(&spi->dev, "%ld Hz actual, %s\n", - clk_get_rate(ssp->clk) + drv_data->max_clk_rate / (1 + ((chip->cr0 & SSCR0_SCR(0xfff)) >> 8)), chip->enable_dma ? "DMA" : "PIO"); else dev_dbg(&spi->dev, "%ld Hz actual, %s\n", - clk_get_rate(ssp->clk) / 2 + drv_data->max_clk_rate / 2 / (1 + ((chip->cr0 & SSCR0_SCR(0x0ff)) >> 8)), chip->enable_dma ? "DMA" : "PIO"); if (spi->bits_per_word <= 8) { chip->n_bytes = 1; - chip->dma_width = DCMD_WIDTH1; chip->read = u8_reader; chip->write = u8_writer; } else if (spi->bits_per_word <= 16) { chip->n_bytes = 2; - chip->dma_width = DCMD_WIDTH2; chip->read = u16_reader; chip->write = u16_writer; } else if (spi->bits_per_word <= 32) { chip->cr0 |= SSCR0_EDSS; chip->n_bytes = 4; - chip->dma_width = DCMD_WIDTH4; chip->read = u32_reader; chip->write = u32_writer; } else { @@ -1438,93 +1033,98 @@ kfree(chip); } -static int init_queue(struct driver_data *drv_data) +#ifdef CONFIG_ACPI +static int pxa2xx_spi_acpi_add_dma(struct acpi_resource *res, void *data) { - INIT_LIST_HEAD(&drv_data->queue); - spin_lock_init(&drv_data->lock); + struct pxa2xx_spi_master *pdata = data; - drv_data->run = QUEUE_STOPPED; - drv_data->busy = 0; + if (res->type == ACPI_RESOURCE_TYPE_FIXED_DMA) { + const struct acpi_resource_fixed_dma *dma; - tasklet_init(&drv_data->pump_transfers, - pump_transfers, (unsigned long)drv_data); - - INIT_WORK(&drv_data->pump_messages, pump_messages); - drv_data->workqueue = create_singlethread_workqueue( - dev_name(drv_data->master->dev.parent)); - if (drv_data->workqueue == NULL) - return -EBUSY; + dma = &res->data.fixed_dma; + if (pdata->tx_slave_id < 0) { + pdata->tx_slave_id = dma->request_lines; + pdata->tx_chan_id = dma->channels; + } else if (pdata->rx_slave_id < 0) { + pdata->rx_slave_id = dma->request_lines; + pdata->rx_chan_id = dma->channels; + } + } - return 0; + /* Tell the ACPI core to skip this resource */ + return 1; } -static int start_queue(struct driver_data *drv_data) +static struct pxa2xx_spi_master * +pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) { - unsigned long flags; + struct pxa2xx_spi_master *pdata; + struct list_head resource_list; + struct acpi_device *adev; + struct ssp_device *ssp; + struct resource *res; + int devid; - spin_lock_irqsave(&drv_data->lock, flags); + if (!ACPI_HANDLE(&pdev->dev) || + acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev)) + return NULL; - if (drv_data->run == QUEUE_RUNNING || drv_data->busy) { - spin_unlock_irqrestore(&drv_data->lock, flags); - return -EBUSY; + pdata = devm_kzalloc(&pdev->dev, sizeof(*ssp), GFP_KERNEL); + if (!pdata) { + dev_err(&pdev->dev, + "failed to allocate memory for platform data\n"); + return NULL; } - drv_data->run = QUEUE_RUNNING; - drv_data->cur_msg = NULL; - drv_data->cur_transfer = NULL; - drv_data->cur_chip = NULL; - spin_unlock_irqrestore(&drv_data->lock, flags); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) + return NULL; - queue_work(drv_data->workqueue, &drv_data->pump_messages); + ssp = &pdata->ssp; - return 0; -} + ssp->phys_base = res->start; + ssp->mmio_base = devm_request_and_ioremap(&pdev->dev, res); + if (!ssp->mmio_base) { + dev_err(&pdev->dev, "failed to ioremap mmio_base\n"); + return NULL; + } -static int stop_queue(struct driver_data *drv_data) -{ - unsigned long flags; - unsigned limit = 500; - int status = 0; + ssp->clk = devm_clk_get(&pdev->dev, NULL); + ssp->irq = platform_get_irq(pdev, 0); + ssp->type = LPSS_SSP; + ssp->pdev = pdev; - spin_lock_irqsave(&drv_data->lock, flags); + ssp->port_id = -1; + if (adev->pnp.unique_id && !kstrtoint(adev->pnp.unique_id, 0, &devid)) + ssp->port_id = devid; - /* This is a bit lame, but is optimized for the common execution path. - * A wait_queue on the drv_data->busy could be used, but then the common - * execution path (pump_messages) would be required to call wake_up or - * friends on every SPI message. Do this instead */ - drv_data->run = QUEUE_STOPPED; - while ((!list_empty(&drv_data->queue) || drv_data->busy) && limit--) { - spin_unlock_irqrestore(&drv_data->lock, flags); - msleep(10); - spin_lock_irqsave(&drv_data->lock, flags); - } + pdata->num_chipselect = 1; + pdata->rx_slave_id = -1; + pdata->tx_slave_id = -1; - if (!list_empty(&drv_data->queue) || drv_data->busy) - status = -EBUSY; + INIT_LIST_HEAD(&resource_list); + acpi_dev_get_resources(adev, &resource_list, pxa2xx_spi_acpi_add_dma, + pdata); + acpi_dev_free_resource_list(&resource_list); - spin_unlock_irqrestore(&drv_data->lock, flags); + pdata->enable_dma = pdata->rx_slave_id >= 0 && pdata->tx_slave_id >= 0; - return status; + return pdata; } -static int destroy_queue(struct driver_data *drv_data) +static struct acpi_device_id pxa2xx_spi_acpi_match[] = { + { "INT33C0", 0 }, + { "INT33C1", 0 }, + { }, +}; +MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match); +#else +static inline struct pxa2xx_spi_master * +pxa2xx_spi_acpi_get_pdata(struct platform_device *pdev) { - int status; - - status = stop_queue(drv_data); - /* we are unloading the module or failing to load (only two calls - * to this routine), and neither call can handle a return value. - * However, destroy_workqueue calls flush_workqueue, and that will - * block until all work is done. If the reason that stop_queue - * timed out is that the work will never finish, then it does no - * good to call destroy_workqueue, so return anyway. */ - if (status != 0) - return status; - - destroy_workqueue(drv_data->workqueue); - - return 0; + return NULL; } +#endif static int pxa2xx_spi_probe(struct platform_device *pdev) { @@ -1535,11 +1135,21 @@ struct ssp_device *ssp; int status; - platform_info = dev->platform_data; + platform_info = dev_get_platdata(dev); + if (!platform_info) { + platform_info = pxa2xx_spi_acpi_get_pdata(pdev); + if (!platform_info) { + dev_err(&pdev->dev, "missing platform data\n"); + return -ENODEV; + } + } ssp = pxa_ssp_request(pdev->id, pdev->name); - if (ssp == NULL) { - dev_err(&pdev->dev, "failed to request SSP%d\n", pdev->id); + if (!ssp) + ssp = &platform_info->ssp; + + if (!ssp->mmio_base) { + dev_err(&pdev->dev, "failed to get ssp\n"); return -ENODEV; } @@ -1558,19 +1168,21 @@ master->dev.parent = &pdev->dev; master->dev.of_node = pdev->dev.of_node; + ACPI_HANDLE_SET(&master->dev, ACPI_HANDLE(&pdev->dev)); /* the spi->mode bits understood by this driver: */ - master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH; + master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; - master->bus_num = pdev->id; + master->bus_num = ssp->port_id; master->num_chipselect = platform_info->num_chipselect; master->dma_alignment = DMA_ALIGNMENT; master->cleanup = cleanup; master->setup = setup; - master->transfer = transfer; + master->transfer_one_message = pxa2xx_spi_transfer_one_message; + master->prepare_transfer_hardware = pxa2xx_spi_prepare_transfer; + master->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer; drv_data->ssp_type = ssp->type; - drv_data->null_dma_buf = (u32 *)ALIGN((u32)(drv_data + - sizeof(struct driver_data)), 8); + drv_data->null_dma_buf = (u32 *)PTR_ALIGN(&drv_data[1], DMA_ALIGNMENT); drv_data->ioaddr = ssp->mmio_base; drv_data->ssdr_physical = ssp->phys_base + SSDR; @@ -1581,7 +1193,7 @@ drv_data->mask_sr = SSSR_RFS | SSSR_TFS | SSSR_ROR; } else { drv_data->int_cr1 = SSCR1_TIE | SSCR1_RIE | SSCR1_TINTE; - drv_data->dma_cr1 = SSCR1_TSRE | SSCR1_RSRE | SSCR1_TINTE; + drv_data->dma_cr1 = DEFAULT_DMA_CR1; drv_data->clear_sr = SSSR_ROR | SSSR_TINT; drv_data->mask_sr = SSSR_TINT | SSSR_RFS | SSSR_TFS | SSSR_ROR; } @@ -1597,35 +1209,17 @@ drv_data->tx_channel = -1; drv_data->rx_channel = -1; if (platform_info->enable_dma) { - - /* Get two DMA channels (rx and tx) */ - drv_data->rx_channel = pxa_request_dma("pxa2xx_spi_ssp_rx", - DMA_PRIO_HIGH, - dma_handler, - drv_data); - if (drv_data->rx_channel < 0) { - dev_err(dev, "problem (%d) requesting rx channel\n", - drv_data->rx_channel); - status = -ENODEV; - goto out_error_irq_alloc; - } - drv_data->tx_channel = pxa_request_dma("pxa2xx_spi_ssp_tx", - DMA_PRIO_MEDIUM, - dma_handler, - drv_data); - if (drv_data->tx_channel < 0) { - dev_err(dev, "problem (%d) requesting tx channel\n", - drv_data->tx_channel); - status = -ENODEV; - goto out_error_dma_alloc; + status = pxa2xx_spi_dma_setup(drv_data); + if (status) { + dev_warn(dev, "failed to setup DMA, using PIO\n"); + platform_info->enable_dma = false; } - - DRCMR(ssp->drcmr_rx) = DRCMR_MAPVLD | drv_data->rx_channel; - DRCMR(ssp->drcmr_tx) = DRCMR_MAPVLD | drv_data->tx_channel; } /* Enable SOC clock */ - clk_enable(ssp->clk); + clk_prepare_enable(ssp->clk); + + drv_data->max_clk_rate = clk_get_rate(ssp->clk); /* Load default SSP configuration */ write_SSCR0(0, drv_data->ioaddr); @@ -1640,41 +1234,29 @@ write_SSTO(0, drv_data->ioaddr); write_SSPSP(0, drv_data->ioaddr); - /* Initial and start queue */ - status = init_queue(drv_data); - if (status != 0) { - dev_err(&pdev->dev, "problem initializing queue\n"); - goto out_error_clock_enabled; - } - status = start_queue(drv_data); - if (status != 0) { - dev_err(&pdev->dev, "problem starting queue\n"); - goto out_error_clock_enabled; - } + lpss_ssp_setup(drv_data); + + tasklet_init(&drv_data->pump_transfers, pump_transfers, + (unsigned long)drv_data); /* Register with the SPI framework */ platform_set_drvdata(pdev, drv_data); status = spi_register_master(master); if (status != 0) { dev_err(&pdev->dev, "problem registering spi master\n"); - goto out_error_queue_alloc; + goto out_error_clock_enabled; } - return status; + pm_runtime_set_autosuspend_delay(&pdev->dev, 50); + pm_runtime_use_autosuspend(&pdev->dev); + pm_runtime_set_active(&pdev->dev); + pm_runtime_enable(&pdev->dev); -out_error_queue_alloc: - destroy_queue(drv_data); + return status; out_error_clock_enabled: - clk_disable(ssp->clk); - -out_error_dma_alloc: - if (drv_data->tx_channel != -1) - pxa_free_dma(drv_data->tx_channel); - if (drv_data->rx_channel != -1) - pxa_free_dma(drv_data->rx_channel); - -out_error_irq_alloc: + clk_disable_unprepare(ssp->clk); + pxa2xx_spi_dma_release(drv_data); free_irq(ssp->irq, drv_data); out_error_master_alloc: @@ -1687,37 +1269,23 @@ { struct driver_data *drv_data = platform_get_drvdata(pdev); struct ssp_device *ssp; - int status = 0; if (!drv_data) return 0; ssp = drv_data->ssp; - /* Remove the queue */ - status = destroy_queue(drv_data); - if (status != 0) - /* the kernel does not check the return status of this - * this routine (mod->exit, within the kernel). Therefore - * nothing is gained by returning from here, the module is - * going away regardless, and we should not leave any more - * resources allocated than necessary. We cannot free the - * message memory in drv_data->queue, but we can release the - * resources below. I think the kernel should honor -EBUSY - * returns but... */ - dev_err(&pdev->dev, "pxa2xx_spi_remove: workqueue will not " - "complete, message memory not freed\n"); + pm_runtime_get_sync(&pdev->dev); /* Disable the SSP at the peripheral and SOC level */ write_SSCR0(0, drv_data->ioaddr); - clk_disable(ssp->clk); + clk_disable_unprepare(ssp->clk); /* Release DMA */ - if (drv_data->master_info->enable_dma) { - DRCMR(ssp->drcmr_rx) = 0; - DRCMR(ssp->drcmr_tx) = 0; - pxa_free_dma(drv_data->tx_channel); - pxa_free_dma(drv_data->rx_channel); - } + if (drv_data->master_info->enable_dma) + pxa2xx_spi_dma_release(drv_data); + + pm_runtime_put_noidle(&pdev->dev); + pm_runtime_disable(&pdev->dev); /* Release IRQ */ free_irq(ssp->irq, drv_data); @@ -1749,11 +1317,11 @@ struct ssp_device *ssp = drv_data->ssp; int status = 0; - status = stop_queue(drv_data); + status = spi_master_suspend(drv_data->master); if (status != 0) return status; write_SSCR0(0, drv_data->ioaddr); - clk_disable(ssp->clk); + clk_disable_unprepare(ssp->clk); return 0; } @@ -1764,18 +1332,13 @@ struct ssp_device *ssp = drv_data->ssp; int status = 0; - if (drv_data->rx_channel != -1) - DRCMR(drv_data->ssp->drcmr_rx) = - DRCMR_MAPVLD | drv_data->rx_channel; - if (drv_data->tx_channel != -1) - DRCMR(drv_data->ssp->drcmr_tx) = - DRCMR_MAPVLD | drv_data->tx_channel; + pxa2xx_spi_dma_resume(drv_data); /* Enable the SSP clock */ - clk_enable(ssp->clk); + clk_prepare_enable(ssp->clk); /* Start the queue running */ - status = start_queue(drv_data); + status = spi_master_resume(drv_data->master); if (status != 0) { dev_err(dev, "problem starting queue (%d)\n", status); return status; @@ -1783,20 +1346,38 @@ return 0; } +#endif + +#ifdef CONFIG_PM_RUNTIME +static int pxa2xx_spi_runtime_suspend(struct device *dev) +{ + struct driver_data *drv_data = dev_get_drvdata(dev); + + clk_disable_unprepare(drv_data->ssp->clk); + return 0; +} + +static int pxa2xx_spi_runtime_resume(struct device *dev) +{ + struct driver_data *drv_data = dev_get_drvdata(dev); + + clk_prepare_enable(drv_data->ssp->clk); + return 0; +} +#endif static const struct dev_pm_ops pxa2xx_spi_pm_ops = { - .suspend = pxa2xx_spi_suspend, - .resume = pxa2xx_spi_resume, + SET_SYSTEM_SLEEP_PM_OPS(pxa2xx_spi_suspend, pxa2xx_spi_resume) + SET_RUNTIME_PM_OPS(pxa2xx_spi_runtime_suspend, + pxa2xx_spi_runtime_resume, NULL) }; -#endif static struct platform_driver driver = { .driver = { .name = "pxa2xx-spi", .owner = THIS_MODULE, -#ifdef CONFIG_PM .pm = &pxa2xx_spi_pm_ops, -#endif + .acpi_match_table = ACPI_PTR(pxa2xx_spi_acpi_match), }, .probe = pxa2xx_spi_probe, .remove = pxa2xx_spi_remove, --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-pxa2xx.h +++ linux-lts-raring-3.8.0/drivers/spi/spi-pxa2xx.h @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs + * Copyright (C) 2013, Intel Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef SPI_PXA2XX_H +#define SPI_PXA2XX_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct driver_data { + /* Driver model hookup */ + struct platform_device *pdev; + + /* SSP Info */ + struct ssp_device *ssp; + + /* SPI framework hookup */ + enum pxa_ssp_type ssp_type; + struct spi_master *master; + + /* PXA hookup */ + struct pxa2xx_spi_master *master_info; + + /* PXA private DMA setup stuff */ + int rx_channel; + int tx_channel; + u32 *null_dma_buf; + + /* SSP register addresses */ + void __iomem *ioaddr; + u32 ssdr_physical; + + /* SSP masks*/ + u32 dma_cr1; + u32 int_cr1; + u32 clear_sr; + u32 mask_sr; + + /* Maximun clock rate */ + unsigned long max_clk_rate; + + /* Message Transfer pump */ + struct tasklet_struct pump_transfers; + + /* DMA engine support */ + struct dma_chan *rx_chan; + struct dma_chan *tx_chan; + struct sg_table rx_sgt; + struct sg_table tx_sgt; + int rx_nents; + int tx_nents; + void *dummy; + atomic_t dma_running; + + /* Current message transfer state info */ + struct spi_message *cur_msg; + struct spi_transfer *cur_transfer; + struct chip_data *cur_chip; + size_t len; + void *tx; + void *tx_end; + void *rx; + void *rx_end; + int dma_mapped; + dma_addr_t rx_dma; + dma_addr_t tx_dma; + size_t rx_map_len; + size_t tx_map_len; + u8 n_bytes; + int (*write)(struct driver_data *drv_data); + int (*read)(struct driver_data *drv_data); + irqreturn_t (*transfer_handler)(struct driver_data *drv_data); + void (*cs_control)(u32 command); + + void __iomem *lpss_base; +}; + +struct chip_data { + u32 cr0; + u32 cr1; + u32 psp; + u32 timeout; + u8 n_bytes; + u32 dma_burst_size; + u32 threshold; + u32 dma_threshold; + u16 lpss_rx_threshold; + u16 lpss_tx_threshold; + u8 enable_dma; + u8 bits_per_word; + u32 speed_hz; + union { + int gpio_cs; + unsigned int frm; + }; + int gpio_cs_inverted; + int (*write)(struct driver_data *drv_data); + int (*read)(struct driver_data *drv_data); + void (*cs_control)(u32 command); +}; + +#define DEFINE_SSP_REG(reg, off) \ +static inline u32 read_##reg(void const __iomem *p) \ +{ return __raw_readl(p + (off)); } \ +\ +static inline void write_##reg(u32 v, void __iomem *p) \ +{ __raw_writel(v, p + (off)); } + +DEFINE_SSP_REG(SSCR0, 0x00) +DEFINE_SSP_REG(SSCR1, 0x04) +DEFINE_SSP_REG(SSSR, 0x08) +DEFINE_SSP_REG(SSITR, 0x0c) +DEFINE_SSP_REG(SSDR, 0x10) +DEFINE_SSP_REG(SSTO, 0x28) +DEFINE_SSP_REG(SSPSP, 0x2c) +DEFINE_SSP_REG(SSITF, SSITF) +DEFINE_SSP_REG(SSIRF, SSIRF) + +#define START_STATE ((void *)0) +#define RUNNING_STATE ((void *)1) +#define DONE_STATE ((void *)2) +#define ERROR_STATE ((void *)-1) + +#define IS_DMA_ALIGNED(x) IS_ALIGNED((unsigned long)(x), DMA_ALIGNMENT) +#define DMA_ALIGNMENT 8 + +static inline int pxa25x_ssp_comp(struct driver_data *drv_data) +{ + if (drv_data->ssp_type == PXA25x_SSP) + return 1; + if (drv_data->ssp_type == CE4100_SSP) + return 1; + return 0; +} + +static inline void write_SSSR_CS(struct driver_data *drv_data, u32 val) +{ + void __iomem *reg = drv_data->ioaddr; + + if (drv_data->ssp_type == CE4100_SSP) + val |= read_SSSR(reg) & SSSR_ALT_FRM_MASK; + + write_SSSR(val, reg); +} + +extern int pxa2xx_spi_flush(struct driver_data *drv_data); +extern void *pxa2xx_spi_next_transfer(struct driver_data *drv_data); + +/* + * Select the right DMA implementation. + */ +#if defined(CONFIG_SPI_PXA2XX_PXADMA) +#define SPI_PXA2XX_USE_DMA 1 +#define MAX_DMA_LEN 8191 +#define DEFAULT_DMA_CR1 (SSCR1_TSRE | SSCR1_RSRE | SSCR1_TINTE) +#elif defined(CONFIG_SPI_PXA2XX_DMA) +#define SPI_PXA2XX_USE_DMA 1 +#define MAX_DMA_LEN SZ_64K +#define DEFAULT_DMA_CR1 (SSCR1_TSRE | SSCR1_RSRE | SSCR1_TRAIL) +#else +#undef SPI_PXA2XX_USE_DMA +#define MAX_DMA_LEN 0 +#define DEFAULT_DMA_CR1 0 +#endif + +#ifdef SPI_PXA2XX_USE_DMA +extern bool pxa2xx_spi_dma_is_possible(size_t len); +extern int pxa2xx_spi_map_dma_buffers(struct driver_data *drv_data); +extern irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data); +extern int pxa2xx_spi_dma_prepare(struct driver_data *drv_data, u32 dma_burst); +extern void pxa2xx_spi_dma_start(struct driver_data *drv_data); +extern int pxa2xx_spi_dma_setup(struct driver_data *drv_data); +extern void pxa2xx_spi_dma_release(struct driver_data *drv_data); +extern void pxa2xx_spi_dma_resume(struct driver_data *drv_data); +extern int pxa2xx_spi_set_dma_burst_and_threshold(struct chip_data *chip, + struct spi_device *spi, + u8 bits_per_word, + u32 *burst_code, + u32 *threshold); +#else +static inline bool pxa2xx_spi_dma_is_possible(size_t len) { return false; } +static inline int pxa2xx_spi_map_dma_buffers(struct driver_data *drv_data) +{ + return 0; +} +#define pxa2xx_spi_dma_transfer NULL +static inline void pxa2xx_spi_dma_prepare(struct driver_data *drv_data, + u32 dma_burst) {} +static inline void pxa2xx_spi_dma_start(struct driver_data *drv_data) {} +static inline int pxa2xx_spi_dma_setup(struct driver_data *drv_data) +{ + return 0; +} +static inline void pxa2xx_spi_dma_release(struct driver_data *drv_data) {} +static inline void pxa2xx_spi_dma_resume(struct driver_data *drv_data) {} +static inline int pxa2xx_spi_set_dma_burst_and_threshold(struct chip_data *chip, + struct spi_device *spi, + u8 bits_per_word, + u32 *burst_code, + u32 *threshold) +{ + return -ENODEV; +} +#endif + +#endif /* SPI_PXA2XX_H */ --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-pxa2xx-dma.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-pxa2xx-dma.c @@ -0,0 +1,392 @@ +/* + * PXA2xx SPI DMA engine support. + * + * Copyright (C) 2013, Intel Corporation + * Author: Mika Westerberg + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "spi-pxa2xx.h" + +static int pxa2xx_spi_map_dma_buffer(struct driver_data *drv_data, + enum dma_data_direction dir) +{ + int i, nents, len = drv_data->len; + struct scatterlist *sg; + struct device *dmadev; + struct sg_table *sgt; + void *buf, *pbuf; + + /* + * Some DMA controllers have problems transferring buffers that are + * not multiple of 4 bytes. So we truncate the transfer so that it + * is suitable for such controllers, and handle the trailing bytes + * manually after the DMA completes. + * + * REVISIT: It would be better if this information could be + * retrieved directly from the DMA device in a similar way than + * ->copy_align etc. is done. + */ + len = ALIGN(drv_data->len, 4); + + if (dir == DMA_TO_DEVICE) { + dmadev = drv_data->tx_chan->device->dev; + sgt = &drv_data->tx_sgt; + buf = drv_data->tx; + drv_data->tx_map_len = len; + } else { + dmadev = drv_data->rx_chan->device->dev; + sgt = &drv_data->rx_sgt; + buf = drv_data->rx; + drv_data->rx_map_len = len; + } + + nents = DIV_ROUND_UP(len, SZ_2K); + if (nents != sgt->nents) { + int ret; + + sg_free_table(sgt); + ret = sg_alloc_table(sgt, nents, GFP_KERNEL); + if (ret) + return ret; + } + + pbuf = buf; + for_each_sg(sgt->sgl, sg, sgt->nents, i) { + size_t bytes = min_t(size_t, len, SZ_2K); + + if (buf) + sg_set_buf(sg, pbuf, bytes); + else + sg_set_buf(sg, drv_data->dummy, bytes); + + pbuf += bytes; + len -= bytes; + } + + nents = dma_map_sg(dmadev, sgt->sgl, sgt->nents, dir); + if (!nents) + return -ENOMEM; + + return nents; +} + +static void pxa2xx_spi_unmap_dma_buffer(struct driver_data *drv_data, + enum dma_data_direction dir) +{ + struct device *dmadev; + struct sg_table *sgt; + + if (dir == DMA_TO_DEVICE) { + dmadev = drv_data->tx_chan->device->dev; + sgt = &drv_data->tx_sgt; + } else { + dmadev = drv_data->rx_chan->device->dev; + sgt = &drv_data->rx_sgt; + } + + dma_unmap_sg(dmadev, sgt->sgl, sgt->nents, dir); +} + +static void pxa2xx_spi_unmap_dma_buffers(struct driver_data *drv_data) +{ + if (!drv_data->dma_mapped) + return; + + pxa2xx_spi_unmap_dma_buffer(drv_data, DMA_FROM_DEVICE); + pxa2xx_spi_unmap_dma_buffer(drv_data, DMA_TO_DEVICE); + + drv_data->dma_mapped = 0; +} + +static void pxa2xx_spi_dma_transfer_complete(struct driver_data *drv_data, + bool error) +{ + struct spi_message *msg = drv_data->cur_msg; + + /* + * It is possible that one CPU is handling ROR interrupt and other + * just gets DMA completion. Calling pump_transfers() twice for the + * same transfer leads to problems thus we prevent concurrent calls + * by using ->dma_running. + */ + if (atomic_dec_and_test(&drv_data->dma_running)) { + void __iomem *reg = drv_data->ioaddr; + + /* + * If the other CPU is still handling the ROR interrupt we + * might not know about the error yet. So we re-check the + * ROR bit here before we clear the status register. + */ + if (!error) { + u32 status = read_SSSR(reg) & drv_data->mask_sr; + error = status & SSSR_ROR; + } + + /* Clear status & disable interrupts */ + write_SSCR1(read_SSCR1(reg) & ~drv_data->dma_cr1, reg); + write_SSSR_CS(drv_data, drv_data->clear_sr); + if (!pxa25x_ssp_comp(drv_data)) + write_SSTO(0, reg); + + if (!error) { + pxa2xx_spi_unmap_dma_buffers(drv_data); + + /* Handle the last bytes of unaligned transfer */ + drv_data->tx += drv_data->tx_map_len; + drv_data->write(drv_data); + + drv_data->rx += drv_data->rx_map_len; + drv_data->read(drv_data); + + msg->actual_length += drv_data->len; + msg->state = pxa2xx_spi_next_transfer(drv_data); + } else { + /* In case we got an error we disable the SSP now */ + write_SSCR0(read_SSCR0(reg) & ~SSCR0_SSE, reg); + + msg->state = ERROR_STATE; + } + + tasklet_schedule(&drv_data->pump_transfers); + } +} + +static void pxa2xx_spi_dma_callback(void *data) +{ + pxa2xx_spi_dma_transfer_complete(data, false); +} + +static struct dma_async_tx_descriptor * +pxa2xx_spi_dma_prepare_one(struct driver_data *drv_data, + enum dma_transfer_direction dir) +{ + struct pxa2xx_spi_master *pdata = drv_data->master_info; + struct chip_data *chip = drv_data->cur_chip; + enum dma_slave_buswidth width; + struct dma_slave_config cfg; + struct dma_chan *chan; + struct sg_table *sgt; + int nents, ret; + + switch (drv_data->n_bytes) { + case 1: + width = DMA_SLAVE_BUSWIDTH_1_BYTE; + break; + case 2: + width = DMA_SLAVE_BUSWIDTH_2_BYTES; + break; + default: + width = DMA_SLAVE_BUSWIDTH_4_BYTES; + break; + } + + memset(&cfg, 0, sizeof(cfg)); + cfg.direction = dir; + + if (dir == DMA_MEM_TO_DEV) { + cfg.dst_addr = drv_data->ssdr_physical; + cfg.dst_addr_width = width; + cfg.dst_maxburst = chip->dma_burst_size; + cfg.slave_id = pdata->tx_slave_id; + + sgt = &drv_data->tx_sgt; + nents = drv_data->tx_nents; + chan = drv_data->tx_chan; + } else { + cfg.src_addr = drv_data->ssdr_physical; + cfg.src_addr_width = width; + cfg.src_maxburst = chip->dma_burst_size; + cfg.slave_id = pdata->rx_slave_id; + + sgt = &drv_data->rx_sgt; + nents = drv_data->rx_nents; + chan = drv_data->rx_chan; + } + + ret = dmaengine_slave_config(chan, &cfg); + if (ret) { + dev_warn(&drv_data->pdev->dev, "DMA slave config failed\n"); + return NULL; + } + + return dmaengine_prep_slave_sg(chan, sgt->sgl, nents, dir, + DMA_PREP_INTERRUPT | DMA_CTRL_ACK); +} + +static bool pxa2xx_spi_dma_filter(struct dma_chan *chan, void *param) +{ + const struct pxa2xx_spi_master *pdata = param; + + return chan->chan_id == pdata->tx_chan_id || + chan->chan_id == pdata->rx_chan_id; +} + +bool pxa2xx_spi_dma_is_possible(size_t len) +{ + return len <= MAX_DMA_LEN; +} + +int pxa2xx_spi_map_dma_buffers(struct driver_data *drv_data) +{ + const struct chip_data *chip = drv_data->cur_chip; + int ret; + + if (!chip->enable_dma) + return 0; + + /* Don't bother with DMA if we can't do even a single burst */ + if (drv_data->len < chip->dma_burst_size) + return 0; + + ret = pxa2xx_spi_map_dma_buffer(drv_data, DMA_TO_DEVICE); + if (ret <= 0) { + dev_warn(&drv_data->pdev->dev, "failed to DMA map TX\n"); + return 0; + } + + drv_data->tx_nents = ret; + + ret = pxa2xx_spi_map_dma_buffer(drv_data, DMA_FROM_DEVICE); + if (ret <= 0) { + pxa2xx_spi_unmap_dma_buffer(drv_data, DMA_TO_DEVICE); + dev_warn(&drv_data->pdev->dev, "failed to DMA map RX\n"); + return 0; + } + + drv_data->rx_nents = ret; + return 1; +} + +irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data) +{ + u32 status; + + status = read_SSSR(drv_data->ioaddr) & drv_data->mask_sr; + if (status & SSSR_ROR) { + dev_err(&drv_data->pdev->dev, "FIFO overrun\n"); + + dmaengine_terminate_all(drv_data->rx_chan); + dmaengine_terminate_all(drv_data->tx_chan); + + pxa2xx_spi_dma_transfer_complete(drv_data, true); + return IRQ_HANDLED; + } + + return IRQ_NONE; +} + +int pxa2xx_spi_dma_prepare(struct driver_data *drv_data, u32 dma_burst) +{ + struct dma_async_tx_descriptor *tx_desc, *rx_desc; + + tx_desc = pxa2xx_spi_dma_prepare_one(drv_data, DMA_MEM_TO_DEV); + if (!tx_desc) { + dev_err(&drv_data->pdev->dev, + "failed to get DMA TX descriptor\n"); + return -EBUSY; + } + + rx_desc = pxa2xx_spi_dma_prepare_one(drv_data, DMA_DEV_TO_MEM); + if (!rx_desc) { + dev_err(&drv_data->pdev->dev, + "failed to get DMA RX descriptor\n"); + return -EBUSY; + } + + /* We are ready when RX completes */ + rx_desc->callback = pxa2xx_spi_dma_callback; + rx_desc->callback_param = drv_data; + + dmaengine_submit(rx_desc); + dmaengine_submit(tx_desc); + return 0; +} + +void pxa2xx_spi_dma_start(struct driver_data *drv_data) +{ + dma_async_issue_pending(drv_data->rx_chan); + dma_async_issue_pending(drv_data->tx_chan); + + atomic_set(&drv_data->dma_running, 1); +} + +int pxa2xx_spi_dma_setup(struct driver_data *drv_data) +{ + struct pxa2xx_spi_master *pdata = drv_data->master_info; + dma_cap_mask_t mask; + + dma_cap_zero(mask); + dma_cap_set(DMA_SLAVE, mask); + + drv_data->dummy = devm_kzalloc(&drv_data->pdev->dev, SZ_2K, GFP_KERNEL); + if (!drv_data->dummy) + return -ENOMEM; + + drv_data->tx_chan = dma_request_channel(mask, pxa2xx_spi_dma_filter, + pdata); + if (!drv_data->tx_chan) + return -ENODEV; + + drv_data->rx_chan = dma_request_channel(mask, pxa2xx_spi_dma_filter, + pdata); + if (!drv_data->rx_chan) { + dma_release_channel(drv_data->tx_chan); + drv_data->tx_chan = NULL; + return -ENODEV; + } + + return 0; +} + +void pxa2xx_spi_dma_release(struct driver_data *drv_data) +{ + if (drv_data->rx_chan) { + dmaengine_terminate_all(drv_data->rx_chan); + dma_release_channel(drv_data->rx_chan); + sg_free_table(&drv_data->rx_sgt); + drv_data->rx_chan = NULL; + } + if (drv_data->tx_chan) { + dmaengine_terminate_all(drv_data->tx_chan); + dma_release_channel(drv_data->tx_chan); + sg_free_table(&drv_data->tx_sgt); + drv_data->tx_chan = NULL; + } +} + +void pxa2xx_spi_dma_resume(struct driver_data *drv_data) +{ +} + +int pxa2xx_spi_set_dma_burst_and_threshold(struct chip_data *chip, + struct spi_device *spi, + u8 bits_per_word, u32 *burst_code, + u32 *threshold) +{ + struct pxa2xx_spi_chip *chip_info = spi->controller_data; + + /* + * If the DMA burst size is given in chip_info we use that, + * otherwise we use the default. Also we use the default FIFO + * thresholds for now. + */ + *burst_code = chip_info ? chip_info->dma_burst_size : 16; + *threshold = SSCR1_RxTresh(RX_THRESH_DFLT) + | SSCR1_TxTresh(TX_THRESH_DFLT); + + return 0; +} --- linux-lts-raring-3.8.0.orig/drivers/spi/spi-pxa2xx-pci.c +++ linux-lts-raring-3.8.0/drivers/spi/spi-pxa2xx-pci.c @@ -8,147 +8,58 @@ #include #include -struct ce4100_info { - struct ssp_device ssp; - struct platform_device *spi_pdev; -}; - -static DEFINE_MUTEX(ssp_lock); -static LIST_HEAD(ssp_list); - -struct ssp_device *pxa_ssp_request(int port, const char *label) -{ - struct ssp_device *ssp = NULL; - - mutex_lock(&ssp_lock); - - list_for_each_entry(ssp, &ssp_list, node) { - if (ssp->port_id == port && ssp->use_count == 0) { - ssp->use_count++; - ssp->label = label; - break; - } - } - - mutex_unlock(&ssp_lock); - - if (&ssp->node == &ssp_list) - return NULL; - - return ssp; -} -EXPORT_SYMBOL_GPL(pxa_ssp_request); - -void pxa_ssp_free(struct ssp_device *ssp) -{ - mutex_lock(&ssp_lock); - if (ssp->use_count) { - ssp->use_count--; - ssp->label = NULL; - } else - dev_err(&ssp->pdev->dev, "device already free\n"); - mutex_unlock(&ssp_lock); -} -EXPORT_SYMBOL_GPL(pxa_ssp_free); - static int ce4100_spi_probe(struct pci_dev *dev, const struct pci_device_id *ent) { + struct platform_device_info pi; int ret; - resource_size_t phys_beg; - resource_size_t phys_len; - struct ce4100_info *spi_info; struct platform_device *pdev; struct pxa2xx_spi_master spi_pdata; struct ssp_device *ssp; - ret = pci_enable_device(dev); + ret = pcim_enable_device(dev); if (ret) return ret; - phys_beg = pci_resource_start(dev, 0); - phys_len = pci_resource_len(dev, 0); - - if (!request_mem_region(phys_beg, phys_len, - "CE4100 SPI")) { - dev_err(&dev->dev, "Can't request register space.\n"); - ret = -EBUSY; + ret = pcim_iomap_regions(dev, 1 << 0, "PXA2xx SPI"); + if (!ret) return ret; - } - pdev = platform_device_alloc("pxa2xx-spi", dev->devfn); - spi_info = kzalloc(sizeof(*spi_info), GFP_KERNEL); - if (!pdev || !spi_info ) { - ret = -ENOMEM; - goto err_nomem; - } memset(&spi_pdata, 0, sizeof(spi_pdata)); spi_pdata.num_chipselect = dev->devfn; - ret = platform_device_add_data(pdev, &spi_pdata, sizeof(spi_pdata)); - if (ret) - goto err_nomem; - - pdev->dev.parent = &dev->dev; - pdev->dev.of_node = dev->dev.of_node; - ssp = &spi_info->ssp; + ssp = &spi_pdata.ssp; ssp->phys_base = pci_resource_start(dev, 0); - ssp->mmio_base = ioremap(phys_beg, phys_len); + ssp->mmio_base = pcim_iomap_table(dev)[0]; if (!ssp->mmio_base) { - dev_err(&pdev->dev, "failed to ioremap() registers\n"); - ret = -EIO; - goto err_nomem; + dev_err(&dev->dev, "failed to ioremap() registers\n"); + return -EIO; } ssp->irq = dev->irq; - ssp->port_id = pdev->id; + ssp->port_id = dev->devfn; ssp->type = PXA25x_SSP; - mutex_lock(&ssp_lock); - list_add(&ssp->node, &ssp_list); - mutex_unlock(&ssp_lock); - - pci_set_drvdata(dev, spi_info); + memset(&pi, 0, sizeof(pi)); + pi.parent = &dev->dev; + pi.name = "pxa2xx-spi"; + pi.id = ssp->port_id; + pi.data = &spi_pdata; + pi.size_data = sizeof(spi_pdata); + + pdev = platform_device_register_full(&pi); + if (!pdev) + return -ENOMEM; - ret = platform_device_add(pdev); - if (ret) - goto err_dev_add; + pci_set_drvdata(dev, pdev); - return ret; - -err_dev_add: - pci_set_drvdata(dev, NULL); - mutex_lock(&ssp_lock); - list_del(&ssp->node); - mutex_unlock(&ssp_lock); - iounmap(ssp->mmio_base); - -err_nomem: - release_mem_region(phys_beg, phys_len); - platform_device_put(pdev); - kfree(spi_info); - return ret; + return 0; } static void ce4100_spi_remove(struct pci_dev *dev) { - struct ce4100_info *spi_info; - struct ssp_device *ssp; + struct platform_device *pdev = pci_get_drvdata(dev); - spi_info = pci_get_drvdata(dev); - ssp = &spi_info->ssp; - platform_device_unregister(spi_info->spi_pdev); - - iounmap(ssp->mmio_base); - release_mem_region(pci_resource_start(dev, 0), - pci_resource_len(dev, 0)); - - mutex_lock(&ssp_lock); - list_del(&ssp->node); - mutex_unlock(&ssp_lock); - - pci_set_drvdata(dev, NULL); - pci_disable_device(dev); - kfree(spi_info); + platform_device_unregister(pdev); } static DEFINE_PCI_DEVICE_TABLE(ce4100_spi_devices) = { --- linux-lts-raring-3.8.0.orig/drivers/hv/hv_util.c +++ linux-lts-raring-3.8.0/drivers/hv/hv_util.c @@ -49,6 +49,16 @@ .util_deinit = hv_kvp_deinit, }; +static void perform_shutdown(struct work_struct *dummy) +{ + orderly_poweroff(true); +} + +/* + * Perform the shutdown operation in a thread context. + */ +static DECLARE_WORK(shutdown_work, perform_shutdown); + static void shutdown_onchannelcallback(void *context) { struct vmbus_channel *channel = context; @@ -106,7 +116,7 @@ } if (execute_shutdown == true) - orderly_poweroff(true); + schedule_work(&shutdown_work); } /* --- linux-lts-raring-3.8.0.orig/drivers/memstick/host/rtsx_pci_ms.c +++ linux-lts-raring-3.8.0/drivers/memstick/host/rtsx_pci_ms.c @@ -426,6 +426,9 @@ dev_dbg(ms_dev(host), "--> %s\n", __func__); + if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_MS_CARD)) + return; + schedule_work(&host->handle_req); } @@ -441,6 +444,10 @@ dev_dbg(ms_dev(host), "%s: param = %d, value = %d\n", __func__, param, value); + err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_MS_CARD); + if (err) + return err; + switch (param) { case MEMSTICK_POWER: if (value == MEMSTICK_POWER_ON) --- linux-lts-raring-3.8.0.orig/drivers/pinctrl/pinctrl-at91.c +++ linux-lts-raring-3.8.0/drivers/pinctrl/pinctrl-at91.c @@ -326,7 +326,7 @@ static unsigned at91_mux_get_pullup(void __iomem *pio, unsigned pin) { - return (readl_relaxed(pio + PIO_PUSR) >> pin) & 0x1; + return !((readl_relaxed(pio + PIO_PUSR) >> pin) & 0x1); } static void at91_mux_set_pullup(void __iomem *pio, unsigned mask, bool on) @@ -446,7 +446,7 @@ static bool at91_mux_pio3_get_pulldown(void __iomem *pio, unsigned pin) { - return (__raw_readl(pio + PIO_PPDSR) >> pin) & 0x1; + return !((__raw_readl(pio + PIO_PPDSR) >> pin) & 0x1); } static void at91_mux_pio3_set_pulldown(void __iomem *pio, unsigned mask, bool is_on) --- linux-lts-raring-3.8.0.orig/drivers/leds/leds-ot200.c +++ linux-lts-raring-3.8.0/drivers/leds/leds-ot200.c @@ -47,37 +47,37 @@ { .name = "led_1", .port = 0x49, - .mask = BIT(7), + .mask = BIT(6), }, { .name = "led_2", .port = 0x49, - .mask = BIT(6), + .mask = BIT(5), }, { .name = "led_3", .port = 0x49, - .mask = BIT(5), + .mask = BIT(4), }, { .name = "led_4", .port = 0x49, - .mask = BIT(4), + .mask = BIT(3), }, { .name = "led_5", .port = 0x49, - .mask = BIT(3), + .mask = BIT(2), }, { .name = "led_6", .port = 0x49, - .mask = BIT(2), + .mask = BIT(1), }, { .name = "led_7", .port = 0x49, - .mask = BIT(1), + .mask = BIT(0), } }; --- linux-lts-raring-3.8.0.orig/drivers/leds/leds-wm831x-status.c +++ linux-lts-raring-3.8.0/drivers/leds/leds-wm831x-status.c @@ -230,9 +230,9 @@ int id = pdev->id % ARRAY_SIZE(chip_pdata->status); int ret; - res = platform_get_resource(pdev, IORESOURCE_IO, 0); + res = platform_get_resource(pdev, IORESOURCE_REG, 0); if (res == NULL) { - dev_err(&pdev->dev, "No I/O resource\n"); + dev_err(&pdev->dev, "No register resource\n"); ret = -EINVAL; goto err; } --- linux-lts-raring-3.8.0.orig/drivers/platform/x86/hp_accel.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/hp_accel.c @@ -362,7 +362,8 @@ static int lis3lv02d_resume(struct device *dev) { - return lis3lv02d_poweron(&lis3_dev); + lis3lv02d_poweron(&lis3_dev); + return 0; } static SIMPLE_DEV_PM_OPS(hp_accel_pm, lis3lv02d_suspend, lis3lv02d_resume); --- linux-lts-raring-3.8.0.orig/drivers/platform/x86/sony-laptop.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/sony-laptop.c @@ -1534,7 +1534,7 @@ int argument = sony_rfkill_address[(long) data] + 0x100; if (!blocked) - argument |= 0x030000; + argument |= 0x070000; return sony_call_snc_handle(sony_rfkill_handle, argument, &result); } @@ -2813,6 +2813,10 @@ struct sonypi_event *events; }; +struct sony_pic_quirk_entry { + u8 set_wwan_power; +}; + struct sony_pic_dev { struct acpi_device *acpi_dev; struct sony_pic_irq *cur_irq; @@ -2823,6 +2827,7 @@ struct sonypi_eventtypes *event_types; int (*handle_irq)(const u8, const u8); int model; + struct sony_pic_quirk_entry *quirks; u16 evport_offset; u8 camera_power; u8 bluetooth_power; @@ -4257,6 +4262,12 @@ if (result) goto err_remove_pf; + if (spic_dev.quirks && spic_dev.quirks->set_wwan_power) { + /* + * Power isn't enabled by default. + */ + __sony_pic_set_wwanpower(1); + } return 0; err_remove_pf: @@ -4331,6 +4342,16 @@ .drv.pm = &sony_pic_pm, }; +static struct sony_pic_quirk_entry sony_pic_vaio_vgn = { + .set_wwan_power = 1, +}; + +static int dmi_matched(const struct dmi_system_id *dmi) +{ + spic_dev.quirks = dmi->driver_data; + return 0; +} + static struct dmi_system_id __initdata sonypi_dmi_table[] = { { .ident = "Sony Vaio", @@ -4345,6 +4366,8 @@ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), DMI_MATCH(DMI_PRODUCT_NAME, "VGN-"), }, + .callback = dmi_matched, + .driver_data = &sony_pic_vaio_vgn, }, { } }; --- linux-lts-raring-3.8.0.orig/drivers/platform/x86/dell-wmi.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/dell-wmi.c @@ -165,7 +165,7 @@ u16 *buffer_entry = (u16 *)obj->buffer.pointer; if (dell_new_hk_type && (buffer_entry[1] != 0x10)) { - pr_info("Received unknown WMI event (0x%x)\n", + pr_debug("Received unknown WMI event (0x%x)\n", buffer_entry[1]); kfree(obj); return; --- linux-lts-raring-3.8.0.orig/drivers/platform/x86/acer-wmi.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/acer-wmi.c @@ -1204,6 +1204,9 @@ devices = *((u32 *) obj->buffer.pointer); } else if (obj->type == ACPI_TYPE_INTEGER) { devices = (u32) obj->integer.value; + } else { + kfree(out.pointer); + return AE_ERROR; } } else { kfree(out.pointer); --- linux-lts-raring-3.8.0.orig/drivers/platform/x86/hp-wmi.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/hp-wmi.c @@ -70,6 +70,14 @@ HPWMI_WIRELESS = 5, HPWMI_CPU_BATTERY_THROTTLE = 6, HPWMI_LOCK_SWITCH = 7, + HPWMI_LID_SWITCH = 8, + HPWMI_SCREEN_ROTATION = 9, + HPWMI_COOLSENSE_SYSTEM_MOBILE = 0x0A, + HPWMI_COOLSENSE_SYSTEM_HOT = 0x0B, + HPWMI_PROXIMITY_SENSOR = 0x0C, + HPWMI_BACKLIT_KB_BRIGHTNESS = 0x0D, + HPWMI_PEAKSHIFT_PERIOD = 0x0F, + HPWMI_BATTERY_CHARGE_PERIOD = 0x10, }; static int hp_wmi_bios_setup(struct platform_device *device); @@ -549,6 +557,22 @@ break; case HPWMI_LOCK_SWITCH: break; + case HPWMI_LID_SWITCH: + break; + case HPWMI_SCREEN_ROTATION: + break; + case HPWMI_COOLSENSE_SYSTEM_MOBILE: + break; + case HPWMI_COOLSENSE_SYSTEM_HOT: + break; + case HPWMI_PROXIMITY_SENSOR: + break; + case HPWMI_BACKLIT_KB_BRIGHTNESS: + break; + case HPWMI_PEAKSHIFT_PERIOD: + break; + case HPWMI_BATTERY_CHARGE_PERIOD: + break; default: pr_info("Unknown event_id - %d - 0x%x\n", event_id, event_data); break; --- linux-lts-raring-3.8.0.orig/drivers/platform/x86/intel_ips.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/intel_ips.c @@ -1501,6 +1501,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-lts-raring-3.8.0.orig/drivers/platform/x86/msi-wmi.c +++ linux-lts-raring-3.8.0/drivers/platform/x86/msi-wmi.c @@ -176,7 +176,7 @@ pr_debug("Suppressed key event 0x%X - " "Last press was %lld us ago\n", key->code, ktime_to_us(diff)); - return; + goto msi_wmi_notify_exit; } last_pressed[key->code - SCANCODE_BASE] = cur; @@ -195,6 +195,8 @@ pr_info("Unknown key pressed - %x\n", eventcode); } else pr_info("Unknown event received\n"); + +msi_wmi_notify_exit: kfree(response.pointer); } --- linux-lts-raring-3.8.0.orig/drivers/platform/olpc/olpc-ec.c +++ linux-lts-raring-3.8.0/drivers/platform/olpc/olpc-ec.c @@ -330,7 +330,7 @@ return platform_driver_register(&olpc_ec_plat_driver); } -module_init(olpc_ec_init_module); +arch_initcall(olpc_ec_init_module); MODULE_AUTHOR("Andres Salomon "); MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/drivers/crypto/talitos.c +++ linux-lts-raring-3.8.0/drivers/crypto/talitos.c @@ -38,7 +38,6 @@ #include #include #include -#include #include #include @@ -1974,11 +1973,7 @@ }; static struct talitos_alg_template driver_algs[] = { - /* - * AEAD algorithms. These use a single-pass ipsec_esp descriptor. - * authencesn(*,*) is also registered, although not present - * explicitly here. - */ + /* AEAD algorithms. These use a single-pass ipsec_esp descriptor */ { .type = CRYPTO_ALG_TYPE_AEAD, .alg.crypto = { .cra_name = "authenc(hmac(sha1),cbc(aes))", @@ -2820,9 +2815,7 @@ if (hw_supports(dev, driver_algs[i].desc_hdr_template)) { struct talitos_crypto_alg *t_alg; char *name = NULL; - bool authenc = false; -authencesn: t_alg = talitos_alg_alloc(dev, &driver_algs[i]); if (IS_ERR(t_alg)) { err = PTR_ERR(t_alg); @@ -2837,8 +2830,6 @@ err = crypto_register_alg( &t_alg->algt.alg.crypto); name = t_alg->algt.alg.crypto.cra_driver_name; - authenc = authenc ? !authenc : - !(bool)memcmp(name, "authenc", 7); break; case CRYPTO_ALG_TYPE_AHASH: err = crypto_register_ahash( @@ -2851,25 +2842,8 @@ dev_err(dev, "%s alg registration failed\n", name); kfree(t_alg); - } else { + } else list_add_tail(&t_alg->entry, &priv->alg_list); - if (authenc) { - struct crypto_alg *alg = - &driver_algs[i].alg.crypto; - - name = alg->cra_name; - memmove(name + 10, name + 7, - strlen(name) - 7); - memcpy(name + 7, "esn", 3); - - name = alg->cra_driver_name; - memmove(name + 10, name + 7, - strlen(name) - 7); - memcpy(name + 7, "esn", 3); - - goto authencesn; - } - } } } if (!list_empty(&priv->alg_list)) --- linux-lts-raring-3.8.0.orig/drivers/crypto/omap-sham.c +++ linux-lts-raring-3.8.0/drivers/crypto/omap-sham.c @@ -38,7 +38,10 @@ #include #include + +#ifdef CONFIG_ARCH_OMAP1 #include +#endif #define SHA_REG_DIGEST(x) (0x00 + ((x) * 0x04)) #define SHA_REG_DIN(x) (0x1C + ((x) * 0x04)) --- linux-lts-raring-3.8.0.orig/drivers/crypto/ux500/cryp/cryp_core.c +++ linux-lts-raring-3.8.0/drivers/crypto/ux500/cryp/cryp_core.c @@ -1750,7 +1750,7 @@ .shutdown = ux500_cryp_shutdown, .driver = { .owner = THIS_MODULE, - .name = "cryp1" + .name = "cryp1", .pm = &ux500_cryp_pm, } }; --- linux-lts-raring-3.8.0.orig/drivers/crypto/caam/caamalg.c +++ linux-lts-raring-3.8.0/drivers/crypto/caam/caamalg.c @@ -1154,7 +1154,7 @@ dst_nents = sg_count(req->dst, req->cryptlen, &dst_chained); sgc = dma_map_sg_chained(jrdev, req->assoc, assoc_nents ? : 1, - DMA_BIDIRECTIONAL, assoc_chained); + DMA_TO_DEVICE, assoc_chained); if (likely(req->src == req->dst)) { sgc = dma_map_sg_chained(jrdev, req->src, src_nents ? : 1, DMA_BIDIRECTIONAL, src_chained); @@ -1336,7 +1336,7 @@ dst_nents = sg_count(req->dst, req->cryptlen, &dst_chained); sgc = dma_map_sg_chained(jrdev, req->assoc, assoc_nents ? : 1, - DMA_BIDIRECTIONAL, assoc_chained); + DMA_TO_DEVICE, assoc_chained); if (likely(req->src == req->dst)) { sgc = dma_map_sg_chained(jrdev, req->src, src_nents ? : 1, DMA_BIDIRECTIONAL, src_chained); @@ -1650,11 +1650,7 @@ }; static struct caam_alg_template driver_algs[] = { - /* - * single-pass ipsec_esp descriptor - * authencesn(*,*) is also registered, although not present - * explicitly here. - */ + /* single-pass ipsec_esp descriptor */ { .name = "authenc(hmac(md5),cbc(aes))", .driver_name = "authenc-hmac-md5-cbc-aes-caam", @@ -2217,9 +2213,7 @@ for (i = 0; i < ARRAY_SIZE(driver_algs); i++) { /* TODO: check if h/w supports alg */ struct caam_crypto_alg *t_alg; - bool done = false; -authencesn: t_alg = caam_alg_alloc(ctrldev, &driver_algs[i]); if (IS_ERR(t_alg)) { err = PTR_ERR(t_alg); @@ -2233,25 +2227,8 @@ dev_warn(ctrldev, "%s alg registration failed\n", t_alg->crypto_alg.cra_driver_name); kfree(t_alg); - } else { + } else list_add_tail(&t_alg->entry, &priv->alg_list); - if (driver_algs[i].type == CRYPTO_ALG_TYPE_AEAD && - !memcmp(driver_algs[i].name, "authenc", 7) && - !done) { - char *name; - - name = driver_algs[i].name; - memmove(name + 10, name + 7, strlen(name) - 7); - memcpy(name + 7, "esn", 3); - - name = driver_algs[i].driver_name; - memmove(name + 10, name + 7, strlen(name) - 7); - memcpy(name + 7, "esn", 3); - - done = true; - goto authencesn; - } - } } if (!list_empty(&priv->alg_list)) dev_info(ctrldev, "%s algorithms registered in /proc/crypto\n", --- linux-lts-raring-3.8.0.orig/drivers/crypto/caam/compat.h +++ linux-lts-raring-3.8.0/drivers/crypto/caam/compat.h @@ -23,7 +23,6 @@ #include #include #include -#include #include #include --- linux-lts-raring-3.8.0.orig/drivers/pnp/isapnp/core.c +++ linux-lts-raring-3.8.0/drivers/pnp/isapnp/core.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include "../base.h" @@ -1001,7 +1002,7 @@ .disable = isapnp_disable_resources, }; -static int __init isapnp_init(void) +static int __init real_isapnp_init(void) { int cards; struct pnp_card *card; @@ -1095,6 +1096,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-lts-raring-3.8.0.orig/drivers/s390/char/sclp_cmd.c +++ linux-lts-raring-3.8.0/drivers/s390/char/sclp_cmd.c @@ -567,6 +567,8 @@ add_memory_merged(0); } +#define MEM_SCT_SIZE (1UL << SECTION_SIZE_BITS) + static void __init insert_increment(u16 rn, int standby, int assigned) { struct memory_increment *incr, *new_incr; @@ -579,7 +581,7 @@ new_incr->rn = rn; new_incr->standby = standby; if (!standby) - new_incr->usecount = 1; + new_incr->usecount = rzm > MEM_SCT_SIZE ? rzm/MEM_SCT_SIZE : 1; last_rn = 0; prev = &sclp_mem_list; list_for_each_entry(incr, &sclp_mem_list, list) { --- linux-lts-raring-3.8.0.orig/drivers/s390/kvm/kvm_virtio.c +++ linux-lts-raring-3.8.0/drivers/s390/kvm/kvm_virtio.c @@ -422,6 +422,26 @@ } /* + * For s390-virtio, we expect a page above main storage containing + * the virtio configuration. Try to actually load from this area + * in order to figure out if the host provides this page. + */ +static int __init test_devices_support(unsigned long addr) +{ + int ret = -EIO; + + asm volatile( + "0: lura 0,%1\n" + "1: xgr %0,%0\n" + "2:\n" + EX_TABLE(0b,2b) + EX_TABLE(1b,2b) + : "+d" (ret) + : "a" (addr) + : "0", "cc"); + return ret; +} +/* * Init function for virtio * devices are in a single page above top of "normal" mem */ @@ -432,21 +452,23 @@ if (!MACHINE_IS_KVM) return -ENODEV; + if (test_devices_support(real_memory_size) < 0) + return -ENODEV; + + rc = vmem_add_mapping(real_memory_size, PAGE_SIZE); + if (rc) + return rc; + + kvm_devices = (void *) real_memory_size; + kvm_root = root_device_register("kvm_s390"); if (IS_ERR(kvm_root)) { rc = PTR_ERR(kvm_root); printk(KERN_ERR "Could not register kvm_s390 root device"); + vmem_remove_mapping(real_memory_size, PAGE_SIZE); return rc; } - rc = vmem_add_mapping(real_memory_size, PAGE_SIZE); - if (rc) { - root_device_unregister(kvm_root); - return rc; - } - - kvm_devices = (void *) real_memory_size; - INIT_WORK(&hotplug_work, hotplug_devices); service_subclass_irq_register(); --- linux-lts-raring-3.8.0.orig/drivers/s390/scsi/zfcp_fsf.c +++ linux-lts-raring-3.8.0/drivers/s390/scsi/zfcp_fsf.c @@ -3,7 +3,7 @@ * * Implementation of FSF commands. * - * Copyright IBM Corp. 2002, 2010 + * Copyright IBM Corp. 2002, 2013 */ #define KMSG_COMPONENT "zfcp" @@ -483,12 +483,8 @@ fc_host_port_name(shost) = nsp->fl_wwpn; fc_host_node_name(shost) = nsp->fl_wwnn; - fc_host_port_id(shost) = ntoh24(bottom->s_id); - fc_host_speed(shost) = - zfcp_fsf_convert_portspeed(bottom->fc_link_speed); fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3; - adapter->hydra_version = bottom->adapter_type; adapter->timer_ticks = bottom->timer_interval & ZFCP_FSF_TIMER_INT_MASK; adapter->stat_read_buf_num = max(bottom->status_read_buf_num, (u16)FSF_STATUS_READS_RECOM); @@ -496,6 +492,19 @@ if (fc_host_permanent_port_name(shost) == -1) fc_host_permanent_port_name(shost) = fc_host_port_name(shost); + zfcp_scsi_set_prot(adapter); + + /* no error return above here, otherwise must fix call chains */ + /* do not evaluate invalid fields */ + if (req->qtcb->header.fsf_status == FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE) + return 0; + + fc_host_port_id(shost) = ntoh24(bottom->s_id); + fc_host_speed(shost) = + zfcp_fsf_convert_portspeed(bottom->fc_link_speed); + + adapter->hydra_version = bottom->adapter_type; + switch (bottom->fc_topology) { case FSF_TOPO_P2P: adapter->peer_d_id = ntoh24(bottom->peer_d_id); @@ -517,8 +526,6 @@ return -EIO; } - zfcp_scsi_set_prot(adapter); - return 0; } @@ -563,8 +570,14 @@ fc_host_port_type(shost) = FC_PORTTYPE_UNKNOWN; adapter->hydra_version = 0; + /* avoids adapter shutdown to be able to recognize + * events such as LINK UP */ + atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, + &adapter->status); zfcp_fsf_link_down_info_eval(req, &qtcb->header.fsf_status_qual.link_down_info); + if (zfcp_fsf_exchange_config_evaluate(req)) + return; break; default: zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3"); --- linux-lts-raring-3.8.0.orig/drivers/s390/scsi/zfcp_aux.c +++ linux-lts-raring-3.8.0/drivers/s390/scsi/zfcp_aux.c @@ -3,7 +3,7 @@ * * Module interface and handling of zfcp data structures. * - * Copyright IBM Corp. 2002, 2010 + * Copyright IBM Corp. 2002, 2013 */ /* @@ -23,6 +23,7 @@ * Christof Schmitt * Martin Petermann * Sven Schuetz + * Steffen Maier */ #define KMSG_COMPONENT "zfcp" @@ -415,6 +416,8 @@ adapter->dma_parms.max_segment_size = ZFCP_QDIO_SBALE_LEN; adapter->ccw_device->dev.dma_parms = &adapter->dma_parms; + adapter->stat_read_buf_num = FSF_STATUS_READS_RECOM; + if (!zfcp_scsi_adapter_register(adapter)) return adapter; --- linux-lts-raring-3.8.0.orig/drivers/s390/scsi/zfcp_scsi.c +++ linux-lts-raring-3.8.0/drivers/s390/scsi/zfcp_scsi.c @@ -3,7 +3,7 @@ * * Interface to Linux SCSI midlayer. * - * Copyright IBM Corp. 2002, 2010 + * Copyright IBM Corp. 2002, 2013 */ #define KMSG_COMPONENT "zfcp" @@ -311,8 +311,12 @@ .proc_name = "zfcp", .can_queue = 4096, .this_id = -1, - .sg_tablesize = 1, /* adjusted later */ - .max_sectors = 8, /* adjusted later */ + .sg_tablesize = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1) + * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2), + /* GCD, adjusted later */ + .max_sectors = (((QDIO_MAX_ELEMENTS_PER_BUFFER - 1) + * ZFCP_QDIO_MAX_SBALS_PER_REQ) - 2) * 8, + /* GCD, adjusted later */ .dma_boundary = ZFCP_QDIO_SBALE_LEN - 1, .cmd_per_lun = 1, .use_clustering = 1, --- linux-lts-raring-3.8.0.orig/drivers/s390/scsi/zfcp_qdio.c +++ linux-lts-raring-3.8.0/drivers/s390/scsi/zfcp_qdio.c @@ -224,11 +224,9 @@ static int zfcp_qdio_sbal_check(struct zfcp_qdio *qdio) { - spin_lock_irq(&qdio->req_q_lock); if (atomic_read(&qdio->req_q_free) || !(atomic_read(&qdio->adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP)) return 1; - spin_unlock_irq(&qdio->req_q_lock); return 0; } @@ -246,9 +244,8 @@ { long ret; - spin_unlock_irq(&qdio->req_q_lock); - ret = wait_event_interruptible_timeout(qdio->req_q_wq, - zfcp_qdio_sbal_check(qdio), 5 * HZ); + ret = wait_event_interruptible_lock_irq_timeout(qdio->req_q_wq, + zfcp_qdio_sbal_check(qdio), qdio->req_q_lock, 5 * HZ); if (!(atomic_read(&qdio->adapter->status) & ZFCP_STATUS_ADAPTER_QDIOUP)) return -EIO; @@ -262,7 +259,6 @@ zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdsbg_1"); } - spin_lock_irq(&qdio->req_q_lock); return -EIO; } --- linux-lts-raring-3.8.0.orig/drivers/s390/scsi/zfcp_erp.c +++ linux-lts-raring-3.8.0/drivers/s390/scsi/zfcp_erp.c @@ -102,10 +102,13 @@ if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_INUSE) zfcp_erp_action_dismiss(&port->erp_action); - else - shost_for_each_device(sdev, port->adapter->scsi_host) + else { + spin_lock(port->adapter->scsi_host->host_lock); + __shost_for_each_device(sdev, port->adapter->scsi_host) if (sdev_to_zfcp(sdev)->port == port) zfcp_erp_action_dismiss_lun(sdev); + spin_unlock(port->adapter->scsi_host->host_lock); + } } static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter) @@ -592,9 +595,11 @@ { struct scsi_device *sdev; - shost_for_each_device(sdev, port->adapter->scsi_host) + spin_lock(port->adapter->scsi_host->host_lock); + __shost_for_each_device(sdev, port->adapter->scsi_host) if (sdev_to_zfcp(sdev)->port == port) _zfcp_erp_lun_reopen(sdev, clear, id, 0); + spin_unlock(port->adapter->scsi_host->host_lock); } static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act) @@ -1435,8 +1440,10 @@ atomic_set_mask(common_mask, &port->status); read_unlock_irqrestore(&adapter->port_list_lock, flags); - shost_for_each_device(sdev, adapter->scsi_host) + spin_lock_irqsave(adapter->scsi_host->host_lock, flags); + __shost_for_each_device(sdev, adapter->scsi_host) atomic_set_mask(common_mask, &sdev_to_zfcp(sdev)->status); + spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags); } /** @@ -1470,11 +1477,13 @@ } read_unlock_irqrestore(&adapter->port_list_lock, flags); - shost_for_each_device(sdev, adapter->scsi_host) { + spin_lock_irqsave(adapter->scsi_host->host_lock, flags); + __shost_for_each_device(sdev, adapter->scsi_host) { atomic_clear_mask(common_mask, &sdev_to_zfcp(sdev)->status); if (clear_counter) atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0); } + spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags); } /** @@ -1488,16 +1497,19 @@ { struct scsi_device *sdev; u32 common_mask = mask & ZFCP_COMMON_FLAGS; + unsigned long flags; atomic_set_mask(mask, &port->status); if (!common_mask) return; - shost_for_each_device(sdev, port->adapter->scsi_host) + spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags); + __shost_for_each_device(sdev, port->adapter->scsi_host) if (sdev_to_zfcp(sdev)->port == port) atomic_set_mask(common_mask, &sdev_to_zfcp(sdev)->status); + spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags); } /** @@ -1512,6 +1524,7 @@ struct scsi_device *sdev; u32 common_mask = mask & ZFCP_COMMON_FLAGS; u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED; + unsigned long flags; atomic_clear_mask(mask, &port->status); @@ -1521,13 +1534,15 @@ if (clear_counter) atomic_set(&port->erp_counter, 0); - shost_for_each_device(sdev, port->adapter->scsi_host) + spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags); + __shost_for_each_device(sdev, port->adapter->scsi_host) if (sdev_to_zfcp(sdev)->port == port) { atomic_clear_mask(common_mask, &sdev_to_zfcp(sdev)->status); if (clear_counter) atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0); } + spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags); } /** --- linux-lts-raring-3.8.0.orig/drivers/rtc/rtc-at91rm9200.c +++ linux-lts-raring-3.8.0/drivers/rtc/rtc-at91rm9200.c @@ -298,7 +298,7 @@ if (ret) { printk(KERN_ERR "at91_rtc: IRQ %d already in use.\n", irq); - return ret; + goto err_unmap; } /* cpu init code should really have flagged this device as @@ -310,13 +310,20 @@ rtc = rtc_device_register(pdev->name, &pdev->dev, &at91_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { - free_irq(irq, pdev); - return PTR_ERR(rtc); + ret = PTR_ERR(rtc); + goto err_free_irq; } platform_set_drvdata(pdev, rtc); printk(KERN_INFO "AT91 Real Time Clock driver.\n"); return 0; + +err_free_irq: + free_irq(irq, pdev); +err_unmap: + iounmap(at91_rtc_regs); + + return ret; } /* @@ -333,6 +340,7 @@ free_irq(irq, pdev); rtc_device_unregister(rtc); + iounmap(at91_rtc_regs); platform_set_drvdata(pdev, NULL); return 0; --- linux-lts-raring-3.8.0.orig/drivers/rtc/rtc-cmos.c +++ linux-lts-raring-3.8.0/drivers/rtc/rtc-cmos.c @@ -805,9 +805,8 @@ mask = RTC_IRQMASK; tmp &= ~mask; CMOS_WRITE(tmp, RTC_CONTROL); + hpet_mask_rtc_irq_bit(mask); - /* shut down hpet emulation - we don't need it for alarm */ - hpet_mask_rtc_irq_bit(RTC_PIE|RTC_AIE|RTC_UIE); cmos_checkintr(cmos, tmp); } spin_unlock_irq(&rtc_lock); @@ -872,6 +871,7 @@ rtc_update_irq(cmos->rtc, 1, mask); tmp &= ~RTC_AIE; hpet_mask_rtc_irq_bit(RTC_AIE); + hpet_rtc_timer_init(); } while (mask & RTC_AIE); spin_unlock_irq(&rtc_lock); } --- linux-lts-raring-3.8.0.orig/drivers/rtc/rtc-pcf2123.c +++ linux-lts-raring-3.8.0/drivers/rtc/rtc-pcf2123.c @@ -265,6 +265,7 @@ if (!(rxbuf[0] & 0x20)) { dev_err(&spi->dev, "chip not found\n"); + ret = -ENODEV; goto kfree_exit; } --- linux-lts-raring-3.8.0.orig/drivers/rtc/rtc-rv3029c2.c +++ linux-lts-raring-3.8.0/drivers/rtc/rtc-rv3029c2.c @@ -310,7 +310,7 @@ dev_dbg(&client->dev, "alarm IRQ armed\n"); } else { /* disable AIE irq */ - ret = rv3029c2_rtc_i2c_alarm_set_irq(client, 1); + ret = rv3029c2_rtc_i2c_alarm_set_irq(client, 0); if (ret) return ret; --- linux-lts-raring-3.8.0.orig/drivers/rtc/rtc-mv.c +++ linux-lts-raring-3.8.0/drivers/rtc/rtc-mv.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -41,6 +42,7 @@ struct rtc_device *rtc; void __iomem *ioaddr; int irq; + struct clk *clk; }; static int mv_rtc_set_time(struct device *dev, struct rtc_time *tm) @@ -221,6 +223,7 @@ struct rtc_plat_data *pdata; resource_size_t size; u32 rtc_time; + int ret = 0; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) @@ -239,11 +242,17 @@ if (!pdata->ioaddr) return -ENOMEM; + pdata->clk = devm_clk_get(&pdev->dev, NULL); + /* Not all SoCs require a clock.*/ + if (!IS_ERR(pdata->clk)) + clk_prepare_enable(pdata->clk); + /* make sure the 24 hours mode is enabled */ rtc_time = readl(pdata->ioaddr + RTC_TIME_REG_OFFS); if (rtc_time & RTC_HOURS_12H_MODE) { dev_err(&pdev->dev, "24 Hours mode not supported.\n"); - return -EINVAL; + ret = -EINVAL; + goto out; } /* make sure it is actually functional */ @@ -252,7 +261,8 @@ rtc_time = readl(pdata->ioaddr + RTC_TIME_REG_OFFS); if (rtc_time == 0x01000000) { dev_err(&pdev->dev, "internal RTC not ticking\n"); - return -ENODEV; + ret = -ENODEV; + goto out; } } @@ -268,8 +278,10 @@ } else pdata->rtc = rtc_device_register(pdev->name, &pdev->dev, &mv_rtc_ops, THIS_MODULE); - if (IS_ERR(pdata->rtc)) - return PTR_ERR(pdata->rtc); + if (IS_ERR(pdata->rtc)) { + ret = PTR_ERR(pdata->rtc); + goto out; + } if (pdata->irq >= 0) { writel(0, pdata->ioaddr + RTC_ALARM_INTERRUPT_MASK_REG_OFFS); @@ -282,6 +294,11 @@ } return 0; +out: + if (!IS_ERR(pdata->clk)) + clk_disable_unprepare(pdata->clk); + + return ret; } static int __exit mv_rtc_remove(struct platform_device *pdev) @@ -292,6 +309,9 @@ device_init_wakeup(&pdev->dev, 0); rtc_device_unregister(pdata->rtc); + if (!IS_ERR(pdata->clk)) + clk_disable_unprepare(pdata->clk); + return 0; } --- linux-lts-raring-3.8.0.orig/drivers/rtc/rtc-twl.c +++ linux-lts-raring-3.8.0/drivers/rtc/rtc-twl.c @@ -523,6 +523,7 @@ } platform_set_drvdata(pdev, rtc); + device_init_wakeup(&pdev->dev, 1); return 0; out2: --- linux-lts-raring-3.8.0.orig/drivers/misc/hpilo.c +++ linux-lts-raring-3.8.0/drivers/misc/hpilo.c @@ -759,7 +759,7 @@ /* Ignore subsystem_device = 0x1979 (set by BIOS) */ if (pdev->subsystem_device == 0x1979) - goto out; + return 0; if (max_ccb > MAX_CCB) max_ccb = MAX_CCB; @@ -899,7 +899,7 @@ class_destroy(ilo_class); } -MODULE_VERSION("1.4"); +MODULE_VERSION("1.4.1"); MODULE_ALIAS(ILO_NAME); MODULE_DESCRIPTION(ILO_NAME); MODULE_AUTHOR("David Altobelli "); --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/acpi-cpufreq.c +++ linux-lts-raring-3.8.0/drivers/cpufreq/acpi-cpufreq.c @@ -347,11 +347,11 @@ switch (per_cpu(acfreq_data, cpumask_first(mask))->cpu_feature) { case SYSTEM_INTEL_MSR_CAPABLE: cmd.type = SYSTEM_INTEL_MSR_CAPABLE; - cmd.addr.msr.reg = MSR_IA32_PERF_STATUS; + cmd.addr.msr.reg = MSR_IA32_PERF_CTL; break; case SYSTEM_AMD_MSR_CAPABLE: cmd.type = SYSTEM_AMD_MSR_CAPABLE; - cmd.addr.msr.reg = MSR_AMD_PERF_STATUS; + cmd.addr.msr.reg = MSR_AMD_PERF_CTL; break; case SYSTEM_IO_CAPABLE: cmd.type = SYSTEM_IO_CAPABLE; --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/cpufreq.c +++ linux-lts-raring-3.8.0/drivers/cpufreq/cpufreq.c @@ -1851,6 +1851,20 @@ * REGISTER / UNREGISTER CPUFREQ DRIVER * *********************************************************************/ +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# @@ -1873,7 +1887,13 @@ ((!driver_data->setpolicy) && (!driver_data->target))) 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; if (driver_data->setpolicy) driver_data->flags |= CPUFREQ_CONST_LOOPS; --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/cpufreq-cpu0.c +++ linux-lts-raring-3.8.0/drivers/cpufreq/cpufreq-cpu0.c @@ -179,10 +179,20 @@ static int cpu0_cpufreq_driver_init(void) { - struct device_node *np; + struct device_node *np, *parent; int ret; - np = of_find_node_by_path("/cpus/cpu@0"); + parent = of_find_node_by_path("/cpus"); + if (!parent) { + pr_err("failed to find OF /cpus\n"); + return -ENOENT; + } + + for_each_child_of_node(parent, np) { + if (of_get_property(np, "operating-points", NULL)) + break; + } + if (!np) { pr_err("failed to find cpu0 node\n"); return -ENOENT; --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/Makefile +++ linux-lts-raring-3.8.0/drivers/cpufreq/Makefile @@ -50,8 +50,9 @@ obj-$(CONFIG_ARM_EXYNOS4210_CPUFREQ) += exynos4210-cpufreq.o obj-$(CONFIG_ARM_EXYNOS4X12_CPUFREQ) += exynos4x12-cpufreq.o obj-$(CONFIG_ARM_EXYNOS5250_CPUFREQ) += exynos5250-cpufreq.o -obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o +obj-$(CONFIG_ARM_OMAP2PLUS_CPUFREQ) += omap-cpufreq.o obj-$(CONFIG_ARM_SPEAR_CPUFREQ) += spear-cpufreq.o +obj-$(CONFIG_ARM_HIGHBANK_CPUFREQ) += highbank-cpufreq.o ################################################################################## # PowerPC platform drivers --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/highbank-cpufreq.c +++ linux-lts-raring-3.8.0/drivers/cpufreq/highbank-cpufreq.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2012 Calxeda, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This driver provides the clk notifier callbacks that are used when + * the cpufreq-cpu0 driver changes to frequency to alert the highbank + * EnergyCore Management Engine (ECME) about the need to change + * voltage. The ECME interfaces with the actual voltage regulators. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include + +#define HB_CPUFREQ_CHANGE_NOTE 0x80000001 +#define HB_CPUFREQ_IPC_LEN 7 +#define HB_CPUFREQ_VOLT_RETRIES 15 + +static int hb_voltage_change(unsigned int freq) +{ + int i; + u32 msg[HB_CPUFREQ_IPC_LEN]; + + msg[0] = HB_CPUFREQ_CHANGE_NOTE; + msg[1] = freq / 1000000; + for (i = 2; i < HB_CPUFREQ_IPC_LEN; i++) + msg[i] = 0; + + return pl320_ipc_transmit(msg); +} + +static int hb_cpufreq_clk_notify(struct notifier_block *nb, + unsigned long action, void *hclk) +{ + struct clk_notifier_data *clk_data = hclk; + int i = 0; + + if (action == PRE_RATE_CHANGE) { + if (clk_data->new_rate > clk_data->old_rate) + while (hb_voltage_change(clk_data->new_rate)) + if (i++ > HB_CPUFREQ_VOLT_RETRIES) + return NOTIFY_BAD; + } else if (action == POST_RATE_CHANGE) { + if (clk_data->new_rate < clk_data->old_rate) + while (hb_voltage_change(clk_data->new_rate)) + if (i++ > HB_CPUFREQ_VOLT_RETRIES) + return NOTIFY_BAD; + } + + return NOTIFY_DONE; +} + +static struct notifier_block hb_cpufreq_clk_nb = { + .notifier_call = hb_cpufreq_clk_notify, +}; + +static int hb_cpufreq_driver_init(void) +{ + struct device *cpu_dev; + struct clk *cpu_clk; + struct device_node *np; + int ret; + + if (!of_machine_is_compatible("calxeda,highbank")) + return -ENODEV; + + for_each_child_of_node(of_find_node_by_path("/cpus"), np) + if (of_get_property(np, "operating-points", NULL)) + break; + + if (!np) { + pr_err("failed to find highbank cpufreq node\n"); + return -ENOENT; + } + + cpu_dev = get_cpu_device(0); + if (!cpu_dev) { + pr_err("failed to get highbank cpufreq device\n"); + ret = -ENODEV; + goto out_put_node; + } + + cpu_dev->of_node = np; + + cpu_clk = clk_get(cpu_dev, NULL); + if (IS_ERR(cpu_clk)) { + ret = PTR_ERR(cpu_clk); + pr_err("failed to get cpu0 clock: %d\n", ret); + goto out_put_node; + } + + ret = clk_notifier_register(cpu_clk, &hb_cpufreq_clk_nb); + if (ret) { + pr_err("failed to register clk notifier: %d\n", ret); + goto out_put_node; + } + +out_put_node: + of_node_put(np); + return ret; +} +module_init(hb_cpufreq_driver_init); + +MODULE_AUTHOR("Mark Langsdorf "); +MODULE_DESCRIPTION("Calxeda Highbank cpufreq driver"); +MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/Kconfig.arm +++ linux-lts-raring-3.8.0/drivers/cpufreq/Kconfig.arm @@ -83,3 +83,18 @@ default y help This adds the CPUFreq driver support for SPEAr SOCs. + +config ARM_HIGHBANK_CPUFREQ + tristate "Calxeda Highbank-based" + depends on ARCH_HIGHBANK + select CPU_FREQ_TABLE + select GENERIC_CPUFREQ_CPU0 + select PM_OPP + select REGULATOR + + default m + help + This adds the CPUFreq driver for Calxeda Highbank SoC + based boards. + + If in doubt, say N. --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/omap-cpufreq.c +++ linux-lts-raring-3.8.0/drivers/cpufreq/omap-cpufreq.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -254,7 +255,7 @@ .attr = omap_cpufreq_attr, }; -static int __init omap_cpufreq_init(void) +static int omap_cpufreq_probe(struct platform_device *pdev) { mpu_dev = get_cpu_device(0); if (!mpu_dev) { @@ -282,12 +283,20 @@ return cpufreq_register_driver(&omap_driver); } -static void __exit omap_cpufreq_exit(void) +static int omap_cpufreq_remove(struct platform_device *pdev) { - cpufreq_unregister_driver(&omap_driver); + return cpufreq_unregister_driver(&omap_driver); } +static struct platform_driver omap_cpufreq_platdrv = { + .driver = { + .name = "omap-cpufreq", + .owner = THIS_MODULE, + }, + .probe = omap_cpufreq_probe, + .remove = omap_cpufreq_remove, +}; +module_platform_driver(omap_cpufreq_platdrv); + MODULE_DESCRIPTION("cpufreq driver for OMAP SoCs"); MODULE_LICENSE("GPL"); -module_init(omap_cpufreq_init); -module_exit(omap_cpufreq_exit); --- linux-lts-raring-3.8.0.orig/drivers/cpufreq/exynos-cpufreq.c +++ linux-lts-raring-3.8.0/drivers/cpufreq/exynos-cpufreq.c @@ -222,8 +222,6 @@ cpufreq_frequency_table_get_attr(exynos_info->freq_table, policy->cpu); - locking_frequency = exynos_getspeed(0); - /* set the transition latency value */ policy->cpuinfo.transition_latency = 100000; @@ -288,6 +286,8 @@ goto err_vdd_arm; } + locking_frequency = exynos_getspeed(0); + register_pm_notifier(&exynos_cpufreq_nb); if (cpufreq_register_driver(&exynos_driver)) { --- linux-lts-raring-3.8.0.orig/drivers/vhost/vhost.c +++ linux-lts-raring-3.8.0/drivers/vhost/vhost.c @@ -1581,5 +1581,10 @@ { kref_put(&ubufs->kref, vhost_zerocopy_done_signal); wait_event(ubufs->wait, !atomic_read(&ubufs->kref.refcount)); +} + +void vhost_ubuf_put_wait_and_free(struct vhost_ubuf_ref *ubufs) +{ + vhost_ubuf_put_and_wait(ubufs); kfree(ubufs); } --- linux-lts-raring-3.8.0.orig/drivers/vhost/net.c +++ linux-lts-raring-3.8.0/drivers/vhost/net.c @@ -210,6 +210,11 @@ struct vhost_virtqueue *vq = ubufs->vq; int cnt = atomic_read(&ubufs->kref.refcount); + /* set len to mark this desc buffers done DMA */ + vq->heads[ubuf->desc].len = success ? + VHOST_DMA_DONE_LEN : VHOST_DMA_FAILED_LEN; + vhost_ubuf_put(ubufs); + /* * Trigger polling thread if guest stopped submitting new buffers: * in this case, the refcount after decrement will eventually reach 1 @@ -220,10 +225,6 @@ */ if (cnt <= 2 || !(cnt % 16)) vhost_poll_queue(&vq->poll); - /* set len to mark this desc buffers done DMA */ - vq->heads[ubuf->desc].len = success ? - VHOST_DMA_DONE_LEN : VHOST_DMA_FAILED_LEN; - vhost_ubuf_put(ubufs); } /* Expects to be always run from workqueue - which acts as @@ -339,7 +340,8 @@ msg.msg_controllen = 0; ubufs = NULL; } else { - struct ubuf_info *ubuf = &vq->ubuf_info[head]; + struct ubuf_info *ubuf; + ubuf = vq->ubuf_info + vq->upend_idx; vq->heads[vq->upend_idx].len = VHOST_DMA_IN_PROGRESS; @@ -352,7 +354,8 @@ kref_get(&ubufs->kref); } vq->upend_idx = (vq->upend_idx + 1) % UIO_MAXIOV; - } + } else + msg.msg_control = NULL; /* TODO: Check specific error and bomb out unless ENOBUFS? */ err = sock->ops->sendmsg(NULL, sock, &msg, len); if (unlikely(err < 0)) { @@ -855,7 +858,7 @@ mutex_unlock(&vq->mutex); if (oldubufs) { - vhost_ubuf_put_and_wait(oldubufs); + vhost_ubuf_put_wait_and_free(oldubufs); mutex_lock(&vq->mutex); vhost_zerocopy_signal_used(n, vq); mutex_unlock(&vq->mutex); @@ -873,7 +876,7 @@ rcu_assign_pointer(vq->private_data, oldsock); vhost_net_enable_vq(n, vq); if (ubufs) - vhost_ubuf_put_and_wait(ubufs); + vhost_ubuf_put_wait_and_free(ubufs); err_ubufs: fput(sock->file); err_vq: --- linux-lts-raring-3.8.0.orig/drivers/vhost/vhost.h +++ linux-lts-raring-3.8.0/drivers/vhost/vhost.h @@ -63,6 +63,7 @@ struct vhost_ubuf_ref *vhost_ubuf_alloc(struct vhost_virtqueue *, bool zcopy); void vhost_ubuf_put(struct vhost_ubuf_ref *); void vhost_ubuf_put_and_wait(struct vhost_ubuf_ref *); +void vhost_ubuf_put_wait_and_free(struct vhost_ubuf_ref *); struct ubuf_info; --- linux-lts-raring-3.8.0.orig/drivers/gpu/vga/vga_switcheroo.c +++ linux-lts-raring-3.8.0/drivers/gpu/vga/vga_switcheroo.c @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -337,8 +338,10 @@ if (new_client->fb_info) { struct fb_event event; + console_lock(); event.info = new_client->fb_info; fb_notifier_call_chain(FB_EVENT_REMAP_ALL_CONSOLE, &event); + console_unlock(); } ret = vgasr_priv.handler->switchto(new_client->id); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_crtc.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_crtc.c @@ -2089,7 +2089,7 @@ switch (bpp) { case 8: - fmt = DRM_FORMAT_RGB332; + fmt = DRM_FORMAT_C8; break; case 16: if (depth == 15) @@ -2464,7 +2464,22 @@ r->depth = fb->depth; r->bpp = fb->bits_per_pixel; r->pitch = fb->pitches[0]; - fb->funcs->create_handle(fb, file_priv, &r->handle); + if (fb->funcs->create_handle) { + if (file_priv->is_master || capable(CAP_SYS_ADMIN)) { + ret = fb->funcs->create_handle(fb, file_priv, + &r->handle); + } else { + /* GET_FB() is an unprivileged ioctl so we must not + * return a buffer-handle to non-master processes! For + * backwards-compatibility reasons, we cannot make + * GET_FB() privileged, so just return an invalid handle + * for non-masters. */ + r->handle = 0; + ret = 0; + } + } else { + ret = -ENODEV; + } out: mutex_unlock(&dev->mode_config.mutex); @@ -3702,6 +3717,7 @@ int *bpp) { switch (format) { + case DRM_FORMAT_C8: case DRM_FORMAT_RGB332: case DRM_FORMAT_BGR233: *depth = 8; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_mm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_mm.c @@ -725,33 +725,35 @@ EXPORT_SYMBOL(drm_mm_debug_table); #if defined(CONFIG_DEBUG_FS) -int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) +static unsigned long drm_mm_dump_hole(struct seq_file *m, struct drm_mm_node *entry) { - struct drm_mm_node *entry; - unsigned long total_used = 0, total_free = 0, total = 0; unsigned long hole_start, hole_end, hole_size; - hole_start = drm_mm_hole_node_start(&mm->head_node); - hole_end = drm_mm_hole_node_end(&mm->head_node); - hole_size = hole_end - hole_start; - if (hole_size) + if (entry->hole_follows) { + hole_start = drm_mm_hole_node_start(entry); + hole_end = drm_mm_hole_node_end(entry); + hole_size = hole_end - hole_start; seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: free\n", hole_start, hole_end, hole_size); - total_free += hole_size; + return hole_size; + } + + return 0; +} + +int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm) +{ + struct drm_mm_node *entry; + unsigned long total_used = 0, total_free = 0, total = 0; + + total_free += drm_mm_dump_hole(m, &mm->head_node); drm_mm_for_each_node(entry, mm) { seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: used\n", entry->start, entry->start + entry->size, entry->size); total_used += entry->size; - if (entry->hole_follows) { - hole_start = drm_mm_hole_node_start(entry); - hole_end = drm_mm_hole_node_end(entry); - hole_size = hole_end - hole_start; - seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: free\n", - hole_start, hole_end, hole_size); - total_free += hole_size; - } + total_free += drm_mm_dump_hole(m, entry); } total = total_free + total_used; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_pci.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_pci.c @@ -367,6 +367,10 @@ list_add_tail(&dev->driver_item, &driver->device_list); + if (drm_core_check_feature(dev, DRIVER_MODESET)) + idr_replace(&drm_minors_idr, dev->control, dev->control->index); + idr_replace(&drm_minors_idr, dev->primary, dev->primary->index); + DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n", driver->name, driver->major, driver->minor, driver->patchlevel, driver->date, pci_name(pdev), dev->primary->index); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_stub.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_stub.c @@ -364,7 +364,7 @@ new_minor->index = minor_id; INIT_LIST_HEAD(&new_minor->master_list); - idr_replace(&drm_minors_idr, new_minor, minor_id); + idr_replace(&drm_minors_idr, ERR_PTR(-EAGAIN), minor_id); if (type == DRM_MINOR_LEGACY) { ret = drm_proc_init(new_minor, minor_id, drm_proc_root); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_platform.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_platform.c @@ -89,6 +89,10 @@ list_add_tail(&dev->driver_item, &driver->device_list); + if (drm_core_check_feature(dev, DRIVER_MODESET)) + idr_replace(&drm_minors_idr, dev->control, dev->control->index); + idr_replace(&drm_minors_idr, dev->primary, dev->primary->index); + mutex_unlock(&drm_global_mutex); DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n", --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_prime.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_prime.c @@ -53,7 +53,8 @@ * Self-importing: if userspace is using PRIME as a replacement for flink * then it will get a fd->handle request for a GEM object that it created. * Drivers should detect this situation and return back the gem object - * from the dma-buf private. + * from the dma-buf private. Prime will do this automatically for drivers that + * use the drm_gem_prime_{import,export} helpers. */ struct drm_prime_member { @@ -61,6 +62,138 @@ struct dma_buf *dma_buf; uint32_t handle; }; +static int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle); + +static struct sg_table *drm_gem_map_dma_buf(struct dma_buf_attachment *attach, + enum dma_data_direction dir) +{ + struct drm_gem_object *obj = attach->dmabuf->priv; + struct sg_table *sgt; + + mutex_lock(&obj->dev->struct_mutex); + + sgt = obj->dev->driver->gem_prime_get_sg_table(obj); + + if (!IS_ERR_OR_NULL(sgt)) + dma_map_sg(attach->dev, sgt->sgl, sgt->nents, dir); + + mutex_unlock(&obj->dev->struct_mutex); + return sgt; +} + +static void drm_gem_unmap_dma_buf(struct dma_buf_attachment *attach, + struct sg_table *sgt, enum dma_data_direction dir) +{ + dma_unmap_sg(attach->dev, sgt->sgl, sgt->nents, dir); + sg_free_table(sgt); + kfree(sgt); +} + +static void drm_gem_dmabuf_release(struct dma_buf *dma_buf) +{ + struct drm_gem_object *obj = dma_buf->priv; + + if (obj->export_dma_buf == dma_buf) { + /* drop the reference on the export fd holds */ + obj->export_dma_buf = NULL; + drm_gem_object_unreference_unlocked(obj); + } +} + +static void *drm_gem_dmabuf_vmap(struct dma_buf *dma_buf) +{ + struct drm_gem_object *obj = dma_buf->priv; + struct drm_device *dev = obj->dev; + + return dev->driver->gem_prime_vmap(obj); +} + +static void drm_gem_dmabuf_vunmap(struct dma_buf *dma_buf, void *vaddr) +{ + struct drm_gem_object *obj = dma_buf->priv; + struct drm_device *dev = obj->dev; + + dev->driver->gem_prime_vunmap(obj, vaddr); +} + +static void *drm_gem_dmabuf_kmap_atomic(struct dma_buf *dma_buf, + unsigned long page_num) +{ + return NULL; +} + +static void drm_gem_dmabuf_kunmap_atomic(struct dma_buf *dma_buf, + unsigned long page_num, void *addr) +{ + +} +static void *drm_gem_dmabuf_kmap(struct dma_buf *dma_buf, + unsigned long page_num) +{ + return NULL; +} + +static void drm_gem_dmabuf_kunmap(struct dma_buf *dma_buf, + unsigned long page_num, void *addr) +{ + +} + +static int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, + struct vm_area_struct *vma) +{ + return -EINVAL; +} + +static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { + .map_dma_buf = drm_gem_map_dma_buf, + .unmap_dma_buf = drm_gem_unmap_dma_buf, + .release = drm_gem_dmabuf_release, + .kmap = drm_gem_dmabuf_kmap, + .kmap_atomic = drm_gem_dmabuf_kmap_atomic, + .kunmap = drm_gem_dmabuf_kunmap, + .kunmap_atomic = drm_gem_dmabuf_kunmap_atomic, + .mmap = drm_gem_dmabuf_mmap, + .vmap = drm_gem_dmabuf_vmap, + .vunmap = drm_gem_dmabuf_vunmap, +}; + +/** + * DOC: PRIME Helpers + * + * Drivers can implement @gem_prime_export and @gem_prime_import in terms of + * simpler APIs by using the helper functions @drm_gem_prime_export and + * @drm_gem_prime_import. These functions implement dma-buf support in terms of + * five lower-level driver callbacks: + * + * Export callbacks: + * + * - @gem_prime_pin (optional): prepare a GEM object for exporting + * + * - @gem_prime_get_sg_table: provide a scatter/gather table of pinned pages + * + * - @gem_prime_vmap: vmap a buffer exported by your driver + * + * - @gem_prime_vunmap: vunmap a buffer exported by your driver + * + * Import callback: + * + * - @gem_prime_import_sg_table (import): produce a GEM object from another + * driver's scatter/gather table + */ + +struct dma_buf *drm_gem_prime_export(struct drm_device *dev, + struct drm_gem_object *obj, int flags) +{ + if (dev->driver->gem_prime_pin) { + int ret = dev->driver->gem_prime_pin(obj); + if (ret) + return ERR_PTR(ret); + } + return dma_buf_export(obj, &drm_gem_prime_dmabuf_ops, obj->size, + 0600); +} +EXPORT_SYMBOL(drm_gem_prime_export); int drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, @@ -68,7 +201,8 @@ { struct drm_gem_object *obj; void *buf; - int ret; + int ret = 0; + struct dma_buf *dmabuf; obj = drm_gem_object_lookup(dev, file_priv, handle); if (!obj) @@ -77,46 +211,99 @@ mutex_lock(&file_priv->prime.lock); /* re-export the original imported object */ if (obj->import_attach) { - get_dma_buf(obj->import_attach->dmabuf); - *prime_fd = dma_buf_fd(obj->import_attach->dmabuf, flags); - drm_gem_object_unreference_unlocked(obj); - mutex_unlock(&file_priv->prime.lock); - return 0; + dmabuf = obj->import_attach->dmabuf; + goto out_have_obj; } if (obj->export_dma_buf) { - get_dma_buf(obj->export_dma_buf); - *prime_fd = dma_buf_fd(obj->export_dma_buf, flags); - drm_gem_object_unreference_unlocked(obj); - } else { - buf = dev->driver->gem_prime_export(dev, obj, flags); - if (IS_ERR(buf)) { - /* normally the created dma-buf takes ownership of the ref, - * but if that fails then drop the ref - */ - drm_gem_object_unreference_unlocked(obj); - mutex_unlock(&file_priv->prime.lock); - return PTR_ERR(buf); - } - obj->export_dma_buf = buf; - *prime_fd = dma_buf_fd(buf, flags); + dmabuf = obj->export_dma_buf; + goto out_have_obj; + } + + buf = dev->driver->gem_prime_export(dev, obj, flags); + if (IS_ERR(buf)) { + /* normally the created dma-buf takes ownership of the ref, + * but if that fails then drop the ref + */ + ret = PTR_ERR(buf); + goto out; } + obj->export_dma_buf = buf; + /* if we've exported this buffer the cheat and add it to the import list * so we get the correct handle back */ - ret = drm_prime_add_imported_buf_handle(&file_priv->prime, - obj->export_dma_buf, handle); - if (ret) { - drm_gem_object_unreference_unlocked(obj); - mutex_unlock(&file_priv->prime.lock); - return ret; - } + ret = drm_prime_add_buf_handle(&file_priv->prime, + obj->export_dma_buf, handle); + if (ret) + goto out; + *prime_fd = dma_buf_fd(buf, flags); mutex_unlock(&file_priv->prime.lock); return 0; + +out_have_obj: + get_dma_buf(dmabuf); + *prime_fd = dma_buf_fd(dmabuf, flags); +out: + drm_gem_object_unreference_unlocked(obj); + mutex_unlock(&file_priv->prime.lock); + return ret; } EXPORT_SYMBOL(drm_gem_prime_handle_to_fd); +struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, + struct dma_buf *dma_buf) +{ + struct dma_buf_attachment *attach; + struct sg_table *sgt; + struct drm_gem_object *obj; + int ret; + + if (!dev->driver->gem_prime_import_sg_table) + return ERR_PTR(-EINVAL); + + if (dma_buf->ops == &drm_gem_prime_dmabuf_ops) { + obj = dma_buf->priv; + if (obj->dev == dev) { + /* + * Importing dmabuf exported from out own gem increases + * refcount on gem itself instead of f_count of dmabuf. + */ + drm_gem_object_reference(obj); + dma_buf_put(dma_buf); + return obj; + } + } + + attach = dma_buf_attach(dma_buf, dev->dev); + if (IS_ERR(attach)) + return ERR_PTR(PTR_ERR(attach)); + + sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); + if (IS_ERR_OR_NULL(sgt)) { + ret = PTR_ERR(sgt); + goto fail_detach; + } + + obj = dev->driver->gem_prime_import_sg_table(dev, dma_buf->size, sgt); + if (IS_ERR(obj)) { + ret = PTR_ERR(obj); + goto fail_unmap; + } + + obj->import_attach = attach; + + return obj; + +fail_unmap: + dma_buf_unmap_attachment(attach, sgt, DMA_BIDIRECTIONAL); +fail_detach: + dma_buf_detach(dma_buf, attach); + return ERR_PTR(ret); +} +EXPORT_SYMBOL(drm_gem_prime_import); + int drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle) { @@ -130,7 +317,7 @@ mutex_lock(&file_priv->prime.lock); - ret = drm_prime_lookup_imported_buf_handle(&file_priv->prime, + ret = drm_prime_lookup_buf_handle(&file_priv->prime, dma_buf, handle); if (!ret) { ret = 0; @@ -149,7 +336,7 @@ if (ret) goto out_put; - ret = drm_prime_add_imported_buf_handle(&file_priv->prime, + ret = drm_prime_add_buf_handle(&file_priv->prime, dma_buf, *handle); if (ret) goto fail; @@ -307,7 +494,7 @@ } EXPORT_SYMBOL(drm_prime_destroy_file_private); -int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle) +static int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle) { struct drm_prime_member *member; @@ -315,14 +502,14 @@ if (!member) return -ENOMEM; + get_dma_buf(dma_buf); member->dma_buf = dma_buf; member->handle = handle; list_add(&member->entry, &prime_fpriv->head); return 0; } -EXPORT_SYMBOL(drm_prime_add_imported_buf_handle); -int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle) +int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle) { struct drm_prime_member *member; @@ -334,19 +521,20 @@ } return -ENOENT; } -EXPORT_SYMBOL(drm_prime_lookup_imported_buf_handle); +EXPORT_SYMBOL(drm_prime_lookup_buf_handle); -void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf) +void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf) { struct drm_prime_member *member, *safe; mutex_lock(&prime_fpriv->lock); list_for_each_entry_safe(member, safe, &prime_fpriv->head, entry) { if (member->dma_buf == dma_buf) { + dma_buf_put(dma_buf); list_del(&member->entry); kfree(member); } } mutex_unlock(&prime_fpriv->lock); } -EXPORT_SYMBOL(drm_prime_remove_imported_buf_handle); +EXPORT_SYMBOL(drm_prime_remove_buf_handle); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_gem.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_gem.c @@ -205,11 +205,11 @@ drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp) { if (obj->import_attach) { - drm_prime_remove_imported_buf_handle(&filp->prime, + drm_prime_remove_buf_handle(&filp->prime, obj->import_attach->dmabuf); } if (obj->export_dma_buf) { - drm_prime_remove_imported_buf_handle(&filp->prime, + drm_prime_remove_buf_handle(&filp->prime, obj->export_dma_buf); } } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_irq.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_irq.c @@ -704,7 +704,10 @@ /* Subtract time delta from raw timestamp to get final * vblank_time timestamp for end of vblank. */ - etime = ktime_sub_ns(etime, delta_ns); + if (delta_ns < 0) + etime = ktime_add_ns(etime, -delta_ns); + else + etime = ktime_sub_ns(etime, delta_ns); *vblank_time = ktime_to_timeval(etime); DRM_DEBUG("crtc %d : v %d p(%d,%d)@ %ld.%ld -> %ld.%ld [e %d us, %d rep]\n", @@ -1049,7 +1052,7 @@ */ void drm_vblank_pre_modeset(struct drm_device *dev, int crtc) { - /* vblank is not initialized (IRQ not installed ?) */ + /* vblank is not initialized (IRQ not installed ?), or has been freed */ if (!dev->num_crtcs) return; /* @@ -1071,6 +1074,10 @@ { unsigned long irqflags; + /* vblank is not initialized (IRQ not installed ?), or has been freed */ + if (!dev->num_crtcs) + return; + if (dev->vblank_inmodeset[crtc]) { spin_lock_irqsave(&dev->vbl_lock, irqflags); dev->vblank_disable_allowed = 1; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_usb.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_usb.c @@ -18,7 +18,7 @@ usbdev = interface_to_usbdev(interface); dev->usbdev = usbdev; - dev->dev = &usbdev->dev; + dev->dev = &interface->dev; mutex_lock(&drm_global_mutex); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_fops.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_fops.c @@ -123,11 +123,13 @@ int retcode = 0; int need_setup = 0; struct address_space *old_mapping; + struct address_space *old_imapping; minor = idr_find(&drm_minors_idr, minor_id); if (!minor) return -ENODEV; - + if (IS_ERR(minor)) + return PTR_ERR(minor); if (!(dev = minor->dev)) return -ENODEV; @@ -137,6 +139,7 @@ if (!dev->open_count++) need_setup = 1; mutex_lock(&dev->struct_mutex); + old_imapping = inode->i_mapping; old_mapping = dev->dev_mapping; if (old_mapping == NULL) dev->dev_mapping = &inode->i_data; @@ -159,8 +162,8 @@ err_undo: mutex_lock(&dev->struct_mutex); - filp->f_mapping = old_mapping; - inode->i_mapping = old_mapping; + filp->f_mapping = old_imapping; + inode->i_mapping = old_imapping; iput(container_of(dev->dev_mapping, struct inode, i_data)); dev->dev_mapping = old_mapping; mutex_unlock(&dev->struct_mutex); @@ -192,7 +195,10 @@ minor = idr_find(&drm_minors_idr, minor_id); if (!minor) goto out; - + if (IS_ERR(minor)) { + err = PTR_ERR(minor); + goto out; + } if (!(dev = minor->dev)) goto out; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/drm_edid.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/drm_edid.c @@ -87,9 +87,6 @@ int product_id; u32 quirks; } edid_quirk_list[] = { - /* ASUS VW222S */ - { "ACI", 0x22a2, EDID_QUIRK_FORCE_REDUCED_BLANKING }, - /* Acer AL1706 */ { "ACR", 44358, EDID_QUIRK_PREFER_LARGE_60 }, /* Acer F51 */ @@ -128,6 +125,9 @@ /* ViewSonic VA2026w */ { "VSC", 5020, EDID_QUIRK_FORCE_REDUCED_BLANKING }, + + /* Medion MD 30217 PG */ + { "MED", 0x7b8, EDID_QUIRK_PREFER_LARGE_75 }, }; /*** DDC fetch and block validation ***/ @@ -357,10 +357,14 @@ break; } } - if (i == 4) + + if (i == 4 && print_bad_edid) { dev_warn(connector->dev->dev, "%s: Ignoring invalid EDID block %d.\n", drm_get_connector_name(connector), j); + + connector->bad_edid_counter++; + } } if (valid_extensions != block[0x7e]) { @@ -893,7 +897,7 @@ unsigned vblank = (pt->vactive_vblank_hi & 0xf) << 8 | pt->vblank_lo; unsigned hsync_offset = (pt->hsync_vsync_offset_pulse_width_hi & 0xc0) << 2 | pt->hsync_offset_lo; unsigned hsync_pulse_width = (pt->hsync_vsync_offset_pulse_width_hi & 0x30) << 4 | pt->hsync_pulse_width_lo; - unsigned vsync_offset = (pt->hsync_vsync_offset_pulse_width_hi & 0xc) >> 2 | pt->vsync_offset_pulse_width_lo >> 4; + unsigned vsync_offset = (pt->hsync_vsync_offset_pulse_width_hi & 0xc) << 2 | pt->vsync_offset_pulse_width_lo >> 4; unsigned vsync_pulse_width = (pt->hsync_vsync_offset_pulse_width_hi & 0x3) << 4 | (pt->vsync_offset_pulse_width_lo & 0xf); /* ignore tiny modes */ @@ -974,6 +978,7 @@ } mode->type = DRM_MODE_TYPE_DRIVER; + mode->vrefresh = drm_mode_vrefresh(mode); drm_mode_set_name(mode); return mode; @@ -2020,7 +2025,8 @@ num_modes += add_cvt_modes(connector, edid); num_modes += add_standard_modes(connector, edid); num_modes += add_established_modes(connector, edid); - num_modes += add_inferred_modes(connector, edid); + if (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF) + num_modes += add_inferred_modes(connector, edid); num_modes += add_cea_modes(connector, edid); if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75)) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/mgag200/mgag200_ttm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/mgag200/mgag200_ttm.c @@ -315,8 +315,8 @@ ret = ttm_bo_reserve(&bo->bo, true, no_wait, false, 0); if (ret) { - if (ret != -ERESTARTSYS) - DRM_ERROR("reserve failed %p\n", bo); + if (ret != -ERESTARTSYS && ret != -EBUSY) + DRM_ERROR("reserve failed %p %d\n", bo, ret); return ret; } return 0; @@ -347,6 +347,7 @@ mgabo->gem.driver_private = NULL; mgabo->bo.bdev = &mdev->ttm.bdev; + mgabo->bo.bdev->dev_mapping = dev->dev_mapping; mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/mgag200/mgag200_drv.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/mgag200/mgag200_drv.h @@ -116,6 +116,8 @@ void *sysram; int size; struct ttm_bo_kmap_obj mapping; + int x1, y1, x2, y2; /* dirty rect */ + spinlock_t dirty_lock; }; struct mga_crtc { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/mgag200/mgag200_fb.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/mgag200/mgag200_fb.c @@ -28,16 +28,52 @@ int bpp = (mfbdev->mfb.base.bits_per_pixel + 7)/8; int ret; bool unmap = false; + bool store_for_later = false; + int x2, y2; + unsigned long flags; obj = mfbdev->mfb.obj; bo = gem_to_mga_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. + */ ret = mgag200_bo_reserve(bo, true); if (ret) { - DRM_ERROR("failed to reserve fb bo\n"); + if (ret != -EBUSY) + return; + + store_for_later = true; + } + + x2 = x + width - 1; + y2 = y + height - 1; + spin_lock_irqsave(&mfbdev->dirty_lock, flags); + + if (mfbdev->y1 < y) + y = mfbdev->y1; + if (mfbdev->y2 > y2) + y2 = mfbdev->y2; + if (mfbdev->x1 < x) + x = mfbdev->x1; + if (mfbdev->x2 > x2) + x2 = mfbdev->x2; + + if (store_for_later) { + mfbdev->x1 = x; + mfbdev->x2 = x2; + mfbdev->y1 = y; + mfbdev->y2 = y2; + spin_unlock_irqrestore(&mfbdev->dirty_lock, flags); return; } + mfbdev->x1 = mfbdev->y1 = INT_MAX; + mfbdev->x2 = mfbdev->y2 = 0; + spin_unlock_irqrestore(&mfbdev->dirty_lock, flags); + if (!bo->kmap.virtual) { ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); if (ret) { @@ -47,10 +83,10 @@ } unmap = true; } - for (i = y; i < y + height; i++) { + for (i = y; i <= y2; i++) { /* assume equal stride for now */ src_offset = dst_offset = i * mfbdev->mfb.base.pitches[0] + (x * bpp); - memcpy_toio(bo->kmap.virtual + src_offset, mfbdev->sysram + src_offset, width * bpp); + memcpy_toio(bo->kmap.virtual + src_offset, mfbdev->sysram + src_offset, (x2 - x + 1) * bpp); } if (unmap) @@ -269,6 +305,7 @@ mdev->mfbdev = mfbdev; mfbdev->helper.funcs = &mga_fb_helper_funcs; + spin_lock_init(&mfbdev->dirty_lock); ret = drm_fb_helper_init(mdev->dev, &mfbdev->helper, mdev->num_crtc, MGAG200FB_CONN_LIMIT); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/mgag200/mgag200_mode.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/mgag200/mgag200_mode.c @@ -189,12 +189,12 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS; - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp); + WREG8(DAC_DATA, tmp); WREG8(DAC_INDEX, MGA1064_REMHEADCTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_REMHEADCTL_CLKDIS; - WREG_DAC(MGA1064_REMHEADCTL, tmp); + WREG8(DAC_DATA, tmp); /* select PLL Set C */ tmp = RREG8(MGAREG_MEM_MISC_READ); @@ -204,7 +204,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN | 0x80; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); udelay(500); @@ -212,7 +212,7 @@ WREG8(DAC_INDEX, MGA1064_VREF_CTL); tmp = RREG8(DAC_DATA); tmp &= ~0x04; - WREG_DAC(MGA1064_VREF_CTL, tmp); + WREG8(DAC_DATA, tmp); udelay(50); @@ -236,13 +236,13 @@ tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK; tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); WREG8(DAC_INDEX, MGA1064_REMHEADCTL); tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_REMHEADCTL_CLKSL_MSK; tmp |= MGA1064_REMHEADCTL_CLKSL_PLL; - WREG_DAC(MGA1064_REMHEADCTL, tmp); + WREG8(DAC_DATA, tmp); /* reset dotclock rate bit */ WREG8(MGAREG_SEQ_INDEX, 1); @@ -253,7 +253,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); vcount = RREG8(MGAREG_VCOUNT); @@ -318,7 +318,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS; - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp); + WREG8(DAC_DATA, tmp); tmp = RREG8(MGAREG_MEM_MISC_READ); tmp |= 0x3 << 2; @@ -326,12 +326,12 @@ WREG8(DAC_INDEX, MGA1064_PIX_PLL_STAT); tmp = RREG8(DAC_DATA); - WREG_DAC(MGA1064_PIX_PLL_STAT, tmp & ~0x40); + WREG8(DAC_DATA, tmp & ~0x40); WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); WREG_DAC(MGA1064_EV_PIX_PLLC_M, m); WREG_DAC(MGA1064_EV_PIX_PLLC_N, n); @@ -342,7 +342,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_CLK_POW_DOWN; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); udelay(500); @@ -350,11 +350,11 @@ tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK; tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); WREG8(DAC_INDEX, MGA1064_PIX_PLL_STAT); tmp = RREG8(DAC_DATA); - WREG_DAC(MGA1064_PIX_PLL_STAT, tmp | 0x40); + WREG8(DAC_DATA, tmp | 0x40); tmp = RREG8(MGAREG_MEM_MISC_READ); tmp |= (0x3 << 2); @@ -363,7 +363,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); return 0; } @@ -382,19 +382,19 @@ m = n = p = 0; vcomax = 800000; vcomin = 400000; - pllreffreq = 3333; + pllreffreq = 33333; delta = 0xffffffff; permitteddelta = clock * 5 / 1000; - for (testp = 16; testp > 0; testp--) { + for (testp = 16; testp > 0; testp >>= 1) { if (clock * testp > vcomax) continue; if (clock * testp < vcomin) continue; for (testm = 1; testm < 33; testm++) { - for (testn = 1; testn < 257; testn++) { + for (testn = 17; testn < 257; testn++) { computed = (pllreffreq * testn) / (testm * testp); if (computed > clock) @@ -404,11 +404,11 @@ if (tmpdelta < delta) { delta = tmpdelta; n = testn - 1; - m = (testm - 1) | ((n >> 1) & 0x80); + m = (testm - 1); p = testp - 1; } if ((clock * testp) >= 600000) - p |= 80; + p |= 0x80; } } } @@ -416,7 +416,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS; - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp); + WREG8(DAC_DATA, tmp); tmp = RREG8(MGAREG_MEM_MISC_READ); tmp |= 0x3 << 2; @@ -425,7 +425,7 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); udelay(500); @@ -439,13 +439,13 @@ tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_SEL_MSK; tmp |= MGA1064_PIX_CLK_CTL_SEL_PLL; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS; tmp &= ~MGA1064_PIX_CLK_CTL_CLK_POW_DOWN; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); vcount = RREG8(MGAREG_VCOUNT); @@ -515,12 +515,12 @@ WREG8(DAC_INDEX, MGA1064_PIX_CLK_CTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_PIX_CLK_CTL_CLK_DIS; - WREG_DAC(MGA1064_PIX_CLK_CTL_CLK_DIS, tmp); + WREG8(DAC_DATA, tmp); WREG8(DAC_INDEX, MGA1064_REMHEADCTL); tmp = RREG8(DAC_DATA); tmp |= MGA1064_REMHEADCTL_CLKDIS; - WREG_DAC(MGA1064_REMHEADCTL, tmp); + WREG8(DAC_DATA, tmp); tmp = RREG8(MGAREG_MEM_MISC_READ); tmp |= (0x3<<2) | 0xc0; @@ -530,7 +530,7 @@ tmp = RREG8(DAC_DATA); tmp &= ~MGA1064_PIX_CLK_CTL_CLK_DIS; tmp |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN; - WREG_DAC(MGA1064_PIX_CLK_CTL, tmp); + WREG8(DAC_DATA, tmp); udelay(500); @@ -657,12 +657,26 @@ WREG_DAC(MGA1064_GEN_IO_DATA, tmp); } - +/* + This is how the framebuffer base address is stored in g200 cards: + * Assume @offset is the gpu_addr variable of the framebuffer object + * Then addr is the number of _pixels_ (not bytes) from the start of + VRAM to the first pixel we want to display. (divided by 2 for 32bit + framebuffers) + * addr is stored in the CRTCEXT0, CRTCC and CRTCD registers + addr<20> -> CRTCEXT0<6> + addr<19-16> -> CRTCEXT0<3-0> + addr<15-8> -> CRTCC<7-0> + addr<7-0> -> CRTCD<7-0> + CRTCEXT0 has to be programmed last to trigger an update and make the + new addr variable take effect. + */ void mga_set_start_address(struct drm_crtc *crtc, unsigned offset) { struct mga_device *mdev = crtc->dev->dev_private; u32 addr; int count; + u8 crtcext0; while (RREG8(0x1fda) & 0x08); while (!(RREG8(0x1fda) & 0x08)); @@ -670,10 +684,17 @@ count = RREG8(MGAREG_VCOUNT) + 2; while (RREG8(MGAREG_VCOUNT) < count); - addr = offset >> 2; + WREG8(MGAREG_CRTCEXT_INDEX, 0); + crtcext0 = RREG8(MGAREG_CRTCEXT_DATA); + crtcext0 &= 0xB0; + addr = offset / 8; + /* Can't store addresses any higher than that... + but we also don't have more than 16MB of memory, so it should be fine. */ + WARN_ON(addr > 0x1fffff); + crtcext0 |= (!!(addr & (1<<20)))<<6; WREG_CRT(0x0d, (u8)(addr & 0xff)); WREG_CRT(0x0c, (u8)(addr >> 8) & 0xff); - WREG_CRT(0xaf, (u8)(addr >> 16) & 0xf); + WREG_ECRT(0x0, ((u8)(addr >> 16) & 0xf) | crtcext0); } @@ -751,8 +772,6 @@ int i; unsigned char misc = 0; unsigned char ext_vga[6]; - unsigned char ext_vga_index24; - unsigned char dac_index90 = 0; u8 bppshift; static unsigned char dacvalue[] = { @@ -803,7 +822,6 @@ option2 = 0x0000b000; break; case G200_ER: - dac_index90 = 0; break; } @@ -852,10 +870,8 @@ WREG_DAC(i, dacvalue[i]); } - if (mdev->type == G200_ER) { - WREG_DAC(0x90, dac_index90); - } - + if (mdev->type == G200_ER) + WREG_DAC(0x90, 0); if (option) pci_write_config_dword(dev->pdev, PCI_MGA_OPTION, option); @@ -952,8 +968,6 @@ if (mdev->type == G200_WB) ext_vga[1] |= 0x88; - ext_vga_index24 = 0x05; - /* Set pixel clocks */ misc = 0x2d; WREG8(MGA_MISC_OUT, misc); @@ -965,7 +979,7 @@ } if (mdev->type == G200_ER) - WREG_ECRT(24, ext_vga_index24); + WREG_ECRT(0x24, 0x5); if (mdev->type == G200_EV) { WREG_ECRT(6, 0); @@ -1027,13 +1041,14 @@ else hi_pri_lvl = 5; - WREG8(0x1fde, 0x06); - WREG8(0x1fdf, hi_pri_lvl); + WREG8(MGAREG_CRTCEXT_INDEX, 0x06); + WREG8(MGAREG_CRTCEXT_DATA, hi_pri_lvl); } else { + WREG8(MGAREG_CRTCEXT_INDEX, 0x06); if (mdev->reg_1e24 >= 0x01) - WREG8(0x1fdf, 0x03); + WREG8(MGAREG_CRTCEXT_DATA, 0x03); else - WREG8(0x1fdf, 0x04); + WREG8(MGAREG_CRTCEXT_DATA, 0x04); } } return 0; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/ttm/ttm_tt.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/ttm/ttm_tt.c @@ -170,7 +170,7 @@ ttm_tt_unbind(ttm); } - if (likely(ttm->pages != NULL)) { + if (ttm->state == tt_unbound) { ttm->bdev->driver->ttm_tt_unpopulate(ttm); } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/gma500/psb_irq.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/gma500/psb_irq.c @@ -211,7 +211,7 @@ vdc_stat = PSB_RVDC32(PSB_INT_IDENTITY_R); - if (vdc_stat & _PSB_PIPE_EVENT_FLAG) + if (vdc_stat & (_PSB_PIPE_EVENT_FLAG|_PSB_IRQ_ASLE)) dsp_int = 1; /* FIXME: Handle Medfield --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/gma500/cdv_intel_display.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/gma500/cdv_intel_display.c @@ -1750,6 +1750,19 @@ kfree(psb_intel_crtc); } +static void cdv_intel_crtc_disable(struct drm_crtc *crtc) +{ + struct gtt_range *gt; + struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; + + crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); + + if (crtc->fb) { + gt = to_psb_fb(crtc->fb)->gtt; + psb_gtt_unpin(gt); + } +} + const struct drm_crtc_helper_funcs cdv_intel_helper_funcs = { .dpms = cdv_intel_crtc_dpms, .mode_fixup = cdv_intel_crtc_mode_fixup, @@ -1757,6 +1770,7 @@ .mode_set_base = cdv_intel_pipe_set_base, .prepare = cdv_intel_crtc_prepare, .commit = cdv_intel_crtc_commit, + .disable = cdv_intel_crtc_disable, }; const struct drm_crtc_funcs cdv_intel_crtc_funcs = { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/gma500/framebuffer.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/gma500/framebuffer.c @@ -799,8 +799,8 @@ for (i = 0; i < dev_priv->num_pipe; i++) psb_intel_crtc_init(dev, i, mode_dev); - dev->mode_config.max_width = 2048; - dev->mode_config.max_height = 2048; + dev->mode_config.max_width = 4096; + dev->mode_config.max_height = 4096; psb_setup_outputs(dev); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/gma500/psb_intel_display.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/gma500/psb_intel_display.c @@ -1246,6 +1246,19 @@ kfree(psb_intel_crtc); } +static void psb_intel_crtc_disable(struct drm_crtc *crtc) +{ + struct gtt_range *gt; + struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; + + crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); + + if (crtc->fb) { + gt = to_psb_fb(crtc->fb)->gtt; + psb_gtt_unpin(gt); + } +} + const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { .dpms = psb_intel_crtc_dpms, .mode_fixup = psb_intel_crtc_mode_fixup, @@ -1253,6 +1266,7 @@ .mode_set_base = psb_intel_pipe_set_base, .prepare = psb_intel_crtc_prepare, .commit = psb_intel_crtc_commit, + .disable = psb_intel_crtc_disable, }; const struct drm_crtc_funcs psb_intel_crtc_funcs = { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/cirrus/cirrus_fbdev.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/cirrus/cirrus_fbdev.c @@ -26,16 +26,51 @@ int bpp = (afbdev->gfb.base.bits_per_pixel + 7)/8; int ret; bool unmap = false; + bool store_for_later = false; + int x2, y2; + unsigned long flags; obj = afbdev->gfb.obj; bo = gem_to_cirrus_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. + */ ret = cirrus_bo_reserve(bo, true); if (ret) { - DRM_ERROR("failed to reserve fb bo\n"); + if (ret != -EBUSY) + return; + store_for_later = true; + } + + x2 = x + width - 1; + y2 = y + height - 1; + spin_lock_irqsave(&afbdev->dirty_lock, flags); + + if (afbdev->y1 < y) + y = afbdev->y1; + if (afbdev->y2 > y2) + y2 = afbdev->y2; + if (afbdev->x1 < x) + x = afbdev->x1; + if (afbdev->x2 > x2) + x2 = afbdev->x2; + + if (store_for_later) { + afbdev->x1 = x; + afbdev->x2 = x2; + afbdev->y1 = y; + afbdev->y2 = y2; + spin_unlock_irqrestore(&afbdev->dirty_lock, flags); return; } + afbdev->x1 = afbdev->y1 = INT_MAX; + afbdev->x2 = afbdev->y2 = 0; + spin_unlock_irqrestore(&afbdev->dirty_lock, flags); + if (!bo->kmap.virtual) { ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); if (ret) { @@ -282,6 +317,7 @@ cdev->mode_info.gfbdev = gfbdev; gfbdev->helper.funcs = &cirrus_fb_helper_funcs; + spin_lock_init(&gfbdev->dirty_lock); ret = drm_fb_helper_init(cdev->dev, &gfbdev->helper, cdev->num_crtc, CIRRUSFB_CONN_LIMIT); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/cirrus/cirrus_drv.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/cirrus/cirrus_drv.h @@ -154,6 +154,8 @@ struct list_head fbdev_list; void *sysram; int size; + int x1, y1, x2, y2; /* dirty rect */ + spinlock_t dirty_lock; }; struct cirrus_bo { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/cirrus/cirrus_ttm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/cirrus/cirrus_ttm.c @@ -321,7 +321,7 @@ ret = ttm_bo_reserve(&bo->bo, true, no_wait, false, 0); if (ret) { - if (ret != -ERESTARTSYS) + if (ret != -ERESTARTSYS && ret != -EBUSY) DRM_ERROR("reserve failed %p\n", bo); return ret; } @@ -353,6 +353,7 @@ cirrusbo->gem.driver_private = NULL; cirrusbo->bo.bdev = &cirrus->ttm.bdev; + cirrusbo->bo.bdev->dev_mapping = dev->dev_mapping; cirrus_ttm_placement(cirrusbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/udl/udl_drv.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/udl/udl_drv.h @@ -75,6 +75,8 @@ struct drm_framebuffer base; struct udl_gem_object *obj; bool active_16; /* active on the 16-bit channel */ + int x1, y1, x2, y2; /* dirty rect */ + spinlock_t dirty_lock; }; #define to_udl_fb(x) container_of(x, struct udl_framebuffer, base) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/udl/udl_connector.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/udl/udl_connector.c @@ -61,6 +61,10 @@ int ret; edid = (struct edid *)udl_get_edid(udl); + if (!edid) { + drm_mode_connector_update_edid_property(connector, NULL); + return 0; + } /* * We only read the main block, but if the monitor reports extension --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/udl/udl_fb.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/udl/udl_fb.c @@ -22,9 +22,9 @@ #include -#define DL_DEFIO_WRITE_DELAY 5 /* fb_deferred_io.delay in jiffies */ +#define DL_DEFIO_WRITE_DELAY (HZ/20) /* fb_deferred_io.delay in jiffies */ -static int fb_defio = 1; /* Optionally enable experimental fb_defio mmap support */ +static int fb_defio = 0; /* Optionally enable experimental fb_defio mmap support */ static int fb_bpp = 16; module_param(fb_bpp, int, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP); @@ -153,6 +153,9 @@ struct urb *urb; int aligned_x; int bpp = (fb->base.bits_per_pixel / 8); + int x2, y2; + bool store_for_later = false; + unsigned long flags; if (!fb->active_16) return 0; @@ -169,8 +172,6 @@ } } - start_cycles = get_cycles(); - aligned_x = DL_ALIGN_DOWN(x, sizeof(unsigned long)); width = DL_ALIGN_UP(width + (x-aligned_x), sizeof(unsigned long)); x = aligned_x; @@ -180,19 +181,53 @@ (y + height > fb->base.height)) return -EINVAL; + /* if we are in atomic just store the info + can't test inside spin lock */ + if (in_atomic()) + store_for_later = true; + + x2 = x + width - 1; + y2 = y + height - 1; + + spin_lock_irqsave(&fb->dirty_lock, flags); + + if (fb->y1 < y) + y = fb->y1; + if (fb->y2 > y2) + y2 = fb->y2; + if (fb->x1 < x) + x = fb->x1; + if (fb->x2 > x2) + x2 = fb->x2; + + if (store_for_later) { + fb->x1 = x; + fb->x2 = x2; + fb->y1 = y; + fb->y2 = y2; + spin_unlock_irqrestore(&fb->dirty_lock, flags); + return 0; + } + + fb->x1 = fb->y1 = INT_MAX; + fb->x2 = fb->y2 = 0; + + spin_unlock_irqrestore(&fb->dirty_lock, flags); + start_cycles = get_cycles(); + urb = udl_get_urb(dev); if (!urb) return 0; cmd = urb->transfer_buffer; - for (i = y; i < y + height ; i++) { + for (i = y; i <= y2 ; i++) { const int line_offset = fb->base.pitches[0] * i; const int byte_offset = line_offset + (x * bpp); const int dev_byte_offset = (fb->base.width * bpp * i) + (x * bpp); if (udl_render_hline(dev, bpp, &urb, (char *) fb->obj->vmapping, &cmd, byte_offset, dev_byte_offset, - width * bpp, + (x2 - x + 1) * bpp, &bytes_identical, &bytes_sent)) goto error; } @@ -434,6 +469,7 @@ { int ret; + spin_lock_init(&ufb->dirty_lock); ufb->obj = obj; ret = drm_framebuffer_init(dev, &ufb->base, &udlfb_funcs); drm_helper_mode_fill_fb_struct(&ufb->base, mode_cmd); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/ast/ast_drv.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/ast/ast_drv.h @@ -175,7 +175,7 @@ static inline void ast_open_key(struct ast_private *ast) { - ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xA1, 0xFF, 0x04); + ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0x80, 0xA8); } #define AST_VIDMEM_SIZE_8M 0x00800000 @@ -239,6 +239,8 @@ void *sysram; int size; struct ttm_bo_kmap_obj mapping; + int x1, y1, x2, y2; /* dirty rect */ + spinlock_t dirty_lock; }; #define to_ast_crtc(x) container_of(x, struct ast_crtc, base) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/ast/ast_ttm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/ast/ast_ttm.c @@ -316,7 +316,7 @@ ret = ttm_bo_reserve(&bo->bo, true, no_wait, false, 0); if (ret) { - if (ret != -ERESTARTSYS) + if (ret != -ERESTARTSYS && ret != -EBUSY) DRM_ERROR("reserve failed %p\n", bo); return ret; } @@ -348,6 +348,7 @@ astbo->gem.driver_private = NULL; astbo->bo.bdev = &ast->ttm.bdev; + astbo->bo.bdev->dev_mapping = dev->dev_mapping; ast_ttm_placement(astbo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/ast/ast_fb.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/ast/ast_fb.c @@ -52,16 +52,52 @@ int bpp = (afbdev->afb.base.bits_per_pixel + 7)/8; int ret; bool unmap = false; + bool store_for_later = false; + int x2, y2; + unsigned long flags; obj = afbdev->afb.obj; bo = gem_to_ast_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. + */ ret = ast_bo_reserve(bo, true); if (ret) { - DRM_ERROR("failed to reserve fb bo\n"); + if (ret != -EBUSY) + return; + + store_for_later = true; + } + + x2 = x + width - 1; + y2 = y + height - 1; + spin_lock_irqsave(&afbdev->dirty_lock, flags); + + if (afbdev->y1 < y) + y = afbdev->y1; + if (afbdev->y2 > y2) + y2 = afbdev->y2; + if (afbdev->x1 < x) + x = afbdev->x1; + if (afbdev->x2 > x2) + x2 = afbdev->x2; + + if (store_for_later) { + afbdev->x1 = x; + afbdev->x2 = x2; + afbdev->y1 = y; + afbdev->y2 = y2; + spin_unlock_irqrestore(&afbdev->dirty_lock, flags); return; } + afbdev->x1 = afbdev->y1 = INT_MAX; + afbdev->x2 = afbdev->y2 = 0; + spin_unlock_irqrestore(&afbdev->dirty_lock, flags); + if (!bo->kmap.virtual) { ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap); if (ret) { @@ -71,10 +107,10 @@ } unmap = true; } - for (i = y; i < y + height; i++) { + for (i = y; i <= y2; i++) { /* assume equal stride for now */ src_offset = dst_offset = i * afbdev->afb.base.pitches[0] + (x * bpp); - memcpy_toio(bo->kmap.virtual + src_offset, afbdev->sysram + src_offset, width * bpp); + memcpy_toio(bo->kmap.virtual + src_offset, afbdev->sysram + src_offset, (x2 - x + 1) * bpp); } if (unmap) @@ -305,6 +341,7 @@ ast->fbdev = afbdev; afbdev->helper.funcs = &ast_fb_helper_funcs; + spin_lock_init(&afbdev->dirty_lock); ret = drm_fb_helper_init(dev, &afbdev->helper, 1, 1); if (ret) { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_display.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_display.c @@ -154,8 +154,8 @@ .vco = { .min = 1400000, .max = 2800000 }, .n = { .min = 1, .max = 6 }, .m = { .min = 70, .max = 120 }, - .m1 = { .min = 10, .max = 22 }, - .m2 = { .min = 5, .max = 9 }, + .m1 = { .min = 8, .max = 18 }, + .m2 = { .min = 3, .max = 7 }, .p = { .min = 5, .max = 80 }, .p1 = { .min = 1, .max = 8 }, .p2 = { .dot_limit = 200000, @@ -1125,8 +1125,8 @@ enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv, pipe); - if (IS_HASWELL(dev_priv->dev)) { - /* On Haswell, DDI is used instead of FDI_TX_CTL */ + if (HAS_DDI(dev_priv->dev)) { + /* DDI does not have a specific FDI_TX register */ reg = TRANS_DDI_FUNC_CTL(cpu_transcoder); val = I915_READ(reg); cur_state = !!(val & TRANS_DDI_FUNC_ENABLE); @@ -1170,7 +1170,7 @@ return; /* On Haswell, DDI ports are responsible for the FDI PLL setup */ - if (IS_HASWELL(dev_priv->dev)) + if (HAS_DDI(dev_priv->dev)) return; reg = FDI_TX_CTL(pipe); @@ -2017,18 +2017,29 @@ /* Computes the linear offset to the base tile and adjusts x, y. bytes per pixel * is assumed to be a power-of-two. */ -unsigned long intel_gen4_compute_offset_xtiled(int *x, int *y, - unsigned int bpp, - unsigned int pitch) -{ - int tile_rows, tiles; - - tile_rows = *y / 8; - *y %= 8; - tiles = *x / (512/bpp); - *x %= 512/bpp; +unsigned long intel_gen4_compute_page_offset(int *x, int *y, + unsigned int tiling_mode, + unsigned int cpp, + unsigned int pitch) +{ + if (tiling_mode != I915_TILING_NONE) { + unsigned int tile_rows, tiles; + + tile_rows = *y / 8; + *y %= 8; + + tiles = *x / (512/cpp); + *x %= 512/cpp; + + return tile_rows * pitch * 8 + tiles * 4096; + } else { + unsigned int offset; - return tile_rows * pitch * 8 + tiles * 4096; + offset = *y * pitch + *x * cpp; + *y = 0; + *x = (offset & 4095) / cpp; + return offset & -4096; + } } static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb, @@ -2105,9 +2116,9 @@ if (INTEL_INFO(dev)->gen >= 4) { intel_crtc->dspaddr_offset = - intel_gen4_compute_offset_xtiled(&x, &y, - fb->bits_per_pixel / 8, - fb->pitches[0]); + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode, + fb->bits_per_pixel / 8, + fb->pitches[0]); linear_offset -= intel_crtc->dspaddr_offset; } else { intel_crtc->dspaddr_offset = linear_offset; @@ -2198,9 +2209,9 @@ linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8); intel_crtc->dspaddr_offset = - intel_gen4_compute_offset_xtiled(&x, &y, - fb->bits_per_pixel / 8, - fb->pitches[0]); + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode, + fb->bits_per_pixel / 8, + fb->pitches[0]); linear_offset -= intel_crtc->dspaddr_offset; DRM_DEBUG_KMS("Writing base %08X %08lX %d %d %d\n", @@ -2304,10 +2315,10 @@ return 0; } - if(intel_crtc->plane > dev_priv->num_pipe) { + if (intel_crtc->plane > INTEL_INFO(dev)->num_pipes) { DRM_ERROR("no plane for crtc: plane %d, num_pipes %d\n", intel_crtc->plane, - dev_priv->num_pipe); + INTEL_INFO(dev)->num_pipes); return -EINVAL; } @@ -3486,15 +3497,15 @@ int plane = intel_crtc->plane; u32 reg, temp; - if (!intel_crtc->active) return; + intel_crtc_wait_for_pending_flips(crtc); + drm_vblank_off(dev, pipe); + for_each_encoder_on_crtc(dev, crtc, encoder) encoder->disable(encoder); - intel_crtc_wait_for_pending_flips(crtc); - drm_vblank_off(dev, pipe); intel_crtc_update_cursor(crtc, false); intel_disable_plane(dev_priv, plane, pipe); @@ -3570,13 +3581,14 @@ if (!intel_crtc->active) return; + intel_crtc_wait_for_pending_flips(crtc); + drm_vblank_off(dev, pipe); + is_pch_port = haswell_crtc_driving_pch(crtc); for_each_encoder_on_crtc(dev, crtc, encoder) encoder->disable(encoder); - intel_crtc_wait_for_pending_flips(crtc); - drm_vblank_off(dev, pipe); intel_crtc_update_cursor(crtc, false); intel_disable_plane(dev_priv, plane, pipe); @@ -3686,17 +3698,18 @@ struct intel_encoder *encoder; int pipe = intel_crtc->pipe; int plane = intel_crtc->plane; - + u32 pctl; if (!intel_crtc->active) return; + intel_crtc_wait_for_pending_flips(crtc); + drm_vblank_off(dev, pipe); + for_each_encoder_on_crtc(dev, crtc, encoder) encoder->disable(encoder); /* Give the overlay scaler a chance to disable if it's on this pipe */ - intel_crtc_wait_for_pending_flips(crtc); - drm_vblank_off(dev, pipe); intel_crtc_dpms_overlay(intel_crtc, false); intel_crtc_update_cursor(crtc, false); @@ -3705,6 +3718,13 @@ intel_disable_plane(dev_priv, plane, pipe); intel_disable_pipe(dev_priv, pipe); + + /* Disable pannel fitter if it is on this pipe. */ + pctl = I915_READ(PFIT_CONTROL); + if ((pctl & PFIT_ENABLE) && + ((pctl & PFIT_PIPE_MASK) >> PFIT_PIPE_SHIFT) == pipe) + I915_WRITE(PFIT_CONTROL, 0); + intel_disable_pll(dev_priv, pipe); intel_crtc->active = false; @@ -3776,10 +3796,12 @@ struct drm_device *dev = crtc->dev; struct drm_connector *connector; struct drm_i915_private *dev_priv = dev->dev_private; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); /* crtc should still be enabled when we disable it. */ WARN_ON(!crtc->enabled); + intel_crtc->eld_vld = false; dev_priv->display.crtc_disable(crtc); intel_crtc_update_sarea(crtc, false); dev_priv->display.off(crtc); @@ -4023,26 +4045,33 @@ static void fdi_reduce_ratio(u32 *num, u32 *den) { - while (*num > 0xffffff || *den > 0xffffff) { + while (*num > DATA_LINK_M_N_MASK || + *den > DATA_LINK_M_N_MASK) { *num >>= 1; *den >>= 1; } } +static void compute_m_n(unsigned int m, unsigned int n, + uint32_t *ret_m, uint32_t *ret_n) +{ + *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX); + *ret_m = div_u64((uint64_t) m * *ret_n, n); + fdi_reduce_ratio(ret_m, ret_n); +} + static void ironlake_compute_m_n(int bits_per_pixel, int nlanes, int pixel_clock, int link_clock, struct fdi_m_n *m_n) { m_n->tu = 64; /* default size */ - /* BUG_ON(pixel_clock > INT_MAX / 36); */ - m_n->gmch_m = bits_per_pixel * pixel_clock; - m_n->gmch_n = link_clock * nlanes * 8; - fdi_reduce_ratio(&m_n->gmch_m, &m_n->gmch_n); - - m_n->link_m = pixel_clock; - m_n->link_n = link_clock; - fdi_reduce_ratio(&m_n->link_m, &m_n->link_n); + compute_m_n(bits_per_pixel * pixel_clock, + link_clock * nlanes * 8, + &m_n->gmch_m, &m_n->gmch_n); + + compute_m_n(pixel_clock, link_clock, + &m_n->link_m, &m_n->link_n); } static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) @@ -4724,9 +4753,6 @@ return -EINVAL; } - /* Ensure that the cursor is valid for the new mode before changing... */ - intel_crtc_update_cursor(crtc, true); - if (is_lvds && dev_priv->lvds_downclock_avail) { /* * Ensure we match the reduced clock's P to the target clock. @@ -5334,7 +5360,7 @@ return false; } - if (dev_priv->num_pipe == 2) + if (INTEL_INFO(dev)->num_pipes == 2) return true; switch (intel_crtc->pipe) { @@ -5613,9 +5639,6 @@ return -EINVAL; } - /* Ensure that the cursor is valid for the new mode before changing... */ - intel_crtc_update_cursor(crtc, true); - /* determine panel color depth */ dither = intel_choose_pipe_bpp_dither(crtc, fb, &intel_crtc->bpp, adjusted_mode); @@ -5816,9 +5839,6 @@ } } - /* Ensure that the cursor is valid for the new mode before changing... */ - intel_crtc_update_cursor(crtc, true); - /* determine panel color depth */ dither = intel_choose_pipe_bpp_dither(crtc, fb, &intel_crtc->bpp, adjusted_mode); @@ -6068,6 +6088,7 @@ struct drm_i915_private *dev_priv = connector->dev->dev_private; uint8_t *eld = connector->eld; struct drm_device *dev = crtc->dev; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); uint32_t eldv; uint32_t i; int len; @@ -6109,6 +6130,7 @@ DRM_DEBUG_DRIVER("ELD on pipe %c\n", pipe_name(pipe)); eldv = AUDIO_ELD_VALID_A << (pipe * 4); + intel_crtc->eld_vld = true; if (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) { DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n"); @@ -6502,7 +6524,8 @@ intel_crtc->cursor_width = width; intel_crtc->cursor_height = height; - intel_crtc_update_cursor(crtc, true); + if (intel_crtc->active) + intel_crtc_update_cursor(crtc, true); return 0; fail_unpin: @@ -6521,7 +6544,8 @@ intel_crtc->cursor_x = x; intel_crtc->cursor_y = y; - intel_crtc_update_cursor(crtc, true); + if (intel_crtc->active) + intel_crtc_update_cursor(crtc, true); return 0; } @@ -6993,11 +7017,6 @@ void intel_mark_idle(struct drm_device *dev) { -} - -void intel_mark_fb_busy(struct drm_i915_gem_object *obj) -{ - struct drm_device *dev = obj->base.dev; struct drm_crtc *crtc; if (!i915_powersave) @@ -7007,12 +7026,11 @@ if (!crtc->fb) continue; - if (to_intel_framebuffer(crtc->fb)->obj == obj) - intel_increase_pllclock(crtc); + intel_decrease_pllclock(crtc); } } -void intel_mark_fb_idle(struct drm_i915_gem_object *obj) +void intel_mark_fb_busy(struct drm_i915_gem_object *obj) { struct drm_device *dev = obj->base.dev; struct drm_crtc *crtc; @@ -7025,7 +7043,7 @@ continue; if (to_intel_framebuffer(crtc->fb)->obj == obj) - intel_decrease_pllclock(crtc); + intel_increase_pllclock(crtc); } } @@ -7407,8 +7425,8 @@ { struct drm_device *dev = crtc->dev; struct drm_i915_private *dev_priv = dev->dev_private; - struct intel_framebuffer *intel_fb; - struct drm_i915_gem_object *obj; + struct drm_framebuffer *old_fb = crtc->fb; + struct drm_i915_gem_object *obj = to_intel_framebuffer(fb)->obj; struct intel_crtc *intel_crtc = to_intel_crtc(crtc); struct intel_unpin_work *work; unsigned long flags; @@ -7433,8 +7451,7 @@ work->event = event; work->crtc = crtc; - intel_fb = to_intel_framebuffer(crtc->fb); - work->old_fb_obj = intel_fb->obj; + work->old_fb_obj = to_intel_framebuffer(old_fb)->obj; INIT_WORK(&work->work, intel_unpin_work_fn); ret = drm_vblank_get(dev, intel_crtc->pipe); @@ -7454,9 +7471,6 @@ intel_crtc->unpin_work = work; spin_unlock_irqrestore(&dev->event_lock, flags); - intel_fb = to_intel_framebuffer(fb); - obj = intel_fb->obj; - if (atomic_read(&intel_crtc->unpin_work_count) >= 2) flush_workqueue(dev_priv->wq); @@ -7494,6 +7508,7 @@ cleanup_pending: atomic_dec(&intel_crtc->unpin_work_count); + crtc->fb = old_fb; atomic_sub(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip); drm_gem_object_unreference(&work->old_fb_obj->base); drm_gem_object_unreference(&obj->base); @@ -7722,22 +7737,25 @@ if (crtc->enabled) *prepare_pipes |= 1 << intel_crtc->pipe; - /* We only support modeset on one single crtc, hence we need to do that - * only for the passed in crtc iff we change anything else than just - * disable crtcs. - * - * This is actually not true, to be fully compatible with the old crtc - * helper we automatically disable _any_ output (i.e. doesn't need to be - * connected to the crtc we're modesetting on) if it's disconnected. - * Which is a rather nutty api (since changed the output configuration - * without userspace's explicit request can lead to confusion), but - * alas. Hence we currently need to modeset on all pipes we prepare. */ + /* + * For simplicity do a full modeset on any pipe where the output routing + * changed. We could be more clever, but that would require us to be + * more careful with calling the relevant encoder->mode_set functions. + */ if (*prepare_pipes) *modeset_pipes = *prepare_pipes; /* ... and mask these out. */ *modeset_pipes &= ~(*disable_pipes); *prepare_pipes &= ~(*disable_pipes); + + /* + * HACK: We don't (yet) fully support global modesets. intel_set_config + * obies this rule, but the modeset restore mode of + * intel_modeset_setup_hw_state does not. + */ + *modeset_pipes &= 1 << intel_crtc->pipe; + *prepare_pipes &= 1 << intel_crtc->pipe; } static bool intel_crtc_in_use(struct drm_crtc *crtc) @@ -8303,7 +8321,7 @@ static void intel_cpu_pll_init(struct drm_device *dev) { - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) intel_ddi_pll_init(dev); } @@ -8439,11 +8457,10 @@ I915_WRITE(PFIT_CONTROL, 0); } - if (!(IS_HASWELL(dev) && - (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES))) + if (!IS_ULT(dev)) intel_crt_init(dev); - if (IS_HASWELL(dev)) { + if (HAS_DDI(dev)) { int found; /* Haswell uses DDI functions to detect digital outputs */ @@ -8703,7 +8720,7 @@ struct drm_i915_private *dev_priv = dev->dev_private; /* We always want a DPMS function */ - if (IS_HASWELL(dev)) { + if (HAS_DDI(dev)) { dev_priv->display.crtc_mode_set = haswell_crtc_mode_set; dev_priv->display.crtc_enable = haswell_crtc_enable; dev_priv->display.crtc_disable = haswell_crtc_disable; @@ -8831,6 +8848,17 @@ DRM_INFO("applying inverted panel brightness quirk\n"); } +/* + * Some machines (Dell XPS13) suffer broken backlight controls if + * BLM_PCH_PWM_ENABLE is set. + */ +static void quirk_no_pcm_pwm_enable(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE; + DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n"); +} + struct intel_quirk { int device; int subsystem_vendor; @@ -8888,6 +8916,26 @@ /* Acer Aspire 5734Z must invert backlight brightness */ { 0x2a42, 0x1025, 0x0459, quirk_invert_brightness }, + + /* Acer Aspire 4736Z */ + { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness }, + + /* Acer/eMachines G725 */ + { 0x2a42, 0x1025, 0x0210, quirk_invert_brightness }, + + /* Acer/eMachines e725 */ + { 0x2a42, 0x1025, 0x0212, quirk_invert_brightness }, + + /* Acer/Packard Bell NCL20 */ + { 0x2a42, 0x1025, 0x034b, quirk_invert_brightness }, + + /* Acer Aspire 4736Z */ + { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness }, + + /* Dell XPS13 HD Sandy Bridge */ + { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable }, + /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */ + { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable }, }; static void intel_init_quirks(struct drm_device *dev) @@ -8984,9 +9032,10 @@ dev->mode_config.fb_base = dev_priv->mm.gtt_base_addr; DRM_DEBUG_KMS("%d display pipe%s available.\n", - dev_priv->num_pipe, dev_priv->num_pipe > 1 ? "s" : ""); + INTEL_INFO(dev)->num_pipes, + INTEL_INFO(dev)->num_pipes > 1 ? "s" : ""); - for (i = 0; i < dev_priv->num_pipe; i++) { + for (i = 0; i < INTEL_INFO(dev)->num_pipes; i++) { intel_crtc_init(dev, i); ret = intel_plane_init(dev, i); if (ret) @@ -9040,10 +9089,11 @@ static bool intel_check_plane_mapping(struct intel_crtc *crtc) { - struct drm_i915_private *dev_priv = crtc->base.dev->dev_private; + struct drm_device *dev = crtc->base.dev; + struct drm_i915_private *dev_priv = dev->dev_private; u32 reg, val; - if (dev_priv->num_pipe == 1) + if (INTEL_INFO(dev)->num_pipes == 1) return true; reg = DSPCNTR(!crtc->plane); @@ -9209,7 +9259,7 @@ struct intel_encoder *encoder; struct intel_connector *connector; - if (IS_HASWELL(dev)) { + if (HAS_DDI(dev)) { tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP)); if (tmp & TRANS_DDI_FUNC_ENABLE) { @@ -9250,7 +9300,7 @@ crtc->active ? "enabled" : "disabled"); } - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) intel_ddi_setup_hw_pll_state(dev); list_for_each_entry(encoder, &dev->mode_config.encoder_list, @@ -9366,6 +9416,9 @@ /* flush any delayed tasks or pending work */ flush_scheduled_work(); + /* destroy backlight, if any, before the connectors */ + intel_panel_destroy_backlight(dev); + drm_mode_config_cleanup(dev); } @@ -9406,6 +9459,9 @@ #include struct intel_display_error_state { + + int num_transcoders; + struct intel_cursor_error_state { u32 control; u32 position; @@ -9414,15 +9470,7 @@ } cursor[I915_MAX_PIPES]; struct intel_pipe_error_state { - u32 conf; u32 source; - - u32 htotal; - u32 hblank; - u32 hsync; - u32 vtotal; - u32 vblank; - u32 vsync; } pipe[I915_MAX_PIPES]; struct intel_plane_error_state { @@ -9434,6 +9482,19 @@ u32 surface; u32 tile_offset; } plane[I915_MAX_PIPES]; + + struct intel_transcoder_error_state { + enum transcoder cpu_transcoder; + + u32 conf; + + u32 htotal; + u32 hblank; + u32 hsync; + u32 vtotal; + u32 vblank; + u32 vsync; + } transcoder[4]; }; struct intel_display_error_state * @@ -9441,16 +9502,22 @@ { drm_i915_private_t *dev_priv = dev->dev_private; struct intel_display_error_state *error; - enum transcoder cpu_transcoder; + int transcoders[] = { + TRANSCODER_A, + TRANSCODER_B, + TRANSCODER_C, + TRANSCODER_EDP, + }; int i; + if (INTEL_INFO(dev)->num_pipes == 0) + return NULL; + error = kmalloc(sizeof(*error), GFP_ATOMIC); if (error == NULL) return NULL; for_each_pipe(i) { - cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv, i); - error->cursor[i].control = I915_READ(CURCNTR(i)); error->cursor[i].position = I915_READ(CURPOS(i)); error->cursor[i].base = I915_READ(CURBASE(i)); @@ -9465,14 +9532,25 @@ error->plane[i].tile_offset = I915_READ(DSPTILEOFF(i)); } - error->pipe[i].conf = I915_READ(PIPECONF(cpu_transcoder)); error->pipe[i].source = I915_READ(PIPESRC(i)); - error->pipe[i].htotal = I915_READ(HTOTAL(cpu_transcoder)); - error->pipe[i].hblank = I915_READ(HBLANK(cpu_transcoder)); - error->pipe[i].hsync = I915_READ(HSYNC(cpu_transcoder)); - error->pipe[i].vtotal = I915_READ(VTOTAL(cpu_transcoder)); - error->pipe[i].vblank = I915_READ(VBLANK(cpu_transcoder)); - error->pipe[i].vsync = I915_READ(VSYNC(cpu_transcoder)); + } + + error->num_transcoders = INTEL_INFO(dev)->num_pipes; + if (HAS_DDI(dev_priv->dev)) + error->num_transcoders++; /* Account for eDP. */ + + for (i = 0; i < error->num_transcoders; i++) { + enum transcoder cpu_transcoder = transcoders[i]; + + error->transcoder[i].cpu_transcoder = cpu_transcoder; + + error->transcoder[i].conf = I915_READ(PIPECONF(cpu_transcoder)); + error->transcoder[i].htotal = I915_READ(HTOTAL(cpu_transcoder)); + error->transcoder[i].hblank = I915_READ(HBLANK(cpu_transcoder)); + error->transcoder[i].hsync = I915_READ(HSYNC(cpu_transcoder)); + error->transcoder[i].vtotal = I915_READ(VTOTAL(cpu_transcoder)); + error->transcoder[i].vblank = I915_READ(VBLANK(cpu_transcoder)); + error->transcoder[i].vsync = I915_READ(VSYNC(cpu_transcoder)); } return error; @@ -9483,20 +9561,15 @@ struct drm_device *dev, struct intel_display_error_state *error) { - drm_i915_private_t *dev_priv = dev->dev_private; int i; - seq_printf(m, "Num Pipes: %d\n", dev_priv->num_pipe); + if (!error) + return; + + seq_printf(m, "Num Pipes: %d\n", INTEL_INFO(dev)->num_pipes); for_each_pipe(i) { seq_printf(m, "Pipe [%d]:\n", i); - seq_printf(m, " CONF: %08x\n", error->pipe[i].conf); seq_printf(m, " SRC: %08x\n", error->pipe[i].source); - seq_printf(m, " HTOTAL: %08x\n", error->pipe[i].htotal); - seq_printf(m, " HBLANK: %08x\n", error->pipe[i].hblank); - seq_printf(m, " HSYNC: %08x\n", error->pipe[i].hsync); - seq_printf(m, " VTOTAL: %08x\n", error->pipe[i].vtotal); - seq_printf(m, " VBLANK: %08x\n", error->pipe[i].vblank); - seq_printf(m, " VSYNC: %08x\n", error->pipe[i].vsync); seq_printf(m, "Plane [%d]:\n", i); seq_printf(m, " CNTR: %08x\n", error->plane[i].control); @@ -9514,5 +9587,17 @@ seq_printf(m, " POS: %08x\n", error->cursor[i].position); seq_printf(m, " BASE: %08x\n", error->cursor[i].base); } + + for (i = 0; i < error->num_transcoders; i++) { + seq_printf(m, " CPU transcoder: %c\n", + transcoder_name(error->transcoder[i].cpu_transcoder)); + seq_printf(m, " CONF: %08x\n", error->transcoder[i].conf); + seq_printf(m, " HTOTAL: %08x\n", error->transcoder[i].htotal); + seq_printf(m, " HBLANK: %08x\n", error->transcoder[i].hblank); + seq_printf(m, " HSYNC: %08x\n", error->transcoder[i].hsync); + seq_printf(m, " VTOTAL: %08x\n", error->transcoder[i].vtotal); + seq_printf(m, " VBLANK: %08x\n", error->transcoder[i].vblank); + seq_printf(m, " VSYNC: %08x\n", error->transcoder[i].vsync); + } } #endif --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_gem_stolen.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_gem_stolen.c @@ -42,56 +42,50 @@ * for is a boon. */ -#define PTE_ADDRESS_MASK 0xfffff000 -#define PTE_ADDRESS_MASK_HIGH 0x000000f0 /* i915+ */ -#define PTE_MAPPING_TYPE_UNCACHED (0 << 1) -#define PTE_MAPPING_TYPE_DCACHE (1 << 1) /* i830 only */ -#define PTE_MAPPING_TYPE_CACHED (3 << 1) -#define PTE_MAPPING_TYPE_MASK (3 << 1) -#define PTE_VALID (1 << 0) - -/** - * i915_stolen_to_phys - take an offset into stolen memory and turn it into - * a physical one - * @dev: drm device - * @offset: address to translate - * - * Some chip functions require allocations from stolen space and need the - * physical address of the memory in question. - */ -static unsigned long i915_stolen_to_phys(struct drm_device *dev, u32 offset) +static unsigned long i915_stolen_to_physical(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; struct pci_dev *pdev = dev_priv->bridge_dev; u32 base; -#if 0 /* On the machines I have tested the Graphics Base of Stolen Memory - * is unreliable, so compute the base by subtracting the stolen memory - * from the Top of Low Usable DRAM which is where the BIOS places - * the graphics stolen memory. + * is unreliable, so on those compute the base by subtracting the + * stolen memory from the Top of Low Usable DRAM which is where the + * BIOS places the graphics stolen memory. + * + * On gen2, the layout is slightly different with the Graphics Segment + * immediately following Top of Memory (or Top of Usable DRAM). Note + * it appears that TOUD is only reported by 865g, so we just use the + * top of memory as determined by the e820 probe. + * + * XXX gen2 requires an unavailable symbol and 945gm fails with + * its value of TOLUD. */ - if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) { - /* top 32bits are reserved = 0 */ + base = 0; + if (INTEL_INFO(dev)->gen >= 6) { + /* Read Base Data of Stolen Memory Register (BDSM) directly. + * Note that there is also a MCHBAR miror at 0x1080c0 or + * we could use device 2:0x5c instead. + */ + pci_read_config_dword(pdev, 0xB0, &base); + base &= ~4095; /* lower bits used for locking register */ + } else if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) { + /* Read Graphics Base of Stolen Memory directly */ pci_read_config_dword(pdev, 0xA4, &base); - } else { - /* XXX presume 8xx is the same as i915 */ - pci_bus_read_config_dword(pdev->bus, 2, 0x5C, &base); - } -#else - if (INTEL_INFO(dev)->gen > 3 || IS_G33(dev)) { - u16 val; - pci_read_config_word(pdev, 0xb0, &val); - base = val >> 4 << 20; - } else { +#if 0 + } else if (IS_GEN3(dev)) { u8 val; + /* Stolen is immediately below Top of Low Usable DRAM */ pci_read_config_byte(pdev, 0x9c, &val); base = val >> 3 << 27; - } - base -= dev_priv->mm.gtt->stolen_size; + base -= dev_priv->mm.gtt->stolen_size; + } else { + /* Stolen is immediately above Top of Memory */ + base = max_low_pfn_mapped << PAGE_SHIFT; #endif + } - return base + offset; + return base; } static void i915_warn_stolen(struct drm_device *dev) @@ -116,7 +110,7 @@ if (!compressed_fb) goto err; - cfb_base = i915_stolen_to_phys(dev, compressed_fb->start); + cfb_base = dev_priv->mm.stolen_base + compressed_fb->start; if (!cfb_base) goto err_fb; @@ -129,7 +123,7 @@ if (!compressed_llb) goto err_fb; - ll_base = i915_stolen_to_phys(dev, compressed_llb->start); + ll_base = dev_priv->mm.stolen_base + compressed_llb->start; if (!ll_base) goto err_llb; } @@ -148,7 +142,7 @@ } DRM_DEBUG_KMS("FBC base 0x%08lx, ll base 0x%08lx, size %dM\n", - cfb_base, ll_base, size >> 20); + (long)cfb_base, (long)ll_base, size >> 20); return; err_llb: @@ -180,6 +174,13 @@ struct drm_i915_private *dev_priv = dev->dev_private; unsigned long prealloc_size = dev_priv->mm.gtt->stolen_size; + dev_priv->mm.stolen_base = i915_stolen_to_physical(dev); + if (dev_priv->mm.stolen_base == 0) + return 0; + + DRM_DEBUG_KMS("found %d bytes of stolen memory at %08lx\n", + dev_priv->mm.gtt->stolen_size, dev_priv->mm.stolen_base); + /* Basic memrange allocator for stolen space */ drm_mm_init(&dev_priv->mm.stolen, 0, prealloc_size); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_fb.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_fb.c @@ -233,7 +233,7 @@ ifbdev->helper.funcs = &intel_fb_helper_funcs; ret = drm_fb_helper_init(dev, &ifbdev->helper, - dev_priv->num_pipe, + INTEL_INFO(dev)->num_pipes, INTELFB_CONN_LIMIT); if (ret) { kfree(ifbdev); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_reg.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_reg.h @@ -596,6 +596,8 @@ will not assert AGPBUSY# and will only be delivered when out of C3. */ #define INSTPM_FORCE_ORDERING (1<<7) /* GEN6+ */ +#define INSTPM_TLB_INVALIDATE (1<<9) +#define INSTPM_SYNC_FLUSH (1<<5) #define ACTHD 0x020c8 #define FW_BLC 0x020d8 #define FW_BLC2 0x020dc @@ -1523,14 +1525,13 @@ GEN7_CXT_EXTENDED_SIZE(ctx_reg) + \ GEN7_CXT_GT1_SIZE(ctx_reg) + \ GEN7_CXT_VFSTATE_SIZE(ctx_reg)) -#define HSW_CXT_POWER_SIZE(ctx_reg) ((ctx_reg >> 26) & 0x3f) -#define HSW_CXT_RING_SIZE(ctx_reg) ((ctx_reg >> 23) & 0x7) -#define HSW_CXT_RENDER_SIZE(ctx_reg) ((ctx_reg >> 15) & 0xff) -#define HSW_CXT_TOTAL_SIZE(ctx_reg) (HSW_CXT_POWER_SIZE(ctx_reg) + \ - HSW_CXT_RING_SIZE(ctx_reg) + \ - HSW_CXT_RENDER_SIZE(ctx_reg) + \ - GEN7_CXT_VFSTATE_SIZE(ctx_reg)) - +/* Haswell does have the CXT_SIZE register however it does not appear to be + * valid. Now, docs explain in dwords what is in the context object. The full + * size is 70720 bytes, however, the power context and execlist context will + * never be saved (power context is stored elsewhere, and execlists don't work + * on HSW) - so the final size is 66944 bytes, which rounds to 17 pages. + */ +#define HSW_CXT_TOTAL_SIZE (17 * PAGE_SIZE) /* * Overlay regs @@ -2603,14 +2604,14 @@ #define _PIPEB_GMCH_DATA_M 0x71050 /* Transfer unit size for display port - 1, default is 0x3f (for TU size 64) */ -#define PIPE_GMCH_DATA_M_TU_SIZE_MASK (0x3f << 25) -#define PIPE_GMCH_DATA_M_TU_SIZE_SHIFT 25 +#define TU_SIZE(x) (((x)-1) << 25) /* default size 64 */ +#define TU_SIZE_MASK (0x3f << 25) -#define PIPE_GMCH_DATA_M_MASK (0xffffff) +#define DATA_LINK_M_N_MASK (0xffffff) +#define DATA_LINK_N_MAX (0x800000) #define _PIPEA_GMCH_DATA_N 0x70054 #define _PIPEB_GMCH_DATA_N 0x71054 -#define PIPE_GMCH_DATA_N_MASK (0xffffff) /* * Computing Link M and N values for the Display Port link @@ -2625,11 +2626,9 @@ #define _PIPEA_DP_LINK_M 0x70060 #define _PIPEB_DP_LINK_M 0x71060 -#define PIPEA_DP_LINK_M_MASK (0xffffff) #define _PIPEA_DP_LINK_N 0x70064 #define _PIPEB_DP_LINK_N 0x71064 -#define PIPEA_DP_LINK_N_MASK (0xffffff) #define PIPE_GMCH_DATA_M(pipe) _PIPE(pipe, _PIPEA_GMCH_DATA_M, _PIPEB_GMCH_DATA_M) #define PIPE_GMCH_DATA_N(pipe) _PIPE(pipe, _PIPEA_GMCH_DATA_N, _PIPEB_GMCH_DATA_N) @@ -3295,8 +3294,6 @@ #define _PIPEA_DATA_M1 0x60030 -#define TU_SIZE(x) (((x)-1) << 25) /* default size 64 */ -#define TU_SIZE_MASK 0x7e000000 #define PIPE_DATA_M1_OFFSET 0 #define _PIPEA_DATA_N1 0x60034 #define PIPE_DATA_N1_OFFSET 0 @@ -3839,7 +3836,7 @@ #define _TRANSB_CHICKEN2 0xf1064 #define TRANS_CHICKEN2(pipe) _PIPE(pipe, _TRANSA_CHICKEN2, _TRANSB_CHICKEN2) #define TRANS_CHICKEN2_TIMING_OVERRIDE (1<<31) - +#define TRANS_CHICKEN2_FDI_POLARITY_REVERSED (1<<29) #define SOUTH_CHICKEN1 0xc2000 #define FDIA_PHASE_SYNC_SHIFT_OVR 19 @@ -3927,7 +3924,7 @@ #define FDI_10BPC (1<<16) #define FDI_6BPC (2<<16) #define FDI_12BPC (3<<16) -#define FDI_LINK_REVERSE_OVERWRITE (1<<15) +#define FDI_RX_LINK_REVERSAL_OVERRIDE (1<<15) #define FDI_DMI_LINK_REVERSE_MASK (1<<14) #define FDI_RX_PLL_ENABLE (1<<13) #define FDI_FS_ERR_CORRECT_ENABLE (1<<11) @@ -4147,7 +4144,7 @@ #define EDP_LINK_TRAIN_600MV_0DB_IVB (0x30 <<22) #define EDP_LINK_TRAIN_600MV_3_5DB_IVB (0x36 <<22) #define EDP_LINK_TRAIN_800MV_0DB_IVB (0x38 <<22) -#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x33 <<22) +#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x3e <<22) /* legacy values */ #define EDP_LINK_TRAIN_500MV_0DB_IVB (0x00 <<22) @@ -4211,7 +4208,9 @@ #define GEN6_RP_INTERRUPT_LIMITS 0xA014 #define GEN6_RPSTAT1 0xA01C #define GEN6_CAGF_SHIFT 8 +#define HSW_CAGF_SHIFT 7 #define GEN6_CAGF_MASK (0x7f << GEN6_CAGF_SHIFT) +#define HSW_CAGF_MASK (0x7f << HSW_CAGF_SHIFT) #define GEN6_RP_CONTROL 0xA024 #define GEN6_RP_MEDIA_TURBO (1<<11) #define GEN6_RP_MEDIA_MODE_MASK (3<<9) @@ -4280,8 +4279,8 @@ #define GEN6_PCODE_READ_MIN_FREQ_TABLE 0x9 #define GEN6_PCODE_WRITE_RC6VIDS 0x4 #define GEN6_PCODE_READ_RC6VIDS 0x5 -#define GEN6_ENCODE_RC6_VID(mv) (((mv) / 5) - 245) < 0 ?: 0 -#define GEN6_DECODE_RC6_VID(vids) (((vids) * 5) > 0 ? ((vids) * 5) + 245 : 0) +#define GEN6_ENCODE_RC6_VID(mv) (((mv) - 245) / 5) +#define GEN6_DECODE_RC6_VID(vids) (((vids) * 5) + 245) #define GEN6_PCODE_DATA 0x138128 #define GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8 @@ -4524,6 +4523,7 @@ #define DDI_BUF_EMP_800MV_0DB_HSW (7<<24) /* Sel7 */ #define DDI_BUF_EMP_800MV_3_5DB_HSW (8<<24) /* Sel8 */ #define DDI_BUF_EMP_MASK (0xf<<24) +#define DDI_BUF_PORT_REVERSAL (1<<16) #define DDI_BUF_IS_IDLE (1<<7) #define DDI_A_4_LANES (1<<4) #define DDI_PORT_WIDTH_X1 (0<<1) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_irq.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_irq.c @@ -250,10 +250,9 @@ struct timeval *vblank_time, unsigned flags) { - struct drm_i915_private *dev_priv = dev->dev_private; struct drm_crtc *crtc; - if (pipe < 0 || pipe >= dev_priv->num_pipe) { + if (pipe < 0 || pipe >= INTEL_INFO(dev)->num_pipes) { DRM_ERROR("Invalid crtc %d\n", pipe); return -EINVAL; } @@ -1472,7 +1471,7 @@ queue_work(dev_priv->wq, &dev_priv->error_work); } -static void i915_pageflip_stall_check(struct drm_device *dev, int pipe) +static void __always_unused i915_pageflip_stall_check(struct drm_device *dev, int pipe) { drm_i915_private_t *dev_priv = dev->dev_private; struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pipe]; @@ -2495,6 +2494,8 @@ I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT); enable_mask = ~dev_priv->irq_mask; + enable_mask &= ~(I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | + I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT); enable_mask |= I915_USER_INTERRUPT; if (IS_G4X(dev)) @@ -2571,6 +2572,13 @@ unsigned long irqflags; int irq_received; int ret = IRQ_NONE, pipe; + u32 flip[2] = { + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT, + I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT + }; + u32 flip_mask = + I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT | + I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT; atomic_inc(&dev_priv->irq_received); @@ -2579,7 +2587,7 @@ for (;;) { bool blc_event = false; - irq_received = iir != 0; + irq_received = (iir & ~flip_mask) != 0; /* Can't rely on pipestat interrupt bit in iir as it might * have been cleared after the pipestat interrupt was received. @@ -2626,7 +2634,7 @@ I915_READ(PORT_HOTPLUG_STAT); } - I915_WRITE(IIR, iir); + I915_WRITE(IIR, iir & ~flip_mask); new_iir = I915_READ(IIR); /* Flush posted writes */ if (iir & I915_USER_INTERRUPT) @@ -2634,17 +2642,17 @@ if (iir & I915_BSD_USER_INTERRUPT) notify_ring(dev, &dev_priv->ring[VCS]); - if (iir & I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT) - intel_prepare_page_flip(dev, 0); - - if (iir & I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT) - intel_prepare_page_flip(dev, 1); - for_each_pipe(pipe) { if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS && drm_handle_vblank(dev, pipe)) { - i915_pageflip_stall_check(dev, pipe); - intel_finish_page_flip(dev, pipe); + if (iir & flip[pipe]) { + intel_prepare_page_flip(dev, pipe); + + if ((I915_READ(ISR) & flip[pipe]) == 0) { + intel_finish_page_flip(dev, pipe); + flip_mask &= ~flip[pipe]; + } + } } if (pipe_stats[pipe] & PIPE_LEGACY_BLC_EVENT_STATUS) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_dvo.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_dvo.c @@ -449,6 +449,7 @@ const struct intel_dvo_device *dvo = &intel_dvo_devices[i]; struct i2c_adapter *i2c; int gpio; + bool dvoinit; /* Allow the I2C driver info to specify the GPIO to be used in * special cases, but otherwise default to what's defined @@ -468,7 +469,17 @@ i2c = intel_gmbus_get_adapter(dev_priv, gpio); intel_dvo->dev = *dvo; - if (!dvo->dev_ops->init(&intel_dvo->dev, i2c)) + + /* GMBUS NAK handling seems to be unstable, hence let the + * transmitter detection run in bit banging mode for now. + */ + intel_gmbus_force_bit(i2c, true); + + dvoinit = dvo->dev_ops->init(&intel_dvo->dev, i2c); + + intel_gmbus_force_bit(i2c, false); + + if (!dvoinit) continue; intel_encoder->type = INTEL_OUTPUT_DVO; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_drv.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_drv.h @@ -205,6 +205,7 @@ * some outputs connected to this crtc. */ bool active; + bool eld_vld; bool primary_disabled; /* is the crtc obscured by a plane? */ bool lowfreq_avail; struct intel_overlay *overlay; @@ -334,7 +335,7 @@ } __attribute__((packed)); struct intel_hdmi { - u32 sdvox_reg; + u32 hdmi_reg; int ddc_bus; uint32_t color_range; bool has_hdmi_sink; @@ -377,6 +378,7 @@ struct intel_digital_port { struct intel_encoder base; enum port port; + u32 saved_port_bits; struct intel_dp dp; struct intel_hdmi hdmi; }; @@ -426,7 +428,7 @@ extern void intel_crt_init(struct drm_device *dev); extern void intel_hdmi_init(struct drm_device *dev, - int sdvox_reg, enum port port); + int hdmi_reg, enum port port); extern void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, struct intel_connector *intel_connector); extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder); @@ -439,9 +441,8 @@ extern void intel_dvo_init(struct drm_device *dev); extern void intel_tv_init(struct drm_device *dev); extern void intel_mark_busy(struct drm_device *dev); -extern void intel_mark_idle(struct drm_device *dev); extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj); -extern void intel_mark_fb_idle(struct drm_i915_gem_object *obj); +extern void intel_mark_idle(struct drm_device *dev); extern bool intel_lvds_init(struct drm_device *dev); extern void intel_dp_init(struct drm_device *dev, int output_reg, enum port port); @@ -627,9 +628,10 @@ extern void intel_update_linetime_watermarks(struct drm_device *dev, int pipe, struct drm_display_mode *mode); -extern unsigned long intel_gen4_compute_offset_xtiled(int *x, int *y, - unsigned int bpp, - unsigned int pitch); +extern unsigned long intel_gen4_compute_page_offset(int *x, int *y, + unsigned int tiling_mode, + unsigned int bpp, + unsigned int pitch); extern int intel_sprite_set_colorkey(struct drm_device *dev, void *data, struct drm_file *file_priv); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_dp.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_dp.c @@ -379,7 +379,7 @@ * clock divider. */ if (is_cpu_edp(intel_dp)) { - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) aux_clock_divider = intel_ddi_get_cdclk_freq(dev_priv) >> 1; else if (IS_VALLEYVIEW(dev)) aux_clock_divider = 100; @@ -629,7 +629,18 @@ DRM_DEBUG_KMS("aux_ch native nack\n"); return -EREMOTEIO; case AUX_NATIVE_REPLY_DEFER: - udelay(100); + /* + * For now, just give more slack to branch devices. We + * could check the DPCD for I2C bit rate capabilities, + * and if available, adjust the interval. We could also + * be more careful with DP-to-Legacy adapters where a + * long legacy cable may force very low I2C bit rates. + */ + if (intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] & + DP_DWN_STRM_PORT_PRESENT) + usleep_range(500, 600); + else + usleep_range(300, 400); continue; default: DRM_ERROR("aux_ch invalid native reply 0x%02x\n", @@ -788,6 +799,7 @@ struct intel_dp_m_n m_n; int pipe = intel_crtc->pipe; enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder; + int target_clock; /* * Find the lane count in the intel_encoder private @@ -803,13 +815,22 @@ } } + target_clock = mode->clock; + for_each_encoder_on_crtc(dev, crtc, intel_encoder) { + if (intel_encoder->type == INTEL_OUTPUT_EDP) { + target_clock = intel_edp_target_clock(intel_encoder, + mode); + break; + } + } + /* * Compute the GMCH and Link ratios. The '3' here is * the number of bytes_per_pixel post-LUT, which we always * set up for 8-bits of R/G/B, or 3 bytes total. */ intel_dp_compute_m_n(intel_crtc->bpp, lane_count, - mode->clock, adjusted_mode->clock, &m_n); + target_clock, adjusted_mode->clock, &m_n); if (IS_HASWELL(dev)) { I915_WRITE(PIPE_DATA_M1(cpu_transcoder), @@ -1791,7 +1812,7 @@ int voltage_tries, loop_tries; uint32_t DP = intel_dp->DP; - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) intel_ddi_prepare_link_retrain(encoder); /* Write the link configuration data */ @@ -1850,7 +1871,7 @@ for (i = 0; i < intel_dp->lane_count; i++) if ((intel_dp->train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0) break; - if (i == intel_dp->lane_count && voltage_tries == 5) { + if (i == intel_dp->lane_count) { ++loop_tries; if (loop_tries == 5) { DRM_DEBUG_KMS("too many full retries, give up\n"); @@ -1981,7 +2002,7 @@ * intel_ddi_prepare_link_retrain will take care of redoing the link * train. */ - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) return; if (WARN_ON((I915_READ(intel_dp->output_reg) & DP_PORT_EN) == 0)) @@ -2457,17 +2478,14 @@ static void intel_dp_destroy(struct drm_connector *connector) { - struct drm_device *dev = connector->dev; struct intel_dp *intel_dp = intel_attached_dp(connector); struct intel_connector *intel_connector = to_intel_connector(connector); if (!IS_ERR_OR_NULL(intel_connector->edid)) kfree(intel_connector->edid); - if (is_edp(intel_dp)) { - intel_panel_destroy_backlight(dev); + if (is_edp(intel_dp)) intel_panel_fini(&intel_connector->panel); - } drm_sysfs_connector_remove(connector); drm_connector_cleanup(connector); @@ -2755,7 +2773,7 @@ intel_connector_attach_encoder(intel_connector, intel_encoder); drm_sysfs_connector_add(connector); - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; else intel_connector->get_hw_state = intel_connector_get_hw_state; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_sprite.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_sprite.c @@ -122,8 +122,8 @@ linear_offset = y * fb->pitches[0] + x * pixel_size; sprsurf_offset = - intel_gen4_compute_offset_xtiled(&x, &y, - pixel_size, fb->pitches[0]); + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode, + pixel_size, fb->pitches[0]); linear_offset -= sprsurf_offset; /* HSW consolidates SPRTILEOFF and SPRLINOFF into a single SPROFFSET @@ -287,8 +287,8 @@ linear_offset = y * fb->pitches[0] + x * pixel_size; dvssurf_offset = - intel_gen4_compute_offset_xtiled(&x, &y, - pixel_size, fb->pitches[0]); + intel_gen4_compute_page_offset(&x, &y, obj->tiling_mode, + pixel_size, fb->pitches[0]); linear_offset -= dvssurf_offset; if (obj->tiling_mode != I915_TILING_NONE) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_drv.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_drv.c @@ -138,74 +138,74 @@ .driver_data = (unsigned long) info } static const struct intel_device_info intel_i830_info = { - .gen = 2, .is_mobile = 1, .cursor_needs_physical = 1, + .gen = 2, .is_mobile = 1, .cursor_needs_physical = 1, .num_pipes = 2, .has_overlay = 1, .overlay_needs_physical = 1, }; static const struct intel_device_info intel_845g_info = { - .gen = 2, + .gen = 2, .num_pipes = 1, .has_overlay = 1, .overlay_needs_physical = 1, }; static const struct intel_device_info intel_i85x_info = { - .gen = 2, .is_i85x = 1, .is_mobile = 1, + .gen = 2, .is_i85x = 1, .is_mobile = 1, .num_pipes = 2, .cursor_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1, }; static const struct intel_device_info intel_i865g_info = { - .gen = 2, + .gen = 2, .num_pipes = 1, .has_overlay = 1, .overlay_needs_physical = 1, }; static const struct intel_device_info intel_i915g_info = { - .gen = 3, .is_i915g = 1, .cursor_needs_physical = 1, + .gen = 3, .is_i915g = 1, .cursor_needs_physical = 1, .num_pipes = 2, .has_overlay = 1, .overlay_needs_physical = 1, }; static const struct intel_device_info intel_i915gm_info = { - .gen = 3, .is_mobile = 1, + .gen = 3, .is_mobile = 1, .num_pipes = 2, .cursor_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1, .supports_tv = 1, }; static const struct intel_device_info intel_i945g_info = { - .gen = 3, .has_hotplug = 1, .cursor_needs_physical = 1, + .gen = 3, .has_hotplug = 1, .cursor_needs_physical = 1, .num_pipes = 2, .has_overlay = 1, .overlay_needs_physical = 1, }; static const struct intel_device_info intel_i945gm_info = { - .gen = 3, .is_i945gm = 1, .is_mobile = 1, + .gen = 3, .is_i945gm = 1, .is_mobile = 1, .num_pipes = 2, .has_hotplug = 1, .cursor_needs_physical = 1, .has_overlay = 1, .overlay_needs_physical = 1, .supports_tv = 1, }; static const struct intel_device_info intel_i965g_info = { - .gen = 4, .is_broadwater = 1, + .gen = 4, .is_broadwater = 1, .num_pipes = 2, .has_hotplug = 1, .has_overlay = 1, }; static const struct intel_device_info intel_i965gm_info = { - .gen = 4, .is_crestline = 1, + .gen = 4, .is_crestline = 1, .num_pipes = 2, .is_mobile = 1, .has_fbc = 1, .has_hotplug = 1, .has_overlay = 1, .supports_tv = 1, }; static const struct intel_device_info intel_g33_info = { - .gen = 3, .is_g33 = 1, + .gen = 3, .is_g33 = 1, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_overlay = 1, }; static const struct intel_device_info intel_g45_info = { - .gen = 4, .is_g4x = 1, .need_gfx_hws = 1, + .gen = 4, .is_g4x = 1, .need_gfx_hws = 1, .num_pipes = 2, .has_pipe_cxsr = 1, .has_hotplug = 1, .has_bsd_ring = 1, }; static const struct intel_device_info intel_gm45_info = { - .gen = 4, .is_g4x = 1, + .gen = 4, .is_g4x = 1, .num_pipes = 2, .is_mobile = 1, .need_gfx_hws = 1, .has_fbc = 1, .has_pipe_cxsr = 1, .has_hotplug = 1, .supports_tv = 1, @@ -213,26 +213,26 @@ }; static const struct intel_device_info intel_pineview_info = { - .gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, + .gen = 3, .is_g33 = 1, .is_pineview = 1, .is_mobile = 1, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_overlay = 1, }; static const struct intel_device_info intel_ironlake_d_info = { - .gen = 5, + .gen = 5, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_bsd_ring = 1, }; static const struct intel_device_info intel_ironlake_m_info = { - .gen = 5, .is_mobile = 1, + .gen = 5, .is_mobile = 1, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_fbc = 1, .has_bsd_ring = 1, }; static const struct intel_device_info intel_sandybridge_d_info = { - .gen = 6, + .gen = 6, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_bsd_ring = 1, .has_blt_ring = 1, @@ -241,7 +241,7 @@ }; static const struct intel_device_info intel_sandybridge_m_info = { - .gen = 6, .is_mobile = 1, + .gen = 6, .is_mobile = 1, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_fbc = 1, .has_bsd_ring = 1, @@ -251,7 +251,7 @@ }; static const struct intel_device_info intel_ivybridge_d_info = { - .is_ivybridge = 1, .gen = 7, + .is_ivybridge = 1, .gen = 7, .num_pipes = 3, .need_gfx_hws = 1, .has_hotplug = 1, .has_bsd_ring = 1, .has_blt_ring = 1, @@ -260,7 +260,7 @@ }; static const struct intel_device_info intel_ivybridge_m_info = { - .is_ivybridge = 1, .gen = 7, .is_mobile = 1, + .is_ivybridge = 1, .gen = 7, .is_mobile = 1, .num_pipes = 3, .need_gfx_hws = 1, .has_hotplug = 1, .has_fbc = 0, /* FBC is not enabled on Ivybridge mobile yet */ .has_bsd_ring = 1, @@ -270,7 +270,7 @@ }; static const struct intel_device_info intel_valleyview_m_info = { - .gen = 7, .is_mobile = 1, + .gen = 7, .is_mobile = 1, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_fbc = 0, .has_bsd_ring = 1, @@ -279,7 +279,7 @@ }; static const struct intel_device_info intel_valleyview_d_info = { - .gen = 7, + .gen = 7, .num_pipes = 2, .need_gfx_hws = 1, .has_hotplug = 1, .has_fbc = 0, .has_bsd_ring = 1, @@ -288,7 +288,7 @@ }; static const struct intel_device_info intel_haswell_d_info = { - .is_haswell = 1, .gen = 7, + .is_haswell = 1, .gen = 7, .num_pipes = 3, .need_gfx_hws = 1, .has_hotplug = 1, .has_bsd_ring = 1, .has_blt_ring = 1, @@ -297,7 +297,7 @@ }; static const struct intel_device_info intel_haswell_m_info = { - .is_haswell = 1, .gen = 7, .is_mobile = 1, + .is_haswell = 1, .gen = 7, .is_mobile = 1, .num_pipes = 3, .need_gfx_hws = 1, .has_hotplug = 1, .has_bsd_ring = 1, .has_blt_ring = 1, @@ -352,41 +352,68 @@ INTEL_VGA_DEVICE(0x016a, &intel_ivybridge_d_info), /* GT2 server */ INTEL_VGA_DEVICE(0x0402, &intel_haswell_d_info), /* GT1 desktop */ INTEL_VGA_DEVICE(0x0412, &intel_haswell_d_info), /* GT2 desktop */ - INTEL_VGA_DEVICE(0x0422, &intel_haswell_d_info), /* GT2 desktop */ + INTEL_VGA_DEVICE(0x0422, &intel_haswell_d_info), /* GT3 desktop */ INTEL_VGA_DEVICE(0x040a, &intel_haswell_d_info), /* GT1 server */ INTEL_VGA_DEVICE(0x041a, &intel_haswell_d_info), /* GT2 server */ - INTEL_VGA_DEVICE(0x042a, &intel_haswell_d_info), /* GT2 server */ + INTEL_VGA_DEVICE(0x042a, &intel_haswell_d_info), /* GT3 server */ INTEL_VGA_DEVICE(0x0406, &intel_haswell_m_info), /* GT1 mobile */ INTEL_VGA_DEVICE(0x0416, &intel_haswell_m_info), /* GT2 mobile */ INTEL_VGA_DEVICE(0x0426, &intel_haswell_m_info), /* GT2 mobile */ + INTEL_VGA_DEVICE(0x040B, &intel_haswell_d_info), /* GT1 reserved */ + INTEL_VGA_DEVICE(0x041B, &intel_haswell_d_info), /* GT2 reserved */ + INTEL_VGA_DEVICE(0x042B, &intel_haswell_d_info), /* GT3 reserved */ + INTEL_VGA_DEVICE(0x040E, &intel_haswell_d_info), /* GT1 reserved */ + INTEL_VGA_DEVICE(0x041E, &intel_haswell_d_info), /* GT2 reserved */ + INTEL_VGA_DEVICE(0x042E, &intel_haswell_d_info), /* GT3 reserved */ INTEL_VGA_DEVICE(0x0C02, &intel_haswell_d_info), /* SDV GT1 desktop */ INTEL_VGA_DEVICE(0x0C12, &intel_haswell_d_info), /* SDV GT2 desktop */ - INTEL_VGA_DEVICE(0x0C22, &intel_haswell_d_info), /* SDV GT2 desktop */ + INTEL_VGA_DEVICE(0x0C22, &intel_haswell_d_info), /* SDV GT3 desktop */ INTEL_VGA_DEVICE(0x0C0A, &intel_haswell_d_info), /* SDV GT1 server */ INTEL_VGA_DEVICE(0x0C1A, &intel_haswell_d_info), /* SDV GT2 server */ - INTEL_VGA_DEVICE(0x0C2A, &intel_haswell_d_info), /* SDV GT2 server */ + INTEL_VGA_DEVICE(0x0C2A, &intel_haswell_d_info), /* SDV GT3 server */ INTEL_VGA_DEVICE(0x0C06, &intel_haswell_m_info), /* SDV GT1 mobile */ INTEL_VGA_DEVICE(0x0C16, &intel_haswell_m_info), /* SDV GT2 mobile */ - INTEL_VGA_DEVICE(0x0C26, &intel_haswell_m_info), /* SDV GT2 mobile */ + INTEL_VGA_DEVICE(0x0C26, &intel_haswell_m_info), /* SDV GT3 mobile */ + INTEL_VGA_DEVICE(0x0C0B, &intel_haswell_d_info), /* SDV GT1 reserved */ + INTEL_VGA_DEVICE(0x0C1B, &intel_haswell_d_info), /* SDV GT2 reserved */ + INTEL_VGA_DEVICE(0x0C2B, &intel_haswell_d_info), /* SDV GT3 reserved */ + INTEL_VGA_DEVICE(0x0C0E, &intel_haswell_d_info), /* SDV GT1 reserved */ + INTEL_VGA_DEVICE(0x0C1E, &intel_haswell_d_info), /* SDV GT2 reserved */ + INTEL_VGA_DEVICE(0x0C2E, &intel_haswell_d_info), /* SDV GT3 reserved */ INTEL_VGA_DEVICE(0x0A02, &intel_haswell_d_info), /* ULT GT1 desktop */ INTEL_VGA_DEVICE(0x0A12, &intel_haswell_d_info), /* ULT GT2 desktop */ - INTEL_VGA_DEVICE(0x0A22, &intel_haswell_d_info), /* ULT GT2 desktop */ + INTEL_VGA_DEVICE(0x0A22, &intel_haswell_d_info), /* ULT GT3 desktop */ INTEL_VGA_DEVICE(0x0A0A, &intel_haswell_d_info), /* ULT GT1 server */ INTEL_VGA_DEVICE(0x0A1A, &intel_haswell_d_info), /* ULT GT2 server */ - INTEL_VGA_DEVICE(0x0A2A, &intel_haswell_d_info), /* ULT GT2 server */ + INTEL_VGA_DEVICE(0x0A2A, &intel_haswell_d_info), /* ULT GT3 server */ INTEL_VGA_DEVICE(0x0A06, &intel_haswell_m_info), /* ULT GT1 mobile */ INTEL_VGA_DEVICE(0x0A16, &intel_haswell_m_info), /* ULT GT2 mobile */ - INTEL_VGA_DEVICE(0x0A26, &intel_haswell_m_info), /* ULT GT2 mobile */ - INTEL_VGA_DEVICE(0x0D12, &intel_haswell_d_info), /* CRW GT1 desktop */ - INTEL_VGA_DEVICE(0x0D22, &intel_haswell_d_info), /* CRW GT2 desktop */ - INTEL_VGA_DEVICE(0x0D32, &intel_haswell_d_info), /* CRW GT2 desktop */ - INTEL_VGA_DEVICE(0x0D1A, &intel_haswell_d_info), /* CRW GT1 server */ - INTEL_VGA_DEVICE(0x0D2A, &intel_haswell_d_info), /* CRW GT2 server */ - INTEL_VGA_DEVICE(0x0D3A, &intel_haswell_d_info), /* CRW GT2 server */ - INTEL_VGA_DEVICE(0x0D16, &intel_haswell_m_info), /* CRW GT1 mobile */ - INTEL_VGA_DEVICE(0x0D26, &intel_haswell_m_info), /* CRW GT2 mobile */ - INTEL_VGA_DEVICE(0x0D36, &intel_haswell_m_info), /* CRW GT2 mobile */ + INTEL_VGA_DEVICE(0x0A26, &intel_haswell_m_info), /* ULT GT3 mobile */ + INTEL_VGA_DEVICE(0x0A0B, &intel_haswell_d_info), /* ULT GT1 reserved */ + INTEL_VGA_DEVICE(0x0A1B, &intel_haswell_d_info), /* ULT GT2 reserved */ + INTEL_VGA_DEVICE(0x0A2B, &intel_haswell_d_info), /* ULT GT3 reserved */ + INTEL_VGA_DEVICE(0x0A0E, &intel_haswell_m_info), /* ULT GT1 reserved */ + INTEL_VGA_DEVICE(0x0A1E, &intel_haswell_m_info), /* ULT GT2 reserved */ + INTEL_VGA_DEVICE(0x0A2E, &intel_haswell_m_info), /* ULT GT3 reserved */ + INTEL_VGA_DEVICE(0x0D02, &intel_haswell_d_info), /* CRW GT1 desktop */ + INTEL_VGA_DEVICE(0x0D12, &intel_haswell_d_info), /* CRW GT2 desktop */ + INTEL_VGA_DEVICE(0x0D22, &intel_haswell_d_info), /* CRW GT3 desktop */ + INTEL_VGA_DEVICE(0x0D0A, &intel_haswell_d_info), /* CRW GT1 server */ + INTEL_VGA_DEVICE(0x0D1A, &intel_haswell_d_info), /* CRW GT2 server */ + INTEL_VGA_DEVICE(0x0D2A, &intel_haswell_d_info), /* CRW GT3 server */ + INTEL_VGA_DEVICE(0x0D06, &intel_haswell_m_info), /* CRW GT1 mobile */ + INTEL_VGA_DEVICE(0x0D16, &intel_haswell_m_info), /* CRW GT2 mobile */ + INTEL_VGA_DEVICE(0x0D26, &intel_haswell_m_info), /* CRW GT3 mobile */ + INTEL_VGA_DEVICE(0x0D0B, &intel_haswell_d_info), /* CRW GT1 reserved */ + INTEL_VGA_DEVICE(0x0D1B, &intel_haswell_d_info), /* CRW GT2 reserved */ + INTEL_VGA_DEVICE(0x0D2B, &intel_haswell_d_info), /* CRW GT3 reserved */ + INTEL_VGA_DEVICE(0x0D0E, &intel_haswell_d_info), /* CRW GT1 reserved */ + INTEL_VGA_DEVICE(0x0D1E, &intel_haswell_d_info), /* CRW GT2 reserved */ + INTEL_VGA_DEVICE(0x0D2E, &intel_haswell_d_info), /* CRW GT3 reserved */ INTEL_VGA_DEVICE(0x0f30, &intel_valleyview_m_info), + INTEL_VGA_DEVICE(0x0f31, &intel_valleyview_m_info), + INTEL_VGA_DEVICE(0x0f32, &intel_valleyview_m_info), + INTEL_VGA_DEVICE(0x0f33, &intel_valleyview_m_info), INTEL_VGA_DEVICE(0x0157, &intel_valleyview_m_info), INTEL_VGA_DEVICE(0x0155, &intel_valleyview_d_info), {0, 0, 0} @@ -590,7 +617,7 @@ { int error = 0; - intel_gt_reset(dev); + intel_gt_sanitize(dev); if (drm_core_check_feature(dev, DRIVER_MODESET)) { mutex_lock(&dev->struct_mutex); @@ -616,7 +643,7 @@ pci_set_master(dev->pdev); - intel_gt_reset(dev); + intel_gt_sanitize(dev); /* * Platforms with opregion should have sane BIOS, older ones (gen3 and @@ -1220,23 +1247,23 @@ #define __i915_read(x, y) \ u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \ + unsigned long irqflags; \ u##x val = 0; \ + spin_lock_irqsave(&dev_priv->gt_lock, irqflags); \ if (IS_GEN5(dev_priv->dev)) \ ilk_dummy_write(dev_priv); \ if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \ - unsigned long irqflags; \ - spin_lock_irqsave(&dev_priv->gt_lock, irqflags); \ if (dev_priv->forcewake_count == 0) \ dev_priv->gt.force_wake_get(dev_priv); \ val = read##y(dev_priv->regs + reg); \ if (dev_priv->forcewake_count == 0) \ dev_priv->gt.force_wake_put(dev_priv); \ - spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); \ } else if (IS_VALLEYVIEW(dev_priv->dev) && IS_DISPLAYREG(reg)) { \ val = read##y(dev_priv->regs + reg + 0x180000); \ } else { \ val = read##y(dev_priv->regs + reg); \ } \ + spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); \ trace_i915_reg_rw(false, reg, val, sizeof(val)); \ return val; \ } @@ -1249,8 +1276,10 @@ #define __i915_write(x, y) \ void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \ + unsigned long irqflags; \ u32 __fifo_ret = 0; \ trace_i915_reg_rw(true, reg, val, sizeof(val)); \ + spin_lock_irqsave(&dev_priv->gt_lock, irqflags); \ if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \ __fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \ } \ @@ -1272,6 +1301,7 @@ DRM_ERROR("Unclaimed write to %x\n", reg); \ writel(ERR_INT_MMIO_UNCLAIMED, dev_priv->regs + GEN7_ERR_INT); \ } \ + spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); \ } __i915_write(8, b) __i915_write(16, w) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_opregion.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_opregion.c @@ -165,7 +165,7 @@ max = intel_panel_get_max_backlight(dev); intel_panel_set_backlight(dev, bclp * max / 255); - iowrite32((bclp*0x64)/0xff | ASLE_CBLV_VALID, &asle->cblv); + iowrite32(DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID, &asle->cblv); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_ddi.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_ddi.c @@ -114,7 +114,7 @@ { int port; - if (IS_HASWELL(dev)) { + if (HAS_DDI(dev)) { for (port = PORT_A; port < PORT_E; port++) intel_prepare_ddi_buffers(dev, port, false); @@ -178,10 +178,8 @@ FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90); /* Enable the PCH Receiver FDI PLL */ - rx_ctl_val = FDI_RX_PLL_ENABLE | FDI_RX_ENHANCE_FRAME_ENABLE | - ((intel_crtc->fdi_lanes - 1) << 19); - if (dev_priv->fdi_rx_polarity_reversed) - rx_ctl_val |= FDI_RX_POLARITY_REVERSED_LPT; + rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE | + FDI_RX_PLL_ENABLE | ((intel_crtc->fdi_lanes - 1) << 19); I915_WRITE(_FDI_RXA_CTL, rx_ctl_val); POSTING_READ(_FDI_RXA_CTL); udelay(220); @@ -203,7 +201,10 @@ DP_TP_CTL_LINK_TRAIN_PAT1 | DP_TP_CTL_ENABLE); - /* Configure and enable DDI_BUF_CTL for DDI E with next voltage */ + /* Configure and enable DDI_BUF_CTL for DDI E with next voltage. + * DDI E does not support port reversal, the functionality is + * achieved on the PCH side in FDI_RX_CTL, so no need to set the + * port reversal bit */ I915_WRITE(DDI_BUF_CTL(PORT_E), DDI_BUF_CTL_ENABLE | ((intel_crtc->fdi_lanes - 1) << 1) | @@ -675,10 +676,14 @@ DRM_DEBUG_KMS("Preparing DDI mode for Haswell on port %c, pipe %c\n", port_name(port), pipe_name(pipe)); + intel_crtc->eld_vld = false; if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) { struct intel_dp *intel_dp = enc_to_intel_dp(encoder); + struct intel_digital_port *intel_dig_port = + enc_to_dig_port(encoder); - intel_dp->DP = DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW; + intel_dp->DP = intel_dig_port->saved_port_bits | + DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW; switch (intel_dp->lane_count) { case 1: intel_dp->DP |= DDI_PORT_WIDTH_X1; @@ -1285,34 +1290,59 @@ static void intel_enable_ddi(struct intel_encoder *intel_encoder) { struct drm_encoder *encoder = &intel_encoder->base; + struct drm_crtc *crtc = encoder->crtc; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + int pipe = intel_crtc->pipe; struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; enum port port = intel_ddi_get_encoder_port(intel_encoder); int type = intel_encoder->type; + uint32_t tmp; if (type == INTEL_OUTPUT_HDMI) { + struct intel_digital_port *intel_dig_port = + enc_to_dig_port(encoder); + /* In HDMI/DVI mode, the port width, and swing/emphasis values * are ignored so nothing special needs to be done besides * enabling the port. */ - I915_WRITE(DDI_BUF_CTL(port), DDI_BUF_CTL_ENABLE); + I915_WRITE(DDI_BUF_CTL(port), + intel_dig_port->saved_port_bits | + DDI_BUF_CTL_ENABLE); } else if (type == INTEL_OUTPUT_EDP) { struct intel_dp *intel_dp = enc_to_intel_dp(encoder); ironlake_edp_backlight_on(intel_dp); } + + if (intel_crtc->eld_vld) { + tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); + tmp |= ((AUDIO_OUTPUT_ENABLE_A | AUDIO_ELD_VALID_A) << (pipe * 4)); + I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp); + } } static void intel_disable_ddi(struct intel_encoder *intel_encoder) { struct drm_encoder *encoder = &intel_encoder->base; + struct drm_crtc *crtc = encoder->crtc; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + int pipe = intel_crtc->pipe; int type = intel_encoder->type; + struct drm_device *dev = encoder->dev; + struct drm_i915_private *dev_priv = dev->dev_private; + uint32_t tmp; if (type == INTEL_OUTPUT_EDP) { struct intel_dp *intel_dp = enc_to_intel_dp(encoder); ironlake_edp_backlight_off(intel_dp); } + + tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); + tmp &= ~((AUDIO_OUTPUT_ENABLE_A | AUDIO_ELD_VALID_A) << (pipe * 4)); + I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp); } int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv) @@ -1457,6 +1487,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port) { + struct drm_i915_private *dev_priv = dev->dev_private; struct intel_digital_port *intel_dig_port; struct intel_encoder *intel_encoder; struct drm_encoder *encoder; @@ -1473,16 +1504,6 @@ return; } - if (port != PORT_A) { - hdmi_connector = kzalloc(sizeof(struct intel_connector), - GFP_KERNEL); - if (!hdmi_connector) { - kfree(dp_connector); - kfree(intel_dig_port); - return; - } - } - intel_encoder = &intel_dig_port->base; encoder = &intel_encoder->base; @@ -1497,10 +1518,9 @@ intel_encoder->get_hw_state = intel_ddi_get_hw_state; intel_dig_port->port = port; - if (hdmi_connector) - intel_dig_port->hdmi.sdvox_reg = DDI_BUF_CTL(port); - else - intel_dig_port->hdmi.sdvox_reg = 0; + intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) & + (DDI_BUF_PORT_REVERSAL | + DDI_A_4_LANES); intel_dig_port->dp.output_reg = DDI_BUF_CTL(port); intel_encoder->type = INTEL_OUTPUT_UNKNOWN; @@ -1508,7 +1528,16 @@ intel_encoder->cloneable = false; intel_encoder->hot_plug = intel_ddi_hot_plug; - if (hdmi_connector) - intel_hdmi_init_connector(intel_dig_port, hdmi_connector); intel_dp_init_connector(intel_dig_port, dp_connector); + + if (intel_encoder->type != INTEL_OUTPUT_EDP) { + hdmi_connector = kzalloc(sizeof(struct intel_connector), + GFP_KERNEL); + if (!hdmi_connector) { + return; + } + + intel_dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port); + intel_hdmi_init_connector(intel_dig_port, hdmi_connector); + } } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_gem_context.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_gem_context.c @@ -113,7 +113,7 @@ case 7: reg = I915_READ(GEN7_CXT_SIZE); if (IS_HASWELL(dev)) - ret = HSW_CXT_TOTAL_SIZE(reg) * 64; + ret = HSW_CXT_TOTAL_SIZE; else ret = GEN7_CXT_TOTAL_SIZE(reg) * 64; break; @@ -157,6 +157,13 @@ return ERR_PTR(-ENOMEM); } + if (INTEL_INFO(dev)->gen >= 7) { + ret = i915_gem_object_set_cache_level(ctx->obj, + I915_CACHE_LLC_MLC); + if (ret) + goto err_out; + } + /* The ring associated with the context object is handled by the normal * object tracking code. We give an initial ring value simple to pass an * assertion in the context switch code. --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_sdvo.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_sdvo.c @@ -1213,11 +1213,13 @@ struct drm_device *dev = encoder->base.dev; struct drm_i915_private *dev_priv = dev->dev_private; struct intel_sdvo *intel_sdvo = to_intel_sdvo(&encoder->base); + u16 active_outputs; u32 tmp; tmp = I915_READ(intel_sdvo->sdvo_reg); + intel_sdvo_get_active_outputs(intel_sdvo, &active_outputs); - if (!(tmp & SDVO_ENABLE)) + if (!(tmp & SDVO_ENABLE) && (active_outputs == 0)) return false; if (HAS_PCH_CPT(dev)) @@ -1743,11 +1745,14 @@ * Assume that the preferred modes are * arranged in priority order. */ - intel_ddc_get_modes(connector, intel_sdvo->i2c); - if (list_empty(&connector->probed_modes) == false) - goto end; + intel_ddc_get_modes(connector, &intel_sdvo->ddc); - /* Fetch modes from VBT */ + /* + * Fetch modes from VBT. For SDVO prefer the VBT mode since some + * SDVO->LVDS transcoders can't cope with the EDID mode. Since + * drm_mode_probed_add adds the mode at the head of the list we add it + * last. + */ if (dev_priv->sdvo_lvds_vbt_mode != NULL) { newmode = drm_mode_duplicate(connector->dev, dev_priv->sdvo_lvds_vbt_mode); @@ -1759,7 +1764,6 @@ } } -end: list_for_each_entry(newmode, &connector->probed_modes, head) { if (newmode->type & DRM_MODE_TYPE_PREFERRED) { intel_sdvo->sdvo_lvds_fixed_mode = @@ -2704,7 +2708,6 @@ struct intel_sdvo *intel_sdvo; u32 hotplug_mask; int i; - intel_sdvo = kzalloc(sizeof(struct intel_sdvo), GFP_KERNEL); if (!intel_sdvo) return false; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_debugfs.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_debugfs.c @@ -103,7 +103,7 @@ static void describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj) { - seq_printf(m, "%p: %s%s %8zdKiB %04x %04x %d %d %d%s%s%s", + seq_printf(m, "%pK: %s%s %8zdKiB %04x %04x %d %d %d%s%s%s", &obj->base, get_pin_flag(obj), get_tiling_flag(obj), @@ -691,7 +691,7 @@ seq_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec, error->time.tv_usec); - seq_printf(m, "Kernel: " UTS_RELEASE); + seq_printf(m, "Kernel: " UTS_RELEASE "\n"); seq_printf(m, "PCI ID: 0x%04x\n", dev->pci_device); seq_printf(m, "EIR: 0x%08x\n", error->eir); seq_printf(m, "IER: 0x%08x\n", error->ier); @@ -888,7 +888,7 @@ u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS); u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS); u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP); - u32 rpstat; + u32 rpstat, cagf; u32 rpupei, rpcurup, rpprevup; u32 rpdownei, rpcurdown, rpprevdown; int max_freq; @@ -907,6 +907,11 @@ rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI); rpcurdown = I915_READ(GEN6_RP_CUR_DOWN); rpprevdown = I915_READ(GEN6_RP_PREV_DOWN); + if (IS_HASWELL(dev)) + cagf = (rpstat & HSW_CAGF_MASK) >> HSW_CAGF_SHIFT; + else + cagf = (rpstat & GEN6_CAGF_MASK) >> GEN6_CAGF_SHIFT; + cagf *= GT_FREQUENCY_MULTIPLIER; gen6_gt_force_wake_put(dev_priv); mutex_unlock(&dev->struct_mutex); @@ -919,8 +924,7 @@ gt_perf_status & 0xff); seq_printf(m, "Render p-state limit: %d\n", rp_state_limits & 0xff); - seq_printf(m, "CAGF: %dMHz\n", ((rpstat & GEN6_CAGF_MASK) >> - GEN6_CAGF_SHIFT) * GT_FREQUENCY_MULTIPLIER); + seq_printf(m, "CAGF: %dMHz\n", cagf); seq_printf(m, "RP CUR UP EI: %dus\n", rpupei & GEN6_CURICONT_MASK); seq_printf(m, "RP CUR UP: %dus\n", rpcurup & --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_dma.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_dma.c @@ -1465,6 +1465,13 @@ dev_priv->dev = dev; dev_priv->info = info; + spin_lock_init(&dev_priv->irq_lock); + spin_lock_init(&dev_priv->error_lock); + spin_lock_init(&dev_priv->rps.lock); + spin_lock_init(&dev_priv->dpio_lock); + spin_lock_init(&dev_priv->gt_lock); + mutex_init(&dev_priv->rps.hw_lock); + i915_dump_device_info(dev_priv); if (i915_get_bridge_dev(dev)) { @@ -1554,6 +1561,8 @@ intel_detect_pch(dev); intel_irq_init(dev); + intel_pm_init(dev); + intel_gt_sanitize(dev); intel_gt_init(dev); /* Try to make sure MCHBAR is enabled before poking at it */ @@ -1579,21 +1588,7 @@ if (!IS_I945G(dev) && !IS_I945GM(dev)) pci_enable_msi(dev->pdev); - spin_lock_init(&dev_priv->irq_lock); - spin_lock_init(&dev_priv->error_lock); - spin_lock_init(&dev_priv->rps.lock); - spin_lock_init(&dev_priv->dpio_lock); - - mutex_init(&dev_priv->rps.hw_lock); - - if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) - dev_priv->num_pipe = 3; - else if (IS_MOBILE(dev) || !IS_GEN2(dev)) - dev_priv->num_pipe = 2; - else - dev_priv->num_pipe = 1; - - ret = drm_vblank_init(dev, dev_priv->num_pipe); + ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes); if (ret) goto out_gem_unload; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_panel.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_panel.c @@ -295,6 +295,17 @@ { struct drm_i915_private *dev_priv = dev->dev_private; + /* + * Do not disable backlight on the vgaswitcheroo path. When switching + * away from i915, the other client may depend on i915 to handle the + * backlight. This will leave the backlight on unnecessarily when + * another client is not activated. + */ + if (dev->switch_power_state == DRM_SWITCH_POWER_CHANGING) { + DRM_DEBUG_DRIVER("Skipping backlight disable on vga switch\n"); + return; + } + dev_priv->backlight_enabled = false; intel_panel_actually_set_backlight(dev, 0); @@ -335,7 +346,7 @@ if (tmp & BLM_PWM_ENABLE) goto set_level; - if (dev_priv->num_pipe == 3) + if (INTEL_INFO(dev)->num_pipes == 3) tmp &= ~BLM_PIPE_SELECT_IVB; else tmp &= ~BLM_PIPE_SELECT; @@ -347,7 +358,8 @@ POSTING_READ(reg); I915_WRITE(reg, tmp | BLM_PWM_ENABLE); - if (HAS_PCH_SPLIT(dev)) { + if (HAS_PCH_SPLIT(dev) && + !(dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)) { tmp = I915_READ(BLC_PWM_PCH_CTL1); tmp |= BLM_PCH_PWM_ENABLE; tmp &= ~BLM_PCH_OVERRIDE_ENABLE; @@ -422,6 +434,9 @@ intel_panel_init_backlight(dev); + if (WARN_ON(dev_priv->backlight)) + return -ENODEV; + memset(&props, 0, sizeof(props)); props.type = BACKLIGHT_RAW; props.max_brightness = _intel_panel_get_max_backlight(dev); @@ -447,8 +462,10 @@ void intel_panel_destroy_backlight(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; - if (dev_priv->backlight) + if (dev_priv->backlight) { backlight_device_unregister(dev_priv->backlight); + dev_priv->backlight = NULL; + } } #else int intel_panel_setup_backlight(struct drm_connector *connector) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_ringbuffer.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -486,9 +486,6 @@ struct pipe_control *pc = ring->private; struct drm_i915_gem_object *obj; - if (!ring->private) - return; - obj = pc->obj; kunmap(sg_page(obj->pages->sgl)); @@ -496,7 +493,6 @@ drm_gem_object_unreference(&obj->base); kfree(pc); - ring->private = NULL; } static int init_render_ring(struct intel_ring_buffer *ring) @@ -567,7 +563,10 @@ if (HAS_BROKEN_CS_TLB(dev)) drm_gem_object_unreference(to_gem_object(ring->private)); - cleanup_pipe_control(ring); + if (INTEL_INFO(dev)->gen >= 5) + cleanup_pipe_control(ring); + + ring->private = NULL; } static void @@ -875,6 +874,18 @@ I915_WRITE(mmio, (u32)ring->status_page.gfx_addr); POSTING_READ(mmio); + + /* Flush the TLB for this page */ + if (INTEL_INFO(dev)->gen >= 6) { + u32 reg = RING_INSTPM(ring->mmio_base); + I915_WRITE(reg, + _MASKED_BIT_ENABLE(INSTPM_TLB_INVALIDATE | + INSTPM_SYNC_FLUSH)); + if (wait_for((I915_READ(reg) & INSTPM_SYNC_FLUSH) == 0, + 1000)) + DRM_ERROR("%s: wait for SyncFlush to complete for TLB invalidation timed out\n", + ring->name); + } } static int --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_drv.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_drv.h @@ -85,7 +85,7 @@ #define I915_GEM_GPU_DOMAINS (~(I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT)) -#define for_each_pipe(p) for ((p) = 0; (p) < dev_priv->num_pipe; (p)++) +#define for_each_pipe(p) for ((p) = 0; (p) < INTEL_INFO(dev)->num_pipes; (p)++) #define for_each_encoder_on_crtc(dev, __crtc, intel_encoder) \ list_for_each_entry((intel_encoder), &(dev)->mode_config.encoder_list, base.head) \ @@ -318,6 +318,7 @@ DEV_INFO_FLAG(has_llc) struct intel_device_info { + u8 num_pipes:3; u8 gen; u8 is_mobile:1; u8 is_i85x:1; @@ -393,6 +394,7 @@ #define QUIRK_PIPEA_FORCE (1<<0) #define QUIRK_LVDS_SSC_DISABLE (1<<1) #define QUIRK_INVERT_BRIGHTNESS (1<<2) +#define QUIRK_NO_PCH_PWM_ENABLE (1<<3) struct intel_fbdev; struct intel_fbc_work; @@ -673,7 +675,6 @@ u32 hotplug_supported_mask; struct work_struct hotplug_work; - int num_pipe; int num_pch_pll; /* For hangcheck timer */ @@ -711,6 +712,7 @@ unsigned int int_crt_support:1; unsigned int lvds_use_ssc:1; unsigned int display_clock_mode:1; + unsigned int fdi_rx_polarity_inverted:1; int lvds_ssc_freq; unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */ unsigned int lvds_val; /* used for checking LVDS channel mode */ @@ -774,6 +776,7 @@ unsigned long gtt_start; unsigned long gtt_mappable_end; unsigned long gtt_end; + unsigned long stolen_base; /* limited to low memory (32-bit) */ struct io_mapping *gtt_mapping; phys_addr_t gtt_base_addr; @@ -919,7 +922,7 @@ bool hw_contexts_disabled; uint32_t hw_context_size; - bool fdi_rx_polarity_reversed; + u32 fdi_rx_config; struct i915_suspend_saved_registers regfile; @@ -1227,6 +1230,8 @@ #define HAS_PIPE_CONTROL(dev) (INTEL_INFO(dev)->gen >= 5) +#define HAS_DDI(dev) (IS_HASWELL(dev)) + #define INTEL_PCH_DEVICE_ID_MASK 0xff00 #define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00 #define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00 @@ -1323,8 +1328,9 @@ void i915_handle_error(struct drm_device *dev, bool wedged); extern void intel_irq_init(struct drm_device *dev); +extern void intel_pm_init(struct drm_device *dev); extern void intel_gt_init(struct drm_device *dev); -extern void intel_gt_reset(struct drm_device *dev); +extern void intel_gt_sanitize(struct drm_device *dev); void i915_error_state_free(struct kref *error_ref); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_lvds.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_lvds.c @@ -556,7 +556,6 @@ if (!IS_ERR_OR_NULL(lvds_connector->base.edid)) kfree(lvds_connector->base.edid); - intel_panel_destroy_backlight(connector->dev); intel_panel_fini(&lvds_connector->base.panel); drm_sysfs_connector_remove(connector); @@ -744,10 +743,10 @@ }, { .callback = intel_no_lvds_dmi_callback, - .ident = "Hewlett-Packard HP t5740e Thin Client", + .ident = "Hewlett-Packard HP t5740", .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP t5740e Thin Client"), + DMI_MATCH(DMI_PRODUCT_NAME, " t5740"), }, }, { @@ -790,6 +789,14 @@ DMI_MATCH(DMI_PRODUCT_NAME, "X7SPA-H"), }, }, + { + .callback = intel_no_lvds_dmi_callback, + .ident = "Fujitsu Esprimo Q900", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), + DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Q900"), + }, + }, { } /* terminating entry */ }; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_crt.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_crt.c @@ -45,6 +45,9 @@ struct intel_crt { struct intel_encoder base; + /* DPMS state is stored in the connector, which we need in the + * encoder's enable/disable callbacks */ + struct intel_connector *connector; bool force_hotplug_required; u32 adpa_reg; }; @@ -81,29 +84,6 @@ return true; } -static void intel_disable_crt(struct intel_encoder *encoder) -{ - struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; - struct intel_crt *crt = intel_encoder_to_crt(encoder); - u32 temp; - - temp = I915_READ(crt->adpa_reg); - temp &= ~(ADPA_HSYNC_CNTL_DISABLE | ADPA_VSYNC_CNTL_DISABLE); - temp &= ~ADPA_DAC_ENABLE; - I915_WRITE(crt->adpa_reg, temp); -} - -static void intel_enable_crt(struct intel_encoder *encoder) -{ - struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; - struct intel_crt *crt = intel_encoder_to_crt(encoder); - u32 temp; - - temp = I915_READ(crt->adpa_reg); - temp |= ADPA_DAC_ENABLE; - I915_WRITE(crt->adpa_reg, temp); -} - /* Note: The caller is required to filter out dpms modes not supported by the * platform. */ static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode) @@ -135,6 +115,19 @@ I915_WRITE(crt->adpa_reg, temp); } +static void intel_disable_crt(struct intel_encoder *encoder) +{ + intel_crt_set_dpms(encoder, DRM_MODE_DPMS_OFF); +} + +static void intel_enable_crt(struct intel_encoder *encoder) +{ + struct intel_crt *crt = intel_encoder_to_crt(encoder); + + intel_crt_set_dpms(encoder, crt->connector->base.dpms); +} + + static void intel_crt_dpms(struct drm_connector *connector, int mode) { struct drm_device *dev = connector->dev; @@ -746,6 +739,7 @@ } connector = &intel_connector->base; + crt->connector = intel_connector; drm_connector_init(dev, &intel_connector->base, &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); @@ -776,7 +770,7 @@ crt->base.disable = intel_disable_crt; crt->base.enable = intel_enable_crt; - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) crt->base.get_hw_state = intel_ddi_get_hw_state; else crt->base.get_hw_state = intel_crt_get_hw_state; @@ -800,10 +794,14 @@ dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS; /* - * TODO: find a proper way to discover whether we need to set the - * polarity reversal bit or not, instead of relying on the BIOS. + * TODO: find a proper way to discover whether we need to set the the + * polarity and link reversal bits or not, instead of relying on the + * BIOS. */ - if (HAS_PCH_LPT(dev)) - dev_priv->fdi_rx_polarity_reversed = - !!(I915_READ(_FDI_RXA_CTL) & FDI_RX_POLARITY_REVERSED_LPT); + if (HAS_PCH_LPT(dev)) { + u32 fdi_config = FDI_RX_POLARITY_REVERSED_LPT | + FDI_RX_LINK_REVERSAL_OVERRIDE; + + dev_priv->fdi_rx_config = I915_READ(_FDI_RXA_CTL) & fdi_config; + } } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_bios.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_bios.h @@ -127,7 +127,9 @@ /* bits 3 */ u8 disable_smooth_vision:1; u8 single_dvi:1; - u8 rsvd9:6; /* finish byte */ + u8 rsvd9:1; + u8 fdi_rx_polarity_inverted:1; + u8 rsvd10:4; /* finish byte */ /* bits 4 */ u8 legacy_monitor_detect; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -43,7 +43,7 @@ { struct eb_objects *eb; int count = PAGE_SIZE / sizeof(struct hlist_head) / 2; - BUILD_BUG_ON(!is_power_of_2(PAGE_SIZE / sizeof(struct hlist_head))); + BUILD_BUG_ON_NOT_POWER_OF_2(PAGE_SIZE / sizeof(struct hlist_head)); while (count > size) count >>= 1; eb = kzalloc(count*sizeof(struct hlist_head) + @@ -706,15 +706,20 @@ int count) { int i; + int relocs_total = 0; + int relocs_max = INT_MAX / sizeof(struct drm_i915_gem_relocation_entry); for (i = 0; i < count; i++) { char __user *ptr = (char __user *)(uintptr_t)exec[i].relocs_ptr; int length; /* limited by fault_in_pages_readable() */ - /* First check for malicious input causing overflow */ - if (exec[i].relocation_count > - INT_MAX / sizeof(struct drm_i915_gem_relocation_entry)) + /* First check for malicious input causing overflow in + * the worst case where we need to allocate the entire + * relocation tree as a single array. + */ + if (exec[i].relocation_count > relocs_max - relocs_total) return -EINVAL; + relocs_total += exec[i].relocation_count; length = exec[i].relocation_count * sizeof(struct drm_i915_gem_relocation_entry); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_hdmi.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_hdmi.c @@ -48,9 +48,9 @@ struct drm_i915_private *dev_priv = dev->dev_private; uint32_t enabled_bits; - enabled_bits = IS_HASWELL(dev) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE; + enabled_bits = HAS_DDI(dev) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE; - WARN(I915_READ(intel_hdmi->sdvox_reg) & enabled_bits, + WARN(I915_READ(intel_hdmi->hdmi_reg) & enabled_bits, "HDMI port enabled, expecting disabled\n"); } @@ -391,7 +391,7 @@ return; } - switch (intel_hdmi->sdvox_reg) { + switch (intel_hdmi->hdmi_reg) { case SDVOB: port = VIDEO_DIP_PORT_B; break; @@ -447,7 +447,7 @@ return; } - switch (intel_hdmi->sdvox_reg) { + switch (intel_hdmi->hdmi_reg) { case HDMIB: port = VIDEO_DIP_PORT_B; break; @@ -587,40 +587,40 @@ struct drm_i915_private *dev_priv = dev->dev_private; struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc); struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); - u32 sdvox; + u32 hdmi_val; - sdvox = SDVO_ENCODING_HDMI; + hdmi_val = SDVO_ENCODING_HDMI; if (!HAS_PCH_SPLIT(dev)) - sdvox |= intel_hdmi->color_range; + hdmi_val |= intel_hdmi->color_range; if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) - sdvox |= SDVO_VSYNC_ACTIVE_HIGH; + hdmi_val |= SDVO_VSYNC_ACTIVE_HIGH; if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC) - sdvox |= SDVO_HSYNC_ACTIVE_HIGH; + hdmi_val |= SDVO_HSYNC_ACTIVE_HIGH; if (intel_crtc->bpp > 24) - sdvox |= COLOR_FORMAT_12bpc; + hdmi_val |= COLOR_FORMAT_12bpc; else - sdvox |= COLOR_FORMAT_8bpc; + hdmi_val |= COLOR_FORMAT_8bpc; /* Required on CPT */ if (intel_hdmi->has_hdmi_sink && HAS_PCH_CPT(dev)) - sdvox |= HDMI_MODE_SELECT; + hdmi_val |= HDMI_MODE_SELECT; if (intel_hdmi->has_audio) { DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n", pipe_name(intel_crtc->pipe)); - sdvox |= SDVO_AUDIO_ENABLE; - sdvox |= SDVO_NULL_PACKETS_DURING_VSYNC; + hdmi_val |= SDVO_AUDIO_ENABLE; + hdmi_val |= SDVO_NULL_PACKETS_DURING_VSYNC; intel_write_eld(encoder, adjusted_mode); } if (HAS_PCH_CPT(dev)) - sdvox |= PORT_TRANS_SEL_CPT(intel_crtc->pipe); + hdmi_val |= PORT_TRANS_SEL_CPT(intel_crtc->pipe); else if (intel_crtc->pipe == PIPE_B) - sdvox |= SDVO_PIPE_B_SELECT; + hdmi_val |= SDVO_PIPE_B_SELECT; - I915_WRITE(intel_hdmi->sdvox_reg, sdvox); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, hdmi_val); + POSTING_READ(intel_hdmi->hdmi_reg); intel_hdmi->set_infoframes(encoder, adjusted_mode); } @@ -633,7 +633,7 @@ struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); u32 tmp; - tmp = I915_READ(intel_hdmi->sdvox_reg); + tmp = I915_READ(intel_hdmi->hdmi_reg); if (!(tmp & SDVO_ENABLE)) return false; @@ -657,7 +657,7 @@ if (intel_hdmi->has_audio) enable_bits |= SDVO_AUDIO_ENABLE; - temp = I915_READ(intel_hdmi->sdvox_reg); + temp = I915_READ(intel_hdmi->hdmi_reg); /* HW workaround for IBX, we need to move the port to transcoder A * before disabling it. */ @@ -674,21 +674,21 @@ * we do this anyway which shows more stable in testing. */ if (HAS_PCH_SPLIT(dev)) { - I915_WRITE(intel_hdmi->sdvox_reg, temp & ~SDVO_ENABLE); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp & ~SDVO_ENABLE); + POSTING_READ(intel_hdmi->hdmi_reg); } temp |= enable_bits; - I915_WRITE(intel_hdmi->sdvox_reg, temp); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp); + POSTING_READ(intel_hdmi->hdmi_reg); /* HW workaround, need to write this twice for issue that may result * in first write getting masked. */ if (HAS_PCH_SPLIT(dev)) { - I915_WRITE(intel_hdmi->sdvox_reg, temp); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp); + POSTING_READ(intel_hdmi->hdmi_reg); } } @@ -700,7 +700,7 @@ u32 temp; u32 enable_bits = SDVO_ENABLE | SDVO_AUDIO_ENABLE; - temp = I915_READ(intel_hdmi->sdvox_reg); + temp = I915_READ(intel_hdmi->hdmi_reg); /* HW workaround for IBX, we need to move the port to transcoder A * before disabling it. */ @@ -710,12 +710,12 @@ if (temp & SDVO_PIPE_B_SELECT) { temp &= ~SDVO_PIPE_B_SELECT; - I915_WRITE(intel_hdmi->sdvox_reg, temp); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp); + POSTING_READ(intel_hdmi->hdmi_reg); /* Again we need to write this twice. */ - I915_WRITE(intel_hdmi->sdvox_reg, temp); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp); + POSTING_READ(intel_hdmi->hdmi_reg); /* Transcoder selection bits only update * effectively on vblank. */ @@ -730,21 +730,21 @@ * we do this anyway which shows more stable in testing. */ if (HAS_PCH_SPLIT(dev)) { - I915_WRITE(intel_hdmi->sdvox_reg, temp & ~SDVO_ENABLE); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp & ~SDVO_ENABLE); + POSTING_READ(intel_hdmi->hdmi_reg); } temp &= ~enable_bits; - I915_WRITE(intel_hdmi->sdvox_reg, temp); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp); + POSTING_READ(intel_hdmi->hdmi_reg); /* HW workaround, need to write this twice for issue that may result * in first write getting masked. */ if (HAS_PCH_SPLIT(dev)) { - I915_WRITE(intel_hdmi->sdvox_reg, temp); - POSTING_READ(intel_hdmi->sdvox_reg); + I915_WRITE(intel_hdmi->hdmi_reg, temp); + POSTING_READ(intel_hdmi->hdmi_reg); } } @@ -769,27 +769,6 @@ return true; } -static bool g4x_hdmi_connected(struct intel_hdmi *intel_hdmi) -{ - struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi); - struct drm_i915_private *dev_priv = dev->dev_private; - uint32_t bit; - - switch (intel_hdmi->sdvox_reg) { - case SDVOB: - bit = HDMIB_HOTPLUG_LIVE_STATUS; - break; - case SDVOC: - bit = HDMIC_HOTPLUG_LIVE_STATUS; - break; - default: - bit = 0; - break; - } - - return I915_READ(PORT_HOTPLUG_STAT) & bit; -} - static enum drm_connector_status intel_hdmi_detect(struct drm_connector *connector, bool force) { @@ -801,9 +780,6 @@ struct edid *edid; enum drm_connector_status status = connector_status_disconnected; - if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi)) - return status; - intel_hdmi->has_hdmi_sink = false; intel_hdmi->has_audio = false; edid = drm_get_edid(connector, @@ -1013,7 +989,7 @@ intel_hdmi->set_infoframes = cpt_set_infoframes; } - if (IS_HASWELL(dev)) + if (HAS_DDI(dev)) intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; else intel_connector->get_hw_state = intel_connector_get_hw_state; @@ -1033,7 +1009,7 @@ } } -void intel_hdmi_init(struct drm_device *dev, int sdvox_reg, enum port port) +void intel_hdmi_init(struct drm_device *dev, int hdmi_reg, enum port port) { struct intel_digital_port *intel_dig_port; struct intel_encoder *intel_encoder; @@ -1066,7 +1042,7 @@ intel_encoder->cloneable = false; intel_dig_port->port = port; - intel_dig_port->hdmi.sdvox_reg = sdvox_reg; + intel_dig_port->hdmi.hdmi_reg = hdmi_reg; intel_dig_port->dp.output_reg = 0; intel_hdmi_init_connector(intel_dig_port, intel_connector); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_pm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_pm.c @@ -2572,7 +2572,7 @@ I915_WRITE(GEN6_RC_SLEEP, 0); I915_WRITE(GEN6_RC1e_THRESHOLD, 1000); I915_WRITE(GEN6_RC6_THRESHOLD, 50000); - I915_WRITE(GEN6_RC6p_THRESHOLD, 100000); + I915_WRITE(GEN6_RC6p_THRESHOLD, 150000); I915_WRITE(GEN6_RC6pp_THRESHOLD, 64000); /* unused */ /* Check if we are enabling RC6 */ @@ -3560,6 +3560,7 @@ { struct drm_i915_private *dev_priv = dev->dev_private; int pipe; + uint32_t val; /* * On Ibex Peak and Cougar Point, we need to disable clock @@ -3572,8 +3573,12 @@ /* The below fixes the weird display corruption, a few pixels shifted * downward, on (only) LVDS of some HP laptops with IVY. */ - for_each_pipe(pipe) - I915_WRITE(TRANS_CHICKEN2(pipe), TRANS_CHICKEN2_TIMING_OVERRIDE); + for_each_pipe(pipe) { + val = TRANS_CHICKEN2_TIMING_OVERRIDE; + if (dev_priv->fdi_rx_polarity_inverted) + val |= TRANS_CHICKEN2_FDI_POLARITY_REVERSED; + I915_WRITE(TRANS_CHICKEN2(pipe), val); + } /* WADP0ClockGatingDisable */ for_each_pipe(pipe) { I915_WRITE(TRANS_CHICKEN1(pipe), @@ -4382,7 +4387,7 @@ gen6_gt_check_fifodbg(dev_priv); } -void intel_gt_reset(struct drm_device *dev) +void intel_gt_sanitize(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; @@ -4393,26 +4398,61 @@ if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) __gen6_gt_force_wake_mt_reset(dev_priv); } + + /* BIOS often leaves RC6 enabled, but disable it for hw init */ + if (INTEL_INFO(dev)->gen >= 6) + intel_disable_gt_powersave(dev); } void intel_gt_init(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; - spin_lock_init(&dev_priv->gt_lock); - - intel_gt_reset(dev); - if (IS_VALLEYVIEW(dev)) { dev_priv->gt.force_wake_get = vlv_force_wake_get; dev_priv->gt.force_wake_put = vlv_force_wake_put; - } else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) { + } else if (IS_HASWELL(dev)) { dev_priv->gt.force_wake_get = __gen6_gt_force_wake_mt_get; dev_priv->gt.force_wake_put = __gen6_gt_force_wake_mt_put; + } else if (IS_IVYBRIDGE(dev)) { + u32 ecobus; + + /* IVB configs may use multi-threaded forcewake */ + + /* A small trick here - if the bios hasn't configured + * MT forcewake, and if the device is in RC6, then + * force_wake_mt_get will not wake the device and the + * ECOBUS read will return zero. Which will be + * (correctly) interpreted by the test below as MT + * forcewake being disabled. + */ + mutex_lock(&dev->struct_mutex); + __gen6_gt_force_wake_mt_get(dev_priv); + ecobus = I915_READ_NOTRACE(ECOBUS); + __gen6_gt_force_wake_mt_put(dev_priv); + mutex_unlock(&dev->struct_mutex); + + if (ecobus & FORCEWAKE_MT_ENABLE) { + dev_priv->gt.force_wake_get = + __gen6_gt_force_wake_mt_get; + dev_priv->gt.force_wake_put = + __gen6_gt_force_wake_mt_put; + } else { + DRM_INFO("No MT forcewake available on Ivybridge, this can result in issues\n"); + DRM_INFO("when using vblank-synced partial screen updates.\n"); + dev_priv->gt.force_wake_get = __gen6_gt_force_wake_get; + dev_priv->gt.force_wake_put = __gen6_gt_force_wake_put; + } } else if (IS_GEN6(dev)) { dev_priv->gt.force_wake_get = __gen6_gt_force_wake_get; dev_priv->gt.force_wake_put = __gen6_gt_force_wake_put; } +} + +void intel_pm_init(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = dev->dev_private; + INIT_DELAYED_WORK(&dev_priv->rps.delayed_resume_work, intel_gen6_powersave_work); } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/i915_gem.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/i915_gem.c @@ -1164,7 +1164,8 @@ /* Manually manage the write flush as we may have not yet * retired the buffer. */ - if (obj->last_write_seqno && + if (ret == 0 && + obj->last_write_seqno && i915_seqno_passed(seqno, obj->last_write_seqno)) { obj->last_write_seqno = 0; obj->base.write_domain &= ~I915_GEM_GPU_DOMAINS; @@ -1881,6 +1882,10 @@ u32 seqno = intel_ring_get_seqno(ring); BUG_ON(ring == NULL); + if (obj->ring != ring && obj->last_write_seqno) { + /* Keep the seqno relative to the current ring */ + obj->last_write_seqno = seqno; + } obj->ring = ring; /* Add a reference if we're newly entering the active list. */ @@ -1918,9 +1923,6 @@ BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS); BUG_ON(!obj->active); - if (obj->pin_count) /* are we a framebuffer? */ - intel_mark_fb_idle(obj); - list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list); list_del_init(&obj->ring_list); @@ -2521,52 +2523,56 @@ return 0; } -static void sandybridge_write_fence_reg(struct drm_device *dev, int reg, - struct drm_i915_gem_object *obj) +static void i965_write_fence_reg(struct drm_device *dev, int reg, + struct drm_i915_gem_object *obj) { drm_i915_private_t *dev_priv = dev->dev_private; - uint64_t val; + int fence_reg; + int fence_pitch_shift; - if (obj) { - u32 size = obj->gtt_space->size; - - val = (uint64_t)((obj->gtt_offset + size - 4096) & - 0xfffff000) << 32; - val |= obj->gtt_offset & 0xfffff000; - val |= (uint64_t)((obj->stride / 128) - 1) << - SANDYBRIDGE_FENCE_PITCH_SHIFT; - - if (obj->tiling_mode == I915_TILING_Y) - val |= 1 << I965_FENCE_TILING_Y_SHIFT; - val |= I965_FENCE_REG_VALID; - } else - val = 0; + if (INTEL_INFO(dev)->gen >= 6) { + fence_reg = FENCE_REG_SANDYBRIDGE_0; + fence_pitch_shift = SANDYBRIDGE_FENCE_PITCH_SHIFT; + } else { + fence_reg = FENCE_REG_965_0; + fence_pitch_shift = I965_FENCE_PITCH_SHIFT; + } - I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + reg * 8, val); - POSTING_READ(FENCE_REG_SANDYBRIDGE_0 + reg * 8); -} + fence_reg += reg * 8; -static void i965_write_fence_reg(struct drm_device *dev, int reg, - struct drm_i915_gem_object *obj) -{ - drm_i915_private_t *dev_priv = dev->dev_private; - uint64_t val; + /* To w/a incoherency with non-atomic 64-bit register updates, + * we split the 64-bit update into two 32-bit writes. In order + * for a partial fence not to be evaluated between writes, we + * precede the update with write to turn off the fence register, + * and only enable the fence as the last step. + * + * For extra levels of paranoia, we make sure each step lands + * before applying the next step. + */ + I915_WRITE(fence_reg, 0); + POSTING_READ(fence_reg); if (obj) { u32 size = obj->gtt_space->size; + uint64_t val; val = (uint64_t)((obj->gtt_offset + size - 4096) & 0xfffff000) << 32; val |= obj->gtt_offset & 0xfffff000; - val |= ((obj->stride / 128) - 1) << I965_FENCE_PITCH_SHIFT; + val |= (uint64_t)((obj->stride / 128) - 1) << fence_pitch_shift; if (obj->tiling_mode == I915_TILING_Y) val |= 1 << I965_FENCE_TILING_Y_SHIFT; val |= I965_FENCE_REG_VALID; - } else - val = 0; - I915_WRITE64(FENCE_REG_965_0 + reg * 8, val); - POSTING_READ(FENCE_REG_965_0 + reg * 8); + I915_WRITE(fence_reg + 4, val >> 32); + POSTING_READ(fence_reg + 4); + + I915_WRITE(fence_reg + 0, val); + POSTING_READ(fence_reg); + } else { + I915_WRITE(fence_reg + 4, 0); + POSTING_READ(fence_reg + 4); + } } static void i915_write_fence_reg(struct drm_device *dev, int reg, @@ -2650,7 +2656,7 @@ { switch (INTEL_INFO(dev)->gen) { case 7: - case 6: sandybridge_write_fence_reg(dev, reg, obj); break; + case 6: case 5: case 4: i965_write_fence_reg(dev, reg, obj); break; case 3: i915_write_fence_reg(dev, reg, obj); break; @@ -3848,7 +3854,7 @@ u32 misccpctl; int i; - if (!IS_IVYBRIDGE(dev)) + if (!HAS_L3_GPU_CACHE(dev)) return; if (!dev_priv->l3_parity.remap_info) @@ -4413,7 +4419,7 @@ list_for_each_entry(obj, &dev_priv->mm.unbound_list, gtt_list) if (obj->pages_pin_count == 0) cnt += obj->base.size >> PAGE_SHIFT; - list_for_each_entry(obj, &dev_priv->mm.inactive_list, gtt_list) + list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) if (obj->pin_count == 0 && obj->pages_pin_count == 0) cnt += obj->base.size >> PAGE_SHIFT; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/i915/intel_bios.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/i915/intel_bios.c @@ -351,12 +351,14 @@ dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, general->ssc_freq); dev_priv->display_clock_mode = general->display_clock_mode; - DRM_DEBUG_KMS("BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d\n", + dev_priv->fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted; + DRM_DEBUG_KMS("BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d fdi_rx_polarity_inverted %d\n", dev_priv->int_tv_support, dev_priv->int_crt_support, dev_priv->lvds_use_ssc, dev_priv->lvds_ssc_freq, - dev_priv->display_clock_mode); + dev_priv->display_clock_mode, + dev_priv->fdi_rx_polarity_inverted); } } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/atom.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/atom.c @@ -1222,12 +1222,17 @@ int r; mutex_lock(&ctx->mutex); + /* reset data block */ + ctx->data_block = 0; /* reset reg block */ ctx->reg_block = 0; /* reset fb window */ ctx->fb_base = 0; /* reset io mode */ ctx->io_mode = ATOM_IO_MM; + /* reset divmul */ + ctx->divmul[0] = 0; + ctx->divmul[1] = 0; r = atom_execute_table_locked(ctx, index, params); mutex_unlock(&ctx->mutex); return r; @@ -1389,10 +1394,10 @@ firmware_usage = (struct _ATOM_VRAM_USAGE_BY_FIRMWARE *)(ctx->bios + data_offset); DRM_DEBUG("atom firmware requested %08x %dkb\n", - firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware, - firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb); + le32_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware), + le16_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb)); - usage_bytes = firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb * 1024; + usage_bytes = le16_to_cpu(firmware_usage->asFirmwareVramReserveInfo[0].usFirmwareUseInKb) * 1024; } ctx->scratch_size_bytes = 0; if (usage_bytes == 0) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_connectors.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_connectors.c @@ -1489,6 +1489,24 @@ .force = radeon_dvi_force, }; +static const struct drm_connector_funcs radeon_edp_connector_funcs = { + .dpms = drm_helper_connector_dpms, + .detect = radeon_dp_detect, + .fill_modes = drm_helper_probe_single_connector_modes, + .set_property = radeon_lvds_set_property, + .destroy = radeon_dp_connector_destroy, + .force = radeon_dvi_force, +}; + +static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = { + .dpms = drm_helper_connector_dpms, + .detect = radeon_dp_detect, + .fill_modes = drm_helper_probe_single_connector_modes, + .set_property = radeon_lvds_set_property, + .destroy = radeon_dp_connector_destroy, + .force = radeon_dvi_force, +}; + void radeon_add_atom_connector(struct drm_device *dev, uint32_t connector_id, @@ -1580,8 +1598,6 @@ goto failed; radeon_dig_connector->igp_lane_info = igp_lane_info; radeon_connector->con_priv = radeon_dig_connector; - drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); - drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); if (i2c_bus->valid) { /* add DP i2c bus */ if (connector_type == DRM_MODE_CONNECTOR_eDP) @@ -1598,6 +1614,10 @@ case DRM_MODE_CONNECTOR_VGA: case DRM_MODE_CONNECTOR_DVIA: default: + drm_connector_init(dev, &radeon_connector->base, + &radeon_dp_connector_funcs, connector_type); + drm_connector_helper_add(&radeon_connector->base, + &radeon_dp_connector_helper_funcs); connector->interlace_allowed = true; connector->doublescan_allowed = true; radeon_connector->dac_load_detect = true; @@ -1610,6 +1630,10 @@ case DRM_MODE_CONNECTOR_HDMIA: case DRM_MODE_CONNECTOR_HDMIB: case DRM_MODE_CONNECTOR_DisplayPort: + drm_connector_init(dev, &radeon_connector->base, + &radeon_dp_connector_funcs, connector_type); + drm_connector_helper_add(&radeon_connector->base, + &radeon_dp_connector_helper_funcs); drm_object_attach_property(&radeon_connector->base.base, rdev->mode_info.underscan_property, UNDERSCAN_OFF); @@ -1634,6 +1658,10 @@ break; case DRM_MODE_CONNECTOR_LVDS: case DRM_MODE_CONNECTOR_eDP: + drm_connector_init(dev, &radeon_connector->base, + &radeon_lvds_bridge_connector_funcs, connector_type); + drm_connector_helper_add(&radeon_connector->base, + &radeon_dp_connector_helper_funcs); drm_object_attach_property(&radeon_connector->base.base, dev->mode_config.scaling_mode_property, DRM_MODE_SCALE_FULLSCREEN); @@ -1797,7 +1825,7 @@ goto failed; radeon_dig_connector->igp_lane_info = igp_lane_info; radeon_connector->con_priv = radeon_dig_connector; - drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); + drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type); drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); if (i2c_bus->valid) { /* add DP i2c bus */ --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_combios.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_combios.c @@ -147,7 +147,7 @@ enum radeon_combios_table_offset table) { struct radeon_device *rdev = dev->dev_private; - int rev; + int rev, size; uint16_t offset = 0, check_offset; if (!rdev->bios) @@ -156,174 +156,106 @@ switch (table) { /* absolute offset tables */ case COMBIOS_ASIC_INIT_1_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0xc); - if (check_offset) - offset = check_offset; + check_offset = 0xc; break; case COMBIOS_BIOS_SUPPORT_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x14); - if (check_offset) - offset = check_offset; + check_offset = 0x14; break; case COMBIOS_DAC_PROGRAMMING_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x2a); - if (check_offset) - offset = check_offset; + check_offset = 0x2a; break; case COMBIOS_MAX_COLOR_DEPTH_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x2c); - if (check_offset) - offset = check_offset; + check_offset = 0x2c; break; case COMBIOS_CRTC_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x2e); - if (check_offset) - offset = check_offset; + check_offset = 0x2e; break; case COMBIOS_PLL_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x30); - if (check_offset) - offset = check_offset; + check_offset = 0x30; break; case COMBIOS_TV_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x32); - if (check_offset) - offset = check_offset; + check_offset = 0x32; break; case COMBIOS_DFP_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x34); - if (check_offset) - offset = check_offset; + check_offset = 0x34; break; case COMBIOS_HW_CONFIG_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x36); - if (check_offset) - offset = check_offset; + check_offset = 0x36; break; case COMBIOS_MULTIMEDIA_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x38); - if (check_offset) - offset = check_offset; + check_offset = 0x38; break; case COMBIOS_TV_STD_PATCH_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x3e); - if (check_offset) - offset = check_offset; + check_offset = 0x3e; break; case COMBIOS_LCD_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x40); - if (check_offset) - offset = check_offset; + check_offset = 0x40; break; case COMBIOS_MOBILE_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x42); - if (check_offset) - offset = check_offset; + check_offset = 0x42; break; case COMBIOS_PLL_INIT_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x46); - if (check_offset) - offset = check_offset; + check_offset = 0x46; break; case COMBIOS_MEM_CONFIG_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x48); - if (check_offset) - offset = check_offset; + check_offset = 0x48; break; case COMBIOS_SAVE_MASK_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x4a); - if (check_offset) - offset = check_offset; + check_offset = 0x4a; break; case COMBIOS_HARDCODED_EDID_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x4c); - if (check_offset) - offset = check_offset; + check_offset = 0x4c; break; case COMBIOS_ASIC_INIT_2_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x4e); - if (check_offset) - offset = check_offset; + check_offset = 0x4e; break; case COMBIOS_CONNECTOR_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x50); - if (check_offset) - offset = check_offset; + check_offset = 0x50; break; case COMBIOS_DYN_CLK_1_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x52); - if (check_offset) - offset = check_offset; + check_offset = 0x52; break; case COMBIOS_RESERVED_MEM_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x54); - if (check_offset) - offset = check_offset; + check_offset = 0x54; break; case COMBIOS_EXT_TMDS_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x58); - if (check_offset) - offset = check_offset; + check_offset = 0x58; break; case COMBIOS_MEM_CLK_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x5a); - if (check_offset) - offset = check_offset; + check_offset = 0x5a; break; case COMBIOS_EXT_DAC_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x5c); - if (check_offset) - offset = check_offset; + check_offset = 0x5c; break; case COMBIOS_MISC_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x5e); - if (check_offset) - offset = check_offset; + check_offset = 0x5e; break; case COMBIOS_CRT_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x60); - if (check_offset) - offset = check_offset; + check_offset = 0x60; break; case COMBIOS_INTEGRATED_SYSTEM_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x62); - if (check_offset) - offset = check_offset; + check_offset = 0x62; break; case COMBIOS_COMPONENT_VIDEO_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x64); - if (check_offset) - offset = check_offset; + check_offset = 0x64; break; case COMBIOS_FAN_SPEED_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x66); - if (check_offset) - offset = check_offset; + check_offset = 0x66; break; case COMBIOS_OVERDRIVE_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x68); - if (check_offset) - offset = check_offset; + check_offset = 0x68; break; case COMBIOS_OEM_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x6a); - if (check_offset) - offset = check_offset; + check_offset = 0x6a; break; case COMBIOS_DYN_CLK_2_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x6c); - if (check_offset) - offset = check_offset; + check_offset = 0x6c; break; case COMBIOS_POWER_CONNECTOR_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x6e); - if (check_offset) - offset = check_offset; + check_offset = 0x6e; break; case COMBIOS_I2C_INFO_TABLE: - check_offset = RBIOS16(rdev->bios_header_start + 0x70); - if (check_offset) - offset = check_offset; + check_offset = 0x70; break; /* relative offset tables */ case COMBIOS_ASIC_INIT_3_TABLE: /* offset from misc info */ @@ -439,11 +371,16 @@ } break; default: + check_offset = 0; break; } - return offset; + size = RBIOS8(rdev->bios_header_start + 0x6); + /* check absolute offset tables */ + if (table < COMBIOS_ASIC_INIT_3_TABLE && check_offset && check_offset < size) + offset = RBIOS16(rdev->bios_header_start + check_offset); + return offset; } bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev) @@ -965,11 +902,26 @@ dac = RBIOS8(dac_info + 0x3) & 0xf; p_dac->ps2_pdac_adj = (bg << 8) | (dac); } - /* if the values are all zeros, use the table */ - if (p_dac->ps2_pdac_adj) + /* if the values are zeros, use the table */ + if ((dac == 0) || (bg == 0)) + found = 0; + else found = 1; } + /* quirks */ + /* Radeon 7000 (RV100) */ + if (((dev->pdev->device == 0x5159) && + (dev->pdev->subsystem_vendor == 0x174B) && + (dev->pdev->subsystem_device == 0x7c28)) || + /* Radeon 9100 (R200) */ + ((dev->pdev->device == 0x514D) && + (dev->pdev->subsystem_vendor == 0x174B) && + (dev->pdev->subsystem_device == 0x7149))) { + /* vbios value is bad, use the default */ + found = 0; + } + if (!found) /* fallback to defaults */ radeon_legacy_get_primary_dac_info_from_table(rdev, p_dac); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r300.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r300.c @@ -1382,6 +1382,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r100_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -1516,9 +1522,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_irq_kms.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_irq_kms.c @@ -241,9 +241,6 @@ { int r = 0; - INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); - INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); - spin_lock_init(&rdev->irq.lock); r = drm_vblank_init(rdev->ddev, rdev->num_crtc); if (r) { @@ -259,12 +256,18 @@ dev_info(rdev->dev, "radeon: using MSI.\n"); } } + + INIT_WORK(&rdev->hotplug_work, radeon_hotplug_work_func); + INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); + rdev->irq.installed = true; r = drm_irq_install(rdev->ddev); if (r) { rdev->irq.installed = false; + flush_work(&rdev->hotplug_work); return r; } + DRM_INFO("radeon: irq initialized.\n"); return 0; } @@ -284,8 +287,8 @@ rdev->irq.installed = false; if (rdev->msi_enabled) pci_disable_msi(rdev->pdev); + flush_work(&rdev->hotplug_work); } - flush_work(&rdev->hotplug_work); } /** @@ -400,6 +403,9 @@ { unsigned long irqflags; + if (!rdev->ddev->irq_enabled) + return; + spin_lock_irqsave(&rdev->irq.lock, irqflags); rdev->irq.afmt[block] = true; radeon_irq_set(rdev); @@ -419,6 +425,9 @@ { unsigned long irqflags; + if (!rdev->ddev->irq_enabled) + return; + spin_lock_irqsave(&rdev->irq.lock, irqflags); rdev->irq.afmt[block] = false; radeon_irq_set(rdev); @@ -438,6 +447,9 @@ unsigned long irqflags; int i; + if (!rdev->ddev->irq_enabled) + return; + spin_lock_irqsave(&rdev->irq.lock, irqflags); for (i = 0; i < RADEON_MAX_HPD_PINS; ++i) rdev->irq.hpd[i] |= !!(hpd_mask & (1 << i)); @@ -458,6 +470,9 @@ unsigned long irqflags; int i; + if (!rdev->ddev->irq_enabled) + return; + spin_lock_irqsave(&rdev->irq.lock, irqflags); for (i = 0; i < RADEON_MAX_HPD_PINS; ++i) rdev->irq.hpd[i] &= !(hpd_mask & (1 << i)); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_device.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_device.c @@ -434,18 +434,17 @@ return false; /* first check CRTCs */ - if (ASIC_IS_DCE41(rdev)) { + if (ASIC_IS_DCE4(rdev)) { reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET); - if (reg & EVERGREEN_CRTC_MASTER_EN) - return true; - } else if (ASIC_IS_DCE4(rdev)) { - reg = RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC0_REGISTER_OFFSET) | - RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC1_REGISTER_OFFSET) | - RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET) | - RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET) | - RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET) | - RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET); + if (rdev->num_crtc >= 4) { + reg |= RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC2_REGISTER_OFFSET) | + RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC3_REGISTER_OFFSET); + } + if (rdev->num_crtc >= 6) { + reg |= RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC4_REGISTER_OFFSET) | + RREG32(EVERGREEN_CRTC_CONTROL + EVERGREEN_CRTC5_REGISTER_OFFSET); + } if (reg & EVERGREEN_CRTC_MASTER_EN) return true; } else if (ASIC_IS_AVIVO(rdev)) { @@ -1135,13 +1134,22 @@ return r; } if ((radeon_testing & 1)) { - radeon_test_moves(rdev); + if (rdev->accel_working) + radeon_test_moves(rdev); + else + DRM_INFO("radeon: acceleration disabled, skipping move tests\n"); } if ((radeon_testing & 2)) { - radeon_test_syncing(rdev); + if (rdev->accel_working) + radeon_test_syncing(rdev); + else + DRM_INFO("radeon: acceleration disabled, skipping sync tests\n"); } if (radeon_benchmarking) { - radeon_benchmark(rdev, radeon_benchmarking); + if (rdev->accel_working) + radeon_benchmark(rdev, radeon_benchmarking); + else + DRM_INFO("radeon: acceleration disabled, skipping benchmarks\n"); } return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r520.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r520.c @@ -194,6 +194,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + rs600_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -297,9 +303,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/atombios_crtc.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/atombios_crtc.c @@ -252,8 +252,6 @@ radeon_crtc->enabled = true; /* adjust pm to dpms changes BEFORE enabling crtcs */ radeon_pm_compute_clocks(rdev); - if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set) - atombios_powergate_crtc(crtc, ATOM_DISABLE); atombios_enable_crtc(crtc, ATOM_ENABLE); if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev)) atombios_enable_crtc_memreq(crtc, ATOM_ENABLE); @@ -271,8 +269,6 @@ atombios_enable_crtc_memreq(crtc, ATOM_DISABLE); atombios_enable_crtc(crtc, ATOM_DISABLE); radeon_crtc->enabled = false; - if (ASIC_IS_DCE6(rdev) && !radeon_crtc->in_mode_set) - atombios_powergate_crtc(crtc, ATOM_ENABLE); /* adjust pm to dpms changes AFTER disabling crtcs */ radeon_pm_compute_clocks(rdev); break; @@ -561,6 +557,9 @@ /* use frac fb div on APUs */ if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE61(rdev)) radeon_crtc->pll_flags |= RADEON_PLL_USE_FRAC_FB_DIV; + /* use frac fb div on RS780/RS880 */ + if ((rdev->family == CHIP_RS780) || (rdev->family == CHIP_RS880)) + radeon_crtc->pll_flags |= RADEON_PLL_USE_FRAC_FB_DIV; if (ASIC_IS_DCE32(rdev) && mode->clock > 165000) radeon_crtc->pll_flags |= RADEON_PLL_USE_FRAC_FB_DIV; } else { @@ -1844,6 +1843,8 @@ int i; atombios_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); + if (ASIC_IS_DCE6(rdev)) + atombios_powergate_crtc(crtc, ATOM_ENABLE); for (i = 0; i < rdev->num_crtc; i++) { if (rdev->mode_info.crtcs[i] && --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r600.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r600.c @@ -2791,6 +2791,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r = r600_irq_init(rdev); if (r) { DRM_ERROR("radeon: IH init failed (%d).\n", r); @@ -2945,10 +2951,6 @@ if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; - rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_drv.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_drv.c @@ -123,6 +123,15 @@ int flags); struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, struct dma_buf *dma_buf); +struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj); +struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev, + size_t size, + struct sg_table *sg); +int radeon_gem_prime_pin(struct drm_gem_object *obj); +void *radeon_gem_prime_vmap(struct drm_gem_object *obj); +void radeon_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); +extern long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg); #if defined(CONFIG_DEBUG_FS) int radeon_debugfs_init(struct drm_minor *minor); @@ -397,8 +406,13 @@ .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, - .gem_prime_export = radeon_gem_prime_export, - .gem_prime_import = radeon_gem_prime_import, + .gem_prime_export = drm_gem_prime_export, + .gem_prime_import = drm_gem_prime_import, + .gem_prime_pin = radeon_gem_prime_pin, + .gem_prime_get_sg_table = radeon_gem_prime_get_sg_table, + .gem_prime_import_sg_table = radeon_gem_prime_import_sg_table, + .gem_prime_vmap = radeon_gem_prime_vmap, + .gem_prime_vunmap = radeon_gem_prime_vunmap, .name = DRIVER_NAME, .desc = DRIVER_DESC, --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_kms.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_kms.c @@ -50,9 +50,13 @@ if (rdev == NULL) return 0; + if (rdev->rmmio == NULL) + goto done_free; radeon_acpi_fini(rdev); radeon_modeset_fini(rdev); radeon_device_fini(rdev); + +done_free: kfree(rdev); dev->dev_private = NULL; return 0; @@ -377,6 +381,9 @@ else return -EINVAL; break; + case RADEON_INFO_SI_CP_DMA_COMPUTE: + value = 1; + break; default: DRM_DEBUG_KMS("Invalid request %d\n", info->request); return -EINVAL; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r500_reg.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r500_reg.h @@ -357,7 +357,9 @@ #define AVIVO_D1CRTC_FRAME_COUNT 0x60a4 #define AVIVO_D1CRTC_STEREO_CONTROL 0x60c4 +#define AVIVO_D1MODE_MASTER_UPDATE_LOCK 0x60e0 #define AVIVO_D1MODE_MASTER_UPDATE_MODE 0x60e4 +#define AVIVO_D1CRTC_UPDATE_LOCK 0x60e8 /* master controls */ #define AVIVO_DC_CRTC_MASTER_EN 0x60f8 --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_pm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_pm.c @@ -169,7 +169,7 @@ /* starting with BTC, there is one state that is used for both * MH and SH. Difference is that we always use the high clock index for - * mclk. + * mclk and vddci. */ if ((rdev->pm.pm_method == PM_METHOD_PROFILE) && (rdev->family >= CHIP_BARTS) && @@ -843,7 +843,11 @@ struct radeon_device *rdev = dev->dev_private; seq_printf(m, "default engine clock: %u0 kHz\n", rdev->pm.default_sclk); - seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev)); + /* radeon_get_engine_clock is not reliable on APUs so just print the current clock */ + if ((rdev->family >= CHIP_PALM) && (rdev->flags & RADEON_IS_IGP)) + seq_printf(m, "current engine clock: %u0 kHz\n", rdev->pm.current_sclk); + else + seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev)); seq_printf(m, "default memory clock: %u0 kHz\n", rdev->pm.default_mclk); if (rdev->asic->pm.get_memory_clock) seq_printf(m, "current memory clock: %u0 kHz\n", radeon_get_memory_clock(rdev)); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/rv515.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/rv515.c @@ -303,8 +303,10 @@ tmp = RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i]); if (!(tmp & AVIVO_CRTC_DISP_READ_REQUEST_DISABLE)) { radeon_wait_for_vblank(rdev, i); + WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 1); tmp |= AVIVO_CRTC_DISP_READ_REQUEST_DISABLE; WREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i], tmp); + WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 0); } /* wait for the next frame */ frame_count = radeon_get_vblank_counter(rdev, i); @@ -313,6 +315,15 @@ break; udelay(1); } + + /* XXX this is a hack to avoid strange behavior with EFI on certain systems */ + WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + tmp = RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i]); + tmp &= ~AVIVO_CRTC_EN; + WREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[i], tmp); + WREG32(AVIVO_D1CRTC_UPDATE_LOCK + crtc_offsets[i], 0); + save->crtc_enabled[i] = false; + /* ***** */ } else { save->crtc_enabled[i] = false; } @@ -338,6 +349,22 @@ } /* wait for the MC to settle */ udelay(100); + + /* lock double buffered regs */ + for (i = 0; i < rdev->num_crtc; i++) { + if (save->crtc_enabled[i]) { + tmp = RREG32(AVIVO_D1GRPH_UPDATE + crtc_offsets[i]); + if (!(tmp & AVIVO_D1GRPH_UPDATE_LOCK)) { + tmp |= AVIVO_D1GRPH_UPDATE_LOCK; + WREG32(AVIVO_D1GRPH_UPDATE + crtc_offsets[i], tmp); + } + tmp = RREG32(AVIVO_D1MODE_MASTER_UPDATE_LOCK + crtc_offsets[i]); + if (!(tmp & 1)) { + tmp |= 1; + WREG32(AVIVO_D1MODE_MASTER_UPDATE_LOCK + crtc_offsets[i], tmp); + } + } + } } void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save) @@ -348,7 +375,7 @@ /* update crtc base addresses */ for (i = 0; i < rdev->num_crtc; i++) { if (rdev->family >= CHIP_RV770) { - if (i == 1) { + if (i == 0) { WREG32(R700_D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, upper_32_bits(rdev->mc.vram_start)); WREG32(R700_D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, @@ -367,6 +394,33 @@ } WREG32(R_000310_VGA_MEMORY_BASE_ADDRESS, (u32)rdev->mc.vram_start); + /* unlock regs and wait for update */ + for (i = 0; i < rdev->num_crtc; i++) { + if (save->crtc_enabled[i]) { + tmp = RREG32(AVIVO_D1MODE_MASTER_UPDATE_MODE + crtc_offsets[i]); + if ((tmp & 0x3) != 0) { + tmp &= ~0x3; + WREG32(AVIVO_D1MODE_MASTER_UPDATE_MODE + crtc_offsets[i], tmp); + } + tmp = RREG32(AVIVO_D1GRPH_UPDATE + crtc_offsets[i]); + if (tmp & AVIVO_D1GRPH_UPDATE_LOCK) { + tmp &= ~AVIVO_D1GRPH_UPDATE_LOCK; + WREG32(AVIVO_D1GRPH_UPDATE + crtc_offsets[i], tmp); + } + tmp = RREG32(AVIVO_D1MODE_MASTER_UPDATE_LOCK + crtc_offsets[i]); + if (tmp & 1) { + tmp &= ~1; + WREG32(AVIVO_D1MODE_MASTER_UPDATE_LOCK + crtc_offsets[i], tmp); + } + for (j = 0; j < rdev->usec_timeout; j++) { + tmp = RREG32(AVIVO_D1GRPH_UPDATE + crtc_offsets[i]); + if ((tmp & AVIVO_D1GRPH_SURFACE_UPDATE_PENDING) == 0) + break; + udelay(1); + } + } + } + if (rdev->family >= CHIP_R600) { /* unblackout the MC */ if (rdev->family >= CHIP_RV770) @@ -478,6 +532,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + rs600_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -608,9 +668,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r100.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r100.c @@ -69,6 +69,38 @@ * and others in some cases. */ +static bool r100_is_in_vblank(struct radeon_device *rdev, int crtc) +{ + if (crtc == 0) { + if (RREG32(RADEON_CRTC_STATUS) & RADEON_CRTC_VBLANK_CUR) + return true; + else + return false; + } else { + if (RREG32(RADEON_CRTC2_STATUS) & RADEON_CRTC2_VBLANK_CUR) + return true; + else + return false; + } +} + +static bool r100_is_counter_moving(struct radeon_device *rdev, int crtc) +{ + u32 vline1, vline2; + + if (crtc == 0) { + vline1 = (RREG32(RADEON_CRTC_VLINE_CRNT_VLINE) >> 16) & RADEON_CRTC_V_TOTAL; + vline2 = (RREG32(RADEON_CRTC_VLINE_CRNT_VLINE) >> 16) & RADEON_CRTC_V_TOTAL; + } else { + vline1 = (RREG32(RADEON_CRTC2_VLINE_CRNT_VLINE) >> 16) & RADEON_CRTC_V_TOTAL; + vline2 = (RREG32(RADEON_CRTC2_VLINE_CRNT_VLINE) >> 16) & RADEON_CRTC_V_TOTAL; + } + if (vline1 != vline2) + return true; + else + return false; +} + /** * r100_wait_for_vblank - vblank wait asic callback. * @@ -79,36 +111,33 @@ */ void r100_wait_for_vblank(struct radeon_device *rdev, int crtc) { - int i; + unsigned i = 0; if (crtc >= rdev->num_crtc) return; if (crtc == 0) { - if (RREG32(RADEON_CRTC_GEN_CNTL) & RADEON_CRTC_EN) { - for (i = 0; i < rdev->usec_timeout; i++) { - if (!(RREG32(RADEON_CRTC_STATUS) & RADEON_CRTC_VBLANK_CUR)) - break; - udelay(1); - } - for (i = 0; i < rdev->usec_timeout; i++) { - if (RREG32(RADEON_CRTC_STATUS) & RADEON_CRTC_VBLANK_CUR) - break; - udelay(1); - } - } + if (!(RREG32(RADEON_CRTC_GEN_CNTL) & RADEON_CRTC_EN)) + return; } else { - if (RREG32(RADEON_CRTC2_GEN_CNTL) & RADEON_CRTC2_EN) { - for (i = 0; i < rdev->usec_timeout; i++) { - if (!(RREG32(RADEON_CRTC2_STATUS) & RADEON_CRTC2_VBLANK_CUR)) - break; - udelay(1); - } - for (i = 0; i < rdev->usec_timeout; i++) { - if (RREG32(RADEON_CRTC2_STATUS) & RADEON_CRTC2_VBLANK_CUR) - break; - udelay(1); - } + if (!(RREG32(RADEON_CRTC2_GEN_CNTL) & RADEON_CRTC2_EN)) + return; + } + + /* depending on when we hit vblank, we may be close to active; if so, + * wait for another frame. + */ + while (r100_is_in_vblank(rdev, crtc)) { + if (i++ % 100 == 0) { + if (!r100_is_counter_moving(rdev, crtc)) + break; + } + } + + while (!r100_is_in_vblank(rdev, crtc)) { + if (i++ % 100 == 0) { + if (!r100_is_counter_moving(rdev, crtc)) + break; } } } @@ -3016,9 +3045,11 @@ seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp); seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw); seq_printf(m, "%u dwords in ring\n", count); - for (j = 0; j <= count; j++) { - i = (rdp + j) & ring->ptr_mask; - seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]); + if (ring->ready) { + for (j = 0; j <= count; j++) { + i = (rdp + j) & ring->ptr_mask; + seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]); + } } return 0; } @@ -3950,6 +3981,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r100_irq_set(rdev); rdev->config.r100.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -4105,9 +4142,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/rv770.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/rv770.c @@ -1016,6 +1016,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r = r600_irq_init(rdev); if (r) { DRM_ERROR("radeon: IH init failed (%d).\n", r); @@ -1155,10 +1161,6 @@ if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; - rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_ring.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_ring.c @@ -161,7 +161,8 @@ radeon_semaphore_free(rdev, &ib->semaphore, NULL); } /* if we can't remember our last VM flush then flush now! */ - if (ib->vm && !ib->vm->last_flush) { + /* XXX figure out why we have to flush for every IB */ + if (ib->vm /*&& !ib->vm->last_flush*/) { radeon_ring_vm_flush(rdev, ib->ring, ib->vm); } if (const_ib) { @@ -204,6 +205,7 @@ } r = radeon_sa_bo_manager_init(rdev, &rdev->ring_tmp_bo, RADEON_IB_POOL_SIZE*64*1024, + RADEON_GPU_PAGE_SIZE, RADEON_GEM_DOMAIN_GTT); if (r) { return r; @@ -382,6 +384,13 @@ return -ENOMEM; /* Align requested size with padding so unlock_commit can * pad safely */ + radeon_ring_free_size(rdev, ring); + if (ring->ring_free_dw == (ring->ring_size / 4)) { + /* This is an empty ring update lockup info to avoid + * false positive. + */ + radeon_ring_lockup_update(ring); + } ndw = (ndw + ring->align_mask) & ~ring->align_mask; while (ndw > (ring->ring_free_dw - 1)) { radeon_ring_free_size(rdev, ring); @@ -795,9 +804,11 @@ * packet that is the root issue */ i = (ring->rptr + ring->ptr_mask + 1 - 32) & ring->ptr_mask; - for (j = 0; j <= (count + 32); j++) { - seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]); - i = (i + 1) & ring->ptr_mask; + if (ring->ready) { + for (j = 0; j <= (count + 32); j++) { + seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]); + i = (i + 1) & ring->ptr_mask; + } } return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/sid.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/sid.h @@ -60,6 +60,12 @@ #define DMIF_ADDR_CONFIG 0xBD4 +#define DMIF_ADDR_CALC 0xC00 + +#define PIPE0_DMIF_BUFFER_CONTROL 0x0ca0 +# define DMIF_BUFFERS_ALLOCATED(x) ((x) << 0) +# define DMIF_BUFFERS_ALLOCATED_COMPLETED (1 << 4) + #define SRBM_STATUS 0xE50 #define SRBM_SOFT_RESET 0x0E60 --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/nid.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/nid.h @@ -45,6 +45,10 @@ #define ARUBA_GB_ADDR_CONFIG_GOLDEN 0x12010001 #define DMIF_ADDR_CONFIG 0xBD4 + +/* DCE6 only */ +#define DMIF_ADDR_CALC 0xC00 + #define SRBM_GFX_CNTL 0x0E44 #define RINGID(x) (((x) & 0x3) << 0) #define VMID(x) (((x) & 0x7) << 0) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/rs400.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/rs400.c @@ -174,10 +174,13 @@ /* FIXME: according to doc we should set HIDE_MMCFG_BAR=0, * AGPMODE30=0 & AGP30ENHANCED=0 in NB_CNTL */ if ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) { - WREG32_MC(RS480_MC_MISC_CNTL, - (RS480_GART_INDEX_REG_EN | RS690_BLOCK_GFX_D3_EN)); + tmp = RREG32_MC(RS480_MC_MISC_CNTL); + tmp |= RS480_GART_INDEX_REG_EN | RS690_BLOCK_GFX_D3_EN; + WREG32_MC(RS480_MC_MISC_CNTL, tmp); } else { - WREG32_MC(RS480_MC_MISC_CNTL, RS480_GART_INDEX_REG_EN); + tmp = RREG32_MC(RS480_MC_MISC_CNTL); + tmp |= RS480_GART_INDEX_REG_EN; + WREG32_MC(RS480_MC_MISC_CNTL, tmp); } /* Enable gart */ WREG32_MC(RS480_AGP_ADDRESS_SPACE_SIZE, (RS480_GART_EN | size_reg)); @@ -417,6 +420,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r100_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -535,9 +544,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/rs690.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/rs690.c @@ -628,6 +628,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + rs600_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -753,9 +759,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_object.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_object.h @@ -158,7 +158,7 @@ extern int radeon_sa_bo_manager_init(struct radeon_device *rdev, struct radeon_sa_manager *sa_manager, - unsigned size, u32 domain); + unsigned size, u32 align, u32 domain); extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev, struct radeon_sa_manager *sa_manager); extern int radeon_sa_bo_manager_start(struct radeon_device *rdev, --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_gart.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_gart.c @@ -467,6 +467,7 @@ size *= 2; r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager, RADEON_GPU_PAGE_ALIGN(size), + RADEON_GPU_PAGE_SIZE, RADEON_GEM_DOMAIN_VRAM); if (r) { dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n", @@ -1209,11 +1210,13 @@ int radeon_vm_bo_rmv(struct radeon_device *rdev, struct radeon_bo_va *bo_va) { - int r; + int r = 0; mutex_lock(&rdev->vm_manager.lock); mutex_lock(&bo_va->vm->mutex); - r = radeon_vm_bo_update_pte(rdev, bo_va->vm, bo_va->bo, NULL); + if (bo_va->soffset) { + r = radeon_vm_bo_update_pte(rdev, bo_va->vm, bo_va->bo, NULL); + } mutex_unlock(&rdev->vm_manager.lock); list_del(&bo_va->vm_list); mutex_unlock(&bo_va->vm->mutex); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_atombios.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_atombios.c @@ -715,13 +715,16 @@ (ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT *) (ctx->bios + data_offset + le16_to_cpu(router_obj->asObjects[k].usSrcDstTableOffset)); + u8 *num_dst_objs = (u8 *) + ((u8 *)router_src_dst_table + 1 + + (router_src_dst_table->ucNumberOfSrc * 2)); + u16 *dst_objs = (u16 *)(num_dst_objs + 1); int enum_id; router.router_id = router_obj_id; - for (enum_id = 0; enum_id < router_src_dst_table->ucNumberOfDst; - enum_id++) { + for (enum_id = 0; enum_id < (*num_dst_objs); enum_id++) { if (le16_to_cpu(path->usConnObjectId) == - le16_to_cpu(router_src_dst_table->usDstObjectID[enum_id])) + le16_to_cpu(dst_objs[enum_id])) break; } @@ -1651,7 +1654,9 @@ kfree(edid); } } - record += sizeof(ATOM_FAKE_EDID_PATCH_RECORD); + record += fake_edid_record->ucFakeEDIDLength ? + fake_edid_record->ucFakeEDIDLength + 2 : + sizeof(ATOM_FAKE_EDID_PATCH_RECORD); break; case LCD_PANEL_RESOLUTION_RECORD_TYPE: panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record; @@ -2028,6 +2033,8 @@ num_modes = power_info->info.ucNumOfPowerModeEntries; if (num_modes > ATOM_MAX_NUMBEROF_POWER_BLOCK) num_modes = ATOM_MAX_NUMBEROF_POWER_BLOCK; + if (num_modes == 0) + return state_index; rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * num_modes, GFP_KERNEL); if (!rdev->pm.power_state) return state_index; @@ -2432,6 +2439,8 @@ power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); radeon_atombios_add_pplib_thermal_controller(rdev, &power_info->pplib.sThermalController); + if (power_info->pplib.ucNumStates == 0) + return state_index; rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * power_info->pplib.ucNumStates, GFP_KERNEL); if (!rdev->pm.power_state) @@ -2514,6 +2523,7 @@ int index = GetIndexIntoMasterTable(DATA, PowerPlayInfo); u16 data_offset; u8 frev, crev; + u8 *power_state_offset; if (!atom_parse_data_header(mode_info->atom_context, index, NULL, &frev, &crev, &data_offset)) @@ -2530,15 +2540,17 @@ non_clock_info_array = (struct _NonClockInfoArray *) (mode_info->atom_context->bios + data_offset + le16_to_cpu(power_info->pplib.usNonClockInfoArrayOffset)); + if (state_array->ucNumEntries == 0) + return state_index; rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * state_array->ucNumEntries, GFP_KERNEL); if (!rdev->pm.power_state) return state_index; + power_state_offset = (u8 *)state_array->states; for (i = 0; i < state_array->ucNumEntries; i++) { mode_index = 0; - power_state = (union pplib_power_state *)&state_array->states[i]; - /* XXX this might be an inagua bug... */ - non_clock_array_index = i; /* power_state->v2.nonClockInfoIndex */ + power_state = (union pplib_power_state *)power_state_offset; + non_clock_array_index = power_state->v2.nonClockInfoIndex; non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *) &non_clock_info_array->nonClockInfo[non_clock_array_index]; rdev->pm.power_state[i].clock_info = kzalloc(sizeof(struct radeon_pm_clock_info) * @@ -2550,9 +2562,6 @@ if (power_state->v2.ucNumDPMLevels) { for (j = 0; j < power_state->v2.ucNumDPMLevels; j++) { clock_array_index = power_state->v2.clockInfoIndex[j]; - /* XXX this might be an inagua bug... */ - if (clock_array_index >= clock_info_array->ucNumEntries) - continue; clock_info = (union pplib_clock_info *) &clock_info_array->clockInfo[clock_array_index * clock_info_array->ucEntrySize]; valid = radeon_atombios_parse_pplib_clock_info(rdev, @@ -2574,6 +2583,7 @@ non_clock_info); state_index++; } + power_state_offset += 2 + power_state->v2.ucNumDPMLevels; } /* if multiple clock modes, mark the lowest as no display */ for (i = 0; i < state_index; i++) { @@ -2620,7 +2630,9 @@ default: break; } - } else { + } + + if (state_index == 0) { rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state), GFP_KERNEL); if (rdev->pm.power_state) { rdev->pm.power_state[0].clock_info = --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_benchmark.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_benchmark.c @@ -135,13 +135,15 @@ sdomain, ddomain, "dma"); } - time = radeon_benchmark_do_move(rdev, size, saddr, daddr, - RADEON_BENCHMARK_COPY_BLIT, n); - if (time < 0) - goto out_cleanup; - if (time > 0) - radeon_benchmark_log_results(n, size, time, - sdomain, ddomain, "blit"); + if (rdev->asic->copy.blit) { + time = radeon_benchmark_do_move(rdev, size, saddr, daddr, + RADEON_BENCHMARK_COPY_BLIT, n); + if (time < 0) + goto out_cleanup; + if (time > 0) + radeon_benchmark_log_results(n, size, time, + sdomain, ddomain, "blit"); + } out_cleanup: if (sobj) { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/atombios_i2c.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/atombios_i2c.c @@ -27,6 +27,8 @@ #include "radeon.h" #include "atom.h" +extern void radeon_atom_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le); + #define TARGET_HW_I2C_CLOCK 50 /* these are a limitation of ProcessI2cChannelTransaction not the hw */ @@ -77,7 +79,7 @@ } if (!(flags & HW_I2C_WRITE)) - memcpy(buf, base, num); + radeon_atom_copy_swap(buf, base, num, false); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/atombios_encoders.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/atombios_encoders.c @@ -186,6 +186,13 @@ u8 backlight_level; char bl_name[16]; + /* Mac laptops with multiple GPUs use the gmux driver for backlight + * so don't register a backlight device + */ + if ((rdev->pdev->subsystem_vendor == PCI_VENDOR_ID_APPLE) && + (rdev->pdev->device == 0x6741)) + return; + if (!radeon_encoder->enc_priv) return; @@ -667,6 +674,8 @@ int atombios_get_encoder_mode(struct drm_encoder *encoder) { + struct drm_device *dev = encoder->dev; + struct radeon_device *rdev = dev->dev_private; struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct drm_connector *connector; struct radeon_connector *radeon_connector; @@ -693,7 +702,8 @@ case DRM_MODE_CONNECTOR_DVII: case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */ if (drm_detect_hdmi_monitor(radeon_connector->edid) && - radeon_audio) + radeon_audio && + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ return ATOM_ENCODER_MODE_HDMI; else if (radeon_connector->use_digital) return ATOM_ENCODER_MODE_DVI; @@ -704,7 +714,8 @@ case DRM_MODE_CONNECTOR_HDMIA: default: if (drm_detect_hdmi_monitor(radeon_connector->edid) && - radeon_audio) + radeon_audio && + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ return ATOM_ENCODER_MODE_HDMI; else return ATOM_ENCODER_MODE_DVI; @@ -718,7 +729,8 @@ (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) return ATOM_ENCODER_MODE_DP; else if (drm_detect_hdmi_monitor(radeon_connector->edid) && - radeon_audio) + radeon_audio && + !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */ return ATOM_ENCODER_MODE_HDMI; else return ATOM_ENCODER_MODE_DVI; @@ -1624,8 +1636,12 @@ atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0); atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0); atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0); - /* some early dce3.2 boards have a bug in their transmitter control table */ - if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730)) + /* some dce3.x boards have a bug in their transmitter control table. + * ACTION_ENABLE_OUTPUT can probably be dropped since ACTION_ENABLE + * does the same thing and more. + */ + if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) && + (rdev->family != CHIP_RS880)) atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0); } if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_prime.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_prime.c @@ -28,199 +28,71 @@ #include "radeon.h" #include -#include - -static struct sg_table *radeon_gem_map_dma_buf(struct dma_buf_attachment *attachment, - enum dma_data_direction dir) +struct sg_table *radeon_gem_prime_get_sg_table(struct drm_gem_object *obj) { - struct radeon_bo *bo = attachment->dmabuf->priv; - struct drm_device *dev = bo->rdev->ddev; + struct radeon_bo *bo = gem_to_radeon_bo(obj); int npages = bo->tbo.num_pages; - struct sg_table *sg; - int nents; - - mutex_lock(&dev->struct_mutex); - sg = drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages); - nents = dma_map_sg(attachment->dev, sg->sgl, sg->nents, dir); - mutex_unlock(&dev->struct_mutex); - return sg; -} - -static void radeon_gem_unmap_dma_buf(struct dma_buf_attachment *attachment, - struct sg_table *sg, enum dma_data_direction dir) -{ - dma_unmap_sg(attachment->dev, sg->sgl, sg->nents, dir); - sg_free_table(sg); - kfree(sg); -} - -static void radeon_gem_dmabuf_release(struct dma_buf *dma_buf) -{ - struct radeon_bo *bo = dma_buf->priv; - - if (bo->gem_base.export_dma_buf == dma_buf) { - DRM_ERROR("unreference dmabuf %p\n", &bo->gem_base); - bo->gem_base.export_dma_buf = NULL; - drm_gem_object_unreference_unlocked(&bo->gem_base); - } -} - -static void *radeon_gem_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num) -{ - return NULL; -} - -static void radeon_gem_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr) -{ - -} -static void *radeon_gem_kmap(struct dma_buf *dma_buf, unsigned long page_num) -{ - return NULL; -} - -static void radeon_gem_kunmap(struct dma_buf *dma_buf, unsigned long page_num, void *addr) -{ + return drm_prime_pages_to_sg(bo->tbo.ttm->pages, npages); } -static int radeon_gem_prime_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma) +void *radeon_gem_prime_vmap(struct drm_gem_object *obj) { - return -EINVAL; -} - -static void *radeon_gem_prime_vmap(struct dma_buf *dma_buf) -{ - struct radeon_bo *bo = dma_buf->priv; - struct drm_device *dev = bo->rdev->ddev; + struct radeon_bo *bo = gem_to_radeon_bo(obj); int ret; - mutex_lock(&dev->struct_mutex); - if (bo->vmapping_count) { - bo->vmapping_count++; - goto out_unlock; - } - ret = ttm_bo_kmap(&bo->tbo, 0, bo->tbo.num_pages, &bo->dma_buf_vmap); - if (ret) { - mutex_unlock(&dev->struct_mutex); + if (ret) return ERR_PTR(ret); - } - bo->vmapping_count = 1; -out_unlock: - mutex_unlock(&dev->struct_mutex); + return bo->dma_buf_vmap.virtual; } -static void radeon_gem_prime_vunmap(struct dma_buf *dma_buf, void *vaddr) +void radeon_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) { - struct radeon_bo *bo = dma_buf->priv; - struct drm_device *dev = bo->rdev->ddev; + struct radeon_bo *bo = gem_to_radeon_bo(obj); - mutex_lock(&dev->struct_mutex); - bo->vmapping_count--; - if (bo->vmapping_count == 0) { - ttm_bo_kunmap(&bo->dma_buf_vmap); - } - mutex_unlock(&dev->struct_mutex); + ttm_bo_kunmap(&bo->dma_buf_vmap); } -const static struct dma_buf_ops radeon_dmabuf_ops = { - .map_dma_buf = radeon_gem_map_dma_buf, - .unmap_dma_buf = radeon_gem_unmap_dma_buf, - .release = radeon_gem_dmabuf_release, - .kmap = radeon_gem_kmap, - .kmap_atomic = radeon_gem_kmap_atomic, - .kunmap = radeon_gem_kunmap, - .kunmap_atomic = radeon_gem_kunmap_atomic, - .mmap = radeon_gem_prime_mmap, - .vmap = radeon_gem_prime_vmap, - .vunmap = radeon_gem_prime_vunmap, -}; - -static int radeon_prime_create(struct drm_device *dev, - size_t size, - struct sg_table *sg, - struct radeon_bo **pbo) + +struct drm_gem_object *radeon_gem_prime_import_sg_table(struct drm_device *dev, + size_t size, + struct sg_table *sg) { struct radeon_device *rdev = dev->dev_private; struct radeon_bo *bo; int ret; ret = radeon_bo_create(rdev, size, PAGE_SIZE, false, - RADEON_GEM_DOMAIN_GTT, sg, pbo); + RADEON_GEM_DOMAIN_GTT, sg, &bo); if (ret) - return ret; - bo = *pbo; + return ERR_PTR(ret); bo->gem_base.driver_private = bo; mutex_lock(&rdev->gem.mutex); list_add_tail(&bo->list, &rdev->gem.objects); mutex_unlock(&rdev->gem.mutex); - return 0; + return &bo->gem_base; } -struct dma_buf *radeon_gem_prime_export(struct drm_device *dev, - struct drm_gem_object *obj, - int flags) +int radeon_gem_prime_pin(struct drm_gem_object *obj) { struct radeon_bo *bo = gem_to_radeon_bo(obj); int ret = 0; ret = radeon_bo_reserve(bo, false); if (unlikely(ret != 0)) - return ERR_PTR(ret); + return ret; /* pin buffer into GTT */ ret = radeon_bo_pin(bo, RADEON_GEM_DOMAIN_GTT, NULL); if (ret) { radeon_bo_unreserve(bo); - return ERR_PTR(ret); + return ret; } radeon_bo_unreserve(bo); - return dma_buf_export(bo, &radeon_dmabuf_ops, obj->size, flags); -} -struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf) -{ - struct dma_buf_attachment *attach; - struct sg_table *sg; - struct radeon_bo *bo; - int ret; - - if (dma_buf->ops == &radeon_dmabuf_ops) { - bo = dma_buf->priv; - if (bo->gem_base.dev == dev) { - drm_gem_object_reference(&bo->gem_base); - dma_buf_put(dma_buf); - return &bo->gem_base; - } - } - - /* need to attach */ - attach = dma_buf_attach(dma_buf, dev->dev); - if (IS_ERR(attach)) - return ERR_CAST(attach); - - sg = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); - if (IS_ERR(sg)) { - ret = PTR_ERR(sg); - goto fail_detach; - } - - ret = radeon_prime_create(dev, dma_buf->size, sg, &bo); - if (ret) - goto fail_unmap; - - bo->gem_base.import_attach = attach; - - return &bo->gem_base; - -fail_unmap: - dma_buf_unmap_attachment(attach, sg, DMA_BIDIRECTIONAL); -fail_detach: - dma_buf_detach(dma_buf, attach); - return ERR_PTR(ret); + return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r600_hdmi.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r600_hdmi.c @@ -322,6 +322,9 @@ struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; uint32_t offset; + if (!dig || !dig->afmt) + return; + /* Silent, r600_hdmi_enable will raise WARN for us */ if (!dig->afmt->enabled) return; @@ -480,6 +483,9 @@ uint32_t offset; u32 hdmi; + if (!dig || !dig->afmt) + return; + if (ASIC_IS_DCE6(rdev)) return; @@ -489,7 +495,7 @@ offset = dig->afmt->offset; /* Older chipsets require setting HDMI and routing manually */ - if (rdev->family >= CHIP_R600 && !ASIC_IS_DCE3(rdev)) { + if (ASIC_IS_DCE2(rdev) && !ASIC_IS_DCE3(rdev)) { hdmi = HDMI0_ERROR_ACK | HDMI0_ENABLE; switch (radeon_encoder->encoder_id) { case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: @@ -544,7 +550,6 @@ /* Called for ATOM_ENCODER_MODE_HDMI only */ if (!dig || !dig->afmt) { - WARN_ON(1); return; } if (!dig->afmt->enabled) @@ -558,7 +563,7 @@ radeon_irq_kms_disable_afmt(rdev, dig->afmt->id); /* Older chipsets not handled by AtomBIOS */ - if (rdev->family >= CHIP_R600 && !ASIC_IS_DCE3(rdev)) { + if (ASIC_IS_DCE2(rdev) && !ASIC_IS_DCE3(rdev)) { switch (radeon_encoder->encoder_id) { case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: WREG32_P(AVIVO_TMDSA_CNTL, 0, --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_sa.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_sa.c @@ -49,7 +49,7 @@ int radeon_sa_bo_manager_init(struct radeon_device *rdev, struct radeon_sa_manager *sa_manager, - unsigned size, u32 domain) + unsigned size, u32 align, u32 domain) { int i, r; @@ -57,14 +57,15 @@ sa_manager->bo = NULL; sa_manager->size = size; sa_manager->domain = domain; + sa_manager->align = align; sa_manager->hole = &sa_manager->olist; INIT_LIST_HEAD(&sa_manager->olist); for (i = 0; i < RADEON_NUM_RINGS; ++i) { INIT_LIST_HEAD(&sa_manager->flist[i]); } - r = radeon_bo_create(rdev, size, RADEON_GPU_PAGE_SIZE, true, - RADEON_GEM_DOMAIN_CPU, NULL, &sa_manager->bo); + r = radeon_bo_create(rdev, size, align, true, + domain, NULL, &sa_manager->bo); if (r) { dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r); return r; @@ -317,7 +318,7 @@ unsigned tries[RADEON_NUM_RINGS]; int i, r; - BUG_ON(align > RADEON_GPU_PAGE_SIZE); + BUG_ON(align > sa_manager->align); BUG_ON(size > sa_manager->size); *sa_bo = kmalloc(sizeof(struct radeon_sa_bo), GFP_KERNEL); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_atpx_handler.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_atpx_handler.c @@ -43,6 +43,12 @@ u32 function_bits; /* supported functions bit vector */ } __packed; +struct atpx_px_params { + u16 size; /* structure size in bytes (includes size field) */ + u32 valid_flags; /* which flags are valid */ + u32 flags; /* flags */ +} __packed; + struct atpx_power_control { u16 size; u8 dgpu_state; @@ -123,9 +129,61 @@ } /** + * radeon_atpx_validate_functions - validate ATPX functions + * + * @atpx: radeon atpx struct + * + * Validate that required functions are enabled (all asics). + * returns 0 on success, error on failure. + */ +static int radeon_atpx_validate(struct radeon_atpx *atpx) +{ + /* make sure required functions are enabled */ + /* dGPU power control is required */ + atpx->functions.power_cntl = true; + + if (atpx->functions.px_params) { + union acpi_object *info; + struct atpx_px_params output; + size_t size; + u32 valid_bits; + + info = radeon_atpx_call(atpx->handle, ATPX_FUNCTION_GET_PX_PARAMETERS, NULL); + if (!info) + return -EIO; + + memset(&output, 0, sizeof(output)); + + size = *(u16 *) info->buffer.pointer; + if (size < 10) { + printk("ATPX buffer is too small: %zu\n", size); + kfree(info); + return -EINVAL; + } + size = min(sizeof(output), size); + + memcpy(&output, info->buffer.pointer, size); + + valid_bits = output.flags & output.valid_flags; + /* if separate mux flag is set, mux controls are required */ + if (valid_bits & ATPX_SEPARATE_MUX_FOR_I2C) { + atpx->functions.i2c_mux_cntl = true; + atpx->functions.disp_mux_cntl = true; + } + /* if any outputs are muxed, mux controls are required */ + if (valid_bits & (ATPX_CRT1_RGB_SIGNAL_MUXED | + ATPX_TV_SIGNAL_MUXED | + ATPX_DFP_SIGNAL_MUXED)) + atpx->functions.disp_mux_cntl = true; + + kfree(info); + } + return 0; +} + +/** * radeon_atpx_verify_interface - verify ATPX * - * @handle: acpi handle * @atpx: radeon atpx struct * * Execute the ATPX_FUNCTION_VERIFY_INTERFACE ATPX function @@ -406,8 +464,19 @@ */ static int radeon_atpx_init(void) { + int r; + /* set up the ATPX handle */ - return radeon_atpx_verify_interface(&radeon_atpx_priv.atpx); + r = radeon_atpx_verify_interface(&radeon_atpx_priv.atpx); + if (r) + return r; + + /* validate the atpx setup */ + r = radeon_atpx_validate(&radeon_atpx_priv.atpx); + if (r) + return r; + + return 0; } /** --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/atombios_dp.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/atombios_dp.c @@ -44,6 +44,41 @@ }; /***** radeon AUX functions *****/ + +/* Atom needs data in little endian format + * so swap as appropriate when copying data to + * or from atom. Note that atom operates on + * dw units. + */ +void radeon_atom_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le) +{ +#ifdef __BIG_ENDIAN + u8 src_tmp[20], dst_tmp[20]; /* used for byteswapping */ + u32 *dst32, *src32; + int i; + + memcpy(src_tmp, src, num_bytes); + src32 = (u32 *)src_tmp; + dst32 = (u32 *)dst_tmp; + if (to_le) { + for (i = 0; i < ((num_bytes + 3) / 4); i++) + dst32[i] = cpu_to_le32(src32[i]); + memcpy(dst, dst_tmp, num_bytes); + } else { + u8 dws = num_bytes & ~3; + for (i = 0; i < ((num_bytes + 3) / 4); i++) + dst32[i] = le32_to_cpu(src32[i]); + memcpy(dst, dst_tmp, dws); + if (num_bytes % 4) { + for (i = 0; i < (num_bytes % 4); i++) + dst[dws+i] = dst_tmp[dws+i]; + } + } +#else + memcpy(dst, src, num_bytes); +#endif +} + union aux_channel_transaction { PROCESS_AUX_CHANNEL_TRANSACTION_PS_ALLOCATION v1; PROCESS_AUX_CHANNEL_TRANSACTION_PARAMETERS_V2 v2; @@ -65,10 +100,10 @@ base = (unsigned char *)(rdev->mode_info.atom_context->scratch + 1); - memcpy(base, send, send_bytes); + radeon_atom_copy_swap(base, send, send_bytes, true); - args.v1.lpAuxRequest = 0 + 4; - args.v1.lpDataOut = 16 + 4; + args.v1.lpAuxRequest = cpu_to_le16((u16)(0 + 4)); + args.v1.lpDataOut = cpu_to_le16((u16)(16 + 4)); args.v1.ucDataOutLen = 0; args.v1.ucChannelID = chan->rec.i2c_id; args.v1.ucDelay = delay / 10; @@ -102,7 +137,7 @@ recv_bytes = recv_size; if (recv && recv_size) - memcpy(recv, base + 16, recv_bytes); + radeon_atom_copy_swap(recv, base + 16, recv_bytes, false); return recv_bytes; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/si.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/si.c @@ -411,7 +411,8 @@ struct drm_display_mode *mode, struct drm_display_mode *other_mode) { - u32 tmp; + u32 tmp, buffer_alloc, i; + u32 pipe_offset = radeon_crtc->crtc_id * 0x20; /* * Line Buffer Setup * There are 3 line buffers, each one shared by 2 display controllers. @@ -426,16 +427,30 @@ * non-linked crtcs for maximum line buffer allocation. */ if (radeon_crtc->base.enabled && mode) { - if (other_mode) + if (other_mode) { tmp = 0; /* 1/2 */ - else + buffer_alloc = 1; + } else { tmp = 2; /* whole */ - } else + buffer_alloc = 2; + } + } else { tmp = 0; + buffer_alloc = 0; + } WREG32(DC_LB_MEMORY_SPLIT + radeon_crtc->crtc_offset, DC_LB_MEMORY_CONFIG(tmp)); + WREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset, + DMIF_BUFFERS_ALLOCATED(buffer_alloc)); + for (i = 0; i < rdev->usec_timeout; i++) { + if (RREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset) & + DMIF_BUFFERS_ALLOCATED_COMPLETED) + break; + udelay(1); + } + if (radeon_crtc->base.enabled && mode) { switch (tmp) { case 0: @@ -1374,7 +1389,7 @@ u32 data = INSTANCE_BROADCAST_WRITES; if ((se_num == 0xffffffff) && (sh_num == 0xffffffff)) - data = SH_BROADCAST_WRITES | SE_BROADCAST_WRITES; + data |= SH_BROADCAST_WRITES | SE_BROADCAST_WRITES; else if (se_num == 0xffffffff) data |= SE_BROADCAST_WRITES | SH_INDEX(sh_num); else if (sh_num == 0xffffffff) @@ -1556,7 +1571,7 @@ default: rdev->config.si.max_shader_engines = 1; rdev->config.si.max_tile_pipes = 4; - rdev->config.si.max_cu_per_sh = 2; + rdev->config.si.max_cu_per_sh = 5; rdev->config.si.max_sh_per_se = 2; rdev->config.si.max_backends_per_se = 4; rdev->config.si.max_texture_channel_caches = 4; @@ -1659,6 +1674,7 @@ WREG32(GB_ADDR_CONFIG, gb_addr_config); WREG32(DMIF_ADDR_CONFIG, gb_addr_config); + WREG32(DMIF_ADDR_CALC, gb_addr_config); WREG32(HDP_ADDR_CONFIG, gb_addr_config); WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config); WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config); @@ -2410,8 +2426,8 @@ rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); /* size in MB on si */ - rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; - rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; + rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; + rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; rdev->mc.visible_vram_size = rdev->mc.aper_size; si_vram_gtt_location(rdev, &rdev->mc); radeon_update_bandwidth_info(rdev); @@ -2606,13 +2622,64 @@ return 0; } +static int si_vm_packet3_cp_dma_check(u32 *ib, u32 idx) +{ + u32 start_reg, reg, i; + u32 command = ib[idx + 4]; + u32 info = ib[idx + 1]; + u32 idx_value = ib[idx]; + if (command & PACKET3_CP_DMA_CMD_SAS) { + /* src address space is register */ + if (((info & 0x60000000) >> 29) == 0) { + start_reg = idx_value << 2; + if (command & PACKET3_CP_DMA_CMD_SAIC) { + reg = start_reg; + if (!si_vm_reg_valid(reg)) { + DRM_ERROR("CP DMA Bad SRC register\n"); + return -EINVAL; + } + } else { + for (i = 0; i < (command & 0x1fffff); i++) { + reg = start_reg + (4 * i); + if (!si_vm_reg_valid(reg)) { + DRM_ERROR("CP DMA Bad SRC register\n"); + return -EINVAL; + } + } + } + } + } + if (command & PACKET3_CP_DMA_CMD_DAS) { + /* dst address space is register */ + if (((info & 0x00300000) >> 20) == 0) { + start_reg = ib[idx + 2]; + if (command & PACKET3_CP_DMA_CMD_DAIC) { + reg = start_reg; + if (!si_vm_reg_valid(reg)) { + DRM_ERROR("CP DMA Bad DST register\n"); + return -EINVAL; + } + } else { + for (i = 0; i < (command & 0x1fffff); i++) { + reg = start_reg + (4 * i); + if (!si_vm_reg_valid(reg)) { + DRM_ERROR("CP DMA Bad DST register\n"); + return -EINVAL; + } + } + } + } + } + return 0; +} + static int si_vm_packet3_gfx_check(struct radeon_device *rdev, u32 *ib, struct radeon_cs_packet *pkt) { + int r; u32 idx = pkt->idx + 1; u32 idx_value = ib[idx]; u32 start_reg, end_reg, reg, i; - u32 command, info; switch (pkt->opcode) { case PACKET3_NOP: @@ -2713,50 +2780,9 @@ } break; case PACKET3_CP_DMA: - command = ib[idx + 4]; - info = ib[idx + 1]; - if (command & PACKET3_CP_DMA_CMD_SAS) { - /* src address space is register */ - if (((info & 0x60000000) >> 29) == 0) { - start_reg = idx_value << 2; - if (command & PACKET3_CP_DMA_CMD_SAIC) { - reg = start_reg; - if (!si_vm_reg_valid(reg)) { - DRM_ERROR("CP DMA Bad SRC register\n"); - return -EINVAL; - } - } else { - for (i = 0; i < (command & 0x1fffff); i++) { - reg = start_reg + (4 * i); - if (!si_vm_reg_valid(reg)) { - DRM_ERROR("CP DMA Bad SRC register\n"); - return -EINVAL; - } - } - } - } - } - if (command & PACKET3_CP_DMA_CMD_DAS) { - /* dst address space is register */ - if (((info & 0x00300000) >> 20) == 0) { - start_reg = ib[idx + 2]; - if (command & PACKET3_CP_DMA_CMD_DAIC) { - reg = start_reg; - if (!si_vm_reg_valid(reg)) { - DRM_ERROR("CP DMA Bad DST register\n"); - return -EINVAL; - } - } else { - for (i = 0; i < (command & 0x1fffff); i++) { - reg = start_reg + (4 * i); - if (!si_vm_reg_valid(reg)) { - DRM_ERROR("CP DMA Bad DST register\n"); - return -EINVAL; - } - } - } - } - } + r = si_vm_packet3_cp_dma_check(ib, idx); + if (r) + return r; break; default: DRM_ERROR("Invalid GFX packet3: 0x%x\n", pkt->opcode); @@ -2768,6 +2794,7 @@ static int si_vm_packet3_compute_check(struct radeon_device *rdev, u32 *ib, struct radeon_cs_packet *pkt) { + int r; u32 idx = pkt->idx + 1; u32 idx_value = ib[idx]; u32 start_reg, reg, i; @@ -2840,6 +2867,11 @@ return -EINVAL; } break; + case PACKET3_CP_DMA: + r = si_vm_packet3_cp_dma_check(ib, idx); + if (r) + return r; + break; default: DRM_ERROR("Invalid Compute packet3: 0x%x\n", pkt->opcode); return -EINVAL; @@ -4136,6 +4168,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r = si_irq_init(rdev); if (r) { DRM_ERROR("radeon: IH init failed (%d).\n", r); @@ -4232,6 +4270,7 @@ int si_suspend(struct radeon_device *rdev) { + radeon_vm_manager_fini(rdev); si_cp_enable(rdev, false); cayman_dma_stop(rdev); si_irq_suspend(rdev); @@ -4295,10 +4334,6 @@ if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; - ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; ring->ring_obj = NULL; r600_ring_init(rdev, ring, 1024 * 1024); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/evergreen_reg.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/evergreen_reg.h @@ -225,6 +225,8 @@ #define EVERGREEN_CRTC_STATUS_POSITION 0x6e90 #define EVERGREEN_MASTER_UPDATE_MODE 0x6ef8 #define EVERGREEN_CRTC_UPDATE_LOCK 0x6ed4 +#define EVERGREEN_MASTER_UPDATE_LOCK 0x6ef4 +#define EVERGREEN_MASTER_UPDATE_MODE 0x6ef8 #define EVERGREEN_DC_GPIO_HPD_MASK 0x64b0 #define EVERGREEN_DC_GPIO_HPD_A 0x64b4 --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/evergreen.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/evergreen.c @@ -105,6 +105,27 @@ } } +static bool dce4_is_in_vblank(struct radeon_device *rdev, int crtc) +{ + if (RREG32(EVERGREEN_CRTC_STATUS + crtc_offsets[crtc]) & EVERGREEN_CRTC_V_BLANK) + return true; + else + return false; +} + +static bool dce4_is_counter_moving(struct radeon_device *rdev, int crtc) +{ + u32 pos1, pos2; + + pos1 = RREG32(EVERGREEN_CRTC_STATUS_POSITION + crtc_offsets[crtc]); + pos2 = RREG32(EVERGREEN_CRTC_STATUS_POSITION + crtc_offsets[crtc]); + + if (pos1 != pos2) + return true; + else + return false; +} + /** * dce4_wait_for_vblank - vblank wait asic callback. * @@ -115,21 +136,28 @@ */ void dce4_wait_for_vblank(struct radeon_device *rdev, int crtc) { - int i; + unsigned i = 0; if (crtc >= rdev->num_crtc) return; - if (RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[crtc]) & EVERGREEN_CRTC_MASTER_EN) { - for (i = 0; i < rdev->usec_timeout; i++) { - if (!(RREG32(EVERGREEN_CRTC_STATUS + crtc_offsets[crtc]) & EVERGREEN_CRTC_V_BLANK)) + if (!(RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[crtc]) & EVERGREEN_CRTC_MASTER_EN)) + return; + + /* depending on when we hit vblank, we may be close to active; if so, + * wait for another frame. + */ + while (dce4_is_in_vblank(rdev, crtc)) { + if (i++ % 100 == 0) { + if (!dce4_is_counter_moving(rdev, crtc)) break; - udelay(1); } - for (i = 0; i < rdev->usec_timeout; i++) { - if (RREG32(EVERGREEN_CRTC_STATUS + crtc_offsets[crtc]) & EVERGREEN_CRTC_V_BLANK) + } + + while (!dce4_is_in_vblank(rdev, crtc)) { + if (i++ % 100 == 0) { + if (!dce4_is_counter_moving(rdev, crtc)) break; - udelay(1); } } } @@ -403,6 +431,19 @@ rdev->pm.current_vddc = voltage->voltage; DRM_DEBUG("Setting: vddc: %d\n", voltage->voltage); } + + /* starting with BTC, there is one state that is used for both + * MH and SH. Difference is that we always use the high clock index for + * mclk and vddci. + */ + if ((rdev->pm.pm_method == PM_METHOD_PROFILE) && + (rdev->family >= CHIP_BARTS) && + rdev->pm.active_crtc_count && + ((rdev->pm.profile_index == PM_PROFILE_MID_MH_IDX) || + (rdev->pm.profile_index == PM_PROFILE_LOW_MH_IDX))) + voltage = &rdev->pm.power_state[req_ps_idx]. + clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage; + /* 0xff01 is a flag rather then an actual voltage */ if (voltage->vddci == 0xff01) return; @@ -595,6 +636,16 @@ list_for_each_entry(connector, &dev->mode_config.connector_list, head) { struct radeon_connector *radeon_connector = to_radeon_connector(connector); + + if (connector->connector_type == DRM_MODE_CONNECTOR_eDP || + connector->connector_type == DRM_MODE_CONNECTOR_LVDS) { + /* don't try to enable hpd on eDP or LVDS avoid breaking the + * aux dp channel on imac and help (but not completely fix) + * https://bugzilla.redhat.com/show_bug.cgi?id=726143 + * also avoid interrupt storms during dpms. + */ + continue; + } switch (radeon_connector->hpd.hpd) { case RADEON_HPD_1: WREG32(DC_HPD1_CONTROL, tmp); @@ -673,7 +724,8 @@ struct drm_display_mode *mode, struct drm_display_mode *other_mode) { - u32 tmp; + u32 tmp, buffer_alloc, i; + u32 pipe_offset = radeon_crtc->crtc_id * 0x20; /* * Line Buffer Setup * There are 3 line buffers, each one shared by 2 display controllers. @@ -696,18 +748,34 @@ * non-linked crtcs for maximum line buffer allocation. */ if (radeon_crtc->base.enabled && mode) { - if (other_mode) + if (other_mode) { tmp = 0; /* 1/2 */ - else + buffer_alloc = 1; + } else { tmp = 2; /* whole */ - } else + buffer_alloc = 2; + } + } else { tmp = 0; + buffer_alloc = 0; + } /* second controller of the pair uses second half of the lb */ if (radeon_crtc->crtc_id % 2) tmp += 4; WREG32(DC_LB_MEMORY_SPLIT + radeon_crtc->crtc_offset, tmp); + if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) { + WREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset, + DMIF_BUFFERS_ALLOCATED(buffer_alloc)); + for (i = 0; i < rdev->usec_timeout; i++) { + if (RREG32(PIPE0_DMIF_BUFFER_CONTROL + pipe_offset) & + DMIF_BUFFERS_ALLOCATED_COMPLETED) + break; + udelay(1); + } + } + if (radeon_crtc->base.enabled && mode) { switch (tmp) { case 0: @@ -1312,17 +1380,16 @@ tmp = RREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i]); if (!(tmp & EVERGREEN_CRTC_BLANK_DATA_EN)) { radeon_wait_for_vblank(rdev, i); - tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + tmp |= EVERGREEN_CRTC_BLANK_DATA_EN; WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp); - WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); } } else { tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]); if (!(tmp & EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE)) { radeon_wait_for_vblank(rdev, i); - tmp |= EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE; WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + tmp |= EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE; WREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i], tmp); WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); } @@ -1334,6 +1401,15 @@ break; udelay(1); } + + /* XXX this is a hack to avoid strange behavior with EFI on certain systems */ + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1); + tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]); + tmp &= ~EVERGREEN_CRTC_MASTER_EN; + WREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i], tmp); + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0); + save->crtc_enabled[i] = false; + /* ***** */ } else { save->crtc_enabled[i] = false; } @@ -1351,6 +1427,22 @@ } /* wait for the MC to settle */ udelay(100); + + /* lock double buffered regs */ + for (i = 0; i < rdev->num_crtc; i++) { + if (save->crtc_enabled[i]) { + tmp = RREG32(EVERGREEN_GRPH_UPDATE + crtc_offsets[i]); + if (!(tmp & EVERGREEN_GRPH_UPDATE_LOCK)) { + tmp |= EVERGREEN_GRPH_UPDATE_LOCK; + WREG32(EVERGREEN_GRPH_UPDATE + crtc_offsets[i], tmp); + } + tmp = RREG32(EVERGREEN_MASTER_UPDATE_LOCK + crtc_offsets[i]); + if (!(tmp & 1)) { + tmp |= 1; + WREG32(EVERGREEN_MASTER_UPDATE_LOCK + crtc_offsets[i], tmp); + } + } + } } void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save) @@ -1372,6 +1464,33 @@ WREG32(EVERGREEN_VGA_MEMORY_BASE_ADDRESS_HIGH, upper_32_bits(rdev->mc.vram_start)); WREG32(EVERGREEN_VGA_MEMORY_BASE_ADDRESS, (u32)rdev->mc.vram_start); + /* unlock regs and wait for update */ + for (i = 0; i < rdev->num_crtc; i++) { + if (save->crtc_enabled[i]) { + tmp = RREG32(EVERGREEN_MASTER_UPDATE_MODE + crtc_offsets[i]); + if ((tmp & 0x3) != 0) { + tmp &= ~0x3; + WREG32(EVERGREEN_MASTER_UPDATE_MODE + crtc_offsets[i], tmp); + } + tmp = RREG32(EVERGREEN_GRPH_UPDATE + crtc_offsets[i]); + if (tmp & EVERGREEN_GRPH_UPDATE_LOCK) { + tmp &= ~EVERGREEN_GRPH_UPDATE_LOCK; + WREG32(EVERGREEN_GRPH_UPDATE + crtc_offsets[i], tmp); + } + tmp = RREG32(EVERGREEN_MASTER_UPDATE_LOCK + crtc_offsets[i]); + if (tmp & 1) { + tmp &= ~1; + WREG32(EVERGREEN_MASTER_UPDATE_LOCK + crtc_offsets[i], tmp); + } + for (j = 0; j < rdev->usec_timeout; j++) { + tmp = RREG32(EVERGREEN_GRPH_UPDATE + crtc_offsets[i]); + if ((tmp & EVERGREEN_GRPH_SURFACE_UPDATE_PENDING) == 0) + break; + udelay(1); + } + } + } + /* unblackout the MC */ tmp = RREG32(MC_SHARED_BLACKOUT_CNTL); tmp &= ~BLACKOUT_MODE_MASK; @@ -2298,8 +2417,8 @@ rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE); } else { /* size in MB on evergreen/cayman/tn */ - rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; - rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024; + rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; + rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL; } rdev->mc.visible_vram_size = rdev->mc.aper_size; r700_vram_gtt_location(rdev, &rdev->mc); @@ -3471,6 +3590,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r = r600_irq_init(rdev); if (r) { DRM_ERROR("radeon: IH init failed (%d).\n", r); @@ -3619,10 +3744,6 @@ if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; - rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/evergreend.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/evergreend.h @@ -760,6 +760,10 @@ # define LATENCY_LOW_WATERMARK(x) ((x) << 0) # define LATENCY_HIGH_WATERMARK(x) ((x) << 16) +#define PIPE0_DMIF_BUFFER_CONTROL 0x0ca0 +# define DMIF_BUFFERS_ALLOCATED(x) ((x) << 0) +# define DMIF_BUFFERS_ALLOCATED_COMPLETED (1 << 4) + #define IH_RB_CNTL 0x3e00 # define IH_RB_ENABLE (1 << 0) # define IH_IB_SIZE(x) ((x) << 1) /* log2 */ --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon_ttm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon_ttm.c @@ -726,7 +726,7 @@ return r; } DRM_INFO("radeon: %uM of VRAM memory ready\n", - (unsigned)rdev->mc.real_vram_size / (1024 * 1024)); + (unsigned) (rdev->mc.real_vram_size / (1024 * 1024))); r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT, rdev->mc.gtt_size >> PAGE_SHIFT); if (r) { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/rs600.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/rs600.c @@ -52,23 +52,59 @@ AVIVO_D2CRTC_H_TOTAL - AVIVO_D1CRTC_H_TOTAL }; +static bool avivo_is_in_vblank(struct radeon_device *rdev, int crtc) +{ + if (RREG32(AVIVO_D1CRTC_STATUS + crtc_offsets[crtc]) & AVIVO_D1CRTC_V_BLANK) + return true; + else + return false; +} + +static bool avivo_is_counter_moving(struct radeon_device *rdev, int crtc) +{ + u32 pos1, pos2; + + pos1 = RREG32(AVIVO_D1CRTC_STATUS_POSITION + crtc_offsets[crtc]); + pos2 = RREG32(AVIVO_D1CRTC_STATUS_POSITION + crtc_offsets[crtc]); + + if (pos1 != pos2) + return true; + else + return false; +} + +/** + * avivo_wait_for_vblank - vblank wait asic callback. + * + * @rdev: radeon_device pointer + * @crtc: crtc to wait for vblank on + * + * Wait for vblank on the requested crtc (r5xx-r7xx). + */ void avivo_wait_for_vblank(struct radeon_device *rdev, int crtc) { - int i; + unsigned i = 0; if (crtc >= rdev->num_crtc) return; - if (RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[crtc]) & AVIVO_CRTC_EN) { - for (i = 0; i < rdev->usec_timeout; i++) { - if (!(RREG32(AVIVO_D1CRTC_STATUS + crtc_offsets[crtc]) & AVIVO_D1CRTC_V_BLANK)) + if (!(RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[crtc]) & AVIVO_CRTC_EN)) + return; + + /* depending on when we hit vblank, we may be close to active; if so, + * wait for another frame. + */ + while (avivo_is_in_vblank(rdev, crtc)) { + if (i++ % 100 == 0) { + if (!avivo_is_counter_moving(rdev, crtc)) break; - udelay(1); } - for (i = 0; i < rdev->usec_timeout; i++) { - if (RREG32(AVIVO_D1CRTC_STATUS + crtc_offsets[crtc]) & AVIVO_D1CRTC_V_BLANK) + } + + while (!avivo_is_in_vblank(rdev, crtc)) { + if (i++ % 100 == 0) { + if (!avivo_is_counter_moving(rdev, crtc)) break; - udelay(1); } } } @@ -887,6 +923,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + rs600_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -1011,9 +1053,6 @@ r = radeon_fence_driver_init(rdev); if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; /* Memory manager */ r = radeon_bo_init(rdev); if (r) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r420.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r420.c @@ -265,6 +265,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r100_irq_set(rdev); rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); /* 1M ring buffer */ @@ -411,10 +417,6 @@ if (r) { return r; } - r = radeon_irq_kms_init(rdev); - if (r) { - return r; - } /* Memory manager */ r = radeon_bo_init(rdev); if (r) { --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/radeon.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/radeon.h @@ -341,7 +341,6 @@ struct drm_gem_object gem_base; struct ttm_bo_kmap_obj dma_buf_vmap; - int vmapping_count; }; #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) @@ -387,6 +386,7 @@ uint64_t gpu_addr; void *cpu_ptr; uint32_t domain; + uint32_t align; }; struct radeon_sa_bo; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/ni.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/ni.c @@ -466,21 +466,32 @@ (rdev->pdev->device == 0x9907) || (rdev->pdev->device == 0x9908) || (rdev->pdev->device == 0x9909) || + (rdev->pdev->device == 0x990B) || + (rdev->pdev->device == 0x990C) || + (rdev->pdev->device == 0x990F) || (rdev->pdev->device == 0x9910) || - (rdev->pdev->device == 0x9917)) { + (rdev->pdev->device == 0x9917) || + (rdev->pdev->device == 0x9999) || + (rdev->pdev->device == 0x999C)) { rdev->config.cayman.max_simds_per_se = 6; rdev->config.cayman.max_backends_per_se = 2; } else if ((rdev->pdev->device == 0x9903) || (rdev->pdev->device == 0x9904) || (rdev->pdev->device == 0x990A) || + (rdev->pdev->device == 0x990D) || + (rdev->pdev->device == 0x990E) || (rdev->pdev->device == 0x9913) || - (rdev->pdev->device == 0x9918)) { + (rdev->pdev->device == 0x9918) || + (rdev->pdev->device == 0x999D)) { rdev->config.cayman.max_simds_per_se = 4; rdev->config.cayman.max_backends_per_se = 2; } else if ((rdev->pdev->device == 0x9919) || (rdev->pdev->device == 0x9990) || (rdev->pdev->device == 0x9991) || (rdev->pdev->device == 0x9994) || + (rdev->pdev->device == 0x9995) || + (rdev->pdev->device == 0x9996) || + (rdev->pdev->device == 0x999A) || (rdev->pdev->device == 0x99A0)) { rdev->config.cayman.max_simds_per_se = 3; rdev->config.cayman.max_backends_per_se = 1; @@ -610,15 +621,28 @@ WREG32(GB_ADDR_CONFIG, gb_addr_config); WREG32(DMIF_ADDR_CONFIG, gb_addr_config); + if (ASIC_IS_DCE6(rdev)) + WREG32(DMIF_ADDR_CALC, gb_addr_config); WREG32(HDP_ADDR_CONFIG, gb_addr_config); WREG32(DMA_TILING_CONFIG + DMA0_REGISTER_OFFSET, gb_addr_config); WREG32(DMA_TILING_CONFIG + DMA1_REGISTER_OFFSET, gb_addr_config); - tmp = gb_addr_config & NUM_PIPES_MASK; - tmp = r6xx_remap_render_backend(rdev, tmp, - rdev->config.cayman.max_backends_per_se * - rdev->config.cayman.max_shader_engines, - CAYMAN_MAX_BACKENDS, disabled_rb_mask); + if ((rdev->config.cayman.max_backends_per_se == 1) && + (rdev->flags & RADEON_IS_IGP)) { + if ((disabled_rb_mask & 3) == 1) { + /* RB0 disabled, RB1 enabled */ + tmp = 0x11111111; + } else { + /* RB1 disabled, RB0 enabled */ + tmp = 0x00000000; + } + } else { + tmp = gb_addr_config & NUM_PIPES_MASK; + tmp = r6xx_remap_render_backend(rdev, tmp, + rdev->config.cayman.max_backends_per_se * + rdev->config.cayman.max_shader_engines, + CAYMAN_MAX_BACKENDS, disabled_rb_mask); + } WREG32(GB_BACKEND_MAP, tmp); cgts_tcc_disable = 0xffff0000; @@ -1578,6 +1602,12 @@ } /* Enable IRQ */ + if (!rdev->irq.installed) { + r = radeon_irq_kms_init(rdev); + if (r) + return r; + } + r = r600_irq_init(rdev); if (r) { DRM_ERROR("radeon: IH init failed (%d).\n", r); @@ -1662,6 +1692,7 @@ int cayman_suspend(struct radeon_device *rdev) { r600_audio_fini(rdev); + radeon_vm_manager_fini(rdev); cayman_cp_enable(rdev, false); cayman_dma_stop(rdev); evergreen_irq_suspend(rdev); @@ -1723,10 +1754,6 @@ if (r) return r; - r = radeon_irq_kms_init(rdev); - if (r) - return r; - ring->ring_obj = NULL; r600_ring_init(rdev, ring, 1024 * 1024); --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/evergreen_hdmi.c @@ -156,6 +156,9 @@ struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; uint32_t offset; + if (!dig || !dig->afmt) + return; + /* Silent, r600_hdmi_enable will raise WARN for us */ if (!dig->afmt->enabled) return; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/radeon/r300_cmdbuf.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/radeon/r300_cmdbuf.c @@ -73,7 +73,7 @@ OUT_RING(CP_PACKET0(R300_RE_CLIPRECT_TL_0, nr * 2 - 1)); for (i = 0; i < nr; ++i) { - if (DRM_COPY_FROM_USER_UNCHECKED + if (DRM_COPY_FROM_USER (&box, &cmdbuf->boxes[n + i], sizeof(box))) { DRM_ERROR("copy cliprect faulted\n"); return -EFAULT; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c @@ -29,7 +29,9 @@ #include #include -#define VMW_PPN_SIZE sizeof(unsigned long) +#define VMW_PPN_SIZE (sizeof(unsigned long)) +/* A future safe maximum remap size. */ +#define VMW_PPN_PER_REMAP ((31 * 1024) / VMW_PPN_SIZE) static int vmw_gmr2_bind(struct vmw_private *dev_priv, struct page *pages[], @@ -38,43 +40,61 @@ { SVGAFifoCmdDefineGMR2 define_cmd; SVGAFifoCmdRemapGMR2 remap_cmd; - uint32_t define_size = sizeof(define_cmd) + 4; - uint32_t remap_size = VMW_PPN_SIZE * num_pages + sizeof(remap_cmd) + 4; uint32_t *cmd; uint32_t *cmd_orig; + uint32_t define_size = sizeof(define_cmd) + sizeof(*cmd); + uint32_t remap_num = num_pages / VMW_PPN_PER_REMAP + ((num_pages % VMW_PPN_PER_REMAP) > 0); + uint32_t remap_size = VMW_PPN_SIZE * num_pages + (sizeof(remap_cmd) + sizeof(*cmd)) * remap_num; + uint32_t remap_pos = 0; + uint32_t cmd_size = define_size + remap_size; uint32_t i; - cmd_orig = cmd = vmw_fifo_reserve(dev_priv, define_size + remap_size); + cmd_orig = cmd = vmw_fifo_reserve(dev_priv, cmd_size); if (unlikely(cmd == NULL)) return -ENOMEM; define_cmd.gmrId = gmr_id; define_cmd.numPages = num_pages; + *cmd++ = SVGA_CMD_DEFINE_GMR2; + memcpy(cmd, &define_cmd, sizeof(define_cmd)); + cmd += sizeof(define_cmd) / sizeof(*cmd); + + /* + * Need to split the command if there are too many + * pages that goes into the gmr. + */ + remap_cmd.gmrId = gmr_id; remap_cmd.flags = (VMW_PPN_SIZE > sizeof(*cmd)) ? SVGA_REMAP_GMR2_PPN64 : SVGA_REMAP_GMR2_PPN32; - remap_cmd.offsetPages = 0; - remap_cmd.numPages = num_pages; - *cmd++ = SVGA_CMD_DEFINE_GMR2; - memcpy(cmd, &define_cmd, sizeof(define_cmd)); - cmd += sizeof(define_cmd) / sizeof(uint32); + while (num_pages > 0) { + unsigned long nr = min(num_pages, (unsigned long)VMW_PPN_PER_REMAP); + + remap_cmd.offsetPages = remap_pos; + remap_cmd.numPages = nr; - *cmd++ = SVGA_CMD_REMAP_GMR2; - memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); - cmd += sizeof(remap_cmd) / sizeof(uint32); - - for (i = 0; i < num_pages; ++i) { - if (VMW_PPN_SIZE <= 4) - *cmd = page_to_pfn(*pages++); - else - *((uint64_t *)cmd) = page_to_pfn(*pages++); + *cmd++ = SVGA_CMD_REMAP_GMR2; + memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); + cmd += sizeof(remap_cmd) / sizeof(*cmd); + + for (i = 0; i < nr; ++i) { + if (VMW_PPN_SIZE <= 4) + *cmd = page_to_pfn(*pages++); + else + *((uint64_t *)cmd) = page_to_pfn(*pages++); - cmd += VMW_PPN_SIZE / sizeof(*cmd); + cmd += VMW_PPN_SIZE / sizeof(*cmd); + } + + num_pages -= nr; + remap_pos += nr; } - vmw_fifo_commit(dev_priv, define_size + remap_size); + BUG_ON(cmd != cmd_orig + cmd_size / sizeof(*cmd)); + + vmw_fifo_commit(dev_priv, cmd_size); return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nouveau_gem.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -24,8 +24,6 @@ * */ -#include - #include #include "nouveau_drm.h" --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nouveau_abi16.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nouveau_abi16.c @@ -386,7 +386,7 @@ struct nouveau_drm *drm = nouveau_drm(dev); struct nouveau_device *device = nv_device(drm->device); struct nouveau_abi16 *abi16 = nouveau_abi16_get(file_priv, dev); - struct nouveau_abi16_chan *chan, *temp; + struct nouveau_abi16_chan *chan = NULL, *temp; struct nouveau_abi16_ntfy *ntfy; struct nouveau_object *object; struct nv_dma_class args = {}; @@ -399,10 +399,11 @@ if (unlikely(nv_device(abi16->device)->card_type >= NV_C0)) return nouveau_abi16_put(abi16, -EINVAL); - list_for_each_entry_safe(chan, temp, &abi16->channels, head) { - if (chan->chan->handle == (NVDRM_CHAN | info->channel)) + list_for_each_entry(temp, &abi16->channels, head) { + if (temp->chan->handle == (NVDRM_CHAN | info->channel)) { + chan = temp; break; - chan = NULL; + } } if (!chan) @@ -454,17 +455,18 @@ { struct drm_nouveau_gpuobj_free *fini = data; struct nouveau_abi16 *abi16 = nouveau_abi16_get(file_priv, dev); - struct nouveau_abi16_chan *chan, *temp; + struct nouveau_abi16_chan *chan = NULL, *temp; struct nouveau_abi16_ntfy *ntfy; int ret; if (unlikely(!abi16)) return -ENOMEM; - list_for_each_entry_safe(chan, temp, &abi16->channels, head) { - if (chan->chan->handle == (NVDRM_CHAN | fini->channel)) + list_for_each_entry(temp, &abi16->channels, head) { + if (temp->chan->handle == (NVDRM_CHAN | fini->channel)) { + chan = temp; break; - chan = NULL; + } } if (!chan) --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nouveau_gem.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nouveau_gem.h @@ -35,9 +35,11 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *, struct drm_file *); -extern struct dma_buf *nouveau_gem_prime_export(struct drm_device *dev, - struct drm_gem_object *obj, int flags); -extern struct drm_gem_object *nouveau_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf); +extern int nouveau_gem_prime_pin(struct drm_gem_object *); +extern struct sg_table *nouveau_gem_prime_get_sg_table(struct drm_gem_object *); +extern struct drm_gem_object *nouveau_gem_prime_import_sg_table( + struct drm_device *, size_t size, struct sg_table *); +extern void *nouveau_gem_prime_vmap(struct drm_gem_object *); +extern void nouveau_gem_prime_vunmap(struct drm_gem_object *, void *); #endif --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nv10_fence.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nv10_fence.c @@ -132,7 +132,7 @@ struct ttm_mem_reg *mem = &priv->bo->bo.mem; struct nouveau_object *object; u32 start = mem->start * PAGE_SIZE; - u32 limit = mem->start + mem->size - 1; + u32 limit = start + mem->size - 1; ret = nouveau_object_new(nv_object(chan->cli), chan->handle, NvSema, 0x0002, --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nv40_pm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nv40_pm.c @@ -131,7 +131,7 @@ if (clk < pll->vco1.max_freq) pll->vco2.max_freq = 0; - pclk->pll_calc(pclk, pll, clk, &coef); + ret = pclk->pll_calc(pclk, pll, clk, &coef); if (ret == 0) return -ERANGE; --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nouveau_prime.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nouveau_prime.c @@ -22,126 +22,42 @@ * Authors: Dave Airlie */ -#include - #include #include "nouveau_drm.h" #include "nouveau_gem.h" -static struct sg_table *nouveau_gem_map_dma_buf(struct dma_buf_attachment *attachment, - enum dma_data_direction dir) +struct sg_table *nouveau_gem_prime_get_sg_table(struct drm_gem_object *obj) { - struct nouveau_bo *nvbo = attachment->dmabuf->priv; - struct drm_device *dev = nvbo->gem->dev; + struct nouveau_bo *nvbo = nouveau_gem_object(obj); int npages = nvbo->bo.num_pages; - struct sg_table *sg; - int nents; - - mutex_lock(&dev->struct_mutex); - sg = drm_prime_pages_to_sg(nvbo->bo.ttm->pages, npages); - nents = dma_map_sg(attachment->dev, sg->sgl, sg->nents, dir); - mutex_unlock(&dev->struct_mutex); - return sg; -} - -static void nouveau_gem_unmap_dma_buf(struct dma_buf_attachment *attachment, - struct sg_table *sg, enum dma_data_direction dir) -{ - dma_unmap_sg(attachment->dev, sg->sgl, sg->nents, dir); - sg_free_table(sg); - kfree(sg); -} -static void nouveau_gem_dmabuf_release(struct dma_buf *dma_buf) -{ - struct nouveau_bo *nvbo = dma_buf->priv; - - if (nvbo->gem->export_dma_buf == dma_buf) { - nvbo->gem->export_dma_buf = NULL; - drm_gem_object_unreference_unlocked(nvbo->gem); - } + return drm_prime_pages_to_sg(nvbo->bo.ttm->pages, npages); } -static void *nouveau_gem_kmap_atomic(struct dma_buf *dma_buf, unsigned long page_num) +void *nouveau_gem_prime_vmap(struct drm_gem_object *obj) { - return NULL; -} - -static void nouveau_gem_kunmap_atomic(struct dma_buf *dma_buf, unsigned long page_num, void *addr) -{ - -} -static void *nouveau_gem_kmap(struct dma_buf *dma_buf, unsigned long page_num) -{ - return NULL; -} - -static void nouveau_gem_kunmap(struct dma_buf *dma_buf, unsigned long page_num, void *addr) -{ - -} - -static int nouveau_gem_prime_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma) -{ - return -EINVAL; -} - -static void *nouveau_gem_prime_vmap(struct dma_buf *dma_buf) -{ - struct nouveau_bo *nvbo = dma_buf->priv; - struct drm_device *dev = nvbo->gem->dev; + struct nouveau_bo *nvbo = nouveau_gem_object(obj); int ret; - mutex_lock(&dev->struct_mutex); - if (nvbo->vmapping_count) { - nvbo->vmapping_count++; - goto out_unlock; - } - ret = ttm_bo_kmap(&nvbo->bo, 0, nvbo->bo.num_pages, &nvbo->dma_buf_vmap); - if (ret) { - mutex_unlock(&dev->struct_mutex); + if (ret) return ERR_PTR(ret); - } - nvbo->vmapping_count = 1; -out_unlock: - mutex_unlock(&dev->struct_mutex); + return nvbo->dma_buf_vmap.virtual; } -static void nouveau_gem_prime_vunmap(struct dma_buf *dma_buf, void *vaddr) +void nouveau_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) { - struct nouveau_bo *nvbo = dma_buf->priv; - struct drm_device *dev = nvbo->gem->dev; + struct nouveau_bo *nvbo = nouveau_gem_object(obj); - mutex_lock(&dev->struct_mutex); - nvbo->vmapping_count--; - if (nvbo->vmapping_count == 0) { - ttm_bo_kunmap(&nvbo->dma_buf_vmap); - } - mutex_unlock(&dev->struct_mutex); + ttm_bo_kunmap(&nvbo->dma_buf_vmap); } -static const struct dma_buf_ops nouveau_dmabuf_ops = { - .map_dma_buf = nouveau_gem_map_dma_buf, - .unmap_dma_buf = nouveau_gem_unmap_dma_buf, - .release = nouveau_gem_dmabuf_release, - .kmap = nouveau_gem_kmap, - .kmap_atomic = nouveau_gem_kmap_atomic, - .kunmap = nouveau_gem_kunmap, - .kunmap_atomic = nouveau_gem_kunmap_atomic, - .mmap = nouveau_gem_prime_mmap, - .vmap = nouveau_gem_prime_vmap, - .vunmap = nouveau_gem_prime_vunmap, -}; - -static int -nouveau_prime_new(struct drm_device *dev, - size_t size, - struct sg_table *sg, - struct nouveau_bo **pnvbo) +struct drm_gem_object *nouveau_gem_prime_import_sg_table(struct drm_device *dev, + size_t size, + struct sg_table *sg) { struct nouveau_bo *nvbo; u32 flags = 0; @@ -150,24 +66,22 @@ flags = TTM_PL_FLAG_TT; ret = nouveau_bo_new(dev, size, 0, flags, 0, 0, - sg, pnvbo); + sg, &nvbo); if (ret) - return ret; - nvbo = *pnvbo; + return ERR_PTR(ret); nvbo->valid_domains = NOUVEAU_GEM_DOMAIN_GART; nvbo->gem = drm_gem_object_alloc(dev, nvbo->bo.mem.size); if (!nvbo->gem) { - nouveau_bo_ref(NULL, pnvbo); - return -ENOMEM; + nouveau_bo_ref(NULL, &nvbo); + return ERR_PTR(-ENOMEM); } nvbo->gem->driver_private = nvbo; - return 0; + return nvbo->gem; } -struct dma_buf *nouveau_gem_prime_export(struct drm_device *dev, - struct drm_gem_object *obj, int flags) +int nouveau_gem_prime_pin(struct drm_gem_object *obj) { struct nouveau_bo *nvbo = nouveau_gem_object(obj); int ret = 0; @@ -175,52 +89,7 @@ /* pin buffer into GTT */ ret = nouveau_bo_pin(nvbo, TTM_PL_FLAG_TT); if (ret) - return ERR_PTR(-EINVAL); - - return dma_buf_export(nvbo, &nouveau_dmabuf_ops, obj->size, flags); -} - -struct drm_gem_object *nouveau_gem_prime_import(struct drm_device *dev, - struct dma_buf *dma_buf) -{ - struct dma_buf_attachment *attach; - struct sg_table *sg; - struct nouveau_bo *nvbo; - int ret; - - if (dma_buf->ops == &nouveau_dmabuf_ops) { - nvbo = dma_buf->priv; - if (nvbo->gem) { - if (nvbo->gem->dev == dev) { - drm_gem_object_reference(nvbo->gem); - dma_buf_put(dma_buf); - return nvbo->gem; - } - } - } - /* need to attach */ - attach = dma_buf_attach(dma_buf, dev->dev); - if (IS_ERR(attach)) - return ERR_PTR(PTR_ERR(attach)); - - sg = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); - if (IS_ERR(sg)) { - ret = PTR_ERR(sg); - goto fail_detach; - } - - ret = nouveau_prime_new(dev, dma_buf->size, sg, &nvbo); - if (ret) - goto fail_unmap; - - nvbo->gem->import_attach = attach; - - return nvbo->gem; + return -EINVAL; -fail_unmap: - dma_buf_unmap_attachment(attach, sg, DMA_BIDIRECTIONAL); -fail_detach: - dma_buf_detach(dma_buf, attach); - return ERR_PTR(ret); + return 0; } - --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nouveau_bo.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nouveau_bo.h @@ -31,7 +31,6 @@ int pin_refcnt; struct ttm_bo_kmap_obj dma_buf_vmap; - int vmapping_count; }; static inline struct nouveau_bo * --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nouveau_drm.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -653,8 +653,13 @@ .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, - .gem_prime_export = nouveau_gem_prime_export, - .gem_prime_import = nouveau_gem_prime_import, + .gem_prime_export = drm_gem_prime_export, + .gem_prime_import = drm_gem_prime_import, + .gem_prime_pin = nouveau_gem_prime_pin, + .gem_prime_get_sg_table = nouveau_gem_prime_get_sg_table, + .gem_prime_import_sg_table = nouveau_gem_prime_import_sg_table, + .gem_prime_vmap = nouveau_gem_prime_vmap, + .gem_prime_vunmap = nouveau_gem_prime_vunmap, .gem_init_object = nouveau_gem_object_new, .gem_free_object = nouveau_gem_object_del, --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/nv50_fence.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/nv50_fence.c @@ -50,6 +50,8 @@ struct nv50_fence_chan *fctx; struct ttm_mem_reg *mem = &priv->bo->bo.mem; struct nouveau_object *object; + u32 start = mem->start * PAGE_SIZE; + u32 limit = start + mem->size - 1; int ret, i; fctx = chan->fence = kzalloc(sizeof(*fctx), GFP_KERNEL); @@ -59,26 +61,28 @@ nouveau_fence_context_new(&fctx->base); ret = nouveau_object_new(nv_object(chan->cli), chan->handle, - NvSema, 0x0002, + NvSema, 0x003d, &(struct nv_dma_class) { .flags = NV_DMA_TARGET_VRAM | NV_DMA_ACCESS_RDWR, - .start = mem->start * PAGE_SIZE, - .limit = mem->size - 1, + .start = start, + .limit = limit, }, sizeof(struct nv_dma_class), &object); /* dma objects for display sync channel semaphore blocks */ for (i = 0; !ret && i < dev->mode_config.num_crtc; i++) { struct nouveau_bo *bo = nv50_display_crtc_sema(dev, i); + u32 start = bo->bo.mem.start * PAGE_SIZE; + u32 limit = start + bo->bo.mem.size - 1; ret = nouveau_object_new(nv_object(chan->cli), chan->handle, NvEvoSema0 + i, 0x003d, &(struct nv_dma_class) { .flags = NV_DMA_TARGET_VRAM | NV_DMA_ACCESS_RDWR, - .start = bo->bo.offset, - .limit = bo->bo.offset + 0xfff, + .start = start, + .limit = limit, }, sizeof(struct nv_dma_class), &object); } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/subdev/vm/base.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/subdev/vm/base.c @@ -362,7 +362,7 @@ vm->fpde = offset >> (vmm->pgt_bits + 12); vm->lpde = (offset + length - 1) >> (vmm->pgt_bits + 12); - vm->pgt = kcalloc(vm->lpde - vm->fpde + 1, sizeof(*vm->pgt), GFP_KERNEL); + vm->pgt = vzalloc((vm->lpde - vm->fpde + 1) * sizeof(*vm->pgt)); if (!vm->pgt) { kfree(vm); return -ENOMEM; @@ -371,7 +371,7 @@ ret = nouveau_mm_init(&vm->mm, mm_offset >> 12, mm_length >> 12, block >> 12); if (ret) { - kfree(vm->pgt); + vfree(vm->pgt); kfree(vm); return ret; } @@ -446,7 +446,7 @@ } nouveau_mm_fini(&vm->mm); - kfree(vm->pgt); + vfree(vm->pgt); kfree(vm); } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/subdev/devinit/nv50.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/subdev/devinit/nv50.c @@ -78,12 +78,13 @@ if (ret) return ret; - /* if we ran the init tables, execute first script pointer for each - * display table output entry that has a matching dcb entry. + /* if we ran the init tables, we have to execute the first script + * pointer of each dcb entry's display encoder table in order + * to properly initialise each encoder. */ - while (priv->base.post && ver) { - u16 data = nvbios_outp_parse(bios, i++, &ver, &hdr, &cnt, &len, &info); - if (data && dcb_outp_match(bios, info.type, info.mask, &ver, &len, &outp)) { + while (priv->base.post && dcb_outp_parse(bios, i, &ver, &hdr, &outp)) { + if (nvbios_outp_match(bios, outp.hasht, outp.hashm, + &ver, &hdr, &cnt, &len, &info)) { struct nvbios_init init = { .subdev = nv_subdev(priv), .bios = bios, @@ -95,7 +96,8 @@ nvbios_exec(&init); } - }; + i++; + } return 0; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/subdev/bios/dcb.c @@ -107,6 +107,18 @@ return 0x0000; } +static inline u16 +dcb_outp_hasht(struct dcb_output *outp) +{ + return (outp->extdev << 8) | (outp->location << 4) | outp->type; +} + +static inline u16 +dcb_outp_hashm(struct dcb_output *outp) +{ + return (outp->heads << 8) | (outp->link << 6) | outp->or; +} + u16 dcb_outp_parse(struct nouveau_bios *bios, u8 idx, u8 *ver, u8 *len, struct dcb_output *outp) @@ -135,34 +147,28 @@ case DCB_OUTPUT_DP: outp->link = (conf & 0x00000030) >> 4; outp->sorconf.link = outp->link; /*XXX*/ + outp->extdev = 0x00; + if (outp->location != 0) + outp->extdev = (conf & 0x0000ff00) >> 8; break; default: break; } } + + outp->hasht = dcb_outp_hasht(outp); + outp->hashm = dcb_outp_hashm(outp); } return dcb; } -static inline u16 -dcb_outp_hasht(struct dcb_output *outp) -{ - return outp->type; -} - -static inline u16 -dcb_outp_hashm(struct dcb_output *outp) -{ - return (outp->heads << 8) | (outp->link << 6) | outp->or; -} - u16 dcb_outp_match(struct nouveau_bios *bios, u16 type, u16 mask, u8 *ver, u8 *len, struct dcb_output *outp) { u16 dcb, idx = 0; while ((dcb = dcb_outp_parse(bios, idx++, ver, len, outp))) { - if (dcb_outp_hasht(outp) == type) { + if ((dcb_outp_hasht(outp) & 0x00ff) == (type & 0x00ff)) { if ((dcb_outp_hashm(outp) & mask) == mask) break; } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/subdev/bios/init.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/subdev/bios/init.c @@ -1921,8 +1921,8 @@ trace("ZM_MASK_ADD\tR[0x%06x] &= 0x%08x += 0x%08x\n", addr, mask, add); init->offset += 13; - data = init_rd32(init, addr) & mask; - data |= ((data + add) & ~mask); + data = init_rd32(init, addr); + data = (data & mask) | ((data + add) & ~mask); init_wr32(init, addr, data); } --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/subdev/device/nvc0.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/subdev/device/nvc0.c @@ -134,7 +134,6 @@ device->oclass[NVDEV_ENGINE_BSP ] = &nvc0_bsp_oclass; device->oclass[NVDEV_ENGINE_PPP ] = &nvc0_ppp_oclass; device->oclass[NVDEV_ENGINE_COPY0 ] = &nvc0_copy0_oclass; - device->oclass[NVDEV_ENGINE_COPY1 ] = &nvc0_copy1_oclass; device->oclass[NVDEV_ENGINE_DISP ] = &nva3_disp_oclass; break; case 0xce: @@ -218,7 +217,6 @@ device->oclass[NVDEV_ENGINE_BSP ] = &nvc0_bsp_oclass; device->oclass[NVDEV_ENGINE_PPP ] = &nvc0_ppp_oclass; device->oclass[NVDEV_ENGINE_COPY0 ] = &nvc0_copy0_oclass; - device->oclass[NVDEV_ENGINE_COPY1 ] = &nvc0_copy1_oclass; device->oclass[NVDEV_ENGINE_DISP ] = &nva3_disp_oclass; break; case 0xc8: --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/engine/disp/hdminva3.c +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/engine/disp/hdminva3.c @@ -55,6 +55,10 @@ nv_wr32(priv, 0x61c510 + soff, 0x00000000); nv_mask(priv, 0x61c500 + soff, 0x00000001, 0x00000001); + nv_mask(priv, 0x61c5d0 + soff, 0x00070001, 0x00010001); /* SPARE, HW_CTS */ + nv_mask(priv, 0x61c568 + soff, 0x00010101, 0x00000000); /* ACR_CTRL, ?? */ + nv_mask(priv, 0x61c578 + soff, 0x80000000, 0x80000000); /* ACR_0441_ENABLE */ + /* ??? */ nv_mask(priv, 0x61733c, 0x00100000, 0x00100000); /* RESETF */ nv_mask(priv, 0x61733c, 0x10000000, 0x10000000); /* LOOKUP_EN */ --- linux-lts-raring-3.8.0.orig/drivers/gpu/drm/nouveau/core/include/subdev/bios/dcb.h +++ linux-lts-raring-3.8.0/drivers/gpu/drm/nouveau/core/include/subdev/bios/dcb.h @@ -16,6 +16,8 @@ struct dcb_output { int index; /* may not be raw dcb index if merging has happened */ + u16 hasht; + u16 hashm; enum dcb_output_type type; uint8_t i2c_index; uint8_t heads; @@ -25,6 +27,7 @@ uint8_t or; uint8_t link; bool duallink_possible; + uint8_t extdev; union { struct sor_conf { int link; --- linux-lts-raring-3.8.0.orig/drivers/firmware/Kconfig +++ linux-lts-raring-3.8.0/drivers/firmware/Kconfig @@ -53,6 +53,24 @@ Subsequent efibootmgr releases may be found at: +config EFI_VARS_PSTORE + bool "Register efivars backend for pstore" + depends on EFI_VARS && PSTORE + default y + help + Say Y here to enable use efivars as a backend to pstore. This + will allow writing console messages, crash dumps, or anything + else supported by pstore to EFI variables. + +config EFI_VARS_PSTORE_DEFAULT_DISABLE + bool "Disable using efivars as a pstore backend by default" + depends on EFI_VARS_PSTORE + default n + help + Saying Y here will disable the use of efivars as a storage + backend for pstore by default. This setting can be overridden + using the efivars module's pstore_disable parameter. + config EFI_PCDP bool "Console device selection via EFI PCDP or HCDP table" depends on ACPI && EFI && IA64 --- linux-lts-raring-3.8.0.orig/drivers/firmware/dmi_scan.c +++ linux-lts-raring-3.8.0/drivers/firmware/dmi_scan.c @@ -442,7 +442,6 @@ static int __init smbios_present(const char __iomem *p) { u8 buf[32]; - int offset = 0; memcpy_fromio(buf, p, 32); if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) { @@ -461,9 +460,9 @@ dmi_ver = 0x0206; break; } - offset = 16; + return memcmp(p + 16, "_DMI_", 5) || dmi_present(p + 16); } - return dmi_present(buf + offset); + return 1; } void __init dmi_scan_machine(void) --- linux-lts-raring-3.8.0.orig/drivers/firmware/efivars.c +++ linux-lts-raring-3.8.0/drivers/firmware/efivars.c @@ -79,6 +79,7 @@ #include #include #include +#include #include #include @@ -102,6 +103,11 @@ */ #define GUID_LEN 36 +static bool efivars_pstore_disable = + IS_ENABLED(CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE); + +module_param_named(pstore_disable, efivars_pstore_disable, bool, 0644); + /* * The maximum size of VariableName + Data = 1024 * Therefore, it's reasonable to save that much @@ -405,10 +411,11 @@ get_var_data(struct efivars *efivars, struct efi_variable *var) { efi_status_t status; + unsigned long flags; - spin_lock(&efivars->lock); + spin_lock_irqsave(&efivars->lock, flags); status = get_var_data_locked(efivars, var); - spin_unlock(&efivars->lock); + spin_unlock_irqrestore(&efivars->lock, flags); if (status != EFI_SUCCESS) { printk(KERN_WARNING "efivars: get_variable() failed 0x%lx!\n", @@ -417,6 +424,32 @@ return status; } +static efi_status_t +check_var_size_locked(struct efivars *efivars, u32 attributes, + unsigned long size) +{ + const struct efivar_operations *fops = efivars->ops; + + if (!efivars->ops->query_variable_store) + return EFI_UNSUPPORTED; + + return fops->query_variable_store(attributes, size); +} + + +static efi_status_t +check_var_size(struct efivars *efivars, u32 attributes, unsigned long size) +{ + efi_status_t status; + unsigned long flags; + + spin_lock_irqsave(&efivars->lock, flags); + status = check_var_size_locked(efivars, attributes, size); + spin_unlock_irqrestore(&efivars->lock, flags); + + return status; +} + static ssize_t efivar_guid_read(struct efivar_entry *entry, char *buf) { @@ -537,14 +570,19 @@ return -EINVAL; } - spin_lock(&efivars->lock); - status = efivars->ops->set_variable(new_var->VariableName, - &new_var->VendorGuid, - new_var->Attributes, - new_var->DataSize, - new_var->Data); + spin_lock_irq(&efivars->lock); - spin_unlock(&efivars->lock); + status = check_var_size_locked(efivars, new_var->Attributes, + new_var->DataSize + utf16_strsize(new_var->VariableName, 1024)); + + if (status == EFI_SUCCESS || status == EFI_UNSUPPORTED) + status = efivars->ops->set_variable(new_var->VariableName, + &new_var->VendorGuid, + new_var->Attributes, + new_var->DataSize, + new_var->Data); + + spin_unlock_irq(&efivars->lock); if (status != EFI_SUCCESS) { printk(KERN_WARNING "efivars: set_variable() failed: status=%lx\n", @@ -693,8 +731,7 @@ u32 attributes; struct inode *inode = file->f_mapping->host; unsigned long datasize = count - sizeof(attributes); - unsigned long newdatasize; - u64 storage_size, remaining_size, max_size; + unsigned long newdatasize, varsize; ssize_t bytes = 0; if (count < sizeof(attributes)) @@ -713,28 +750,18 @@ * amounts of memory. Pick a default size of 64K if * QueryVariableInfo() isn't supported by the firmware. */ - spin_lock(&efivars->lock); - - if (!efivars->ops->query_variable_info) - status = EFI_UNSUPPORTED; - else { - const struct efivar_operations *fops = efivars->ops; - status = fops->query_variable_info(attributes, &storage_size, - &remaining_size, &max_size); - } - spin_unlock(&efivars->lock); + varsize = datasize + utf16_strsize(var->var.VariableName, 1024); + status = check_var_size(efivars, attributes, varsize); if (status != EFI_SUCCESS) { if (status != EFI_UNSUPPORTED) return efi_status_to_err(status); - remaining_size = 65536; + if (datasize > 65536) + return -ENOSPC; } - if (datasize > remaining_size) - return -ENOSPC; - data = kmalloc(datasize, GFP_KERNEL); if (!data) return -ENOMEM; @@ -754,7 +781,20 @@ * set_variable call, and removal of the variable from the efivars * list (in the case of an authenticated delete). */ - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); + + /* + * Ensure that the available space hasn't shrunk below the safe level + */ + + status = check_var_size_locked(efivars, attributes, varsize); + + if (status != EFI_SUCCESS && status != EFI_UNSUPPORTED) { + spin_unlock_irq(&efivars->lock); + kfree(data); + + return efi_status_to_err(status); + } status = efivars->ops->set_variable(var->var.VariableName, &var->var.VendorGuid, @@ -762,7 +802,7 @@ data); if (status != EFI_SUCCESS) { - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); kfree(data); return efi_status_to_err(status); @@ -783,21 +823,21 @@ NULL); if (status == EFI_BUFFER_TOO_SMALL) { - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); mutex_lock(&inode->i_mutex); i_size_write(inode, newdatasize + sizeof(attributes)); mutex_unlock(&inode->i_mutex); } else if (status == EFI_NOT_FOUND) { list_del(&var->list); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); efivar_unregister(var); drop_nlink(inode); d_delete(file->f_dentry); dput(file->f_dentry); } else { - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); pr_warn("efivarfs: inconsistent EFI variable implementation? " "status = %lx\n", status); } @@ -819,11 +859,11 @@ void *data; ssize_t size = 0; - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); status = efivars->ops->get_variable(var->var.VariableName, &var->var.VendorGuid, &attributes, &datasize, NULL); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); if (status != EFI_BUFFER_TOO_SMALL) return efi_status_to_err(status); @@ -833,12 +873,12 @@ if (!data) return -ENOMEM; - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); status = efivars->ops->get_variable(var->var.VariableName, &var->var.VendorGuid, &attributes, &datasize, (data + sizeof(attributes))); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); if (status != EFI_SUCCESS) { size = efi_status_to_err(status); @@ -900,6 +940,48 @@ return inode; } +/* + * Return true if 'str' is a valid efivarfs filename of the form, + * + * VariableName-12345678-1234-1234-1234-1234567891bc + */ +static bool efivarfs_valid_name(const char *str, int len) +{ + static const char dashes[GUID_LEN] = { + [8] = 1, [13] = 1, [18] = 1, [23] = 1 + }; + const char *s = str + len - GUID_LEN; + int i; + + /* + * We need a GUID, plus at least one letter for the variable name, + * plus the '-' separator + */ + if (len < GUID_LEN + 2) + return false; + + /* GUID must be preceded by a '-' */ + if (*(s - 1) != '-') + return false; + + /* + * Validate that 's' is of the correct format, e.g. + * + * 12345678-1234-1234-1234-123456789abc + */ + for (i = 0; i < GUID_LEN; i++) { + if (dashes[i]) { + if (*s++ != '-') + return false; + } else { + if (!isxdigit(*s++)) + return false; + } + } + + return true; +} + static void efivarfs_hex_to_guid(const char *str, efi_guid_t *guid) { guid->b[0] = hex_to_bin(str[6]) << 4 | hex_to_bin(str[7]); @@ -928,11 +1010,7 @@ struct efivar_entry *var; int namelen, i = 0, err = 0; - /* - * We need a GUID, plus at least one letter for the variable name, - * plus the '-' separator - */ - if (dentry->d_name.len < GUID_LEN + 2) + if (!efivarfs_valid_name(dentry->d_name.name, dentry->d_name.len)) return -EINVAL; inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0); @@ -966,9 +1044,9 @@ goto out; kobject_uevent(&var->kobj, KOBJ_ADD); - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); list_add(&var->list, &efivars->list); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); d_instantiate(dentry, inode); dget(dentry); out: @@ -985,7 +1063,7 @@ struct efivars *efivars = var->efivars; efi_status_t status; - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); status = efivars->ops->set_variable(var->var.VariableName, &var->var.VendorGuid, @@ -993,17 +1071,102 @@ if (status == EFI_SUCCESS || status == EFI_NOT_FOUND) { list_del(&var->list); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); efivar_unregister(var); drop_nlink(dentry->d_inode); dput(dentry); return 0; } - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return -EINVAL; }; +/* + * Compare two efivarfs file names. + * + * An efivarfs filename is composed of two parts, + * + * 1. A case-sensitive variable name + * 2. A case-insensitive GUID + * + * So we need to perform a case-sensitive match on part 1 and a + * case-insensitive match on part 2. + */ +static int efivarfs_d_compare(const struct dentry *parent, const struct inode *pinode, + const struct dentry *dentry, const struct inode *inode, + unsigned int len, const char *str, + const struct qstr *name) +{ + int guid = len - GUID_LEN; + + if (name->len != len) + return 1; + + /* Case-sensitive compare for the variable name */ + if (memcmp(str, name->name, guid)) + return 1; + + /* Case-insensitive compare for the GUID */ + return strncasecmp(name->name + guid, str + guid, GUID_LEN); +} + +static int efivarfs_d_hash(const struct dentry *dentry, + const struct inode *inode, struct qstr *qstr) +{ + unsigned long hash = init_name_hash(); + const unsigned char *s = qstr->name; + unsigned int len = qstr->len; + + if (!efivarfs_valid_name(s, len)) + return -EINVAL; + + while (len-- > GUID_LEN) + hash = partial_name_hash(*s++, hash); + + /* GUID is case-insensitive. */ + while (len--) + hash = partial_name_hash(tolower(*s++), hash); + + qstr->hash = end_name_hash(hash); + return 0; +} + +/* + * Retaining negative dentries for an in-memory filesystem just wastes + * memory and lookup time: arrange for them to be deleted immediately. + */ +static int efivarfs_delete_dentry(const struct dentry *dentry) +{ + return 1; +} + +static struct dentry_operations efivarfs_d_ops = { + .d_compare = efivarfs_d_compare, + .d_hash = efivarfs_d_hash, + .d_delete = efivarfs_delete_dentry, +}; + +static struct dentry *efivarfs_alloc_dentry(struct dentry *parent, char *name) +{ + struct dentry *d; + struct qstr q; + int err; + + q.name = name; + q.len = strlen(name); + + err = efivarfs_d_hash(NULL, NULL, &q); + if (err) + return ERR_PTR(err); + + d = d_alloc(parent, &q); + if (d) + return d; + + return ERR_PTR(-ENOMEM); +} + static int efivarfs_fill_super(struct super_block *sb, void *data, int silent) { struct inode *inode = NULL; @@ -1011,6 +1174,7 @@ struct efivar_entry *entry, *n; struct efivars *efivars = &__efivars; char *name; + int err = -ENOMEM; efivarfs_sb = sb; @@ -1019,6 +1183,7 @@ sb->s_blocksize_bits = PAGE_CACHE_SHIFT; sb->s_magic = EFIVARFS_MAGIC; sb->s_op = &efivarfs_ops; + sb->s_d_op = &efivarfs_d_ops; sb->s_time_gran = 1; inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0); @@ -1059,20 +1224,22 @@ if (!inode) goto fail_name; - dentry = d_alloc_name(root, name); - if (!dentry) + dentry = efivarfs_alloc_dentry(root, name); + if (IS_ERR(dentry)) { + err = PTR_ERR(dentry); goto fail_inode; + } /* copied by the above to local storage in the dentry. */ kfree(name); - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); efivars->ops->get_variable(entry->var.VariableName, &entry->var.VendorGuid, &entry->var.Attributes, &size, NULL); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); mutex_lock(&inode->i_mutex); inode->i_private = entry; @@ -1088,7 +1255,7 @@ fail_name: kfree(name); fail: - return -ENOMEM; + return err; } static struct dentry *efivarfs_mount(struct file_system_type *fs_type, @@ -1109,21 +1276,31 @@ .kill_sb = efivarfs_kill_sb, }; +/* + * Handle negative dentry. + */ +static struct dentry *efivarfs_lookup(struct inode *dir, struct dentry *dentry, + unsigned int flags) +{ + if (dentry->d_name.len > NAME_MAX) + return ERR_PTR(-ENAMETOOLONG); + d_add(dentry, NULL); + return NULL; +} + static const struct inode_operations efivarfs_dir_inode_operations = { - .lookup = simple_lookup, + .lookup = efivarfs_lookup, .unlink = efivarfs_unlink, .create = efivarfs_create, }; -static struct pstore_info efi_pstore_info; - -#ifdef CONFIG_PSTORE +#ifdef CONFIG_EFI_VARS_PSTORE static int efi_pstore_open(struct pstore_info *psi) { struct efivars *efivars = psi->data; - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); efivars->walk_entry = list_first_entry(&efivars->list, struct efivar_entry, list); return 0; @@ -1133,7 +1310,7 @@ { struct efivars *efivars = psi->data; - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return 0; } @@ -1207,22 +1384,22 @@ efi_guid_t vendor = LINUX_EFI_CRASH_GUID; struct efivars *efivars = psi->data; int i, ret = 0; - u64 storage_space, remaining_space, max_variable_size; efi_status_t status = EFI_NOT_FOUND; + unsigned long flags; - spin_lock(&efivars->lock); + spin_lock_irqsave(&efivars->lock, flags); /* * Check if there is a space enough to log. * size: a size of logging data * DUMP_NAME_LEN * 2: a maximum size of variable name */ - status = efivars->ops->query_variable_info(PSTORE_EFI_ATTRIBUTES, - &storage_space, - &remaining_space, - &max_variable_size); - if (status || remaining_space < size + DUMP_NAME_LEN * 2) { - spin_unlock(&efivars->lock); + + status = check_var_size_locked(efivars, PSTORE_EFI_ATTRIBUTES, + size + DUMP_NAME_LEN * 2); + + if (status) { + spin_unlock_irqrestore(&efivars->lock, flags); *id = part; return -ENOSPC; } @@ -1236,7 +1413,7 @@ efivars->ops->set_variable(efi_name, &vendor, PSTORE_EFI_ATTRIBUTES, size, psi->buf); - spin_unlock(&efivars->lock); + spin_unlock_irqrestore(&efivars->lock, flags); if (size) ret = efivar_create_sysfs_entry(efivars, @@ -1263,7 +1440,7 @@ sprintf(name, "dump-type%u-%u-%d-%lu", type, (unsigned int)id, count, time.tv_sec); - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); for (i = 0; i < DUMP_NAME_LEN; i++) efi_name[i] = name[i]; @@ -1307,45 +1484,13 @@ if (found) list_del(&found->list); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); if (found) efivar_unregister(found); return 0; } -#else -static int efi_pstore_open(struct pstore_info *psi) -{ - return 0; -} - -static int efi_pstore_close(struct pstore_info *psi) -{ - return 0; -} - -static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, int *count, - struct timespec *timespec, - char **buf, struct pstore_info *psi) -{ - return -1; -} - -static int efi_pstore_write(enum pstore_type_id type, - enum kmsg_dump_reason reason, u64 *id, - unsigned int part, int count, size_t size, - struct pstore_info *psi) -{ - return 0; -} - -static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count, - struct timespec time, struct pstore_info *psi) -{ - return 0; -} -#endif static struct pstore_info efi_pstore_info = { .owner = THIS_MODULE, @@ -1357,6 +1502,24 @@ .erase = efi_pstore_erase, }; +static void efivar_pstore_register(struct efivars *efivars) +{ + efivars->efi_pstore_info = efi_pstore_info; + efivars->efi_pstore_info.buf = kmalloc(4096, GFP_KERNEL); + if (efivars->efi_pstore_info.buf) { + efivars->efi_pstore_info.bufsize = 1024; + efivars->efi_pstore_info.data = efivars; + spin_lock_init(&efivars->efi_pstore_info.buf_lock); + pstore_register(&efivars->efi_pstore_info); + } +} +#else +static void efivar_pstore_register(struct efivars *efivars) +{ + return; +} +#endif + static ssize_t efivar_create(struct file *filp, struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t pos, size_t count) @@ -1377,7 +1540,7 @@ return -EINVAL; } - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); /* * Does this variable already exist? @@ -1395,10 +1558,18 @@ } } if (found) { - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return -EINVAL; } + status = check_var_size_locked(efivars, new_var->Attributes, + new_var->DataSize + utf16_strsize(new_var->VariableName, 1024)); + + if (status && status != EFI_UNSUPPORTED) { + spin_unlock_irq(&efivars->lock); + return efi_status_to_err(status); + } + /* now *really* create the variable via EFI */ status = efivars->ops->set_variable(new_var->VariableName, &new_var->VendorGuid, @@ -1409,10 +1580,10 @@ if (status != EFI_SUCCESS) { printk(KERN_WARNING "efivars: set_variable() failed: status=%lx\n", status); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return -EIO; } - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); /* Create the entry in sysfs. Locking is not required here */ status = efivar_create_sysfs_entry(efivars, @@ -1440,7 +1611,7 @@ if (!capable(CAP_SYS_ADMIN)) return -EACCES; - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); /* * Does this variable already exist? @@ -1458,7 +1629,7 @@ } } if (!found) { - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return -EINVAL; } /* force the Attributes/DataSize to 0 to ensure deletion */ @@ -1474,18 +1645,65 @@ if (status != EFI_SUCCESS) { printk(KERN_WARNING "efivars: set_variable() failed: status=%lx\n", status); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return -EIO; } list_del(&search_efivar->list); /* We need to release this lock before unregistering. */ - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); efivar_unregister(search_efivar); /* It's dead Jim.... */ return count; } +static bool variable_is_present(efi_char16_t *variable_name, efi_guid_t *vendor) +{ + struct efivar_entry *entry, *n; + struct efivars *efivars = &__efivars; + unsigned long strsize1, strsize2; + bool found = false; + + strsize1 = utf16_strsize(variable_name, 1024); + list_for_each_entry_safe(entry, n, &efivars->list, list) { + strsize2 = utf16_strsize(entry->var.VariableName, 1024); + if (strsize1 == strsize2 && + !memcmp(variable_name, &(entry->var.VariableName), + strsize2) && + !efi_guidcmp(entry->var.VendorGuid, + *vendor)) { + found = true; + break; + } + } + return found; +} + +/* + * Returns the size of variable_name, in bytes, including the + * terminating NULL character, or variable_name_size if no NULL + * character is found among the first variable_name_size bytes. + */ +static unsigned long var_name_strnsize(efi_char16_t *variable_name, + unsigned long variable_name_size) +{ + unsigned long len; + efi_char16_t c; + + /* + * The variable name is, by definition, a NULL-terminated + * string, so make absolutely sure that variable_name_size is + * the value we expect it to be. If not, return the real size. + */ + for (len = 2; len <= variable_name_size; len += sizeof(c)) { + c = variable_name[(len / sizeof(c)) - 1]; + if (!c) + break; + } + + return min(len, variable_name_size); +} + /* * Let's not leave out systab information that snuck into * the efivars driver @@ -1594,9 +1812,9 @@ kfree(short_name); short_name = NULL; - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); list_add(&new_efivar->list, &efivars->list); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); return 0; } @@ -1665,9 +1883,9 @@ struct efivar_entry *entry, *n; list_for_each_entry_safe(entry, n, &efivars->list, list) { - spin_lock(&efivars->lock); + spin_lock_irq(&efivars->lock); list_del(&entry->list); - spin_unlock(&efivars->lock); + spin_unlock_irq(&efivars->lock); efivar_unregister(entry); } if (efivars->new_var) @@ -1681,6 +1899,28 @@ } EXPORT_SYMBOL_GPL(unregister_efivars); +/* + * Print a warning when duplicate EFI variables are encountered and + * disable the sysfs workqueue since the firmware is buggy. + */ +static void dup_variable_bug(efi_char16_t *s16, efi_guid_t *vendor_guid, + unsigned long len16) +{ + size_t i, len8 = len16 / sizeof(efi_char16_t); + char *s8; + + s8 = kzalloc(len8, GFP_KERNEL); + if (!s8) + return; + + for (i = 0; i < len8; i++) + s8[i] = s16[i]; + + printk(KERN_WARNING "efivars: duplicate variable: %s-%pUl\n", + s8, vendor_guid); + kfree(s8); +} + int register_efivars(struct efivars *efivars, const struct efivar_operations *ops, struct kobject *parent_kobj) @@ -1729,6 +1969,24 @@ &vendor_guid); switch (status) { case EFI_SUCCESS: + variable_name_size = var_name_strnsize(variable_name, + variable_name_size); + + /* + * Some firmware implementations return the + * same variable name on multiple calls to + * get_next_variable(). Terminate the loop + * immediately as there is no guarantee that + * we'll ever see a different variable name, + * and may end up looping here forever. + */ + if (variable_is_present(variable_name, &vendor_guid)) { + dup_variable_bug(variable_name, &vendor_guid, + variable_name_size); + status = EFI_NOT_FOUND; + break; + } + efivar_create_sysfs_entry(efivars, variable_name_size, variable_name, @@ -1748,15 +2006,8 @@ if (error) unregister_efivars(efivars); - efivars->efi_pstore_info = efi_pstore_info; - - efivars->efi_pstore_info.buf = kmalloc(4096, GFP_KERNEL); - if (efivars->efi_pstore_info.buf) { - efivars->efi_pstore_info.bufsize = 1024; - efivars->efi_pstore_info.data = efivars; - spin_lock_init(&efivars->efi_pstore_info.buf_lock); - pstore_register(&efivars->efi_pstore_info); - } + if (!efivars_pstore_disable) + efivar_pstore_register(efivars); register_filesystem(&efivarfs_type); @@ -1796,7 +2047,7 @@ ops.get_variable = efi.get_variable; ops.set_variable = efi.set_variable; ops.get_next_variable = efi.get_next_variable; - ops.query_variable_info = efi.query_variable_info; + ops.query_variable_store = efi_query_variable_store; error = register_efivars(&__efivars, &ops, efi_kobj); if (error) --- linux-lts-raring-3.8.0.orig/ubuntu/Kconfig +++ linux-lts-raring-3.8.0/ubuntu/Kconfig @@ -0,0 +1,29 @@ +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/dm-raid4-5/Kconfig" +## +## +## +source "ubuntu/aufs/Kconfig" +## +## +## +source "ubuntu/alx/Kconfig" +## +## +## +## +## +## + +endmenu --- linux-lts-raring-3.8.0.orig/ubuntu/Makefile +++ linux-lts-raring-3.8.0/ubuntu/Makefile @@ -0,0 +1,32 @@ +# +# 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. +# + +## +## +## +obj-$(CONFIG_DM_RAID45) += dm-raid4-5/ +## +## +## +obj-$(CONFIG_AUFS_FS) += aufs/ +## +## +## +obj-$(CONFIG_ALX) += alx/ +## +## +## +## +## +## + +# This is a stupid trick to get kbuild to create ubuntu/built-in.o +obj- += foo.o --- linux-lts-raring-3.8.0.orig/ubuntu/aufs-update +++ linux-lts-raring-3.8.0/ubuntu/aufs-update @@ -0,0 +1,52 @@ +#!/bin/bash +# +# NOTE: See aufs/BOM.UPDATING for instructions on how to use this updater. +# + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi +aufs="$1" + +# Get the current tip name +{ + read x url + read x o_log_sha1 + read x o_tip_sha1 +} --- linux-lts-raring-3.8.0.orig/ubuntu/include/uapi/Kbuild +++ linux-lts-raring-3.8.0/ubuntu/include/uapi/Kbuild @@ -0,0 +1 @@ +header-y += linux/ --- linux-lts-raring-3.8.0.orig/ubuntu/include/uapi/linux/Kbuild +++ linux-lts-raring-3.8.0/ubuntu/include/uapi/linux/Kbuild @@ -0,0 +1 @@ +header-y = aufs_type.h --- linux-lts-raring-3.8.0.orig/ubuntu/include/uapi/linux/aufs_type.h +++ linux-lts-raring-3.8.0/ubuntu/include/uapi/linux/aufs_type.h @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +#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__, current->comm, current->pid +#else +#include +#include +#endif /* __KERNEL__ */ + +#include + +#define AUFS_VERSION "3.x-rcN-20121112" + +/* 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 */ +#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_TRUNC_INIT 64 /* blocks */ +#define AUFS_XINO_TRUNC_STEP 4 /* blocks */ +#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_PLINK_WARN 100 /* number of plinks */ + +/* 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 + +#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_BRRATTR_WH "wh" +#define AUFS_BRWATTR_NLWH "nolwh" + +/* ---------------------------------------------------------------------- */ + +/* ioctl */ +enum { + /* readdir in userspace */ + AuCtl_RDU, + AuCtl_RDU_INO, + + /* pathconf wrapper */ + AuCtl_WBR_FD, + + /* busy inode */ + AuCtl_IBUSY +}; + +/* 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); + +/* ---------------------------------------------------------------------- */ + +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); + +/* ---------------------------------------------------------------------- */ + +#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) + +#endif /* __AUFS_TYPE_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/poll.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/poll.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 dentry *dentry; + struct super_block *sb; + + /* We should pretend an error happened. */ + mask = POLLERR /* | POLLIN | POLLOUT */; + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + /* it is not an error if h_file has no operation */ + mask = DEFAULT_POLLMASK; + h_file = au_hf_top(file); + if (h_file->f_op && h_file->f_op->poll) + mask = h_file->f_op->poll(h_file, wait); + + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + +out: + si_read_unlock(sb); + AuTraceErr((int)mask); + return mask; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/wbr_policy.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/wbr_policy.c @@ -0,0 +1,700 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 = h_src->d_inode; + 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(h_path->dentry->d_inode, h_isrc); + err = vfsub_sio_notify_change(h_path, &ia); + + /* 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); + } + + 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) + +struct au_cpdown_dir_args { + struct dentry *parent; + unsigned int flags; +}; + +static int au_cpdown_dir_opq(struct dentry *dentry, aufs_bindex_t bdst, + struct au_cpdown_dir_args *a) +{ + 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(a->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 (h_path.dentry->d_inode) { + h_path.mnt = br->br_mnt; + 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 dentry *h_parent, void *arg) +{ + int err, rerr; + aufs_bindex_t bopq, bstart; + struct path h_path; + struct dentry *parent; + struct inode *h_dir, *h_inode, *inode, *dir; + struct au_cpdown_dir_args *args = arg; + + bstart = au_dbstart(dentry); + /* dentry is di-locked */ + parent = dget_parent(dentry); + dir = parent->d_inode; + h_dir = h_parent->d_inode; + AuDebugOn(h_dir != au_h_iptr(dir, bdst)); + IMustLock(h_dir); + + err = au_lkup_neg(dentry, bdst); + 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(args->flags, MADE_DIR); + + bopq = au_dbdiropq(dentry); + au_fclr_cpdown(args->flags, WHED); + au_fclr_cpdown(args->flags, DIROPQ); + if (au_dbwh(dentry) == bdst) + au_fset_cpdown(args->flags, WHED); + if (!au_ftest_cpdown(args->flags, PARENT_OPQ) && bopq <= bdst) + au_fset_cpdown(args->flags, PARENT_OPQ); + h_inode = h_path.dentry->d_inode; + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + if (au_ftest_cpdown(args->flags, WHED)) { + err = au_cpdown_dir_opq(dentry, bdst, args); + if (unlikely(err)) { + mutex_unlock(&h_inode->i_mutex); + goto out_dir; + } + } + + err = au_cpdown_attr(&h_path, au_h_dptr(dentry, bstart)); + mutex_unlock(&h_inode->i_mutex); + if (unlikely(err)) + goto out_opq; + + if (au_ftest_cpdown(args->flags, WHED)) { + err = au_cpdown_dir_wh(dentry, h_parent, dir, bdst); + if (unlikely(err)) + goto out_opq; + } + + inode = dentry->d_inode; + if (au_ibend(inode) < bdst) + au_set_ibend(inode, bdst); + au_set_h_iptr(inode, bdst, au_igrab(h_inode), + au_hi_flags(inode, /*isdir*/1)); + goto out; /* success */ + + /* revert */ +out_opq: + if (au_ftest_cpdown(args->flags, DIROPQ)) { + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + rerr = au_diropq_remove(dentry, bdst); + mutex_unlock(&h_inode->i_mutex); + if (unlikely(rerr)) { + AuIOErr("failed removing diropq for %.*s b%d (%d)\n", + AuDLNPair(dentry), bdst, rerr); + err = -EIO; + goto out; + } + } +out_dir: + if (au_ftest_cpdown(args->flags, MADE_DIR)) { + rerr = vfsub_sio_rmdir(au_h_iptr(dir, bdst), &h_path); + if (unlikely(rerr)) { + AuIOErr("failed removing %.*s b%d (%d)\n", + AuDLNPair(dentry), bdst, rerr); + err = -EIO; + } + } +out_put: + au_set_h_dptr(dentry, bdst, NULL); + if (au_dbend(dentry) == bdst) + au_update_dbend(dentry); +out: + dput(parent); + return err; +} + +int au_cpdown_dirs(struct dentry *dentry, aufs_bindex_t bdst) +{ + int err; + struct au_cpdown_dir_args args = { + .parent = dget_parent(dentry), + .flags = 0 + }; + + err = au_cp_dirs(dentry, bdst, au_cpdown_dir, &args); + dput(args.parent); + + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* policies for create */ + +static 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, int isdir __maybe_unused) +{ + int err; + aufs_bindex_t bstart, bindex; + struct super_block *sb; + struct dentry *parent, *h_parent; + + sb = dentry->d_sb; + bstart = au_dbstart(dentry); + err = bstart; + if (!au_br_rdonly(au_sbr(sb, bstart))) + goto out; + + err = -EROFS; + parent = dget_parent(dentry); + for (bindex = au_dbstart(parent); bindex < bstart; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !h_parent->d_inode) + 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, bstart - 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_sbend(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, int isdir) +{ + int err, nbr; + unsigned int u; + aufs_bindex_t bindex, bend; + 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; + bend = au_sbend(sb); + nbr = bend + 1; + for (bindex = 0; bindex <= bend; bindex++) { + if (!isdir) { + 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 super_block *sb; + struct au_branch *br; + struct au_wbr_mfs *mfs; + aufs_bindex_t bindex, bend; + 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; + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_rdonly(br)) + continue; + + /* sb->s_root for NFS is unreliable */ + h_path.mnt = br->br_mnt; + 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, int isdir __maybe_unused) +{ + int err; + struct super_block *sb; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_exp(dentry); + if (err >= 0) + goto out; + + 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_br_rdonly(au_sbr(sb, mfs->mfs_bindex))) + au_mfs(dentry); + mutex_unlock(&mfs->mfs_lock); + err = mfs->mfs_bindex; + + 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; +} + +/* ---------------------------------------------------------------------- */ + +/* most free space and then round robin */ +static int au_wbr_create_mfsrr(struct dentry *dentry, int isdir) +{ + int err; + struct au_wbr_mfs *mfs; + + err = au_wbr_create_mfs(dentry, isdir); + 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, isdir); + 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, int isdir) +{ + int err, e2; + unsigned long long b; + aufs_bindex_t bindex, bstart, bend; + struct super_block *sb; + struct dentry *parent, *h_parent; + struct au_branch *br; + + err = au_wbr_create_tdp(dentry, isdir); + if (unlikely(err < 0)) + goto out; + parent = dget_parent(dentry); + bstart = au_dbstart(parent); + bend = au_dbtaildir(parent); + if (bstart == bend) + goto out_parent; /* success */ + + e2 = au_wbr_create_mfs(dentry, isdir); + 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 = bstart; bindex <= bend; bindex++) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !h_parent->d_inode) + 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; +} + +/* ---------------------------------------------------------------------- */ + +/* policies for copyup */ + +/* top down parent */ +static int au_wbr_copyup_tdp(struct dentry *dentry) +{ + return au_wbr_create_tdp(dentry, /*isdir, anything is ok*/0); +} + +/* bottom up parent */ +static int au_wbr_copyup_bup(struct dentry *dentry) +{ + int err; + aufs_bindex_t bindex, bstart; + struct dentry *parent, *h_parent; + struct super_block *sb; + + err = -EROFS; + sb = dentry->d_sb; + parent = dget_parent(dentry); + bstart = au_dbstart(parent); + for (bindex = au_dbstart(dentry); bindex >= bstart; bindex--) { + h_parent = au_h_dptr(parent, bindex); + if (!h_parent || !h_parent->d_inode) + 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, bstart - 1); + + AuDbg("b%d\n", err); + return err; +} + +/* bottom up */ +static int au_wbr_copyup_bu(struct dentry *dentry) +{ + int err; + aufs_bindex_t bstart; + + bstart = au_dbstart(dentry); + err = au_wbr_bu(dentry->d_sb, bstart); + AuDbg("b%d\n", err); + if (err > bstart) + err = au_wbr_nonopq(dentry, err); + + AuDbg("b%d\n", err); + 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_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 + } +}; --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/conf.mk +++ linux-lts-raring-3.8.0/ubuntu/aufs/conf.mk @@ -0,0 +1,38 @@ + +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 \ + RDU \ + PROC_MAP \ + SP_IATTR \ + 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-lts-raring-3.8.0.orig/ubuntu/aufs/hfsnotify.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/hfsnotify.c @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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_dec(); + atomic64_dec(&au_hfsn_ifree); + wake_up(&au_hfsn_wq); +} + +static int au_hfsn_alloc(struct au_hinode *hinode) +{ + 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); + mark = &hn->hn_mark; + fsnotify_init_mark(mark, au_hfsn_free_mark); + mark->mask = AuHfsnMask; + /* + * by udba rename or rmdir, aufs assign a new inode to the known + * h_inode, so specify 1 to allow dups. + */ + return fsnotify_add_mark(mark, br->br_hfsn_group, hinode->hi_inode, + /*mnt*/NULL, /*allow_dups*/1); +} + +static int au_hfsn_free(struct au_hinode *hinode, struct au_hnotify *hn) +{ + struct fsnotify_mark *mark; + unsigned long long ull; + + ull = atomic64_inc_return(&au_hfsn_ifree); + BUG_ON(!ull); + + mark = &hn->hn_mark; + fsnotify_destroy_mark(mark); + fsnotify_put_mark(mark); + + /* 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) if (mask & flag) \ + return #flag; + 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_IN_ISDIR); + test_ret(FS_IN_ONESHOT); + test_ret(FS_EVENT_ON_CHILD); + return ""; +#undef test_ret +#else + return "??"; +#endif +} +#endif + +/* ---------------------------------------------------------------------- */ + +static int au_hfsn_handle_event(struct fsnotify_group *group, + struct fsnotify_mark *inode_mark, + struct fsnotify_mark *vfsmount_mark, + struct fsnotify_event *event) +{ + int err; + struct au_hnotify *hnotify; + struct inode *h_dir, *h_inode; + __u32 mask; + struct qstr h_child_qstr = QSTR_INIT(event->file_name, event->name_len); + + AuDebugOn(event->data_type != FSNOTIFY_EVENT_INODE); + + err = 0; + /* if FS_UNMOUNT happens, there must be another bug */ + mask = event->mask; + AuDebugOn(mask & FS_UNMOUNT); + if (mask & (FS_IN_IGNORED | FS_UNMOUNT)) + goto out; + + h_dir = event->to_tell; + h_inode = event->inode; +#ifdef AuDbgHnotify + au_debug(1); + 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(0); +#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; +} + +/* isn't it waste to ask every registered 'group'? */ +/* copied from linux/fs/notify/inotify/inotify_fsnotiry.c */ +/* it should be exported to modules */ +static bool au_hfsn_should_send_event(struct fsnotify_group *group, + struct inode *h_inode, + struct fsnotify_mark *inode_mark, + struct fsnotify_mark *vfsmount_mark, + __u32 mask, void *data, int data_type) +{ + mask = (mask & ~FS_EVENT_ON_CHILD); + return inode_mark->mask & mask; +} + +static struct fsnotify_ops au_hfsn_ops = { + .should_send_event = au_hfsn_should_send_event, + .handle_event = au_hfsn_handle_event +}; + +/* ---------------------------------------------------------------------- */ + +static void au_hfsn_fin_br(struct au_branch *br) +{ + if (br->br_hfsn_group) + fsnotify_put_group(br->br_hfsn_group); +} + +static int au_hfsn_init_br(struct au_branch *br, int perm) +{ + br->br_hfsn_group = NULL; + br->br_hfsn_ops = au_hfsn_ops; + return 0; +} + +static int au_hfsn_reset_br(unsigned int udba, struct au_branch *br, int perm) +{ + int err; + + err = 0; + if (udba != AuOpt_UDBA_HNOTIFY + || !au_br_hnotifyable(perm)) { + au_hfsn_fin_br(br); + br->br_hfsn_group = NULL; + goto out; + } + + if (br->br_hfsn_group) + goto out; + + br->br_hfsn_group = fsnotify_alloc_group(&br->br_hfsn_ops); + if (IS_ERR(br->br_hfsn_group)) { + err = PTR_ERR(br->br_hfsn_group); + pr_err("fsnotify_alloc_group() failed, %d\n", err); + br->br_hfsn_group = NULL; + } + +out: + AuTraceErr(err); + 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-lts-raring-3.8.0.orig/ubuntu/aufs/whout.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/whout.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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); +struct au_branch; +int au_wh_test(struct dentry *h_parent, struct qstr *wh_name, + struct au_branch *br, int try_sio); +int au_diropq_test(struct dentry *h_dentry, struct au_branch *br); +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 dentry *h_parent, 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-lts-raring-3.8.0.orig/ubuntu/aufs/Kconfig +++ linux-lts-raring-3.8.0/ubuntu/aufs/Kconfig @@ -0,0 +1,203 @@ +config AUFS_FS + tristate "Aufs (Advanced multi layered unification filesystem) support" + depends on EXPERIMENTAL + 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_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_PROC_MAP + bool "support for /proc/maps and lsof(1)" + depends on PROC_FS + help + When you issue mmap(2) in aufs, it is actually a direct mmap(2) + call to the file on the branch fs since the file in aufs is + purely virtual. And the file path printed in /proc/maps (and + others) will be the path on the branch fs. In most cases, it + does no harm. But some utilities like lsof(1) may confuse since + the utility or user may expect the file path in aufs to be + printed. + To address this issue, aufs provides a patch which introduces a + new member called vm_prfile into struct vm_are_struct. The patch + is meaningless without enabling this configuration since nobody + sets the new vm_prfile member. + If you don't apply the patch, then enabling this configuration + will cause a compile error. + This approach is fragile since if someone else make some changes + around vm_file, then vm_prfile may not work anymore. As a + workaround such case, aufs provides this configuration. If you + disable it, then lsof(1) may produce incorrect result but the + problem will be gone even if the aufs patch is applied (I hope). + +config AUFS_SP_IATTR + bool "Respect the attributes (mtime/ctime mainly) of special files" + help + When you write something to a special file, some attributes of it + (mtime/ctime mainly) may be updated. Generally such updates are + less important (actually some device drivers and NFS ignore + it). But some applications (such like test program) requires + such updates. If you need these updates, then enable this + configuration which introduces some overhead. + Currently this configuration handles FIFO only. + +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-lts-raring-3.8.0.orig/ubuntu/aufs/cpup.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/cpup.c @@ -0,0 +1,1085 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * copy-up functions, see wbr_policy.c for copy-down + */ + +#include +#include +#include "aufs.h" + +void au_cpup_attr_flags(struct inode *dst, struct inode *src) +{ + const unsigned int mask = S_DEAD | S_SWAPFILE | S_PRIVATE + | S_NOATIME | S_NOCMTIME; + + dst->i_flags |= src->i_flags & ~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_ibstart(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, bend; + + sb = inode->i_sb; + bindex = au_ibstart(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 is not held, but it is harmless since once i_nlink + * reaches 0, it will never become positive. + */ + 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)) { + bend = au_ibend(inode); + for (bindex++; bindex <= bend; 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_ibstart(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); +} + +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_ibstart(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 = h_path->dentry->d_inode; + 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; + + err = vfsub_notify_change(&dt->dt_h_path, &attr); + if (unlikely(err)) + pr_warn("restoring timestamps failed(%d). ignored\n", err); +} + +/* ---------------------------------------------------------------------- */ + +static noinline_for_stack +int cpup_iattr(struct dentry *dst, aufs_bindex_t bindex, struct dentry *h_src) +{ + int err, sbits; + struct iattr ia; + struct path h_path; + struct inode *h_isrc, *h_idst; + + h_path.dentry = au_h_dptr(dst, bindex); + h_idst = h_path.dentry->d_inode; + h_path.mnt = au_sbr_mnt(dst->d_sb, bindex); + h_isrc = h_src->d_inode; + ia.ia_valid = ATTR_FORCE | ATTR_UID | ATTR_GID + | ATTR_ATIME | ATTR_MTIME + | ATTR_ATIME_SET | ATTR_MTIME_SET; + 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); + err = vfsub_notify_change(&h_path, &ia); + + /* 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); + } + + 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 mutex *h_mtx; + /* 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; + } + } 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_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_mtx = &dst->f_dentry->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD2); + err = vfsub_notify_change(&dst->f_path, ia); + mutex_unlock(h_mtx); + } + } + + 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_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; +} + +/* + * to support a sparse file which is opened with O_APPEND, + * we need to close the file. + */ +static int au_cp_regular(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len) +{ + int err, i; + enum { SRC, DST }; + struct { + aufs_bindex_t bindex; + unsigned int flags; + struct dentry *dentry; + struct file *file; + void *label, *label_file; + } *f, file[] = { + { + .bindex = bsrc, + .flags = O_RDONLY | O_NOATIME | O_LARGEFILE, + .file = NULL, + .label = &&out, + .label_file = &&out_src + }, + { + .bindex = bdst, + .flags = O_WRONLY | O_NOATIME | O_LARGEFILE, + .file = NULL, + .label = &&out_src, + .label_file = &&out_dst + } + }; + struct super_block *sb; + + /* bsrc branch can be ro/rw. */ + sb = dentry->d_sb; + f = file; + for (i = 0; i < 2; i++, f++) { + f->dentry = au_h_dptr(dentry, f->bindex); + f->file = au_h_open(dentry, f->bindex, f->flags, /*file*/NULL); + err = PTR_ERR(f->file); + if (IS_ERR(f->file)) + goto *f->label; + err = -EINVAL; + if (unlikely(!f->file->f_op)) + goto *f->label_file; + } + + /* try stopping to update while we copyup */ + IMustLock(file[SRC].dentry->d_inode); + err = au_copy_file(file[DST].file, file[SRC].file, len); + +out_dst: + fput(file[DST].file); + 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 dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, + struct inode *h_dir, struct path *h_path) +{ + int err, rerr; + loff_t l; + + err = 0; + l = i_size_read(au_h_iptr(dentry->d_inode, bsrc)); + if (len == -1 || l < len) + len = l; + if (len) + err = au_cp_regular(dentry, bdst, bsrc, len); + if (!err) + goto out; /* success */ + + rerr = vfsub_unlink(h_dir, h_path, /*force*/0); + if (rerr) { + AuIOErr("failed unlinking cpup-ed %.*s(%d, %d)\n", + AuDLNPair(h_path->dentry), err, rerr); + err = -EIO; + } + +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 = -ENOSYS; + if (unlikely(!h_src->d_inode->i_op->readlink)) + goto out; + + 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 = h_src->d_inode->i_op->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; +} + +/* return with the lower dst inode is locked */ +static noinline_for_stack +int cpup_entry(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent) +{ + int err; + umode_t mode; + unsigned int mnt_flags; + unsigned char isdir; + const unsigned char do_dt = !!au_ftest_cpup(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(dentry, bsrc); + h_inode = h_src->d_inode; + AuDebugOn(h_inode != au_h_iptr(dentry->d_inode, bsrc)); + + /* try stopping to be referenced while we are creating */ + h_dst = au_h_dptr(dentry, bdst); + h_parent = h_dst->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + AuDebugOn(h_parent != h_dst->d_parent); + + sb = dentry->d_sb; + h_path.mnt = au_sbr_mnt(sb, bdst); + if (do_dt) { + h_path.dentry = h_parent; + au_dtime_store(&dt, dst_parent, &h_path); + } + h_path.dentry = h_dst; + + isdir = 0; + mode = h_inode->i_mode; + switch (mode & S_IFMT) { + case S_IFREG: + /* try stopping to update while we are referencing */ + IMustLock(h_inode); + err = vfsub_create(h_dir, &h_path, mode | S_IWUSR, + /*want_excl*/true); + if (!err) + err = au_do_cpup_regular + (dentry, bdst, bsrc, len, + au_h_iptr(dst_parent->d_inode, bdst), &h_path); + break; + case S_IFDIR: + isdir = 1; + err = vfsub_mkdir(h_dir, &h_path, mode); + if (!err) { + /* + * strange behaviour from the users view, + * particularry setattr case + */ + if (au_ibstart(dst_parent->d_inode) == bdst) + au_cpup_attr_nlink(dst_parent->d_inode, + /*force*/1); + au_cpup_attr_nlink(dentry->d_inode, /*force*/1); + } + 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; + } + + 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 + /* todo: unnecessary? */ + /* && dentry->d_inode->i_nlink == 1 */ + && bdst < bsrc + && !au_ftest_cpup(flags, KEEPLINO)) + au_xino_write(sb, bsrc, h_inode->i_ino, /*ino*/0); + /* ignore this error */ + + if (do_dt) + au_dtime_revert(&dt); + 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. + */ +static int au_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent) +{ + int err, rerr; + aufs_bindex_t old_ibstart; + unsigned char isdir, plink; + struct au_dtime dt; + struct path h_path; + struct dentry *h_src, *h_dst, *h_parent; + struct inode *dst_inode, *h_dir, *inode; + struct super_block *sb; + + AuDebugOn(bsrc <= bdst); + + sb = dentry->d_sb; + h_path.mnt = au_sbr_mnt(sb, bdst); + h_dst = au_h_dptr(dentry, bdst); + h_parent = h_dst->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + + h_src = au_h_dptr(dentry, bsrc); + inode = dentry->d_inode; + + if (!dst_parent) + dst_parent = dget_parent(dentry); + else + dget(dst_parent); + + plink = !!au_opt_test(au_mntflags(sb), PLINK); + dst_inode = au_h_iptr(inode, 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, bdst); + goto out; + } + + if (dst_inode->i_nlink) { + const int do_dt = au_ftest_cpup(flags, DTIME); + + h_src = au_plink_lkup(inode, bdst); + err = PTR_ERR(h_src); + if (IS_ERR(h_src)) + goto out; + if (unlikely(!h_src->d_inode)) { + err = -EIO; + AuIOErr("i%lu exists on a upper branch " + "but not pseudo-linked\n", + inode->i_ino); + dput(h_src); + goto out; + } + + if (do_dt) { + h_path.dentry = h_parent; + au_dtime_store(&dt, dst_parent, &h_path); + } + h_path.dentry = h_dst; + err = vfsub_link(h_src, h_dir, &h_path); + if (do_dt) + au_dtime_revert(&dt); + dput(h_src); + goto out; + } else + /* todo: cpup_wh_file? */ + /* udba work */ + au_update_ibrange(inode, /*do_put_zero*/1); + } + + old_ibstart = au_ibstart(inode); + err = cpup_entry(dentry, bdst, bsrc, len, flags, dst_parent); + if (unlikely(err)) + goto out; + dst_inode = h_dst->d_inode; + mutex_lock_nested(&dst_inode->i_mutex, AuLsc_I_CHILD2); + + err = cpup_iattr(dentry, bdst, h_src); + isdir = S_ISDIR(dst_inode->i_mode); + if (!err) { + if (bdst < old_ibstart) { + if (S_ISREG(inode->i_mode)) { + err = au_dy_iaop(inode, bdst, dst_inode); + if (unlikely(err)) + goto out_rev; + } + au_set_ibstart(inode, bdst); + } + au_set_h_iptr(inode, bdst, au_igrab(dst_inode), + au_hi_flags(inode, isdir)); + mutex_unlock(&dst_inode->i_mutex); + if (!isdir + && h_src->d_inode->i_nlink > 1 + && plink) + au_plink_append(inode, bdst, h_dst); + goto out; /* success */ + } + + /* revert */ +out_rev: + h_path.dentry = h_parent; + mutex_unlock(&dst_inode->i_mutex); + au_dtime_store(&dt, dst_parent, &h_path); + h_path.dentry = h_dst; + if (!isdir) + rerr = vfsub_unlink(h_dir, &h_path, /*force*/0); + else + rerr = vfsub_rmdir(h_dir, &h_path); + au_dtime_revert(&dt); + if (rerr) { + AuIOErr("failed removing broken entry(%d, %d)\n", err, rerr); + err = -EIO; + } + +out: + dput(dst_parent); + return err; +} + +struct au_cpup_single_args { + int *errp; + struct dentry *dentry; + aufs_bindex_t bdst, bsrc; + loff_t len; + unsigned int flags; + struct dentry *dst_parent; +}; + +static void au_call_cpup_single(void *args) +{ + struct au_cpup_single_args *a = args; + *a->errp = au_cpup_single(a->dentry, a->bdst, a->bsrc, a->len, + a->flags, a->dst_parent); +} + +/* + * 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 super_block *sb, umode_t mode) +{ + int do_sio; + + do_sio = 0; + 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)); + } + + return do_sio; +} + +int au_sio_cpup_single(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent) +{ + int err, wkq_err; + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bsrc); + if (!au_cpup_sio_test(dentry->d_sb, h_dentry->d_inode->i_mode)) + err = au_cpup_single(dentry, bdst, bsrc, len, flags, + dst_parent); + else { + struct au_cpup_single_args args = { + .errp = &err, + .dentry = dentry, + .bdst = bdst, + .bsrc = bsrc, + .len = len, + .flags = flags, + .dst_parent = dst_parent + }; + wkq_err = au_wkq_wait(au_call_cpup_single, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + return err; +} + +/* + * copyup the @dentry from the first active lower branch to @bdst, + * using au_cpup_single(). + */ +static int au_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + unsigned int flags) +{ + int err; + aufs_bindex_t bsrc, bend; + + bend = au_dbend(dentry); + for (bsrc = bdst + 1; bsrc <= bend; bsrc++) + if (au_h_dptr(dentry, bsrc)) + break; + + err = au_lkup_neg(dentry, bdst); + if (!err) { + err = au_cpup_single(dentry, bdst, bsrc, len, flags, NULL); + if (!err) + return 0; /* success */ + + /* revert */ + au_set_h_dptr(dentry, bdst, NULL); + au_set_dbstart(dentry, bsrc); + } + + return err; +} + +struct au_cpup_simple_args { + int *errp; + struct dentry *dentry; + aufs_bindex_t bdst; + loff_t len; + unsigned int flags; +}; + +static void au_call_cpup_simple(void *args) +{ + struct au_cpup_simple_args *a = args; + *a->errp = au_cpup_simple(a->dentry, a->bdst, a->len, a->flags); +} + +int au_sio_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + unsigned int flags) +{ + int err, wkq_err; + struct dentry *parent; + struct inode *h_dir; + + parent = dget_parent(dentry); + h_dir = au_h_iptr(parent->d_inode, bdst); + if (!au_test_h_perm_sio(h_dir, MAY_EXEC | MAY_WRITE) + && !au_cpup_sio_test(dentry->d_sb, dentry->d_inode->i_mode)) + err = au_cpup_simple(dentry, bdst, len, flags); + else { + struct au_cpup_simple_args args = { + .errp = &err, + .dentry = dentry, + .bdst = bdst, + .len = len, + .flags = flags + }; + wkq_err = au_wkq_wait(au_call_cpup_simple, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * copyup the deleted file for writing. + */ +static int au_do_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, + struct dentry *wh_dentry, struct file *file, + loff_t len) +{ + int err; + aufs_bindex_t bstart; + struct au_dinfo *dinfo; + struct dentry *h_d_dst, *h_d_start; + struct au_hdentry *hdp; + + dinfo = au_di(dentry); + AuRwMustWriteLock(&dinfo->di_rwsem); + + bstart = dinfo->di_bstart; + hdp = dinfo->di_hdentry; + h_d_dst = hdp[0 + bdst].hd_dentry; + dinfo->di_bstart = bdst; + hdp[0 + bdst].hd_dentry = wh_dentry; + if (file) { + h_d_start = hdp[0 + bstart].hd_dentry; + hdp[0 + bstart].hd_dentry = au_hf_top(file)->f_dentry; + } + err = au_cpup_single(dentry, bdst, bstart, len, !AuCpup_DTIME, + /*h_parent*/NULL); + if (file) { + if (!err) + err = au_reopen_nondir(file); + hdp[0 + bstart].hd_dentry = h_d_start; + } + hdp[0 + bdst].hd_dentry = h_d_dst; + dinfo->di_bstart = bstart; + + return err; +} + +static int au_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + struct file *file) +{ + int err; + struct au_dtime dt; + struct dentry *parent, *h_parent, *wh_dentry; + struct au_branch *br; + struct path h_path; + + 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 = br->br_mnt; + au_dtime_store(&dt, parent, &h_path); + err = au_do_cpup_wh(dentry, bdst, wh_dentry, file, len); + if (unlikely(err)) + goto out_wh; + + dget(wh_dentry); + h_path.dentry = wh_dentry; + if (!S_ISDIR(wh_dentry->d_inode->i_mode)) + err = vfsub_unlink(h_parent->d_inode, &h_path, /*force*/0); + else + err = vfsub_rmdir(h_parent->d_inode, &h_path); + if (unlikely(err)) { + AuIOErr("failed remove copied-up tmp file %.*s(%d)\n", + AuDLNPair(wh_dentry), err); + err = -EIO; + } + au_dtime_revert(&dt); + au_set_hi_wh(dentry->d_inode, bdst, wh_dentry); + +out_wh: + dput(wh_dentry); +out: + dput(parent); + return err; +} + +struct au_cpup_wh_args { + int *errp; + struct dentry *dentry; + aufs_bindex_t bdst; + loff_t len; + struct file *file; +}; + +static void au_call_cpup_wh(void *args) +{ + struct au_cpup_wh_args *a = args; + *a->errp = au_cpup_wh(a->dentry, a->bdst, a->len, a->file); +} + +int au_sio_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + struct file *file) +{ + int err, wkq_err; + struct dentry *parent, *h_orph, *h_parent, *h_dentry; + struct inode *dir, *h_dir, *h_tmpdir, *h_inode; + struct au_wbr *wbr; + + parent = dget_parent(dentry); + dir = parent->d_inode; + h_orph = NULL; + h_parent = NULL; + h_dir = au_igrab(au_h_iptr(dir, bdst)); + h_tmpdir = h_dir; + 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 = h_orph->d_inode; + au_set_h_iptr(dir, bdst, au_igrab(h_tmpdir), /*flags*/0); + + /* this temporary unlock is safe */ + if (file) + h_dentry = au_hf_top(file)->f_dentry; + else + h_dentry = au_h_dptr(dentry, au_dbstart(dentry)); + h_inode = h_dentry->d_inode; + IMustLock(h_inode); + mutex_unlock(&h_inode->i_mutex); + mutex_lock_nested(&h_tmpdir->i_mutex, AuLsc_I_PARENT3); + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + /* todo: au_h_open_pre()? */ + } + + if (!au_test_h_perm_sio(h_tmpdir, MAY_EXEC | MAY_WRITE) + && !au_cpup_sio_test(dentry->d_sb, dentry->d_inode->i_mode)) + err = au_cpup_wh(dentry, bdst, len, file); + else { + struct au_cpup_wh_args args = { + .errp = &err, + .dentry = dentry, + .bdst = bdst, + .len = len, + .file = file + }; + wkq_err = au_wkq_wait(au_call_cpup_wh, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + if (h_orph) { + mutex_unlock(&h_tmpdir->i_mutex); + /* 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); + } + 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 dentry *h_parent, void *arg), + void *arg) +{ + int err; + struct au_pin pin; + struct dentry *d, *parent, *h_parent, *real_parent; + + 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 */ + if (!au_h_dptr(d, bdst) || !au_h_dptr(d, bdst)->d_inode) { + if (au_h_dptr(d, bdst)) + au_update_dbstart(d); + + au_pin_set_dentry(&pin, d); + err = au_do_pin(&pin); + if (!err) { + err = cp(d, bdst, 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 dentry *h_parent __maybe_unused , + void *arg __maybe_unused) +{ + return au_sio_cpup_simple(dentry, bdst, -1, AuCpup_DTIME); +} + +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 = parent->d_inode; + 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-lts-raring-3.8.0.orig/ubuntu/aufs/module.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/module.h @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 int au_dir_roflags; + +enum { + AuLcNonDir_FIINFO, + AuLcNonDir_DIINFO, + AuLcNonDir_IIINFO, + + AuLcDir_FIINFO, + AuLcDir_DIINFO, + AuLcDir_IIINFO, + + AuLcSymlink_DIINFO, + AuLcSymlink_IIINFO, + + AuLcKey_Last +}; +extern struct lock_class_key au_lc_key[AuLcKey_Last]; + +void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp); +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 +}; + +#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) + +extern struct kmem_cache *au_cachep[]; + +#define AuCacheFuncs(name, index) \ +static inline struct au_##name *au_cache_alloc_##name(void) \ +{ return kmem_cache_alloc(au_cachep[AuCache_##index], GFP_NOFS); } \ +static inline void au_cache_free_##name(struct au_##name *p) \ +{ kmem_cache_free(au_cachep[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-lts-raring-3.8.0.orig/ubuntu/aufs/fstype.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/fstype.h @@ -0,0 +1,481 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * judging filesystem type + */ + +#ifndef __AUFS_FSTYPE_H__ +#define __AUFS_FSTYPE_H__ + +#ifdef __KERNEL__ + +#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 defined(CONFIG_ROMFS_FS) || defined(CONFIG_ROMFS_FS_MODULE) + return sb->s_magic == ROMFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_romfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_ISO9660_FS) || defined(CONFIG_ISO9660_FS_MODULE) + return sb->s_magic == ISOFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_cramfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CRAMFS) || defined(CONFIG_CRAMFS_MODULE) + return sb->s_magic == CRAMFS_MAGIC; +#endif + return 0; +} + +static inline int au_test_nfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_NFS_FS) || defined(CONFIG_NFS_FS_MODULE) + return sb->s_magic == NFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_fuse(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_FUSE_FS) || defined(CONFIG_FUSE_FS_MODULE) + return sb->s_magic == FUSE_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_xfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_XFS_FS) || defined(CONFIG_XFS_FS_MODULE) + 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 defined(CONFIG_ECRYPT_FS) || defined(CONFIG_ECRYPT_FS_MODULE) + return !strcmp(au_sbtype(sb), "ecryptfs"); +#else + return 0; +#endif +} + +static inline int au_test_smbfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_SMB_FS) || defined(CONFIG_SMB_FS_MODULE) + return sb->s_magic == SMB_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ocfs2(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_OCFS2_FS) || defined(CONFIG_OCFS2_FS_MODULE) + return sb->s_magic == OCFS2_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ocfs2_dlmfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_OCFS2_FS_O2CB) || defined(CONFIG_OCFS2_FS_O2CB_MODULE) + return sb->s_magic == DLMFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_coda(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CODA_FS) || defined(CONFIG_CODA_FS_MODULE) + return sb->s_magic == CODA_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_v9fs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_9P_FS) || defined(CONFIG_9P_FS_MODULE) + return sb->s_magic == V9FS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_ext4(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_EXT4DEV_FS) || defined(CONFIG_EXT4DEV_FS_MODULE) + return sb->s_magic == EXT4_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_sysv(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_SYSV_FS) || defined(CONFIG_SYSV_FS_MODULE) + return !strcmp(au_sbtype(sb), "sysv"); +#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 defined(CONFIG_UBIFS_FS) || defined(CONFIG_UBIFS_FS_MODULE) + 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 defined(CONFIG_CONFIGFS_FS) || defined(CONFIG_CONFIGFS_FS_MODULE) + return sb->s_magic == CONFIGFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_minix(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_MINIX_FS) || defined(CONFIG_MINIX_FS_MODULE) + 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_cifs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_CIFS_FS) || defined(CONFIGCIFS_FS_MODULE) + return sb->s_magic == CIFS_MAGIC_NUMBER; +#else + return 0; +#endif +} + +static inline int au_test_fat(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_FAT_FS) || defined(CONFIG_FAT_FS_MODULE) + 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 defined(CONFIG_SQUASHFS) || defined(CONFIG_SQUASHFS_MODULE) + return sb->s_magic == SQUASHFS_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_btrfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_BTRFS_FS) || defined(CONFIG_BTRFS_FS_MODULE) + return sb->s_magic == BTRFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_xenfs(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_XENFS) || defined(CONFIG_XENFS_MODULE) + 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 defined(CONFIG_NILFS) || defined(CONFIG_NILFS_MODULE) + return sb->s_magic == NILFS_SUPER_MAGIC; +#else + return 0; +#endif +} + +static inline int au_test_hfsplus(struct super_block *sb __maybe_unused) +{ +#if defined(CONFIG_HFSPLUS_FS) || defined(CONFIG_HFSPLUS_FS_MODULE) + 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_smbfs(sb) */ /* untested */ + /* || au_test_ocfs2(sb) */ /* untested */ + /* || au_test_btrfs(sb) */ /* untested */ + /* || au_test_coda(sb) */ /* untested */ + /* || au_test_v9fs(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_ext4(sb) */ /* untested */ + /* || au_test_ocfs2(sb) */ /* untested */ + /* || au_test_ocfs2_dlmfs(sb) */ /* untested */ + /* || au_test_sysv(sb) */ /* untested */ + /* || 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_cifs(sb) */ /* untested */ + || 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_btrfs(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) + /* || au_test_cifs(sb) */ /* untested */ + ; +} + +/* + * filesystems which requires replacing i_mapping. + */ +static inline int au_test_fs_bad_mapping(struct super_block *sb) +{ + return 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); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FSTYPE_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/plink.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/plink.c @@ -0,0 +1,511 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 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 */ + rcu_read_lock(); + ppid = task_pid_vnr(rcu_dereference(current->real_parent)); + rcu_read_unlock(); + if (pid == ppid) + goto out; + + 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; +} + +/* ---------------------------------------------------------------------- */ + +struct pseudo_link { + union { + struct list_head list; + struct rcu_head rcu; + }; + struct inode *inode; +}; + +#ifdef CONFIG_AUFS_DEBUG +void au_plink_list(struct super_block *sb) +{ + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink; + + SiMustAnyLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + plink_list = &sbinfo->si_plink.head; + rcu_read_lock(); + list_for_each_entry_rcu(plink, plink_list, list) + AuDbg("%lu\n", plink->inode->i_ino); + rcu_read_unlock(); +} +#endif + +/* is the inode pseudo-linked? */ +int au_plink_test(struct inode *inode) +{ + int found; + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink; + + 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; + plink_list = &sbinfo->si_plink.head; + rcu_read_lock(); + list_for_each_entry_rcu(plink, plink_list, list) + if (plink->inode == inode) { + found = 1; + break; + } + rcu_read_unlock(); + 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 mutex *h_mtx; + + h_mtx = &h_parent->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD2); + h_dentry = vfsub_lkup_one(tgtname, h_parent); + mutex_unlock(h_mtx); + 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; + struct inode *h_dir; + 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; + h_dir = h_parent->d_inode; + 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 = br->br_mnt + }; + struct inode *h_dir; + + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, 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 (h_path.dentry->d_inode + && h_path.dentry->d_inode != h_dentry->d_inode) { + err = vfsub_unlink(h_dir, &h_path, /*force*/0); + dput(h_path.dentry); + h_path.dentry = NULL; + if (!err) + goto again; + } + if (!err && !h_path.dentry->d_inode) + err = vfsub_link(h_dentry, h_dir, &h_path); + dput(h_path.dentry); + +out: + mutex_unlock(&h_dir->i_mutex); + 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; + struct inode *h_dir; + 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; + h_dir = h_parent->d_inode; + 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; +} + +/* free a single plink */ +static void do_put_plink(struct pseudo_link *plink, int do_del) +{ + if (do_del) + list_del(&plink->list); + iput(plink->inode); + kfree(plink); +} + +static void do_put_plink_rcu(struct rcu_head *rcu) +{ + struct pseudo_link *plink; + + plink = container_of(rcu, struct pseudo_link, rcu); + iput(plink->inode); + kfree(plink); +} + +/* + * 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 list_head *plink_list; + struct pseudo_link *plink, *tmp; + int found, err, cnt; + + sb = inode->i_sb; + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + cnt = 0; + found = 0; + plink_list = &sbinfo->si_plink.head; + rcu_read_lock(); + list_for_each_entry_rcu(plink, plink_list, list) { + cnt++; + if (plink->inode == inode) { + found = 1; + break; + } + } + rcu_read_unlock(); + if (found) + return; + + tmp = kmalloc(sizeof(*plink), GFP_NOFS); + if (tmp) + tmp->inode = au_igrab(inode); + else { + err = -ENOMEM; + goto out; + } + + spin_lock(&sbinfo->si_plink.spin); + list_for_each_entry(plink, plink_list, list) { + if (plink->inode == inode) { + found = 1; + break; + } + } + if (!found) + list_add_rcu(&tmp->list, plink_list); + spin_unlock(&sbinfo->si_plink.spin); + if (!found) { + cnt++; + WARN_ONCE(cnt > AUFS_PLINK_WARN, + "unexpectedly many pseudo links, %d\n", cnt); + err = whplink(h_dentry, inode, bindex, au_sbr(sb, bindex)); + } else { + do_put_plink(tmp, 0); + return; + } + +out: + if (unlikely(err)) { + pr_warn("err %d, damaged pseudo link.\n", err); + if (tmp) { + au_spl_del_rcu(&tmp->list, &sbinfo->si_plink); + call_rcu(&tmp->rcu, do_put_plink_rcu); + } + } +} + +/* free all plinks */ +void au_plink_put(struct super_block *sb, int verbose) +{ + struct au_sbinfo *sbinfo; + struct list_head *plink_list; + struct pseudo_link *plink, *tmp; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + plink_list = &sbinfo->si_plink.head; + /* no spin_lock since sbinfo is write-locked */ + WARN(verbose && !list_empty(plink_list), "pseudo-link is not flushed"); + list_for_each_entry_safe(plink, tmp, plink_list, list) + do_put_plink(plink, 0); + INIT_LIST_HEAD(plink_list); +} + +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); +} + +/* 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 list_head *plink_list; + struct pseudo_link *plink, *tmp; + struct inode *inode; + aufs_bindex_t bstart, bend, bindex; + unsigned char do_put; + + SiMustWriteLock(sb); + + sbinfo = au_sbi(sb); + AuDebugOn(!au_opt_test(au_mntflags(sb), PLINK)); + AuDebugOn(au_plink_maint(sb, AuLock_NOPLM)); + + plink_list = &sbinfo->si_plink.head; + /* no spin_lock since sbinfo is write-locked */ + list_for_each_entry_safe(plink, tmp, plink_list, list) { + do_put = 0; + inode = au_igrab(plink->inode); + ii_write_lock_child(inode); + bstart = au_ibstart(inode); + bend = au_ibend(inode); + if (bstart >= 0) { + for (bindex = bstart; bindex <= bend; 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; + } + } else + do_put_plink(plink, 1); + + if (do_put) { + for (bindex = bstart; bindex <= bend; bindex++) + if (au_h_iptr(inode, bindex)) { + do_put = 0; + break; + } + if (do_put) + do_put_plink(plink, 1); + } + ii_write_unlock(inode); + iput(inode); + } +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/rwsem.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/rwsem.h @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * simple read-write semaphore wrappers + */ + +#ifndef __AUFS_RWSEM_H__ +#define __AUFS_RWSEM_H__ + +#ifdef __KERNEL__ + +#include "debug.h" + +struct au_rwsem { + struct rw_semaphore rwsem; +#ifdef CONFIG_AUFS_DEBUG + /* just for debugging, not almighty counter */ + atomic_t rcnt, wcnt; +#endif +}; + +#ifdef CONFIG_AUFS_DEBUG +#define AuDbgCntInit(rw) do { \ + atomic_set(&(rw)->rcnt, 0); \ + atomic_set(&(rw)->wcnt, 0); \ + smp_mb(); /* atomic set */ \ +} while (0) + +#define AuDbgRcntInc(rw) atomic_inc(&(rw)->rcnt) +#define AuDbgRcntDec(rw) WARN_ON(atomic_dec_return(&(rw)->rcnt) < 0) +#define AuDbgWcntInc(rw) atomic_inc(&(rw)->wcnt) +#define AuDbgWcntDec(rw) WARN_ON(atomic_dec_return(&(rw)->wcnt) < 0) +#else +#define AuDbgCntInit(rw) do {} while (0) +#define AuDbgRcntInc(rw) do {} while (0) +#define AuDbgRcntDec(rw) do {} while (0) +#define AuDbgWcntInc(rw) do {} while (0) +#define AuDbgWcntDec(rw) do {} while (0) +#endif /* CONFIG_AUFS_DEBUG */ + +/* to debug easier, do not make them inlined functions */ +#define AuRwMustNoWaiters(rw) AuDebugOn(!list_empty(&(rw)->rwsem.wait_list)) +/* rwsem_is_locked() is unusable */ +#define AuRwMustReadLock(rw) AuDebugOn(atomic_read(&(rw)->rcnt) <= 0) +#define AuRwMustWriteLock(rw) AuDebugOn(atomic_read(&(rw)->wcnt) <= 0) +#define AuRwMustAnyLock(rw) AuDebugOn(atomic_read(&(rw)->rcnt) <= 0 \ + && atomic_read(&(rw)->wcnt) <= 0) +#define AuRwDestroy(rw) AuDebugOn(atomic_read(&(rw)->rcnt) \ + || atomic_read(&(rw)->wcnt)) + +#define au_rw_class(rw, key) lockdep_set_class(&(rw)->rwsem, key) + +static inline void au_rw_init(struct au_rwsem *rw) +{ + AuDbgCntInit(rw); + init_rwsem(&rw->rwsem); +} + +static inline void au_rw_init_wlock(struct au_rwsem *rw) +{ + au_rw_init(rw); + down_write(&rw->rwsem); + AuDbgWcntInc(rw); +} + +static inline void au_rw_init_wlock_nested(struct au_rwsem *rw, + unsigned int lsc) +{ + au_rw_init(rw); + down_write_nested(&rw->rwsem, lsc); + AuDbgWcntInc(rw); +} + +static inline void au_rw_read_lock(struct au_rwsem *rw) +{ + down_read(&rw->rwsem); + AuDbgRcntInc(rw); +} + +static inline void au_rw_read_lock_nested(struct au_rwsem *rw, unsigned int lsc) +{ + down_read_nested(&rw->rwsem, lsc); + AuDbgRcntInc(rw); +} + +static inline void au_rw_read_unlock(struct au_rwsem *rw) +{ + AuRwMustReadLock(rw); + AuDbgRcntDec(rw); + up_read(&rw->rwsem); +} + +static inline void au_rw_dgrade_lock(struct au_rwsem *rw) +{ + AuRwMustWriteLock(rw); + AuDbgRcntInc(rw); + AuDbgWcntDec(rw); + downgrade_write(&rw->rwsem); +} + +static inline void au_rw_write_lock(struct au_rwsem *rw) +{ + down_write(&rw->rwsem); + AuDbgWcntInc(rw); +} + +static inline void au_rw_write_lock_nested(struct au_rwsem *rw, + unsigned int lsc) +{ + down_write_nested(&rw->rwsem, lsc); + AuDbgWcntInc(rw); +} + +static inline void au_rw_write_unlock(struct au_rwsem *rw) +{ + AuRwMustWriteLock(rw); + AuDbgWcntDec(rw); + up_write(&rw->rwsem); +} + +/* why is not _nested version defined */ +static inline int au_rw_read_trylock(struct au_rwsem *rw) +{ + int ret = down_read_trylock(&rw->rwsem); + if (ret) + AuDbgRcntInc(rw); + return ret; +} + +static inline int au_rw_write_trylock(struct au_rwsem *rw) +{ + int ret = down_write_trylock(&rw->rwsem); + if (ret) + AuDbgWcntInc(rw); + return ret; +} + +#undef AuDbgCntInit +#undef AuDbgRcntInc +#undef AuDbgRcntDec +#undef AuDbgWcntInc +#undef AuDbgWcntDec + +#define AuSimpleLockRwsemFuncs(prefix, param, rwsem) \ +static inline void prefix##_read_lock(param) \ +{ au_rw_read_lock(rwsem); } \ +static inline void prefix##_write_lock(param) \ +{ au_rw_write_lock(rwsem); } \ +static inline int prefix##_read_trylock(param) \ +{ return au_rw_read_trylock(rwsem); } \ +static inline int prefix##_write_trylock(param) \ +{ return au_rw_write_trylock(rwsem); } +/* why is not _nested version defined */ +/* static inline void prefix##_read_trylock_nested(param, lsc) +{ au_rw_read_trylock_nested(rwsem, lsc)); } +static inline void prefix##_write_trylock_nestd(param, lsc) +{ au_rw_write_trylock_nested(rwsem, lsc); } */ + +#define AuSimpleUnlockRwsemFuncs(prefix, param, rwsem) \ +static inline void prefix##_read_unlock(param) \ +{ au_rw_read_unlock(rwsem); } \ +static inline void prefix##_write_unlock(param) \ +{ au_rw_write_unlock(rwsem); } \ +static inline void prefix##_downgrade_lock(param) \ +{ au_rw_dgrade_lock(rwsem); } + +#define AuSimpleRwsemFuncs(prefix, param, rwsem) \ + AuSimpleLockRwsemFuncs(prefix, param, rwsem) \ + AuSimpleUnlockRwsemFuncs(prefix, param, rwsem) + +#endif /* __KERNEL__ */ +#endif /* __AUFS_RWSEM_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/rdu.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/rdu.c @@ -0,0 +1,384 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 aufs_rdu *rdu; + union au_rdu_ent_ul ent; + unsigned long end; + + struct super_block *sb; + int err; +}; + +static int au_rdu_fill(void *__arg, const char *name, int nlen, + loff_t offset, u64 h_ino, unsigned int d_type) +{ + int err, len; + struct au_rdu_arg *arg = __arg; + 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_readdir(h_file, au_rdu_fill, arg); + 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 bend; + struct au_rdu_arg arg; + 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 || !file->f_op->readdir)) + goto out; + + err = security_file_permission(file, MAY_READ); + AuTraceErr(err); + if (unlikely(err)) + goto out; + + dentry = file->f_dentry; + inode = dentry->d_inode; +#if 1 + mutex_lock(&inode->i_mutex); +#else + err = mutex_lock_killable(&inode->i_mutex); + AuTraceErr(err); + if (unlikely(err)) + goto out; +#endif + + 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); + } + bend = au_fbstart(file); + if (cookie->bindex < bend) + cookie->bindex = bend; + bend = au_fbend_dir(file); + /* AuDbg("b%d, b%d\n", cookie->bindex, bend); */ + for (; !err && cookie->bindex <= bend; + 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_ibstart(inode))); + ii_read_unlock(inode); + +out_unlock: + fi_read_unlock(file); +out_si: + si_read_unlock(arg.sb); +out_mtx: + mutex_unlock(&inode->i_mutex); +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_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-lts-raring-3.8.0.orig/ubuntu/aufs/whout.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/whout.c @@ -0,0 +1,1042 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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, + struct au_branch *br, 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, br); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out; + + err = 0; + if (!wh_dentry->d_inode) + goto out_wh; /* success */ + + err = 1; + if (S_ISREG(wh_dentry->d_inode->i_mode)) + goto out_wh; /* success */ + + err = -EIO; + AuIOErr("%.*s Invalid whiteout entry type 0%o.\n", + AuDLNPair(wh_dentry), wh_dentry->d_inode->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, struct au_branch *br) +{ + int err; + struct inode *h_dir; + + h_dir = h_dentry->d_inode; + err = au_wh_test(h_dentry, &diropq_name, br, + 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, br); + if (IS_ERR(dentry) || !dentry->d_inode) + 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 = br->br_mnt + }; + struct inode *h_dir; + struct dentry *h_parent; + + h_parent = h_dentry->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + 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() */ + err = vfsub_rename(h_dir, h_dentry, h_dir, &h_path); + AuTraceErr(err); + 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 force; + + /* + * 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(), h_path->dentry->d_inode->i_uid); + return vfsub_unlink(h_dir, h_path, force); +} + +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 = br->br_mnt + }; + + 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 (h_path.dentry->d_inode + && S_ISREG(h_path.dentry->d_inode->i_mode)) + err = do_unlink_wh(h_parent->d_inode, &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; + + if (!whpath->dentry->d_inode) + return; + + err = vfsub_mnt_want_write(whpath->mnt); + if (!err) { + if (isdir) + err = vfsub_rmdir(h_dir, whpath); + else + err = vfsub_unlink(h_dir, whpath, /*force*/0); + vfsub_mnt_drop_write(whpath->mnt); + } + if (unlikely(err)) + pr_warn("failed removing %.*s (%d), ignored.\n", + AuDLNPair(whpath->dentry), err); +} + +static int test_linkable(struct dentry *h_root) +{ + struct inode *h_dir = h_root->d_inode; + + if (h_dir->i_op->link) + return 0; + + pr_err("%.*s (%s) doesn't support link(2), use noplink and rw+nolwh\n", + AuDLNPair(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 (!path->dentry->d_inode) { + int mode = S_IRWXU; + + if (au_test_nfs(path->dentry->d_sb)) + mode |= S_IXUGO; + err = vfsub_mnt_want_write(path->mnt); + if (!err) { + err = vfsub_mkdir(h_dir, path, mode); + vfsub_mnt_drop_write(path->mnt); + } + } else if (S_ISDIR(path->dentry->d_inode->i_mode)) + err = 0; + else + pr_err("unknown %.*s exists\n", AuDLNPair(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 mesage + * zero: succuess + * plus: error, caller should NOT print the mesage + */ +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 = h_root->d_inode; + 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 = h_root->d_inode; + if (!base[AuBrWh_BASE].dentry->d_inode) { + err = vfsub_mnt_want_write(h_path->mnt); + if (!err) { + h_path->dentry = base[AuBrWh_BASE].dentry; + err = vfsub_create(h_dir, h_path, WH_MASK, + /*want_excl*/true); + vfsub_mnt_drop_write(h_path->mnt); + } + } else if (S_ISREG(base[AuBrWh_BASE].dentry->d_inode->i_mode)) + err = 0; + else + pr_err("unknown %.*s/%.*s exists\n", + AuDLNPair(h_root), AuDLNPair(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 dentry *h_root, struct au_branch *br, + struct super_block *sb) +{ + int err, i; + const unsigned char do_plink + = !!au_opt_test(au_mntflags(sb), PLINK); + struct path path = { + .mnt = br->br_mnt + }; + struct inode *h_dir; + 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 = h_root->d_inode; + 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 %.*s(%s)\n", + err, AuDLNPair(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; + 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 = a->sb->s_root->d_inode; + hdir = au_hi(dir, bindex); + h_root = au_h_dptr(a->sb->s_root, bindex); + + au_hn_imtx_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) { + err = vfsub_mnt_want_write(a->br->br_mnt); + if (!err) { + h_path.dentry = wbr->wbr_whbase; + h_path.mnt = a->br->br_mnt; + err = vfsub_unlink(hdir->hi_inode, &h_path, /*force*/0); + vfsub_mnt_drop_write(a->br->br_mnt); + } + } else { + pr_warn("%.*s is moved, ignored\n", + AuDLNPair(wbr->wbr_whbase)); + err = 0; + } + dput(wbr->wbr_whbase); + wbr->wbr_whbase = NULL; + if (!err) + err = au_wh_init(h_root, a->br, a->sb); + wbr_wh_write_unlock(wbr); + au_hn_imtx_unlock(hdir); + di_read_unlock(a->sb->s_root, AuLock_IR); + +out: + if (wbr) + atomic_dec(&wbr->wbr_wh_running); + atomic_dec(&a->br->br_count); + 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; + atomic_inc(&br->br_count); + wkq_err = au_wkq_nowait(reinit_br_wh, arg, sb, /*flags*/0); + if (unlikely(wkq_err)) { + atomic_dec(&br->br_wbr->wbr_wh_running); + atomic_dec(&br->br_count); + 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; + + h_parent = wh->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); + + br = au_sbr(sb, bindex); + h_path.mnt = br->br_mnt; + wbr = br->br_wbr; + wbr_wh_read_lock(wbr); + if (wbr->wbr_whbase) { + err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path); + 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); + +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 = br->br_mnt + }; + err = do_unlink_wh(au_h_iptr(dentry->d_inode, 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(h_dentry->d_inode, 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) && !wh_dentry->d_inode) { + err = link_or_create_wh(sb, bindex, wh_dentry); + if (!err) + au_set_dbwh(dentry, bindex); + 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 *tpos; + struct hlist_node *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(tpos, pos, head, wh_hash) { + if (tpos->wh_bindex != bindex) + continue; + + str = &tpos->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 = kmalloc(sizeof(*whtmp), gfp); + if (unlikely(!whtmp)) { + whtmp = ERR_PTR(-ENOMEM); + goto out; + } + + whtmp->dir = NULL; + whtmp->br = NULL; + whtmp->wh_dentry = NULL; + /* 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) + atomic_dec(&whtmp->br->br_count); + 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; + struct path h_tmp; + struct inode *wh_inode, *h_dir; + struct au_branch *br; + + h_dir = wh_dentry->d_parent->d_inode; /* dir inode is locked */ + IMustLock(h_dir); + + br = au_sbr(dir->i_sb, bindex); + wh_inode = wh_dentry->d_inode; + mutex_lock_nested(&wh_inode->i_mutex, 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; + } + mutex_unlock(&wh_inode->i_mutex); + + if (!err) { + h_tmp.dentry = wh_dentry; + h_tmp.mnt = br->br_mnt; + err = vfsub_rmdir(h_dir, &h_tmp); + } + + if (!err) { + if (au_ibstart(dir) == bindex) { + /* todo: dir->i_mutex is necessary */ + au_cpup_attr_timesizes(dir); + vfsub_drop_nlink(dir); + } + return 0; /* success */ + } + + pr_warn("failed removing %.*s(%d), ignored\n", + AuDLNPair(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 */ + /* mutex_lock(&a->dir->i_mutex); */ + 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 = h_parent->d_inode; + hdir = au_hi(a->dir, bindex); + au_hn_imtx_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 = vfsub_mnt_want_write(a->br->br_mnt); + if (!err) { + err = au_whtmp_rmdir(a->dir, bindex, a->wh_dentry, + &a->whlist); + vfsub_mnt_drop_write(a->br->br_mnt); + } + } + au_hn_imtx_unlock(hdir); + dput(h_parent); + ii_write_unlock(a->dir); + +out: + /* mutex_unlock(&a->dir->i_mutex); */ + 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); + atomic_inc(&args->br->br_count); + 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 %.*s (%d), ignored\n", + AuDLNPair(wh_dentry), wkq_err); + au_whtmp_rmdir_free(args); + } +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/sbinfo.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/sbinfo.c @@ -0,0 +1,343 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * superblock private data + */ + +#include "aufs.h" + +/* + * they are necessary regardless sysfs is disabled. + */ +void au_si_free(struct kobject *kobj) +{ + struct au_sbinfo *sbinfo; + char *locked __maybe_unused; /* debug only */ + + sbinfo = container_of(kobj, struct au_sbinfo, si_kobj); + AuDebugOn(!list_empty(&sbinfo->si_plink.head)); + AuDebugOn(atomic_read(&sbinfo->si_nowait.nw_len)); + + au_rw_write_lock(&sbinfo->si_rwsem); + au_br_free(sbinfo); + au_rw_write_unlock(&sbinfo->si_rwsem); + + AuDebugOn(radix_tree_gang_lookup + (&sbinfo->au_si_pid.tree, (void **)&locked, + /*first_index*/PID_MAX_DEFAULT - 1, + /*max_items*/sizeof(locked)/sizeof(*locked))); + + kfree(sbinfo->si_branch); + kfree(sbinfo->au_si_pid.bitmap); + mutex_destroy(&sbinfo->si_xib_mtx); + AuRwDestroy(&sbinfo->si_rwsem); + + kfree(sbinfo); +} + +int au_si_alloc(struct super_block *sb) +{ + int err; + struct au_sbinfo *sbinfo; + static struct lock_class_key aufs_si; + + err = -ENOMEM; + sbinfo = kzalloc(sizeof(*sbinfo), GFP_NOFS); + if (unlikely(!sbinfo)) + goto out; + + BUILD_BUG_ON(sizeof(unsigned long) != + sizeof(*sbinfo->au_si_pid.bitmap)); + sbinfo->au_si_pid.bitmap = kcalloc(BITS_TO_LONGS(PID_MAX_DEFAULT), + sizeof(*sbinfo->au_si_pid.bitmap), + GFP_NOFS); + if (unlikely(!sbinfo->au_si_pid.bitmap)) + goto out_sbinfo; + + /* will be reallocated separately */ + sbinfo->si_branch = kzalloc(sizeof(*sbinfo->si_branch), GFP_NOFS); + if (unlikely(!sbinfo->si_branch)) + goto out_pidmap; + + err = sysaufs_si_init(sbinfo); + if (unlikely(err)) + goto out_br; + + au_nwt_init(&sbinfo->si_nowait); + au_rw_init_wlock(&sbinfo->si_rwsem); + au_rw_class(&sbinfo->si_rwsem, &aufs_si); + spin_lock_init(&sbinfo->au_si_pid.tree_lock); + INIT_RADIX_TREE(&sbinfo->au_si_pid.tree, GFP_ATOMIC | __GFP_NOFAIL); + + atomic_long_set(&sbinfo->si_ninodes, 0); + atomic_long_set(&sbinfo->si_nfiles, 0); + + sbinfo->si_bend = -1; + + 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; + + sbinfo->si_mntflags = au_opts_plink(AuOpt_Def); + + mutex_init(&sbinfo->si_xib_mtx); + sbinfo->si_xino_brid = -1; + /* leave si_xib_last_pindex and si_xib_next_bit */ + + 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; + + au_spl_init(&sbinfo->si_plink); + init_waitqueue_head(&sbinfo->si_plink_wq); + spin_lock_init(&sbinfo->si_plink_maint_lock); + + /* leave other members for sysaufs and si_mnt. */ + sbinfo->si_sb = sb; + sb->s_fs_info = sbinfo; + si_pid_set(sb); + au_debug_sbinfo_init(sbinfo); + return 0; /* success */ + +out_br: + kfree(sbinfo->si_branch); +out_pidmap: + kfree(sbinfo->au_si_pid.bitmap); +out_sbinfo: + kfree(sbinfo); +out: + return err; +} + +int au_sbr_realloc(struct au_sbinfo *sbinfo, int nbr) +{ + int err, sz; + struct au_branch **brp; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + err = -ENOMEM; + sz = sizeof(*brp) * (sbinfo->si_bend + 1); + if (unlikely(!sz)) + sz = sizeof(*brp); + brp = au_kzrealloc(sbinfo->si_branch, sz, sizeof(*brp) * nbr, GFP_NOFS); + if (brp) { + sbinfo->si_branch = brp; + err = 0; + } + + return err; +} + +/* ---------------------------------------------------------------------- */ + +unsigned int au_sigen_inc(struct super_block *sb) +{ + unsigned int gen; + + SiMustWriteLock(sb); + + gen = ++au_sbi(sb)->si_generation; + au_update_digen(sb->s_root); + au_update_iigen(sb->s_root->d_inode); + sb->s_root->d_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)); + AuDebugOn(!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, DIR)); + + 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); +} + +/* ---------------------------------------------------------------------- */ + +int si_pid_test_slow(struct super_block *sb) +{ + void *p; + + rcu_read_lock(); + p = radix_tree_lookup(&au_sbi(sb)->au_si_pid.tree, current->pid); + rcu_read_unlock(); + + return (long)!!p; +} + +void si_pid_set_slow(struct super_block *sb) +{ + int err; + struct au_sbinfo *sbinfo; + + AuDebugOn(si_pid_test_slow(sb)); + + sbinfo = au_sbi(sb); + err = radix_tree_preload(GFP_NOFS | __GFP_NOFAIL); + AuDebugOn(err); + spin_lock(&sbinfo->au_si_pid.tree_lock); + err = radix_tree_insert(&sbinfo->au_si_pid.tree, current->pid, + /*any valid ptr*/sb); + spin_unlock(&sbinfo->au_si_pid.tree_lock); + AuDebugOn(err); + radix_tree_preload_end(); +} + +void si_pid_clr_slow(struct super_block *sb) +{ + void *p; + struct au_sbinfo *sbinfo; + + AuDebugOn(!si_pid_test_slow(sb)); + + sbinfo = au_sbi(sb); + spin_lock(&sbinfo->au_si_pid.tree_lock); + p = radix_tree_delete(&sbinfo->au_si_pid.tree, current->pid); + spin_unlock(&sbinfo->au_si_pid.tree_lock); +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/i_op_del.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/i_op_del.c @@ -0,0 +1,478 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 bstart; + struct super_block *sb; + + sb = dentry->d_sb; + bstart = au_dbstart(dentry); + if (*bcpup < 0) { + *bcpup = bstart; + if (au_test_ro(sb, bstart, dentry->d_inode)) { + err = AuWbrCopyup(au_sbi(sb), dentry); + *bcpup = err; + if (unlikely(err < 0)) + goto out; + } + } else + AuDebugOn(bstart < *bcpup + || au_test_ro(sb, *bcpup, dentry->d_inode)); + AuDbg("bcpup %d, bstart %d\n", *bcpup, bstart); + + if (*bcpup != bstart) { + 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, bstart + 1, /*type*/0, + /*flags*/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); + h_inode = h_dentry->d_inode; + if (dentry->d_inode) { + err = -ENOENT; + if (unlikely(!h_inode || !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(h_inode)) + 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_test_h_perm(h_parent->d_inode, MAY_EXEC | MAY_WRITE))) + goto out; + + h_latest = au_sio_lkup_one(&dentry->d_name, h_parent, + au_sbr(dentry->d_sb, bindex)); + 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_dbstart(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; + + 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 */ + au_hn_free(au_hi(dentry->d_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 %.*s, b%d failed, %d. ignored\n", + AuDLNPair(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 = dentry->d_inode; + d_drop(dentry); + inode->i_ctime = dir->i_ctime; + + if (au_ibstart(dir) == bindex) + au_cpup_attr_timesizes(dir); + 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("%.*s reverting whiteout failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + return -EIO; +} + +/* ---------------------------------------------------------------------- */ + +int aufs_unlink(struct inode *dir, struct dentry *dentry) +{ + int err; + aufs_bindex_t bwh, bindex, bstart; + struct au_dtime dt; + struct au_pin pin; + struct path h_path; + struct inode *inode, *h_dir; + struct dentry *parent, *wh_dentry; + + IMustLock(dir); + + err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); + if (unlikely(err)) + goto out; + err = au_d_hashed_positive(dentry); + if (unlikely(err)) + goto out_unlock; + inode = dentry->d_inode; + IMustLock(inode); + err = -EISDIR; + if (unlikely(S_ISDIR(inode->i_mode))) + goto out_unlock; /* possible? */ + + bstart = au_dbstart(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, &dt, &pin); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + h_path.mnt = au_sbr_mnt(dentry->d_sb, bstart); + h_path.dentry = au_h_dptr(dentry, bstart); + dget(h_path.dentry); + if (bindex == bstart) { + h_dir = au_pinned_h_dir(&pin); + err = vfsub_unlink(h_dir, &h_path, /*force*/0); + } else { + /* dir inode is locked */ + h_dir = wh_dentry->d_parent->d_inode; + IMustLock(h_dir); + err = 0; + } + + if (!err) { + vfsub_drop_nlink(inode); + epilog(dir, dentry, bindex); + + /* update target timestamps */ + if (bindex == bstart) { + vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/ + inode->i_ctime = h_path.dentry->d_inode->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, &dt); + if (rerr) + err = rerr; + } + +out_unpin: + au_unpin(&pin); + dput(wh_dentry); + dput(h_path.dentry); +out_parent: + di_write_unlock(parent); +out_unlock: + aufs_read_unlock(dentry, AuLock_DW); +out: + return err; +} + +int aufs_rmdir(struct inode *dir, struct dentry *dentry) +{ + int err, rmdir_later; + aufs_bindex_t bwh, bindex, bstart; + struct au_dtime dt; + struct au_pin pin; + struct inode *inode; + struct dentry *parent, *wh_dentry, *h_dentry; + struct au_whtmp_rmdir *args; + + IMustLock(dir); + + err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH | AuLock_GEN); + if (unlikely(err)) + goto out; + err = au_alive_dir(dentry); + if (unlikely(err)) + goto out_unlock; + inode = dentry->d_inode; + IMustLock(inode); + err = -ENOTDIR; + if (unlikely(!S_ISDIR(inode->i_mode))) + 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; + + bstart = au_dbstart(dentry); + bwh = au_dbwh(dentry); + bindex = -1; + wh_dentry = lock_hdir_create_wh(dentry, /*isdir*/1, &bindex, &dt, &pin); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + h_dentry = au_h_dptr(dentry, bstart); + dget(h_dentry); + rmdir_later = 0; + if (bindex == bstart) { + err = renwh_and_rmdir(dentry, bstart, &args->whlist, dir); + if (err > 0) { + rmdir_later = err; + err = 0; + } + } else { + /* stop monitoring */ + au_hn_free(au_hi(inode, bstart)); + + /* dir inode is locked */ + IMustLock(wh_dentry->d_parent->d_inode); + 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, bstart, 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, &dt); + if (rerr) + err = rerr; + } + +out_unpin: + au_unpin(&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: + AuTraceErr(err); + return err; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/super.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/super.h @@ -0,0 +1,546 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * super_block operations + */ + +#ifndef __AUFS_SUPER_H__ +#define __AUFS_SUPER_H__ + +#ifdef __KERNEL__ + +#include +#include "rwsem.h" +#include "spl.h" +#include "wkq.h" + +typedef ssize_t (*au_readf_t)(struct file *, char __user *, size_t, loff_t *); +typedef ssize_t (*au_writef_t)(struct file *, const char __user *, size_t, + loff_t *); + +/* policies to select one among multiple writable branches */ +struct au_wbr_copyup_operations { + int (*copyup)(struct dentry *dentry); +}; + +struct au_wbr_create_operations { + int (*create)(struct dentry *dentry, int isdir); + 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; +}; + +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; + + /* prevent recursive locking in deleting inode */ + struct { + unsigned long *bitmap; + spinlock_t tree_lock; + struct radix_tree_root tree; + } au_si_pid; + + /* + * dirty approach to protect sb->sb_inodes and ->s_files from remount. + */ + atomic_long_t si_ninodes, si_nfiles; + + /* branch management */ + unsigned int si_generation; + + /* see above flags */ + unsigned char au_si_status; + + aufs_bindex_t si_bend; + + /* 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; + + /* mount flags */ + /* include/asm-ia64/siginfo.h defines a macro named si_flags */ + unsigned int si_mntflags; + + /* external inode number (bitmap and translation table) */ + au_readf_t si_xread; + au_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; + /* 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 + + /* 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; + + /* + * rename(2) a directory with all children. + */ + /* reserved for future use */ + /* int si_rendir; */ + + /* pseudo_link list */ + struct au_splhead si_plink; + wait_queue_head_t si_plink_wq; + spinlock_t si_plink_maint_lock; + pid_t si_plink_maint_pid; + + /* + * 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, *si_dbgaufs_xib; +#ifdef CONFIG_AUFS_EXPORT + struct dentry *si_dbgaufs_xigen; +#endif +#endif + +#ifdef CONFIG_AUFS_SBILIST + struct list_head 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 +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_DIR (1 << 4) /* target is a dir */ +#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)(void *array, unsigned long long max, + void *arg); +void au_array_free(void *array); +void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, 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); + +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); + +int si_pid_test_slow(struct super_block *sb); +void si_pid_set_slow(struct super_block *sb); +void si_pid_clr_slow(struct super_block *sb); + +/* 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); + +/* ---------------------------------------------------------------------- */ + +static inline struct au_sbinfo *au_sbi(struct super_block *sb) +{ + return sb->s_fs_info; +} + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_EXPORT +void au_export_init(struct super_block *sb); + +static inline int au_test_nfsd(void) +{ + struct task_struct *tsk = current; + + return (tsk->flags & PF_KTHREAD) + && !strcmp(tsk->comm, "nfsd"); +} + +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 +AuStubVoid(au_export_init, struct super_block *sb) +AuStubInt0(au_test_nfsd, void) +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) +static inline int au_busy_or_stale(void) +{ + return -EBUSY; +} +#endif /* CONFIG_AUFS_EXPORT */ + +/* ---------------------------------------------------------------------- */ + +#ifdef CONFIG_AUFS_SBILIST +/* module.c */ +extern struct au_splhead au_sbilist; + +static inline void au_sbilist_init(void) +{ + au_spl_init(&au_sbilist); +} + +static inline void au_sbilist_add(struct super_block *sb) +{ + au_spl_add(&au_sbi(sb)->si_list, &au_sbilist); +} + +static inline void au_sbilist_del(struct super_block *sb) +{ + au_spl_del(&au_sbi(sb)->si_list, &au_sbilist); +} + +#ifdef CONFIG_AUFS_MAGIC_SYSRQ +static inline void au_sbilist_lock(void) +{ + spin_lock(&au_sbilist.spin); +} + +static inline void au_sbilist_unlock(void) +{ + spin_unlock(&au_sbilist.spin); +} +#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*) +AuStubVoid(au_sbilist_del, struct super_block*) +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' fucntion 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_xib = NULL; +#ifdef CONFIG_AUFS_EXPORT + sbinfo->si_dbgaufs_xigen = NULL; +#endif +#endif +} + +/* ---------------------------------------------------------------------- */ + +static inline pid_t si_pid_bit(void) +{ + /* the origin of pid is 1, but the bitmap's is 0 */ + return current->pid - 1; +} + +static inline int si_pid_test(struct super_block *sb) +{ + pid_t bit = si_pid_bit(); + if (bit < PID_MAX_DEFAULT) + return test_bit(bit, au_sbi(sb)->au_si_pid.bitmap); + else + return si_pid_test_slow(sb); +} + +static inline void si_pid_set(struct super_block *sb) +{ + pid_t bit = si_pid_bit(); + if (bit < PID_MAX_DEFAULT) { + AuDebugOn(test_bit(bit, au_sbi(sb)->au_si_pid.bitmap)); + set_bit(bit, au_sbi(sb)->au_si_pid.bitmap); + /* smp_mb(); */ + } else + si_pid_set_slow(sb); +} + +static inline void si_pid_clr(struct super_block *sb) +{ + pid_t bit = si_pid_bit(); + if (bit < PID_MAX_DEFAULT) { + AuDebugOn(!test_bit(bit, au_sbi(sb)->au_si_pid.bitmap)); + clear_bit(bit, au_sbi(sb)->au_si_pid.bitmap); + /* smp_mb(); */ + } else + si_pid_clr_slow(sb); +} + +/* ---------------------------------------------------------------------- */ + +/* lock superblock. mainly for entry point functions */ +/* + * __si_read_lock, __si_write_lock, + * __si_read_unlock, __si_write_unlock, __si_downgrade_lock + */ +AuSimpleRwsemFuncs(__si, struct super_block *sb, &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 = __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 = __si_write_trylock(sb); + if (locked) + si_pid_set(sb); + return locked; +} + +#if 0 /* unused */ +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 /* unused */ +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 /* unused */ +static inline void si_downgrade_lock(struct super_block *sb) +{ + __si_downgrade_lock(sb); +} +#endif + +/* ---------------------------------------------------------------------- */ + +static inline aufs_bindex_t au_sbend(struct super_block *sb) +{ + SiMustAnyLock(sb); + return au_sbi(sb)->si_bend; +} + +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 void au_ninodes_inc(struct super_block *sb) +{ + atomic_long_inc(&au_sbi(sb)->si_ninodes); +} + +static inline void au_ninodes_dec(struct super_block *sb) +{ + AuDebugOn(!atomic_long_read(&au_sbi(sb)->si_ninodes)); + atomic_long_dec(&au_sbi(sb)->si_ninodes); +} + +static inline void au_nfiles_inc(struct super_block *sb) +{ + atomic_long_inc(&au_sbi(sb)->si_nfiles); +} + +static inline void au_nfiles_dec(struct super_block *sb) +{ + AuDebugOn(!atomic_long_read(&au_sbi(sb)->si_nfiles)); + atomic_long_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-lts-raring-3.8.0.orig/ubuntu/aufs/wkq.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/wkq.c @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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; + + struct completion *comp; +}; + +/* ---------------------------------------------------------------------- */ + +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); + + wkinfo->func(wkinfo->args); + 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 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, 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 (!err) { + au_wkq_run(&wkinfo); + /* no timeout, no interrupt */ + wait_for_completion(wkinfo.comp); + au_wkq_comp_free(comp); + 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; + 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; + BUILD_BUG_ON(!WQ_RESCUER); + au_wkq = alloc_workqueue(AUFS_WKQ_NAME, !WQ_RESCUER, WQ_DFL_ACTIVE); + if (IS_ERR(au_wkq)) + err = PTR_ERR(au_wkq); + else if (!au_wkq) + err = -ENOMEM; + + return err; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/super.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/super.c @@ -0,0 +1,962 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * mount and super_block operations + */ + +#include +#include +#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); + + INIT_HLIST_HEAD(&inode->i_dentry); + au_cache_free_icntnr(container_of(inode, struct au_icntnr, vfs_inode)); +} + +static void aufs_destroy_inode(struct 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, bend; + struct path path; + struct au_hdentry *hdp; + struct au_branch *br; + char *perm; + + err = 0; + bend = au_sbend(sb); + hdp = au_di(sb->s_root)->di_hdentry; + for (bindex = 0; !err && bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + path.mnt = br->br_mnt; + path.dentry = hdp[bindex].hd_dentry; + err = au_seq_path(seq, &path); + if (err > 0) { + perm = au_optstr_br_perm(br->br_perm); + if (perm) { + err = seq_printf(seq, "=%s", perm); + kfree(perm); + if (err == -1) + err = -E2BIG; + } else + err = -ENOMEM; + } + if (!err && bindex != bend) + err = seq_putc(seq, ':'); + } + + return err; +} + +static void au_show_wbr_create(struct seq_file *m, int v, + struct au_sbinfo *sbinfo) +{ + const char *pat; + + AuRwMustAnyLock(&sbinfo->si_rwsem); + + seq_printf(m, ",create="); + pat = au_optstr_wbr_create(v); + switch (v) { + case AuWbrCreate_TDP: + case AuWbrCreate_RR: + case AuWbrCreate_MFS: + case AuWbrCreate_PMFS: + seq_printf(m, pat); + break; + case AuWbrCreate_MFSV: + seq_printf(m, /*pat*/"mfs:%lu", + jiffies_to_msecs(sbinfo->si_wbr_mfs.mfs_expire) + / MSEC_PER_SEC); + break; + case AuWbrCreate_PMFSV: + seq_printf(m, /*pat*/"pmfs:%lu", + jiffies_to_msecs(sbinfo->si_wbr_mfs.mfs_expire) + / MSEC_PER_SEC); + break; + case AuWbrCreate_MFSRR: + seq_printf(m, /*pat*/"mfsrr:%llu", + sbinfo->si_wbr_mfs.mfsrr_watermark); + break; + case AuWbrCreate_MFSRRV: + seq_printf(m, /*pat*/"mfsrr:%llu:%lu", + sbinfo->si_wbr_mfs.mfsrr_watermark, + jiffies_to_msecs(sbinfo->si_wbr_mfs.mfs_expire) + / MSEC_PER_SEC); + break; + } +} + +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; + struct au_hdentry *hdp; + + 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); + hdp = au_di(sb->s_root)->di_hdentry; + h_root = hdp[0 + bindex].hd_dentry; + } + d = f->f_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) + + /* lock free root dinfo */ + sb = dentry->d_sb; + 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); */ + /* AuBool(REFROF, refrof); */ + + 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); + + 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 bend, 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; + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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; +} + +/* ---------------------------------------------------------------------- */ + +/* 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_free(void *array) +{ + if (array) { + if (!is_vmalloc_addr(array)) + kfree(array); + else + vfree(array); + } +} + +void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, void *arg) +{ + void *array; + unsigned long long n; + + 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; + } + + array = kmalloc(sizeof(array) * *hint, GFP_NOFS); + if (unlikely(!array)) + array = vmalloc(sizeof(array) * *hint); + if (unlikely(!array)) { + array = ERR_PTR(-ENOMEM); + goto out; + } + + n = cb(array, *hint, arg); + AuDebugOn(n > *hint); + +out: + *hint = n; + return array; +} + +static unsigned long long au_iarray_cb(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(&inode_sb_list_lock); + list_for_each_entry(inode, head, i_sb_list) { + if (!is_bad_inode(inode) + && au_ii(inode)->ii_bstart >= 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(&inode_sb_list_lock); + + return n; +} + +struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max) +{ + *max = atomic_long_read(&au_sbi(sb)->si_ninodes); + return au_array_alloc(max, au_iarray_cb, &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]); + au_array_free(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(dentry->d_inode, 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) +{ + int err; + struct dentry *parent; + struct inode *inode; + + err = 0; + parent = dget_parent(dentry); + if (!au_digen_test(parent, sigen) && au_digen_test(dentry, sigen)) { + inode = dentry->d_inode; + if (inode) { + if (!S_ISDIR(inode->i_mode)) + 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); + + AuTraceErr(err); + return err; +} + +static int au_refresh_d(struct super_block *sb) +{ + 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(root->d_inode, /*isdir*/1); + + 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); + 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) +{ + 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 (au_iigen(inode) != sigen) { + ii_write_lock_child(inode); + e = au_refresh_hinode_self(inode); + ii_write_unlock(inode); + if (unlikely(e)) { + pr_err("error %d, i%lu\n", e, inode->i_ino); + if (!err) + err = e; + /* go on even if err */ + } + } + } + + au_iarray_free(array, max); + +out: + return err; +} + +static void au_remount_refresh(struct super_block *sb) +{ + int err, e; + unsigned int udba; + aufs_bindex_t bindex, bend; + struct dentry *root; + struct inode *inode; + struct au_branch *br; + + au_sigen_inc(sb); + au_fclr_si(au_sbi(sb), FAILED_REFRESH_DIR); + + root = sb->s_root; + DiMustNoWaiters(root); + inode = root->d_inode; + IiMustNoWaiters(inode); + + udba = au_opt_udba(sb); + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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)); + + di_write_unlock(root); + err = au_refresh_d(sb); + e = au_refresh_i(sb); + 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; + 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; + memset(&opts, 0, sizeof(opts)); + 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 = root->d_inode; + mutex_lock(&inode->i_mutex); + 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); + + if (au_ftest_opts(opts.flags, REFRESH_DYAOP)) { + mntflags = au_mntflags(sb); + do_dx = !!au_opt_test(mntflags, DIO); + au_dy_arefresh(do_dx); + } + + aufs_write_unlock(root); + +out_mtx: + mutex_unlock(&inode->i_mutex); +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, + .remount_fs = aufs_remount_fs +}; + +/* ---------------------------------------------------------------------- */ + +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_dir_iop; + 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; + 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; + memset(&opts, 0, sizeof(opts)); + 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; + + /* all timestamps always follow the ones on the branch */ + sb->s_flags |= MS_NOATIME | MS_NODIRATIME; + sb->s_op = &aufs_sop; + sb->s_d_op = &aufs_dop; + sb->s_magic = AUFS_SUPER_MAGIC; + sb->s_maxbytes = 0; + au_export_init(sb); + + err = alloc_root(sb); + if (unlikely(err)) { + si_write_unlock(sb); + goto out_info; + } + root = sb->s_root; + inode = root->d_inode; + + /* + * 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. */ + mutex_lock(&inode->i_mutex); + aufs_write_lock(root); + err = au_opts_mount(sb, &opts); + au_opts_free(&opts); + aufs_write_unlock(root); + mutex_unlock(&inode->i_mutex); + if (!err) + goto out_opts; /* success */ + +out_root: + dput(root); + sb->s_root = NULL; +out_info: + dbgaufs_si_fin(au_sbi(sb)); + kobject_put(&au_sbi(sb)->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); + 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); + } + if (au_opt_test(sbinfo->si_mntflags, PLINK)) + au_plink_put(sb, /*verbose*/1); + au_xino_clr(sb); + sbinfo->si_sb = NULL; + aufs_write_unlock(sb->s_root); + au_nwt_flush(&sbinfo->si_nowait); + } + generic_shutdown_super(sb); +} + +struct file_system_type aufs_fs_type = { + .name = AUFS_FSTYPE, + .fs_flags = + FS_RENAME_DOES_D_MOVE /* a race between rename and others */ + | FS_REVAL_DOT, /* for NFS branch and udba */ + .mount = aufs_mount, + .kill_sb = aufs_kill_sb, + /* no need to __module_get() and module_put(). */ + .owner = THIS_MODULE, +}; --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/file.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/file.h @@ -0,0 +1,298 @@ +/* + * Copyright (C) 2005-2012 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 operations + */ + +#ifndef __AUFS_FILE_H__ +#define __AUFS_FILE_H__ + +#ifdef __KERNEL__ + +#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 */ +} ____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 au_do_open(struct file *file, int (*open)(struct file *file, int flags), + struct au_fidir *fidir); +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); +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); +void au_h_open_post(struct dentry *dentry, aufs_bindex_t bindex, + struct file *h_file); +#else +static inline +struct file *au_h_open_pre(struct dentry *dentry, aufs_bindex_t bindex) +{ + return NULL; +} + +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); +int aufs_release_nondir(struct inode *inode __maybe_unused, struct file *file); + +#ifdef CONFIG_AUFS_SP_IATTR +/* f_op_sp.c */ +int au_special_file(umode_t mode); +void au_init_special_fop(struct inode *inode, umode_t mode, dev_t rdev); +#else +AuStubInt0(au_special_file, umode_t mode) +static inline void au_init_special_fop(struct inode *inode, umode_t mode, + dev_t rdev) +{ + init_special_inode(inode, mode, rdev); +} +#endif + +/* finfo.c */ +void au_hfput(struct au_hfile *hf, struct file *file); +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); + +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); +#endif + +/* ---------------------------------------------------------------------- */ + +static inline struct au_finfo *au_fi(struct file *file) +{ + return file->private_data; +} + +/* ---------------------------------------------------------------------- */ + +/* + * fi_read_lock, fi_write_lock, + * fi_read_unlock, fi_write_unlock, fi_downgrade_lock + */ +AuSimpleRwsemFuncs(fi, struct file *f, &au_fi(f)->fi_rwsem); + +#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_fbstart(struct file *file) +{ + FiMustAnyLock(file); + return au_fi(file)->fi_btop; +} + +static inline aufs_bindex_t au_fbend_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_fbstart(struct file *file, aufs_bindex_t bindex) +{ + FiMustWriteLock(file); + au_fi(file)->fi_btop = bindex; +} + +static inline void au_set_fbend_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) +{ +#ifdef CONFIG_AUFS_PROC_MAP + get_file(file); + vma->vm_prfile = file; +#ifndef CONFIG_MMU + get_file(file); + vma->vm_region->vm_prfile = file; +#endif +#endif +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/aufs.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/aufs.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 "dynop.h" +#include "file.h" +#include "fstype.h" +#include "inode.h" +#include "loop.h" +#include "module.h" +#include "opts.h" +#include "rwsem.h" +#include "spl.h" +#include "super.h" +#include "sysaufs.h" +#include "vfsub.h" +#include "whout.h" +#include "wkq.h" + +#endif /* __KERNEL__ */ +#endif /* __AUFS_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/i_op.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/i_op.c @@ -0,0 +1,1013 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * inode operations (except add/del/rename) + */ + +#include +#include +#include +#include +#include +#include "aufs.h" + +static int h_permission(struct inode *h_inode, int mask, + struct vfsmount *h_mnt, int brperm) +{ + int err; + const unsigned char write_mask = !!(mask & (MAY_WRITE | MAY_APPEND)); + + err = -EACCES; + if ((write_mask && IS_IMMUTABLE(h_inode)) + || ((mask & MAY_EXEC) + && S_ISREG(h_inode->i_mode) + && ((h_mnt->mnt_flags & MNT_NOEXEC) + || !(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. + */ + 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); */ + err = generic_permission(h_inode, mask); + } 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, bend; + 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) { + err = au_busy_or_stale(); + h_inode = au_h_iptr(inode, au_ibstart(inode)); + if (unlikely(!h_inode + || (h_inode->i_mode & S_IFMT) + != (inode->i_mode & S_IFMT))) + goto out; + + err = 0; + bindex = au_ibstart(inode); + br = au_sbr(sb, bindex); + err = h_permission(h_inode, mask, br->br_mnt, 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; + bend = au_ibend(inode); + for (bindex = au_ibstart(inode); !err && bindex <= bend; 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_mnt, + 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, lc_idx; + + IMustLock(dir); + + sb = dir->i_sb; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + ret = ERR_PTR(err); + if (unlikely(err)) + goto out; + + ret = ERR_PTR(-ENAMETOOLONG); + if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN)) + goto out_si; + 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) { + npositive = au_lkup_dentry(dentry, au_dbstart(parent), + /*type*/0, flags); + 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); + ret = (void *)inode; + } + if (IS_ERR(inode)) { + inode = NULL; + goto out_unlock; + } + + ret = d_splice_alias(inode, dentry); + if (unlikely(IS_ERR(ret) && inode)) { + ii_write_unlock(inode); + iput(inode); + inode = NULL; + } + +out_unlock: + di_write_unlock(dentry); + if (inode) { + lc_idx = AuLcNonDir_DIINFO; + if (S_ISLNK(inode->i_mode)) + lc_idx = AuLcSymlink_DIINFO; + else if (S_ISDIR(inode->i_mode)) + lc_idx = AuLcDir_DIINFO; + au_rw_class(&au_di(dentry)->di_rwsem, au_lc_key + lc_idx); + } +out_si: + si_read_unlock(sb); +out: + return ret; +} + +/* ---------------------------------------------------------------------- */ + +static int au_wr_dir_cpup(struct dentry *dentry, struct dentry *parent, + const unsigned char add_entry, aufs_bindex_t bcpup, + aufs_bindex_t bstart) +{ + int err; + struct dentry *h_parent; + struct inode *h_dir; + + if (add_entry) + IMustLock(parent->d_inode); + else + di_write_lock_parent(parent); + + err = 0; + if (!au_h_dptr(parent, bcpup)) { + if (bstart < bcpup) + err = au_cpdown_dirs(dentry, bcpup); + else + err = au_cpup_dirs(dentry, bcpup); + } + if (!err && add_entry) { + h_parent = au_h_dptr(parent, bcpup); + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + err = au_lkup_neg(dentry, bcpup); + /* todo: no unlock here */ + mutex_unlock(&h_dir->i_mutex); + + AuDbg("bcpup %d\n", bcpup); + if (!err) { + if (!dentry->d_inode) + au_set_h_dptr(dentry, bstart, 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; + aufs_bindex_t bcpup, bstart, src_bstart; + const unsigned char add_entry = !!au_ftest_wrdir(args->flags, + ADD_ENTRY); + struct super_block *sb; + struct dentry *parent; + struct au_sbinfo *sbinfo; + + sb = dentry->d_sb; + sbinfo = au_sbi(sb); + parent = dget_parent(dentry); + bstart = au_dbstart(dentry); + bcpup = bstart; + if (args->force_btgt < 0) { + if (src_dentry) { + src_bstart = au_dbstart(src_dentry); + if (src_bstart < bstart) + bcpup = src_bstart; + } else if (add_entry) { + err = AuWbrCreate(sbinfo, dentry, + au_ftest_wrdir(args->flags, ISDIR)); + bcpup = err; + } + + if (bcpup < 0 || au_test_ro(sb, bcpup, dentry->d_inode)) { + 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, dentry->d_inode)); + } + + AuDbg("bstart %d, bcpup %d\n", bstart, bcpup); + err = bcpup; + if (bcpup == bstart) + goto out; /* success */ + + /* copyup the new parent into the branch we process */ + err = au_wr_dir_cpup(dentry, parent, add_entry, bcpup, bstart); + if (err >= 0) { + if (!dentry->d_inode) { + au_set_h_dptr(dentry, bstart, NULL); + au_set_dbstart(dentry, bcpup); + au_set_dbend(dentry, bcpup); + } + AuDebugOn(add_entry && !au_h_dptr(dentry, bcpup)); + } + +out: + dput(parent); + return err; +} + +/* ---------------------------------------------------------------------- */ + +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->h_mnt && au_ftest_pin(p->flags, MNT_WRITE)) + vfsub_mnt_drop_write(p->h_mnt); + if (!p->hdir) + return; + + au_hn_imtx_unlock(p->hdir); + 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; +} + +int au_do_pin(struct au_pin *p) +{ + int err; + struct super_block *sb; + struct dentry *h_dentry, *h_parent; + struct au_branch *br; + struct inode *h_dir; + + err = 0; + sb = p->dentry->d_sb; + br = au_sbr(sb, p->bindex); + if (IS_ROOT(p->dentry)) { + if (au_ftest_pin(p->flags, MNT_WRITE)) { + p->h_mnt = br->br_mnt; + err = vfsub_mnt_want_write(p->h_mnt); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_err; + } + } + goto out; + } + + h_dentry = NULL; + if (p->bindex <= au_dbend(p->dentry)) + 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; + h_parent = au_h_dptr(p->parent, p->bindex); + p->hdir = au_hi(p->parent->d_inode, 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 || !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; + } + + au_igrab(h_dir); + au_hn_imtx_lock_nested(p->hdir, p->lsc_hi); + + if (unlikely(p->hdir->hi_inode != h_parent->d_inode)) { + err = -EBUSY; + goto out_unpin; + } + if (h_dentry) { + err = au_h_verify(h_dentry, p->udba, h_dir, h_parent, br); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_unpin; + } + } + + if (au_ftest_pin(p->flags, MNT_WRITE)) { + p->h_mnt = br->br_mnt; + err = vfsub_mnt_want_write(p->h_mnt); + if (unlikely(err)) { + au_fclr_pin(p->flags, MNT_WRITE); + goto out_unpin; + } + } + goto out; /* success */ + +out_unpin: + 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; +} + +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() */ +static int au_reval_for_attr(struct dentry *dentry, unsigned int sigen) +{ + int err; + struct inode *inode; + struct dentry *parent; + + err = 0; + inode = dentry->d_inode; + 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; +} + +#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; +}; + +static int au_pin_and_icpup(struct dentry *dentry, struct iattr *ia, + struct au_icpup_args *a) +{ + int err; + loff_t sz; + aufs_bindex_t bstart, ibstart; + struct dentry *hi_wh, *parent; + struct inode *inode; + struct file *h_file; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = 0 + }; + + bstart = au_dbstart(dentry); + inode = dentry->d_inode; + if (S_ISDIR(inode->i_mode)) + au_fset_wrdir(wr_dir_args.flags, ISDIR); + /* plink or hi_wh() case */ + ibstart = au_ibstart(inode); + if (bstart != ibstart && !au_test_ro(inode->i_sb, ibstart, inode)) + wr_dir_args.force_btgt = ibstart; + err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); + if (unlikely(err < 0)) + goto out; + a->btgt = err; + if (err != bstart) + 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; + + a->h_path.dentry = au_h_dptr(dentry, bstart); + a->h_inode = a->h_path.dentry->d_inode; + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + sz = -1; + if ((ia->ia_valid & ATTR_SIZE) && ia->ia_size < i_size_read(a->h_inode)) + sz = ia->ia_size; + + h_file = NULL; + 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) { + err = au_sio_cpup_wh(dentry, a->btgt, sz, /*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)) { + h_file = au_h_open_pre(dentry, bstart); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + h_file = NULL; + } else + err = au_sio_cpup_simple(dentry, a->btgt, sz, + AuCpup_DTIME); + 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: + mutex_unlock(&a->h_inode->i_mutex); + au_h_open_post(dentry, bstart, h_file); + a->h_inode = a->h_path.dentry->d_inode; + if (!err) { + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + goto out; /* success */ + } + + au_unpin(&a->pin); +out_parent: + if (parent) { + di_write_unlock(parent); + dput(parent); + } +out: + return err; +} + +static int aufs_setattr(struct dentry *dentry, struct iattr *ia) +{ + int err; + struct inode *inode; + struct super_block *sb; + struct file *file; + struct au_icpup_args *a; + + inode = dentry->d_inode; + IMustLock(inode); + + 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(!S_ISREG(inode->i_mode)); + file = ia->ia_file; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + 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, vfsub_ia_uid(ia), + vfsub_ia_gid(ia)); + 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; + mutex_unlock(&a->h_inode->i_mutex); + err = vfsub_trunc(&a->h_path, ia->ia_size, ia->ia_valid, f); + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + } else + err = vfsub_notify_change(&a->h_path, ia); + if (!err) + au_cpup_attr_changeable(inode); + +out_unlock: + mutex_unlock(&a->h_inode->i_mutex); + au_unpin(&a->pin); + if (unlikely(err)) + au_update_dbstart(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; +} + +static void au_refresh_iattr(struct inode *inode, struct kstat *st, + unsigned int nlink) +{ + unsigned int n; + + inode->i_mode = st->mode; + i_uid_write(inode, st->uid); + i_gid_write(inode, 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; + /* 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); +} + +static int aufs_getattr(struct vfsmount *mnt __maybe_unused, + struct dentry *dentry, struct kstat *st) +{ + int err; + unsigned int mnt_flags; + aufs_bindex_t bindex; + unsigned char udba_none, positive; + struct super_block *sb, *h_sb; + struct inode *inode; + struct vfsmount *h_mnt; + struct dentry *h_dentry; + + sb = dentry->d_sb; + inode = dentry->d_inode; + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out; + mnt_flags = au_mntflags(sb); + udba_none = !!au_opt_test(mnt_flags, UDBA_NONE); + + /* support fstat(2) */ + if (!d_unlinked(dentry) && !udba_none) { + unsigned int 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)) + goto out_unlock; + } else { + AuDebugOn(IS_ROOT(dentry)); + di_write_lock_child(dentry); + err = au_dbrange_test(dentry); + if (!err) + err = au_reval_for_attr(dentry, sigen); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + } + } else + di_read_lock_child(dentry, AuLock_IR); + + bindex = au_ibstart(inode); + h_mnt = au_sbr_mnt(sb, bindex); + h_sb = h_mnt->mnt_sb; + if (!au_test_fs_bad_iattr(h_sb) && udba_none) + goto out_fill; /* success */ + + h_dentry = NULL; + if (au_dbstart(dentry) == bindex) + h_dentry = dget(au_h_dptr(dentry, bindex)); + else if (au_opt_test(mnt_flags, PLINK) && au_plink_test(inode)) { + h_dentry = au_plink_lkup(inode, bindex); + if (IS_ERR(h_dentry)) + goto out_fill; /* pretending success */ + } + /* illegally overlapped or something */ + if (unlikely(!h_dentry)) + goto out_fill; /* pretending success */ + + positive = !!h_dentry->d_inode; + if (positive) + err = vfs_getattr(h_mnt, h_dentry, st); + dput(h_dentry); + if (!err) { + if (positive) + au_refresh_iattr(inode, st, h_dentry->d_inode->i_nlink); + goto out_fill; /* success */ + } + AuTraceErr(err); + goto out_unlock; + +out_fill: + generic_fillattr(inode, st); +out_unlock: + di_read_unlock(dentry, AuLock_IR); + si_read_unlock(sb); +out: + AuTraceErr(err); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int h_readlink(struct dentry *dentry, int bindex, char __user *buf, + int bufsiz) +{ + int err; + struct super_block *sb; + struct dentry *h_dentry; + + err = -EINVAL; + h_dentry = au_h_dptr(dentry, bindex); + if (unlikely(!h_dentry->d_inode->i_op->readlink)) + goto out; + + err = security_inode_readlink(h_dentry); + if (unlikely(err)) + goto out; + + sb = dentry->d_sb; + if (!au_test_ro(sb, bindex, dentry->d_inode)) { + vfsub_touch_atime(au_sbr_mnt(sb, bindex), h_dentry); + fsstack_copy_attr_atime(dentry->d_inode, h_dentry->d_inode); + } + err = h_dentry->d_inode->i_op->readlink(h_dentry, buf, bufsiz); + +out: + return err; +} + +static int aufs_readlink(struct dentry *dentry, char __user *buf, int bufsiz) +{ + int err; + + err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN); + if (unlikely(err)) + goto out; + err = au_d_hashed_positive(dentry); + if (!err) + err = h_readlink(dentry, au_dbstart(dentry), buf, bufsiz); + aufs_read_unlock(dentry, AuLock_IR); + +out: + return err; +} + +static void *aufs_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + int err; + mm_segment_t old_fs; + union { + char *k; + char __user *u; + } buf; + + err = -ENOMEM; + buf.k = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!buf.k)) + goto out; + + err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN); + if (unlikely(err)) + goto out_name; + + err = au_d_hashed_positive(dentry); + if (!err) { + old_fs = get_fs(); + set_fs(KERNEL_DS); + err = h_readlink(dentry, au_dbstart(dentry), buf.u, PATH_MAX); + set_fs(old_fs); + } + aufs_read_unlock(dentry, AuLock_IR); + + if (err >= 0) { + buf.k[err] = 0; + /* will be freed by put_link */ + nd_set_link(nd, buf.k); + return NULL; /* success */ + } + +out_name: + free_page((unsigned long)buf.k); +out: + AuTraceErr(err); + return ERR_PTR(err); +} + +static void aufs_put_link(struct dentry *dentry __maybe_unused, + struct nameidata *nd, void *cookie __maybe_unused) +{ + char *p; + + p = nd_get_link(nd); + if (!IS_ERR_OR_NULL(p)) + free_page((unsigned long)p); +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_update_time(struct inode *inode, struct timespec *ts, int flags) +{ + int err; + struct super_block *sb; + struct inode *h_inode; + + sb = inode->i_sb; + /* mmap_sem might be acquired already, cf. aufs_mmap() */ + lockdep_off(); + si_read_lock(sb, AuLock_FLUSH); + ii_write_lock_child(inode); + lockdep_on(); + h_inode = au_h_iptr(inode, au_ibstart(inode)); + err = vfsub_update_time(h_inode, ts, flags); + lockdep_off(); + ii_write_unlock(inode); + si_read_unlock(sb); + lockdep_on(); + return err; +} + +/* ---------------------------------------------------------------------- */ + +struct inode_operations aufs_symlink_iop = { + .permission = aufs_permission, + .setattr = aufs_setattr, + .getattr = aufs_getattr, + + .readlink = aufs_readlink, + .follow_link = aufs_follow_link, + .put_link = aufs_put_link, + + /* .update_time = aufs_update_time */ +}; + +struct inode_operations aufs_dir_iop = { + .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, + .setattr = aufs_setattr, + .getattr = aufs_getattr, + + .update_time = aufs_update_time + /* no support for atomic_open() */ +}; + +struct inode_operations aufs_iop = { + .permission = aufs_permission, + .setattr = aufs_setattr, + .getattr = aufs_getattr, + + .update_time = aufs_update_time +}; --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/inode.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/inode.h @@ -0,0 +1,560 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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; +}; + +struct au_vdir; +struct au_iinfo { + atomic_t ii_generation; + struct super_block *ii_hsb1; /* no get/put */ + + struct au_rwsem ii_rwsem; + aufs_bindex_t ii_bstart, ii_bend; + __u32 ii_higen; + struct au_hinode *ii_hinode; + struct au_vdir *ii_vdir; +}; + +struct au_icntnr { + struct au_iinfo iinfo; + struct inode vfs_inode; +} ____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; +}; + +/* ---------------------------------------------------------------------- */ + +static inline struct au_iinfo *au_ii(struct inode *inode) +{ + struct au_iinfo *iinfo; + + iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); + if (iinfo->ii_hinode) + return iinfo; + return NULL; /* debugging bad_inode case */ +} + +/* ---------------------------------------------------------------------- */ + +/* inode.c */ +struct inode *au_igrab(struct inode *inode); +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 */ +extern struct inode_operations aufs_iop, aufs_symlink_iop, aufs_dir_iop; + +/* au_wr_dir flags */ +#define AuWrDir_ADD_ENTRY 1 +#define AuWrDir_ISDIR (1 << 1) +#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); + +/* 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); +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); + +/* 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); +void au_update_ibrange(struct inode *inode, int do_put_zero); + +void au_icntnr_init_once(void *_c); +int au_iinfo_init(struct inode *inode); +void au_iinfo_fin(struct inode *inode); +int au_ii_realloc(struct au_iinfo *iinfo, int nbr); + +#ifdef CONFIG_PROC_FS +/* plink.c */ +int au_plink_maint(struct super_block *sb, int flags); +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 */ + +/* ---------------------------------------------------------------------- */ + +/* 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 + +/* + * ii_read_unlock, ii_write_unlock, ii_downgrade_lock + */ +AuSimpleUnlockRwsemFuncs(ii, struct inode *i, &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) +{ + return atomic_read(&au_ii(inode)->ii_generation); +} + +/* 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) +{ + atomic_dec(&au_ii(inode)->ii_generation); +} + +static inline int au_iigen_test(struct inode *inode, unsigned int sigen) +{ + int err; + + err = 0; + if (unlikely(inode && au_iigen(inode) != sigen)) + err = -EIO; + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static inline aufs_bindex_t au_ii_br_id(struct inode *inode, + aufs_bindex_t bindex) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_hinode[0 + bindex].hi_id; +} + +static inline aufs_bindex_t au_ibstart(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_bstart; +} + +static inline aufs_bindex_t au_ibend(struct inode *inode) +{ + IiMustAnyLock(inode); + return au_ii(inode)->ii_bend; +} + +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_ii(inode)->ii_hinode[0 + bindex].hi_whdentry; +} + +static inline void au_set_ibstart(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_bstart = bindex; +} + +static inline void au_set_ibend(struct inode *inode, aufs_bindex_t bindex) +{ + IiMustWriteLock(inode); + au_ii(inode)->ii_bend = 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_ii(inode)->ii_hinode + 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); + } +} + +static inline void au_pin_set_parent(struct au_pin *pin, struct dentry *parent) +{ + if (pin) { + dput(pin->parent); + pin->parent = dget(parent); + } +} + +/* ---------------------------------------------------------------------- */ + +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 +static inline +int au_hn_alloc(struct au_hinode *hinode __maybe_unused, + struct inode *inode __maybe_unused) +{ + return -EOPNOTSUPP; +} + +static inline struct au_hnotify *au_hn(struct au_hinode *hinode) +{ + return NULL; +} + +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_imtx_lock(struct au_hinode *hdir) +{ + mutex_lock(&hdir->hi_inode->i_mutex); + au_hn_suspend(hdir); +} + +static inline void au_hn_imtx_lock_nested(struct au_hinode *hdir, + unsigned int sc __maybe_unused) +{ + mutex_lock_nested(&hdir->hi_inode->i_mutex, sc); + au_hn_suspend(hdir); +} + +static inline void au_hn_imtx_unlock(struct au_hinode *hdir) +{ + au_hn_resume(hdir); + mutex_unlock(&hdir->hi_inode->i_mutex); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_INODE_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/dcsub.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/dcsub.c @@ -0,0 +1,243 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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); + 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(!dentry->d_count); + dpage->dentries[dpage->ndentry++] = dget_dlock(dentry); + return 0; /* success */ + +out: + return err; +} + +int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, + au_dpages_test test, void *arg) +{ + int err; + struct dentry *this_parent; + struct list_head *next; + struct super_block *sb = root->d_sb; + + err = 0; + write_seqlock(&rename_lock); + this_parent = root; + spin_lock(&this_parent->d_lock); +repeat: + next = this_parent->d_subdirs.next; +resume: + if (this_parent->d_sb == sb + && !IS_ROOT(this_parent) + && au_di(this_parent) + && this_parent->d_count + && (!test || test(this_parent, arg))) { + err = au_dpages_append(dpages, this_parent, GFP_ATOMIC); + if (unlikely(err)) + goto out; + } + + while (next != &this_parent->d_subdirs) { + struct list_head *tmp = next; + struct dentry *dentry = list_entry(tmp, struct dentry, + d_u.d_child); + + next = tmp->next; + spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); + if (dentry->d_count) { + if (!list_empty(&dentry->d_subdirs)) { + spin_unlock(&this_parent->d_lock); + spin_release(&dentry->d_lock.dep_map, 1, + _RET_IP_); + this_parent = dentry; + spin_acquire(&this_parent->d_lock.dep_map, 0, 1, + _RET_IP_); + goto repeat; + } + if (dentry->d_sb == sb + && au_di(dentry) + && (!test || test(dentry, arg))) + err = au_dpages_append(dpages, dentry, + GFP_ATOMIC); + } + spin_unlock(&dentry->d_lock); + if (unlikely(err)) + goto out; + } + + if (this_parent != root) { + struct dentry *tmp; + struct dentry *child; + + tmp = this_parent->d_parent; + rcu_read_lock(); + spin_unlock(&this_parent->d_lock); + child = this_parent; + this_parent = tmp; + spin_lock(&this_parent->d_lock); + rcu_read_unlock(); + next = child->d_u.d_child.next; + goto resume; + } + +out: + spin_unlock(&this_parent->d_lock); + write_sequnlock(&rename_lock); + return 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 + && dentry->d_count + && (!test || test(dentry, arg))) + err = au_dpages_append(dpages, dentry, GFP_ATOMIC); + spin_unlock(&dentry->d_lock); + if (unlikely(err)) + goto out; + + /* + * vfsmount_lock 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 (dentry->d_count + && (!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-lts-raring-3.8.0.orig/ubuntu/aufs/xino.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/xino.c @@ -0,0 +1,1264 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * external inode number translation table and bitmap + */ + +#include +#include "aufs.h" + +/* todo: unnecessary to support mmap_sem since kernel-space? */ +ssize_t xino_fread(au_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_dentry); +#endif + + return err; +} + +/* ---------------------------------------------------------------------- */ + +static ssize_t do_xino_fwrite(au_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; + + 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_modify(file->f_dentry); +#endif + + return err; +} + +struct do_xino_fwrite_args { + ssize_t *errp; + au_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); +} + +ssize_t xino_fwrite(au_writef_t func, struct file *file, void *buf, size_t size, + loff_t *pos) +{ + ssize_t err; + + /* todo: signal block and no wkq? */ + if (rlimit(RLIMIT_FSIZE) == RLIM_INFINITY) { + lockdep_off(); + err = do_xino_fwrite(func, file, buf, size, pos); + lockdep_on(); + } else { + /* + * it breaks RLIMIT_FSIZE and normal user's limit, + * users should care about quota and real 'filesystem full.' + */ + int wkq_err; + struct do_xino_fwrite_args args = { + .errp = &err, + .func = func, + .file = file, + .buf = buf, + .size = size, + .pos = pos + }; + + wkq_err = au_wkq_wait(call_do_xino_fwrite, &args); + if (unlikely(wkq_err)) + err = wkq_err; + } + + 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; + struct qstr *name; + struct path path; + int err; + + base = base_file->f_dentry; + parent = base->d_parent; /* dir inode is locked */ + dir = parent->d_inode; + 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("%.*s lookup err %ld\n", + AuLNPair(name), 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("%.*s create err %d\n", AuLNPair(name), err); + goto out_dput; + } + + path.mnt = base_file->f_vfsmnt; + file = vfsub_dentry_open(&path, + O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE + /* | __FMODE_NONOTIFY */); + if (IS_ERR(file)) { + pr_err("%.*s open err %ld\n", AuLNPair(name), PTR_ERR(file)); + goto out_dput; + } + + err = vfsub_unlink(dir, &file->f_path, /*force*/0); + if (unlikely(err)) { + pr_err("%.*s unlink err %d\n", AuLNPair(name), err); + goto out_fput; + } + + if (copy_src) { + /* no one can touch copy_src xino */ + err = au_copy_file(file, copy_src, + i_size_read(copy_src->f_dentry->d_inode)); + if (unlikely(err)) { + pr_err("%.*s copy err %d\n", AuLNPair(name), 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 mutex *mtx; +}; + +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(sb->s_root->d_inode, bindex); + au_hn_imtx_lock_nested(ldir->hdir, AuLsc_I_PARENT); + } else { + ldir->parent = dget_parent(xino->f_dentry); + ldir->mtx = &ldir->parent->d_inode->i_mutex; + mutex_lock_nested(ldir->mtx, AuLsc_I_PARENT); + } +} + +static void au_xino_unlock_dir(struct au_xino_lock_dir *ldir) +{ + if (ldir->hdir) + au_hn_imtx_unlock(ldir->hdir); + else { + mutex_unlock(ldir->mtx); + dput(ldir->parent); + } +} + +/* ---------------------------------------------------------------------- */ + +/* trucate xino files asynchronously */ + +int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex) +{ + int err; + aufs_bindex_t bi, bend; + struct au_branch *br; + struct file *new_xino, *file; + struct super_block *h_sb; + struct au_xino_lock_dir ldir; + + err = -EINVAL; + bend = au_sbend(sb); + if (unlikely(bindex < 0 || bend < bindex)) + goto out; + br = au_sbr(sb, bindex); + file = br->br_xino.xi_file; + if (!file) + goto out; + + 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)) + goto out; + err = 0; + fput(file); + br->br_xino.xi_file = new_xino; + + h_sb = br->br_mnt->mnt_sb; + for (bi = 0; bi <= bend; bi++) { + if (unlikely(bi == bindex)) + continue; + br = au_sbr(sb, bi); + if (br->br_mnt->mnt_sb != h_sb) + continue; + + fput(br->br_xino.xi_file); + br->br_xino.xi_file = new_xino; + get_file(new_xino); + } + +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 = sb->s_root->d_inode; + 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); + if (!err + && br->br_xino.xi_file->f_dentry->d_inode->i_blocks + >= br->br_xino_upper) + br->br_xino_upper += AUFS_XINO_TRUNC_STEP; + + ii_read_unlock(dir); + if (unlikely(err)) + pr_warn("err b%d, (%d)\n", bindex, err); + atomic_dec(&br->br_xino_running); + atomic_dec(&br->br_count); + si_write_unlock(sb); + au_nwt_done(&au_sbi(sb)->si_nowait); + kfree(args); +} + +static void xino_try_trunc(struct super_block *sb, struct au_branch *br) +{ + struct xino_do_trunc_args *args; + int wkq_err; + + if (br->br_xino.xi_file->f_dentry->d_inode->i_blocks + < br->br_xino_upper) + 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_args; + } + + atomic_inc(&br->br_count); + 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); + atomic_dec(&br->br_count); + +out_args: + kfree(args); +out: + atomic_dec(&br->br_xino_running); +} + +/* ---------------------------------------------------------------------- */ + +static int au_xino_do_write(au_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(br->br_mnt->mnt_sb)) + 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 (i_size_read(xib->f_dentry->d_inode) >= 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, bend, 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; + au_writef_t xwrite; + + 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); + if (!iinfo) + return; + + bindex = iinfo->ii_bstart; + if (bindex < 0) + return; + + xwrite = au_sbi(sb)->si_xwrite; + try_trunc = !!au_opt_test(mnt_flags, TRUNC_XINO); + hi = iinfo->ii_hinode + bindex; + bend = iinfo->ii_bend; + for (; bindex <= bend; 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(br->br_mnt->mnt_sb)) + 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 = i_size_read(file->f_dentry->d_inode) / 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 (i_size_read(file->f_dentry->d_inode) < 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; + 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 */ + h_parent = dget_parent(file->f_dentry); + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + /* mnt_want_write() is unnecessary here */ + err = vfsub_unlink(h_dir, &file->f_path, /*force*/0); + mutex_unlock(&h_dir->i_mutex); + dput(h_parent); + if (unlikely(err)) { + if (!silent) + pr_err("unlink %s(%d)\n", fname, err); + goto out; + } + + err = -EINVAL; + d = file->f_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 @bend. + */ +static int is_sb_shared(struct super_block *sb, aufs_bindex_t btgt, + aufs_bindex_t bend) +{ + 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 <= bend; 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 bend, bindex; + struct au_branch *shared_br, *b; + struct file *file; + struct super_block *tgt_sb; + + shared_br = NULL; + bend = au_sbend(sb); + if (do_test) { + tgt_sb = br->br_mnt->mnt_sb; + for (bindex = 0; bindex <= bend; bindex++) { + b = au_sbr(sb, bindex); + if (tgt_sb == b->br_mnt->mnt_sb) { + 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; + au_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 = i_size_read(file->f_dentry->d_inode); + 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, bend; + void *page; + + err = -ENOMEM; + page = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!page)) + goto out; + + err = 0; + bend = au_sbend(sb); + for (bindex = 0; !err && bindex <= bend; 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 (i_size_read(file->f_dentry->d_inode) <= 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 + */ +static au_readf_t find_readf(struct file *h_file) +{ + const struct file_operations *fop = h_file->f_op; + + if (fop) { + if (fop->read) + return fop->read; + if (fop->aio_read) + return do_sync_read; + } + return ERR_PTR(-ENOSYS); +} + +static au_writef_t find_writef(struct file *h_file) +{ + const struct file_operations *fop = h_file->f_op; + + if (fop) { + if (fop->write) + return fop->write; + if (fop->aio_write) + return do_sync_write; + } + return ERR_PTR(-ENOSYS); +} + +/* 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; + 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 = find_readf(file); + sbinfo->si_xwrite = find_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 (i_size_read(file->f_dentry->d_inode) < 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: + 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, bend; + struct au_branch *br; + + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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, bend, bshared; + struct { + struct file *old, *new; + } *fpair, *p; + struct au_branch *br; + struct inode *inode; + au_writef_t writef; + + SiMustWriteLock(sb); + + err = -ENOMEM; + bend = au_sbend(sb); + fpair = kcalloc(bend + 1, sizeof(*fpair), GFP_NOFS); + if (unlikely(!fpair)) + goto out; + + inode = sb->s_root->d_inode; + ino = AUFS_ROOT_INO; + writef = au_sbi(sb)->si_xwrite; + for (bindex = 0, p = fpair; bindex <= bend; bindex++, p++) { + br = au_sbr(sb, bindex); + 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 */ + 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 <= bend; 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 <= bend; 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_dentry); + if (remount) { + skip = 0; + dname = &xino->file->f_dentry->d_name; + cur_xino = sbinfo->si_xib; + if (cur_xino) { + cur_parent = dget_parent(cur_xino->f_dentry); + cur_name = &cur_xino->f_dentry->d_name; + skip = (cur_parent == parent + && dname->len == cur_name->len + && !memcmp(dname->name, cur_name->name, + dname->len)); + dput(cur_parent); + } + if (skip) + goto out; + } + + au_opt_set(sbinfo->si_mntflags, XINO); + dir = parent->d_inode; + mutex_lock_nested(&dir->i_mutex, 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); + mutex_unlock(&dir->i_mutex); + if (!err) + goto out; /* success */ + + /* reset all */ + AuIOErr("failed creating xino(%d).\n", err); + +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 bend, bindex, bwr; + + br = NULL; + bend = au_sbend(sb); + bwr = -1; + for (bindex = 0; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + if (au_br_writable(br->br_perm) + && !au_test_fs_bad_xino(br->br_mnt->mnt_sb)) { + bwr = bindex; + break; + } + } + + if (bwr >= 0) { + file = ERR_PTR(-ENOMEM); + page = (void *)__get_free_page(GFP_NOFS); + if (unlikely(!page)) + goto out; + path.mnt = br->br_mnt; + 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_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 < 0)) + goto out; + + err = 0; +#define Deleted "\\040(deleted)" + seq->count -= sizeof(Deleted) - 1; + AuDebugOn(memcmp(seq->buf + seq->count, Deleted, + sizeof(Deleted) - 1)); +#undef Deleted + +out: + return err; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/procfs.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/procfs.c @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2010-2012 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 + */ + +/* + * 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; + + err = -EBUSY; + if (unlikely(file->private_data)) + goto out; + + sb = NULL; + /* don't use au_sbilist_lock() here */ + spin_lock(&au_sbilist.spin); + list_for_each_entry(sbinfo, &au_sbilist.head, si_list) + if (id == sysaufs_si_id(sbinfo)) { + kobject_get(&sbinfo->si_kobj); + sb = sbinfo->si_sb; + break; + } + spin_unlock(&au_sbilist.spin); + + 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-lts-raring-3.8.0.orig/ubuntu/aufs/dynop.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/dynop.c @@ -0,0 +1,379 @@ +/* + * Copyright (C) 2010-2012 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 + */ + +/* + * 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 au_splhead dynop[AuDyLast]; + +static struct au_dykey *dy_gfind_get(struct au_splhead *spl, const void *h_op) +{ + struct au_dykey *key, *tmp; + struct list_head *head; + + key = NULL; + head = &spl->head; + rcu_read_lock(); + list_for_each_entry_rcu(tmp, head, dk_list) + if (tmp->dk_op.dy_hop == h_op) { + key = tmp; + kref_get(&key->dk_kref); + break; + } + rcu_read_unlock(); + + 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 au_splhead *spl, struct au_dykey *key) +{ + struct au_dykey *tmp, *found; + struct list_head *head; + const void *h_op = key->dk_op.dy_hop; + + found = NULL; + head = &spl->head; + spin_lock(&spl->spin); + list_for_each_entry(tmp, head, dk_list) + if (tmp->dk_op.dy_hop == h_op) { + kref_get(&tmp->dk_kref); + found = tmp; + break; + } + if (!found) + list_add_rcu(&key->dk_list, head); + spin_unlock(&spl->spin); + + 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 au_splhead *spl; + + key = container_of(kref, struct au_dykey, dk_kref); + spl = dynop + key->dk_op.dy_type; + au_spl_del_rcu(&key->dk_list, spl); + 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); + /* these two will be changed according to an aufs mount option */ + DySetAop(direct_IO); + DySetAop(get_xip_mem); + DySetAop(migratepage); + DySetAop(launder_page); + DySetAop(is_partially_uptodate); + DySetAop(error_remove_page); + DySetAop(swap_activate); + DySetAop(swap_deactivate); + + DyDbgSize(cnt, *h_aop); + dyaop->da_get_xip_mem = h_aop->get_xip_mem; +} + +/* ---------------------------------------------------------------------- */ + +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 au_splhead *spl; + 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; + + spl = dynop + op->dy_type; + key = dy_gfind_get(spl, 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, br->br_mnt->mnt_sb); + old = dy_gadd(spl, 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 neccessary 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. + * + * To keep this behaviour, aufs has to set NULL to ->get_xip_mem too, and the + * performance of fadvise() and madvise() may be affected. + */ +static void dy_adx(struct au_dyaop *dyaop, int do_dx) +{ + if (!do_dx) { + dyaop->da_op.direct_IO = NULL; + dyaop->da_op.get_xip_mem = NULL; + } else { + dyaop->da_op.direct_IO = aufs_aop.direct_IO; + dyaop->da_op.get_xip_mem = aufs_aop.get_xip_mem; + if (!dyaop->da_get_xip_mem) + dyaop->da_op.get_xip_mem = NULL; + } +} + +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 bstart; + struct inode *h_inode; + + err = 0; + if (S_ISREG(inode->i_mode)) { + bstart = au_ibstart(inode); + h_inode = au_h_iptr(inode, bstart); + err = au_dy_iaop(inode, bstart, h_inode); + } + return err; +} + +void au_dy_arefresh(int do_dx) +{ + struct au_splhead *spl; + struct list_head *head; + struct au_dykey *key; + + spl = dynop + AuDy_AOP; + head = &spl->head; + spin_lock(&spl->spin); + list_for_each_entry(key, head, dk_list) + dy_adx((void *)key, do_dx); + spin_unlock(&spl->spin); +} + +/* ---------------------------------------------------------------------- */ + +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++) + au_spl_init(dynop + i); +} + +void au_dy_fin(void) +{ + int i; + + for (i = 0; i < AuDyLast; i++) + WARN_ON(!list_empty(&dynop[i].head)); +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/Makefile +++ linux-lts-raring-3.8.0/ubuntu/aufs/Makefile @@ -0,0 +1,42 @@ + +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}/../../ubuntu/include/linux/aufs_type.h +else +ccflags-y += -include ${srctree}/ubuntu/include/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 \ + 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_POLL) += poll.o +aufs-$(CONFIG_AUFS_RDU) += rdu.o +aufs-$(CONFIG_AUFS_SP_IATTR) += f_op_sp.o +aufs-$(CONFIG_AUFS_BR_HFSPLUS) += hfsplus.o +aufs-$(CONFIG_AUFS_DEBUG) += debug.o +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/inode.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/inode.c @@ -0,0 +1,478 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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); + if (do_version) + inode->i_version++; +} + +static int au_ii_refresh(struct inode *inode, int *update) +{ + int err, e; + umode_t type; + aufs_bindex_t bindex, new_bindex; + struct super_block *sb; + struct au_iinfo *iinfo; + struct au_hinode *p, *q, tmp; + + IiMustWriteLock(inode); + + *update = 0; + sb = inode->i_sb; + type = inode->i_mode & S_IFMT; + iinfo = au_ii(inode); + err = au_ii_realloc(iinfo, au_sbend(sb) + 1); + if (unlikely(err)) + goto out; + + AuDebugOn(iinfo->ii_bstart < 0); + p = iinfo->ii_hinode + iinfo->ii_bstart; + for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; + 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_bstart) + iinfo->ii_bstart = new_bindex; + if (iinfo->ii_bend < new_bindex) + iinfo->ii_bend = new_bindex; + /* swap two lower inode, and loop again */ + q = iinfo->ii_hinode + new_bindex; + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hi_inode) { + bindex--; + p--; + } + } + au_update_ibrange(inode, /*do_put_zero*/0); + e = au_dy_irefresh(inode); + if (unlikely(e && !err)) + err = e; + +out: + AuTraceErr(err); + return err; +} + +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, bend; + 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 = iinfo->ii_hinode + iinfo->ii_bstart; + mode = (inode->i_mode & S_IFMT); + isdir = S_ISDIR(mode); + flags = au_hi_flags(inode, isdir); + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) { + struct inode *h_i; + struct dentry *h_d; + + h_d = au_h_dptr(dentry, bindex); + if (!h_d || !h_d->d_inode) + continue; + + AuDebugOn(mode != (h_d->d_inode->i_mode & S_IFMT)); + if (iinfo->ii_bstart <= bindex && bindex <= iinfo->ii_bend) { + h_i = au_h_iptr(inode, bindex); + if (h_i) { + if (h_i == h_d->d_inode) + continue; + err = -EIO; + break; + } + } + if (bindex < iinfo->ii_bstart) + iinfo->ii_bstart = bindex; + if (iinfo->ii_bend < bindex) + iinfo->ii_bend = bindex; + au_set_h_iptr(inode, bindex, au_igrab(h_d->d_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, bstart, btail; + unsigned char isdir; + struct dentry *h_dentry; + struct inode *h_inode; + struct au_iinfo *iinfo; + + IiMustWriteLock(inode); + + err = 0; + isdir = 0; + bstart = au_dbstart(dentry); + h_inode = au_h_dptr(dentry, bstart)->d_inode; + mode = h_inode->i_mode; + switch (mode & S_IFMT) { + case S_IFREG: + btail = au_dbtail(dentry); + inode->i_op = &aufs_iop; + inode->i_fop = &aufs_file_fop; + err = au_dy_iaop(inode, bstart, h_inode); + if (unlikely(err)) + goto out; + break; + case S_IFDIR: + isdir = 1; + btail = au_dbtaildir(dentry); + inode->i_op = &aufs_dir_iop; + inode->i_fop = &aufs_dir_fop; + break; + case S_IFLNK: + btail = au_dbtail(dentry); + inode->i_op = &aufs_symlink_iop; + break; + case S_IFBLK: + case S_IFCHR: + case S_IFIFO: + case S_IFSOCK: + btail = au_dbtail(dentry); + inode->i_op = &aufs_iop; + au_init_special_fop(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_bstart = bstart; + iinfo->ii_bend = btail; + for (bindex = bstart; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) + au_set_h_iptr(inode, bindex, + au_igrab(h_dentry->d_inode), flags); + } + au_cpup_attr_all(inode, /*force*/1); + +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; + aufs_bindex_t bindex, bend; + struct inode *h_inode, *h_dinode; + + /* + * 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_dinode = au_h_dptr(dentry, au_dbstart(dentry))->d_inode; + bend = au_ibend(inode); + for (bindex = au_ibstart(inode); bindex <= bend; bindex++) { + h_inode = au_h_iptr(inode, bindex); + if (h_inode && h_inode == h_dinode) { + err = 0; + if (au_iigen_test(inode, au_digen(dentry))) + err = au_refresh_hinode(inode, dentry); + 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; + struct mutex *mtx; + + /* prevent hardlinked inode number from race condition */ + mtx = NULL; + if (d_type != DT_DIR) { + mtx = &au_sbr(sb, bindex)->br_xino.xi_nondir_mtx; + mutex_lock(mtx); + } + err = au_xino_read(sb, bindex, h_ino, ino); + if (unlikely(err)) + goto out; + + if (!*ino) { + err = -EIO; + *ino = au_xino_new_ino(sb); + if (unlikely(!*ino)) + goto out; + err = au_xino_write(sb, bindex, h_ino, *ino); + if (unlikely(err)) + goto out; + } + +out: + if (mtx) + mutex_unlock(mtx); + 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; + struct mutex *mtx; + ino_t h_ino, ino; + int err, lc_idx; + aufs_bindex_t bstart; + + sb = dentry->d_sb; + bstart = au_dbstart(dentry); + h_dentry = au_h_dptr(dentry, bstart); + h_inode = h_dentry->d_inode; + h_ino = h_inode->i_ino; + + /* + * stop 'race'-ing between hardlinks under different + * parents. + */ + mtx = NULL; + if (!S_ISDIR(h_inode->i_mode)) + mtx = &au_sbr(sb, bstart)->br_xino.xi_nondir_mtx; + +new_ino: + if (mtx) + mutex_lock(mtx); + err = au_xino_read(sb, bstart, h_ino, &ino); + inode = ERR_PTR(err); + if (unlikely(err)) + goto out; + + if (!ino) { + ino = au_xino_new_ino(sb); + if (unlikely(!ino)) { + inode = ERR_PTR(-EIO); + goto out; + } + } + + AuDbg("i%lu\n", (unsigned long)ino); + inode = au_iget_locked(sb, ino); + err = PTR_ERR(inode); + if (IS_ERR(inode)) + goto out; + + AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW)); + if (inode->i_state & I_NEW) { + lc_idx = AuLcNonDir_IIINFO; + if (S_ISLNK(h_inode->i_mode)) + lc_idx = AuLcSymlink_IIINFO; + else if (S_ISDIR(h_inode->i_mode)) + lc_idx = AuLcDir_IIINFO; + au_rw_class(&au_ii(inode)->ii_rwsem, au_lc_key + lc_idx); + + ii_write_lock_new_child(inode); + err = set_inode(inode, dentry); + if (!err) { + unlock_new_inode(inode); + goto out; /* 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, bstart, 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 (mtx) + mutex_unlock(mtx); + err = reval_inode(inode, dentry); + if (unlikely(err < 0)) { + mtx = NULL; + goto out_iput; + } + + if (!err) { + mtx = NULL; + goto out; /* success */ + } else if (mtx) + mutex_lock(mtx); + } + + if (unlikely(au_test_fs_unique_ino(h_dentry->d_inode))) + AuWarn1("Warning: Un-notified UDBA or repeatedly renamed dir," + " b%d, %s, %.*s, hi%lu, i%lu.\n", + bstart, au_sbtype(h_dentry->d_sb), AuDLNPair(dentry), + (unsigned long)h_ino, (unsigned long)ino); + ino = 0; + err = au_xino_write(sb, bstart, h_ino, /*ino*/0); + if (!err) { + iput(inode); + if (mtx) + mutex_unlock(mtx); + goto new_ino; + } + +out_iput: + iput(inode); + inode = ERR_PTR(err); +out: + if (mtx) + mutex_unlock(mtx); + return inode; +} + +/* ---------------------------------------------------------------------- */ + +int au_test_ro(struct super_block *sb, aufs_bindex_t bindex, + struct inode *inode) +{ + int err; + + err = au_br_rdonly(au_sbr(sb, bindex)); + + /* pseudo-link after flushed may happen out of bounds */ + if (!err + && inode + && au_ibstart(inode) <= bindex + && bindex <= au_ibend(inode)) { + /* + * permission check is unnecessary since vfsub routine + * will be called later + */ + struct inode *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-lts-raring-3.8.0.orig/ubuntu/aufs/dir.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/dir.c @@ -0,0 +1,633 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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; + /* 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; + /* 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, bend; + struct file *h_file; + struct dentry *h_dentry; + + sz = 0; + if (file) { + AuDebugOn(!file->f_dentry); + AuDebugOn(!file->f_dentry->d_inode); + AuDebugOn(!S_ISDIR(file->f_dentry->d_inode->i_mode)); + + bend = au_fbend_dir(file); + for (bindex = au_fbstart(file); + bindex <= bend && sz < KMALLOC_MAX_SIZE; + bindex++) { + h_file = au_hf_dir(file, bindex); + if (h_file + && h_file->f_dentry + && h_file->f_dentry->d_inode) + sz += i_size_read(h_file->f_dentry->d_inode); + } + } else { + AuDebugOn(!dentry); + AuDebugOn(!dentry->d_inode); + AuDebugOn(!S_ISDIR(dentry->d_inode->i_mode)); + + bend = au_dbtaildir(dentry); + for (bindex = au_dbstart(dentry); + bindex <= bend && sz < KMALLOC_MAX_SIZE; + bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && h_dentry->d_inode) + sz += i_size_read(h_dentry->d_inode); + } + } + 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; +} + +/* ---------------------------------------------------------------------- */ + +static int reopen_dir(struct file *file) +{ + int err; + unsigned int flags; + aufs_bindex_t bindex, btail, bstart; + struct dentry *dentry, *h_dentry; + struct file *h_file; + + /* open all lower dirs */ + dentry = file->f_dentry; + bstart = au_dbstart(dentry); + for (bindex = au_fbstart(file); bindex < bstart; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbstart(file, bstart); + + btail = au_dbtaildir(dentry); + for (bindex = au_fbend_dir(file); btail < bindex; bindex--) + au_set_h_fptr(file, bindex, NULL); + au_set_fbend_dir(file, btail); + + flags = vfsub_file_flags(file); + for (bindex = bstart; 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); + 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) +{ + int err; + aufs_bindex_t bindex, btail; + struct dentry *dentry, *h_dentry; + struct file *h_file; + + FiMustWriteLock(file); + + dentry = file->f_dentry; + err = au_alive_dir(dentry); + if (unlikely(err)) + goto out; + + file->f_version = dentry->d_inode->i_version; + bindex = au_dbstart(dentry); + au_set_fbstart(file, bindex); + btail = au_dbtaildir(dentry); + au_set_fbend_dir(file, btail); + for (; !err && bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + + h_file = au_h_open(dentry, bindex, flags, file); + 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_fbstart(file); bindex <= btail; bindex++) + au_set_h_fptr(file, bindex, NULL); + au_set_fbstart(file, -1); + au_set_fbend_dir(file, -1); + +out: + 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_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + fidir = au_fidir_alloc(sb); + if (fidir) { + err = au_do_open(file, do_open_dir, fidir); + 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; + aufs_bindex_t bindex, bend; + + finfo = au_fi(file); + fidir = finfo->fi_hdir; + if (fidir) { + vdir_cache = fidir->fd_vdir_cache; /* lock-free */ + if (vdir_cache) + au_vdir_free(vdir_cache); + + bindex = finfo->fi_btop; + if (bindex >= 0) { + /* + * calls fput() instead of filp_close(), + * since no dnotify or lock for the lower file. + */ + bend = fidir->fd_bbot; + for (; bindex <= bend; bindex++) + au_set_h_fptr(file, bindex, NULL); + } + 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, bend; + struct file *h_file; + + err = 0; + bend = au_fbend_dir(file); + for (bindex = au_fbstart(file); !err && bindex <= bend; 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 bend, bindex; + struct inode *inode; + struct super_block *sb; + + err = 0; + sb = dentry->d_sb; + inode = dentry->d_inode; + IMustLock(inode); + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); !err && bindex <= bend; 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 bend, bindex; + struct file *h_file; + struct super_block *sb; + struct inode *inode; + + err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1); + if (unlikely(err)) + goto out; + + sb = file->f_dentry->d_sb; + inode = file->f_dentry->d_inode; + bend = au_fbend_dir(file); + for (bindex = au_fbstart(file); !err && bindex <= bend; 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 super_block *sb; + struct mutex *mtx; + + err = 0; + dentry = file->f_dentry; + mtx = &dentry->d_inode->i_mutex; + mutex_lock(mtx); + 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(dentry->d_inode); + di_write_unlock(dentry); + if (file) + fi_write_unlock(file); + + si_read_unlock(sb); + mutex_unlock(mtx); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_readdir(struct file *file, void *dirent, filldir_t filldir) +{ + int err; + struct dentry *dentry; + struct inode *inode, *h_inode; + struct super_block *sb; + + dentry = file->f_dentry; + inode = dentry->d_inode; + IMustLock(inode); + + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_reval_and_lock_fdi(file, reopen_dir, /*wlock*/1); + 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_ibstart(inode)); + if (!au_test_nfsd()) { + err = au_vdir_fill_de(file, dirent, filldir); + 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, dirent, filldir); + 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 au_nhash *whlist; + unsigned int flags; + int err; + aufs_bindex_t bindex; +}; + +static int test_empty_cb(void *__arg, const char *__name, int namelen, + loff_t offset __maybe_unused, u64 ino, + unsigned int d_type) +{ + struct test_empty_arg *arg = __arg; + 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); + 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) + && !h_file->f_dentry->d_inode->i_nlink) + goto out_put; + + do { + arg->err = 0; + au_fclr_testempty(arg->flags, CALLED); + /* smp_mb(); */ + err = vfsub_readdir(h_file, test_empty_cb, arg); + 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 = h_dentry->d_inode; + /* todo: i_mode changes anytime? */ + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + err = au_test_h_perm_sio(h_inode, MAY_EXEC | MAY_READ); + mutex_unlock(&h_inode->i_mutex); + 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, bstart, btail; + struct au_nhash whlist; + 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; + bstart = au_dbstart(dentry); + if (au_opt_test(au_mntflags(dentry->d_sb), SHWH)) + au_fset_testempty(arg.flags, SHWH); + arg.bindex = bstart; + err = do_test_empty(dentry, &arg); + if (unlikely(err)) + goto out_whlist; + + au_fset_testempty(arg.flags, WHONLY); + btail = au_dbtaildir(dentry); + for (bindex = bstart + 1; !err && bindex <= btail; bindex++) { + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && h_dentry->d_inode) { + arg.bindex = bindex; + err = do_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; + 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_dbstart(dentry); !err && bindex <= btail; bindex++) { + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && h_dentry->d_inode) { + 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, + .readdir = aufs_readdir, + .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-lts-raring-3.8.0.orig/ubuntu/aufs/dynop.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/dynop.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2010-2012 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 + */ + +/* + * dynamically customizable operations (for regular files only) + */ + +#ifndef __AUFS_DYNOP_H__ +#define __AUFS_DYNOP_H__ + +#ifdef __KERNEL__ + +#include "inode.h" + +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 list_head dk_list; + 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 */ + int (*da_get_xip_mem)(struct address_space *, pgoff_t, int, + void **, unsigned long *); +}; + +/* ---------------------------------------------------------------------- */ + +/* 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-lts-raring-3.8.0.orig/ubuntu/aufs/finfo.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/finfo.c @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2005-2012 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 private data + */ + +#include "aufs.h" + +void au_hfput(struct au_hfile *hf, struct file *file) +{ + /* todo: direct access f_flags */ + if (vfsub_file_flags(file) & __FMODE_EXEC) + allow_write_access(hf->hf_file); + fput(hf->hf_file); + hf->hf_file = NULL; + atomic_dec(&hf->hf_br->br_count); + 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, file); + if (val) { + FiMustWriteLock(file); + hf->hf_file = val; + hf->hf_br = au_sbr(file->f_dentry->d_sb, bindex); + } +} + +void au_update_figen(struct file *file) +{ + atomic_set(&au_fi(file)->fi_generation, au_digen(file->f_dentry)); + /* smp_mb(); */ /* atomic_set */ +} + +/* ---------------------------------------------------------------------- */ + +struct au_fidir *au_fidir_alloc(struct super_block *sb) +{ + struct au_fidir *fidir; + int nbr; + + nbr = au_sbend(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; + fidir->fd_vdir_cache = NULL; + } + + return fidir; +} + +int au_fidir_realloc(struct au_finfo *finfo, int nbr) +{ + 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); + 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_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; + static struct lock_class_key aufs_fi; + + au_rw_init(&finfo->fi_rwsem); + au_rw_class(&finfo->fi_rwsem, &aufs_fi); +} + +int au_finfo_init(struct file *file, struct au_fidir *fidir) +{ + int err, lc_idx; + struct au_finfo *finfo; + struct dentry *dentry; + + err = -ENOMEM; + dentry = file->f_dentry; + finfo = au_cache_alloc_finfo(); + if (unlikely(!finfo)) + goto out; + + err = 0; + au_nfiles_inc(dentry->d_sb); + lc_idx = AuLcNonDir_FIINFO; + if (fidir) + lc_idx = AuLcDir_FIINFO; + au_rw_class(&finfo->fi_rwsem, au_lc_key + lc_idx); + 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-lts-raring-3.8.0.orig/ubuntu/aufs/module.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/module.c @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * module global variables and operations + */ + +#include +#include +#include "aufs.h" + +void *au_kzrealloc(void *p, unsigned int nused, unsigned int new_sz, gfp_t gfp) +{ + if (new_sz <= nused) + return p; + + p = krealloc(p, new_sz, gfp); + if (p) + memset(p + nused, 0, new_sz - nused); + return p; +} + +/* ---------------------------------------------------------------------- */ + +/* + * aufs caches + */ +struct kmem_cache *au_cachep[AuCache_Last]; +static int __init au_cache_init(void) +{ + au_cachep[AuCache_DINFO] = AuCacheCtor(au_dinfo, au_di_init_once); + if (au_cachep[AuCache_DINFO]) + /* SLAB_DESTROY_BY_RCU */ + au_cachep[AuCache_ICNTNR] = AuCacheCtor(au_icntnr, + au_icntnr_init_once); + if (au_cachep[AuCache_ICNTNR]) + au_cachep[AuCache_FINFO] = AuCacheCtor(au_finfo, + au_fi_init_once); + if (au_cachep[AuCache_FINFO]) + au_cachep[AuCache_VDIR] = AuCache(au_vdir); + if (au_cachep[AuCache_VDIR]) + au_cachep[AuCache_DEHSTR] = AuCache(au_vdir_dehstr); + if (au_cachep[AuCache_DEHSTR]) + return 0; + + return -ENOMEM; +} + +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++) + if (au_cachep[i]) { + kmem_cache_destroy(au_cachep[i]); + au_cachep[i] = NULL; + } +} + +/* ---------------------------------------------------------------------- */ + +int au_dir_roflags; + +#ifdef CONFIG_AUFS_SBILIST +/* + * iterate_supers_type() doesn't protect us from + * remounting (branch management) + */ +struct au_splhead au_sbilist; +#endif + +struct lock_class_key au_lc_key[AuLcKey_Last]; + +/* + * 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); + +/* 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); + +/* ---------------------------------------------------------------------- */ + +static char au_esc_chars[0x20 + 3]; /* 0x01-0x20, backslash, del, and NULL */ + +int au_seq_path(struct seq_file *seq, struct path *path) +{ + return seq_path(seq, path, au_esc_chars); +} + +/* ---------------------------------------------------------------------- */ + +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); + + 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; + 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-lts-raring-3.8.0.orig/ubuntu/aufs/file.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/file.c @@ -0,0 +1,683 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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) +{ + 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, exec_flag; + + /* 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) + goto out; + h_inode = h_dentry->d_inode; + if (au_test_nfsd() && !h_inode) + goto out; + spin_lock(&h_dentry->d_lock); + err = (!d_unhashed(dentry) && d_unlinked(h_dentry)) + || !h_inode + /* || !dentry->d_inode->i_nlink */ + ; + spin_unlock(&h_dentry->d_lock); + if (unlikely(err)) + goto out; + + sb = dentry->d_sb; + br = au_sbr(sb, bindex); + h_file = ERR_PTR(-EACCES); + exec_flag = flags & __FMODE_EXEC; + if (exec_flag && (br->br_mnt->mnt_flags & MNT_NOEXEC)) + goto out; + + /* drop flags for writing */ + if (au_test_ro(sb, bindex, dentry->d_inode)) + flags = au_file_roflags(flags); + flags &= ~O_CREAT; + atomic_inc(&br->br_count); + h_path.dentry = h_dentry; + h_path.mnt = br->br_mnt; + if (!au_special_file(h_inode->i_mode)) + h_file = vfsub_dentry_open(&h_path, flags); + else { + /* this block depends upon the configuration */ + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + si_read_unlock(sb); + h_file = vfsub_dentry_open(&h_path, flags); + si_noflush_read_lock(sb); + fi_write_lock(file); + di_read_lock_child(dentry, AuLock_IR); + } + if (IS_ERR(h_file)) + goto out_br; + + if (exec_flag) { + 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: + atomic_dec(&br->br_count); +out: + return h_file; +} + +int au_do_open(struct file *file, int (*open)(struct file *file, int flags), + struct au_fidir *fidir) +{ + int err; + struct dentry *dentry; + + err = au_finfo_init(file, fidir); + if (unlikely(err)) + goto out; + + dentry = file->f_dentry; + di_read_lock_child(dentry, AuLock_IR); + err = open(file, vfsub_file_flags(file)); + di_read_unlock(dentry, AuLock_IR); + + fi_write_unlock(file); + if (unlikely(err)) { + au_fi(file)->fi_hdir = NULL; + au_finfo_fin(file); + } + +out: + return err; +} + +int au_reopen_nondir(struct file *file) +{ + int err; + aufs_bindex_t bstart; + struct dentry *dentry; + struct file *h_file, *h_file_tmp; + + dentry = file->f_dentry; + AuDebugOn(au_special_file(dentry->d_inode->i_mode)); + bstart = au_dbstart(dentry); + h_file_tmp = NULL; + if (au_fbstart(file) == bstart) { + 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, bstart, NULL); + } + AuDebugOn(au_fi(file)->fi_hdir); + AuDebugOn(au_fbstart(file) < bstart); + + h_file = au_h_open(dentry, bstart, vfsub_file_flags(file) & ~O_TRUNC, + file); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out; /* todo: close all? */ + + err = 0; + au_set_fbstart(file, bstart); + au_set_h_fptr(file, bstart, 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 bstart; + struct au_dinfo *dinfo; + struct dentry *h_dentry; + struct au_hdentry *hdp; + + dinfo = au_di(file->f_dentry); + AuRwMustWriteLock(&dinfo->di_rwsem); + + bstart = dinfo->di_bstart; + dinfo->di_bstart = btgt; + hdp = dinfo->di_hdentry; + h_dentry = hdp[0 + btgt].hd_dentry; + hdp[0 + btgt].hd_dentry = hi_wh; + err = au_reopen_nondir(file); + hdp[0 + btgt].hd_dentry = h_dentry; + dinfo->di_bstart = bstart; + + return err; +} + +static int au_ready_to_write_wh(struct file *file, loff_t len, + aufs_bindex_t bcpup) +{ + int err; + struct inode *inode, *h_inode; + struct dentry *dentry, *h_dentry, *hi_wh; + + dentry = file->f_dentry; + au_update_dbstart(dentry); + inode = dentry->d_inode; + h_inode = NULL; + if (au_dbstart(dentry) <= bcpup && au_dbend(dentry) >= bcpup) { + h_dentry = au_h_dptr(dentry, bcpup); + if (h_dentry) + h_inode = h_dentry->d_inode; + } + hi_wh = au_hi_wh(inode, bcpup); + if (!hi_wh && !h_inode) + err = au_sio_cpup_wh(dentry, bcpup, len, file); + else + /* already copied-up after unlink */ + err = au_reopen_wh(file, bcpup, hi_wh); + + if (!err + && inode->i_nlink > 1 + && au_opt_test(au_mntflags(dentry->d_sb), PLINK)) + au_plink_append(inode, bcpup, au_h_dptr(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 bstart, bcpup, dbstart; + struct dentry *dentry, *parent, *h_dentry; + struct inode *h_inode, *inode; + struct super_block *sb; + struct file *h_file; + + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + AuDebugOn(au_special_file(inode->i_mode)); + bstart = au_fbstart(file); + err = au_test_ro(sb, bstart, inode); + if (!err && (au_hf_top(file)->f_mode & FMODE_WRITE)) { + err = au_pin(pin, dentry, bstart, AuOpt_UDBA_NONE, /*flags*/0); + goto out; + } + + /* need to cpup or reopen */ + parent = dget_parent(dentry); + di_write_lock_parent(parent); + err = AuWbrCopyup(au_sbi(sb), dentry); + bcpup = err; + if (unlikely(err < 0)) + goto out_dgrade; + err = 0; + + if (!d_unhashed(dentry) && !au_h_dptr(parent, bcpup)) { + err = au_cpup_dirs(dentry, bcpup); + if (unlikely(err)) + goto out_dgrade; + } + + err = au_pin(pin, dentry, bcpup, AuOpt_UDBA_NONE, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (unlikely(err)) + goto out_dgrade; + + h_dentry = au_hf_top(file)->f_dentry; + h_inode = h_dentry->d_inode; + dbstart = au_dbstart(dentry); + if (dbstart <= bcpup) { + h_dentry = au_h_dptr(dentry, bcpup); + AuDebugOn(!h_dentry); + h_inode = h_dentry->d_inode; + AuDebugOn(!h_inode); + bstart = bcpup; + } + + if (dbstart <= bcpup /* just reopen */ + || !d_unhashed(dentry) /* copyup and reopen */ + ) { + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + h_file = au_h_open_pre(dentry, bstart); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + h_file = NULL; + } else { + di_downgrade_lock(parent, AuLock_IR); + if (dbstart > bcpup) + err = au_sio_cpup_simple(dentry, bcpup, len, + AuCpup_DTIME); + if (!err) + err = au_reopen_nondir(file); + } + mutex_unlock(&h_inode->i_mutex); + au_h_open_post(dentry, bstart, h_file); + } else { /* copyup as wh and reopen */ + /* + * since writable hfsplus branch is not supported, + * h_open_pre/post() are unnecessary. + */ + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + err = au_ready_to_write_wh(file, len, bcpup); + di_downgrade_lock(parent, AuLock_IR); + mutex_unlock(&h_inode->i_mutex); + } + + 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 dentry *dentry; + struct super_block *sb; + struct inode *inode; + + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + 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; + aufs_bindex_t bstart; + struct au_pin pin; + struct au_finfo *finfo; + struct dentry *dentry, *parent, *hi_wh; + struct inode *inode; + struct super_block *sb; + + FiMustWriteLock(file); + + err = 0; + finfo = au_fi(file); + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + bstart = au_ibstart(inode); + if (bstart == finfo->fi_btop || IS_ROOT(dentry)) + goto out; + + parent = dget_parent(dentry); + if (au_test_ro(sb, bstart, inode)) { + di_read_lock_parent(parent, !AuLock_IR); + err = AuWbrCopyup(au_sbi(sb), dentry); + bstart = 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, bstart); + if (!S_ISDIR(inode->i_mode) + && au_opt_test(au_mntflags(sb), PLINK) + && au_plink_test(inode) + && !d_unhashed(dentry)) { + err = au_test_and_cpup_dirs(dentry, bstart); + if (unlikely(err)) + goto out_unlock; + + /* always superio. */ + err = au_pin(&pin, dentry, bstart, AuOpt_UDBA_NONE, + AuPin_DI_LOCKED | AuPin_MNT_WRITE); + if (!err) + err = au_sio_cpup_simple(dentry, bstart, -1, + AuCpup_DTIME); + au_unpin(&pin); + } else if (hi_wh) { + /* already copied-up after unlink */ + err = au_reopen_wh(file, bstart, 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, bend, 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_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; + bend = fidir->fd_bbot; + for (bindex = finfo->fi_btop; bindex <= bend; 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_dentry)) { + bend = au_sbend(sb); + for (finfo->fi_btop = 0; finfo->fi_btop <= bend; + finfo->fi_btop++, p++) + if (p->hf_file) { + if (p->hf_file->f_dentry + && p->hf_file->f_dentry->d_inode) + break; + else + au_hfput(p, file); + } + } else { + bend = au_br_index(sb, brid); + for (finfo->fi_btop = 0; finfo->fi_btop < bend; + finfo->fi_btop++, p++) + if (p->hf_file) + au_hfput(p, file); + bend = au_sbend(sb); + } + + p = fidir->fd_hfile + bend; + for (fidir->fd_bbot = bend; fidir->fd_bbot >= finfo->fi_btop; + fidir->fd_bbot--, p--) + if (p->hf_file) { + if (p->hf_file->f_dentry + && p->hf_file->f_dentry->d_inode) + break; + else + au_hfput(p, file); + } + 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; + aufs_bindex_t bend, bindex; + struct dentry *dentry; + struct au_finfo *finfo; + struct au_hfile *hfile; + + dentry = file->f_dentry; + finfo = au_fi(file); + if (!finfo->fi_hdir) { + hfile = &finfo->fi_htop; + AuDebugOn(!hfile->hf_file); + bindex = au_br_index(dentry->d_sb, hfile->hf_br->br_id); + AuDebugOn(bindex < 0); + if (bindex != finfo->fi_btop) + au_set_fbstart(file, bindex); + } else { + err = au_fidir_realloc(finfo, au_sbend(dentry->d_sb) + 1); + 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 (!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) { + bend = au_fbend_dir(file); + for (bindex = au_fbstart(file); bindex <= bend; 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) +{ + int err; + unsigned int sigen, figen; + aufs_bindex_t bstart; + unsigned char pseudo_link; + struct dentry *dentry; + struct inode *inode; + + err = 0; + dentry = file->f_dentry; + inode = dentry->d_inode; + AuDebugOn(au_special_file(inode->i_mode)); + sigen = au_sigen(dentry->d_sb); + fi_write_lock(file); + figen = au_figen(file); + di_write_lock_child(dentry); + bstart = au_dbstart(dentry); + pseudo_link = (bstart != au_ibstart(inode)); + if (sigen == figen && !pseudo_link && au_fbstart(file) == bstart) { + 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(int rw, struct kiocb *iocb, + const struct iovec *iov, loff_t offset, + unsigned long nr_segs) +{ BUG(); return 0; } + +/* + * it will never be called, but madvise and fadvise behaves differently + * when get_xip_mem is defined + */ +static int aufs_get_xip_mem(struct address_space *mapping, pgoff_t pgoff, + int create, void **kmem, unsigned long *pfn) +{ 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 long offset) +{ AuUnsupport(); } +static int aufs_releasepage(struct page *page, gfp_t gfp) +{ AuUnsupport(); return 0; } +static int aufs_migratepage(struct address_space *mapping, struct page *newpage, + struct page *page, enum migrate_mode mode) +{ AuUnsupport(); return 0; } +static int aufs_launder_page(struct page *page) +{ AuUnsupport(); return 0; } +static int aufs_is_partially_uptodate(struct page *page, + read_descriptor_t *desc, + unsigned long from) +{ AuUnsupport(); return 0; } +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, + .get_xip_mem = aufs_get_xip_mem, +#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, + .migratepage = aufs_migratepage, + .launder_page = aufs_launder_page, + .is_partially_uptodate = aufs_is_partially_uptodate, + .error_remove_page = aufs_error_remove_page, + .swap_activate = aufs_swap_activate, + .swap_deactivate = aufs_swap_deactivate +#endif /* CONFIG_AUFS_DEBUG */ +}; --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/sysaufs.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/sysaufs.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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-lts-raring-3.8.0.orig/ubuntu/aufs/hfsplus.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/hfsplus.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2010-2012 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 + */ + +/* + * 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) +{ + struct file *h_file; + struct dentry *h_dentry; + + h_dentry = au_h_dptr(dentry, bindex); + AuDebugOn(!h_dentry); + AuDebugOn(!h_dentry->d_inode); + IMustLock(h_dentry->d_inode); + + h_file = NULL; + if (au_test_hfsplus(h_dentry->d_sb) + && S_ISREG(h_dentry->d_inode->i_mode)) + h_file = au_h_open(dentry, bindex, + O_RDONLY | O_NOATIME | O_LARGEFILE, + /*file*/NULL); + 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-lts-raring-3.8.0.orig/ubuntu/aufs/f_op_sp.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/f_op_sp.c @@ -0,0 +1,295 @@ +/* + * Copyright (C) 2005-2012 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 operations for special files. + * while they exist in aufs virtually, + * their file I/O is handled out of aufs. + */ + +#include "aufs.h" + +static ssize_t aufs_aio_read_sp(struct kiocb *kio, const struct iovec *iov, + unsigned long nv, loff_t pos) +{ + ssize_t err; + aufs_bindex_t bstart; + unsigned char wbr; + struct file *file, *h_file; + struct super_block *sb; + + file = kio->ki_filp; + sb = file->f_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + fi_read_lock(file); + bstart = au_fbstart(file); + h_file = au_hf_top(file); + fi_read_unlock(file); + wbr = !!au_br_writable(au_sbr(sb, bstart)->br_perm); + si_read_unlock(sb); + + /* do not change the file in kio */ + AuDebugOn(!h_file->f_op || !h_file->f_op->aio_read); + err = h_file->f_op->aio_read(kio, iov, nv, pos); + if (err > 0 && wbr) + file_accessed(h_file); + + return err; +} + +static ssize_t aufs_aio_write_sp(struct kiocb *kio, const struct iovec *iov, + unsigned long nv, loff_t pos) +{ + ssize_t err; + aufs_bindex_t bstart; + unsigned char wbr; + struct super_block *sb; + struct file *file, *h_file; + + file = kio->ki_filp; + sb = file->f_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + fi_read_lock(file); + bstart = au_fbstart(file); + h_file = au_hf_top(file); + fi_read_unlock(file); + wbr = !!au_br_writable(au_sbr(sb, bstart)->br_perm); + si_read_unlock(sb); + + /* do not change the file in kio */ + AuDebugOn(!h_file->f_op || !h_file->f_op->aio_write); + err = h_file->f_op->aio_write(kio, iov, nv, pos); + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int aufs_release_sp(struct inode *inode, struct file *file) +{ + int err; + struct file *h_file; + + fi_read_lock(file); + h_file = au_hf_top(file); + fi_read_unlock(file); + /* close this fifo in aufs */ + err = h_file->f_op->release(inode, file); /* ignore */ + aufs_release_nondir(inode, file); /* ignore */ + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* currently, support only FIFO */ +enum { + AuSp_FIFO, AuSp_FIFO_R, AuSp_FIFO_W, AuSp_FIFO_RW, + /* AuSp_SOCK, AuSp_CHR, AuSp_BLK, */ + AuSp_Last +}; +static int aufs_open_sp(struct inode *inode, struct file *file); +static struct au_sp_fop { + int done; + struct file_operations fop; /* not 'const' */ + spinlock_t spin; +} au_sp_fop[AuSp_Last] = { + [AuSp_FIFO] = { + .fop = { + .owner = THIS_MODULE, + .open = aufs_open_sp + } + } +}; + +static void au_init_fop_sp(struct file *file) +{ + struct au_sp_fop *p; + int i; + struct file *h_file; + + p = au_sp_fop; + if (unlikely(!p->done)) { + /* initialize first time only */ + static DEFINE_SPINLOCK(spin); + + spin_lock(&spin); + if (!p->done) { + BUILD_BUG_ON(sizeof(au_sp_fop)/sizeof(*au_sp_fop) + != AuSp_Last); + for (i = 0; i < AuSp_Last; i++) + spin_lock_init(&p[i].spin); + p->done = 1; + } + spin_unlock(&spin); + } + + switch (file->f_mode & (FMODE_READ | FMODE_WRITE)) { + case FMODE_READ: + i = AuSp_FIFO_R; + break; + case FMODE_WRITE: + i = AuSp_FIFO_W; + break; + case FMODE_READ | FMODE_WRITE: + i = AuSp_FIFO_RW; + break; + default: + BUG(); + } + + p += i; + if (unlikely(!p->done)) { + /* initialize first time only */ + h_file = au_hf_top(file); + spin_lock(&p->spin); + if (!p->done) { + p->fop = *h_file->f_op; + p->fop.owner = THIS_MODULE; + if (p->fop.aio_read) + p->fop.aio_read = aufs_aio_read_sp; + if (p->fop.aio_write) + p->fop.aio_write = aufs_aio_write_sp; + p->fop.release = aufs_release_sp; + p->done = 1; + } + spin_unlock(&p->spin); + } + file->f_op = &p->fop; +} + +static int au_cpup_sp(struct dentry *dentry) +{ + int err; + aufs_bindex_t bcpup; + struct au_pin pin; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = 0 + }; + + AuDbg("%.*s\n", AuDLNPair(dentry)); + + di_read_unlock(dentry, AuLock_IR); + di_write_lock_child(dentry); + err = au_wr_dir(dentry, /*src_dentry*/NULL, &wr_dir_args); + if (unlikely(err < 0)) + goto out; + bcpup = err; + err = 0; + if (bcpup == au_dbstart(dentry)) + goto out; /* success */ + + err = au_pin(&pin, dentry, bcpup, au_opt_udba(dentry->d_sb), + AuPin_MNT_WRITE); + if (!err) { + err = au_sio_cpup_simple(dentry, bcpup, -1, AuCpup_DTIME); + au_unpin(&pin); + } + +out: + di_downgrade_lock(dentry, AuLock_IR); + return err; +} + +static int au_do_open_sp(struct file *file, int flags) +{ + int err; + struct dentry *dentry; + struct super_block *sb; + struct file *h_file; + struct inode *h_inode; + + dentry = file->f_dentry; + AuDbg("%.*s\n", AuDLNPair(dentry)); + + /* + * try copying-up. + * operate on the ro branch is not an error. + */ + au_cpup_sp(dentry); /* ignore */ + + /* prepare h_file */ + err = au_do_open_nondir(file, vfsub_file_flags(file)); + if (unlikely(err)) + goto out; + + sb = dentry->d_sb; + h_file = au_hf_top(file); + h_inode = h_file->f_dentry->d_inode; + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + si_read_unlock(sb); + /* open this fifo in aufs */ + err = h_inode->i_fop->open(file->f_dentry->d_inode, file); + si_noflush_read_lock(sb); + fi_write_lock(file); + di_read_lock_child(dentry, AuLock_IR); + if (!err) + au_init_fop_sp(file); + +out: + return err; +} + +static int aufs_open_sp(struct inode *inode, struct file *file) +{ + int err; + struct super_block *sb; + + sb = file->f_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_do_open(file, au_do_open_sp, /*fidir*/NULL); + si_read_unlock(sb); + return err; +} + +/* ---------------------------------------------------------------------- */ + +void au_init_special_fop(struct inode *inode, umode_t mode, dev_t rdev) +{ + init_special_inode(inode, mode, rdev); + + switch (mode & S_IFMT) { + case S_IFIFO: + inode->i_fop = &au_sp_fop[AuSp_FIFO].fop; + /*FALLTHROUGH*/ + case S_IFCHR: + case S_IFBLK: + case S_IFSOCK: + break; + default: + AuDebugOn(1); + } +} + +int au_special_file(umode_t mode) +{ + int ret; + + ret = 0; + switch (mode & S_IFMT) { + case S_IFIFO: +#if 0 + case S_IFCHR: + case S_IFBLK: + case S_IFSOCK: +#endif + ret = 1; + } + + return ret; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/dentry.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/dentry.h @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * lookup and dentry operations + */ + +#ifndef __AUFS_DENTRY_H__ +#define __AUFS_DENTRY_H__ + +#ifdef __KERNEL__ + +#include +#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_bstart, di_bend, di_bwh, di_bdiropq; + struct au_hdentry *di_hdentry; +} ____cacheline_aligned_in_smp; + +/* ---------------------------------------------------------------------- */ + +/* dentry.c */ +extern const struct dentry_operations aufs_dop; +struct au_branch; +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent, + struct au_branch *br); +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 bstart, mode_t type, + unsigned int flags); +int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex); +int au_refresh_dentry(struct dentry *dentry, struct dentry *parent); +int au_reval_dpath(struct dentry *dentry, unsigned int sigen); + +/* 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); + +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_dbstart(struct dentry *dentry); +void au_update_dbend(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 void au_hdput(struct au_hdentry *hd) +{ + if (hd) + dput(hd->hd_dentry); +} + +static inline aufs_bindex_t au_dbstart(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bstart; +} + +static inline aufs_bindex_t au_dbend(struct dentry *dentry) +{ + DiMustAnyLock(dentry); + return au_di(dentry)->di_bend; +} + +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_dbstart(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bstart = bindex; +} + +static inline void au_set_dbend(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + au_di(dentry)->di_bend = bindex; +} + +static inline void au_set_dbwh(struct dentry *dentry, aufs_bindex_t bindex) +{ + DiMustWriteLock(dentry); + /* dbwh can be outside of bstart - bend 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-lts-raring-3.8.0.orig/ubuntu/aufs/dbgaufs.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/dbgaufs.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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-lts-raring-3.8.0.orig/ubuntu/aufs/loop.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/loop.c @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * support for loopback block device as a branch + */ + +#include +#include "aufs.h" + +/* + * 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 loop_device *l; + + h_sb = h_adding->d_sb; + if (MAJOR(h_sb->s_dev) != LOOP_MAJOR) + return 0; + + l = h_sb->s_bdev->bd_disk->private_data; + h_adding = l->lo_backing_file->f_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; + + ret = 0; + if (tsk->flags & PF_KTHREAD) { + const char c = tsk->comm[4]; + ret = ('0' <= c && c <= '9' + && !strncmp(tsk->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); + 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; + + AuDebugOn(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) +{ + kfree(au_warn_loopback_array); +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/f_op.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/f_op.c @@ -0,0 +1,723 @@ +/* + * Copyright (C) 2005-2012 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 and vm operations + */ + +#include +#include +#include +#include "aufs.h" + +int au_do_open_nondir(struct file *file, int flags) +{ + int err; + aufs_bindex_t bindex; + struct file *h_file; + struct dentry *dentry; + struct au_finfo *finfo; + + FiMustWriteLock(file); + + dentry = file->f_dentry; + err = au_d_alive(dentry); + if (unlikely(err)) + goto out; + + finfo = au_fi(file); + memset(&finfo->fi_htop, 0, sizeof(finfo->fi_htop)); + atomic_set(&finfo->fi_mmapped, 0); + bindex = au_dbstart(dentry); + h_file = au_h_open(dentry, bindex, flags, file); + if (IS_ERR(h_file)) + err = PTR_ERR(h_file); + else { + au_set_fbstart(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; + + AuDbg("%.*s, f_flags 0x%x, f_mode 0x%x\n", + AuDLNPair(file->f_dentry), vfsub_file_flags(file), + file->f_mode); + + sb = file->f_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); + err = au_do_open(file, au_do_open_nondir, /*fidir*/NULL); + 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); + 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. + */ + +static ssize_t aufs_read(struct file *file, char __user *buf, size_t count, + loff_t *ppos) +{ + ssize_t err; + struct dentry *dentry; + struct file *h_file; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + h_file = au_hf_top(file); + get_file(h_file); + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + + /* 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; */ + /* update without lock, I don't think it a problem */ + fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); + fput(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) { + mutex_lock(&inode->i_mutex); + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (!err) + break; + mutex_unlock(&inode->i_mutex); + 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_pin pin; + struct dentry *dentry; + struct super_block *sb; + struct inode *inode; + struct file *h_file; + char __user *buf = (char __user *)ubuf; + + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + au_mtx_and_read_lock(inode); + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) { + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + goto out; + } + + h_file = au_hf_top(file); + get_file(h_file); + au_unpin(&pin); + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + + err = vfsub_write_u(h_file, buf, count, ppos); + ii_write_lock_child(inode); + au_cpup_attr_timesizes(inode); + inode->i_mode = h_file->f_dentry->d_inode->i_mode; + ii_write_unlock(inode); + fput(h_file); + +out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + return err; +} + +static ssize_t au_do_aio(struct file *h_file, int rw, struct kiocb *kio, + const struct iovec *iov, unsigned long nv, loff_t pos) +{ + ssize_t err; + struct file *file; + ssize_t (*func)(struct kiocb *, const struct iovec *, unsigned long, + loff_t); + + err = security_file_permission(h_file, rw); + if (unlikely(err)) + goto out; + + err = -ENOSYS; + func = NULL; + if (rw == MAY_READ) + func = h_file->f_op->aio_read; + else if (rw == MAY_WRITE) + func = h_file->f_op->aio_write; + if (func) { + file = kio->ki_filp; + kio->ki_filp = h_file; + lockdep_off(); + err = func(kio, iov, nv, pos); + lockdep_on(); + kio->ki_filp = file; + } else + /* currently there is no such fs */ + WARN_ON_ONCE(1); + +out: + return err; +} + +static ssize_t aufs_aio_read(struct kiocb *kio, const struct iovec *iov, + unsigned long nv, loff_t pos) +{ + ssize_t err; + struct file *file, *h_file; + struct dentry *dentry; + struct super_block *sb; + + file = kio->ki_filp; + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + h_file = au_hf_top(file); + get_file(h_file); + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + + err = au_do_aio(h_file, MAY_READ, kio, iov, nv, pos); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + /* update without lock, I don't think it a problem */ + fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); + fput(h_file); + +out: + si_read_unlock(sb); + return err; +} + +static ssize_t aufs_aio_write(struct kiocb *kio, const struct iovec *iov, + unsigned long nv, loff_t pos) +{ + ssize_t err; + struct au_pin pin; + struct dentry *dentry; + struct inode *inode; + struct file *file, *h_file; + struct super_block *sb; + + file = kio->ki_filp; + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + au_mtx_and_read_lock(inode); + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) { + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + goto out; + } + + h_file = au_hf_top(file); + get_file(h_file); + au_unpin(&pin); + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + + err = au_do_aio(h_file, MAY_WRITE, kio, iov, nv, pos); + ii_write_lock_child(inode); + au_cpup_attr_timesizes(inode); + inode->i_mode = h_file->f_dentry->d_inode->i_mode; + ii_write_unlock(inode); + fput(h_file); + +out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + 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 dentry *dentry; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + err = -EINVAL; + h_file = au_hf_top(file); + get_file(h_file); + if (au_test_loopback_kthread()) { + au_warn_loopback(h_file->f_dentry->d_sb); + if (file->f_mapping != h_file->f_mapping) { + file->f_mapping = h_file->f_mapping; + smp_mb(); /* unnecessary? */ + } + } + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + + err = vfsub_splice_to(h_file, ppos, pipe, len, flags); + /* todo: necessasry? */ + /* file->f_ra = h_file->f_ra; */ + /* update without lock, I don't think it a problem */ + fsstack_copy_attr_atime(dentry->d_inode, h_file->f_dentry->d_inode); + fput(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_pin pin; + struct dentry *dentry; + struct inode *inode; + struct file *h_file; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + inode = dentry->d_inode; + au_mtx_and_read_lock(inode); + + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) { + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + goto out; + } + + h_file = au_hf_top(file); + get_file(h_file); + au_unpin(&pin); + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); + + err = vfsub_splice_from(pipe, h_file, ppos, len, flags); + ii_write_lock_child(inode); + au_cpup_attr_timesizes(inode); + inode->i_mode = h_file->f_dentry->d_inode->i_mode; + ii_write_unlock(inode); + fput(h_file); + +out: + si_read_unlock(sb); + mutex_unlock(&inode->i_mutex); + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * 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_readdir() 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. + */ + +/* 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); +} + +static int aufs_mmap(struct file *file, struct vm_area_struct *vma) +{ + int err; + aufs_bindex_t bstart; + const unsigned char wlock + = (file->f_mode & FMODE_WRITE) && (vma->vm_flags & VM_SHARED); + struct dentry *dentry; + struct super_block *sb; + struct file *h_file; + struct au_branch *br; + struct au_pin pin; + + AuDbgVmRegion(file, vma); + + dentry = file->f_dentry; + sb = dentry->d_sb; + lockdep_off(); + si_read_lock(sb, AuLock_NOPLMW); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + if (wlock) { + err = au_ready_to_write(file, -1, &pin); + di_write_unlock(dentry); + if (unlikely(err)) { + fi_write_unlock(file); + goto out; + } + au_unpin(&pin); + } else + di_write_unlock(dentry); + + bstart = au_fbstart(file); + br = au_sbr(sb, bstart); + h_file = au_hf_top(file); + get_file(h_file); + au_set_mmapped(file); + fi_write_unlock(file); + lockdep_on(); + + au_vm_file_reset(vma, h_file); + err = security_mmap_file(h_file, au_prot_conv(vma->vm_flags), + au_flag_conv(vma->vm_flags)); + if (!err) + err = h_file->f_op->mmap(h_file, vma); + if (unlikely(err)) + goto out_reset; + + au_vm_prfile_set(vma, file); + /* update without lock, I don't think it a problem */ + fsstack_copy_attr_atime(file->f_dentry->d_inode, + h_file->f_dentry->d_inode); + goto out_fput; /* success */ + +out_reset: + au_unset_mmapped(file); + au_vm_file_reset(vma, file); +out_fput: + fput(h_file); + lockdep_off(); +out: + 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_pin pin; + struct dentry *dentry; + struct inode *inode; + struct file *h_file; + struct super_block *sb; + + dentry = file->f_dentry; + inode = dentry->d_inode; + sb = dentry->d_sb; + mutex_lock(&inode->i_mutex); + err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM); + if (unlikely(err)) + goto out; + + err = 0; /* -EBADF; */ /* posix? */ + if (unlikely(!(file->f_mode & FMODE_WRITE))) + goto out_si; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out_si; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + au_unpin(&pin); + + err = -EINVAL; + h_file = au_hf_top(file); + err = vfsub_fsync(h_file, &h_file->f_path, datasync); + au_cpup_attr_timesizes(inode); + +out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); +out_si: + si_read_unlock(sb); +out: + mutex_unlock(&inode->i_mutex); + return err; +} + +/* no one supports this operation, currently */ +#if 0 +static int aufs_aio_fsync_nondir(struct kiocb *kio, int datasync) +{ + int err; + struct au_pin pin; + struct dentry *dentry; + struct inode *inode; + struct file *file, *h_file; + + file = kio->ki_filp; + dentry = file->f_dentry; + inode = dentry->d_inode; + au_mtx_and_read_lock(inode); + + err = 0; /* -EBADF; */ /* posix? */ + if (unlikely(!(file->f_mode & FMODE_WRITE))) + goto out; + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/1); + if (unlikely(err)) + goto out; + + err = au_ready_to_write(file, -1, &pin); + di_downgrade_lock(dentry, AuLock_IR); + if (unlikely(err)) + goto out_unlock; + au_unpin(&pin); + + err = -ENOSYS; + h_file = au_hf_top(file); + if (h_file->f_op && h_file->f_op->aio_fsync) { + struct dentry *h_d; + struct mutex *h_mtx; + + h_d = h_file->f_dentry; + h_mtx = &h_d->d_inode->i_mutex; + if (!is_sync_kiocb(kio)) { + get_file(h_file); + fput(file); + } + kio->ki_filp = h_file; + err = h_file->f_op->aio_fsync(kio, datasync); + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + if (!err) + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); + /*ignore*/ + au_cpup_attr_timesizes(inode); + mutex_unlock(h_mtx); + } + +out_unlock: + di_read_unlock(dentry, AuLock_IR); + fi_write_unlock(file); +out: + si_read_unlock(inode->sb); + mutex_unlock(&inode->i_mutex); + return err; +} +#endif + +static int aufs_fasync(int fd, struct file *file, int flag) +{ + int err; + struct file *h_file; + struct dentry *dentry; + struct super_block *sb; + + dentry = file->f_dentry; + sb = dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLMW); + err = au_reval_and_lock_fdi(file, au_reopen_nondir, /*wlock*/0); + if (unlikely(err)) + goto out; + + h_file = au_hf_top(file); + if (h_file->f_op && h_file->f_op->fasync) + err = h_file->f_op->fasync(fd, h_file, flag); + + di_read_unlock(dentry, AuLock_IR); + fi_read_unlock(file); + +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, + .aio_read = aufs_aio_read, + .aio_write = aufs_aio_write, +#ifdef CONFIG_AUFS_POLL + .poll = aufs_poll, +#endif + .unlocked_ioctl = aufs_ioctl_nondir, +#ifdef CONFIG_COMPAT + .compat_ioctl = aufs_ioctl_nondir, /* same */ +#endif + .mmap = aufs_mmap, + .open = aufs_open_nondir, + .flush = aufs_flush_nondir, + .release = aufs_release_nondir, + .fsync = aufs_fsync_nondir, + /* .aio_fsync = aufs_aio_fsync_nondir, */ + .fasync = aufs_fasync, + /* .sendpage = aufs_sendpage, */ + .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 +}; --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/dinfo.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/dinfo.c @@ -0,0 +1,543 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * dentry private data + */ + +#include "aufs.h" + +void au_di_init_once(void *_dinfo) +{ + struct au_dinfo *dinfo = _dinfo; + static struct lock_class_key aufs_di; + + au_rw_init(&dinfo->di_rwsem); + au_rw_class(&dinfo->di_rwsem, &aufs_di); +} + +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_sbend(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_bstart = -1; + dinfo->di_bend = -1; + dinfo->di_bwh = -1; + dinfo->di_bdiropq = -1; + 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 bend, bindex; + + /* dentry may not be revalidated */ + bindex = dinfo->di_bstart; + if (bindex >= 0) { + bend = dinfo->di_bend; + p = dinfo->di_hdentry + bindex; + while (bindex++ <= bend) + 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, bstart); + DiSwap(bi, bend); + 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_bstart = src->di_bstart; + dst->di_bend = src->di_bend; + 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 err, sz; + struct au_hdentry *hdp; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + err = -ENOMEM; + sz = sizeof(*hdp) * (dinfo->di_bend + 1); + if (!sz) + sz = sizeof(*hdp); + hdp = au_kzrealloc(dinfo->di_hdentry, sz, sizeof(*hdp) * nbr, GFP_NOFS); + 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) +{ + au_rw_read_lock_nested(&au_di(d)->di_rwsem, lsc); + if (d->d_inode) { + if (au_ftest_lock(flags, IW)) + do_ii_write_lock(d->d_inode, lsc); + else if (au_ftest_lock(flags, IR)) + do_ii_read_lock(d->d_inode, lsc); + } +} + +void di_read_unlock(struct dentry *d, int flags) +{ + if (d->d_inode) { + if (au_ftest_lock(flags, IW)) { + au_dbg_verify_dinode(d); + ii_write_unlock(d->d_inode); + } else if (au_ftest_lock(flags, IR)) { + au_dbg_verify_dinode(d); + ii_read_unlock(d->d_inode); + } + } + au_rw_read_unlock(&au_di(d)->di_rwsem); +} + +void di_downgrade_lock(struct dentry *d, int flags) +{ + if (d->d_inode && au_ftest_lock(flags, IR)) + ii_downgrade_lock(d->d_inode); + 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->d_inode) + do_ii_write_lock(d->d_inode, lsc); +} + +void di_write_unlock(struct dentry *d) +{ + au_dbg_verify_dinode(d); + if (d->d_inode) + ii_write_unlock(d->d_inode); + 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 + || d1->d_inode == d2->d_inode + || d1->d_sb != d2->d_sb); + + if (isdir && au_test_subdir(d1, d2)) { + di_write_lock_child(d1); + di_write_lock_child2(d2); + } else { + /* there should be no races */ + 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 + || d1->d_inode == d2->d_inode + || d1->d_sb != d2->d_sb); + + if (isdir && au_test_subdir(d1, d2)) { + di_write_lock_parent(d1); + di_write_lock_parent2(d2); + } else { + /* there should be no races */ + 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 (d1->d_inode == d2->d_inode) + 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_dbstart(dentry) < 0 || bindex < au_dbstart(dentry)) + return NULL; + AuDebugOn(bindex < 0); + d = au_di(dentry)->di_hdentry[0 + bindex].hd_dentry; + AuDebugOn(d && d->d_count <= 0); + return d; +} + +/* + * extended version of au_h_dptr(). + * returns a hashed and positive 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; + + inode = dentry->d_inode; + AuDebugOn(!inode); + + h_dentry = NULL; + if (au_dbstart(dentry) <= bindex + && bindex <= au_dbend(dentry)) + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry && !au_d_hashed_positive(h_dentry)) { + dget(h_dentry); + goto out; /* success */ + } + + AuDebugOn(bindex < au_ibstart(inode)); + AuDebugOn(au_ibend(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_hashed_positive(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 bend, bwh; + + bend = au_dbend(dentry); + if (0 <= bend) { + bwh = au_dbwh(dentry); + if (!bwh) + return bwh; + if (0 < bwh && bwh < bend) + return bwh - 1; + } + return bend; +} + +aufs_bindex_t au_dbtaildir(struct dentry *dentry) +{ + aufs_bindex_t bend, bopq; + + bend = au_dbtail(dentry); + if (0 <= bend) { + bopq = au_dbdiropq(dentry); + if (0 <= bopq && bopq < bend) + bend = bopq; + } + return bend; +} + +/* ---------------------------------------------------------------------- */ + +void au_set_h_dptr(struct dentry *dentry, aufs_bindex_t bindex, + struct dentry *h_dentry) +{ + struct au_hdentry *hd = au_di(dentry)->di_hdentry + bindex; + struct au_branch *br; + + DiMustWriteLock(dentry); + + 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 bstart, bend; + + err = 0; + bstart = au_dbstart(dentry); + bend = au_dbend(dentry); + if (bstart >= 0) + AuDebugOn(bend < 0 && bstart > bend); + else { + err = -EIO; + AuDebugOn(bend >= 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(dentry->d_inode, 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; + + DiMustWriteLock(dentry); + + dinfo = au_di(dentry); + if (!dinfo || dinfo->di_bstart < 0) + return; + + hdp = dinfo->di_hdentry; + if (do_put_zero) { + aufs_bindex_t bindex, bend; + + bend = dinfo->di_bend; + for (bindex = dinfo->di_bstart; bindex <= bend; bindex++) { + h_d = hdp[0 + bindex].hd_dentry; + if (h_d && !h_d->d_inode) + au_set_h_dptr(dentry, bindex, NULL); + } + } + + dinfo->di_bstart = -1; + while (++dinfo->di_bstart <= dinfo->di_bend) + if (hdp[0 + dinfo->di_bstart].hd_dentry) + break; + if (dinfo->di_bstart > dinfo->di_bend) { + dinfo->di_bstart = -1; + dinfo->di_bend = -1; + return; + } + + dinfo->di_bend++; + while (0 <= --dinfo->di_bend) + if (hdp[0 + dinfo->di_bend].hd_dentry) + break; + AuDebugOn(dinfo->di_bstart > dinfo->di_bend || dinfo->di_bend < 0); +} + +void au_update_dbstart(struct dentry *dentry) +{ + aufs_bindex_t bindex, bend; + struct dentry *h_dentry; + + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + if (h_dentry->d_inode) { + au_set_dbstart(dentry, bindex); + return; + } + au_set_h_dptr(dentry, bindex, NULL); + } +} + +void au_update_dbend(struct dentry *dentry) +{ + aufs_bindex_t bindex, bstart; + struct dentry *h_dentry; + + bstart = au_dbstart(dentry); + for (bindex = au_dbend(dentry); bindex >= bstart; bindex--) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + if (h_dentry->d_inode) { + au_set_dbend(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, bend; + + bend = au_dbend(dentry); + for (bindex = au_dbstart(dentry); bindex <= bend; bindex++) + if (au_h_dptr(dentry, bindex) == h_dentry) + return bindex; + return -1; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/BOM.UPDATING +++ linux-lts-raring-3.8.0/ubuntu/aufs/BOM.UPDATING @@ -0,0 +1,80 @@ += How to update AUFS2 = + +This document covers the process for updating aufs2 within the Ubuntu +drivers directory. + +== Background == + +Upstream aufs2 is maintained in a git tree as below (which is _not_ used +when updating Ubuntu). This represents the primary upstream source tree: + + http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-2.6.git + +However this is on an http: transport and incredibly slow. It is advisable +to also add the gitorius mirror to your tree, fetching that before origin +to reduce the objects you need from the main tree: + + git://gitorious.org/aufs2/aufs2.git + +Ubuntu updates are actually taken from the aufs2-standalone tree, somewhat +similar to the compat-wireless tree. The version in this tree is based on +the mainline tree above but is modularisable, a key requirement for Ubuntu. +This tree is found at the git tree below (check the BOM for the definative +location): + + http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git + +This tree contains a set of branches, one per upstream release. The +aufs2.1 branch represents the mainline tracking branch, with aufs-2.1-38 +representing the delta to mainline 2.6.38. Each branch contains a set +of patches which affect the core enabling the application of aufs2, plus +an open tree for the fs/aufs tree. The core patches tend to be static +from early in the line of an upstream release, and thus generally do not +need updating as often. + +== Updating the core patches == + +Ubuntu uses two of the core enablement patches, which are applied in the +order below. The remaining changes required to enable aufs are Ubuntu +specific and static: + + aufs2-base.patch + aufs2-standalone.patch + +In order to update these patches it is simplest to simply revert the +existing pair and apply these as two commit. This allows us to more +easily drop aufs in the future should that be required. + +As these core enablement patches are very slow in changing we normally +do not need to update these more than once per upstream mainline release +though sometimes changes do affect these. + +== Updating aufs2 == + +Once the enablement patches are updated we can simply use the aufs-update +script in the ubuntu/ directory to update the existing source. There are +regular updates to the aufs2 upstream and it is likely we will see updates +there more than once a month. + +Firstly checkout the upstream standalone tree (see the BOM for the +location) and checkout an appropriate branch for the release you are +updating. Then simply run the aufs-update command from within the ubuntu/ +drivers directory, supplying the location of the local aufs2-standalone tree +on the command line: + + cd ubuntu + sh aufs-update ../../aufs2-standalone + +This will result in an update commit containing the updated code and +also updating the BOM. Note that any local modifications are now lost. +Where those exist they should be cherry-picked and then squashed into +the update commit to ensure we retain them. + +== Ubuntu modifications == + +We carry a very small delta to the upstream aufs2 source. Any such changes +need to be cherry-picked from the history and squashed into any update +commit in order to prevent regression. Any current patches are listed below: + +Lucid/Maverick/Natty/Oneiric: + UBUNTU: ubuntu: AUFS -- suppress benign plink warning messages --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/cpup.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/cpup.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * copy-up/down functions + */ + +#ifndef __AUFS_CPUP_H__ +#define __AUFS_CPUP_H__ + +#ifdef __KERNEL__ + +#include + +struct inode; +struct file; + +void au_cpup_attr_flags(struct inode *dst, struct inode *src); +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); + +/* ---------------------------------------------------------------------- */ + +/* 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 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_single(struct dentry *dentry, aufs_bindex_t bdst, + aufs_bindex_t bsrc, loff_t len, unsigned int flags, + struct dentry *dst_parent); +int au_sio_cpup_simple(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + unsigned int flags); +int au_sio_cpup_wh(struct dentry *dentry, aufs_bindex_t bdst, loff_t len, + struct file *file); + +int au_cp_dirs(struct dentry *dentry, aufs_bindex_t bdst, + int (*cp)(struct dentry *dentry, aufs_bindex_t bdst, + 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-lts-raring-3.8.0.orig/ubuntu/aufs/opts.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/opts.h @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * mount options/flags + */ + +#ifndef __AUFS_OPTS_H__ +#define __AUFS_OPTS_H__ + +#ifdef __KERNEL__ + +#include + +struct file; +struct super_block; + +/* ---------------------------------------------------------------------- */ + +/* 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) /* unimplemented */ +#define AuOpt_REFROF (1 << 8) /* unimplemented */ +#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 */ + +#ifndef CONFIG_AUFS_HNOTIFY +#undef AuOpt_UDBA_HNOTIFY +#define AuOpt_UDBA_HNOTIFY 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_PMFS, /* parent and mfs */ + AuWbrCreate_PMFSV, /* parent and mfs with 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; + }; +}; + +/* opts flags */ +#define AuOpts_REMOUNT 1 +#define AuOpts_REFRESH (1 << 1) +#define AuOpts_TRUNC_XIB (1 << 2) +#define AuOpts_REFRESH_DYAOP (1 << 3) +#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) + +struct au_opts { + struct au_opt *opt; + int max_opt; + + unsigned int given_udba; + unsigned int flags; + unsigned long sb_flags; +}; + +/* ---------------------------------------------------------------------- */ + +char *au_optstr_br_perm(int brperm); +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); +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-lts-raring-3.8.0.orig/ubuntu/aufs/export.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/export.c @@ -0,0 +1,811 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * export via nfs + */ + +#include +#include +#include +#include +#include +#include +#include "../fs/mount.h" +#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); +} + +/* ---------------------------------------------------------------------- */ +/* 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 (i_size_read(file->f_dentry->d_inode) + < 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; + struct hlist_node *p; + + dentry = NULL; + inode = ilookup(sb, ino); + if (!inode) + goto out; + + dentry = ERR_PTR(-ESTALE); + sigen = au_sigen(sb); + if (unlikely(is_bad_inode(inode) + || IS_DEADDIR(inode) + || sigen != au_iigen(inode))) + 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, p, &inode->i_dentry, d_alias) { + spin_lock(&d->d_lock); + if (!au_test_anon(d) + && d->d_parent->d_inode->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); + br_read_lock(&vfsmount_lock); + err = iterate_mounts(au_compare_mnt, &args, root.mnt); + br_read_unlock(&vfsmount_lock); + 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 { + int called, found; + ino_t ino; + char *name; + int namelen; +}; + +static int +find_name_by_ino(void *arg, const char *name, int namelen, loff_t offset, + u64 ino, unsigned int d_type) +{ + struct find_name_by_ino *a = arg; + + 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; + 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_readdir(file, find_name_by_ino, &arg); + } while (!err && !arg.found && arg.called); + dentry = ERR_PTR(err); + if (unlikely(err)) + goto out_name; + dentry = ERR_PTR(-ENOENT); + if (!arg.found) + goto out_name; + + /* do not call vfsub_lkup_one() */ + dir = parent->d_inode; + mutex_lock(&dir->i_mutex); + dentry = vfsub_lookup_one_len(arg.name, parent, arg.namelen); + mutex_unlock(&dir->i_mutex); + AuTraceErrPtr(dentry); + if (IS_ERR(dentry)) + goto out_name; + AuDebugOn(au_test_anon(dentry)); + if (unlikely(!dentry->d_inode)) { + 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 = br->br_mnt; + h_sb = h_mnt->mnt_sb; + /* todo: call lower fh_to_dentry()? fh_to_parent()? */ + h_parent = exportfs_decode_fh(h_mnt, (void *)(fh + Fh_tail), + fh_len - Fh_tail, fh[Fh_h_type], + h_acceptable, /*context*/NULL); + 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(!path.dentry->d_inode)) + goto out_path; + + if (ino != path.dentry->d_inode->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; + + 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); + atomic_inc(&br->br_count); + 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)) + && dentry->d_inode->i_generation == fh[Fh_igen]) + goto out_unlock; /* success */ + + dput(dentry); + dentry = ERR_PTR(-ESTALE); +out_unlock: + if (br) + atomic_dec(&br->br_count); + 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_ibstart(inode); + if (!dir) { + dentry = d_find_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; + dir = parent->d_inode; + } + + 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_alias(h_dir); + if (unlikely(!h_parent)) + goto out_hparent; + + err = -EPERM; + br = au_sbr(sb, bindex); + h_sb = br->br_mnt->mnt_sb; + 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 != 255) + 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 = 255; + 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_ibstart(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; + + 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-lts-raring-3.8.0.orig/ubuntu/aufs/dbgaufs.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/dbgaufs.c @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 = vfs_getattr(xf->f_vfsmnt, xf->f_dentry, &st); + if (!err) { + if (do_fcnt) + p->n = snprintf + (p->a, sizeof(p->a), "%ld, %llux%lu %lld\n", + (long)file_count(xf), st.blocks, st.blksize, + (long long)st.size); + else + p->n = snprintf(p->a, sizeof(p->a), "%llux%lu %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); +} + +/* ---------------------------------------------------------------------- */ + +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_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_sbend(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 bend; + struct au_branch *br; + struct au_xino_file *xi; + + if (!au_sbi(sb)->si_dbgaufs) + return; + + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + xi = &br->br_xino; + if (xi->xi_dbgaufs) { + debugfs_remove(xi->xi_dbgaufs); + 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 bend; + char name[sizeof(DbgaufsXi_PREFIX) + 5]; /* "xi" bindex NULL */ + + sbinfo = au_sbi(sb); + parent = sbinfo->si_dbgaufs; + if (!parent) + return; + + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + snprintf(name, sizeof(name), DbgaufsXi_PREFIX "%d", bindex); + br = au_sbr(sb, bindex); + xi = &br->br_xino; + AuDebugOn(xi->xi_dbgaufs); + xi->xi_dbgaufs = debugfs_create_file(name, dbgaufs_mode, parent, + sbinfo, &dbgaufs_xino_fop); + /* 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' fucntion 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 '__init' fucntion 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' fucntion 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; + + 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-lts-raring-3.8.0.orig/ubuntu/aufs/magic.mk +++ linux-lts-raring-3.8.0/ubuntu/aufs/magic.mk @@ -0,0 +1,54 @@ + +# defined in ${srctree}/fs/fuse/inode.c +# tristate +ifdef CONFIG_FUSE_FS +ccflags-y += -DFUSE_SUPER_MAGIC=0x65735546 +endif + +# defined in ${srctree}/fs/ocfs2/ocfs2_fs.h +# tristate +ifdef CONFIG_OCFS2_FS +ccflags-y += -DOCFS2_SUPER_MAGIC=0x7461636f +endif + +# defined in ${srctree}/fs/ocfs2/dlm/userdlm.h +# tristate +ifdef CONFIG_OCFS2_FS_O2CB +ccflags-y += -DDLMFS_MAGIC=0x76a9f425 +endif + +# defined in ${srctree}/fs/cifs/cifsfs.c +# tristate +ifdef CONFIG_CIFS_FS +ccflags-y += -DCIFS_MAGIC_NUMBER=0xFF534D42 +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/9p/v9fs.h +# tristate +ifdef CONFIG_9P_FS +ccflags-y += -DV9FS_MAGIC=0x01021997 +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-lts-raring-3.8.0.orig/ubuntu/aufs/branch.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/branch.h @@ -0,0 +1,230 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * branch filesystems and xino for them + */ + +#ifndef __AUFS_BRANCH_H__ +#define __AUFS_BRANCH_H__ + +#ifdef __KERNEL__ + +#include +#include "dynop.h" +#include "rwsem.h" +#include "super.h" + +/* ---------------------------------------------------------------------- */ + +/* a xino file */ +struct au_xino_file { + struct file *xi_file; + struct mutex xi_nondir_mtx; + + /* todo: make xino files an array to support huge inode number */ + +#ifdef CONFIG_DEBUG_FS + struct dentry *xi_dbgaufs; +#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) + +/* protected by superblock rwsem */ +struct au_branch { + struct au_xino_file br_xino; + + aufs_bindex_t br_id; + + int br_perm; + struct vfsmount *br_mnt; + spinlock_t br_dykey_lock; + struct au_dykey *br_dykey[AuBrDynOp]; + atomic_t br_count; + + struct au_wbr *br_wbr; + + /* xino truncation */ + blkcnt_t br_xino_upper; /* watermark in blocks */ + atomic_t br_xino_running; + +#ifdef CONFIG_AUFS_HFSNOTIFY + struct fsnotify_group *br_hfsn_group; + struct fsnotify_ops br_hfsn_ops; +#endif + +#ifdef CONFIG_SYSFS + /* an entry under sysfs per mount-point */ + char br_name[8]; + struct attribute br_attr; +#endif +}; + +/* ---------------------------------------------------------------------- */ + +/* branch permissions and attributes */ +#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 AuBrRAttr_WH (1 << 3) /* whiteout-able */ + +#define AuBrWAttr_NoLinkWH (1 << 4) /* un-hardlinkable whiteouts */ + +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_rdonly(struct au_branch *br) +{ + return ((br->br_mnt->mnt_sb->s_flags & MS_RDONLY) + || !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 +} + +/* ---------------------------------------------------------------------- */ + +/* 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); + +/* xino.c */ +static const loff_t au_loff_max = LLONG_MAX; + +int au_xib_trunc(struct super_block *sb); +ssize_t xino_fread(au_readf_t func, struct file *file, void *buf, size_t size, + loff_t *pos); +ssize_t xino_fwrite(au_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); + +/* ---------------------------------------------------------------------- */ + +/* 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_sbr(sb, bindex)->br_mnt; +} + +static inline +struct super_block *au_sbr_sb(struct super_block *sb, aufs_bindex_t bindex) +{ + return au_sbr_mnt(sb, bindex)->mnt_sb; +} + +static inline void au_sbr_put(struct super_block *sb, aufs_bindex_t bindex) +{ + atomic_dec(&au_sbr(sb, bindex)->br_count); +} + +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)); +} + +/* ---------------------------------------------------------------------- */ + +/* + * wbr_wh_read_lock, wbr_wh_write_lock + * wbr_wh_read_unlock, wbr_wh_write_unlock, wbr_wh_downgrade_lock + */ +AuSimpleRwsemFuncs(wbr_wh, struct au_wbr *wbr, &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) + +#endif /* __KERNEL__ */ +#endif /* __AUFS_BRANCH_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/debug.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/debug.h @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * debug print functions + */ + +#ifndef __AUFS_DEBUG_H__ +#define __AUFS_DEBUG_H__ + +#ifdef __KERNEL__ + +#include +#include +#include + +#ifdef CONFIG_AUFS_DEBUG +#define AuDebugOn(a) BUG_ON(a) + +/* module parameter */ +extern int aufs_debug; +static inline void au_debug(int n) +{ + aufs_debug = n; + smp_mb(); +} + +static inline int au_debug_test(void) +{ + return aufs_debug; +} +#else +#define AuDebugOn(a) do {} while (0) +AuStubVoid(au_debug, int n) +AuStubInt0(au_debug_test, void) +#endif /* CONFIG_AUFS_DEBUG */ + +/* ---------------------------------------------------------------------- */ + +/* 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 +#define AuDLNPair(d) AuLNPair(&(d)->d_name) + +/* ---------------------------------------------------------------------- */ + +struct au_sbinfo; +struct au_finfo; +struct dentry; +#ifdef CONFIG_AUFS_DEBUG +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); + +void au_dbg_sleep_jiffy(int jiffy); +struct iattr; +void au_dbg_iattr(struct iattr *ia); + +#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_dir_parent(struct dentry *dentry, unsigned int sigen); +void au_dbg_verify_nondir_parent(struct dentry *dentry, unsigned int sigen); +void au_dbg_verify_gen(struct dentry *parent, unsigned int sigen); +void au_dbg_verify_kthread(void); + +int __init au_debug_init(void); +void au_debug_sbinfo_init(struct au_sbinfo *sbinfo); +#define AuDbgWhlist(w) do { \ + AuDbg(#w "\n"); \ + au_dpri_whlist(w); \ +} while (0) + +#define AuDbgVdir(v) do { \ + AuDbg(#v "\n"); \ + au_dpri_vdir(v); \ +} while (0) + +#define AuDbgInode(i) do { \ + AuDbg(#i "\n"); \ + au_dpri_inode(i); \ +} while (0) + +#define AuDbgDAlias(i) do { \ + AuDbg(#i "\n"); \ + au_dpri_dalias(i); \ +} while (0) + +#define AuDbgDentry(d) do { \ + AuDbg(#d "\n"); \ + au_dpri_dentry(d); \ +} while (0) + +#define AuDbgFile(f) do { \ + AuDbg(#f "\n"); \ + au_dpri_file(f); \ +} while (0) + +#define AuDbgSb(sb) do { \ + AuDbg(#sb "\n"); \ + au_dpri_sb(sb); \ +} while (0) + +#define AuDbgSleep(sec) do { \ + AuDbg("sleep %d sec\n", sec); \ + ssleep(sec); \ +} while (0) + +#define AuDbgSleepJiffy(jiffy) do { \ + AuDbg("sleep %d jiffies\n", jiffy); \ + au_dbg_sleep_jiffy(jiffy); \ +} while (0) + +#define AuDbgIAttr(ia) do { \ + AuDbg("ia_valid 0x%x\n", (ia)->ia_valid); \ + au_dbg_iattr(ia); \ +} while (0) + +#define AuDbgSym(addr) do { \ + char sym[KSYM_SYMBOL_LEN]; \ + sprint_symbol(sym, (unsigned long)addr); \ + AuDbg("%s\n", sym); \ +} while (0) + +#define AuInfoSym(addr) do { \ + char sym[KSYM_SYMBOL_LEN]; \ + sprint_symbol(sym, (unsigned long)addr); \ + AuInfo("%s\n", sym); \ +} while (0) +#else +AuStubVoid(au_dbg_verify_dinode, struct dentry *dentry) +AuStubVoid(au_dbg_verify_dir_parent, struct dentry *dentry, unsigned int sigen) +AuStubVoid(au_dbg_verify_nondir_parent, struct dentry *dentry, + unsigned int sigen) +AuStubVoid(au_dbg_verify_gen, struct dentry *parent, unsigned int sigen) +AuStubVoid(au_dbg_verify_kthread, void) +AuStubInt0(__init au_debug_init, void) +AuStubVoid(au_debug_sbinfo_init, struct au_sbinfo *sbinfo) + +#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 AuDbgSleep(sec) do {} while (0) +#define AuDbgSleepJiffy(jiffy) do {} while (0) +#define AuDbgIAttr(ia) do {} while (0) +#define AuDbgSym(addr) do {} while (0) +#define AuInfoSym(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-lts-raring-3.8.0.orig/ubuntu/aufs/dentry.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/dentry.c @@ -0,0 +1,1063 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * lookup and dentry operations + */ + +#include +#include "aufs.h" + +#define AuLkup_ALLOW_NEG 1 +#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) + +struct au_do_lookup_args { + unsigned int flags; + mode_t type; + unsigned int nd_flags; +}; + +/* + * 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 qstr *wh_name, + struct au_do_lookup_args *args) +{ + struct dentry *h_dentry; + struct inode *h_inode, *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); + + 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, wh_name, br, /*try_sio*/0); + 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_dbend(dentry, bindex); */ + au_set_dbwh(dentry, bindex); + if (!allow_neg) + return NULL; /* success */ + +real_lookup: + h_dentry = vfsub_lkup_one(&dentry->d_name, h_parent); + if (IS_ERR(h_dentry)) + goto out; + + h_inode = h_dentry->d_inode; + if (!h_inode) { + if (!allow_neg) + goto out_neg; + } else if (wh_found + || (args->type && args->type != (h_inode->i_mode & S_IFMT))) + goto out_neg; + + if (au_dbend(dentry) <= bindex) + au_set_dbend(dentry, bindex); + if (au_dbstart(dentry) < 0 || bindex < au_dbstart(dentry)) + au_set_dbstart(dentry, bindex); + au_set_h_dptr(dentry, bindex, h_dentry); + + inode = dentry->d_inode; + if (!h_inode || !S_ISDIR(h_inode->i_mode) || !wh_able + || (inode && !S_ISDIR(inode->i_mode))) + goto out; /* success */ + + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + opq = au_diropq_test(h_dentry, br); + mutex_unlock(&h_inode->i_mutex); + 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 bstart, mode_t type, + unsigned int flags) +{ + int npositive, err; + aufs_bindex_t bindex, btail, bdiropq; + unsigned char isdir; + struct qstr whname; + struct au_do_lookup_args args = { + .flags = 0, + .type = type, + .nd_flags = flags + }; + const struct qstr *name = &dentry->d_name; + struct dentry *parent; + struct inode *inode; + + err = au_test_shwh(dentry->d_sb, name); + if (unlikely(err)) + goto out; + + err = au_wh_name_alloc(&whname, name); + if (unlikely(err)) + goto out; + + inode = dentry->d_inode; + isdir = !!(inode && S_ISDIR(inode->i_mode)); + if (!type) + au_fset_lkup(args.flags, ALLOW_NEG); + + npositive = 0; + parent = dget_parent(dentry); + btail = au_dbtaildir(parent); + for (bindex = bstart; bindex <= btail; bindex++) { + struct dentry *h_parent, *h_dentry; + struct inode *h_inode, *h_dir; + + h_dentry = au_h_dptr(dentry, bindex); + if (h_dentry) { + if (h_dentry->d_inode) + npositive++; + if (type != S_IFDIR) + break; + continue; + } + h_parent = au_h_dptr(parent, bindex); + if (!h_parent) + continue; + h_dir = h_parent->d_inode; + if (!h_dir || !S_ISDIR(h_dir->i_mode)) + continue; + + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + h_dentry = au_do_lookup(h_parent, dentry, bindex, &whname, + &args); + mutex_unlock(&h_dir->i_mutex); + err = PTR_ERR(h_dentry); + if (IS_ERR(h_dentry)) + goto out_parent; + au_fclr_lkup(args.flags, ALLOW_NEG); + + if (au_dbwh(dentry) >= 0) + break; + if (!h_dentry) + continue; + h_inode = h_dentry->d_inode; + if (!h_inode) + continue; + 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; + } + } + + if (npositive) { + AuLabel(positive); + au_update_dbstart(dentry); + } + err = npositive; + if (unlikely(!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) + && au_dbstart(dentry) < 0)) { + err = -EIO; + AuIOErr("both of real entry and whiteout found, %.*s, err %d\n", + AuDLNPair(dentry), err); + } + +out_parent: + dput(parent); + kfree(whname.name); +out: + return err; +} + +struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent, + struct au_branch *br) +{ + struct dentry *dentry; + int wkq_err; + + if (!au_test_h_perm_sio(parent->d_inode, 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 err; + struct dentry *parent, *h_parent, *h_dentry; + + parent = dget_parent(dentry); + h_parent = au_h_dptr(parent, bindex); + h_dentry = au_sio_lkup_one(&dentry->d_name, h_parent, + au_sbr(dentry->d_sb, bindex)); + err = PTR_ERR(h_dentry); + if (IS_ERR(h_dentry)) + goto out; + if (unlikely(h_dentry->d_inode)) { + err = -EIO; + AuIOErr("%.*s should be negative on b%d.\n", + AuDLNPair(h_dentry), bindex); + dput(h_dentry); + goto out; + } + + err = 0; + if (bindex < au_dbstart(dentry)) + au_set_dbstart(dentry, bindex); + if (au_dbend(dentry) < bindex) + au_set_dbend(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 = h_dentry->d_inode; + if (h_inode) + 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 + || h_d->d_inode != 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 = (h_dentry->d_parent->d_inode != 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, bend, 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); + bend = dinfo->di_bend; + bwh = dinfo->di_bwh; + bdiropq = dinfo->di_bdiropq; + p = dinfo->di_hdentry + dinfo->di_bstart; + for (bindex = dinfo->di_bstart; bindex <= bend; 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 = dinfo->di_hdentry + new_bindex; + tmp = *q; + *q = *p; + *p = tmp; + if (tmp.hd_dentry) { + bindex--; + p--; + } + } + + dinfo->di_bwh = -1; + if (bwh >= 0 && bwh <= au_sbend(sb) && au_sbr_whable(sb, bwh)) + dinfo->di_bwh = bwh; + + dinfo->di_bdiropq = -1; + if (bdiropq >= 0 + && bdiropq <= au_sbend(sb) + && au_sbr_whable(sb, bdiropq)) + dinfo->di_bdiropq = bdiropq; + + err = -EIO; + dinfo->di_bstart = -1; + dinfo->di_bend = -1; + bend = au_dbend(parent); + p = dinfo->di_hdentry; + for (bindex = 0; bindex <= bend; bindex++, p++) + if (p->hd_dentry) { + dinfo->di_bstart = bindex; + break; + } + + if (dinfo->di_bstart >= 0) { + p = dinfo->di_hdentry + bend; + for (bindex = bend; bindex >= 0; bindex--, p--) + if (p->hd_dentry) { + dinfo->di_bend = bindex; + err = 0; + break; + } + } + + return err; +} + +static void au_do_hide(struct dentry *dentry) +{ + struct inode *inode; + + inode = dentry->d_inode; + if (inode) { + if (!S_ISDIR(inode->i_mode)) { + 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; + struct inode *inode; + + AuDbgDentry(dentry); + inode = dentry->d_inode; + if (inode && S_ISDIR(inode->i_mode)) { + /* shrink_dcache_parent(dentry); */ + err = au_hide_children(dentry); + if (unlikely(err)) + AuIOErr("%.*s, failed hiding children, ignored %d\n", + AuDLNPair(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, bend; + struct { + struct dentry *dentry; + struct inode *inode; + mode_t mode; + } orig_h, tmp_h; + struct au_hdentry *hd; + struct inode *inode, *h_inode; + struct dentry *h_dentry; + + err = 0; + AuDebugOn(dinfo->di_bstart < 0); + orig_h.dentry = dinfo->di_hdentry[dinfo->di_bstart].hd_dentry; + orig_h.inode = orig_h.dentry->d_inode; + orig_h.mode = 0; + if (orig_h.inode) + orig_h.mode = orig_h.inode->i_mode & S_IFMT; + memset(&tmp_h, 0, sizeof(tmp_h)); + if (tmp->di_bstart >= 0) { + tmp_h.dentry = tmp->di_hdentry[tmp->di_bstart].hd_dentry; + tmp_h.inode = tmp_h.dentry->d_inode; + if (tmp_h.inode) + tmp_h.mode = tmp_h.inode->i_mode & S_IFMT; + } + + inode = dentry->d_inode; + if (!orig_h.inode) { + AuDbg("nagative originally\n"); + if (inode) { + au_hide(dentry); + goto out; + } + AuDebugOn(inode); + AuDebugOn(dinfo->di_bstart != dinfo->di_bend); + AuDebugOn(dinfo->di_bdiropq != -1); + + if (!tmp_h.inode) { + AuDbg("negative --> negative\n"); + /* should have only one negative lower */ + if (tmp->di_bstart >= 0 + && tmp->di_bstart < dinfo->di_bstart) { + AuDebugOn(tmp->di_bstart != tmp->di_bend); + AuDebugOn(dinfo->di_bstart != dinfo->di_bend); + au_set_h_dptr(dentry, dinfo->di_bstart, NULL); + au_di_cp(dinfo, tmp); + hd = tmp->di_hdentry + tmp->di_bstart; + au_set_h_dptr(dentry, tmp->di_bstart, + 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_bstart) + 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_bstart > tmp->di_bstart) { + /* + * 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_bstart > tmp->di_bstart) + dinfo->di_bstart = tmp->di_bstart; + if (dinfo->di_bend < tmp->di_bend) + dinfo->di_bend = tmp->di_bend; + dinfo->di_bwh = tmp->di_bwh; + dinfo->di_bdiropq = tmp->di_bdiropq; + hd = tmp->di_hdentry; + bend = dinfo->di_bend; + for (bindex = tmp->di_bstart; bindex <= bend; + bindex++) { + if (au_h_dptr(dentry, bindex)) + continue; + h_dentry = hd[bindex].hd_dentry; + if (!h_dentry) + continue; + h_inode = h_dentry->d_inode; + AuDebugOn(!h_inode); + AuDebugOn(orig_h.mode + != (h_inode->i_mode + & S_IFMT)); + au_set_h_dptr(dentry, bindex, + dget(h_dentry)); + } + 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; +} + +int au_refresh_dentry(struct dentry *dentry, struct dentry *parent) +{ + int err, ebrange; + unsigned int sigen; + struct au_dinfo *dinfo, *tmp; + struct super_block *sb; + struct inode *inode; + + DiMustWriteLock(dentry); + AuDebugOn(IS_ROOT(dentry)); + AuDebugOn(!parent->d_inode); + + sb = dentry->d_sb; + inode = dentry->d_inode; + sigen = au_sigen(sb); + err = au_digen_test(parent, sigen); + if (unlikely(err)) + goto out; + + dinfo = au_di(dentry); + err = au_di_realloc(dinfo, au_sbend(sb) + 1); + if (unlikely(err)) + goto out; + ebrange = au_dbrange_test(dentry); + if (!ebrange) + ebrange = au_do_refresh_hdentry(dentry, parent); + + if (d_unhashed(dentry) || ebrange) { + AuDebugOn(au_dbstart(dentry) < 0 && au_dbend(dentry) >= 0); + if (inode) + 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, /*bstart*/0, /*type*/0, /*flags*/0); + 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_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 %.*s, %d\n", + AuDLNPair(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 err; + umode_t mode, h_mode; + aufs_bindex_t bindex, btail, bstart, ibs, ibe; + unsigned char plus, unhashed, is_root, h_plus; + 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; + + /* + * 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 + * IN_DELETE for NFS dentry + * Let's do REVAL test too. + */ + if (do_udba && inode) { + mode = (inode->i_mode & S_IFMT); + plus = (inode->i_nlink > 0); + ibs = au_ibstart(inode); + ibe = au_ibend(inode); + } + + bstart = au_dbstart(dentry); + btail = bstart; + if (inode && S_ISDIR(inode->i_mode)) + btail = au_dbtaildir(dentry); + for (bindex = bstart; bindex <= btail; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + + AuDbg("b%d, %.*s\n", bindex, AuDLNPair(h_dentry)); + spin_lock(&h_dentry->d_lock); + h_name = &h_dentry->d_name; + if (unlikely(do_udba + && !is_root + && (unhashed != !!d_unhashed(h_dentry) + || name->len != h_name->len + || memcmp(name->name, h_name->name, name->len)) + )) { + AuDbg("unhash 0x%x 0x%x, %.*s %.*s\n", + unhashed, d_unhashed(h_dentry), + AuDLNPair(dentry), AuDLNPair(h_dentry)); + spin_unlock(&h_dentry->d_lock); + 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 */ + h_inode = h_dentry->d_inode; + if (unlikely(!!inode != !!h_inode)) + goto err; + + 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 (unlikely(plus != h_plus + || mode != h_mode + || h_cached_inode != h_inode)) + goto err; + continue; + + err: + err = -EINVAL; + break; + } + + 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; + struct inode *inode; + + 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; + } + + inode = d->d_inode; + 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; + 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; + + inode = dentry->d_inode; + if (inode && is_bad_inode(inode)) + 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; + } + 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 (inode && (IS_DEADDIR(inode) || !inode->i_nlink)) + goto out_inval; + + do_udba = !au_opt_test(au_mntflags(sb), UDBA_NONE); + if (do_udba && inode) { + aufs_bindex_t bstart = au_ibstart(inode); + struct inode *h_inode; + + if (bstart >= 0) { + h_inode = au_h_iptr(inode, bstart); + if (h_inode && au_test_higen(inode, h_inode)) + goto out_inval; + } + } + + err = h_d_revalidate(dentry, inode, flags, do_udba); + if (unlikely(!err && do_udba && au_dbstart(dentry) < 0)) { + err = -EIO; + AuDbg("both of real entry and whiteout found, %.*s, err %d\n", + AuDLNPair(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("%.*s invalid, %d\n", AuDLNPair(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_release = aufs_d_release +}; --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/dcsub.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/dcsub.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * sub-routines for dentry cache + */ + +#ifndef __AUFS_DCSUB_H__ +#define __AUFS_DCSUB_H__ + +#ifdef __KERNEL__ + +#include +#include + +struct dentry; + +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); + +/* ---------------------------------------------------------------------- */ + +static inline int au_d_hashed_positive(struct dentry *d) +{ + int err; + struct inode *inode = d->d_inode; + err = 0; + if (unlikely(d_unhashed(d) || !inode || !inode->i_nlink)) + err = -ENOENT; + 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->d_inode; + if (unlikely(d_unlinked(d) || !inode || !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->d_inode))) + err = -ENOENT; + return err; +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DCSUB_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/vdir.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/vdir.c @@ -0,0 +1,885 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 apropriate 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; + + head = kmalloc(sizeof(*nhash->nh_head) * num_hash, 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 *tpos; + struct hlist_node *pos, *node; + + hlist_for_each_entry_safe(tpos, pos, node, head, wh_hash) { + /* hlist_del(pos); */ + kfree(tpos); + } +} + +static void au_nhash_de_do_free(struct hlist_head *head) +{ + struct au_vdir_dehstr *tpos; + struct hlist_node *pos, *node; + + hlist_for_each_entry_safe(tpos, pos, node, head, hash) { + /* hlist_del(pos); */ + au_cache_free_vdir_dehstr(tpos); + } +} + +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 *tpos; + struct hlist_node *pos; + + num = 0; + n = whlist->nh_num; + head = whlist->nh_head; + for (u = 0; u < n; u++, head++) + hlist_for_each_entry(tpos, pos, head, wh_hash) + if (tpos->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; + 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 *tpos; + struct hlist_node *pos; + struct au_vdir_destr *str; + + head = au_name_hash(whlist, name, nlen); + hlist_for_each_entry(tpos, pos, head, wh_hash) { + str = &tpos->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 *tpos; + struct hlist_node *pos; + struct au_vdir_destr *str; + + head = au_name_hash(delist, name, nlen); + hlist_for_each_entry(tpos, pos, head, hash) { + str = tpos->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 = krealloc(vdir->vd_deblk, sizeof(*o) * (vdir->vd_nblk + 1), + GFP_NOFS); + 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_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 apropriate 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 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(void *__arg, const char *__name, int nlen, + loff_t offset __maybe_unused, u64 h_ino, + unsigned int d_type) +{ + struct fillvdir_arg *arg = __arg; + 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_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 */ + + sb = arg->file->f_dentry->d_sb; + 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 *tpos; + struct hlist_node *pos, *n; + char *p, *o; + struct au_vdir_destr *destr; + + AuDebugOn(!au_opt_test(au_mntflags(sb), SHWH)); + + err = -ENOMEM; + o = p = __getname_gfp(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(tpos, pos, n, head, wh_hash) { + destr = &tpos->wh_str; + memcpy(p, destr->name, destr->len); + err = append_de(vdir, o, destr->len + AUFS_WH_PFX_LEN, + tpos->wh_ino, tpos->wh_type, delist); + if (unlikely(err)) + break; + } + } + + __putname(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 bend, bindex, bstart; + unsigned char shwh; + struct file *hf, *file; + struct super_block *sb; + + file = arg->file; + sb = file->f_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); + } + bstart = au_fbstart(file); + bend = au_fbend_dir(file); + for (bindex = bstart; !err && bindex <= bend; 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 != bend + && 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_readdir(hf, fillvdir, arg); + if (err >= 0) + err = arg->err; + } while (!err && au_ftest_fillvdir(arg->flags, CALLED)); + } + + 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; + struct inode *inode; + struct au_vdir *vdir, *allocated; + + err = 0; + inode = file->f_dentry->d_inode; + IMustLock(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; */ + 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 = krealloc(tgt->vd_deblk, sizeof(*p) * src->vd_nblk, + GFP_NOFS); + 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 = krealloc(tgt->vd_deblk[0], deblk_sz, GFP_NOFS); + 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; + + 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) { + err = reinit_vdir(vdir_cache); + if (unlikely(err)) + goto out; + } else + return 0; /* success */ + + inode = file->f_dentry->d_inode; + 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) +{ + 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 (file->f_pos == offset) + goto out; + + vdir_cache->vd_last.ul = 0; + vdir_cache->vd_last.p.deblk = vdir_cache->vd_deblk[0]; + if (!file->f_pos) + goto out; + + valid = 0; + deblk_sz = vdir_cache->vd_deblk_sz; + ul = div64_u64(file->f_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 < file->f_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, void *dirent, filldir_t filldir) +{ + int err; + 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)) + 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, file->f_pos, + (unsigned long)de->de_ino, de->de_type); + err = filldir(dirent, de->de_str.name, de->de_str.len, + file->f_pos, de->de_ino, de->de_type); + if (unlikely(err)) { + AuTraceErr(err); + /* 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; + file->f_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]; + file->f_pos = deblk_sz * vdir_cache->vd_last.ul; + continue; + } + break; + } + + /* smp_mb(); */ + return 0; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/ioctl.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/ioctl.c @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * ioctl + * plink-management and readdir in userspace. + * assist the pathconf(3) wrapper library. + */ + +#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, bend; + 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(); + 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); + bend = au_sbend(sb); + if (wbrfd.brid >= 0) { + wbi = au_br_index(sb, wbrfd.brid); + if (unlikely(wbi < 0 || wbi > bend)) + 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 <= bend; 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); + +out_unlock: + aufs_read_unlock(root, AuLock_IR); + err = PTR_ERR(h_file); + if (IS_ERR(h_file)) + goto out_fd; + + atomic_dec(&br->br_count); /* 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; + + 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; + + 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_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; + + default: + err = aufs_ioctl_dir(file, cmd, arg); + } + + AuTraceErr(err); + return err; +} + +#if 0 /* unused yet */ +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 +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/i_op_ren.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/i_op_ren.c @@ -0,0 +1,1026 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * inode operation (rename entry) + * todo: this is crazy monster + */ + +#include "aufs.h" + +enum { AuSRC, AuDST, AuSrcDst }; +enum { AuPARENT, AuCHILD, AuParentChild }; + +#define AuRen_ISDIR 1 +#define AuRen_ISSAMEDIR (1 << 1) +#define AuRen_WHSRC (1 << 2) +#define AuRen_WHDST (1 << 3) +#define AuRen_MNT_WRITE (1 << 4) +#define AuRen_DT_DSTDIR (1 << 5) +#define AuRen_DIROPQ (1 << 6) +#define AuRen_CPUP (1 << 7) +#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) + +struct au_ren_args { + struct { + struct dentry *dentry, *h_dentry, *parent, *h_parent, + *wh_dentry; + struct inode *dir, *inode; + struct au_hinode *hdir; + struct au_dtime dt[AuParentChild]; + aufs_bindex_t bstart; + } 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_h_dir sd[AuSRC].hdir->hi_inode +#define src_dt sd[AuSRC].dt +#define src_bstart sd[AuSRC].bstart + +#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_h_dir sd[AuDST].hdir->hi_inode +#define dst_dt sd[AuDST].dt +#define dst_bstart sd[AuDST].bstart + + struct dentry *h_trap; + struct au_branch *br; + struct au_hinode *src_hinode; + struct path h_path; + struct au_nhash whlist; + aufs_bindex_t btgt, src_bwh, src_bdiropq; + + unsigned int flags; + + struct au_whtmp_rmdir *thargs; + struct dentry *h_dst; +}; + +/* ---------------------------------------------------------------------- */ + +/* + * functions for reverting. + * when an error happened in a single rename systemcall, we should revert + * everything as if nothing happend. + * 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_rev_diropq(int err, struct au_ren_args *a) +{ + int rerr; + + au_hn_imtx_lock_nested(a->src_hinode, AuLsc_I_CHILD); + rerr = au_diropq_remove(a->src_dentry, a->btgt); + au_hn_imtx_unlock(a->src_hinode); + au_set_dbdiropq(a->src_dentry, a->src_bdiropq); + if (rerr) + RevertFailure("remove diropq %.*s", AuDLNPair(a->src_dentry)); +} + +static void au_ren_rev_rename(int err, struct au_ren_args *a) +{ + int rerr; + + 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 %.*s", AuDLNPair(a->src_dentry)); + return; + } + + rerr = vfsub_rename(a->dst_h_dir, + au_h_dptr(a->src_dentry, a->btgt), + a->src_h_dir, &a->h_path); + 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 %.*s", AuDLNPair(a->src_dentry)); +} + +static void au_ren_rev_cpup(int err, struct au_ren_args *a) +{ + int rerr; + + a->h_path.dentry = a->dst_h_dentry; + rerr = vfsub_unlink(a->dst_h_dir, &a->h_path, /*force*/0); + au_set_h_dptr(a->src_dentry, a->btgt, NULL); + au_set_dbstart(a->src_dentry, a->src_bstart); + if (rerr) + RevertFailure("unlink %.*s", AuDLNPair(a->dst_h_dentry)); +} + +static void au_ren_rev_whtmp(int err, struct au_ren_args *a) +{ + int rerr; + + 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 %.*s", AuDLNPair(a->dst_dentry)); + return; + } + if (a->h_path.dentry->d_inode) { + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + return; + } + + rerr = vfsub_rename(a->dst_h_dir, a->h_dst, a->dst_h_dir, &a->h_path); + 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 %.*s", AuDLNPair(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 %.*s", AuDLNPair(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; + + d = a->src_dentry; + if (au_dbstart(d) == a->btgt) { + a->h_path.dentry = a->dst_h_dentry; + if (au_ftest_ren(a->flags, DIROPQ) + && au_dbdiropq(d) == a->btgt) + au_fclr_ren(a->flags, DIROPQ); + AuDebugOn(au_dbstart(d) != a->btgt); + err = vfsub_rename(a->src_h_dir, au_h_dptr(d, a->btgt), + a->dst_h_dir, &a->h_path); + } else { + struct mutex *h_mtx = &a->src_h_dentry->d_inode->i_mutex; + struct file *h_file; + + au_fset_ren(a->flags, CPUP); + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + au_set_dbstart(d, a->btgt); + au_set_h_dptr(d, a->btgt, dget(a->dst_h_dentry)); + h_file = au_h_open_pre(d, a->src_bstart); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + h_file = NULL; + } else + err = au_sio_cpup_single(d, a->btgt, a->src_bstart, -1, + !AuCpup_DTIME, a->dst_parent); + mutex_unlock(h_mtx); + au_h_open_post(d, a->src_bstart, h_file); + if (!err) { + d = a->dst_dentry; + au_set_h_dptr(d, a->btgt, NULL); + au_update_dbstart(d); + } else { + au_set_h_dptr(d, a->btgt, NULL); + au_set_dbstart(d, a->src_bstart); + } + } + 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 %.*s (%d), " + "ignored.\n", AuDLNPair(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_diropq(struct au_ren_args *a) +{ + int err; + struct dentry *diropq; + + err = 0; + a->src_bdiropq = au_dbdiropq(a->src_dentry); + a->src_hinode = au_hi(a->src_inode, a->btgt); + au_hn_imtx_lock_nested(a->src_hinode, AuLsc_I_CHILD); + diropq = au_diropq_create(a->src_dentry, a->btgt); + au_hn_imtx_unlock(a->src_hinode); + if (IS_ERR(diropq)) + err = PTR_ERR(diropq); + dput(diropq); + + return err; +} + +static int do_rename(struct au_ren_args *a) +{ + int err; + struct dentry *d, *h_d; + + /* prepare workqueue args for asynchronous rmdir */ + h_d = a->dst_h_dentry; + if (au_ftest_ren(a->flags, ISDIR) && h_d->d_inode) { + 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->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->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 (!h_d->d_inode) + 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); + if (unlikely(err)) + goto out_whtmp; + a->dst_h_dentry = au_h_dptr(d, a->btgt); + } + + /* cpup src */ + if (a->dst_h_dentry->d_inode && a->src_bstart != a->btgt) { + struct mutex *h_mtx = &a->src_h_dentry->d_inode->i_mutex; + struct file *h_file; + + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + AuDebugOn(au_dbstart(a->src_dentry) != a->src_bstart); + h_file = au_h_open_pre(a->src_dentry, a->src_bstart); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + h_file = NULL; + } else + err = au_sio_cpup_simple(a->src_dentry, a->btgt, -1, + !AuCpup_DTIME); + mutex_unlock(h_mtx); + au_h_open_post(a->src_dentry, a->src_bstart, h_file); + if (unlikely(err)) + goto out_whtmp; + } + + /* rename by vfs_rename or cpup */ + d = a->dst_dentry; + if (au_ftest_ren(a->flags, ISDIR) + && (a->dst_wh_dentry + || au_dbdiropq(d) == a->btgt + /* hide the lower to keep xino */ + || a->btgt < au_dbend(d) + || au_opt_test(au_mntflags(d->d_sb), ALWAYS_DIROPQ))) + au_fset_ren(a->flags, DIROPQ); + err = au_ren_or_cpup(a); + if (unlikely(err)) + /* leave the copied-up one */ + goto out_whtmp; + + /* make dir opaque */ + if (au_ftest_ren(a->flags, DIROPQ)) { + err = au_ren_diropq(a); + if (unlikely(err)) + goto out_rename; + } + + /* update target timestamps */ + AuDebugOn(au_dbstart(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 = a->h_path.dentry->d_inode->i_ctime; + + /* 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 */ + + err = 0; + goto out_success; + +out_diropq: + if (au_ftest_ren(a->flags, DIROPQ)) + au_ren_rev_diropq(err, a); +out_rename: + if (!au_ftest_ren(a->flags, CPUP)) + au_ren_rev_rename(err, a); + else + au_ren_rev_cpup(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 @dentry dir can be rename source or not. + * if it can, return 0 and @children is filled. + * success means, + * - it is a logically empty dir. + * - or, it exists on writable branch and has no children including whiteouts + * on the lower branch. + */ +static int may_rename_srcdir(struct dentry *dentry, aufs_bindex_t btgt) +{ + int err; + unsigned int rdhash; + aufs_bindex_t bstart; + + bstart = au_dbstart(dentry); + if (bstart != btgt) { + struct au_nhash whlist; + + 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; + err = au_test_empty(dentry, &whlist); + au_nhash_wh_free(&whlist); + goto out; + } + + if (bstart == au_dbtaildir(dentry)) + return 0; /* success */ + + err = au_test_empty_lower(dentry); + +out: + if (err == -ENOTEMPTY) { + 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->flags, ISDIR) && 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; + + au_set_dbstart(d, a->dst_bstart); + err = may_rename_dstdir(d, &a->whlist); + au_set_dbstart(d, a->btgt); + } + a->dst_h_dentry = au_h_dptr(d, au_dbstart(d)); + if (unlikely(err)) + goto out; + + d = a->src_dentry; + a->src_h_dentry = au_h_dptr(d, au_dbstart(d)); + if (au_ftest_ren(a->flags, ISDIR)) { + err = may_rename_srcdir(d, a->btgt); + 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_bstart == a->btgt) { + err = au_may_del(a->src_dentry, a->btgt, a->src_h_parent, + au_ftest_ren(a->flags, ISDIR)); + if (unlikely(err)) + goto out; + err = -EINVAL; + if (unlikely(a->src_h_dentry == a->h_trap)) + goto out; + } + + err = 0; + if (a->dst_bstart != a->btgt) + goto out; + + err = -ENOTEMPTY; + if (unlikely(a->dst_h_dentry == a->h_trap)) + goto out; + + err = -EIO; + h_inode = a->dst_h_dentry->d_inode; + isdir = !!au_ftest_ren(a->flags, ISDIR); + if (!a->dst_dentry->d_inode) { + if (unlikely(h_inode)) + goto out; + err = au_may_add(a->dst_dentry, a->btgt, a->dst_h_parent, + isdir); + } else { + if (unlikely(!h_inode || !h_inode->i_nlink)) + goto out; + err = au_may_del(a->dst_dentry, a->btgt, a->dst_h_parent, + isdir); + if (unlikely(err)) + goto out; + } + +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) +{ + struct super_block *sb; + + sb = a->dst_dentry->d_sb; + if (au_ftest_ren(a->flags, MNT_WRITE)) + vfsub_mnt_drop_write(a->br->br_mnt); + vfsub_unlock_rename(a->src_h_parent, a->src_hdir, + a->dst_h_parent, a->dst_hdir); +} + +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); + 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 != a->src_h_parent->d_inode + || a->dst_hdir->hi_inode != a->dst_h_parent->d_inode)) + err = au_busy_or_stale(); + if (!err && au_dbstart(a->src_dentry) == a->btgt) + err = au_h_verify(a->src_h_dentry, udba, + a->src_h_parent->d_inode, a->src_h_parent, + a->br); + if (!err && au_dbstart(a->dst_dentry) == a->btgt) + err = au_h_verify(a->dst_h_dentry, udba, + a->dst_h_parent->d_inode, a->dst_h_parent, + a->br); + if (!err) { + err = vfsub_mnt_want_write(a->br->br_mnt); + if (unlikely(err)) + goto out_unlock; + au_fset_ren(a->flags, MNT_WRITE); + goto out; /* success */ + } + + err = au_busy_or_stale(); + +out_unlock: + 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->flags, ISDIR)) { + /* is this updating defined in POSIX? */ + au_cpup_attr_timesizes(a->src_inode); + au_cpup_attr_nlink(dir, /*force*/1); + } + + if (au_ibstart(dir) == a->btgt) + au_cpup_attr_timesizes(dir); + + if (au_ftest_ren(a->flags, ISSAMEDIR)) + return; + + dir = a->src_dir; + dir->i_version++; + if (au_ftest_ren(a->flags, ISDIR)) + au_cpup_attr_nlink(dir, /*force*/1); + if (au_ibstart(dir) == a->btgt) + au_cpup_attr_timesizes(dir); +} + +static void au_ren_refresh(struct au_ren_args *a) +{ + aufs_bindex_t bend, 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 (!au_ftest_ren(a->flags, ISDIR)) + vfsub_drop_nlink(i); + else { + vfsub_dead_dir(i); + au_cpup_attr_timesizes(i); + } + au_update_dbrange(d, /*do_put_zero*/1); + } else { + bend = a->btgt; + for (bindex = au_dbstart(d); bindex < bend; bindex++) + au_set_h_dptr(d, bindex, NULL); + bend = au_dbend(d); + for (bindex = a->btgt + 1; bindex <= bend; bindex++) + au_set_h_dptr(d, bindex, NULL); + au_update_dbrange(d, /*do_put_zero*/0); + } + + d = a->src_dentry; + au_set_dbwh(d, -1); + bend = au_dbend(d); + for (bindex = a->btgt + 1; bindex <= bend; bindex++) { + h_d = au_h_dptr(d, bindex); + if (h_d) + au_set_h_dptr(d, bindex, NULL); + } + au_set_dbend(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 */ + + bend = au_ibend(i); + for (bindex = a->btgt + 1; bindex <= bend; 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_ibend(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(parent->d_inode); /* 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_bstart, dst_bstart 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_bstart = au_dbstart(a->src_dentry); + a->dst_bstart = au_dbstart(a->dst_dentry); + if (au_ftest_ren(a->flags, ISDIR)) + au_fset_wrdir(wr_dir_args.flags, ISDIR); + wr_dir_args.force_btgt = a->src_bstart; + if (a->dst_inode && a->dst_bstart < a->src_bstart) + wr_dir_args.force_btgt = a->dst_bstart; + 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; + + 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->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->flags, DT_DSTDIR); + if (!au_ftest_ren(a->flags, ISDIR)) + return; + + a->h_path.dentry = a->src_h_dentry; + au_dtime_store(a->src_dt + AuCHILD, a->src_dentry, &a->h_path); + if (a->dst_h_dentry->d_inode) { + au_fset_ren(a->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 mutex *h_mtx; + + au_dtime_revert(a->src_dt + AuPARENT); + if (!au_ftest_ren(a->flags, ISSAMEDIR)) + au_dtime_revert(a->dst_dt + AuPARENT); + + if (au_ftest_ren(a->flags, ISDIR) && err != -EIO) { + h_d = a->src_dt[AuCHILD].dt_h_path.dentry; + h_mtx = &h_d->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + au_dtime_revert(a->src_dt + AuCHILD); + mutex_unlock(h_mtx); + + if (au_ftest_ren(a->flags, DT_DSTDIR)) { + h_d = a->dst_dt[AuCHILD].dt_h_path.dentry; + h_mtx = &h_d->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + au_dtime_revert(a->dst_dt + AuCHILD); + mutex_unlock(h_mtx); + } + } +} + +/* ---------------------------------------------------------------------- */ + +int aufs_rename(struct inode *_src_dir, struct dentry *_src_dentry, + struct inode *_dst_dir, struct dentry *_dst_dentry) +{ + int err, flags; + /* reduce stack space */ + struct au_ren_args *a; + + AuDbg("%.*s, %.*s\n", AuDLNPair(_src_dentry), AuDLNPair(_dst_dentry)); + IMustLock(_src_dir); + IMustLock(_dst_dir); + + err = -ENOMEM; + BUILD_BUG_ON(sizeof(*a) > PAGE_SIZE); + a = kzalloc(sizeof(*a), GFP_NOFS); + if (unlikely(!a)) + goto out; + + a->src_dir = _src_dir; + a->src_dentry = _src_dentry; + a->src_inode = a->src_dentry->d_inode; + 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 = a->dst_dentry->d_inode; + a->dst_parent = a->dst_dentry->d_parent; /* dir inode is locked */ + if (a->dst_inode) { + IMustLock(a->dst_inode); + au_igrab(a->dst_inode); + } + + err = -ENOTDIR; + flags = AuLock_FLUSH | AuLock_NOPLM | AuLock_GEN; + if (S_ISDIR(a->src_inode->i_mode)) { + au_fset_ren(a->flags, ISDIR); + if (unlikely(a->dst_inode && !S_ISDIR(a->dst_inode->i_mode))) + goto out_free; + err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, + AuLock_DIR | flags); + } else + err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, + 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 dst_dentry before this + * function. It means we cannot rely upon d_unhashed(). + */ + if (unlikely(!a->dst_inode->i_nlink)) + goto out_unlock; + if (!S_ISDIR(a->dst_inode->i_mode)) { + err = au_d_hashed_positive(a->dst_dentry); + if (unlikely(err)) + 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 happend (in linux-3.3-rcN) but I don't know why. + * there may exist a problem somewhere else. + */ + err = -EINVAL; + if (unlikely(a->dst_parent->d_inode == a->src_dentry->d_inode)) + goto out_unlock; + + au_fset_ren(a->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 = a->br->br_mnt; + + /* 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_bstart == a->btgt) { + au_fset_ren(a->flags, WHDST); + } else { + err = au_cpup_dirs(a->dst_dentry, a->btgt); + if (unlikely(err)) + goto out_children; + } + + 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->flags, ISDIR), + &a->btgt); + di_write_unlock(a->src_parent); + di_write_lock2_parent(a->src_parent, a->dst_parent, /*isdir*/1); + au_fclr_ren(a->flags, ISSAMEDIR); + } else + err = au_wr_dir_need_wh(a->src_dentry, + au_ftest_ren(a->flags, ISDIR), + &a->btgt); + if (unlikely(err < 0)) + goto out_children; + if (err) + au_fset_ren(a->flags, WHSRC); + + /* lock them all */ + err = au_ren_lock(a); + if (unlikely(err)) + goto out_children; + + 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); + + /* here we go */ + err = do_rename(a); + if (unlikely(err)) + goto out_dt; + + /* update dir attributes */ + au_ren_refresh_dir(a); + + /* dput/iput all lower dentries */ + au_ren_refresh(a); + + goto out_hdir; /* success */ + +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_bstart != a->btgt) { + AuDbg("bstart %d, btgt %d\n", a->dst_bstart, a->btgt); + au_set_h_dptr(a->dst_dentry, a->btgt, NULL); + au_set_dbstart(a->dst_dentry, a->dst_bstart); + } +out_parent: + if (!err) + d_move(a->src_dentry, a->dst_dentry); + else { + au_update_dbstart(a->dst_dentry); + if (!a->dst_inode) + d_drop(a->dst_dentry); + } + if (au_ftest_ren(a->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-lts-raring-3.8.0.orig/ubuntu/aufs/sysaufs.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/sysaufs.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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); + +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) + +static inline +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf) +{ + return 0; +} + +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-lts-raring-3.8.0.orig/ubuntu/aufs/debug.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/debug.c @@ -0,0 +1,490 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * debug print functions + */ + +#include +#include "aufs.h" + +int aufs_debug; +MODULE_PARM_DESC(debug, "debug print"); +module_param_named(debug, aufs_debug, int, S_IRUGO | S_IWUSR | S_IWGRP); + +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 *tpos; + struct hlist_node *pos; + + n = whlist->nh_num; + head = whlist->nh_head; + for (ul = 0; ul < n; ul++) { + hlist_for_each_entry(tpos, pos, head, wh_hash) + dpri("b%d, %.*s, %d\n", + tpos->wh_bindex, + tpos->wh_str.len, tpos->wh_str.name, + tpos->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_LSF */ + 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; + aufs_bindex_t bindex; + int err, hn; + + err = do_pri_inode(-1, inode, -1, NULL); + if (err || !au_test_aufs(inode->i_sb)) + return; + + iinfo = au_ii(inode); + if (!iinfo) + return; + dpri("i-1: bstart %d, bend %d, gen %d\n", + iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode)); + if (iinfo->ii_bstart < 0) + return; + hn = 0; + for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; bindex++) { + hn = !!au_hn(iinfo->ii_hinode + bindex); + do_pri_inode(bindex, iinfo->ii_hinode[0 + bindex].hi_inode, hn, + iinfo->ii_hinode[0 + bindex].hi_whdentry); + } +} + +void au_dpri_dalias(struct inode *inode) +{ + struct dentry *d; + struct hlist_node *p; + + spin_lock(&inode->i_lock); + hlist_for_each_entry(d, p, &inode->i_dentry, 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; + + 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: %.*s?/%.*s, %s, cnt %d, flags 0x%x\n", + bindex, + AuDLNPair(dentry->d_parent), AuDLNPair(dentry), + dentry->d_sb ? au_sbtype(dentry->d_sb) : "??", + dentry->d_count, dentry->d_flags); + hn = -1; + if (bindex >= 0 && dentry->d_inode && au_test_aufs(dentry->d_sb)) { + struct au_iinfo *iinfo = au_ii(dentry->d_inode); + if (iinfo) { + hn = !!au_hn(iinfo->ii_hinode + bindex); + wh = iinfo->ii_hinode[0 + bindex].hi_whdentry; + } + } + do_pri_inode(bindex, dentry->d_inode, hn, wh); + return 0; +} + +void au_dpri_dentry(struct dentry *dentry) +{ + struct au_dinfo *dinfo; + aufs_bindex_t bindex; + int err; + struct au_hdentry *hdp; + + 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: bstart %d, bend %d, bwh %d, bdiropq %d, gen %d\n", + dinfo->di_bstart, dinfo->di_bend, + dinfo->di_bwh, dinfo->di_bdiropq, au_digen(dentry)); + if (dinfo->di_bstart < 0) + return; + hdp = dinfo->di_hdentry; + for (bindex = dinfo->di_bstart; bindex <= dinfo->di_bend; bindex++) + do_pri_dentry(bindex, hdp[0 + 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 + && file->f_dentry + && au_test_aufs(file->f_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 (file->f_dentry) + do_pri_dentry(bindex, file->f_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 || !file->f_dentry || !au_test_aufs(file->f_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 = br->br_mnt; + 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 %d, wbr %p}, " + "%s, dev 0x%02x%02x, flags 0x%lx, cnt %d, active %d, " + "xino %d\n", + bindex, br->br_perm, br->br_id, atomic_read(&br->br_count), + 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_perm = 0; + a->fake.br_mnt = &a->mnt; + a->fake.br_xino.xi_file = NULL; + atomic_set(&a->fake.br_count, 0); + smp_mb(); /* atomic_set */ + err = do_pri_br(-1, &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, + atomic_read(&sbinfo->si_kobj.kref.refcount)); + for (bindex = 0; bindex <= sbinfo->si_bend; bindex++) + do_pri_br(bindex, sbinfo->si_branch[0 + bindex]); +} + +/* ---------------------------------------------------------------------- */ + +void au_dbg_sleep_jiffy(int jiffy) +{ + while (jiffy) + jiffy = schedule_timeout_uninterruptible(jiffy); +} + +void au_dbg_iattr(struct iattr *ia) +{ +#define AuBit(name) if (ia->ia_valid & ATTR_ ## name) \ + dpri(#name "\n") + AuBit(MODE); + AuBit(UID); + AuBit(GID); + AuBit(SIZE); + AuBit(ATIME); + AuBit(MTIME); + AuBit(CTIME); + AuBit(ATIME_SET); + AuBit(MTIME_SET); + AuBit(FORCE); + AuBit(ATTR_FLAG); + AuBit(KILL_SUID); + AuBit(KILL_SGID); + AuBit(FILE); + AuBit(KILL_PRIV); + AuBit(OPEN); + AuBit(TIMES_SET); +#undef AuBit + dpri("ia_file %p\n", ia->ia_file); +} + +/* ---------------------------------------------------------------------- */ + +void __au_dbg_verify_dinode(struct dentry *dentry, const char *func, int line) +{ + struct inode *h_inode, *inode = dentry->d_inode; + struct dentry *h_dentry; + aufs_bindex_t bindex, bend, bi; + + if (!inode /* || au_di(dentry)->di_lsc == AuLsc_DI_TMP */) + return; + + bend = au_dbend(dentry); + bi = au_ibend(inode); + if (bi < bend) + bend = bi; + bindex = au_dbstart(dentry); + bi = au_ibstart(inode); + if (bi > bindex) + bindex = bi; + + for (; bindex <= bend; bindex++) { + h_dentry = au_h_dptr(dentry, bindex); + if (!h_dentry) + continue; + h_inode = au_h_iptr(inode, bindex); + if (unlikely(h_inode != h_dentry->d_inode)) { + int old = au_debug_test(); + if (!old) + au_debug(1); + AuDbg("b%d, %s:%d\n", bindex, func, line); + AuDbgDentry(dentry); + AuDbgInode(inode); + if (!old) + au_debug(0); + BUG(); + } + } +} + +void au_dbg_verify_dir_parent(struct dentry *dentry, unsigned int sigen) +{ + struct dentry *parent; + + parent = dget_parent(dentry); + AuDebugOn(!S_ISDIR(dentry->d_inode->i_mode)); + AuDebugOn(IS_ROOT(dentry)); + AuDebugOn(au_digen_test(parent, sigen)); + dput(parent); +} + +void au_dbg_verify_nondir_parent(struct dentry *dentry, unsigned int sigen) +{ + struct dentry *parent; + struct inode *inode; + + parent = dget_parent(dentry); + inode = dentry->d_inode; + AuDebugOn(inode && S_ISDIR(dentry->d_inode->i_mode)); + AuDebugOn(au_digen_test(parent, sigen)); + dput(parent); +} + +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); */ + } +} + +/* ---------------------------------------------------------------------- */ + +void au_debug_sbinfo_init(struct au_sbinfo *sbinfo __maybe_unused) +{ +#ifdef AuForceNoPlink + au_opt_clr(sbinfo->si_mntflags, PLINK); +#endif +#ifdef AuForceNoXino + au_opt_clr(sbinfo->si_mntflags, XINO); +#endif +#ifdef AuForceNoRefrof + au_opt_clr(sbinfo->si_mntflags, REFROF); +#endif +#ifdef AuForceHnotify + au_opt_set_udba(sbinfo->si_mntflags, UDBA_HNOTIFY); +#endif +#ifdef AuForceRd0 + sbinfo->si_rdblk = 0; + sbinfo->si_rdhash = 0; +#endif +} + +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 + +#ifdef AuForceNoBrs + sysaufs_brs = 0; +#endif + + return 0; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/spl.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/spl.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * simple list protected by a spinlock + */ + +#ifndef __AUFS_SPL_H__ +#define __AUFS_SPL_H__ + +#ifdef __KERNEL__ + +struct au_splhead { + spinlock_t spin; + struct list_head head; +}; + +static inline void au_spl_init(struct au_splhead *spl) +{ + spin_lock_init(&spl->spin); + INIT_LIST_HEAD(&spl->head); +} + +static inline void au_spl_add(struct list_head *list, struct au_splhead *spl) +{ + spin_lock(&spl->spin); + list_add(list, &spl->head); + spin_unlock(&spl->spin); +} + +static inline void au_spl_del(struct list_head *list, struct au_splhead *spl) +{ + spin_lock(&spl->spin); + list_del(list); + spin_unlock(&spl->spin); +} + +static inline void au_spl_del_rcu(struct list_head *list, + struct au_splhead *spl) +{ + spin_lock(&spl->spin); + list_del_rcu(list); + spin_unlock(&spl->spin); +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_SPL_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/loop.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/loop.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 +/* 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); +#else +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) +#endif /* BLK_DEV_LOOP */ + +#endif /* __KERNEL__ */ +#endif /* __AUFS_LOOP_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/dir.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/dir.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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); +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, void *dirent, filldir_t filldir); + +/* 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 +static inline long au_rdu_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + return -EINVAL; +} +#ifdef CONFIG_COMPAT +static inline long au_rdu_compat_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + return -EINVAL; +} +#endif +#endif + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIR_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/i_op_add.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/i_op_add.c @@ -0,0 +1,713 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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 inode *inode, *h_dir; + struct dentry *wh; + + bwh = -1; + if (wh_dentry) { + h_dir = wh_dentry->d_parent->d_inode; /* 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(dir->i_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 = dentry->d_parent->d_inode; /* dir inode is locked */ + IMustLock(dir); + if (au_ibstart(dir) == au_dbstart(dentry)) + au_cpup_attr_timesizes(dir); + dir->i_version++; + 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("%.*s reverting whiteout failed(%d, %d)\n", + AuDLNPair(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(dentry->d_inode)) + 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); + h_inode = h_dentry->d_inode; + if (!dentry->d_inode) { + err = -EEXIST; + if (unlikely(h_inode)) + goto out; + } else { + /* rename(2) case */ + err = -EIO; + if (unlikely(!h_inode || !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("%.*s\n", AuDLNPair(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_dbstart(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 = br->br_mnt + }; + au_dtime_store(dt, au_pinned_parent(pin), &tmp); + } + + wh_dentry = NULL; + if (bcpup != au_dbwh(dentry)) + goto out; /* success */ + + 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; + } 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; + aufs_bindex_t bstart; + unsigned char created; + struct au_dtime dt; + struct au_pin pin; + struct path h_path; + struct dentry *wh_dentry, *parent; + struct inode *h_dir; + struct au_wr_dir_args wr_dir_args = { + .force_btgt = -1, + .flags = AuWrDir_ADD_ENTRY + }; + + AuDbg("%.*s\n", AuDLNPair(dentry)); + IMustLock(dir); + + parent = dentry->d_parent; /* dir inode is locked */ + err = aufs_read_lock(dentry, AuLock_DW | AuLock_GEN); + if (unlikely(err)) + goto out; + err = au_d_may_add(dentry); + if (unlikely(err)) + goto out_unlock; + di_write_lock_parent(parent); + wh_dentry = lock_hdir_lkup_wh(dentry, &dt, /*src_dentry*/NULL, &pin, + &wr_dir_args); + err = PTR_ERR(wh_dentry); + if (IS_ERR(wh_dentry)) + goto out_parent; + + bstart = au_dbstart(dentry); + h_path.dentry = au_h_dptr(dentry, bstart); + h_path.mnt = au_sbr_mnt(dentry->d_sb, bstart); + h_dir = au_pinned_h_dir(&pin); + switch (arg->type) { + case Creat: + err = vfsub_create(h_dir, &h_path, arg->u.c.mode, + arg->u.c.want_excl); + break; + case Symlink: + err = vfsub_symlink(h_dir, &h_path, arg->u.s.symname); + break; + case Mknod: + err = vfsub_mknod(h_dir, &h_path, arg->u.m.mode, arg->u.m.dev); + break; + default: + BUG(); + } + created = !err; + if (!err) + err = epilog(dir, bstart, wh_dentry, dentry); + + /* revert */ + if (unlikely(created && err && h_path.dentry->d_inode)) { + int rerr; + rerr = vfsub_unlink(h_dir, &h_path, /*force*/0); + if (rerr) { + AuIOErr("%.*s revert failure(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + } + au_dtime_revert(&dt); + } + + au_unpin(&pin); + dput(wh_dentry); + +out_parent: + di_write_unlock(parent); +out_unlock: + if (unlikely(err)) { + au_update_dbstart(dentry); + d_drop(dentry); + } + aufs_read_unlock(dentry, AuLock_DW); +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); +} + +/* ---------------------------------------------------------------------- */ + +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 mutex *h_mtx; + struct file *h_file; + + 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); + h_mtx = &h_src_dentry->d_inode->i_mutex; + 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; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + h_file = au_h_open_pre(src_dentry, a->bsrc); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + h_file = NULL; + } else + err = au_sio_cpup_simple(src_dentry, a->bdst, -1, + AuCpup_DTIME /* | AuCpup_KEEPLINO */); + mutex_unlock(h_mtx); + au_h_open_post(src_dentry, a->bsrc, h_file); + 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 au_link_args *a) +{ + int err; + unsigned char plink; + struct inode *h_inode, *inode; + struct dentry *h_src_dentry; + struct super_block *sb; + struct file *h_file; + + plink = 0; + h_inode = NULL; + sb = src_dentry->d_sb; + inode = src_dentry->d_inode; + if (au_ibstart(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. */ + au_set_dbstart(src_dentry, a->bdst); + au_set_h_dptr(src_dentry, a->bdst, dget(a->h_path.dentry)); + h_inode = au_h_dptr(src_dentry, a->bsrc)->d_inode; + mutex_lock_nested(&h_inode->i_mutex, AuLsc_I_CHILD); + h_file = au_h_open_pre(src_dentry, a->bsrc); + if (IS_ERR(h_file)) { + err = PTR_ERR(h_file); + h_file = NULL; + } else + err = au_sio_cpup_single(src_dentry, a->bdst, a->bsrc, + -1, AuCpup_KEEPLINO, + a->parent); + mutex_unlock(&h_inode->i_mutex); + au_h_open_post(src_dentry, a->bsrc, h_file); + au_set_h_dptr(src_dentry, a->bdst, NULL); + au_set_dbstart(src_dentry, a->bsrc); + } 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(!h_src_dentry->d_inode)) { + dput(h_src_dentry); + h_src_dentry = NULL; + } + + } + if (h_src_dentry) { + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), + &a->h_path); + 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; + struct super_block *sb; + struct au_wr_dir_args wr_dir_args = { + /* .force_btgt = -1, */ + .flags = AuWrDir_ADD_ENTRY + }; + + IMustLock(dir); + inode = src_dentry->d_inode; + 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_hashed_positive(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_ibstart(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_dbstart(dentry); + a->h_path.dentry = au_h_dptr(dentry, a->bdst); + a->h_path.mnt = au_sbr_mnt(sb, a->bdst); + a->bsrc = au_ibstart(inode); + h_src_dentry = au_h_d_alias(src_dentry, a->bsrc); + if (!h_src_dentry) { + a->bsrc = au_dbstart(src_dentry); + h_src_dentry = au_h_d_alias(src_dentry, a->bsrc); + AuDebugOn(!h_src_dentry); + } else if (IS_ERR(h_src_dentry)) + goto out_parent; + + 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, a); + else + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), + &a->h_path); + 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 && h_src_dentry->d_inode) + err = vfsub_link(h_src_dentry, + au_pinned_h_dir(&a->pin), + &a->h_path); + } + } + 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; + } + + dir->i_version++; + if (au_ibstart(dir) == au_dbstart(dentry)) + au_cpup_attr_timesizes(dir); + 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); + goto out_unpin; /* success */ + +out_revert: + rerr = vfsub_unlink(au_pinned_h_dir(&a->pin), &a->h_path, /*force*/0); + if (unlikely(rerr)) { + AuIOErr("%.*s reverting failed(%d, %d)\n", + AuDLNPair(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_dbstart(dentry); + d_drop(dentry); + } + aufs_read_and_write_unlock2(dentry, src_dentry); +out_kfree: + kfree(a); +out: + 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 mutex *h_mtx; + 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_dbstart(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_mtx = &h_path.dentry->d_inode->i_mutex; + if (wh_dentry + || au_opt_test(au_mntflags(sb), ALWAYS_DIROPQ)) { + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + opq_dentry = au_diropq_create(dentry, bindex); + mutex_unlock(h_mtx); + 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); + mutex_lock_nested(h_mtx, AuLsc_I_CHILD); + rerr = au_diropq_remove(dentry, bindex); + mutex_unlock(h_mtx); + if (rerr) { + AuIOErr("%.*s reverting diropq failed(%d, %d)\n", + AuDLNPair(dentry), err, rerr); + err = -EIO; + } + } + +out_dir: + AuLabel(revert dir); + rerr = vfsub_rmdir(au_pinned_h_dir(&a->pin), &h_path); + if (rerr) { + AuIOErr("%.*s reverting dir failed(%d, %d)\n", + AuDLNPair(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_dbstart(dentry); + d_drop(dentry); + } + aufs_read_unlock(dentry, AuLock_DW); +out_free: + kfree(a); +out: + return err; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/BOM +++ linux-lts-raring-3.8.0/ubuntu/aufs/BOM @@ -0,0 +1,3 @@ +URL: git://aufs.git.sourceforge.net/gitroot/aufs/aufs3-standalone.git +CHANGELOG: +COMMIT: f2873474324d0a31af4340554b9715f51331bc7f --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/sysrq.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/sysrq.c @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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; + + plevel = au_plevel; + au_plevel = KERN_WARNING; + + sbinfo = au_sbi(sb); + /* since we define pr_fmt, call printk directly */ + printk(KERN_WARNING "si=%lx\n", sysaufs_si_id(sbinfo)); + printk(KERN_WARNING AUFS_NAME ": superblock\n"); + au_dpri_sb(sb); + +#if 0 + printk(KERN_WARNING AUFS_NAME ": root dentry\n"); + au_dpri_dentry(sb->s_root); + printk(KERN_WARNING AUFS_NAME ": root inode\n"); + au_dpri_inode(sb->s_root->d_inode); +#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; + printk(KERN_WARNING AUFS_NAME ": isolated inode\n"); + spin_lock(&inode_sb_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(&inode_sb_list_lock); + } +#endif + printk(KERN_WARNING AUFS_NAME ": files\n"); + lg_global_lock(&files_lglock); + do_file_list_for_each_entry(sb, file) { + umode_t mode; + mode = file->f_dentry->d_inode->i_mode; + if (!special_file(mode) || au_special_file(mode)) + au_dpri_file(file); + } while_file_list_for_each_entry; + lg_global_unlock(&files_lglock); + printk(KERN_WARNING AUFS_NAME ": done\n"); + + 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; + + lockdep_off(); + au_sbilist_lock(); + list_for_each_entry(sbinfo, &au_sbilist.head, 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-lts-raring-3.8.0.orig/ubuntu/aufs/hnotify.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/hnotify.c @@ -0,0 +1,713 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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, bend; + struct inode *hi; + struct dentry *iwhdentry; + + bend = au_ibend(inode); + for (bindex = au_ibstart(inode); bindex <= bend; bindex++) { + hi = au_h_iptr(inode, bindex); + if (!hi) + continue; + + /* mutex_lock_nested(&hi->i_mutex, 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); + /* mutex_unlock(&hi->i_mutex); */ + } +} + +/* ---------------------------------------------------------------------- */ + +static int hn_xino(struct inode *inode, struct inode *h_inode) +{ + int err; + aufs_bindex_t bindex, bend, bfound, bstart; + 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; + bend = au_ibend(inode); + bstart = au_ibstart(inode); +#if 0 /* reserved for future use */ + if (bindex == bend) { + /* keep this ino in rename case */ + goto out; + } +#endif + for (bindex = bstart; bindex <= bend; bindex++) + if (au_h_iptr(inode, bindex) == h_inode) { + bfound = bindex; + break; + } + if (bfound < 0) + goto out; + + for (bindex = bstart; bindex <= bend; 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->d_inode) + /* todo: reset children xino? + cached children only? */ + au_iigen_dec(d->d_inode); + } + } + +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; + struct hlist_node *p; + + 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, p, &inode->i_dentry, 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_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; + struct inode *inode; + + inode = dentry->d_inode; + if (IS_ROOT(dentry) + /* || (inode && inode->i_ino == AUFS_ROOT_INO) */ + ) { + pr_warn("branch root dir was changed\n"); + return 0; + } + + err = 0; + if (!isdir) { + au_digen_dec(dentry); + if (inode) + au_iigen_dec(inode); + } else { + au_fset_si(au_sbi(dentry->d_sb), FAILED_REFRESH_DIR); + if (inode) + 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); + + /* 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) { + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); + if (!a->h_inode->i_nlink) + hn_xino(a->inode, a->h_inode); /* ignore this error */ + mutex_unlock(&a->h_inode->i_mutex); + } + + /* make the generation obsolete */ + if (au_ftest_hnjob(a->flags, GEN)) { + int err = -1; + if (a->inode) + err = hn_gen_by_inode(a->h_name, a->h_nlen, a->inode, + isdir); + if (err && 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 %.*s is removed or renamed\n", + AuDLNPair(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_alias(dir); + if (!parent) + return NULL; + + dentry = NULL; + spin_lock(&parent->d_lock); + list_for_each_entry(d, &parent->d_subdirs, d_u.d_child) { + /* AuDbg("%.*s\n", AuDLNPair(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 (d->d_count) { + 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, bend, 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); + + ii_read_lock_parent(a->dir); + bfound = -1; + bend = au_ibend(a->dir); + for (bindex = au_ibstart(a->dir); bindex <= bend; 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) + inode = dentry->d_inode; + 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 || !h_child_inode); + 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; + } + + f = 0; + if (!dir->i_nlink) + 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_cachep[AuCache_HNOTIFY]); + au_cachep[AuCache_HNOTIFY] = NULL; +} + +int __init au_hnotify_init(void) +{ + int err; + + err = -ENOMEM; + au_cachep[AuCache_HNOTIFY] = AuCache(au_hnotify); + if (au_cachep[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_cachep[AuCache_HNOTIFY]) + au_hn_destroy_cache(); +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/opts.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/opts.c @@ -0,0 +1,1677 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * mount options/flags + */ + +#include +#include /* a distribution requires */ +#include +#include "aufs.h" + +/* ---------------------------------------------------------------------- */ + +enum { + Opt_br, + Opt_add, Opt_del, Opt_mod, Opt_reorder, Opt_append, Opt_prepend, + Opt_idel, Opt_imod, Opt_ireorder, + Opt_dirwh, Opt_rdcache, Opt_rdblk, Opt_rdhash, Opt_rendir, + Opt_rdblk_def, Opt_rdhash_def, + Opt_xino, Opt_zxino, 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_lock, Opt_unlock, */ + Opt_cmd, Opt_cmd_args, + Opt_diropq_a, Opt_diropq_w, + Opt_warn_perm, Opt_nowarn_perm, + Opt_wbr_copyup, Opt_wbr_create, + Opt_refrof, Opt_norefrof, + Opt_verbose, Opt_noverbose, + Opt_sum, Opt_nosum, Opt_wsum, + 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"}, + + {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, "coo=%s"}, + {Opt_ignore_silent, "nodlgt"}, + {Opt_ignore_silent, "nodirperm1"}, + {Opt_ignore_silent, "clean_plink"}, + +#ifdef CONFIG_AUFS_SHWH + {Opt_shwh, "shwh"}, +#endif + {Opt_noshwh, "noshwh"}, + + {Opt_rendir, "rendir=%d"}, + + {Opt_refrof, "refrof"}, + {Opt_norefrof, "norefrof"}, + + {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"}, + + /* 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, struct match_token *token) +{ + while (token->pattern) { + if (token->token == val) + return token->pattern; + token++; + } + BUG(); + return "??"; +} + +/* ---------------------------------------------------------------------- */ + +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 brrattr = { + {AuBrRAttr_WH, AUFS_BRRATTR_WH}, + {0, NULL} +}; + +static match_table_t brwattr = { + {AuBrWAttr_NoLinkWH, AUFS_BRWATTR_NLWH}, + {0, NULL} +}; + +#define AuBrStr_LONGEST AUFS_BRPERM_RW "+" AUFS_BRWATTR_NLWH + +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) + 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 noinline_for_stack br_perm_val(char *perm) +{ + int val; + char *p; + substring_t args[MAX_OPT_ARGS]; + + 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; + + switch (val) { + case AuBrPerm_RO: + case AuBrPerm_RR: + val |= br_attr_val(p + 1, brrattr, args); + break; + case AuBrPerm_RW: + val |= br_attr_val(p + 1, brwattr, args); + break; + } + +out: + return val; +} + +/* Caller should free the return value */ +char *au_optstr_br_perm(int brperm) +{ + char *p, a[sizeof(AuBrStr_LONGEST)]; + int sz; + +#define SetPerm(str) do { \ + sz = sizeof(str); \ + memcpy(a, str, sz); \ + p = a + sz - 1; \ + } while (0) + +#define AppendAttr(flag, str) do { \ + if (brperm & flag) { \ + sz = sizeof(str); \ + *p++ = '+'; \ + memcpy(p, str, sz); \ + p += sz - 1; \ + } \ + } while (0) + + switch (brperm & AuBrPerm_Mask) { + case AuBrPerm_RO: + SetPerm(AUFS_BRPERM_RO); + break; + case AuBrPerm_RR: + SetPerm(AUFS_BRPERM_RR); + break; + case AuBrPerm_RW: + SetPerm(AUFS_BRPERM_RW); + break; + default: + AuDebugOn(1); + } + + AppendAttr(AuBrRAttr_WH, AUFS_BRRATTR_WH); + AppendAttr(AuBrWAttr_NoLinkWH, AUFS_BRWATTR_NLWH); + + AuDebugOn(strlen(a) >= sizeof(a)); + return kstrdup(a, GFP_NOFS); +#undef SetPerm +#undef AppendAttr +} + +/* ---------------------------------------------------------------------- */ + +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, (void *)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"}, + + {AuWbrCreate_MFSRR, "mfsrr:%d"}, + {AuWbrCreate_MFSRRV, "mfsrr:%d:%d"}, + {AuWbrCreate_PMFS, "pmfs"}, + {AuWbrCreate_PMFSV, "pmfs:%d"}, + + {-1, NULL} +}; + +/* + * cf. linux/lib/parser.c and cmdline.c + * gave up calling memparse() since it uses simple_strtoull() instead of + * kstrto...(). + */ +static int noinline_for_stack +au_match_ull(substring_t *s, unsigned long long *result) +{ + int err; + unsigned int len; + char a[32]; + + err = -ERANGE; + len = s->to - s->from; + if (len + 1 <= sizeof(a)) { + memcpy(a, s->from, len); + a[len] = '\0'; + err = kstrtoull(a, 0, result); + } + return err; +} + +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 (!au_match_ull(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: + 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: + 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, (void *)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, (void *)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 %.*s}\n", + u.xino->path, + AuDLNPair(u.xino->file->f_dentry)); + 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_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_refrof: + AuLabel(refrof); + break; + case Opt_norefrof: + AuLabel(norefrof); + 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: + AuDbg("%llu watermark\n", + u.create->mfsrr_watermark); + break; + case AuWbrCreate_MFSRRV: + 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; + 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 & MS_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_sbend(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_sbend(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_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 bend, 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); + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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_sbend(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_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_refrof: + case Opt_norefrof: + case Opt_verbose: + case Opt_noverbose: + case Opt_sum: + case Opt_nosum: + case Opt_wsum: + case Opt_rdblk_def: + case Opt_rdhash_def: + 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_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: + 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_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_refrof: + au_opt_set(sbinfo->si_mntflags, REFROF); + break; + case Opt_norefrof: + au_opt_clr(sbinfo->si_mntflags, REFROF); + 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_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; + + 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_sbend(sb) + 1; + if (opt->add.bindex < 0) + opt->add.bindex = 0; + goto add; + case Opt_prepend: + opt->add.bindex = 0; + add: + 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 bend, 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_dentry->d_parent; + root = sb->s_root; + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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; + aufs_bindex_t bindex, bend; + unsigned char do_plink, skip, do_free; + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *root; + 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 & MS_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("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("udba=*notify requires xino\n"); + + err = 0; + root = sb->s_root; + dir = root->d_inode; + do_plink = !!au_opt_test(sbinfo->si_mntflags, PLINK); + bend = au_sbend(sb); + for (bindex = 0; !err && bindex <= bend; bindex++) { + skip = 0; + h_dir = au_h_iptr(dir, bindex); + br = au_sbr(sb, bindex); + 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 (skip) + continue; + + hdir = au_hi(dir, bindex); + au_hn_imtx_lock_nested(hdir, AuLsc_I_PARENT); + if (wbr) + wbr_wh_write_lock(wbr); + err = au_wh_init(au_h_dptr(root, bindex), br, sb); + if (wbr) + wbr_wh_write_unlock(wbr); + au_hn_imtx_unlock(hdir); + + if (!err && do_free) { + kfree(wbr); + br->br_wbr = NULL; + } + } + + return err; +} + +int au_opts_mount(struct super_block *sb, struct au_opts *opts) +{ + int err; + unsigned int tmp; + aufs_bindex_t bindex, bend; + struct au_opt *opt; + struct au_opt_xino *opt_xino, xino; + struct au_sbinfo *sbinfo; + struct au_branch *br; + + 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; + + bend = au_sbend(sb); + if (unlikely(bend < 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; + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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)) { + struct inode *dir = sb->s_root->d_inode; + 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; + struct inode *dir; + struct au_opt_xino *opt_xino; + struct au_opt *opt; + struct au_sbinfo *sbinfo; + + SiMustWriteLock(sb); + + dir = sb->s_root->d_inode; + sbinfo = au_sbi(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) + 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 */ + + rerr = au_opts_verify(sb, opts->sb_flags, /*pending*/0); + if (unlikely(rerr && !err)) + err = rerr; + + 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_fset_opts(opts->flags, REFRESH); + + AuDbg("status 0x%x\n", opts->flags); + return err; +} + +/* ---------------------------------------------------------------------- */ + +unsigned int au_opt_udba(struct super_block *sb) +{ + return au_mntflags(sb) & AuOptMask_UDBA; +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/iinfo.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/iinfo.c @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * inode private data + */ + +#include "aufs.h" + +struct inode *au_h_iptr(struct inode *inode, aufs_bindex_t bindex) +{ + struct inode *h_inode; + + IiMustAnyLock(inode); + + h_inode = au_ii(inode)->ii_hinode[0 + bindex].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 = iinfo->ii_hinode + 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_bstart) + 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_ii(inode)->ii_hinode + bindex; + AuDebugOn(hinode->hi_whdentry); + hinode->hi_whdentry = h_wh; +} + +void au_update_iigen(struct inode *inode) +{ + atomic_set(&au_ii(inode)->ii_generation, au_sigen(inode->i_sb)); + /* smp_mb(); */ /* atomic_set */ +} + +/* 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, bend; + + iinfo = au_ii(inode); + if (!iinfo) + return; + + IiMustWriteLock(inode); + + if (do_put_zero && iinfo->ii_bstart >= 0) { + for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend; + bindex++) { + struct inode *h_i; + + h_i = iinfo->ii_hinode[0 + bindex].hi_inode; + if (h_i && !h_i->i_nlink) + au_set_h_iptr(inode, bindex, NULL, 0); + } + } + + iinfo->ii_bstart = -1; + iinfo->ii_bend = -1; + bend = au_sbend(inode->i_sb); + for (bindex = 0; bindex <= bend; bindex++) + if (iinfo->ii_hinode[0 + bindex].hi_inode) { + iinfo->ii_bstart = bindex; + break; + } + if (iinfo->ii_bstart >= 0) + for (bindex = bend; bindex >= iinfo->ii_bstart; bindex--) + if (iinfo->ii_hinode[0 + bindex].hi_inode) { + iinfo->ii_bend = bindex; + break; + } + AuDebugOn(iinfo->ii_bstart > iinfo->ii_bend); +} + +/* ---------------------------------------------------------------------- */ + +void au_icntnr_init_once(void *_c) +{ + struct au_icntnr *c = _c; + struct au_iinfo *iinfo = &c->iinfo; + static struct lock_class_key aufs_ii; + + au_rw_init(&iinfo->ii_rwsem); + au_rw_class(&iinfo->ii_rwsem, &aufs_ii); + inode_init_once(&c->vfs_inode); +} + +int au_iinfo_init(struct inode *inode) +{ + struct au_iinfo *iinfo; + struct super_block *sb; + int nbr, i; + + sb = inode->i_sb; + iinfo = &(container_of(inode, struct au_icntnr, vfs_inode)->iinfo); + nbr = au_sbend(sb) + 1; + if (unlikely(nbr <= 0)) + nbr = 1; + iinfo->ii_hinode = kcalloc(nbr, sizeof(*iinfo->ii_hinode), GFP_NOFS); + if (iinfo->ii_hinode) { + au_ninodes_inc(sb); + for (i = 0; i < nbr; i++) + iinfo->ii_hinode[i].hi_id = -1; + + atomic_set(&iinfo->ii_generation, au_sigen(sb)); + /* smp_mb(); */ /* atomic_set */ + iinfo->ii_bstart = -1; + iinfo->ii_bend = -1; + iinfo->ii_vdir = NULL; + return 0; + } + return -ENOMEM; +} + +int au_ii_realloc(struct au_iinfo *iinfo, int nbr) +{ + int err, sz; + struct au_hinode *hip; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + err = -ENOMEM; + sz = sizeof(*hip) * (iinfo->ii_bend + 1); + if (!sz) + sz = sizeof(*hip); + hip = au_kzrealloc(iinfo->ii_hinode, sz, sizeof(*hip) * nbr, GFP_NOFS); + if (hip) { + iinfo->ii_hinode = 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, bend; + const unsigned char unlinked = !inode->i_nlink; + + iinfo = au_ii(inode); + /* bad_inode case */ + if (!iinfo) + return; + + 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(); + } + + if (iinfo->ii_vdir) + au_vdir_free(iinfo->ii_vdir); + + bindex = iinfo->ii_bstart; + if (bindex >= 0) { + hi = iinfo->ii_hinode + bindex; + bend = iinfo->ii_bend; + while (bindex++ <= bend) { + if (hi->hi_inode) + au_hiput(hi); + hi++; + } + } + kfree(iinfo->ii_hinode); + iinfo->ii_hinode = NULL; + AuRwDestroy(&iinfo->ii_rwsem); +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/vfsub.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/vfsub.h @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * sub-routines for VFS + */ + +#ifndef __AUFS_VFSUB_H__ +#define __AUFS_VFSUB_H__ + +#ifdef __KERNEL__ + +#include +#include +#include +#include "debug.h" + +/* copied from linux/fs/internal.h */ +/* todo: BAD approach!! */ +extern struct lglock vfsmount_lock; +extern spinlock_t inode_sb_list_lock; + +/* copied from linux/fs/file_table.c */ +extern struct lglock files_lglock; +#ifdef CONFIG_SMP +/* + * These macros iterate all files on all CPUs for a given superblock. + * files_lglock must be held globally. + */ +#define do_file_list_for_each_entry(__sb, __file) \ +{ \ + int i; \ + for_each_possible_cpu(i) { \ + struct list_head *list; \ + list = per_cpu_ptr((__sb)->s_files, i); \ + list_for_each_entry((__file), list, f_u.fu_list) + +#define while_file_list_for_each_entry \ + } \ +} + +#else + +#define do_file_list_for_each_entry(__sb, __file) \ +{ \ + struct list_head *list; \ + list = &(sb)->s_files; \ + list_for_each_entry((__file), list, f_u.fu_list) + +#define while_file_list_for_each_entry \ +} +#endif + +/* ---------------------------------------------------------------------- */ + +/* lock subclass for lower inode */ +/* default MAX_LOCKDEP_SUBCLASSES(8) is not enough */ +/* reduce? gave up. */ +enum { + AuLsc_I_Begin = I_MUTEX_QUOTA, /* 4 */ + 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) MtxMustLock(&(i)->i_mutex) + +/* ---------------------------------------------------------------------- */ + +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); +} + +/* ---------------------------------------------------------------------- */ + +/* cf. i_[ug]id_read() in linux/include/fs.h */ +static inline uid_t vfsub_ia_uid(struct iattr *ia) +{ + return from_kuid(&init_user_ns, ia->ia_uid); +} + +static inline gid_t vfsub_ia_gid(struct iattr *ia) +{ + return from_kgid(&init_user_ns, ia->ia_gid); +} + +/* ---------------------------------------------------------------------- */ + +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); +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path); + +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(); +} + +/* ---------------------------------------------------------------------- */ + +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); +int vfsub_rename(struct inode *src_hdir, struct dentry *src_dentry, + struct inode *hdir, struct path *path); +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_readdir(struct file *file, filldir_t filldir, void *arg); + +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 void vfsub_file_accessed(struct file *h_file) +{ + file_accessed(h_file); + vfsub_update_h_iattr(&h_file->f_path, /*did*/NULL); /*ignore*/ +} + +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*/ +} + +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 */ +} + +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); +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); + +/* ---------------------------------------------------------------------- */ + +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; +} + +/* ---------------------------------------------------------------------- */ + +/* dirty workaround for strict type of fmode_t */ +union vfsub_fmu { + fmode_t fm; + unsigned int ui; +}; + +static inline unsigned int vfsub_fmode_to_uint(fmode_t fm) +{ + union vfsub_fmu u = { + .fm = fm + }; + + BUILD_BUG_ON(sizeof(u.fm) != sizeof(u.ui)); + + return u.ui; +} + +static inline fmode_t vfsub_uint_to_fmode(unsigned int ui) +{ + union vfsub_fmu u = { + .ui = ui + }; + + return u.fm; +} + +/* ---------------------------------------------------------------------- */ + +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); +int vfsub_notify_change(struct path *path, struct iattr *ia); +int vfsub_unlink(struct inode *dir, struct path *path, int force); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_VFSUB_H__ */ --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/vfsub.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/vfsub.c @@ -0,0 +1,777 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * sub-routines for VFS + */ + +#include +#include +#include +#include +#include "aufs.h" + +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 = vfs_getattr(h_path->mnt, h_path->dentry, &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(path->dentry->d_inode); + + 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; +} + +int vfsub_kern_path(const char *name, unsigned int flags, struct path *path) +{ + int err; + + err = kern_path(name, flags, path); + if (!err && path->dentry->d_inode) + vfsub_update_h_iattr(path, /*did*/NULL); /*ignore*/ + return err; +} + +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(parent->d_inode); + + path.dentry = lookup_one_len(name, parent, len); + if (IS_ERR(path.dentry)) + goto out; + if (path.dentry->d_inode) + 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; + + err = vfs_create(dir, path->dentry, mode, want_excl); + 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; + + err = vfs_symlink(dir, path->dentry, symname); + 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; + + err = vfs_mknod(dir, path->dentry, mode, dev); + 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) +{ + int err; + struct dentry *d; + + IMustLock(dir); + + err = au_test_nlink(src_dentry->d_inode); + 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); + 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) +{ + 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); + path->dentry = d; + if (unlikely(err)) + goto out; + + lockdep_off(); + err = vfs_rename(src_dir, src_dentry, dir, path->dentry); + 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; + + err = vfs_mkdir(dir, path->dentry, mode); + 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 && file->f_op->flush) { + if (!au_test_nfs(file->f_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_readdir(struct file *file, filldir_t filldir, void *arg) +{ + int err; + + lockdep_off(); + err = vfs_readdir(file, filldir, arg); + 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; + + h_inode = h_path->dentry->d_inode; + if (!h_file) { + err = vfsub_mnt_want_write(h_path->mnt); + if (err) + goto out; + err = inode_permission(h_inode, MAY_WRITE); + if (err) + goto out_mnt; + err = get_write_access(h_inode); + if (err) + goto out_mnt; + err = break_lease(h_inode, O_WRONLY); + if (err) + goto out_inode; + } + + 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(); + } + +out_inode: + if (!h_file) + put_write_access(h_inode); +out_mnt: + if (!h_file) + vfsub_mnt_drop_write(h_path->mnt); +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) + err = vfsub_mkdir(dir, path, mode); + 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) + err = vfsub_rmdir(dir, path); + 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; +}; + +static void call_notify_change(void *args) +{ + struct notify_change_args *a = args; + struct inode *h_inode; + + h_inode = a->path->dentry->d_inode; + IMustLock(h_inode); + + *a->errp = -EPERM; + if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) { + *a->errp = notify_change(a->path->dentry, a->ia); + 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) +{ + int err; + struct notify_change_args args = { + .errp = &err, + .path = path, + .ia = ia + }; + + call_notify_change(&args); + + return err; +} + +int vfsub_sio_notify_change(struct path *path, struct iattr *ia) +{ + int err, wkq_err; + struct notify_change_args args = { + .errp = &err, + .path = path, + .ia = ia + }; + + 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; +}; + +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) + && d->d_count == 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 = d->d_inode; + if (h_inode) + ihold(h_inode); + + lockdep_off(); + *a->errp = vfs_unlink(a->dir, d); + 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, int force) +{ + int err; + struct unlink_args args = { + .errp = &err, + .dir = dir, + .path = path + }; + + 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-lts-raring-3.8.0.orig/ubuntu/aufs/sysfs.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/sysfs.c @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * sysfs interface + */ + +#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 err; + struct path path; + struct dentry *root; + struct au_branch *br; + char *perm; + + AuDbg("b%d\n", bindex); + + err = 0; + root = sb->s_root; + di_read_lock_parent(root, !AuLock_IR); + br = au_sbr(sb, bindex); + path.mnt = br->br_mnt; + path.dentry = au_h_dptr(root, bindex); + au_seq_path(seq, &path); + di_read_unlock(root, !AuLock_IR); + perm = au_optstr_br_perm(br->br_perm); + if (perm) { + err = seq_printf(seq, "=%s\n", perm); + kfree(perm); + if (err == -1) + err = -E2BIG; + } else + err = -ENOMEM; + 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" + +/* todo: file size may exceed PAGE_SIZE */ +ssize_t sysaufs_si_show(struct kobject *kobj, struct attribute *attr, + char *buf) +{ + ssize_t err; + long l; + aufs_bindex_t bend; + 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++; + } + + bend = au_sbend(sb); + if (!strncmp(name, SysaufsBr_PREFIX, sizeof(SysaufsBr_PREFIX) - 1)) { + name += sizeof(SysaufsBr_PREFIX) - 1; + err = kstrtol(name, 10, &l); + if (!err) { + if (l <= bend) + err = sysaufs_si_br(seq, sb, (aufs_bindex_t)l); + else + err = -ENOENT; + } + goto out_seq; + } + BUG(); + +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; +} + +/* ---------------------------------------------------------------------- */ + +void sysaufs_br_init(struct au_branch *br) +{ + struct attribute *attr = &br->br_attr; + + sysfs_attr_init(attr); + attr->name = br->br_name; + attr->mode = S_IRUGO; +} + +void sysaufs_brs_del(struct super_block *sb, aufs_bindex_t bindex) +{ + struct au_branch *br; + struct kobject *kobj; + aufs_bindex_t bend; + + dbgaufs_brs_del(sb, bindex); + + if (!sysaufs_brs) + return; + + kobj = &au_sbi(sb)->si_kobj; + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + sysfs_remove_file(kobj, &br->br_attr); + } +} + +void sysaufs_brs_add(struct super_block *sb, aufs_bindex_t bindex) +{ + int err; + aufs_bindex_t bend; + struct kobject *kobj; + struct au_branch *br; + + dbgaufs_brs_add(sb, bindex); + + if (!sysaufs_brs) + return; + + kobj = &au_sbi(sb)->si_kobj; + bend = au_sbend(sb); + for (; bindex <= bend; bindex++) { + br = au_sbr(sb, bindex); + snprintf(br->br_name, sizeof(br->br_name), SysaufsBr_PREFIX + "%d", bindex); + err = sysfs_create_file(kobj, &br->br_attr); + if (unlikely(err)) + pr_warn("failed %s under sysfs(%d)\n", + br->br_name, err); + } +} --- linux-lts-raring-3.8.0.orig/ubuntu/aufs/wkq.h +++ linux-lts-raring-3.8.0/ubuntu/aufs/wkq.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * workqueue for asynchronous/super-io operations + * todo: try new credentials management scheme + */ + +#ifndef __AUFS_WKQ_H__ +#define __AUFS_WKQ_H__ + +#ifdef __KERNEL__ + +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-lts-raring-3.8.0.orig/ubuntu/aufs/branch.c +++ linux-lts-raring-3.8.0/ubuntu/aufs/branch.c @@ -0,0 +1,1169 @@ +/* + * Copyright (C) 2005-2012 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 + */ + +/* + * 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); + + if (br->br_xino.xi_file) + fput(br->br_xino.xi_file); + mutex_destroy(&br->br_xino.xi_nondir_mtx); + + AuDebugOn(atomic_read(&br->br_count)); + + 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); + } + + key = br->br_dykey; + for (i = 0; i < AuBrDynOp; i++, key++) + if (*key) + au_dy_put(*key); + else + break; + + mntput(br->br_mnt); + 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_bend + 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, bend; + + bend = au_sbend(sb); + for (bindex = 0; bindex <= bend; 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; + int err; + + err = -ENOMEM; + root = sb->s_root; + add_branch = kmalloc(sizeof(*add_branch), GFP_NOFS); + if (unlikely(!add_branch)) + goto out; + + err = au_hnotify_init_br(add_branch, perm); + if (unlikely(err)) + goto out_br; + + add_branch->br_wbr = NULL; + if (au_br_writable(perm)) { + /* may be freed separately at changing the branch permission */ + add_branch->br_wbr = kmalloc(sizeof(*add_branch->br_wbr), + GFP_NOFS); + if (unlikely(!add_branch->br_wbr)) + goto out_hnotify; + } + + err = au_sbr_realloc(au_sbi(sb), new_nbranch); + if (!err) + err = au_di_realloc(au_di(root), new_nbranch); + if (!err) + err = au_ii_realloc(au_ii(root->d_inode), new_nbranch); + if (!err) + return add_branch; /* success */ + + kfree(add_branch->br_wbr); + +out_hnotify: + au_hnotify_fin_br(add_branch); +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 bend, bindex; + struct dentry *root; + struct inode *inode, *h_inode; + + root = sb->s_root; + bend = au_sbend(sb); + if (unlikely(bend >= 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 <= bend)) { + pr_err("number of branches exceeded %s\n", add->pathname); + goto out; + } + + err = -EDOM; + if (unlikely(add->bindex < 0 || bend + 1 < add->bindex)) { + pr_err("bad index %d\n", add->bindex); + goto out; + } + + inode = add->path.dentry->d_inode; + 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; + } + + err = test_br(add->path.dentry->d_inode, add->perm, add->pathname); + if (unlikely(err)) + goto out; + + if (bend < 0) + return 0; /* success */ + + err = -EINVAL; + for (bindex = 0; bindex <= bend; 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_inode = au_h_dptr(root, 0)->d_inode; + 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, struct dentry *h_root) +{ + int err, old_perm; + aufs_bindex_t bindex; + struct mutex *h_mtx; + struct au_wbr *wbr; + struct au_hinode *hdir; + + wbr = br->br_wbr; + old_perm = br->br_perm; + br->br_perm = new_perm; + hdir = NULL; + h_mtx = NULL; + bindex = au_br_index(sb, br->br_id); + if (0 <= bindex) { + hdir = au_hi(sb->s_root->d_inode, bindex); + au_hn_imtx_lock_nested(hdir, AuLsc_I_PARENT); + } else { + h_mtx = &h_root->d_inode->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_PARENT); + } + if (!wbr) + err = au_wh_init(h_root, br, sb); + else { + wbr_wh_write_lock(wbr); + err = au_wh_init(h_root, br, sb); + wbr_wh_write_unlock(wbr); + } + if (hdir) + au_hn_imtx_unlock(hdir); + else + mutex_unlock(h_mtx); + br->br_perm = old_perm; + + if (!err && wbr && !au_br_writable(new_perm)) { + kfree(wbr); + br->br_wbr = NULL; + } + + return err; +} + +static int au_wbr_init(struct au_branch *br, struct super_block *sb, + int perm, struct path *path) +{ + int err; + struct kstatfs kst; + struct au_wbr *wbr; + struct dentry *h_dentry; + + wbr = br->br_wbr; + au_rw_init(&wbr->wbr_wh_rwsem); + memset(wbr->wbr_wh, 0, sizeof(wbr->wbr_wh)); + atomic_set(&wbr->wbr_wh_running, 0); + wbr->wbr_bytes = 0; + + /* + * a limit for rmdir/rename a dir + * cf. AUFS_MAX_NAMELEN in include/linux/aufs_type.h + */ + err = vfs_statfs(path, &kst); + if (unlikely(err)) + goto out; + err = -EINVAL; + h_dentry = path->dentry; + if (kst.f_namelen >= NAME_MAX) + err = au_br_init_wh(sb, br, perm, h_dentry); + else + pr_err("%.*s(%s), unsupported namelen %ld\n", + AuDLNPair(h_dentry), au_sbtype(h_dentry->d_sb), + kst.f_namelen); + +out: + return err; +} + +/* intialize a new branch */ +static int au_br_init(struct au_branch *br, struct super_block *sb, + struct au_opt_add *add) +{ + int err; + + err = 0; + memset(&br->br_xino, 0, sizeof(br->br_xino)); + mutex_init(&br->br_xino.xi_nondir_mtx); + br->br_perm = add->perm; + br->br_mnt = add->path.mnt; /* set first, mntget() later */ + spin_lock_init(&br->br_dykey_lock); + memset(br->br_dykey, 0, sizeof(br->br_dykey)); + atomic_set(&br->br_count, 0); + br->br_xino_upper = AUFS_XINO_TRUNC_INIT; + atomic_set(&br->br_xino_running, 0); + br->br_id = au_new_br_id(sb); + AuDebugOn(br->br_id < 0); + + if (au_br_writable(add->perm)) { + err = au_wbr_init(br, sb, add->perm, &add->path); + if (unlikely(err)) + goto out_err; + } + + if (au_opt_test(au_mntflags(sb), XINO)) { + err = au_xino_br(sb, br, add->path.dentry->d_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); + mntget(add->path.mnt); + goto out; /* success */ + +out_err: + br->br_mnt = NULL; +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 bend, + 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_bend++; + if (unlikely(bend < 0)) + sbinfo->si_bend = 0; +} + +static void au_br_do_add_hdp(struct au_dinfo *dinfo, aufs_bindex_t bindex, + aufs_bindex_t bend, aufs_bindex_t amount) +{ + struct au_hdentry *hdp; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + hdp = dinfo->di_hdentry + bindex; + memmove(hdp + 1, hdp, sizeof(*hdp) * amount); + au_h_dentry_init(hdp); + dinfo->di_bend++; + if (unlikely(bend < 0)) + dinfo->di_bstart = 0; +} + +static void au_br_do_add_hip(struct au_iinfo *iinfo, aufs_bindex_t bindex, + aufs_bindex_t bend, aufs_bindex_t amount) +{ + struct au_hinode *hip; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + hip = iinfo->ii_hinode + bindex; + memmove(hip + 1, hip, sizeof(*hip) * amount); + hip->hi_inode = NULL; + au_hn_init(hip); + iinfo->ii_bend++; + if (unlikely(bend < 0)) + iinfo->ii_bstart = 0; +} + +static void au_br_do_add(struct super_block *sb, struct dentry *h_dentry, + struct au_branch *br, aufs_bindex_t bindex) +{ + struct dentry *root; + struct inode *root_inode; + aufs_bindex_t bend, amount; + + root = sb->s_root; + root_inode = root->d_inode; + bend = au_sbend(sb); + amount = bend + 1 - bindex; + au_sbilist_lock(); + au_br_do_add_brp(au_sbi(sb), bindex, br, bend, amount); + au_br_do_add_hdp(au_di(root), bindex, bend, amount); + au_br_do_add_hip(au_ii(root_inode), bindex, bend, amount); + au_set_h_dptr(root, bindex, dget(h_dentry)); + au_set_h_iptr(root_inode, bindex, au_igrab(h_dentry->d_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 bend, add_bindex; + struct dentry *root, *h_dentry; + struct inode *root_inode; + struct au_branch *add_branch; + + root = sb->s_root; + root_inode = root->d_inode; + IMustLock(root_inode); + err = test_add(sb, add, remount); + if (unlikely(err < 0)) + goto out; + if (err) { + err = 0; + goto out; /* success */ + } + + bend = au_sbend(sb); + add_branch = au_br_alloc(sb, bend + 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; + h_dentry = add->path.dentry; + if (!remount) + au_br_do_add(sb, h_dentry, add_branch, add_bindex); + else { + sysaufs_brs_del(sb, add_bindex); + au_br_do_add(sb, h_dentry, add_branch, add_bindex); + sysaufs_brs_add(sb, add_bindex); + } + + 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, h_dentry->d_inode); + + /* + * 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_dentry->d_parent == h_dentry) + au_xino_brid_set(sb, add_branch->br_id); + +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +/* + * 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 bstart, + aufs_bindex_t bend) +{ + return (inode && !S_ISDIR(inode->i_mode)) || bstart == bend; +} + +static int au_test_dbusy(struct dentry *dentry, aufs_bindex_t bstart, + aufs_bindex_t bend) +{ + return au_test_ibusy(dentry->d_inode, bstart, bend); +} + +/* + * 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 bstart, bend; + 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(!d->d_count); + 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); */ + bstart = au_dbstart(d); + bend = au_dbend(d); + if (bstart <= bindex + && bindex <= bend + && au_h_dptr(d, bindex) + && au_test_dbusy(d, bstart, bend)) { + err = -EBUSY; + AuVerbose(verbose, "busy %.*s\n", AuDLNPair(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 bstart, bend; + + 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 (i->i_ino == AUFS_ROOT_INO) + continue; + + /* AuDbgInode(i); */ + if (au_iigen(i) == 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; + } + } + + bstart = au_ibstart(i); + bend = au_ibend(i); + if (bstart <= bindex + && bindex <= bend + && au_h_iptr(i, bindex) + && au_test_ibusy(i, bstart, bend)) { + 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(root->d_inode); + 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 void au_br_do_del_brp(struct au_sbinfo *sbinfo, + const aufs_bindex_t bindex, + const aufs_bindex_t bend) +{ + struct au_branch **brp, **p; + + AuRwMustWriteLock(&sbinfo->si_rwsem); + + brp = sbinfo->si_branch + bindex; + if (bindex < bend) + memmove(brp, brp + 1, sizeof(*brp) * (bend - bindex)); + sbinfo->si_branch[0 + bend] = NULL; + sbinfo->si_bend--; + + p = krealloc(sbinfo->si_branch, sizeof(*p) * bend, AuGFP_SBILIST); + 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 bend) +{ + struct au_hdentry *hdp, *p; + + AuRwMustWriteLock(&dinfo->di_rwsem); + + hdp = dinfo->di_hdentry; + if (bindex < bend) + memmove(hdp + bindex, hdp + bindex + 1, + sizeof(*hdp) * (bend - bindex)); + hdp[0 + bend].hd_dentry = NULL; + dinfo->di_bend--; + + p = krealloc(hdp, sizeof(*p) * bend, AuGFP_SBILIST); + 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 bend) +{ + struct au_hinode *hip, *p; + + AuRwMustWriteLock(&iinfo->ii_rwsem); + + hip = iinfo->ii_hinode + bindex; + if (bindex < bend) + memmove(hip, hip + 1, sizeof(*hip) * (bend - bindex)); + iinfo->ii_hinode[0 + bend].hi_inode = NULL; + au_hn_init(iinfo->ii_hinode + bend); + iinfo->ii_bend--; + + p = krealloc(iinfo->ii_hinode, sizeof(*p) * bend, AuGFP_SBILIST); + 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 bend; + 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 = root->d_inode; + sbinfo = au_sbi(sb); + bend = sbinfo->si_bend; + + 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, bend); + au_br_do_del_hdp(au_di(root), bindex, bend); + au_br_do_del_hip(au_ii(inode), bindex, bend); + au_sbilist_unlock(); + + dput(h_root); + iput(h_inode); + au_br_do_free(br); +} + +int au_br_del(struct super_block *sb, struct au_opt_del *del, int remount) +{ + int err, rerr, i; + unsigned int mnt_flags; + aufs_bindex_t bindex, bend, br_id; + unsigned char do_wh, verbose; + struct au_branch *br; + struct au_wbr *wbr; + + err = 0; + bindex = au_find_dbindex(sb->s_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); + bend = au_sbend(sb); + if (unlikely(!bend)) { + AuVerbose(verbose, "no more branches left\n"); + goto out; + } + br = au_sbr(sb, bindex); + i = atomic_read(&br->br_count); + if (unlikely(i)) { + AuVerbose(verbose, "%d file(s) opened\n", i); + 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(sb->s_root, bindex, verbose); + if (unlikely(err)) { + if (do_wh) + goto out_wh; + goto out; + } + + err = 0; + br_id = br->br_id; + 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(sb->s_root->d_inode, /*force*/1); + sb->s_maxbytes = au_sbr_sb(sb, 0)->s_maxbytes; + } else + au_sub_nlink(sb->s_root->d_inode, del->h_path.dentry->d_inode); + 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, del->h_path.dentry); + if (rerr) + pr_warn("failed re-creating base whiteout, %s. (%d)\n", + del->pathname, rerr); +out: + return err; +} + +/* ---------------------------------------------------------------------- */ + +static int au_ibusy(struct super_block *sb, struct aufs_ibusy __user *arg) +{ + int err; + aufs_bindex_t bstart, bend; + 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_sbend(sb))) + goto out_unlock; + + err = 0; + ibusy.h_ino = 0; /* invalid */ + inode = ilookup(sb, ibusy.ino); + if (!inode + || inode->i_ino == AUFS_ROOT_INO + || is_bad_inode(inode)) + goto out_unlock; + + ii_read_lock_child(inode); + bstart = au_ibstart(inode); + bend = au_ibend(inode); + if (bstart <= ibusy.bindex && ibusy.bindex <= bend) { + h_inode = au_h_iptr(inode, ibusy.bindex); + if (h_inode && au_test_ibusy(inode, bstart, bend)) + 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_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_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 unsigned long long au_farray_cb(void *a, + unsigned long long max __maybe_unused, + void *arg) +{ + unsigned long long n; + struct file **p, *f; + struct super_block *sb = arg; + + n = 0; + p = a; + lg_global_lock(&files_lglock); + do_file_list_for_each_entry(sb, f) { + if (au_fi(f) + && file_count(f) + && !special_file(f->f_dentry->d_inode->i_mode)) { + get_file(f); + *p++ = f; + n++; + AuDebugOn(n > max); + } + } while_file_list_for_each_entry; + lg_global_unlock(&files_lglock); + + return n; +} + +static struct file **au_farray_alloc(struct super_block *sb, + unsigned long long *max) +{ + *max = atomic_long_read(&au_sbi(sb)->si_nfiles); + return au_array_alloc(max, au_farray_cb, sb); +} + +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]); + au_array_free(a); +} + +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; + struct file *file, *hf, **array; + struct inode *inode; + 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]; + + /* AuDbg("%.*s\n", AuDLNPair(file->f_dentry)); */ + fi_read_lock(file); + if (unlikely(au_test_mmapped(file))) { + err = -EBUSY; + AuVerbose(verbose, "mmapped %.*s\n", + AuDLNPair(file->f_dentry)); + AuDbgFile(file); + FiMustNoWaiters(file); + fi_read_unlock(file); + goto out_array; + } + + inode = file->f_dentry->d_inode; + hfile = &au_fi(file)->fi_htop; + hf = hfile->hf_file; + if (!S_ISREG(inode->i_mode) + || !(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? */ + /* cf. fs/super.c:mark_files_ro() */ + /* fi_read_lock(file); */ + hfile = &au_fi(file)->fi_htop; + hf = hfile->hf_file; + /* fi_read_unlock(file); */ + spin_lock(&hf->f_lock); + hf->f_mode &= ~FMODE_WRITE; + spin_unlock(&hf->f_lock); + if (!file_check_writeable(hf)) { + file_release_write(hf); + vfsub_mnt_drop_write(hf->f_vfsmnt); + } + } + +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 path path; + struct dentry *root; + struct au_branch *br; + + 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(mod->h_root->d_inode, mod->perm, mod->path); + if (unlikely(err)) + goto out; + + br = au_sbr(sb, bindex); + if (br->br_perm == mod->perm) + return 0; /* success */ + + if (au_br_writable(br->br_perm)) { + /* remove whiteout base */ + err = au_br_init_wh(sb, br, mod->perm, mod->h_root); + if (unlikely(err)) + goto out; + + if (!au_br_writable(mod->perm)) { + /* rw --> ro, file might be mmapped */ + DiMustNoWaiters(root); + IiMustNoWaiters(root->d_inode); + 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 = kmalloc(sizeof(*br->br_wbr), + GFP_NOFS); + if (br->br_wbr) { + path.mnt = br->br_mnt; + path.dentry = mod->h_root; + rerr = au_wbr_init(br, sb, br->br_perm, + &path); + } + 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 = kmalloc(sizeof(*br->br_wbr), GFP_NOFS); + if (br->br_wbr) { + path.mnt = br->br_mnt; + path.dentry = mod->h_root; + err = au_wbr_init(br, sb, mod->perm, &path); + if (unlikely(err)) { + kfree(br->br_wbr); + br->br_wbr = NULL; + } + } + } + + if (!err) { + *do_refresh |= need_sigen_inc(br->br_perm, mod->perm); + br->br_perm = mod->perm; + } + +out: + AuTraceErr(err); + return err; +} --- linux-lts-raring-3.8.0.orig/ubuntu/alx/alx_ethtool.c +++ linux-lts-raring-3.8.0/ubuntu/alx/alx_ethtool.c @@ -0,0 +1,1802 @@ +/* + * Copyright (c) 2012 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "alx_reg.h" +#include "alx_hw.h" +#include "alx.h" + + +static int alx_get_settings(struct net_device *netdev, + struct ethtool_cmd *ecmd) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + + ecmd->supported = (SUPPORTED_10baseT_Half | + SUPPORTED_10baseT_Full | + SUPPORTED_100baseT_Half | + SUPPORTED_100baseT_Full | + SUPPORTED_Autoneg | + SUPPORTED_TP | + SUPPORTED_Pause); + if (ALX_CAP(hw, GIGA)) + ecmd->supported |= SUPPORTED_1000baseT_Full; + + ecmd->advertising = ADVERTISED_TP; + if (hw->adv_cfg & ADVERTISED_Autoneg) + ecmd->advertising |= hw->adv_cfg; + + ecmd->port = PORT_TP; + ecmd->phy_address = 0; + ecmd->autoneg = (hw->adv_cfg & ADVERTISED_Autoneg) ? + AUTONEG_ENABLE : AUTONEG_DISABLE; + ecmd->transceiver = XCVR_INTERNAL; + + if (hw->flowctrl & ALX_FC_ANEG && + hw->adv_cfg & ADVERTISED_Autoneg) { + if (hw->flowctrl & ALX_FC_RX) { + ecmd->advertising |= ADVERTISED_Pause; + if (!(hw->flowctrl & ALX_FC_TX)) + ecmd->advertising |= ADVERTISED_Asym_Pause; + } else if (hw->flowctrl & ALX_FC_TX) + ecmd->advertising |= ADVERTISED_Asym_Pause; + } + + if (hw->link_up) { + ethtool_cmd_speed_set(ecmd, hw->link_speed); + ecmd->duplex = hw->link_duplex == FULL_DUPLEX ? + DUPLEX_FULL : DUPLEX_HALF; + } else { + ethtool_cmd_speed_set(ecmd, -1); + ecmd->duplex = -1; + } + + return 0; +} + +static int alx_set_settings(struct net_device *netdev, + struct ethtool_cmd *ecmd) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + u32 adv_cfg; + int err = 0; + + while (test_and_set_bit(ALX_FLAG_RESETING, &adpt->flags)) + msleep(20); + + if (ecmd->autoneg == AUTONEG_ENABLE) { + if (ecmd->advertising & ADVERTISED_1000baseT_Half) { + dev_warn(&adpt->pdev->dev, "1000M half is invalid\n"); + ALX_FLAG_CLEAR(adpt, RESETING); + return -EINVAL; + } + adv_cfg = ecmd->advertising | ADVERTISED_Autoneg; + } else { + int speed = ethtool_cmd_speed(ecmd); + + switch (speed + ecmd->duplex) { + case SPEED_10 + DUPLEX_HALF: + adv_cfg = ADVERTISED_10baseT_Half; + break; + case SPEED_10 + DUPLEX_FULL: + adv_cfg = ADVERTISED_10baseT_Full; + break; + case SPEED_100 + DUPLEX_HALF: + adv_cfg = ADVERTISED_100baseT_Half; + break; + case SPEED_100 + DUPLEX_FULL: + adv_cfg = ADVERTISED_100baseT_Full; + break; + default: + err = -EINVAL; + break; + } + } + + if (!err) { + hw->adv_cfg = adv_cfg; + err = alx_setup_speed_duplex(hw, adv_cfg, hw->flowctrl); + if (err) { + dev_warn(&adpt->pdev->dev, + "config PHY speed/duplex failed,err=%d\n", + err); + err = -EIO; + } + } + + ALX_FLAG_CLEAR(adpt, RESETING); + + return err; +} + +static void alx_get_pauseparam(struct net_device *netdev, + struct ethtool_pauseparam *pause) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + + if (hw->flowctrl & ALX_FC_ANEG && + hw->adv_cfg & ADVERTISED_Autoneg) + pause->autoneg = AUTONEG_ENABLE; + else + pause->autoneg = AUTONEG_DISABLE; + + if (hw->flowctrl & ALX_FC_TX) + pause->tx_pause = 1; + else + pause->tx_pause = 0; + + if (hw->flowctrl & ALX_FC_RX) + pause->rx_pause = 1; + else + pause->rx_pause = 0; +} + + +static int alx_set_pauseparam(struct net_device *netdev, + struct ethtool_pauseparam *pause) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + int err = 0; + bool reconfig_phy = false; + u8 fc = 0; + + if (pause->tx_pause) + fc |= ALX_FC_TX; + if (pause->rx_pause) + fc |= ALX_FC_RX; + if (pause->autoneg) + fc |= ALX_FC_ANEG; + + while (test_and_set_bit(ALX_FLAG_RESETING, &adpt->flags)) + msleep(20); + + /* restart auto-neg for auto-mode */ + if (hw->adv_cfg & ADVERTISED_Autoneg) { + if (!((fc ^ hw->flowctrl) & ALX_FC_ANEG)) + reconfig_phy = true; + if (fc & hw->flowctrl & ALX_FC_ANEG && + (fc ^ hw->flowctrl) & (ALX_FC_RX | ALX_FC_TX)) + reconfig_phy = true; + } + + if (reconfig_phy) { + err = alx_setup_speed_duplex(hw, hw->adv_cfg, fc); + if (err) { + dev_warn(&adpt->pdev->dev, + "config PHY flow control failed,err=%d\n", + err); + err = -EIO; + } + } + + /* flow control on mac */ + if ((fc ^ hw->flowctrl) & (ALX_FC_RX | ALX_FC_TX)) + alx_cfg_mac_fc(hw, fc); + + hw->flowctrl = fc; + + ALX_FLAG_CLEAR(adpt, RESETING); + + return err; +} + +static u32 alx_get_msglevel(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + return adpt->msg_enable; +} + +static void alx_set_msglevel(struct net_device *netdev, u32 data) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + adpt->msg_enable = data; +} + +static const u32 hw_regs[] = { + ALX_DEV_CAP, ALX_DEV_CTRL, ALX_LNK_CAP, ALX_LNK_CTRL, + ALX_UE_SVRT, ALX_EFLD, ALX_SLD, ALX_PPHY_MISC1, + ALX_PPHY_MISC2, ALX_PDLL_TRNS1, + ALX_TLEXTN_STATS, ALX_EFUSE_CTRL, ALX_EFUSE_DATA, ALX_SPI_OP1, + ALX_SPI_OP2, ALX_SPI_OP3, ALX_EF_CTRL, ALX_EF_ADDR, + ALX_EF_DATA, ALX_SPI_ID, + ALX_SPI_CFG_START, ALX_PMCTRL, ALX_LTSSM_CTRL, ALX_MASTER, + ALX_MANU_TIMER, ALX_IRQ_MODU_TIMER, ALX_PHY_CTRL, ALX_MAC_STS, + ALX_MDIO, ALX_MDIO_EXTN, + ALX_PHY_STS, ALX_BIST0, ALX_BIST1, ALX_SERDES, + ALX_LED_CTRL, ALX_LED_PATN, ALX_LED_PATN2, ALX_SYSALV, + ALX_PCIERR_INST, ALX_LPI_DECISN_TIMER, + ALX_LPI_CTRL, ALX_LPI_WAIT, ALX_HRTBT_VLAN, ALX_HRTBT_CTRL, + ALX_RXPARSE, ALX_MAC_CTRL, ALX_GAP, ALX_STAD1, + ALX_LED_CTRL, ALX_HASH_TBL0, + ALX_HASH_TBL1, ALX_HALFD, ALX_DMA, ALX_WOL0, + ALX_WOL1, ALX_WOL2, ALX_WRR, ALX_HQTPD, + ALX_CPUMAP1, ALX_CPUMAP2, + ALX_MISC, ALX_RX_BASE_ADDR_HI, ALX_RFD_ADDR_LO, ALX_RFD_RING_SZ, + ALX_RFD_BUF_SZ, ALX_RRD_ADDR_LO, ALX_RRD_RING_SZ, + ALX_RFD_PIDX, ALX_RFD_CIDX, ALX_RXQ0, + ALX_RXQ1, ALX_RXQ2, ALX_RXQ3, ALX_TX_BASE_ADDR_HI, + ALX_TPD_PRI0_ADDR_LO, ALX_TPD_PRI1_ADDR_LO, + ALX_TPD_PRI2_ADDR_LO, ALX_TPD_PRI3_ADDR_LO, + ALX_TPD_PRI0_PIDX, ALX_TPD_PRI1_PIDX, + ALX_TPD_PRI2_PIDX, ALX_TPD_PRI3_PIDX, ALX_TPD_PRI0_CIDX, + ALX_TPD_PRI1_CIDX, ALX_TPD_PRI2_CIDX, ALX_TPD_PRI3_CIDX, + ALX_TPD_RING_SZ, ALX_TXQ0, ALX_TXQ1, ALX_TXQ2, + ALX_MSI_MAP_TBL1, ALX_MSI_MAP_TBL2, ALX_MSI_ID_MAP, + ALX_MSIX_MASK, ALX_MSIX_PENDING, + ALX_RSS_HASH_VAL, ALX_RSS_HASH_FLAG, ALX_RSS_BASE_CPU_NUM, +}; + +static int alx_get_regs_len(struct net_device *netdev) +{ + return (ARRAY_SIZE(hw_regs) + 0x20) * 4; +} + +static void alx_get_regs(struct net_device *netdev, + struct ethtool_regs *regs, void *buff) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + u32 *p = buff; + int i; + + regs->version = (ALX_DID(hw) << 16) | (ALX_REVID(hw) << 8) | 1; + + memset(buff, 0, (ARRAY_SIZE(hw_regs) + 0x20) * 4); + + for (i = 0; i < ARRAY_SIZE(hw_regs); i++, p++) + ALX_MEM_R32(hw, hw_regs[i], p); + + /* last 0x20 for PHY register */ + for (i = 0; i < 0x20; i++) { + alx_read_phy_reg(hw, i, (u16 *)p); + p++; + } +} + +static void alx_get_wol(struct net_device *netdev, + struct ethtool_wolinfo *wol) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + + wol->supported = WAKE_MAGIC | WAKE_PHY; + wol->wolopts = 0; + + if (hw->sleep_ctrl & ALX_SLEEP_WOL_MAGIC) + wol->wolopts |= WAKE_MAGIC; + if (hw->sleep_ctrl & ALX_SLEEP_WOL_PHY) + wol->wolopts |= WAKE_PHY; + + netif_info(adpt, wol, adpt->netdev, + "wolopts = %x\n", + wol->wolopts); +} + +static int alx_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + + if (wol->wolopts & (WAKE_ARP | WAKE_MAGICSECURE | + WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)) + return -EOPNOTSUPP; + + hw->sleep_ctrl = 0; + + if (wol->wolopts & WAKE_MAGIC) + hw->sleep_ctrl |= ALX_SLEEP_WOL_MAGIC; + if (wol->wolopts & WAKE_PHY) + hw->sleep_ctrl |= ALX_SLEEP_WOL_PHY; + + netdev_info(adpt->netdev, "wol-ctrl=%X\n", hw->sleep_ctrl); + + device_set_wakeup_enable(&adpt->pdev->dev, hw->sleep_ctrl); + + return 0; +} + +static int alx_nway_reset(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + if (netif_running(netdev)) + alx_reinit(adpt, false); + + return 0; +} + +static const char alx_gstrings_test[][ETH_GSTRING_LEN] = { + "register test (offline)", + "memory test (offline)", + "interrupt test (offline)", + "loopback test (offline)", + "link test (offline)" +}; +#define ALX_TEST_LEN (sizeof(alx_gstrings_test) / ETH_GSTRING_LEN) + +/* private flags */ +#define ALX_ETH_PF_LNK_10MH BIT(0) +#define ALX_ETH_PF_LNK_10MF BIT(1) +#define ALX_ETH_PF_LNK_100MH BIT(2) +#define ALX_ETH_PF_LNK_100MF BIT(3) +#define ALX_ETH_PF_LNK_1000MF BIT(4) +#define ALX_ETH_PF_LNK_MASK (\ + ALX_ETH_PF_LNK_10MH |\ + ALX_ETH_PF_LNK_10MF |\ + ALX_ETH_PF_LNK_100MH |\ + ALX_ETH_PF_LNK_100MF |\ + ALX_ETH_PF_LNK_1000MF) + +static const char alx_gstrings_stats[][ETH_GSTRING_LEN] = { + "rx_packets", + "rx_bcast_packets", + "rx_mcast_packets", + "rx_pause_packets", + "rx_ctrl_packets", + "rx_fcs_errors", + "rx_length_errors", + "rx_bytes", + "rx_runt_packets", + "rx_fragments", + "rx_64B_or_less_packets", + "rx_65B_to_127B_packets", + "rx_128B_to_255B_packets", + "rx_256B_to_511B_packets", + "rx_512B_to_1023B_packets", + "rx_1024B_to_1518B_packets", + "rx_1519B_to_mtu_packets", + "rx_oversize_packets", + "rx_rxf_ov_drop_packets", + "rx_rrd_ov_drop_packets", + "rx_align_errors", + "rx_bcast_bytes", + "rx_mcast_bytes", + "rx_address_errors", + "tx_packets", + "tx_bcast_packets", + "tx_mcast_packets", + "tx_pause_packets", + "tx_exc_defer_packets", + "tx_ctrl_packets", + "tx_defer_packets", + "tx_bytes", + "tx_64B_or_less_packets", + "tx_65B_to_127B_packets", + "tx_128B_to_255B_packets", + "tx_256B_to_511B_packets", + "tx_512B_to_1023B_packets", + "tx_1024B_to_1518B_packets", + "tx_1519B_to_mtu_packets", + "tx_single_collision", + "tx_multiple_collisions", + "tx_late_collision", + "tx_abort_collision", + "tx_underrun", + "tx_trd_eop", + "tx_length_errors", + "tx_trunc_packets", + "tx_bcast_bytes", + "tx_mcast_bytes", + "tx_update", +}; + +#define ALX_STATS_LEN (sizeof(alx_gstrings_stats) / ETH_GSTRING_LEN) + +static void alx_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) +{ + switch (stringset) { + case ETH_SS_TEST: + memcpy(buf, &alx_gstrings_test, sizeof(alx_gstrings_test)); + break; + case ETH_SS_STATS: + memcpy(buf, &alx_gstrings_stats, sizeof(alx_gstrings_stats)); + break; + } +} + +static int alx_get_sset_count(struct net_device *netdev, int sset) +{ + switch (sset) { + case ETH_SS_STATS: + return ALX_STATS_LEN; + case ETH_SS_TEST: + return ALX_TEST_LEN; + default: + return -ENOTSUPP; + } +} + +struct alx_reg_attr { + u16 reg; + u32 ro_mask; + u32 rw_mask; + u32 rc_mask; + u32 rst_val; + u8 rst_affect; +}; + +struct alx_reg_attr ar816x_regs_a[] = { + {0x1400, 0xffff80E0, 0x4D00, 0x0, 0x40020000, 0}, + {0x1404, 0x0, 0xffffffff, 0x0, 0x0, 1}, + {0x1408, 0x0, 0xffffffff, 0x0, 0x0, 1}, + {0x140c, 0xFFFF0000, 0x0, 0x0, 0xffff3800, 0}, + {0x1410, 0xffffffff, 0x0, 0x0, 0x0000, 0}, + {0x1414, 0x0, 0x0, 0x0, 0x0, 1}, + {0x141C, 0xfffffffe, 0x0, 0x0, 0x0, 1}, + {0x1420, 0xfffffffe, 0x0, 0x0, 0x0, 1}, + {0x1484, 0x0, 0x7f7f7f7f, 0x0, 0x60405060, 1}, + {0x1490, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1494, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1498, 0x0, 0xffff3ff, 0x0, 0x07a1f037, 1}, + {0x149C, 0xffff0000, 0xffff, 0x0, 0x600, 1}, + {0x14a0, 0x808078c0, 0x7f803f, 0x7f000700, 0x0, 1}, + {0x14a4, 0x0, 0xFFFFFFFF, 0x0, 0x0, 1}, + {0x14a8, 0xFF000000, 0x00FFFFFF, 0x0, 0x0, 1}, + {0x1540, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1544, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1550, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1560, 0xFFFFF000, 0xfff, 0x0, 0x0, 0}, + {0x1564, 0xFFFF0000, 0xffff, 0x0, 0x0, 0}, + {0x1568, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1578, 0xFFFFF000, 0xfff, 0x0, 0x0, 0}, + {0x157C, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1580, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1584, 0xFFFF0000, 0xffff, 0x0, 0x0, 0}, + {0x1588, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1590, 0xFF00, 0xFFFF00DF, 0x0, 0x01000045, 1}, + {0x1594, 0xFFFFF800, 0x7FF, 0x0, 191, 1}, + {0x15A0, 0x200E0040, 0x5FF1FFBF, 0x0, 0x40810083, 1}, + {0x15A4, 0xFFFFF000, 0xFFF, 0x0, 0x1210, 1}, + {0x15A8, 0xF000F000, 0x0FFF0FFF, 0x0, 0x02E003C0, 1}, + {0x15AC, 0xF000, 0xFFFF0FFF, 0x0, 0x0100, 1}, + {0x15C4, 0xFF000000, 0xFFFFFF, 0x0, 0x0, 1}, + {0x15C8, 0xFFFF0000, 0xFFFF, 0x0, 0x0100, 1}, + {0x15E0, 0xFFFFF000, 0xFFF, 0x0, 0x0, 1}, + {0x15F0, 0x0, 0xFFFFFFFF, 0x0, 0x0, 1}, + {0x15F4, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x15F8, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x15FC, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x1700, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1704, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1708, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x170c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1710, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1714, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1718, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x171c, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1720, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1724, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1728, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x172c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1730, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1734, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1738, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x173c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1740, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1744, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1748, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x174c, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x1750, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1754, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1758, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x175c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1760, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1764, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1768, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x176c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1770, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x1774, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1778, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x177c, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1780, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1784, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1788, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x178c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1790, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1794, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1798, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x179c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a0, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a4, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a8, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17ac, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b0, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b4, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b8, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17bc, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x17c0, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0xffff, 0, 0, 0, 0, 0}, +}; + +struct alx_reg_attr ar816x_regs_b[] = { + {0x1400, 0xffff80E0, 0x4D00, 0x0, 0x40020000, 0}, + {0x1404, 0x0, 0xffffffff, 0x0, 0x0, 1}, + {0x1408, 0x0, 0xffffffff, 0x0, 0x0, 1}, + {0x140c, 0xFFFF0000, 0x0, 0x0, 0xffff3800, 0}, + {0x1410, 0xffffffff, 0x0, 0x0, 0x0000, 0}, + {0x1414, 0x0, 0x0, 0x0, 0x0, 1}, + {0x141C, 0xfffffffe, 0x0, 0x0, 0x0, 1}, + {0x1420, 0xfffffffe, 0x0, 0x0, 0x0, 1}, + {0x1484, 0x0, 0x7f7f7f7f, 0x0, 0x60405018, 1}, + {0x1490, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1494, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1498, 0x0, 0xffff3ff, 0x0, 0x07a1f037, 1}, + {0x149C, 0xffff0000, 0xffff, 0x0, 0x600, 1}, + {0x14a0, 0x808078c0, 0x7f803f, 0x7f000700, 0x0, 1}, + {0x14a4, 0x0, 0xFFFFFFFF, 0x0, 0x0, 1}, + {0x14a8, 0xFF000000, 0x00FFFFFF, 0x0, 0x0, 1}, + {0x1540, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1544, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1550, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1560, 0xFFFFF000, 0xfff, 0x0, 0x0, 0}, + {0x1564, 0xFFFF0000, 0xffff, 0x0, 0x0, 0}, + {0x1568, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1578, 0xFFFFF000, 0xfff, 0x0, 0x0, 0}, + {0x157C, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1580, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1584, 0xFFFF0000, 0xffff, 0x0, 0x0, 0}, + {0x1588, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1590, 0xFF00, 0xFFFF00DF, 0x0, 0x01000045, 1}, + {0x1594, 0xFFFFF800, 0x7FF, 0x0, 191, 1}, + {0x15A0, 0x200E0040, 0x5FF1FFBF, 0x0, 0x40810083, 1}, + {0x15A4, 0xFFFFF000, 0xFFF, 0x0, 0x1210, 1}, + {0x15A8, 0xF000F000, 0x0FFF0FFF, 0x0, 0x02E003C0, 1}, + {0x15AC, 0xF000, 0xFFFF0FFF, 0x0, 0x0100, 1}, + {0x15C4, 0xFF000000, 0xFFFFFF, 0x0, 0x0, 1}, + {0x15C8, 0xFFFF0000, 0xFFFF, 0x0, 0x0100, 1}, + {0x15E0, 0xFFFFF000, 0xFFF, 0x0, 0x0, 1}, + {0x15F0, 0x0, 0xFFFFFFFF, 0x0, 0x0, 1}, + {0x15F4, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x15F8, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x15FC, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x1700, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1704, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1708, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x170c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1710, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1714, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1718, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x171c, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1720, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1724, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1728, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x172c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1730, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1734, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1738, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x173c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1740, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1744, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1748, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x174c, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x1750, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1754, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1758, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x175c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1760, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1764, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1768, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x176c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1770, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x1774, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1778, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x177c, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1780, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1784, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1788, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x178c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1790, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1794, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1798, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x179c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a0, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a4, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a8, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17ac, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b0, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b4, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b8, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17bc, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x17c0, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0xffff, 0, 0, 0, 0, 0}, +}; + +struct alx_reg_attr ar816x_regs_c[] = { + {0x1400, 0xffff80E0, 0x4D00, 0x0, 0x40020000, 0}, + {0x1404, 0x0, 0xffffffff, 0x0, 0x0, 1}, + {0x1408, 0x0, 0xffffffff, 0x0, 0x0, 1}, + {0x140c, 0xFFFF0000, 0x0, 0x0, 0xffff3800, 0}, + {0x1410, 0xffffffff, 0x0, 0x0, 0x0000, 0}, + {0x1414, 0x0, 0x0, 0x0, 0x0, 1}, + {0x141C, 0xfffffffe, 0x0, 0x0, 0x0, 1}, + {0x1420, 0xfffffffe, 0x0, 0x0, 0x0, 1}, + {0x1484, 0x0, 0x7f7f7f7f, 0x0, 0x60405018, 1}, + {0x1490, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1494, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1498, 0x0, 0xffff3ff, 0x0, 0x07a1f037, 1}, + {0x149C, 0xffff0000, 0xffff, 0x0, 0x600, 1}, + {0x14a0, 0x808078c0, 0x7f803f, 0x7f000700, 0x0, 1}, + {0x14a4, 0x0, 0xFFFFFFFF, 0x0, 0x0, 1}, + {0x14a8, 0xFF000000, 0x00FFFFFF, 0x0, 0x0, 1}, + {0x1540, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1544, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1550, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1560, 0xFFFFF000, 0xfff, 0x0, 0x0, 0}, + {0x1564, 0xFFFF0000, 0xffff, 0x0, 0x0, 0}, + {0x1568, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1578, 0xFFFFF000, 0xfff, 0x0, 0x0, 0}, + {0x157C, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1580, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1584, 0xFFFF0000, 0xffff, 0x0, 0x0, 0}, + {0x1588, 0x0, 0xffffffff, 0x0, 0x0, 0}, + {0x1590, 0xFF00, 0xFFFF00DF, 0x0, 0x01000045, 1}, + {0x1594, 0xFFFFF800, 0x7FF, 0x0, 191, 1}, + {0x15A0, 0x200E0040, 0x5FF1FFBF, 0x0, 0x40810083, 1}, + {0x15A4, 0xFFFFF000, 0xFFF, 0x0, 0x1210, 1}, + {0x15A8, 0xF000F000, 0x0FFF0FFF, 0x0, 0x02E009C0, 1}, + {0x15AC, 0xF000, 0xFFFF0FFF, 0x0, 0x0100, 1}, + {0x15C4, 0xFF000000, 0xFFFFFF, 0x0, 0x0, 1}, + {0x15C8, 0xFFFF0000, 0xFFFF, 0x0, 0x0100, 1}, + {0x15E0, 0xFFFFF000, 0xFFF, 0x0, 0x0, 1}, + {0x15F0, 0x0, 0xFFFFFFFF, 0x0, 0x0, 1}, + {0x15F4, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x15F8, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x15FC, 0xFFFFFFFF, 0x0, 0x0, 0x0, 1}, + {0x1700, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1704, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1708, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x170c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1710, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1714, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1718, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x171c, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1720, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1724, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1728, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x172c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1730, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1734, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1738, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x173c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1740, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1744, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1748, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x174c, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x1750, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1754, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1758, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x175c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1760, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1764, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1768, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x176c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1770, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x1774, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1778, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x177c, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x1780, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1784, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1788, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x178c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1790, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1794, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x1798, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x179c, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a0, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a4, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17a8, 0xffffffff, 0x0, 0xffffff, 0x0, 1}, + {0x17ac, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b0, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b4, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17b8, 0xffffffff, 0x0, 0xffff, 0x0, 1}, + {0x17bc, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0x17c0, 0xffffffff, 0x0, 0xffffffff, 0x0, 1}, + {0xffff, 0, 0, 0, 0, 0}, +}; + +static int alx_diag_register(struct alx_adapter *adpt, u64 *data) +{ + struct alx_hw *hw = &adpt->hw; + u8 rev = ALX_REVID(hw); + struct alx_reg_attr *preg, *oreg; + u32 val, old; + + switch (ALX_DID(hw)) { + case ALX_DEV_ID_AR8161: + case ALX_DEV_ID_AR8162: + case ALX_DEV_ID_AR8171: + case ALX_DEV_ID_AR8172: + if (rev == ALX_REV_B0) + oreg = ar816x_regs_b; + else if (rev == ALX_REV_C0) + oreg = ar816x_regs_c; + else + oreg = ar816x_regs_a; + break; + default: + /* unknow type */ + *data = 1; + return -EIO; + } + + /* issue a MAC-reset */ + ALX_MEM_W32(hw, ALX_MASTER, ALX_MASTER_DMA_MAC_RST); + msleep(50); + + /* check reset value */ + preg = oreg; + while (preg->reg != 0xffff) { + if (preg->rst_affect) { + ALX_MEM_R32(hw, preg->reg, &val); + if (val != preg->rst_val) { + netif_err(adpt, hw, adpt->netdev, + "register %X, hard-rst:%X, read-val:%X\n", + preg->reg, preg->rst_val, val); + *data = 2; + return -EIO; + } + } + preg++; + } + + /* check read-clear/read-write attribute */ + preg = oreg; + + while (preg->reg != 0xffff) { + ALX_MEM_R32(hw, preg->reg, &old); + + /* read clear */ + if (preg->rc_mask) { + u32 v2; + + msleep(20); + ALX_MEM_R32(hw, preg->reg, &v2); + if ((v2 & preg->rc_mask) != 0) { + netif_err(adpt, hw, adpt->netdev, + "register %X, RC-mask:%X, Old:%X, New:%X\n", + preg->reg, preg->rc_mask, old, v2); + *data = 3; + return -EIO; + } + } + + /* read/write */ + ALX_MEM_W32(hw, preg->reg, 0xffffffff & preg->rw_mask); + ALX_MEM_FLUSH(hw); + ALX_MEM_R32(hw, preg->reg, &val); + if ((val & preg->rw_mask) != preg->rw_mask) { + netif_err(adpt, hw, adpt->netdev, + "register %X, RW-mask:%X, val-1:%X\n", + preg->reg, preg->rw_mask, val); + *data = 4; + return -EIO; + } + ALX_MEM_W32(hw, preg->reg, 0); + ALX_MEM_FLUSH(hw); + ALX_MEM_R32(hw, preg->reg, &val); + if ((val & preg->rw_mask) != 0) { + netif_err(adpt, hw, adpt->netdev, + "register %X, RW-mask:%X, val-0:%X\n", + preg->reg, preg->rw_mask, val); + *data = 4; + return -EIO; + } + + /* restore */ + ALX_MEM_W32(hw, preg->reg, old); + + preg++; + } + + return 0; +} + +static int alx_diag_sram(struct alx_adapter *adpt, u64 *data) +{ + struct alx_hw *hw = &adpt->hw; + u32 ret[2]; + int i, err; + + err = alx_reset_mac(hw); + if (err) { + netif_err(adpt, hw, adpt->netdev, "reset_mac fail %d\n", err); + *data = 1; + goto out; + } + /* issue bist command */ + ALX_MEM_W32(hw, ALX_BIST0, ALX_BIST0_START); + ALX_MEM_W32(hw, ALX_BIST1, ALX_BIST1_START); + + /* wait for 100ms */ + ret[1] = ret[0] = 0; + for (i = 0; i < 5; i++) { + msleep(20); + ALX_MEM_R32(hw, ALX_BIST0, &ret[0]); + ALX_MEM_R32(hw, ALX_BIST1, &ret[1]); + if (ret[0] & ALX_BIST0_START || ret[1] & ALX_BIST1_START) + continue; + else + break; + } + + for (i = 0; i < 2; i++) { + if (ret[i] & ALX_BIST0_START) { + netif_err(adpt, hw, adpt->netdev, + "sram(%d) bist not complete(%X)!\n", + i, ret[i]); + *data = 2; + err = -EIO; + goto out; + } + if (ret[i] & ALX_BIST0_FAIL) { + netif_err(adpt, hw, adpt->netdev, + "sram(%d) bist fail(%X)!\n", + i, ret[i]); + *data = 3; + err = -EIO; + goto out; + } + } +out: + return err; +} + +static int alx_diag_reset(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + int err; + + alx_reset_pcie(hw); + alx_reset_phy(hw, !hw->hib_patch); + err = alx_reset_mac(hw); + if (!err) + err = alx_setup_speed_duplex(hw, hw->adv_cfg, hw->flowctrl); + + if (err) { + netif_err(adpt, hw, adpt->netdev, "alx_diag_reset err %X\n", + err); + } + + return err; +} + +static int alx_diag_link(struct alx_adapter *adpt, u64 *data) +{ + struct alx_hw *hw = &adpt->hw; + u32 flags, ethadv; + u16 speed; + u8 fc; + int i, err; + + ethadv = ADVERTISED_Autoneg; + flags = adpt->eth_pflags & ALX_ETH_PF_LNK_MASK; + if (flags == 0) + flags = ALX_ETH_PF_LNK_MASK; + if (flags & ALX_ETH_PF_LNK_10MH) + ethadv |= ADVERTISED_10baseT_Half; + if (flags & ALX_ETH_PF_LNK_10MF) + ethadv |= ADVERTISED_10baseT_Full; + if (flags & ALX_ETH_PF_LNK_100MH) + ethadv |= ADVERTISED_100baseT_Half; + if (flags & ALX_ETH_PF_LNK_100MF) + ethadv |= ADVERTISED_100baseT_Full; + if (flags & ALX_ETH_PF_LNK_1000MF) + ethadv |= ADVERTISED_1000baseT_Full; + + fc = ALX_FC_ANEG | ALX_FC_RX | ALX_FC_TX; + + alx_reset_phy(hw, !hw->hib_patch); + err = alx_setup_speed_duplex(hw, ethadv, fc); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "config PHY speed/duplex failed, adv=%X,err=%d\n", + ethadv, err); + *data = 1; + goto out; + } + + /* wait for linkup */ + for (i = 0; i < ALX_MAX_SETUP_LNK_CYCLE; i++) { + bool link_up; + + msleep(100); + err = alx_get_phy_link(hw, &link_up, &speed); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "get PHY speed/duplex failed,err=%d\n", + err); + *data = 2; + goto out; + } + if (link_up) + break; + } + if (i == ALX_MAX_SETUP_LNK_CYCLE) { + err = ALX_LINK_TIMEOUT; + netif_err(adpt, hw, adpt->netdev, + "get PHY speed/duplex timeout.\n"); + *data = 3; + goto out; + } + + netif_info(adpt, hw, adpt->netdev, "link:%s\n", speed_desc(speed)); + +out: + return err; +} + +static irqreturn_t alx_diag_msix_isr(int irq, void *data) +{ + struct alx_adapter *adpt = data; + struct alx_hw *hw = &adpt->hw; + u32 intr; + int i, vect = -1; + + for (i = 0; i < adpt->nr_vec; i++) + if (irq == adpt->msix_ent[i].vector) { + vect = i; + break; + } + if (vect == -1) { + netdev_err(adpt->netdev, "vector not found irq=%d\n", irq); + goto err_out; + } + if (adpt->eth_diag_vect != vect) { + netdev_err(adpt->netdev, "wrong msix interrupt, irq=%d\n", irq); + goto err_out; + } + + alx_mask_msix(hw, vect, true); + + ALX_MEM_R32(hw, ALX_ISR, &intr); + ALX_MEM_W32(hw, ALX_ISR, intr); + + alx_mask_msix(hw, vect, false); + + adpt->eth_diag_cnt++; + return IRQ_HANDLED; + +err_out: + + ALX_MEM_W32(hw, ALX_IMR, 0); + return IRQ_HANDLED; +} + +static irqreturn_t alx_diag_msi_isr(int irq, void *data) +{ + struct alx_adapter *adpt = data; + struct alx_hw *hw = &adpt->hw; + u32 intr; + + ALX_MEM_R32(hw, ALX_ISR, &intr); + ALX_MEM_W32(hw, ALX_ISR, intr | ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_ISR, 0); + + if (intr & ALX_ISR_MANU) + adpt->eth_diag_cnt++; + + return IRQ_HANDLED; +} + +static irqreturn_t alx_diag_intx_isr(int irq, void *data) +{ + struct alx_adapter *adpt = data; + struct alx_hw *hw = &adpt->hw; + u32 intr; + + /* read interrupt status */ + ALX_MEM_R32(hw, ALX_ISR, &intr); + if (intr & ALX_ISR_DIS) + return IRQ_NONE; + + ALX_MEM_W32(hw, ALX_ISR, intr | ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_ISR, 0); + + if (intr & ALX_ISR_MANU) + adpt->eth_diag_cnt++; + + return IRQ_HANDLED; +} + +static int alx_diag_msix(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + char irq_lbl[IFNAMSIZ]; + int test_vect, i = 0, err = 0; + u32 val; + + alx_init_intr(adpt); + if (!ALX_FLAG(adpt, USING_MSIX)) + goto out; + + ALX_MEM_W32(hw, ALX_MSI_RETRANS_TIMER, + FIELDX(ALX_MSI_RETRANS_TM, 100)); + ALX_MEM_W32(hw, ALX_MSI_ID_MAP, 0); + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, ALX_ISR_MANU); + + for (i = 0; i < adpt->nr_vec; i++) { + sprintf(irq_lbl, "%s-test-%d", adpt->netdev->name, i); + err = request_irq(adpt->msix_ent[i].vector, alx_diag_msix_isr, + 0, irq_lbl, adpt); + if (err) + goto out; + } + + for (test_vect = 0; test_vect < adpt->nr_vec; test_vect++) { + u32 tbl[2]; + u32 other_vec = test_vect + 1; + + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + + if (other_vec >= adpt->nr_vec) + other_vec = 0; + other_vec |= other_vec << 4; + other_vec |= other_vec << 8; + other_vec |= other_vec << 16; + tbl[1] = other_vec; + tbl[0] = (other_vec & 0x0FFFFFFF) | ((u32)test_vect << 28); + ALX_MEM_W32(hw, ALX_MSI_MAP_TBL1, tbl[0]); + ALX_MEM_W32(hw, ALX_MSI_MAP_TBL2, tbl[1]); + ALX_MEM_W32(hw, ALX_ISR, 0); + ALX_MEM_FLUSH(hw); + + adpt->eth_diag_vect = test_vect; + adpt->eth_diag_cnt = 0; + /* issue a manual interrupt */ + ALX_MEM_R32(hw, ALX_MASTER, &val); + val |= ALX_MASTER_MANU_INT; + ALX_MEM_W32(hw, ALX_MASTER, val); + + /* wait for 50ms */ + msleep(50); + if (adpt->eth_diag_cnt != 1) { + err = -EIO; + goto out; + } + } + +out: + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, 0); + for (i--; i >= 0; i--) { + synchronize_irq(adpt->msix_ent[i].vector); + free_irq(adpt->msix_ent[i].vector, adpt); + } + alx_disable_advanced_intr(adpt); + + return err; +} + + +static int alx_diag_msi(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + struct pci_dev *pdev = adpt->pdev; + unsigned long cap = hw->capability; + u32 val; + bool irq_installed = false; + int err = 0; + + ALX_CAP_CLEAR(hw, MSIX); + alx_init_intr(adpt); + if (!ALX_FLAG(adpt, USING_MSI)) + goto out; + + pci_disable_msix(pdev); + ALX_MEM_W32(hw, ALX_MSI_RETRANS_TIMER, + FIELDX(ALX_MSI_RETRANS_TM, 100) | ALX_MSI_MASK_SEL_LINE); + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, ALX_ISR_MANU); + err = request_irq(pdev->irq, alx_diag_msi_isr, 0, + adpt->netdev->name, adpt); + if (err) + goto out; + + irq_installed = true; + adpt->eth_diag_cnt = 0; + ALX_MEM_W32(hw, ALX_ISR, 0); + ALX_MEM_FLUSH(hw); + ALX_MEM_R32(hw, ALX_MASTER, &val); + val |= ALX_MASTER_MANU_INT; + ALX_MEM_W32(hw, ALX_MASTER, val); + + /* wait for 50ms */ + msleep(50); + if (adpt->eth_diag_cnt != 1) { + err = -EIO; + goto out; + } + +out: + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, 0); + if (irq_installed) { + synchronize_irq(pdev->irq); + free_irq(pdev->irq, adpt); + } + alx_disable_advanced_intr(adpt); + hw->capability = cap; + + return err; +} + +static int alx_diag_intx(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + struct pci_dev *pdev = adpt->pdev; + u32 val; + bool irq_installed = false; + int err = 0; + + pci_disable_msix(pdev); + pci_disable_msi(pdev); + ALX_MEM_W32(hw, ALX_MSI_RETRANS_TIMER, 0); + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, ALX_ISR_MANU); + err = request_irq(pdev->irq, alx_diag_intx_isr, IRQF_SHARED, + adpt->netdev->name, adpt); + if (err) + goto out; + + irq_installed = true; + adpt->eth_diag_cnt = 0; + ALX_MEM_W32(hw, ALX_ISR, 0); + ALX_MEM_FLUSH(hw); + ALX_MEM_R32(hw, ALX_MASTER, &val); + val |= ALX_MASTER_MANU_INT; + ALX_MEM_W32(hw, ALX_MASTER, val); + + /* wait for 50ms */ + msleep(50); + if (adpt->eth_diag_cnt != 1) { + err = -EIO; + goto out; + } + +out: + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, 0); + if (irq_installed) { + synchronize_irq(pdev->irq); + free_irq(pdev->irq, adpt); + } + alx_disable_advanced_intr(adpt); + + return err; +} + +static int alx_diag_interrupt(struct alx_adapter *adpt, u64 *data) +{ + int err; + + err = alx_diag_msix(adpt); + if (err) { + *data = 1; + goto out; + } + err = alx_diag_msi(adpt); + if (err) { + *data = 2; + goto out; + } + err = alx_diag_intx(adpt); + if (err) { + *data = 3; + goto out; + } + +out: + return err; +} + +static int alx_diag_pkt_len[] = {36, 512, 2048}; +static u8 alx_tso_pkt_hdr[] = { +0x08, 0x00, +0x45, 0x00, 0x00, 0x00, +0x00, 0x00, 0x40, 0x00, +0x40, 0x06, 0x00, 0x00, +0xc0, 0xa8, 0x64, 0x0A, +0xc0, 0xa8, 0x64, 0x0B, +0x0d, 0x00, 0xe0, 0x00, +0x00, 0x00, 0x01, 0x00, +0x00, 0x00, 0x02, 0x00, +0x80, 0x10, 0x10, 0x00, +0x14, 0x09, 0x00, 0x00, +0x08, 0x0a, 0x11, 0x22, +0x33, 0x44, 0x55, 0x66, +0x77, 0x88, 0x01, 0x00, +}; +#define ALX_TSO_IP_HDR_LEN 20 +#define ALX_TSO_IP_OPT_LEN 0 +#define ALX_TSO_TCP_HDR_LEN 20 +#define ALX_TSO_TCP_OPT_LEN 12 + +static void alx_diag_build_pkt(struct sk_buff *skb, u8 *dest_addr, + int seq, bool lso) +{ + struct iphdr *iph; + struct tcphdr *tcph; + int offset; + u8 *pkt_data; + + pkt_data = skb->data; + memcpy(pkt_data, dest_addr, 6); + memset(pkt_data + 6, 0x0, 6); + offset = 2 * ETH_ALEN; + + if (lso) { + iph = (struct iphdr *)&pkt_data[ETH_HLEN]; + offset = ETH_HLEN + ALX_TSO_IP_HDR_LEN + ALX_TSO_IP_OPT_LEN; + tcph = (struct tcphdr *)&pkt_data[offset]; + memcpy(pkt_data + ETH_ALEN * 2, + alx_tso_pkt_hdr, sizeof(alx_tso_pkt_hdr)); + iph->tot_len = htons(skb->len - ETH_HLEN); + iph->check = 0; + tcph->check = ~csum_tcpudp_magic( + iph->saddr, + iph->daddr, + 0, IPPROTO_TCP, 0); + offset = ETH_ALEN * 2 + sizeof(alx_tso_pkt_hdr); + } else { + *(u16 *)&pkt_data[offset] = htons((u16)(skb->len - offset)); + offset += 2; + } + + *(u32 *)&pkt_data[offset] = (u32)seq; + offset += 4; + *(u16 *)&pkt_data[offset] = (u16)skb->len; + for (offset += 2; offset < skb->len; offset++) + pkt_data[offset] = (u8)(offset & 0xFF); +} + +static void alx_diag_rss_shift_key(u8 *pkey, int nkey) +{ + int len = nkey; + int i; + u8 carry = 0; + + for (i = len - 1; i >= 0; i--) { + if (pkey[i] & 0x80) { + pkey[i] = (pkey[i] << 1) | carry; + carry = 1; + } else { + pkey[i] = (pkey[i] << 1) | carry; + carry = 0; + } + } +} + +static int alx_diag_pkt_to_rxq(struct alx_adapter *adpt, struct sk_buff *skb) +{ + struct alx_hw *hw = &adpt->hw; + struct iphdr *iph; + struct tcphdr *tcph; + int i, j, que; + u8 hash_input[12], key[40]; + u32 hash; + + if (!ALX_CAP(hw, RSS) || ntohs(ETH_P_IP) != skb->data[ETH_ALEN * 2]) + return 0; + + iph = (struct iphdr *)&skb->data[ETH_HLEN]; + i = ETH_HLEN + iph->ihl * 4; + tcph = (struct tcphdr *)&skb->data[i]; + *(u32 *)&hash_input[0] = ntohl(be32_to_cpu(iph->saddr)); + *(u32 *)&hash_input[4] = ntohl(be32_to_cpu(iph->daddr)); + *(u16 *)&hash_input[8] = ntohs(be16_to_cpu(tcph->source)); + *(u16 *)&hash_input[10] = ntohs(be16_to_cpu(tcph->dest)); + + /* calcu hash */ + hash = 0; + memcpy(key, hw->rss_key, 40); + for (i = 0; i < 12; i++) { + for (j = 7; j >= 0; j--) { + if (hash_input[i] & (u8)(1 << j)) + hash ^= swab32(*(u32 *)key); + alx_diag_rss_shift_key(key, 40); + } + } + hash &= (hw->rss_idt_size - 1); + i = (int)(hash >> 3); + j = (int)(hash & 7); + que = (int)(hw->rss_idt[i] >> (j * 4) & 0xF); + + return que; +} + +static int alx_diag_rx_pkt(struct alx_adapter *adpt, int rx_qidx, + struct sk_buff **ppskb) +{ + struct alx_rx_queue *rxq; + struct rrd_desc *rrd; + struct alx_buffer *rxb; + struct sk_buff *skb; + u16 length; + int qnum; + + rxq = alx_hw_rxq(adpt->qnapi[rx_qidx]->rxq); + + rrd = rxq->rrd_hdr + rxq->rrd_cidx; + if (!(rrd->word3 & (1 << RRD_UPDATED_SHIFT))) + return 1; + + rrd->word3 &= ~(1 << RRD_UPDATED_SHIFT); + if (unlikely(FIELD_GETX(rrd->word0, RRD_SI) != rxq->cidx || + FIELD_GETX(rrd->word0, RRD_NOR) != 1)) { + netif_err(adpt, rx_err, adpt->netdev, + "wrong SI/NOR packet! rrd->word0= %08x\n", + rrd->word0); + return -1; + } + rxb = rxq->bf_info + rxq->cidx; + dma_unmap_single(rxq->dev, + dma_unmap_addr(rxb, dma), + dma_unmap_len(rxb, size), + DMA_FROM_DEVICE); + dma_unmap_len_set(rxb, size, 0); + skb = rxb->skb; + rxb->skb = NULL; + + if (unlikely(rrd->word3 & (1 << RRD_ERR_RES_SHIFT) || + rrd->word3 & (1 << RRD_ERR_LEN_SHIFT))) { + netif_err(adpt, rx_err, adpt->netdev, + "wrong packet! rrd->word3 is %08x\n", + rrd->word3); + rrd->word3 = 0; + return -2; + } + length = FIELD_GETX(rrd->word3, RRD_PKTLEN) - ETH_FCS_LEN; + skb_put(skb, length); + switch (FIELD_GETX(rrd->word2, RRD_PID)) { + case RRD_PID_IPV6UDP: + case RRD_PID_IPV4UDP: + case RRD_PID_IPV4TCP: + case RRD_PID_IPV6TCP: + if (rrd->word3 & ((1 << RRD_ERR_L4_SHIFT) | + (1 << RRD_ERR_IPV4_SHIFT))) { + netif_err(adpt, rx_err, adpt->netdev, + "rx-chksum error, w2=%X\n", + rrd->word2); + return -3; + } + skb->ip_summed = CHECKSUM_UNNECESSARY; + break; + } + qnum = FIELD_GETX(rrd->word2, RRD_RSSQ) % adpt->nr_rxq; + if (rx_qidx != qnum) { + netif_err(adpt, rx_err, adpt->netdev, + "rx Q-number is wrong (%d:%d), hash=%X,w2=%X\n", + rx_qidx, qnum, rrd->rss_hash, rrd->word2); + return -4; + } + + if (++rxq->cidx == rxq->count) + rxq->cidx = 0; + if (++rxq->rrd_cidx == rxq->count) + rxq->rrd_cidx = 0; + + alx_alloc_rxring_buf(adpt, rxq); + + *ppskb = skb; + return 0; +} + +static int alx_diag_cmp_pkts(struct sk_buff *tx_skb, struct sk_buff *rx_skb, + int mss, int seg_idx) +{ + int cmp_offs, cmp_len; + int hdr_len, tx_datalen; + + if (mss == 0) { + if (rx_skb->len < tx_skb->len || + memcmp(tx_skb->data, rx_skb->data, tx_skb->len)) + return -EIO; + return 0; + } + /* LSO */ + hdr_len = ETH_HLEN + ALX_TSO_IP_HDR_LEN + ALX_TSO_IP_OPT_LEN + + ALX_TSO_TCP_HDR_LEN + ALX_TSO_TCP_OPT_LEN; + tx_datalen = tx_skb->len - hdr_len; + cmp_offs = hdr_len + mss * seg_idx; + cmp_len = tx_skb->len - cmp_offs; + if (cmp_len > mss) + cmp_len = mss; + if (cmp_len > tx_skb->len) + return -EIO; + + return memcmp(&tx_skb->data[cmp_offs], + &rx_skb->data[hdr_len], + cmp_len); +} + +static int alx_diag_lpbk_run_packets(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + struct sk_buff *tx_skb, *rx_skb; + int i, j, pkt_len, max_len, mss; + struct alx_tx_queue *txq; + int q_idx, seg_idx, nr_pkts; + struct tpd_desc *tpd; + dma_addr_t dma; + int err; + + max_len = hw->mtu + ETH_HLEN; + for (i = 0; i < 1000; i++) { + pkt_len = alx_diag_pkt_len[i % ARRAY_SIZE(alx_diag_pkt_len)]; + mss = 0; + nr_pkts = 1; + if (pkt_len > max_len) { + mss = max_len - ETH_ALEN * 2 - sizeof(alx_tso_pkt_hdr); + if (mss < 0) { + mss = 0; + pkt_len = max_len; + } else { + nr_pkts = DIV_ROUND_UP(pkt_len - ETH_ALEN * 2 - + sizeof(alx_tso_pkt_hdr), mss); + } + } + tx_skb = netdev_alloc_skb(adpt->netdev, pkt_len); + if (!tx_skb) + return -ENOMEM; + skb_put(tx_skb, pkt_len); + alx_diag_build_pkt(tx_skb, hw->mac_addr, i, mss != 0); + dma = dma_map_single(&adpt->pdev->dev, tx_skb->data, pkt_len, + DMA_TO_DEVICE); + if (dma_mapping_error(&adpt->pdev->dev, dma)) { + dev_kfree_skb(tx_skb); + return -EIO; + } + + txq = adpt->qnapi[i % adpt->nr_txq]->txq; + tpd = txq->tpd_hdr + txq->pidx; + memset(tpd, 0, sizeof(struct tpd_desc)); + + if (mss) { + tpd->word1 |= 1 << TPD_IPV4_SHIFT; + tpd->word1 |= 1 << TPD_LSO_EN_SHIFT; + tpd->word1 |= FIELDX(TPD_MSS, mss); + tpd->word1 |= FIELDX(TPD_L4HDROFFSET, + ETH_HLEN + + ALX_TSO_IP_HDR_LEN + + ALX_TSO_IP_OPT_LEN); + } + tpd->adrl.addr = cpu_to_le64(dma); + FIELD_SET32(tpd->word0, TPD_BUFLEN, pkt_len); + tpd->word1 |= 1 << TPD_EOP_SHIFT; + + if (++txq->pidx == txq->count) + txq->pidx = 0; + wmb(); + ALX_MEM_W16(hw, txq->p_reg, txq->pidx); + + /* wait packet loopbacked. */ + q_idx = alx_diag_pkt_to_rxq(adpt, tx_skb); + seg_idx = 0; + + for (j = 0; j < 500 && nr_pkts > 0; j++) { + udelay(100); + err = alx_diag_rx_pkt(adpt, q_idx, &rx_skb); + if (err > 0) + continue; + if (err < 0) { + err = -EIO; + goto out; + } + + /* got 1 packet/segment, compare */ + err = alx_diag_cmp_pkts(tx_skb, rx_skb, mss, seg_idx); + dev_kfree_skb(rx_skb); + if (err) { + err = -EIO; + goto out; + } + seg_idx++; + nr_pkts--; + } + if (err) { + err = -EIO; + goto out; + } + dev_kfree_skb(tx_skb); + } + + return 0; + +out: + dma_unmap_single(&adpt->pdev->dev, dma, tx_skb->len, DMA_TO_DEVICE); + dev_kfree_skb(tx_skb); + return err; +} + +enum ALX_LPBK_MODE { + ALX_LPBK_MAC = 0, + ALX_LPBK_PHY, +}; +static int alx_diag_speed[] = {SPEED_1000, SPEED_100, SPEED_10}; + +static int alx_diag_lpbk_init_hw(struct alx_adapter *adpt, int mode, int speed) +{ + struct alx_hw *hw = &adpt->hw; + int i, err; + u32 val; + + alx_reset_pcie(hw); + alx_reset_phy(hw, false); + err = alx_reset_mac(hw); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "loopback: reset mac fail, err=%d\n", err); + goto err_hw; + } + hw->rx_ctrl |= ALX_MAC_CTRL_LPBACK_EN | + ALX_MAC_CTRL_DBG_EN; + + /* PHY configuration */ + if (hw->is_fpga) { + if (mode == ALX_LPBK_MAC) + goto cfg_hw; + netif_err(adpt, hw, adpt->netdev, + "loopback: FPGA not support PHY external lpbk!\n"); + goto err_hw; + } + err = alx_write_phy_reg(hw, 16, 0x0800); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "loopback: fix channel, err=%d\n", err); + goto err_hw; + } + switch (speed) { + case SPEED_1000: + alx_write_phy_dbg(hw, 0x11, 0x5553); + alx_write_phy_reg(hw, MII_BMCR, 0x8140); + break; + case SPEED_100: + alx_write_phy_reg(hw, MII_BMCR, 0xA100); + break; + default: + alx_write_phy_reg(hw, MII_BMCR, 0x8100); + break; + } + msleep(100); + + if (mode == ALX_LPBK_PHY) { + u16 spd; + bool linkup; + + /* wait for link */ + for (i = 0; i < 50; i++) { + msleep(100); + err = alx_get_phy_link(hw, &linkup, &spd); + if (err) + goto err_hw; + if (linkup) + break; + } + if (!linkup) { + netif_err(adpt, hw, adpt->netdev, + "no link, check your External-Loopback-Connector !\n"); + goto err_hw; + } + hw->rx_ctrl &= ~ALX_MAC_CTRL_LPBACK_EN; + } + +cfg_hw: + alx_init_intr(adpt); + alx_init_def_rss_idt(adpt); + err = alx_setup_all_ring_resources(adpt); + if (err) + goto out; + alx_configure(adpt); + /* disable clk gate for loopback */ + ALX_MEM_W32(hw, ALX_CLK_GATE, 0); + /* disable PLL clk switch for loopback */ + ALX_MEM_R32(hw, ALX_PHY_CTRL, &val); + ALX_MEM_W32(hw, ALX_PHY_CTRL, val | ALX_PHY_CTRL_PLL_ON); + hw->link_duplex = FULL_DUPLEX; + hw->link_speed = speed; + hw->link_up = true; + alx_enable_aspm(hw, false, false); + alx_start_mac(hw); + goto out; +err_hw: + err = -EIO; +out: + return err; +} + +static void alx_diag_lpbk_deinit_hw(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + u32 val; + + hw->link_up = false; + hw->link_speed = SPEED_0; + alx_reset_mac(hw); + hw->rx_ctrl &= ~(ALX_MAC_CTRL_LPBACK_EN | ALX_MAC_CTRL_DBG_EN); + alx_enable_aspm(hw, false, false); + alx_free_all_ring_resources(adpt); + alx_disable_advanced_intr(adpt); + /* enable PLL clk switch for loopback */ + ALX_MEM_R32(hw, ALX_PHY_CTRL, &val); + ALX_MEM_W32(hw, ALX_PHY_CTRL, val | ALX_PHY_CTRL_PLL_ON); +} + +static int alx_diag_loopback(struct alx_adapter *adpt, u64 *data, bool phy_lpbk) +{ + struct alx_hw *hw = &adpt->hw; + int i, err; + + if (hw->is_fpga && phy_lpbk) + return 0; + + for (i = 0; i < ARRAY_SIZE(alx_diag_speed); i++) { + err = alx_diag_lpbk_init_hw( + adpt, + phy_lpbk ? ALX_LPBK_PHY : ALX_LPBK_MAC, + alx_diag_speed[i]); + if (err) { + *data = i + 1; + goto out; + } + err = alx_diag_lpbk_run_packets(adpt); + if (err) { + *data = i + 10; + goto out; + } + alx_diag_lpbk_deinit_hw(adpt); + } +out: + if (err) + alx_diag_lpbk_deinit_hw(adpt); + + return err; +} + +static void alx_self_test(struct net_device *netdev, + struct ethtool_test *etest, + u64 *data) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + bool if_running = netif_running(netdev); + bool phy_lpback = etest->flags & ETH_TEST_FL_EXTERNAL_LB; + + ALX_FLAG_SET(adpt, TESTING); + memset(data, 0, sizeof(u64) * ALX_TEST_LEN); + + if (if_running) + dev_close(netdev); + + if (etest->flags == ETH_TEST_FL_OFFLINE) { + netif_info(adpt, hw, adpt->netdev, "offline test start...\n"); + + if (alx_diag_register(adpt, &data[0])) + etest->flags |= ETH_TEST_FL_FAILED; + + if (alx_diag_sram(adpt, &data[1])) + etest->flags |= ETH_TEST_FL_FAILED; + + if (alx_diag_interrupt(adpt, &data[2])) + etest->flags |= ETH_TEST_FL_FAILED; + + if (phy_lpback) + etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; + if (alx_diag_loopback(adpt, &data[3], phy_lpback)) + etest->flags |= ETH_TEST_FL_FAILED; + + } else { + netif_info(adpt, hw, adpt->netdev, "online test start...\n"); + + if (alx_diag_link(adpt, &data[4])) + etest->flags |= ETH_TEST_FL_FAILED; + } + + ALX_FLAG_CLEAR(adpt, TESTING); + alx_diag_reset(adpt); + + if (if_running) + dev_open(netdev); +} + +static void alx_get_ethtool_stats(struct net_device *netdev, + struct ethtool_stats *estats, u64 *data) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + + spin_lock(&adpt->smb_lock); + + __alx_update_hw_stats(hw); + memcpy(data, &hw->stats, sizeof(hw->stats)); + + spin_unlock(&adpt->smb_lock); +} + +static u32 alx_get_priv_flags(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + return adpt->eth_pflags; +} + +static int alx_set_priv_flags(struct net_device *netdev, u32 flags) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + adpt->eth_pflags = flags; + + return 0; +} + +static void alx_get_drvinfo(struct net_device *netdev, + struct ethtool_drvinfo *drvinfo) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + strlcpy(drvinfo->driver, alx_drv_name, sizeof(drvinfo->driver)); + strlcpy(drvinfo->version, alx_drv_version, sizeof(drvinfo->version)); + strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version)); + strlcpy(drvinfo->bus_info, pci_name(adpt->pdev), + sizeof(drvinfo->bus_info)); + drvinfo->n_stats = ALX_STATS_LEN; + drvinfo->testinfo_len = ALX_TEST_LEN; + drvinfo->n_priv_flags = 5; + drvinfo->regdump_len = alx_get_regs_len(netdev); + drvinfo->eedump_len = 0; +} + +static const struct ethtool_ops alx_ethtool_ops = { + .get_settings = alx_get_settings, + .set_settings = alx_set_settings, + .get_pauseparam = alx_get_pauseparam, + .set_pauseparam = alx_set_pauseparam, + .get_drvinfo = alx_get_drvinfo, + .get_regs_len = alx_get_regs_len, + .get_regs = alx_get_regs, + .get_wol = alx_get_wol, + .set_wol = alx_set_wol, + .get_msglevel = alx_get_msglevel, + .set_msglevel = alx_set_msglevel, + .nway_reset = alx_nway_reset, + .get_link = ethtool_op_get_link, + .get_strings = alx_get_strings, + .get_sset_count = alx_get_sset_count, + .get_ethtool_stats = alx_get_ethtool_stats, + .self_test = alx_self_test, + .get_priv_flags = alx_get_priv_flags, + .set_priv_flags = alx_set_priv_flags, +}; + +void alx_set_ethtool_ops(struct net_device *dev) +{ + SET_ETHTOOL_OPS(dev, &alx_ethtool_ops); +} + --- linux-lts-raring-3.8.0.orig/ubuntu/alx/alx_reg.h +++ linux-lts-raring-3.8.0/ubuntu/alx/alx_reg.h @@ -0,0 +1,2295 @@ +/* + * Copyright (c) 2012 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + */ + +#ifndef ALX_REG_H +#define ALX_REG_H + +/**********************************************************************/ +/* following registers are mapped to both pci config and memory space */ +/**********************************************************************/ + +#define ALX_VENDOR_ID PCI_VENDOR_ID_ATTANSIC + +/* pci dev-ids */ +#define ALX_DEV_ID_AR8161 0x1091 +#define ALX_DEV_ID_AR8162 0x1090 +#define ALX_DEV_ID_AR8171 0x10A1 +#define ALX_DEV_ID_AR8172 0x10A0 + +/* rev definition, + * bit(0): with xD support + * bit(1): with Card Reader function + * bit(7:2): real revision + */ +#define ALX_PCI_REVID_WTH_CR BIT(1) +#define ALX_PCI_REVID_WTH_XD BIT(0) +#define ALX_PCI_REVID_MASK 0x1FU +#define ALX_PCI_REVID_SHIFT 3 +#define ALX_REV_A0 0 +#define ALX_REV_A1 1 +#define ALX_REV_B0 2 +#define ALX_REV_C0 3 + +#define ALX_PM_CSR 0x0044 +#define ALX_PM_CSR_PME_STAT BIT(15) +#define ALX_PM_CSR_DSCAL_MASK 0x3U +#define ALX_PM_CSR_DSCAL_SHIFT 13 +#define ALX_PM_CSR_DSEL_MASK 0xFU +#define ALX_PM_CSR_DSEL_SHIFT 9 +#define ALX_PM_CSR_PME_EN BIT(8) +#define ALX_PM_CSR_PWST_MASK 0x3U +#define ALX_PM_CSR_PWST_SHIFT 0 + +#define ALX_DEV_CAP 0x005C +#define ALX_DEV_CAP_SPLSL_MASK 0x3UL +#define ALX_DEV_CAP_SPLSL_SHIFT 26 +#define ALX_DEV_CAP_SPLV_MASK 0xFFUL +#define ALX_DEV_CAP_SPLV_SHIFT 18 +#define ALX_DEV_CAP_RBER BIT(15) +#define ALX_DEV_CAP_PIPRS BIT(14) +#define ALX_DEV_CAP_AIPRS BIT(13) +#define ALX_DEV_CAP_ABPRS BIT(12) +#define ALX_DEV_CAP_L1ACLAT_MASK 0x7UL +#define ALX_DEV_CAP_L1ACLAT_SHIFT 9 +#define ALX_DEV_CAP_L0SACLAT_MASK 0x7UL +#define ALX_DEV_CAP_L0SACLAT_SHIFT 6 +#define ALX_DEV_CAP_EXTAG BIT(5) +#define ALX_DEV_CAP_PHANTOM BIT(4) +#define ALX_DEV_CAP_MPL_MASK 0x7UL +#define ALX_DEV_CAP_MPL_SHIFT 0 +#define ALX_DEV_CAP_MPL_128 1 +#define ALX_DEV_CAP_MPL_256 2 +#define ALX_DEV_CAP_MPL_512 3 +#define ALX_DEV_CAP_MPL_1024 4 +#define ALX_DEV_CAP_MPL_2048 5 +#define ALX_DEV_CAP_MPL_4096 6 + +#define ALX_DEV_CTRL 0x0060 +#define ALX_DEV_CTRL_MAXRRS_MASK 0x7U +#define ALX_DEV_CTRL_MAXRRS_SHIFT 12 +#define ALX_DEV_CTRL_MAXRRS_MIN 2 +#define ALX_DEV_CTRL_NOSNP_EN BIT(11) +#define ALX_DEV_CTRL_AUXPWR_EN BIT(10) +#define ALX_DEV_CTRL_PHANTOM_EN BIT(9) +#define ALX_DEV_CTRL_EXTAG_EN BIT(8) +#define ALX_DEV_CTRL_MPL_MASK 0x7U +#define ALX_DEV_CTRL_MPL_SHIFT 5 +#define ALX_DEV_CTRL_RELORD_EN BIT(4) +#define ALX_DEV_CTRL_URR_EN BIT(3) +#define ALX_DEV_CTRL_FERR_EN BIT(2) +#define ALX_DEV_CTRL_NFERR_EN BIT(1) +#define ALX_DEV_CTRL_CERR_EN BIT(0) + +#define ALX_DEV_STAT 0x0062 +#define ALX_DEV_STAT_XS_PEND BIT(5) +#define ALX_DEV_STAT_AUXPWR BIT(4) +#define ALX_DEV_STAT_UR BIT(3) +#define ALX_DEV_STAT_FERR BIT(2) +#define ALX_DEV_STAT_NFERR BIT(1) +#define ALX_DEV_STAT_CERR BIT(0) + +#define ALX_LNK_CAP 0x0064 +#define ALX_LNK_CAP_PRTNUM_MASK 0xFFUL +#define ALX_LNK_CAP_PRTNUM_SHIFT 24 +#define ALX_LNK_CAP_CLK_PM BIT(18) +#define ALX_LNK_CAP_L1EXTLAT_MASK 0x7UL +#define ALX_LNK_CAP_L1EXTLAT_SHIFT 15 +#define ALX_LNK_CAP_L0SEXTLAT_MASK 0x7UL +#define ALX_LNK_CAP_L0SEXTLAT_SHIFT 12 +#define ALX_LNK_CAP_ASPM_SUP_MASK 0x3UL +#define ALX_LNK_CAP_ASPM_SUP_SHIFT 10 +#define ALX_LNK_CAP_ASPM_SUP_L0S 1 +#define ALX_LNK_CAP_ASPM_SUP_L0SL1 3 +#define ALX_LNK_CAP_MAX_LWH_MASK 0x3FUL +#define ALX_LNK_CAP_MAX_LWH_SHIFT 4 +#define ALX_LNK_CAP_MAX_LSPD_MASK 0xFUL +#define ALX_LNK_CAP_MAX_LSPD_SHIFT 0 + +#define ALX_LNK_CTRL 0x0068 +#define ALX_LNK_CTRL_CLK_PM_EN BIT(8) +#define ALX_LNK_CTRL_EXTSYNC BIT(7) +#define ALX_LNK_CTRL_CMNCLK_CFG BIT(6) +#define ALX_LNK_CTRL_RCB_128B BIT(3) +#define ALX_LNK_CTRL_ASPM_MASK 0x3U +#define ALX_LNK_CTRL_ASPM_SHIFT 0 +#define ALX_LNK_CTRL_ASPM_DIS 0 +#define ALX_LNK_CTRL_ASPM_ENL0S 1 +#define ALX_LNK_CTRL_ASPM_ENL1 2 +#define ALX_LNK_CTRL_ASPM_ENL0SL1 3 + +#define ALX_LNK_STAT 0x006A +#define ALX_LNK_STAT_SCLKCFG BIT(12) +#define ALX_LNK_STAT_LNKTRAIN BIT(11) +#define ALX_LNK_STAT_TRNERR BIT(10) +#define ALX_LNK_STAT_LNKSPD_MASK 0xFU +#define ALX_LNK_STAT_LNKSPD_SHIFT 0 +#define ALX_LNK_STAT_NEGLW_MASK 0x3FU +#define ALX_LNK_STAT_NEGLW_SHIFT 4 + +#define ALX_MSIX_MASK 0x0090 +#define ALX_MSIX_PENDING 0x0094 + +#define ALX_UE_SVRT 0x010C +#define ALX_UE_SVRT_UR BIT(20) +#define ALX_UE_SVRT_ECRCERR BIT(19) +#define ALX_UE_SVRT_MTLP BIT(18) +#define ALX_UE_SVRT_RCVOVFL BIT(17) +#define ALX_UE_SVRT_UNEXPCPL BIT(16) +#define ALX_UE_SVRT_CPLABRT BIT(15) +#define ALX_UE_SVRT_CPLTO BIT(14) +#define ALX_UE_SVRT_FCPROTERR BIT(13) +#define ALX_UE_SVRT_PTLP BIT(12) +#define ALX_UE_SVRT_DLPROTERR BIT(4) +#define ALX_UE_SVRT_TRNERR BIT(0) + +/* eeprom & flash load register */ +#define ALX_EFLD 0x0204 +#define ALX_EFLD_F_ENDADDR_MASK 0x3FFUL +#define ALX_EFLD_F_ENDADDR_SHIFT 16 +#define ALX_EFLD_F_EXIST BIT(10) +#define ALX_EFLD_E_EXIST BIT(9) +#define ALX_EFLD_EXIST BIT(8) +#define ALX_EFLD_STAT BIT(5) +#define ALX_EFLD_IDLE BIT(4) +#define ALX_EFLD_START BIT(0) + +/* eFuse load register */ +#define ALX_SLD 0x0218 +#define ALX_SLD_FREQ_MASK 0x3UL +#define ALX_SLD_FREQ_SHIFT 24 +#define ALX_SLD_FREQ_100K 0 +#define ALX_SLD_FREQ_200K 1 +#define ALX_SLD_FREQ_300K 2 +#define ALX_SLD_FREQ_400K 3 +#define ALX_SLD_EXIST BIT(23) +#define ALX_SLD_SLVADDR_MASK 0x7FUL +#define ALX_SLD_SLVADDR_SHIFT 16 +#define ALX_SLD_IDLE BIT(13) +#define ALX_SLD_STAT BIT(12) +#define ALX_SLD_START BIT(11) +#define ALX_SLD_STARTADDR_MASK 0xFFUL +#define ALX_SLD_STARTADDR_SHIFT 0 +#define ALX_SLD_MAX_TO 100 + +#define ALX_PCIE_MSIC 0x021C +#define ALX_PCIE_MSIC_MSIX_DIS BIT(22) +#define ALX_PCIE_MSIC_MSI_DIS BIT(21) + +#define ALX_PPHY_MISC1 0x1000 +#define ALX_PPHY_MISC1_RCVDET BIT(2) +#define ALX_PPHY_MISC1_NFTS_MASK 0xFFUL +#define ALX_PPHY_MISC1_NFTS_SHIFT 16 +#define ALX_PPHY_MISC1_NFTS_HIPERF 0xA0 + +#define ALX_PPHY_MISC2 0x1004 +#define ALX_PPHY_MISC2_L0S_TH_MASK 0x3UL +#define ALX_PPHY_MISC2_L0S_TH_SHIFT 18 +#define ALX_PPHY_MISC2_CDR_BW_MASK 0x3UL +#define ALX_PPHY_MISC2_CDR_BW_SHIFT 16 + +#define ALX_PDLL_TRNS1 0x1104 +#define ALX_PDLL_TRNS1_D3PLLOFF_EN BIT(11) +#define ALX_PDLL_TRNS1_REGCLK_SEL_NORM BIT(10) +#define ALX_PDLL_TRNS1_REPLY_TO_MASK 0x3FFUL +#define ALX_PDLL_TRNS1_REPLY_TO_SHIFT 0 + +#define ALX_TLEXTN_STATS 0x1208 +#define ALX_TLEXTN_STATS_DEVNO_MASK 0x1FUL +#define ALX_TLEXTN_STATS_DEVNO_SHIFT 16 +#define ALX_TLEXTN_STATS_BUSNO_MASK 0xFFUL +#define ALX_TLEXTN_STATS_BUSNO_SHIFT 8 + +#define ALX_EFUSE_CTRL 0x12C0 +#define ALX_EFUSE_CTRL_FLAG BIT(31) +#define ALX_EUFSE_CTRL_ACK BIT(30) +#define ALX_EFUSE_CTRL_ADDR_MASK 0x3FFUL +#define ALX_EFUSE_CTRL_ADDR_SHIFT 16 + +#define ALX_EFUSE_DATA 0x12C4 + +#define ALX_SPI_OP1 0x12C8 +#define ALX_SPI_OP1_RDID_MASK 0xFFUL +#define ALX_SPI_OP1_RDID_SHIFT 24 +#define ALX_SPI_OP1_CE_MASK 0xFFUL +#define ALX_SPI_OP1_CE_SHIFT 16 +#define ALX_SPI_OP1_SE_MASK 0xFFUL +#define ALX_SPI_OP1_SE_SHIFT 8 +#define ALX_SPI_OP1_PRGRM_MASK 0xFFUL +#define ALX_SPI_OP1_PRGRM_SHIFT 0 + +#define ALX_SPI_OP2 0x12CC +#define ALX_SPI_OP2_READ_MASK 0xFFUL +#define ALX_SPI_OP2_READ_SHIFT 24 +#define ALX_SPI_OP2_WRSR_MASK 0xFFUL +#define ALX_SPI_OP2_WRSR_SHIFT 16 +#define ALX_SPI_OP2_RDSR_MASK 0xFFUL +#define ALX_SPI_OP2_RDSR_SHIFT 8 +#define ALX_SPI_OP2_WREN_MASK 0xFFUL +#define ALX_SPI_OP2_WREN_SHIFT 0 + +#define ALX_SPI_OP3 0x12E4 +#define ALX_SPI_OP3_WRDI_MASK 0xFFUL +#define ALX_SPI_OP3_WRDI_SHIFT 8 +#define ALX_SPI_OP3_EWSR_MASK 0xFFUL +#define ALX_SPI_OP3_EWSR_SHIFT 0 + +#define ALX_EF_CTRL 0x12D0 +#define ALX_EF_CTRL_FSTS_MASK 0xFFUL +#define ALX_EF_CTRL_FSTS_SHIFT 20 +#define ALX_EF_CTRL_CLASS_MASK 0x7UL +#define ALX_EF_CTRL_CLASS_SHIFT 16 +#define ALX_EF_CTRL_CLASS_F_UNKNOWN 0 +#define ALX_EF_CTRL_CLASS_F_STD 1 +#define ALX_EF_CTRL_CLASS_F_SST 2 +#define ALX_EF_CTRL_CLASS_E_UNKNOWN 0 +#define ALX_EF_CTRL_CLASS_E_1K 1 +#define ALX_EF_CTRL_CLASS_E_4K 2 +#define ALX_EF_CTRL_FRET BIT(15) +#define ALX_EF_CTRL_TYP_MASK 0x3UL +#define ALX_EF_CTRL_TYP_SHIFT 12 +#define ALX_EF_CTRL_TYP_NONE 0 +#define ALX_EF_CTRL_TYP_F 1 +#define ALX_EF_CTRL_TYP_E 2 +#define ALX_EF_CTRL_TYP_UNKNOWN 3 +#define ALX_EF_CTRL_ONE_CLK BIT(10) +#define ALX_EF_CTRL_ECLK_MASK 0x3UL +#define ALX_EF_CTRL_ECLK_SHIFT 8 +#define ALX_EF_CTRL_ECLK_125K 0 +#define ALX_EF_CTRL_ECLK_250K 1 +#define ALX_EF_CTRL_ECLK_500K 2 +#define ALX_EF_CTRL_ECLK_1M 3 +#define ALX_EF_CTRL_FBUSY BIT(7) +#define ALX_EF_CTRL_ACTION BIT(6) +#define ALX_EF_CTRL_AUTO_OP BIT(5) +#define ALX_EF_CTRL_SST_MODE BIT(4) +#define ALX_EF_CTRL_INST_MASK 0xFUL +#define ALX_EF_CTRL_INST_SHIFT 0 +#define ALX_EF_CTRL_INST_NONE 0 +#define ALX_EF_CTRL_INST_READ 1 +#define ALX_EF_CTRL_INST_RDID 2 +#define ALX_EF_CTRL_INST_RDSR 3 +#define ALX_EF_CTRL_INST_WREN 4 +#define ALX_EF_CTRL_INST_PRGRM 5 +#define ALX_EF_CTRL_INST_SE 6 +#define ALX_EF_CTRL_INST_CE 7 +#define ALX_EF_CTRL_INST_WRSR 10 +#define ALX_EF_CTRL_INST_EWSR 11 +#define ALX_EF_CTRL_INST_WRDI 12 +#define ALX_EF_CTRL_INST_WRITE 2 + +#define ALX_EF_ADDR 0x12D4 +#define ALX_EF_DATA 0x12D8 +#define ALX_SPI_ID 0x12DC + +#define ALX_SPI_CFG_START 0x12E0 + +#define ALX_PMCTRL 0x12F8 +#define ALX_PMCTRL_HOTRST_WTEN BIT(31) +/* bit30: L0s/L1 controlled by MAC based on throughput(setting in 15A0) */ +#define ALX_PMCTRL_ASPM_FCEN BIT(30) +#define ALX_PMCTRL_SADLY_EN BIT(29) +#define ALX_PMCTRL_L0S_BUFSRX_EN BIT(28) +#define ALX_PMCTRL_LCKDET_TIMER_MASK 0xFUL +#define ALX_PMCTRL_LCKDET_TIMER_SHIFT 24 +#define ALX_PMCTRL_LCKDET_TIMER_DEF 0xC +/* bit[23:20] if pm_request_l1 time > @, then enter L0s not L1 */ +#define ALX_PMCTRL_L1REQ_TO_MASK 0xFUL +#define ALX_PMCTRL_L1REQ_TO_SHIFT 20 +#define ALX_PMCTRL_L1REG_TO_DEF 0xF +#define ALX_PMCTRL_TXL1_AFTER_L0S BIT(19) +#define ALX_PMCTRL_L1_TIMER_MASK 0x7UL +#define ALX_PMCTRL_L1_TIMER_SHIFT 16 +#define ALX_PMCTRL_L1_TIMER_DIS 0 +#define ALX_PMCTRL_L1_TIMER_2US 1 +#define ALX_PMCTRL_L1_TIMER_4US 2 +#define ALX_PMCTRL_L1_TIMER_8US 3 +#define ALX_PMCTRL_L1_TIMER_16US 4 +#define ALX_PMCTRL_L1_TIMER_24US 5 +#define ALX_PMCTRL_L1_TIMER_32US 6 +#define ALX_PMCTRL_L1_TIMER_63US 7 +#define ALX_PMCTRL_RCVR_WT_1US BIT(15) +#define ALX_PMCTRL_PWM_VER_11 BIT(14) +/* bit13: enable pcie clk switch in L1 state */ +#define ALX_PMCTRL_L1_CLKSW_EN BIT(13) +#define ALX_PMCTRL_L0S_EN BIT(12) +#define ALX_PMCTRL_RXL1_AFTER_L0S BIT(11) +#define ALX_PMCTRL_L0S_TIMER_MASK 0x7UL +#define ALX_PMCTRL_L0S_TIMER_SHIFT 8 +#define ALX_PMCTRL_L1_BUFSRX_EN BIT(7) +/* bit6: power down serdes RX */ +#define ALX_PMCTRL_L1_SRDSRX_PWD BIT(6) +#define ALX_PMCTRL_L1_SRDSPLL_EN BIT(5) +#define ALX_PMCTRL_L1_SRDS_EN BIT(4) +#define ALX_PMCTRL_L1_EN BIT(3) +#define ALX_PMCTRL_CLKREQ_EN BIT(2) +#define ALX_PMCTRL_RBER_EN BIT(1) +#define ALX_PMCTRL_SPRSDWER_EN BIT(0) + +#define ALX_LTSSM_CTRL 0x12FC +#define ALX_LTSSM_WRO_EN BIT(12) + +/*******************************************************/ +/* following registers are mapped only to memory space */ +/*******************************************************/ + +#define ALX_MASTER 0x1400 +#define ALX_MASTER_OTP_FLG BIT(31) +#define ALX_MASTER_DEV_NUM_MASK 0x7FUL +#define ALX_MASTER_DEV_NUM_SHIFT 24 +#define ALX_MASTER_REV_NUM_MASK 0xFFUL +#define ALX_MASTER_REV_NUM_SHIFT 16 +#define ALX_MASTER_DEASSRT BIT(15) +#define ALX_MASTER_RDCLR_INT BIT(14) +#define ALX_MASTER_DMA_RST BIT(13) +/* bit12: 1:alwys select pclk from serdes, not sw to 25M */ +#define ALX_MASTER_PCLKSEL_SRDS BIT(12) +/* bit11: irq moduration for rx */ +#define ALX_MASTER_IRQMOD2_EN BIT(11) +/* bit10: irq moduration for tx/rx */ +#define ALX_MASTER_IRQMOD1_EN BIT(10) +#define ALX_MASTER_MANU_INT BIT(9) +#define ALX_MASTER_MANUTIMER_EN BIT(8) +#define ALX_MASTER_SYSALVTIMER_EN BIT(7) +#define ALX_MASTER_OOB_DIS BIT(6) +/* bit5: wakeup without pcie clk */ +#define ALX_MASTER_WAKEN_25M BIT(5) +#define ALX_MASTER_BERT_START BIT(4) +#define ALX_MASTER_PCIE_TSTMOD_MASK 0x3UL +#define ALX_MASTER_PCIE_TSTMOD_SHIFT 2 +#define ALX_MASTER_PCIE_RST BIT(1) +/* bit0: MAC & DMA reset */ +#define ALX_MASTER_DMA_MAC_RST BIT(0) +#define ALX_DMA_MAC_RST_TO 50 + +#define ALX_MANU_TIMER 0x1404 + +#define ALX_IRQ_MODU_TIMER 0x1408 +/* hi-16bit is only for RX */ +#define ALX_IRQ_MODU_TIMER2_MASK 0xFFFFUL +#define ALX_IRQ_MODU_TIMER2_SHIFT 16 +#define ALX_IRQ_MODU_TIMER1_MASK 0xFFFFUL +#define ALX_IRQ_MODU_TIMER1_SHIFT 0 + +#define ALX_PHY_CTRL 0x140C +#define ALX_PHY_CTRL_ADDR_MASK 0x1FUL +#define ALX_PHY_CTRL_ADDR_SHIFT 19 +#define ALX_PHY_CTRL_BP_VLTGSW BIT(18) +#define ALX_PHY_CTRL_100AB_EN BIT(17) +#define ALX_PHY_CTRL_10AB_EN BIT(16) +#define ALX_PHY_CTRL_PLL_BYPASS BIT(15) +/* bit14: affect MAC & PHY, go to low power sts */ +#define ALX_PHY_CTRL_POWER_DOWN BIT(14) +/* bit13: 1:pll always ON, 0:can switch in lpw */ +#define ALX_PHY_CTRL_PLL_ON BIT(13) +#define ALX_PHY_CTRL_RST_ANALOG BIT(12) +#define ALX_PHY_CTRL_HIB_PULSE BIT(11) +#define ALX_PHY_CTRL_HIB_EN BIT(10) +#define ALX_PHY_CTRL_GIGA_DIS BIT(9) +/* bit8: poweron rst */ +#define ALX_PHY_CTRL_IDDQ_DIS BIT(8) +/* bit7: while reboot, it affects bit8 */ +#define ALX_PHY_CTRL_IDDQ BIT(7) +#define ALX_PHY_CTRL_LPW_EXIT BIT(6) +#define ALX_PHY_CTRL_GATE_25M BIT(5) +#define ALX_PHY_CTRL_RVRS_ANEG BIT(4) +#define ALX_PHY_CTRL_ANEG_NOW BIT(3) +#define ALX_PHY_CTRL_LED_MODE BIT(2) +#define ALX_PHY_CTRL_RTL_MODE BIT(1) +/* bit0: out of dsp RST state */ +#define ALX_PHY_CTRL_DSPRST_OUT BIT(0) +#define ALX_PHY_CTRL_DSPRST_TO 80 +#define ALX_PHY_CTRL_CLS (\ + ALX_PHY_CTRL_LED_MODE |\ + ALX_PHY_CTRL_100AB_EN |\ + ALX_PHY_CTRL_PLL_ON) + +#define ALX_MAC_STS 0x1410 +#define ALX_MAC_STS_SFORCE_MASK 0xFUL +#define ALX_MAC_STS_SFORCE_SHIFT 14 +#define ALX_MAC_STS_CALIB_DONE BIT13 +#define ALX_MAC_STS_CALIB_RES_MASK 0x1FUL +#define ALX_MAC_STS_CALIB_RES_SHIFT 8 +#define ALX_MAC_STS_CALIBERR_MASK 0xFUL +#define ALX_MAC_STS_CALIBERR_SHIFT 4 +#define ALX_MAC_STS_TXQ_BUSY BIT(3) +#define ALX_MAC_STS_RXQ_BUSY BIT(2) +#define ALX_MAC_STS_TXMAC_BUSY BIT(1) +#define ALX_MAC_STS_RXMAC_BUSY BIT(0) +#define ALX_MAC_STS_IDLE (\ + ALX_MAC_STS_TXQ_BUSY |\ + ALX_MAC_STS_RXQ_BUSY |\ + ALX_MAC_STS_TXMAC_BUSY |\ + ALX_MAC_STS_RXMAC_BUSY) + +#define ALX_MDIO 0x1414 +#define ALX_MDIO_MODE_EXT BIT(30) +#define ALX_MDIO_POST_READ BIT(29) +#define ALX_MDIO_AUTO_POLLING BIT(28) +#define ALX_MDIO_BUSY BIT(27) +#define ALX_MDIO_CLK_SEL_MASK 0x7UL +#define ALX_MDIO_CLK_SEL_SHIFT 24 +#define ALX_MDIO_CLK_SEL_25MD4 0 +#define ALX_MDIO_CLK_SEL_25MD6 2 +#define ALX_MDIO_CLK_SEL_25MD8 3 +#define ALX_MDIO_CLK_SEL_25MD10 4 +#define ALX_MDIO_CLK_SEL_25MD32 5 +#define ALX_MDIO_CLK_SEL_25MD64 6 +#define ALX_MDIO_CLK_SEL_25MD128 7 +#define ALX_MDIO_START BIT(23) +#define ALX_MDIO_SPRES_PRMBL BIT(22) +/* bit21: 1:read,0:write */ +#define ALX_MDIO_OP_READ BIT(21) +#define ALX_MDIO_REG_MASK 0x1FUL +#define ALX_MDIO_REG_SHIFT 16 +#define ALX_MDIO_DATA_MASK 0xFFFFUL +#define ALX_MDIO_DATA_SHIFT 0 +#define ALX_MDIO_MAX_AC_TO 120 + +#define ALX_MDIO_EXTN 0x1448 +#define ALX_MDIO_EXTN_PORTAD_MASK 0x1FUL +#define ALX_MDIO_EXTN_PORTAD_SHIFT 21 +#define ALX_MDIO_EXTN_DEVAD_MASK 0x1FUL +#define ALX_MDIO_EXTN_DEVAD_SHIFT 16 +#define ALX_MDIO_EXTN_REG_MASK 0xFFFFUL +#define ALX_MDIO_EXTN_REG_SHIFT 0 + +#define ALX_PHY_STS 0x1418 +#define ALX_PHY_STS_LPW BIT(31) +#define ALX_PHY_STS_LPI BIT(30) +#define ALX_PHY_STS_PWON_STRIP_MASK 0xFFFUL +#define ALX_PHY_STS_PWON_STRIP_SHIFT 16 + +#define ALX_PHY_STS_DUPLEX BIT(3) +#define ALX_PHY_STS_LINKUP BIT(2) +#define ALX_PHY_STS_SPEED_MASK 0x3UL +#define ALX_PHY_STS_SPEED_SHIFT 0 +#define ALX_PHY_STS_SPEED_1000M 2 +#define ALX_PHY_STS_SPEED_100M 1 +#define ALX_PHY_STS_SPEED_10M 0 + +#define ALX_BIST0 0x141C +#define ALX_BIST0_COL_MASK 0x3FUL +#define ALX_BIST0_COL_SHIFT 24 +#define ALX_BIST0_ROW_MASK 0xFFFUL +#define ALX_BIST0_ROW_SHIFT 12 +#define ALX_BIST0_STEP_MASK 0xFUL +#define ALX_BIST0_STEP_SHIFT 8 +#define ALX_BIST0_PATTERN_MASK 0x7UL +#define ALX_BIST0_PATTERN_SHIFT 4 +#define ALX_BIST0_CRIT BIT(3) +#define ALX_BIST0_FIXED BIT(2) +#define ALX_BIST0_FAIL BIT(1) +#define ALX_BIST0_START BIT(0) + +#define ALX_BIST1 0x1420 +#define ALX_BIST1_COL_MASK 0x3FUL +#define ALX_BIST1_COL_SHIFT 24 +#define ALX_BIST1_ROW_MASK 0xFFFUL +#define ALX_BIST1_ROW_SHIFT 12 +#define ALX_BIST1_STEP_MASK 0xFUL +#define ALX_BIST1_STEP_SHIFT 8 +#define ALX_BIST1_PATTERN_MASK 0x7UL +#define ALX_BIST1_PATTERN_SHIFT 4 +#define ALX_BIST1_CRIT BIT(3) +#define ALX_BIST1_FIXED BIT(2) +#define ALX_BIST1_FAIL BIT(1) +#define ALX_BIST1_START BIT(0) + +#define ALX_SERDES 0x1424 +#define ALX_SERDES_PHYCLK_SLWDWN BIT(18) +#define ALX_SERDES_MACCLK_SLWDWN BIT(17) +#define ALX_SERDES_SELFB_PLL_MASK 0x3UL +#define ALX_SERDES_SELFB_PLL_SHIFT 14 +/* bit13: 1:gtx_clk, 0:25M */ +#define ALX_SERDES_PHYCLK_SEL_GTX BIT(13) +/* bit12: 1:serdes,0:25M */ +#define ALX_SERDES_PCIECLK_SEL_SRDS BIT(12) +#define ALX_SERDES_BUFS_RX_EN BIT(11) +#define ALX_SERDES_PD_RX BIT(10) +#define ALX_SERDES_PLL_EN BIT(9) +#define ALX_SERDES_EN BIT(8) +/* bit6: 0:state-machine,1:csr */ +#define ALX_SERDES_SELFB_PLL_SEL_CSR BIT(6) +#define ALX_SERDES_SELFB_PLL_CSR_MASK 0x3UL +#define ALX_SERDES_SELFB_PLL_CSR_SHIFT 4 +/* 4-12% OV-CLK */ +#define ALX_SERDES_SELFB_PLL_CSR_4 3 +/* 0-4% OV-CLK */ +#define ALX_SERDES_SELFB_PLL_CSR_0 2 +/* 12-18% OV-CLK */ +#define ALX_SERDES_SELFB_PLL_CSR_12 1 +/* 18-25% OV-CLK */ +#define ALX_SERDES_SELFB_PLL_CSR_18 0 +#define ALX_SERDES_VCO_SLOW BIT(3) +#define ALX_SERDES_VCO_FAST BIT(2) +#define ALX_SERDES_LOCKDCT_EN BIT(1) +#define ALX_SERDES_LOCKDCTED BIT(0) + +#define ALX_LED_CTRL 0x1428 +#define ALX_LED_CTRL_PATMAP2_MASK 0x3UL +#define ALX_LED_CTRL_PATMAP2_SHIFT 8 +#define ALX_LED_CTRL_PATMAP1_MASK 0x3UL +#define ALX_LED_CTRL_PATMAP1_SHIFT 6 +#define ALX_LED_CTRL_PATMAP0_MASK 0x3UL +#define ALX_LED_CTRL_PATMAP0_SHIFT 4 +#define ALX_LED_CTRL_D3_MODE_MASK 0x3UL +#define ALX_LED_CTRL_D3_MODE_SHIFT 2 +#define ALX_LED_CTRL_D3_MODE_NORMAL 0 +#define ALX_LED_CTRL_D3_MODE_WOL_DIS 1 +#define ALX_LED_CTRL_D3_MODE_WOL_ANY 2 +#define ALX_LED_CTRL_D3_MODE_WOL_EN 3 +#define ALX_LED_CTRL_DUTY_CYCL_MASK 0x3UL +#define ALX_LED_CTRL_DUTY_CYCL_SHIFT 0 +/* 50% */ +#define ALX_LED_CTRL_DUTY_CYCL_50 0 +/* 12.5% */ +#define ALX_LED_CTRL_DUTY_CYCL_125 1 +/* 25% */ +#define ALX_LED_CTRL_DUTY_CYCL_25 2 +/* 75% */ +#define ALX_LED_CTRL_DUTY_CYCL_75 3 + +#define ALX_LED_PATN 0x142C +#define ALX_LED_PATN1_MASK 0xFFFFUL +#define ALX_LED_PATN1_SHIFT 16 +#define ALX_LED_PATN0_MASK 0xFFFFUL +#define ALX_LED_PATN0_SHIFT 0 + +#define ALX_LED_PATN2 0x1430 +#define ALX_LED_PATN2_MASK 0xFFFFUL +#define ALX_LED_PATN2_SHIFT 0 + +#define ALX_SYSALV 0x1434 +#define ALX_SYSALV_FLAG BIT(0) + +#define ALX_PCIERR_INST 0x1438 +#define ALX_PCIERR_INST_TX_RATE_MASK 0xFUL +#define ALX_PCIERR_INST_TX_RATE_SHIFT 4 +#define ALX_PCIERR_INST_RX_RATE_MASK 0xFUL +#define ALX_PCIERR_INST_RX_RATE_SHIFT 0 + +#define ALX_LPI_DECISN_TIMER 0x143C + +#define ALX_LPI_CTRL 0x1440 +#define ALX_LPI_CTRL_CHK_DA BIT(31) +#define ALX_LPI_CTRL_ENH_TO_MASK 0x1FFFUL +#define ALX_LPI_CTRL_ENH_TO_SHIFT 12 +#define ALX_LPI_CTRL_ENH_TH_MASK 0x1FUL +#define ALX_LPI_CTRL_ENH_TH_SHIFT 6 +#define ALX_LPI_CTRL_ENH_EN BIT(5) +#define ALX_LPI_CTRL_CHK_RX BIT(4) +#define ALX_LPI_CTRL_CHK_STATE BIT(3) +#define ALX_LPI_CTRL_GMII BIT(2) +#define ALX_LPI_CTRL_TO_PHY BIT(1) +#define ALX_LPI_CTRL_EN BIT(0) + +#define ALX_LPI_WAIT 0x1444 +#define ALX_LPI_WAIT_TIMER_MASK 0xFFFFUL +#define ALX_LPI_WAIT_TIMER_SHIFT 0 + +/* heart-beat, for swoi/cifs */ +#define ALX_HRTBT_VLAN 0x1450 +#define ALX_HRTBT_VLANID_MASK 0xFFFFUL +#define ALX_HRRBT_VLANID_SHIFT 0 + +#define ALX_HRTBT_CTRL 0x1454 +#define ALX_HRTBT_CTRL_EN BIT(31) +#define ALX_HRTBT_CTRL_PERIOD_MASK 0x3FUL +#define ALX_HRTBT_CTRL_PERIOD_SHIFT 25 +#define ALX_HRTBT_CTRL_HASVLAN BIT(24) +#define ALX_HRTBT_CTRL_HDRADDR_MASK 0xFFFUL +#define ALX_HRTBT_CTRL_HDRADDR_SHIFT 12 +#define ALX_HRTBT_CTRL_HDRADDRB0_MASK 0x7FFUL +#define ALX_HRTBT_CTRL_HDRADDRB0_SHIFT 13 +#define ALX_HRTBT_CTRL_PKT_FRAG BIT(12) +#define ALX_HRTBT_CTRL_PKTLEN_MASK 0xFFFUL +#define ALX_HRTBT_CTRL_PKTLEN_SHIFT 0 + +/* for B0+, bit[13..] for C0+ */ +#define ALX_HRTBT_EXT_CTRL 0x1AD0 +#define L1F_HRTBT_EXT_CTRL_PERIOD_HIGH_MASK 0x3FUL +#define L1F_HRTBT_EXT_CTRL_PERIOD_HIGH_SHIFT 24 +#define L1F_HRTBT_EXT_CTRL_SWOI_STARTUP_PKT_EN BIT(23) +#define L1F_HRTBT_EXT_CTRL_IOAC_2_FRAGMENTED BIT(22) +#define L1F_HRTBT_EXT_CTRL_IOAC_1_FRAGMENTED BIT(21) +#define L1F_HRTBT_EXT_CTRL_IOAC_1_KEEPALIVE_EN BIT(20) +#define L1F_HRTBT_EXT_CTRL_IOAC_1_HAS_VLAN BIT(19) +#define L1F_HRTBT_EXT_CTRL_IOAC_1_IS_8023 BIT(18) +#define L1F_HRTBT_EXT_CTRL_IOAC_1_IS_IPV6 BIT(17) +#define L1F_HRTBT_EXT_CTRL_IOAC_2_KEEPALIVE_EN BIT(16) +#define L1F_HRTBT_EXT_CTRL_IOAC_2_HAS_VLAN BIT(15) +#define L1F_HRTBT_EXT_CTRL_IOAC_2_IS_8023 BIT(14) +#define L1F_HRTBT_EXT_CTRL_IOAC_2_IS_IPV6 BIT(13) +#define ALX_HRTBT_EXT_CTRL_NS_EN BIT(12) +#define ALX_HRTBT_EXT_CTRL_FRAG_LEN_MASK 0xFFUL +#define ALX_HRTBT_EXT_CTRL_FRAG_LEN_SHIFT 4 +#define ALX_HRTBT_EXT_CTRL_IS_8023 BIT(3) +#define ALX_HRTBT_EXT_CTRL_IS_IPV6 BIT(2) +#define ALX_HRTBT_EXT_CTRL_WAKEUP_EN BIT(1) +#define ALX_HRTBT_EXT_CTRL_ARP_EN BIT(0) + +#define ALX_HRTBT_REM_IPV4_ADDR 0x1AD4 +#define ALX_HRTBT_HOST_IPV4_ADDR 0x1478 +#define ALX_HRTBT_REM_IPV6_ADDR3 0x1AD8 +#define ALX_HRTBT_REM_IPV6_ADDR2 0x1ADC +#define ALX_HRTBT_REM_IPV6_ADDR1 0x1AE0 +#define ALX_HRTBT_REM_IPV6_ADDR0 0x1AE4 + +/* 1B8C ~ 1B94 for C0+ */ +#define ALX_SWOI_ACER_CTRL 0x1B8C +#define ALX_SWOI_ORIG_ACK_NAK_EN BIT(20) +#define ALX_SWOI_ORIG_ACK_NAK_PKT_LEN_MASK 0XFFUL +#define ALX_SWOI_ORIG_ACK_NAK_PKT_LEN_SHIFT 12 +#define ALX_SWOI_ORIG_ACK_ADDR_MASK 0XFFFUL +#define ALX_SWOI_ORIG_ACK_ADDR_SHIFT 0 + +#define ALX_SWOI_IOAC_CTRL_2 0x1B90 +#define ALX_SWOI_IOAC_CTRL_2_SWOI_1_FRAG_LEN_MASK 0xFFUL +#define ALX_SWOI_IOAC_CTRL_2_SWOI_1_FRAG_LEN_SHIFT 24 +#define ALX_SWOI_IOAC_CTRL_2_SWOI_1_PKT_LEN_MASK 0xFFFUL +#define ALX_SWOI_IOAC_CTRL_2_SWOI_1_PKT_LEN_SHIFT 12 +#define ALX_SWOI_IOAC_CTRL_2_SWOI_1_HDR_ADDR_MASK 0xFFFUL +#define ALX_SWOI_IOAC_CTRL_2_SWOI_1_HDR_ADDR_SHIFT 0 + +#define ALX_SWOI_IOAC_CTRL_3 0x1B94 +#define ALX_SWOI_IOAC_CTRL_3_SWOI_2_FRAG_LEN_MASK 0xFFUL +#define ALX_SWOI_IOAC_CTRL_3_SWOI_2_FRAG_LEN_SHIFT 24 +#define ALX_SWOI_IOAC_CTRL_3_SWOI_2_PKT_LEN_MASK 0xFFFUL +#define ALX_SWOI_IOAC_CTRL_3_SWOI_2_PKT_LEN_SHIFT 12 +#define ALX_SWOI_IOAC_CTRL_3_SWOI_2_HDR_ADDR_MASK 0xFFFUL +#define ALX_SWOI_IOAC_CTRL_3_SWOI_2_HDR_ADDR_SHIFT 0 + +/*SWOI_HOST_IPV6_ADDR reuse reg1a60-1a6c, 1a70-1a7c, 1aa0-1aac, 1ab0-1abc.*/ +#define ALX_HRTBT_WAKEUP_PORT 0x1AE8 +#define ALX_HRTBT_WAKEUP_PORT_SRC_MASK 0xFFFFUL +#define ALX_HRTBT_WAKEUP_PORT_SRC_SHIFT 16 +#define ALX_HRTBT_WAKEUP_PORT_DEST_MASK 0xFFFFUL +#define ALX_HRTBT_WAKEUP_PORT_DEST_SHIFT 0 + +#define ALX_HRTBT_WAKEUP_DATA7 0x1AEC +#define ALX_HRTBT_WAKEUP_DATA6 0x1AF0 +#define ALX_HRTBT_WAKEUP_DATA5 0x1AF4 +#define ALX_HRTBT_WAKEUP_DATA4 0x1AF8 +#define ALX_HRTBT_WAKEUP_DATA3 0x1AFC +#define ALX_HRTBT_WAKEUP_DATA2 0x1B80 +#define ALX_HRTBT_WAKEUP_DATA1 0x1B84 +#define ALX_HRTBT_WAKEUP_DATA0 0x1B88 + +#define ALX_RXPARSE 0x1458 +#define ALX_RXPARSE_FLT6_L4_MASK 0x3UL +#define ALX_RXPARSE_FLT6_L4_SHIFT 30 +#define ALX_RXPARSE_FLT6_L3_MASK 0x3UL +#define ALX_RXPARSE_FLT6_L3_SHIFT 28 +#define ALX_RXPARSE_FLT5_L4_MASK 0x3UL +#define ALX_RXPARSE_FLT5_L4_SHIFT 26 +#define ALX_RXPARSE_FLT5_L3_MASK 0x3UL +#define ALX_RXPARSE_FLT5_L3_SHIFT 24 +#define ALX_RXPARSE_FLT4_L4_MASK 0x3UL +#define ALX_RXPARSE_FLT4_L4_SHIFT 22 +#define ALX_RXPARSE_FLT4_L3_MASK 0x3UL +#define ALX_RXPARSE_FLT4_L3_SHIFT 20 +#define ALX_RXPARSE_FLT3_L4_MASK 0x3UL +#define ALX_RXPARSE_FLT3_L4_SHIFT 18 +#define ALX_RXPARSE_FLT3_L3_MASK 0x3UL +#define ALX_RXPARSE_FLT3_L3_SHIFT 16 +#define ALX_RXPARSE_FLT2_L4_MASK 0x3UL +#define ALX_RXPARSE_FLT2_L4_SHIFT 14 +#define ALX_RXPARSE_FLT2_L3_MASK 0x3UL +#define ALX_RXPARSE_FLT2_L3_SHIFT 12 +#define ALX_RXPARSE_FLT1_L4_MASK 0x3UL +#define ALX_RXPARSE_FLT1_L4_SHIFT 10 +#define ALX_RXPARSE_FLT1_L3_MASK 0x3UL +#define ALX_RXPARSE_FLT1_L3_SHIFT 8 +#define ALX_RXPARSE_FLT6_EN BIT(5) +#define ALX_RXPARSE_FLT5_EN BIT(4) +#define ALX_RXPARSE_FLT4_EN BIT(3) +#define ALX_RXPARSE_FLT3_EN BIT(2) +#define ALX_RXPARSE_FLT2_EN BIT(1) +#define ALX_RXPARSE_FLT1_EN BIT(0) +#define ALX_RXPARSE_FLT_L4_UDP 0 +#define ALX_RXPARSE_FLT_L4_TCP 1 +#define ALX_RXPARSE_FLT_L4_BOTH 2 +#define ALX_RXPARSE_FLT_L4_NONE 3 +#define ALX_RXPARSE_FLT_L3_IPV6 0 +#define ALX_RXPARSE_FLT_L3_IPV4 1 +#define ALX_RXPARSE_FLT_L3_BOTH 2 + +/* Terodo support */ +#define ALX_TRD_CTRL 0x145C +#define ALX_TRD_CTRL_EN BIT(31) +#define ALX_TRD_CTRL_BUBBLE_WAKE_EN BIT(30) +#define ALX_TRD_CTRL_PREFIX_CMP_HW BIT(28) +#define ALX_TRD_CTRL_RSHDR_ADDR_MASK 0xFFFUL +#define ALX_TRD_CTRL_RSHDR_ADDR_SHIFT 16 +#define ALX_TRD_CTRL_SINTV_MAX_MASK 0xFFUL +#define ALX_TRD_CTRL_SINTV_MAX_SHIFT 8 +#define ALX_TRD_CTRL_SINTV_MIN_MASK 0xFFUL +#define ALX_TRD_CTRL_SINTV_MIN_SHIFT 0 + +#define ALX_TRD_RS 0x1460 +#define ALX_TRD_RS_SZ_MASK 0xFFFUL +#define ALX_TRD_RS_SZ_SHIFT 20 +#define ALX_TRD_RS_NONCE_OFS_MASK 0xFFFUL +#define ALX_TRD_RS_NONCE_OFS_SHIFT 8 +#define ALX_TRD_RS_SEQ_OFS_MASK 0xFFUL +#define ALX_TRD_RS_SEQ_OFS_SHIFT 0 + +#define ALX_TRD_SRV_IP4 0x1464 + +#define ALX_TRD_CLNT_EXTNL_IP4 0x1468 + +#define ALX_TRD_PORT 0x146C +#define ALX_TRD_PORT_CLNT_EXTNL_MASK 0xFFFFUL +#define ALX_TRD_PORT_CLNT_EXTNL_SHIFT 16 +#define ALX_TRD_PORT_SRV_MASK 0xFFFFUL +#define ALX_TRD_PORT_SRV_SHIFT 0 + +#define ALX_TRD_PREFIX 0x1470 + +#define ALX_TRD_BUBBLE_DA_IP4 0x1478 + +#define ALX_TRD_BUBBLE_DA_PORT 0x147C + +/* for B0 */ +#define ALX_IDLE_DECISN_TIMER 0x1474 +/* 1ms */ +#define ALX_IDLE_DECISN_TIMER_DEF 0x400 + + +#define ALX_MAC_CTRL 0x1480 +#define ALX_MAC_CTRL_FAST_PAUSE BIT(31) +#define ALX_MAC_CTRL_WOLSPED_SWEN BIT(30) +/* bit29: 1:legacy(hi5b), 0:marvl(lo5b)*/ +#define ALX_MAC_CTRL_MHASH_ALG_HI5B BIT(29) +#define ALX_MAC_CTRL_SPAUSE_EN BIT(28) +#define ALX_MAC_CTRL_DBG_EN BIT(27) +#define ALX_MAC_CTRL_BRD_EN BIT(26) +#define ALX_MAC_CTRL_MULTIALL_EN BIT(25) +#define ALX_MAC_CTRL_RX_XSUM_EN BIT(24) +#define ALX_MAC_CTRL_THUGE BIT(23) +#define ALX_MAC_CTRL_MBOF BIT(22) +#define ALX_MAC_CTRL_SPEED_MASK 0x3UL +#define ALX_MAC_CTRL_SPEED_SHIFT 20 +#define ALX_MAC_CTRL_SPEED_10_100 1 +#define ALX_MAC_CTRL_SPEED_1000 2 +#define ALX_MAC_CTRL_SIMR BIT(19) +#define ALX_MAC_CTRL_SSTCT BIT(17) +#define ALX_MAC_CTRL_TPAUSE BIT(16) +#define ALX_MAC_CTRL_PROMISC_EN BIT(15) +#define ALX_MAC_CTRL_VLANSTRIP BIT(14) +#define ALX_MAC_CTRL_PRMBLEN_MASK 0xFUL +#define ALX_MAC_CTRL_PRMBLEN_SHIFT 10 +#define ALX_MAC_CTRL_RHUGE_EN BIT(9) +#define ALX_MAC_CTRL_FLCHK BIT(8) +#define ALX_MAC_CTRL_PCRCE BIT(7) +#define ALX_MAC_CTRL_CRCE BIT(6) +#define ALX_MAC_CTRL_FULLD BIT(5) +#define ALX_MAC_CTRL_LPBACK_EN BIT(4) +#define ALX_MAC_CTRL_RXFC_EN BIT(3) +#define ALX_MAC_CTRL_TXFC_EN BIT(2) +#define ALX_MAC_CTRL_RX_EN BIT(1) +#define ALX_MAC_CTRL_TX_EN BIT(0) + +#define ALX_GAP 0x1484 +#define ALX_GAP_IPGR2_MASK 0x7FUL +#define ALX_GAP_IPGR2_SHIFT 24 +#define ALX_GAP_IPGR1_MASK 0x7FUL +#define ALX_GAP_IPGR1_SHIFT 16 +#define ALX_GAP_MIN_IFG_MASK 0xFFUL +#define ALX_GAP_MIN_IFG_SHIFT 8 +#define ALX_GAP_IPGT_MASK 0x7FUL +#define ALX_GAP_IPGT_SHIFT 0 + +#define ALX_STAD0 0x1488 +#define ALX_STAD1 0x148C + +#define ALX_HASH_TBL0 0x1490 +#define ALX_HASH_TBL1 0x1494 + +#define ALX_HALFD 0x1498 +#define ALX_HALFD_JAM_IPG_MASK 0xFUL +#define ALX_HALFD_JAM_IPG_SHIFT 24 +#define ALX_HALFD_ABEBT_MASK 0xFUL +#define ALX_HALFD_ABEBT_SHIFT 20 +#define ALX_HALFD_ABEBE BIT(19) +#define ALX_HALFD_BPNB BIT(18) +#define ALX_HALFD_NOBO BIT(17) +#define ALX_HALFD_EDXSDFR BIT(16) +#define ALX_HALFD_RETRY_MASK 0xFUL +#define ALX_HALFD_RETRY_SHIFT 12 +#define ALX_HALFD_LCOL_MASK 0x3FFUL +#define ALX_HALFD_LCOL_SHIFT 0 + +#define ALX_MTU 0x149C +#define ALX_MTU_JUMBO_TH 1514 +#define ALX_MTU_STD_ALGN 1536 +#define ALX_MTU_MIN 64 + +#define ALX_SRAM0 0x1500 +#define ALX_SRAM_RFD_TAIL_ADDR_MASK 0xFFFUL +#define ALX_SRAM_RFD_TAIL_ADDR_SHIFT 16 +#define ALX_SRAM_RFD_HEAD_ADDR_MASK 0xFFFUL +#define ALX_SRAM_RFD_HEAD_ADDR_SHIFT 0 + +#define ALX_SRAM1 0x1510 +#define ALX_SRAM_RFD_LEN_MASK 0xFFFUL +#define ALX_SRAM_RFD_LEN_SHIFT 0 + +#define ALX_SRAM2 0x1518 +#define ALX_SRAM_TRD_TAIL_ADDR_MASK 0xFFFUL +#define ALX_SRAM_TRD_TAIL_ADDR_SHIFT 16 +#define ALX_SRMA_TRD_HEAD_ADDR_MASK 0xFFFUL +#define ALX_SRAM_TRD_HEAD_ADDR_SHIFT 0 + +#define ALX_SRAM3 0x151C +#define ALX_SRAM_TRD_LEN_MASK 0xFFFUL +#define ALX_SRAM_TRD_LEN_SHIFT 0 + +#define ALX_SRAM4 0x1520 +#define ALX_SRAM_RXF_TAIL_ADDR_MASK 0xFFFUL +#define ALX_SRAM_RXF_TAIL_ADDR_SHIFT 16 +#define ALX_SRAM_RXF_HEAD_ADDR_MASK 0xFFFUL +#define ALX_SRAM_RXF_HEAD_ADDR_SHIFT 0 + +#define ALX_SRAM5 0x1524 +#define ALX_SRAM_RXF_LEN_MASK 0xFFFUL +#define ALX_SRAM_RXF_LEN_SHIFT 0 +#define ALX_SRAM_RXF_LEN_8K (8*1024) + +#define ALX_SRAM6 0x1528 +#define ALX_SRAM_TXF_TAIL_ADDR_MASK 0xFFFUL +#define ALX_SRAM_TXF_TAIL_ADDR_SHIFT 16 +#define ALX_SRAM_TXF_HEAD_ADDR_MASK 0xFFFUL +#define ALX_SRAM_TXF_HEAD_ADDR_SHIFT 0 + +#define ALX_SRAM7 0x152C +#define ALX_SRAM_TXF_LEN_MASK 0xFFFUL +#define ALX_SRAM_TXF_LEN_SHIFT 0 + +#define ALX_SRAM8 0x1530 +#define ALX_SRAM_PATTERN_ADDR_MASK 0xFFFUL +#define ALX_SRAM_PATTERN_ADDR_SHIFT 16 +#define ALX_SRAM_TSO_ADDR_MASK 0xFFFUL +#define ALX_SRAM_TSO_ADDR_SHIFT 0 + +#define ALX_SRAM9 0x1534 +#define ALX_SRAM_LOAD_PTR BIT(0) + +#define ALX_RX_BASE_ADDR_HI 0x1540 + +#define ALX_TX_BASE_ADDR_HI 0x1544 + +#define ALX_RFD_ADDR_LO 0x1550 +#define ALX_RFD_RING_SZ 0x1560 +#define ALX_RFD_BUF_SZ 0x1564 +#define ALX_RFD_BUF_SZ_MASK 0xFFFFUL +#define ALX_RFD_BUF_SZ_SHIFT 0 + +#define ALX_RRD_ADDR_LO 0x1568 +#define ALX_RRD_RING_SZ 0x1578 +#define ALX_RRD_RING_SZ_MASK 0xFFFUL +#define ALX_RRD_RING_SZ_SHIFT 0 + +/* pri3: highest, pri0: lowest */ +#define ALX_TPD_PRI3_ADDR_LO 0x14E4 +#define ALX_TPD_PRI2_ADDR_LO 0x14E0 +#define ALX_TPD_PRI1_ADDR_LO 0x157C +#define ALX_TPD_PRI0_ADDR_LO 0x1580 + +/* producer index is 16bit */ +#define ALX_TPD_PRI3_PIDX 0x1618 +#define ALX_TPD_PRI2_PIDX 0x161A +#define ALX_TPD_PRI1_PIDX 0x15F0 +#define ALX_TPD_PRI0_PIDX 0x15F2 + +/* consumer index is 16bit */ +#define ALX_TPD_PRI3_CIDX 0x161C +#define ALX_TPD_PRI2_CIDX 0x161E +#define ALX_TPD_PRI1_CIDX 0x15F4 +#define ALX_TPD_PRI0_CIDX 0x15F6 + +#define ALX_TPD_RING_SZ 0x1584 +#define ALX_TPD_RING_SZ_MASK 0xFFFFUL +#define ALX_TPD_RING_SZ_SHIFT 0 + +#define ALX_CMB_ADDR_LO 0x1588 + +#define ALX_TXQ0 0x1590 +#define ALX_TXQ0_TXF_BURST_PREF_MASK 0xFFFFUL +#define ALX_TXQ0_TXF_BURST_PREF_SHIFT 16 +#define ALX_TXQ_TXF_BURST_PREF_DEF 0x200 +#define ALX_TXQ0_PEDING_CLR BIT(8) +#define ALX_TXQ0_LSO_8023_EN BIT(7) +#define ALX_TXQ0_MODE_ENHANCE BIT(6) +#define ALX_TXQ0_EN BIT(5) +#define ALX_TXQ0_SUPT_IPOPT BIT(4) +#define ALX_TXQ0_TPD_BURSTPREF_MASK 0xFUL +#define ALX_TXQ0_TPD_BURSTPREF_SHIFT 0 +#define ALX_TXQ_TPD_BURSTPREF_DEF 5 + +#define ALX_TXQ1 0x1594 +/* bit11: drop large packet, len > (rfd buf) */ +#define ALX_TXQ1_ERRLGPKT_DROP_EN BIT(11) +/* bit[9:0]: 8bytes unit */ +#define ALX_TXQ1_JUMBO_TSOTHR_MASK 0x7FFUL +#define ALX_TXQ1_JUMBO_TSOTHR_SHIFT 0 +#define ALX_TXQ1_JUMBO_TSO_TH (7*1024) + +/* L1 entrance control */ +#define ALX_TXQ2 0x1598 +#define ALX_TXQ2_BURST_EN BIT(31) +#define ALX_TXQ2_BURST_HI_WM_MASK 0xFFFUL +#define ALX_TXQ2_BURST_HI_WM_SHIFT 16 +#define ALX_TXQ2_BURST_LO_WM_MASK 0xFFFUL +#define ALX_TXQ2_BURST_LO_WM_SHIFT 0 + +#define ALX_RXQ0 0x15A0 +#define ALX_RXQ0_EN BIT(31) +#define ALX_RXQ0_CUT_THRU_EN BIT(30) +#define ALX_RXQ0_RSS_HASH_EN BIT(29) +/* bit28: 0:goto Q0, 1:as table */ +#define ALX_RXQ0_NON_IP_QTBL BIT(28) +#define ALX_RXQ0_RSS_MODE_MASK 0x3UL +#define ALX_RXQ0_RSS_MODE_SHIFT 26 +#define ALX_RXQ0_RSS_MODE_DIS 0 +#define ALX_RXQ0_RSS_MODE_SQSI 1 +#define ALX_RXQ0_RSS_MODE_MQSI 2 +#define ALX_RXQ0_RSS_MODE_MQMI 3 +#define ALX_RXQ0_NUM_RFD_PREF_MASK 0x3FUL +#define ALX_RXQ0_NUM_RFD_PREF_SHIFT 20 +#define ALX_RXQ0_NUM_RFD_PREF_DEF 8 +#define ALX_RXQ0_IDT_TBL_SIZE_MASK 0x1FFUL +#define ALX_RXQ0_IDT_TBL_SIZE_SHIFT 8 +#define ALX_RXQ0_IDT_TBL_SIZE_DEF 0x100 +#define ALX_RXQ0_IPV6_PARSE_EN BIT(7) +#define ALX_RXQ0_RSS_HSTYP_MASK 0xFUL +#define ALX_RXQ0_RSS_HSTYP_SHIFT 2 +#define ALX_RXQ0_RSS_HSTYP_IPV6_TCP_EN BIT(5) +#define ALX_RXQ0_RSS_HSTYP_IPV6_EN BIT(4) +#define ALX_RXQ0_RSS_HSTYP_IPV4_TCP_EN BIT(3) +#define ALX_RXQ0_RSS_HSTYP_IPV4_EN BIT(2) +#define ALX_RXQ0_RSS_HSTYP_ALL (\ + ALX_RXQ0_RSS_HSTYP_IPV6_TCP_EN |\ + ALX_RXQ0_RSS_HSTYP_IPV4_TCP_EN |\ + ALX_RXQ0_RSS_HSTYP_IPV6_EN |\ + ALX_RXQ0_RSS_HSTYP_IPV4_EN) +#define ALX_RXQ0_ASPM_THRESH_MASK 0x3UL +#define ALX_RXQ0_ASPM_THRESH_SHIFT 0 +#define ALX_RXQ0_ASPM_THRESH_NO 0 +#define ALX_RXQ0_ASPM_THRESH_1M 1 +#define ALX_RXQ0_ASPM_THRESH_10M 2 +#define ALX_RXQ0_ASPM_THRESH_100M 3 + +#define ALX_RXQ1 0x15A4 +/* 32bytes unit */ +#define ALX_RXQ1_JUMBO_LKAH_MASK 0xFUL +#define ALX_RXQ1_JUMBO_LKAH_SHIFT 12 +#define ALX_RXQ1_RFD_PREF_DOWN_MASK 0x3FUL +#define ALX_RXQ1_RFD_PREF_DOWN_SHIFT 6 +#define ALX_RXQ1_RFD_PREF_UP_MASK 0x3FUL +#define ALX_RXQ1_RFD_PREF_UP_SHIFT 0 + +#define ALX_RXQ2 0x15A8 +/* XOFF: USED SRAM LOWER THAN IT, THEN NOTIFY THE PEER TO SEND AGAIN */ +#define ALX_RXQ2_RXF_XOFF_THRESH_MASK 0xFFFUL +#define ALX_RXQ2_RXF_XOFF_THRESH_SHIFT 16 +#define ALX_RXQ2_RXF_XON_THRESH_MASK 0xFFFUL +#define ALX_RXQ2_RXF_XON_THRESH_SHIFT 0 +/* Size = tx-packet(1522) + IPG(12) + SOF(8) + 64(Pause) + IPG(12) + SOF(8) + + * rx-packet(1522) + delay-of-link(64) + * = 3212. + */ +#define ALX_RXQ2_RXF_FLOW_CTRL_RSVD 3212 + +#define ALX_RXQ3 0x15AC +#define ALX_RXQ3_RXD_TIMER_MASK 0x7FFFUL +#define ALX_RXQ3_RXD_TIMER_SHIFT 16 +/* 8bytes unit */ +#define ALX_RXQ3_RXD_THRESH_MASK 0xFFFUL +#define ALX_RXQ3_RXD_THRESH_SHIFT 0 + +#define ALX_DMA 0x15C0 +#define ALX_DMA_SMB_NOW BIT(31) +#define ALX_DMA_WPEND_CLR BIT(30) +#define ALX_DMA_RPEND_CLR BIT(29) +#define ALX_DMA_WSRAM_RDCTRL BIT(28) +#define ALX_DMA_RCHNL_SEL_MASK 0x3UL +#define ALX_DMA_RCHNL_SEL_SHIFT 26 +#define ALX_DMA_RCHNL_SEL_1 0 +#define ALX_DMA_RCHNL_SEL_2 1 +#define ALX_DMA_RCHNL_SEL_3 2 +#define ALX_DMA_RCHNL_SEL_4 3 +#define ALX_DMA_SMB_EN BIT(21) +#define ALX_DMA_WDLY_CNT_MASK 0xFUL +#define ALX_DMA_WDLY_CNT_SHIFT 16 +#define ALX_DMA_WDLY_CNT_DEF 4 +#define ALX_DMA_RDLY_CNT_MASK 0x1FUL +#define ALX_DMA_RDLY_CNT_SHIFT 11 +#define ALX_DMA_RDLY_CNT_DEF 15 +/* bit10: 0:tpd with pri, 1: data */ +#define ALX_DMA_RREQ_PRI_DATA BIT(10) +#define ALX_DMA_WREQ_BLEN_MASK 0x7UL +#define ALX_DMA_WREQ_BLEN_SHIFT 7 +#define ALX_DMA_RREQ_BLEN_MASK 0x7UL +#define ALX_DMA_RREQ_BLEN_SHIFT 4 +#define ALX_DMA_PENDING_AUTO_RST BIT(3) +#define ALX_DMA_RORDER_MODE_MASK 0x7UL +#define ALX_DMA_RORDER_MODE_SHIFT 0 +#define ALX_DMA_RORDER_MODE_OUT 4 +#define ALX_DMA_RORDER_MODE_ENHANCE 2 +#define ALX_DMA_RORDER_MODE_IN 1 + +#define ALX_WOL0 0x14A0 +#define ALX_WOL0_PT7_MATCH BIT(31) +#define ALX_WOL0_PT6_MATCH BIT(30) +#define ALX_WOL0_PT5_MATCH BIT(29) +#define ALX_WOL0_PT4_MATCH BIT(28) +#define ALX_WOL0_PT3_MATCH BIT(27) +#define ALX_WOL0_PT2_MATCH BIT(26) +#define ALX_WOL0_PT1_MATCH BIT(25) +#define ALX_WOL0_PT0_MATCH BIT(24) +#define ALX_WOL0_PT7_EN BIT(23) +#define ALX_WOL0_PT6_EN BIT(22) +#define ALX_WOL0_PT5_EN BIT(21) +#define ALX_WOL0_PT4_EN BIT(20) +#define ALX_WOL0_PT3_EN BIT(19) +#define ALX_WOL0_PT2_EN BIT(18) +#define ALX_WOL0_PT1_EN BIT(17) +#define ALX_WOL0_PT0_EN BIT(16) +#define ALX_WOL0_IPV4_SYNC_EVT BIT(14) +#define ALX_WOL0_IPV6_SYNC_EVT BIT(13) +#define ALX_WOL0_LINK_EVT BIT(10) +#define ALX_WOL0_MAGIC_EVT BIT(9) +#define ALX_WOL0_PATTERN_EVT BIT(8) +#define ALX_WOL0_SWOI_EVT BIT(7) +#define ALX_WOL0_OOB_EN BIT(6) +#define ALX_WOL0_PME_LINK BIT(5) +#define ALX_WOL0_LINK_EN BIT(4) +#define ALX_WOL0_PME_MAGIC_EN BIT(3) +#define ALX_WOL0_MAGIC_EN BIT(2) +#define ALX_WOL0_PME_PATTERN_EN BIT(1) +#define ALX_WOL0_PATTERN_EN BIT(0) + +#define ALX_WOL1 0x14A4 +#define ALX_WOL1_PT3_LEN_MASK 0xFFUL +#define ALX_WOL1_PT3_LEN_SHIFT 24 +#define ALX_WOL1_PT2_LEN_MASK 0xFFUL +#define ALX_WOL1_PT2_LEN_SHIFT 16 +#define ALX_WOL1_PT1_LEN_MASK 0xFFUL +#define ALX_WOL1_PT1_LEN_SHIFT 8 +#define ALX_WOL1_PT0_LEN_MASK 0xFFUL +#define ALX_WOL1_PT0_LEN_SHIFT 0 + +#define ALX_WOL2 0x14A8 +#define ALX_WOL2_PT7_LEN_MASK 0xFFUL +#define ALX_WOL2_PT7_LEN_SHIFT 24 +#define ALX_WOL2_PT6_LEN_MASK 0xFFUL +#define ALX_WOL2_PT6_LEN_SHIFT 16 +#define ALX_WOL2_PT5_LEN_MASK 0xFFUL +#define ALX_WOL2_PT5_LEN_SHIFT 8 +#define ALX_WOL2_PT4_LEN_MASK 0xFFUL +#define ALX_WOL2_PT4_LEN_SHIFT 0 + +#define ALX_RFD_PIDX 0x15E0 +#define ALX_RFD_PIDX_MASK 0xFFFUL +#define ALX_RFD_PIDX_SHIFT 0 + +#define ALX_RFD_CIDX 0x15F8 +#define ALX_RFD_CIDX_MASK 0xFFFUL +#define ALX_RFD_CIDX_SHIFT 0 + +/* MIB */ +#define ALX_MIB_BASE 0x1700 +#define ALX_MIB_RX_OK (ALX_MIB_BASE + 0) +#define ALX_MIB_RX_BC (ALX_MIB_BASE + 4) +#define ALX_MIB_RX_MC (ALX_MIB_BASE + 8) +#define ALX_MIB_RX_PAUSE (ALX_MIB_BASE + 12) +#define ALX_MIB_RX_CTRL (ALX_MIB_BASE + 16) +#define ALX_MIB_RX_FCS (ALX_MIB_BASE + 20) +#define ALX_MIB_RX_LENERR (ALX_MIB_BASE + 24) +#define ALX_MIB_RX_BYTCNT (ALX_MIB_BASE + 28) +#define ALX_MIB_RX_RUNT (ALX_MIB_BASE + 32) +#define ALX_MIB_RX_FRAGMENT (ALX_MIB_BASE + 36) +#define ALX_MIB_RX_64B (ALX_MIB_BASE + 40) +#define ALX_MIB_RX_127B (ALX_MIB_BASE + 44) +#define ALX_MIB_RX_255B (ALX_MIB_BASE + 48) +#define ALX_MIB_RX_511B (ALX_MIB_BASE + 52) +#define ALX_MIB_RX_1023B (ALX_MIB_BASE + 56) +#define ALX_MIB_RX_1518B (ALX_MIB_BASE + 60) +#define ALX_MIB_RX_SZMAX (ALX_MIB_BASE + 64) +#define ALX_MIB_RX_OVSZ (ALX_MIB_BASE + 68) +#define ALX_MIB_RXF_OV (ALX_MIB_BASE + 72) +#define ALX_MIB_RRD_OV (ALX_MIB_BASE + 76) +#define ALX_MIB_RX_ALIGN (ALX_MIB_BASE + 80) +#define ALX_MIB_RX_BCCNT (ALX_MIB_BASE + 84) +#define ALX_MIB_RX_MCCNT (ALX_MIB_BASE + 88) +#define ALX_MIB_RX_ERRADDR (ALX_MIB_BASE + 92) +#define ALX_MIB_TX_OK (ALX_MIB_BASE + 96) +#define ALX_MIB_TX_BC (ALX_MIB_BASE + 100) +#define ALX_MIB_TX_MC (ALX_MIB_BASE + 104) +#define ALX_MIB_TX_PAUSE (ALX_MIB_BASE + 108) +#define ALX_MIB_TX_EXCDEFER (ALX_MIB_BASE + 112) +#define ALX_MIB_TX_CTRL (ALX_MIB_BASE + 116) +#define ALX_MIB_TX_DEFER (ALX_MIB_BASE + 120) +#define ALX_MIB_TX_BYTCNT (ALX_MIB_BASE + 124) +#define ALX_MIB_TX_64B (ALX_MIB_BASE + 128) +#define ALX_MIB_TX_127B (ALX_MIB_BASE + 132) +#define ALX_MIB_TX_255B (ALX_MIB_BASE + 136) +#define ALX_MIB_TX_511B (ALX_MIB_BASE + 140) +#define ALX_MIB_TX_1023B (ALX_MIB_BASE + 144) +#define ALX_MIB_TX_1518B (ALX_MIB_BASE + 148) +#define ALX_MIB_TX_SZMAX (ALX_MIB_BASE + 152) +#define ALX_MIB_TX_1COL (ALX_MIB_BASE + 156) +#define ALX_MIB_TX_2COL (ALX_MIB_BASE + 160) +#define ALX_MIB_TX_LATCOL (ALX_MIB_BASE + 164) +#define ALX_MIB_TX_ABRTCOL (ALX_MIB_BASE + 168) +#define ALX_MIB_TX_UNDRUN (ALX_MIB_BASE + 172) +#define ALX_MIB_TX_TRDBEOP (ALX_MIB_BASE + 176) +#define ALX_MIB_TX_LENERR (ALX_MIB_BASE + 180) +#define ALX_MIB_TX_TRUNC (ALX_MIB_BASE + 184) +#define ALX_MIB_TX_BCCNT (ALX_MIB_BASE + 188) +#define ALX_MIB_TX_MCCNT (ALX_MIB_BASE + 192) +#define ALX_MIB_UPDATE (ALX_MIB_BASE + 196) + +#define ALX_RX_STATS_BIN ALX_MIB_RX_OK +#define ALX_RX_STATS_END ALX_MIB_RX_ERRADDR +#define ALX_TX_STATS_BIN ALX_MIB_TX_OK +#define ALX_TX_STATS_END ALX_MIB_TX_MCCNT + +#define ALX_ISR 0x1600 +#define ALX_ISR_DIS BIT(31) +#define ALX_ISR_RX_Q7 BIT(30) +#define ALX_ISR_RX_Q6 BIT(29) +#define ALX_ISR_RX_Q5 BIT(28) +#define ALX_ISR_RX_Q4 BIT(27) +#define ALX_ISR_PCIE_LNKDOWN BIT(26) +#define ALX_ISR_PCIE_CERR BIT(25) +#define ALX_ISR_PCIE_NFERR BIT(24) +#define ALX_ISR_PCIE_FERR BIT(23) +#define ALX_ISR_PCIE_UR BIT(22) +#define ALX_ISR_MAC_TX BIT(21) +#define ALX_ISR_MAC_RX BIT(20) +#define ALX_ISR_RX_Q3 BIT(19) +#define ALX_ISR_RX_Q2 BIT(18) +#define ALX_ISR_RX_Q1 BIT(17) +#define ALX_ISR_RX_Q0 BIT(16) +#define ALX_ISR_TX_Q0 BIT(15) +#define ALX_ISR_TXQ_TO BIT(14) +#define ALX_ISR_PHY_LPW BIT(13) +#define ALX_ISR_PHY BIT(12) +#define ALX_ISR_TX_CREDIT BIT(11) +#define ALX_ISR_DMAW BIT(10) +#define ALX_ISR_DMAR BIT(9) +#define ALX_ISR_TXF_UR BIT(8) +#define ALX_ISR_TX_Q3 BIT(7) +#define ALX_ISR_TX_Q2 BIT(6) +#define ALX_ISR_TX_Q1 BIT(5) +#define ALX_ISR_RFD_UR BIT(4) +#define ALX_ISR_RXF_OV BIT(3) +#define ALX_ISR_MANU BIT(2) +#define ALX_ISR_TIMER BIT(1) +#define ALX_ISR_SMB BIT(0) + +#define ALX_IMR 0x1604 + +/* re-send assert msg if SW no response */ +#define ALX_INT_RETRIG 0x1608 +#define ALX_INT_RETRIG_TIMER_MASK 0xFFFFUL +#define ALX_INT_RETRIG_TIMER_SHIFT 0 +/* 40ms */ +#define ALX_INT_RETRIG_TO 20000 + +/* re-send deassert msg if SW no response */ +#define ALX_INT_DEASST_TIMER 0x1614 + +/* reg1620 used for sleep status */ +#define ALX_PATTERN_MASK 0x1620 +#define ALX_PATTERN_MASK_LEN 128 + + +#define ALX_FLT1_SRC_IP0 0x1A00 +#define ALX_FLT1_SRC_IP1 0x1A04 +#define ALX_FLT1_SRC_IP2 0x1A08 +#define ALX_FLT1_SRC_IP3 0x1A0C +#define ALX_FLT1_DST_IP0 0x1A10 +#define ALX_FLT1_DST_IP1 0x1A14 +#define ALX_FLT1_DST_IP2 0x1A18 +#define ALX_FLT1_DST_IP3 0x1A1C +#define ALX_FLT1_PORT 0x1A20 +#define ALX_FLT1_PORT_DST_MASK 0xFFFFUL +#define ALX_FLT1_PORT_DST_SHIFT 16 +#define ALX_FLT1_PORT_SRC_MASK 0xFFFFUL +#define ALX_FLT1_PORT_SRC_SHIFT 0 + +#define ALX_FLT2_SRC_IP0 0x1A24 +#define ALX_FLT2_SRC_IP1 0x1A28 +#define ALX_FLT2_SRC_IP2 0x1A2C +#define ALX_FLT2_SRC_IP3 0x1A30 +#define ALX_FLT2_DST_IP0 0x1A34 +#define ALX_FLT2_DST_IP1 0x1A38 +#define ALX_FLT2_DST_IP2 0x1A40 +#define ALX_FLT2_DST_IP3 0x1A44 +#define ALX_FLT2_PORT 0x1A48 +#define ALX_FLT2_PORT_DST_MASK 0xFFFFUL +#define ALX_FLT2_PORT_DST_SHIFT 16 +#define ALX_FLT2_PORT_SRC_MASK 0xFFFFUL +#define ALX_FLT2_PORT_SRC_SHIFT 0 + +#define ALX_FLT3_SRC_IP0 0x1A4C +#define ALX_FLT3_SRC_IP1 0x1A50 +#define ALX_FLT3_SRC_IP2 0x1A54 +#define ALX_FLT3_SRC_IP3 0x1A58 +#define ALX_FLT3_DST_IP0 0x1A5C +#define ALX_FLT3_DST_IP1 0x1A60 +#define ALX_FLT3_DST_IP2 0x1A64 +#define ALX_FLT3_DST_IP3 0x1A68 +#define ALX_FLT3_PORT 0x1A6C +#define ALX_FLT3_PORT_DST_MASK 0xFFFFUL +#define ALX_FLT3_PORT_DST_SHIFT 16 +#define ALX_FLT3_PORT_SRC_MASK 0xFFFFUL +#define ALX_FLT3_PORT_SRC_SHIFT 0 + +#define ALX_FLT4_SRC_IP0 0x1A70 +#define ALX_FLT4_SRC_IP1 0x1A74 +#define ALX_FLT4_SRC_IP2 0x1A78 +#define ALX_FLT4_SRC_IP3 0x1A7C +#define ALX_FLT4_DST_IP0 0x1A80 +#define ALX_FLT4_DST_IP1 0x1A84 +#define ALX_FLT4_DST_IP2 0x1A88 +#define ALX_FLT4_DST_IP3 0x1A8C +#define ALX_FLT4_PORT 0x1A90 +#define ALX_FLT4_PORT_DST_MASK 0xFFFFUL +#define ALX_FLT4_PORT_DST_SHIFT 16 +#define ALX_FLT4_PORT_SRC_MASK 0xFFFFUL +#define ALX_FLT4_PORT_SRC_SHIFT 0 + +#define ALX_FLT5_SRC_IP0 0x1A94 +#define ALX_FLT5_SRC_IP1 0x1A98 +#define ALX_FLT5_SRC_IP2 0x1A9C +#define ALX_FLT5_SRC_IP3 0x1AA0 +#define ALX_FLT5_DST_IP0 0x1AA4 +#define ALX_FLT5_DST_IP1 0x1AA8 +#define ALX_FLT5_DST_IP2 0x1AAC +#define ALX_FLT5_DST_IP3 0x1AB0 +#define ALX_FLT5_PORT 0x1AB4 +#define ALX_FLT5_PORT_DST_MASK 0xFFFFUL +#define ALX_FLT5_PORT_DST_SHIFT 16 +#define ALX_FLT5_PORT_SRC_MASK 0xFFFFUL +#define ALX_FLT5_PORT_SRC_SHIFT 0 + +#define ALX_FLT6_SRC_IP0 0x1AB8 +#define ALX_FLT6_SRC_IP1 0x1ABC +#define ALX_FLT6_SRC_IP2 0x1AC0 +#define ALX_FLT6_SRC_IP3 0x1AC8 +#define ALX_FLT6_DST_IP0 0x1620 +#define ALX_FLT6_DST_IP1 0x1624 +#define ALX_FLT6_DST_IP2 0x1628 +#define ALX_FLT6_DST_IP3 0x162C +#define ALX_FLT6_PORT 0x1630 +#define ALX_FLT6_PORT_DST_MASK 0xFFFFUL +#define ALX_FLT6_PORT_DST_SHIFT 16 +#define ALX_FLT6_PORT_SRC_MASK 0xFFFFUL +#define ALX_FLT6_PORT_SRC_SHIFT 0 + +#define ALX_FLTCTRL 0x1634 +#define ALX_FLTCTRL_PSTHR_TIMER_MASK 0xFFUL +#define ALX_FLTCTRL_PSTHR_TIMER_SHIFT 24 +#define ALX_FLTCTRL_CHK_DSTPRT6 BIT(23) +#define ALX_FLTCTRL_CHK_SRCPRT6 BIT(22) +#define ALX_FLTCTRL_CHK_DSTIP6 BIT(21) +#define ALX_FLTCTRL_CHK_SRCIP6 BIT(20) +#define ALX_FLTCTRL_CHK_DSTPRT5 BIT(19) +#define ALX_FLTCTRL_CHK_SRCPRT5 BIT(18) +#define ALX_FLTCTRL_CHK_DSTIP5 BIT(17) +#define ALX_FLTCTRL_CHK_SRCIP5 BIT(16) +#define ALX_FLTCTRL_CHK_DSTPRT4 BIT(15) +#define ALX_FLTCTRL_CHK_SRCPRT4 BIT(14) +#define ALX_FLTCTRL_CHK_DSTIP4 BIT(13) +#define ALX_FLTCTRL_CHK_SRCIP4 BIT(12) +#define ALX_FLTCTRL_CHK_DSTPRT3 BIT(11) +#define ALX_FLTCTRL_CHK_SRCPRT3 BIT(10) +#define ALX_FLTCTRL_CHK_DSTIP3 BIT(9) +#define ALX_FLTCTRL_CHK_SRCIP3 BIT(8) +#define ALX_FLTCTRL_CHK_DSTPRT2 BIT(7) +#define ALX_FLTCTRL_CHK_SRCPRT2 BIT(6) +#define ALX_FLTCTRL_CHK_DSTIP2 BIT(5) +#define ALX_FLTCTRL_CHK_SRCIP2 BIT(4) +#define ALX_FLTCTRL_CHK_DSTPRT1 BIT(3) +#define ALX_FLTCTRL_CHK_SRCPRT1 BIT(2) +#define ALX_FLTCTRL_CHK_DSTIP1 BIT(1) +#define ALX_FLTCTRL_CHK_SRCIP1 BIT(0) + +#define ALX_DROP_ALG1 0x1638 +#define ALX_DROP_ALG1_BWCHGVAL_MASK 0xFFFFFUL +#define ALX_DROP_ALG1_BWCHGVAL_SHIFT 12 +/* bit11: 0:3.125%, 1:6.25% */ +#define ALX_DROP_ALG1_BWCHGSCL_6 BIT(11) +#define ALX_DROP_ALG1_ASUR_LWQ_EN BIT(10) +#define ALX_DROP_ALG1_BWCHGVAL_EN BIT(9) +#define ALX_DROP_ALG1_BWCHGSCL_EN BIT(8) +#define ALX_DROP_ALG1_PSTHR_AUTO BIT(7) +#define ALX_DROP_ALG1_MIN_PSTHR_MASK 0x3UL +#define ALX_DROP_ALG1_MIN_PSTHR_SHIFT 5 +#define ALX_DROP_ALG1_MIN_PSTHR_1_16 0 +#define ALX_DROP_ALG1_MIN_PSTHR_1_8 1 +#define ALX_DROP_ALG1_MIN_PSTHR_1_4 2 +#define ALX_DROP_ALG1_MIN_PSTHR_1_2 3 +#define ALX_DROP_ALG1_PSCL_MASK 0x3UL +#define ALX_DROP_ALG1_PSCL_SHIFT 3 +#define ALX_DROP_ALG1_PSCL_1_4 0 +#define ALX_DROP_ALG1_PSCL_1_8 1 +#define ALX_DROP_ALG1_PSCL_1_16 2 +#define ALX_DROP_ALG1_PSCL_1_32 3 +#define ALX_DROP_ALG1_TIMESLOT_MASK 0x7UL +#define ALX_DROP_ALG1_TIMESLOT_SHIFT 0 +#define ALX_DROP_ALG1_TIMESLOT_4MS 0 +#define ALX_DROP_ALG1_TIMESLOT_8MS 1 +#define ALX_DROP_ALG1_TIMESLOT_16MS 2 +#define ALX_DROP_ALG1_TIMESLOT_32MS 3 +#define ALX_DROP_ALG1_TIMESLOT_64MS 4 +#define ALX_DROP_ALG1_TIMESLOT_128MS 5 +#define ALX_DROP_ALG1_TIMESLOT_256MS 6 +#define ALX_DROP_ALG1_TIMESLOT_512MS 7 + +#define ALX_DROP_ALG2 0x163C +#define ALX_DROP_ALG2_SMPLTIME_MASK 0xFUL +#define ALX_DROP_ALG2_SMPLTIME_SHIFT 24 +#define ALX_DROP_ALG2_LWQBW_MASK 0xFFFFFFUL +#define ALX_DROP_ALG2_LWQBW_SHIFT 0 + +#define ALX_SMB_TIMER 0x15C4 + +#define ALX_TINT_TPD_THRSHLD 0x15C8 + +#define ALX_TINT_TIMER 0x15CC + +#define ALX_CLK_GATE 0x1814 +/* bit[8:6]: for B0+ */ +#define ALX_CLK_GATE_125M_SW_DIS_CR BIT(8) +#define ALX_CLK_GATE_125M_SW_AZ BIT(7) +#define ALX_CLK_GATE_125M_SW_IDLE BIT(6) +#define ALX_CLK_GATE_RXMAC BIT(5) +#define ALX_CLK_GATE_TXMAC BIT(4) +#define ALX_CLK_GATE_RXQ BIT(3) +#define ALX_CLK_GATE_TXQ BIT(2) +#define ALX_CLK_GATE_DMAR BIT(1) +#define ALX_CLK_GATE_DMAW BIT(0) +#define ALX_CLK_GATE_ALL_A0 (\ + ALX_CLK_GATE_RXMAC |\ + ALX_CLK_GATE_TXMAC |\ + ALX_CLK_GATE_RXQ |\ + ALX_CLK_GATE_TXQ |\ + ALX_CLK_GATE_DMAR |\ + ALX_CLK_GATE_DMAW) +#define ALX_CLK_GATE_ALL_B0 (\ + ALX_CLK_GATE_ALL_A0) + +/* PORST affect */ +#define ALX_BTROM_CFG 0x1800 + +/* interop between drivers */ +#define ALX_DRV 0x1804 +#define ALX_DRV_PHY_AUTO BIT(28) +#define ALX_DRV_PHY_1000 BIT(27) +#define ALX_DRV_PHY_100 BIT(26) +#define ALX_DRV_PHY_10 BIT(25) +#define ALX_DRV_PHY_DUPLEX BIT(24) +/* bit23: adv Pause */ +#define ALX_DRV_PHY_PAUSE BIT(23) +/* bit22: adv Asym Pause */ +#define ALX_DRV_PHY_APAUSE BIT(22) +/* bit21: 1:en AZ */ +#define ALX_DRV_PHY_EEE BIT(21) +#define ALX_DRV_PHY_MASK 0xFFUL +#define ALX_DRV_PHY_SHIFT 21 +#define ALX_DRV_PHY_UNKNOWN 0 +#define ALX_DRV_DISABLE BIT(18) +#define ALX_DRV_WOLS5_EN BIT(17) +#define ALX_DRV_WOLS5_BIOS_EN BIT(16) +#define ALX_DRV_AZ_EN BIT(12) +#define ALX_DRV_WOLPATTERN_EN BIT(11) +#define ALX_DRV_WOLLINKUP_EN BIT(10) +#define ALX_DRV_WOLMAGIC_EN BIT(9) +#define ALX_DRV_WOLCAP_BIOS_EN BIT(8) +#define ALX_DRV_ASPM_SPD1000LMT_MASK 0x3UL +#define ALX_DRV_ASPM_SPD1000LMT_SHIFT 4 +#define ALX_DRV_ASPM_SPD1000LMT_100M 0 +#define ALX_DRV_ASPM_SPD1000LMT_NO 1 +#define ALX_DRV_ASPM_SPD1000LMT_1M 2 +#define ALX_DRV_ASPM_SPD1000LMT_10M 3 +#define ALX_DRV_ASPM_SPD100LMT_MASK 0x3UL +#define ALX_DRV_ASPM_SPD100LMT_SHIFT 2 +#define ALX_DRV_ASPM_SPD100LMT_1M 0 +#define ALX_DRV_ASPM_SPD100LMT_10M 1 +#define ALX_DRV_ASPM_SPD100LMT_100M 2 +#define ALX_DRV_ASPM_SPD100LMT_NO 3 +#define ALX_DRV_ASPM_SPD10LMT_MASK 0x3UL +#define ALX_DRV_ASPM_SPD10LMT_SHIFT 0 +#define ALX_DRV_ASPM_SPD10LMT_1M 0 +#define ALX_DRV_ASPM_SPD10LMT_10M 1 +#define ALX_DRV_ASPM_SPD10LMT_100M 2 +#define ALX_DRV_ASPM_SPD10LMT_NO 3 + +/* flag of phy inited */ +#define ALX_PHY_INITED 0x003F + +/* PERST affect */ +#define ALX_DRV_ERR1 0x1808 +#define ALX_DRV_ERR1_GEN BIT(31) +#define ALX_DRV_ERR1_NOR BIT(30) +#define ALX_DRV_ERR1_TRUNC BIT(29) +#define ALX_DRV_ERR1_RES BIT(28) +#define ALX_DRV_ERR1_INTFATAL BIT(27) +#define ALX_DRV_ERR1_TXQPEND BIT(26) +#define ALX_DRV_ERR1_DMAW BIT(25) +#define ALX_DRV_ERR1_DMAR BIT(24) +#define ALX_DRV_ERR1_PCIELNKDWN BIT(23) +#define ALX_DRV_ERR1_PKTSIZE BIT(22) +#define ALX_DRV_ERR1_FIFOFUL BIT(21) +#define ALX_DRV_ERR1_RFDUR BIT(20) +#define ALX_DRV_ERR1_RRDSI BIT(19) +#define ALX_DRV_ERR1_UPDATE BIT(18) + +#define ALX_DRV_ERR2 0x180C + +#define ALX_DBG_ADDR 0x1900 +#define ALX_DBG_DATA 0x1904 + +#define ALX_SYNC_IPV4_SA 0x1A00 +#define ALX_SYNC_IPV4_DA 0x1A04 + +#define ALX_SYNC_V4PORT 0x1A08 +#define ALX_SYNC_V4PORT_DST_MASK 0xFFFFUL +#define ALX_SYNC_V4PORT_DST_SHIFT 16 +#define ALX_SYNC_V4PORT_SRC_MASK 0xFFFFUL +#define ALX_SYNC_V4PORT_SRC_SHIFT 0 + +#define ALX_SYNC_IPV6_SA0 0x1A0C +#define ALX_SYNC_IPV6_SA1 0x1A10 +#define ALX_SYNC_IPV6_SA2 0x1A14 +#define ALX_SYNC_IPV6_SA3 0x1A18 +#define ALX_SYNC_IPV6_DA0 0x1A1C +#define ALX_SYNC_IPV6_DA1 0x1A20 +#define ALX_SYNC_IPV6_DA2 0x1A24 +#define ALX_SYNC_IPV6_DA3 0x1A28 + +#define ALX_SYNC_V6PORT 0x1A2C +#define ALX_SYNC_V6PORT_DST_MASK 0xFFFFUL +#define ALX_SYNC_V6PORT_DST_SHIFT 16 +#define ALX_SYNC_V6PORT_SRC_MASK 0xFFFFUL +#define ALX_SYNC_V6PORT_SRC_SHIFT 0 + +#define ALX_ARP_REMOTE_IPV4 0x1A30 +#define ALX_ARP_HOST_IPV4 0x1A34 +#define ALX_ARP_MAC0 0x1A38 +#define ALX_ARP_MAC1 0x1A3C + +#define ALX_1ST_REMOTE_IPV6_0 0x1A40 +#define ALX_1ST_REMOTE_IPV6_1 0x1A44 +#define ALX_1ST_REMOTE_IPV6_2 0x1A48 +#define ALX_1ST_REMOTE_IPV6_3 0x1A4C + +#define ALX_1ST_SN_IPV6_0 0x1A50 +#define ALX_1ST_SN_IPV6_1 0x1A54 +#define ALX_1ST_SN_IPV6_2 0x1A58 +#define ALX_1ST_SN_IPV6_3 0x1A5C + +#define ALX_1ST_TAR_IPV6_1_0 0x1A60 +#define ALX_1ST_TAR_IPV6_1_1 0x1A64 +#define ALX_1ST_TAR_IPV6_1_2 0x1A68 +#define ALX_1ST_TAR_IPV6_1_3 0x1A6C +#define ALX_1ST_TAR_IPV6_2_0 0x1A70 +#define ALX_1ST_TAR_IPV6_2_1 0x1A74 +#define ALX_1ST_TAR_IPV6_2_2 0x1A78 +#define ALX_1ST_TAR_IPV6_2_3 0x1A7C + +#define ALX_2ND_REMOTE_IPV6_0 0x1A80 +#define ALX_2ND_REMOTE_IPV6_1 0x1A84 +#define ALX_2ND_REMOTE_IPV6_2 0x1A88 +#define ALX_2ND_REMOTE_IPV6_3 0x1A8C + +#define ALX_2ND_SN_IPV6_0 0x1A90 +#define ALX_2ND_SN_IPV6_1 0x1A94 +#define ALX_2ND_SN_IPV6_2 0x1A98 +#define ALX_2ND_SN_IPV6_3 0x1A9C + +#define ALX_2ND_TAR_IPV6_1_0 0x1AA0 +#define ALX_2ND_TAR_IPV6_1_1 0x1AA4 +#define ALX_2ND_TAR_IPV6_1_2 0x1AA8 +#define ALX_2ND_TAR_IPV6_1_3 0x1AAC +#define ALX_2ND_TAR_IPV6_2_0 0x1AB0 +#define ALX_2ND_TAR_IPV6_2_1 0x1AB4 +#define ALX_2ND_TAR_IPV6_2_2 0x1AB8 +#define ALX_2ND_TAR_IPV6_2_3 0x1ABC + +#define ALX_1ST_NS_MAC0 0x1AC0 +#define ALX_1ST_NS_MAC1 0x1AC4 + +#define ALX_2ND_NS_MAC0 0x1AC8 +#define ALX_2ND_NS_MAC1 0x1ACC + +#define ALX_PMOFLD 0x144C +/* bit[11:10]: for B0+ */ +#define ALX_PMOFLD_ECMA_IGNR_FRG_SSSR BIT(11) +#define ALX_PMOFLD_ARP_CNFLCT_WAKEUP BIT(10) +#define ALX_PMOFLD_MULTI_SOLD BIT(9) +#define ALX_PMOFLD_ICMP_XSUM BIT(8) +#define ALX_PMOFLD_GARP_REPLY BIT(7) +#define ALX_PMOFLD_SYNCV6_ANY BIT(6) +#define ALX_PMOFLD_SYNCV4_ANY BIT(5) +#define ALX_PMOFLD_BY_HW BIT(4) +#define ALX_PMOFLD_NS_EN BIT(3) +#define ALX_PMOFLD_ARP_EN BIT(2) +#define ALX_PMOFLD_SYNCV6_EN BIT(1) +#define ALX_PMOFLD_SYNCV4_EN BIT(0) + +/* reg 1830 ~ 186C for C0+, 16 bit map patterns and wake packet detection */ +#define ALX_WOL_CTRL2 0x1830 +#define ALX_WOL_CTRL2_DATA_STORE BIT(3) +#define ALX_WOL_CTRL2_PTRN_EVT BIT(2) +#define ALX_WOL_CTRL2_PME_PTRN_EN BIT(1) +#define ALX_WOL_CTRL2_PTRN_EN BIT(0) + +#define ALX_WOL_CTRL3 0x1834 +#define ALX_WOL_CTRL3_PTRN_ADDR_MASK 0xFFFFFUL +#define ALX_WOL_CTRL3_PTRN_ADDR_SHIFT 0 + +#define ALX_WOL_CTRL4 0x1838 +#define ALX_WOL_CTRL4_PT15_MATCH BIT(31) +#define ALX_WOL_CTRL4_PT14_MATCH BIT(30) +#define ALX_WOL_CTRL4_PT13_MATCH BIT(29) +#define ALX_WOL_CTRL4_PT12_MATCH BIT(28) +#define ALX_WOL_CTRL4_PT11_MATCH BIT(27) +#define ALX_WOL_CTRL4_PT10_MATCH BIT(26) +#define ALX_WOL_CTRL4_PT9_MATCH BIT(25) +#define ALX_WOL_CTRL4_PT8_MATCH BIT(24) +#define ALX_WOL_CTRL4_PT7_MATCH BIT(23) +#define ALX_WOL_CTRL4_PT6_MATCH BIT(22) +#define ALX_WOL_CTRL4_PT5_MATCH BIT(21) +#define ALX_WOL_CTRL4_PT4_MATCH BIT(20) +#define ALX_WOL_CTRL4_PT3_MATCH BIT(19) +#define ALX_WOL_CTRL4_PT2_MATCH BIT(18) +#define ALX_WOL_CTRL4_PT1_MATCH BIT(17) +#define ALX_WOL_CTRL4_PT0_MATCH BIT(16) +#define ALX_WOL_CTRL4_PT15_EN BIT(15) +#define ALX_WOL_CTRL4_PT14_EN BIT(14) +#define ALX_WOL_CTRL4_PT13_EN BIT(13) +#define ALX_WOL_CTRL4_PT12_EN BIT(12) +#define ALX_WOL_CTRL4_PT11_EN BIT(11) +#define ALX_WOL_CTRL4_PT10_EN BIT(10) +#define ALX_WOL_CTRL4_PT9_EN BIT(9) +#define ALX_WOL_CTRL4_PT8_EN BIT(8) +#define ALX_WOL_CTRL4_PT7_EN BIT(7) +#define ALX_WOL_CTRL4_PT6_EN BIT(6) +#define ALX_WOL_CTRL4_PT5_EN BIT(5) +#define ALX_WOL_CTRL4_PT4_EN BIT(4) +#define ALX_WOL_CTRL4_PT3_EN BIT(3) +#define ALX_WOL_CTRL4_PT2_EN BIT(2) +#define ALX_WOL_CTRL4_PT1_EN BIT(1) +#define ALX_WOL_CTRL4_PT0_EN BIT(0) + +#define ALX_WOL_CTRL5 0x183C +#define ALX_WOL_CTRL5_PT3_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT3_LEN_SHIFT 24 +#define ALX_WOL_CTRL5_PT2_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT2_LEN_SHIFT 16 +#define ALX_WOL_CTRL5_PT1_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT1_LEN_SHIFT 8 +#define ALX_WOL_CTRL5_PT0_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT0_LEN_SHIFT 0 + +#define ALX_WOL_CTRL6 0x1840 +#define ALX_WOL_CTRL5_PT7_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT7_LEN_SHIFT 24 +#define ALX_WOL_CTRL5_PT6_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT6_LEN_SHIFT 16 +#define ALX_WOL_CTRL5_PT5_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT5_LEN_SHIFT 8 +#define ALX_WOL_CTRL5_PT4_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT4_LEN_SHIFT 0 + +#define ALX_WOL_CTRL7 0x1844 +#define ALX_WOL_CTRL5_PT11_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT11_LEN_SHIFT 24 +#define ALX_WOL_CTRL5_PT10_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT10_LEN_SHIFT 16 +#define ALX_WOL_CTRL5_PT9_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT9_LEN_SHIFT 8 +#define ALX_WOL_CTRL5_PT8_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT8_LEN_SHIFT 0 + +#define ALX_WOL_CTRL8 0x1848 +#define ALX_WOL_CTRL5_PT15_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT15_LEN_SHIFT 24 +#define ALX_WOL_CTRL5_PT14_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT14_LEN_SHIFT 16 +#define ALX_WOL_CTRL5_PT13_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT13_LEN_SHIFT 8 +#define ALX_WOL_CTRL5_PT12_LEN_MASK 0xFFUL +#define ALX_WOL_CTRL5_PT12_LEN_SHIFT 0 + +#define ALX_ACER_FIXED_PTN0 0x1850 +#define ALX_ACER_FIXED_PTN0_MASK 0xFFFFFFFFUL +#define ALX_ACER_FIXED_PTN0_SHIFT 0 + +#define ALX_ACER_FIXED_PTN1 0x1854 +#define ALX_ACER_FIXED_PTN1_MASK 0xFFFFUL +#define ALX_ACER_FIXED_PTN1_SHIFT 0 + +#define ALX_ACER_RANDOM_NUM0 0x1858 +#define ALX_ACER_RANDOM_NUM0_MASK 0xFFFFFFFFUL +#define ALX_ACER_RANDOM_NUM0_SHIFT 0 + +#define ALX_ACER_RANDOM_NUM1 0x185C +#define ALX_ACER_RANDOM_NUM1_MASK 0xFFFFFFFFUL +#define ALX_ACER_RANDOM_NUM1_SHIFT 0 + +#define ALX_ACER_RANDOM_NUM2 0x1860 +#define ALX_ACER_RANDOM_NUM2_MASK 0xFFFFFFFFUL +#define ALX_ACER_RANDOM_NUM2_SHIFT 0 + +#define ALX_ACER_RANDOM_NUM3 0x1864 +#define ALX_ACER_RANDOM_NUM3_MASK 0xFFFFFFFFUL +#define ALX_ACER_RANDOM_NUM3_SHIFT 0 + +#define ALX_ACER_MAGIC 0x1868 +#define ALX_ACER_MAGIC_EN BIT(31) +#define ALX_ACER_MAGIC_PME_EN BIT(30) +#define ALX_ACER_MAGIC_MATCH BIT(29) +#define ALX_ACER_MAGIC_FF_CHECK BIT(10) +#define ALX_ACER_MAGIC_RAN_LEN_MASK 0x1FUL +#define ALX_ACER_MAGIC_RAN_LEN_SHIFT 5 +#define ALX_ACER_MAGIC_FIX_LEN_MASK 0x1FUL +#define ALX_ACER_MAGIC_FIX_LEN_SHIFT 0 + +#define ALX_ACER_TIMER 0x186C +#define ALX_ACER_TIMER_EN BIT(31) +#define ALX_ACER_TIMER_PME_EN BIT(30) +#define ALX_ACER_TIMER_MATCH BIT(29) +#define ALX_ACER_TIMER_THRES_MASK 0x1FFFFUL +#define ALX_ACER_TIMER_THRES_SHIFT 0 +#define ALX_ACER_TIMER_THRES_DEF 1 + +/* RSS definitions */ +#define ALX_RSS_KEY0 0x14B0 +#define ALX_RSS_KEY1 0x14B4 +#define ALX_RSS_KEY2 0x14B8 +#define ALX_RSS_KEY3 0x14BC +#define ALX_RSS_KEY4 0x14C0 +#define ALX_RSS_KEY5 0x14C4 +#define ALX_RSS_KEY6 0x14C8 +#define ALX_RSS_KEY7 0x14CC +#define ALX_RSS_KEY8 0x14D0 +#define ALX_RSS_KEY9 0x14D4 + +#define ALX_RSS_IDT_TBL0 0x1B00 +#define ALX_RSS_IDT_TBL1 0x1B04 +#define ALX_RSS_IDT_TBL2 0x1B08 +#define ALX_RSS_IDT_TBL3 0x1B0C +#define ALX_RSS_IDT_TBL4 0x1B10 +#define ALX_RSS_IDT_TBL5 0x1B14 +#define ALX_RSS_IDT_TBL6 0x1B18 +#define ALX_RSS_IDT_TBL7 0x1B1C +#define ALX_RSS_IDT_TBL8 0x1B20 +#define ALX_RSS_IDT_TBL9 0x1B24 +#define ALX_RSS_IDT_TBL10 0x1B28 +#define ALX_RSS_IDT_TBL11 0x1B2C +#define ALX_RSS_IDT_TBL12 0x1B30 +#define ALX_RSS_IDT_TBL13 0x1B34 +#define ALX_RSS_IDT_TBL14 0x1B38 +#define ALX_RSS_IDT_TBL15 0x1B3C +#define ALX_RSS_IDT_TBL16 0x1B40 +#define ALX_RSS_IDT_TBL17 0x1B44 +#define ALX_RSS_IDT_TBL18 0x1B48 +#define ALX_RSS_IDT_TBL19 0x1B4C +#define ALX_RSS_IDT_TBL20 0x1B50 +#define ALX_RSS_IDT_TBL21 0x1B54 +#define ALX_RSS_IDT_TBL22 0x1B58 +#define ALX_RSS_IDT_TBL23 0x1B5C +#define ALX_RSS_IDT_TBL24 0x1B60 +#define ALX_RSS_IDT_TBL25 0x1B64 +#define ALX_RSS_IDT_TBL26 0x1B68 +#define ALX_RSS_IDT_TBL27 0x1B6C +#define ALX_RSS_IDT_TBL28 0x1B70 +#define ALX_RSS_IDT_TBL29 0x1B74 +#define ALX_RSS_IDT_TBL30 0x1B78 +#define ALX_RSS_IDT_TBL31 0x1B7C + +#define ALX_RSS_HASH_VAL 0x15B0 +#define ALX_RSS_HASH_FLAG 0x15B4 + +#define ALX_RSS_BASE_CPU_NUM 0x15B8 + +#define ALX_MSI_MAP_TBL1 0x15D0 +#define ALX_MSI_MAP_TBL1_ALERT_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_ALERT_SHIFT 28 +#define ALX_MSI_MAP_TBL1_TIMER_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_TIMER_SHIFT 24 +#define ALX_MSI_MAP_TBL1_TXQ1_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_TXQ1_SHIFT 20 +#define ALX_MSI_MAP_TBL1_TXQ0_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_TXQ0_SHIFT 16 +#define ALX_MSI_MAP_TBL1_RXQ3_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_RXQ3_SHIFT 12 +#define ALX_MSI_MAP_TBL1_RXQ2_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_RXQ2_SHIFT 8 +#define ALX_MSI_MAP_TBL1_RXQ1_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_RXQ1_SHIFT 4 +#define ALX_MSI_MAP_TBL1_RXQ0_MASK 0xFUL +#define ALX_MSI_MAP_TBL1_RXQ0_SHIFT 0 + +#define ALX_MSI_MAP_TBL2 0x15D8 +#define ALX_MSI_MAP_TBL2_PHY_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_PHY_SHIFT 28 +#define ALX_MSI_MAP_TBL2_SMB_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_SMB_SHIFT 24 +#define ALX_MSI_MAP_TBL2_TXQ3_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_TXQ3_SHIFT 20 +#define ALX_MSI_MAP_TBL2_TXQ2_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_TXQ2_SHIFT 16 +#define ALX_MSI_MAP_TBL2_RXQ7_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_RXQ7_SHIFT 12 +#define ALX_MSI_MAP_TBL2_RXQ6_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_RXQ6_SHIFT 8 +#define ALX_MSI_MAP_TBL2_RXQ5_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_RXQ5_SHIFT 4 +#define ALX_MSI_MAP_TBL2_RXQ4_MASK 0xFUL +#define ALX_MSI_MAP_TBL2_RXQ4_SHIFT 0 + +#define ALX_MSI_ID_MAP 0x15D4 +#define ALX_MSI_ID_MAP_RXQ7 BIT(30) +#define ALX_MSI_ID_MAP_RXQ6 BIT(29) +#define ALX_MSI_ID_MAP_RXQ5 BIT(28) +#define ALX_MSI_ID_MAP_RXQ4 BIT(27) +/* bit26: 0:common,1:timer */ +#define ALX_MSI_ID_MAP_PCIELNKDW BIT(26) +#define ALX_MSI_ID_MAP_PCIECERR BIT(25) +#define ALX_MSI_ID_MAP_PCIENFERR BIT(24) +#define ALX_MSI_ID_MAP_PCIEFERR BIT(23) +#define ALX_MSI_ID_MAP_PCIEUR BIT(22) +#define ALX_MSI_ID_MAP_MACTX BIT(21) +#define ALX_MSI_ID_MAP_MACRX BIT(20) +#define ALX_MSI_ID_MAP_RXQ3 BIT(19) +#define ALX_MSI_ID_MAP_RXQ2 BIT(18) +#define ALX_MSI_ID_MAP_RXQ1 BIT(17) +#define ALX_MSI_ID_MAP_RXQ0 BIT(16) +#define ALX_MSI_ID_MAP_TXQ0 BIT(15) +#define ALX_MSI_ID_MAP_TXQTO BIT(14) +#define ALX_MSI_ID_MAP_LPW BIT(13) +#define ALX_MSI_ID_MAP_PHY BIT(12) +#define ALX_MSI_ID_MAP_TXCREDIT BIT(11) +#define ALX_MSI_ID_MAP_DMAW BIT(10) +#define ALX_MSI_ID_MAP_DMAR BIT(9) +#define ALX_MSI_ID_MAP_TXFUR BIT(8) +#define ALX_MSI_ID_MAP_TXQ3 BIT(7) +#define ALX_MSI_ID_MAP_TXQ2 BIT(6) +#define ALX_MSI_ID_MAP_TXQ1 BIT(5) +#define ALX_MSI_ID_MAP_RFDUR BIT(4) +#define ALX_MSI_ID_MAP_RXFOV BIT(3) +#define ALX_MSI_ID_MAP_MANU BIT(2) +#define ALX_MSI_ID_MAP_TIMER BIT(1) +#define ALX_MSI_ID_MAP_SMB BIT(0) + +#define ALX_MSI_RETRANS_TIMER 0x1920 +/* bit16: 1:line,0:standard */ +#define ALX_MSI_MASK_SEL_LINE BIT(16) +#define ALX_MSI_RETRANS_TM_MASK 0xFFFFUL +#define ALX_MSI_RETRANS_TM_SHIFT 0 + +#define ALX_CR_DMA_CTRL 0x1930 +#define ALX_CR_DMA_CTRL_PRI BIT(22) +#define ALX_CR_DMA_CTRL_RRDRXD_JOINT BIT(21) +#define ALX_CR_DMA_CTRL_BWCREDIT_MASK 0x3UL +#define ALX_CR_DMA_CTRL_BWCREDIT_SHIFT 19 +#define ALX_CR_DMA_CTRL_BWCREDIT_2KB 0 +#define ALX_CR_DMA_CTRL_BWCREDIT_1KB 1 +#define ALX_CR_DMA_CTRL_BWCREDIT_4KB 2 +#define ALX_CR_DMA_CTRL_BWCREDIT_8KB 3 +#define ALX_CR_DMA_CTRL_BW_EN BIT(18) +#define ALX_CR_DMA_CTRL_BW_RATIO_MASK 0x3UL +#define ALX_CR_DMA_CTRL_BW_RATIO_1_2 0 +#define ALX_CR_DMA_CTRL_BW_RATIO_1_4 1 +#define ALX_CR_DMA_CTRL_BW_RATIO_1_8 2 +#define ALX_CR_DMA_CTRL_BW_RATIO_2_1 3 +#define ALX_CR_DMA_CTRL_SOFT_RST BIT(11) +#define ALX_CR_DMA_CTRL_TXEARLY_EN BIT(10) +#define ALX_CR_DMA_CTRL_RXEARLY_EN BIT(9) +#define ALX_CR_DMA_CTRL_WEARLY_EN BIT(8) +#define ALX_CR_DMA_CTRL_RXTH_MASK 0xFUL +#define ALX_CR_DMA_CTRL_WTH_MASK 0xFUL + + +#define ALX_EFUSE_BIST 0x1934 +#define ALX_EFUSE_BIST_COL_MASK 0x3FUL +#define ALX_EFUSE_BIST_COL_SHIFT 24 +#define ALX_EFUSE_BIST_ROW_MASK 0x7FUL +#define ALX_EFUSE_BIST_ROW_SHIFT 12 +#define ALX_EFUSE_BIST_STEP_MASK 0xFUL +#define ALX_EFUSE_BIST_STEP_SHIFT 8 +#define ALX_EFUSE_BIST_PAT_MASK 0x7UL +#define ALX_EFUSE_BIST_PAT_SHIFT 4 +#define ALX_EFUSE_BIST_CRITICAL BIT(3) +#define ALX_EFUSE_BIST_FIXED BIT(2) +#define ALX_EFUSE_BIST_FAIL BIT(1) +#define ALX_EFUSE_BIST_NOW BIT(0) + +/* CR DMA ctrl */ + +/* TX QoS */ +#define ALX_WRR 0x1938 +#define ALX_WRR_PRI_MASK 0x3UL +#define ALX_WRR_PRI_SHIFT 29 +#define ALX_WRR_PRI_RESTRICT_ALL 0 +#define ALX_WRR_PRI_RESTRICT_HI 1 +#define ALX_WRR_PRI_RESTRICT_HI2 2 +#define ALX_WRR_PRI_RESTRICT_NONE 3 +#define ALX_WRR_PRI3_MASK 0x1FUL +#define ALX_WRR_PRI3_SHIFT 24 +#define ALX_WRR_PRI2_MASK 0x1FUL +#define ALX_WRR_PRI2_SHIFT 16 +#define ALX_WRR_PRI1_MASK 0x1FUL +#define ALX_WRR_PRI1_SHIFT 8 +#define ALX_WRR_PRI0_MASK 0x1FUL +#define ALX_WRR_PRI0_SHIFT 0 + +#define ALX_HQTPD 0x193C +#define ALX_HQTPD_BURST_EN BIT(31) +#define ALX_HQTPD_Q3_NUMPREF_MASK 0xFUL +#define ALX_HQTPD_Q3_NUMPREF_SHIFT 8 +#define ALX_HQTPD_Q2_NUMPREF_MASK 0xFUL +#define ALX_HQTPD_Q2_NUMPREF_SHIFT 4 +#define ALX_HQTPD_Q1_NUMPREF_MASK 0xFUL +#define ALX_HQTPD_Q1_NUMPREF_SHIFT 0 + +#define ALX_CPUMAP1 0x19A0 +#define ALX_CPUMAP1_VCT7_MASK 0xFUL +#define ALX_CPUMAP1_VCT7_SHIFT 28 +#define ALX_CPUMAP1_VCT6_MASK 0xFUL +#define ALX_CPUMAP1_VCT6_SHIFT 24 +#define ALX_CPUMAP1_VCT5_MASK 0xFUL +#define ALX_CPUMAP1_VCT5_SHIFT 20 +#define ALX_CPUMAP1_VCT4_MASK 0xFUL +#define ALX_CPUMAP1_VCT4_SHIFT 16 +#define ALX_CPUMAP1_VCT3_MASK 0xFUL +#define ALX_CPUMAP1_VCT3_SHIFT 12 +#define ALX_CPUMAP1_VCT2_MASK 0xFUL +#define ALX_CPUMAP1_VCT2_SHIFT 8 +#define ALX_CPUMAP1_VCT1_MASK 0xFUL +#define ALX_CPUMAP1_VCT1_SHIFT 4 +#define ALX_CPUMAP1_VCT0_MASK 0xFUL +#define ALX_CPUMAP1_VCT0_SHIFT 0 + +#define ALX_CPUMAP2 0x19A4 +#define ALX_CPUMAP2_VCT15_MASK 0xFUL +#define ALX_CPUMAP2_VCT15_SHIFT 28 +#define ALX_CPUMAP2_VCT14_MASK 0xFUL +#define ALX_CPUMAP2_VCT14_SHIFT 24 +#define ALX_CPUMAP2_VCT13_MASK 0xFUL +#define ALX_CPUMAP2_VCT13_SHIFT 20 +#define ALX_CPUMAP2_VCT12_MASK 0xFUL +#define ALX_CPUMAP2_VCT12_SHIFT 16 +#define ALX_CPUMAP2_VCT11_MASK 0xFUL +#define ALX_CPUMAP2_VCT11_SHIFT 12 +#define ALX_CPUMAP2_VCT10_MASK 0xFUL +#define ALX_CPUMAP2_VCT10_SHIFT 8 +#define ALX_CPUMAP2_VCT9_MASK 0xFUL +#define ALX_CPUMAP2_VCT9_SHIFT 4 +#define ALX_CPUMAP2_VCT8_MASK 0xFUL +#define ALX_CPUMAP2_VCT8_SHIFT 0 + +#define ALX_MISC 0x19C0 +/* bit31: 0:vector,1:cpu */ +#define ALX_MISC_MODU BIT(31) +#define ALX_MISC_OVERCUR BIT(29) +#define ALX_MISC_PSWR_EN BIT(28) +#define ALX_MISC_PSW_CTRL_MASK 0xFUL +#define ALX_MISC_PSW_CTRL_SHIFT 24 +#define ALX_MISC_PSW_OCP_MASK 0x7UL +#define ALX_MISC_PSW_OCP_SHIFT 21 +#define ALX_MISC_PSW_OCP_DEF 0x7 +#define ALX_MISC_V18_HIGH BIT(20) +#define ALX_MISC_LPO_CTRL_MASK 0xFUL +#define ALX_MISC_LPO_CTRL_SHIFT 16 +#define ALX_MISC_ISO_EN BIT(12) +#define ALX_MISC_XSTANA_ALWAYS_ON BIT(11) +#define ALX_MISC_SYS25M_SEL_ADAPTIVE BIT(10) +#define ALX_MISC_SPEED_SIM BIT(9) +#define ALX_MISC_S1_LWP_EN BIT(8) +/* bit7: pcie/mac do pwsaving as phy in lpw state */ +#define ALX_MISC_MACLPW BIT(7) +#define ALX_MISC_125M_SW BIT(6) +#define ALX_MISC_INTNLOSC_OFF_EN BIT(5) +/* bit4: 0:chipset,1:crystle */ +#define ALX_MISC_EXTN25M_SEL BIT(4) +#define ALX_MISC_INTNLOSC_OPEN BIT(3) +#define ALX_MISC_SMBUS_AT_LED BIT(2) +#define ALX_MISC_PPS_AT_LED_MASK 0x3UL +#define ALX_MISC_PPS_AT_LED_SHIFT 0 +#define ALX_MISC_PPS_AT_LED_ACT 1 +#define ALX_MISC_PPS_AT_LED_10_100 2 +#define ALX_MISC_PPS_AT_LED_1000 3 + +#define ALX_MISC1 0x19C4 +#define ALX_MSC1_BLK_CRASPM_REQ BIT(15) + +#define ALX_MSIC2 0x19C8 +#define ALX_MSIC2_CALB_START BIT(0) + +#define ALX_MISC3 0x19CC +/* bit1: 1:Software control 25M */ +#define ALX_MISC3_25M_BY_SW BIT(1) +/* bit0: 25M switch to intnl OSC */ +#define ALX_MISC3_25M_NOTO_INTNL BIT(0) + +/* MSIX tbl in memory space */ +#define ALX_MSIX_ENTRY_BASE 0x2000 + +/***************************** IO mapping registers ***************************/ +#define ALX_IO_ADDR 0x00 +#define ALX_IO_DATA 0x04 +/* same as reg1400 */ +#define ALX_IO_MASTER 0x08 +/* same as reg1480 */ +#define ALX_IO_MAC_CTRL 0x0C +/* same as reg1600 */ +#define ALX_IO_ISR 0x10 +/* same as reg 1604 */ +#define ALX_IO_IMR 0x14 +/* word, same as reg15F0 */ +#define ALX_IO_TPD_PRI1_PIDX 0x18 +/* word, same as reg15F2 */ +#define ALX_IO_TPD_PRI0_PIDX 0x1A +/* word, same as reg15F4 */ +#define ALX_IO_TPD_PRI1_CIDX 0x1C +/* word, same as reg15F6 */ +#define ALX_IO_TPD_PRI0_CIDX 0x1E +/* word, same as reg15E0 */ +#define ALX_IO_RFD_PIDX 0x20 +/* word, same as reg15F8 */ +#define ALX_IO_RFD_CIDX 0x30 +/* same as reg1414 */ +#define ALX_IO_MDIO 0x38 +/* same as reg140C */ +#define ALX_IO_PHY_CTRL 0x3C + + +/********************* PHY regs definition ***************************/ + +/* Autoneg Advertisement Register */ +#define ALX_ADVERTISE_SPEED_MASK 0x01E0 +#define ALX_ADVERTISE_DEFAULT_CAP 0x1DE0 + +/* 1000BASE-T Control Register (0x9) */ +#define ALX_GIGA_CR_1000T_HD_CAPS 0x0100 +#define ALX_GIGA_CR_1000T_FD_CAPS 0x0200 +#define ALX_GIGA_CR_1000T_REPEATER_DTE 0x0400 + +#define ALX_GIGA_CR_1000T_MS_VALUE 0x0800 + +#define ALX_GIGA_CR_1000T_MS_ENABLE 0x1000 + +#define ALX_GIGA_CR_1000T_TEST_MODE_NORMAL 0x0000 +#define ALX_GIGA_CR_1000T_TEST_MODE_1 0x2000 +#define ALX_GIGA_CR_1000T_TEST_MODE_2 0x4000 +#define ALX_GIGA_CR_1000T_TEST_MODE_3 0x6000 +#define ALX_GIGA_CR_1000T_TEST_MODE_4 0x8000 +#define ALX_GIGA_CR_1000T_SPEED_MASK 0x0300 +#define ALX_GIGA_CR_1000T_DEFAULT_CAP 0x0300 + +/* 1000BASE-T Status Register */ +#define ALX_MII_GIGA_SR 0x0A + +/* PHY Specific Status Register */ +#define ALX_MII_GIGA_PSSR 0x11 +#define ALX_GIGA_PSSR_FC_RXEN 0x0004 +#define ALX_GIGA_PSSR_FC_TXEN 0x0008 +#define ALX_GIGA_PSSR_SPD_DPLX_RESOLVED 0x0800 +#define ALX_GIGA_PSSR_DPLX 0x2000 +#define ALX_GIGA_PSSR_SPEED 0xC000 +#define ALX_GIGA_PSSR_10MBS 0x0000 +#define ALX_GIGA_PSSR_100MBS 0x4000 +#define ALX_GIGA_PSSR_1000MBS 0x8000 + +/* PHY Interrupt Enable Register */ +#define ALX_MII_IER 0x12 +#define ALX_IER_LINK_UP 0x0400 +#define ALX_IER_LINK_DOWN 0x0800 + +/* PHY Interrupt Status Register */ +#define ALX_MII_ISR 0x13 +#define ALX_ISR_LINK_UP 0x0400 +#define ALX_ISR_LINK_DOWN 0x0800 + +/* Cable-Detect-Test Control Register */ +#define ALX_MII_CDTC 0x16 +/* self clear */ +#define ALX_CDTC_EN 1 +#define ALX_CDTC_PAIR_MASK 0x3U +#define ALX_CDTC_PAIR_SHIFT 8 + + +/* Cable-Detect-Test Status Register */ +#define ALX_MII_CDTS 0x1C +#define ALX_CDTS_STATUS_MASK 0x3U +#define ALX_CDTS_STATUS_SHIFT 8 +#define ALX_CDTS_STATUS_NORMAL 0 +#define ALX_CDTS_STATUS_SHORT 1 +#define ALX_CDTS_STATUS_OPEN 2 +#define ALX_CDTS_STATUS_INVALID 3 + +#define ALX_MII_DBG_ADDR 0x1D +#define ALX_MII_DBG_DATA 0x1E + +/***************************** debug port *************************************/ + +#define ALX_MIIDBG_ANACTRL 0x00 +#define ALX_ANACTRL_CLK125M_DELAY_EN 0x8000 +#define ALX_ANACTRL_VCO_FAST 0x4000 +#define ALX_ANACTRL_VCO_SLOW 0x2000 +#define ALX_ANACTRL_AFE_MODE_EN 0x1000 +#define ALX_ANACTRL_LCKDET_PHY 0x0800 +#define ALX_ANACTRL_LCKDET_EN 0x0400 +#define ALX_ANACTRL_OEN_125M 0x0200 +#define ALX_ANACTRL_HBIAS_EN 0x0100 +#define ALX_ANACTRL_HB_EN 0x0080 +#define ALX_ANACTRL_SEL_HSP 0x0040 +#define ALX_ANACTRL_CLASSA_EN 0x0020 +#define ALX_ANACTRL_MANUSWON_SWR_MASK 0x3U +#define ALX_ANACTRL_MANUSWON_SWR_SHIFT 2 +#define ALX_ANACTRL_MANUSWON_SWR_2V 0 +#define ALX_ANACTRL_MANUSWON_SWR_1P9V 1 +#define ALX_ANACTRL_MANUSWON_SWR_1P8V 2 +#define ALX_ANACTRL_MANUSWON_SWR_1P7V 3 +#define ALX_ANACTRL_MANUSWON_BW3_4M 0x0002 +#define ALX_ANACTRL_RESTART_CAL 0x0001 +#define ALX_ANACTRL_DEF 0x02EF + + +#define ALX_MIIDBG_SYSMODCTRL 0x04 +#define ALX_SYSMODCTRL_IECHOADJ_PFMH_PHY 0x8000 +#define ALX_SYSMODCTRL_IECHOADJ_BIASGEN 0x4000 +#define ALX_SYSMODCTRL_IECHOADJ_PFML_PHY 0x2000 +#define ALX_SYSMODCTRL_IECHOADJ_PS_MASK 0x3U +#define ALX_SYSMODCTRL_IECHOADJ_PS_SHIFT 10 +#define ALX_SYSMODCTRL_IECHOADJ_PS_40 3 +#define ALX_SYSMODCTRL_IECHOADJ_PS_20 2 +#define ALX_SYSMODCTRL_IECHOADJ_PS_0 1 +#define ALX_SYSMODCTRL_IECHOADJ_10BT_100MV 0x0040 +#define ALX_SYSMODCTRL_IECHOADJ_HLFAP_MASK 0x3U +#define ALX_SYSMODCTRL_IECHOADJ_HLFAP_SHIFT 4 +#define ALX_SYSMODCTRL_IECHOADJ_VDFULBW 0x0008 +#define ALX_SYSMODCTRL_IECHOADJ_VDBIASHLF 0x0004 +#define ALX_SYSMODCTRL_IECHOADJ_VDAMPHLF 0x0002 +#define ALX_SYSMODCTRL_IECHOADJ_VDLANSW 0x0001 +/* en half bias */ +#define ALX_SYSMODCTRL_IECHOADJ_DEF 0xBB8B + + +#define ALX_MIIDBG_SRDSYSMOD 0x05 +#define ALX_SRDSYSMOD_LCKDET_EN 0x2000 +#define ALX_SRDSYSMOD_PLL_EN 0x0800 +#define ALX_SRDSYSMOD_SEL_HSP 0x0400 +#define ALX_SRDSYSMOD_HLFTXDR 0x0200 +#define ALX_SRDSYSMOD_TXCLK_DELAY_EN 0x0100 +#define ALX_SRDSYSMOD_TXELECIDLE 0x0080 +#define ALX_SRDSYSMOD_DEEMP_EN 0x0040 +#define ALX_SRDSYSMOD_MS_PAD 0x0004 +#define ALX_SRDSYSMOD_CDR_ADC_VLTG 0x0002 +#define ALX_SRDSYSMOD_CDR_DAC_1MA 0x0001 +#define ALX_SRDSYSMOD_DEF 0x2C46 + + +#define ALX_MIIDBG_HIBNEG 0x0B +#define ALX_HIBNEG_PSHIB_EN 0x8000 +#define ALX_HIBNEG_WAKE_BOTH 0x4000 +#define ALX_HIBNEG_ONOFF_ANACHG_SUDEN 0x2000 +#define ALX_HIBNEG_HIB_PULSE 0x1000 +#define ALX_HIBNEG_GATE_25M_EN 0x0800 +#define ALX_HIBNEG_RST_80U 0x0400 +#define ALX_HIBNEG_RST_TIMER_MASK 0x3U +#define ALX_HIBNEG_RST_TIMER_SHIFT 8 +#define ALX_HIBNEG_GTX_CLK_DELAY_MASK 0x3U +#define ALX_HIBNEG_GTX_CLK_DELAY_SHIFT 5 +#define ALX_HIBNEG_BYPSS_BRKTIMER 0x0010 +#define ALX_HIBNEG_DEF 0xBC40 +#define ALX_HIBNEG_NOHIB (\ +ALX_HIBNEG_DEF & ~(ALX_HIBNEG_PSHIB_EN | ALX_HIBNEG_HIB_PULSE)) + +#define ALX_MIIDBG_TST10BTCFG 0x12 +#define ALX_TST10BTCFG_INTV_TIMER_MASK 0x3U +#define ALX_TST10BTCFG_INTV_TIMER_SHIFT 14 +#define ALX_TST10BTCFG_TRIGER_TIMER_MASK 0x3U +#define ALX_TST10BTCFG_TRIGER_TIMER_SHIFT 12 +#define ALX_TST10BTCFG_DIV_MAN_MLT3_EN 0x0800 +#define ALX_TST10BTCFG_OFF_DAC_IDLE 0x0400 +#define ALX_TST10BTCFG_LPBK_DEEP 0x0004 +#define ALX_TST10BTCFG_DEF 0x4C04 + +#define ALX_MIIDBG_AZ_ANADECT 0x15 +#define ALX_AZ_ANADECT_10BTRX_TH 0x8000 +#define ALX_AZ_ANADECT_BOTH_01CHNL 0x4000 +#define ALX_AZ_ANADECT_INTV_MASK 0x3FU +#define ALX_AZ_ANADECT_INTV_SHIFT 8 +#define ALX_AZ_ANADECT_THRESH_MASK 0xFU +#define ALX_AZ_ANADECT_THRESH_SHIFT 4 +#define ALX_AZ_ANADECT_CHNL_MASK 0xFU +#define ALX_AZ_ANADECT_CHNL_SHIFT 0 +#define ALX_AZ_ANADECT_DEF 0x3220 +#define ALX_AZ_ANADECT_LONG 0x3210 + +#define ALX_MIIDBG_MSE16DB 0x18 +#define ALX_MSE16DB_UP 0x05EA +#define ALX_MSE16DB_DOWN 0x02EA + +#define ALX_MIIDBG_MSE20DB 0x1C +#define ALX_MSE20DB_TH_MASK 0x7F +#define ALX_MSE20DB_TH_SHIFT 2 +#define ALX_MSE20DB_TH_DEF 0x2E +#define ALX_MSE20DB_TH_HI 0x54 + +#define ALX_MIIDBG_AGC 0x23 +#define ALX_AGC_2_VGA_MASK 0x3FU +#define ALX_AGC_2_VGA_SHIFT 8 +#define ALX_AGC_LONG1G_LIMT 40 +#define ALX_AGC_LONG100M_LIMT 44 + +#define ALX_MIIDBG_LEGCYPS 0x29 +#define ALX_LEGCYPS_EN 0x8000 +#define ALX_LEGCYPS_DAC_AMP1000_MASK 0x7U +#define ALX_LEGCYPS_DAC_AMP1000_SHIFT 12 +#define ALX_LEGCYPS_DAC_AMP100_MASK 0x7U +#define ALX_LEGCYPS_DAC_AMP100_SHIFT 9 +#define ALX_LEGCYPS_DAC_AMP10_MASK 0x7U +#define ALX_LEGCYPS_DAC_AMP10_SHIFT 6 +#define ALX_LEGCYPS_UNPLUG_TIMER_MASK 0x7U +#define ALX_LEGCYPS_UNPLUG_TIMER_SHIFT 3 +#define ALX_LEGCYPS_UNPLUG_DECT_EN 0x0004 +#define ALX_LEGCYPS_ECNC_PS_EN 0x0001 +#define ALX_LEGCYPS_DEF 0x129D + +#define ALX_MIIDBG_TST100BTCFG 0x36 +#define ALX_TST100BTCFG_NORMAL_BW_EN 0x8000 +#define ALX_TST100BTCFG_BADLNK_BYPASS 0x4000 +#define ALX_TST100BTCFG_SHORTCABL_TH_MASK 0x3FU +#define ALX_TST100BTCFG_SHORTCABL_TH_SHIFT 8 +#define ALX_TST100BTCFG_LITCH_EN 0x0080 +#define ALX_TST100BTCFG_VLT_SW 0x0040 +#define ALX_TST100BTCFG_LONGCABL_TH_MASK 0x3FU +#define ALX_TST100BTCFG_LONGCABL_TH_SHIFT 0 +#define ALX_TST100BTCFG_DEF 0xE12C + +#define ALX_MIIDBG_GREENCFG 0x3B +#define ALX_GREENCFG_MSTPS_MSETH2_MASK 0xFFU +#define ALX_GREENCFG_MSTPS_MSETH2_SHIFT 8 +#define ALX_GREENCFG_MSTPS_MSETH1_MASK 0xFFU +#define ALX_GREENCFG_MSTPS_MSETH1_SHIFT 0 +#define ALX_GREENCFG_DEF 0x7078 + +#define ALX_MIIDBG_GREENCFG2 0x3D +#define ALX_GREENCFG2_BP_GREEN 0x8000 +#define ALX_GREENCFG2_GATE_DFSE_EN 0x0080 + + +/***************************** extension **************************************/ + +/******* dev 3 *********/ +#define ALX_MIIEXT_PCS 3 + +#define ALX_MIIEXT_CLDCTRL3 0x8003 +#define ALX_CLDCTRL3_BP_CABLE1TH_DET_GT 0x8000 +#define ALX_CLDCTRL3_AZ_DISAMP 0x1000 + +#define ALX_MIIEXT_CLDCTRL5 0x8005 +#define ALX_CLDCTRL5_BP_VD_HLFBIAS 0x4000 + +#define ALX_MIIEXT_CLDCTRL6 0x8006 +#define ALX_CLDCTRL6_CAB_LEN_MASK 0xFFU +#define ALX_CLDCTRL6_CAB_LEN_SHIFT 0 +#define ALX_CLDCTRL6_CAB_LEN_SHORT1G 116 +#define ALX_CLDCTRL6_CAB_LEN_SHORT100M 152 + +#define ALX_MIIEXT_CLDCTRL7 0x8007 +#define ALX_CLDCTRL7_VDHLF_BIAS_TH_MASK 0x7FU +#define ALX_CLDCTRL7_VDHLF_BIAS_TH_SHIFT 9 +#define ALX_CLDCTRL7_AFE_AZ_MASK 0x1FU +#define ALX_CLDCTRL7_AFE_AZ_SHIFT 4 +#define ALX_CLDCTRL7_SIDE_PEAK_TH_MASK 0xFU +#define ALX_CLDCTRL7_SIDE_PEAK_TH_SHIFT 0 +#define ALX_CLDCTRL7_DEF 0x6BF6 + +#define ALX_MIIEXT_AZCTRL 0x8008 +#define ALX_AZCTRL_SHORT_TH_MASK 0xFFU +#define ALX_AZCTRL_SHORT_TH_SHIFT 8 +#define ALX_AZCTRL_LONG_TH_MASK 0xFFU +#define ALX_AZCTRL_LONG_TH_SHIFT 0 +#define ALX_AZCTRL_DEF 0x1629 + +#define ALX_MIIEXT_AZCTRL2 0x8009 +#define ALX_AZCTRL2_WAKETRNING_MASK 0xFFU +#define ALX_AZCTRL2_WAKETRNING_SHIFT 8 +#define ALX_AZCTRL2_QUIET_TIMER_MASK 0x3U +#define ALX_AZCTRL2_QUIET_TIMER_SHIFT 6 +#define ALX_AZCTRL2_PHAS_JMP2 0x0010 +#define ALX_AZCTRL2_CLKTRCV_125MD16 0x0008 +#define ALX_AZCTRL2_GATE1000_EN 0x0004 +#define ALX_AZCTRL2_AVRG_FREQ 0x0002 +#define ALX_AZCTRL2_PHAS_JMP4 0x0001 +#define ALX_AZCTRL2_DEF 0x32C0 + +#define ALX_MIIEXT_AZCTRL6 0x800D + +#define ALX_MIIEXT_VDRVBIAS 0x8062 +#define ALX_VDRVBIAS_SEL_MASK 0x3U +#define ALX_VDRVBIAS_SEL_SHIFT 0 +#define ALX_VDRVBIAS_DEF 0x3 + +/********* dev 7 **********/ +#define ALX_MIIEXT_ANEG 7 + +#define ALX_MIIEXT_LOCAL_EEEADV 0x3C +#define ALX_LOCAL_EEEADV_1000BT 0x0004 +#define ALX_LOCAL_EEEADV_100BT 0x0002 + +#define ALX_MIIEXT_REMOTE_EEEADV 0x3D +#define ALX_REMOTE_EEEADV_1000BT 0x0004 +#define ALX_REMOTE_EEEADV_100BT 0x0002 + +#define ALX_MIIEXT_EEE_ANEG 0x8000 +#define ALX_EEE_ANEG_1000M 0x0004 +#define ALX_EEE_ANEG_100M 0x0002 + +#define ALX_MIIEXT_AFE 0x801A +#define ALX_AFE_10BT_100M_TH 0x0040 + +#define ALX_MIIEXT_S3DIG10 0x8023 +/* bit0: 1:bypass 10BT rx fifo, 0:riginal 10BT rx */ +#define ALX_MIIEXT_S3DIG10_SL 0x0001 +#define ALX_MIIEXT_S3DIG10_DEF 0 + +#define ALX_MIIEXT_NLP34 0x8025 +/* for 160m */ +#define ALX_MIIEXT_NLP34_DEF 0x1010 + +#define ALX_MIIEXT_NLP56 0x8026 +/* for 160m */ +#define ALX_MIIEXT_NLP56_DEF 0x1010 + +#define ALX_MIIEXT_NLP78 0x8027 +/* for 160m */ +#define ALX_MIIEXT_NLP78_160M_DEF 0x8D05 +#define ALX_MIIEXT_NLP78_120M_DEF 0x8A05 + +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/alx/Kconfig +++ linux-lts-raring-3.8.0/ubuntu/alx/Kconfig @@ -0,0 +1,18 @@ + +config ALX + tristate "Qualcomm Atheros L1F Gigabit Ethernet support" + depends on PCI + select CRC32 + select NET_CORE + select MII + ---help--- + This driver supports the Qualcomm Atheros L1F ethernet adapter. + This driver supports following chipsets: + + 1969:1091 - AR8161 Gigabit Ethernet + 1969:1090 - AR8162 Fast Ethernet + 1969:10A1 - AR8171 Gigabit Ethernet + 1969:10A0 - AR8172 Fast Ethernet + + To compile this driver as a module, choose M here. The module + will be called alx. --- linux-lts-raring-3.8.0.orig/ubuntu/alx/alx_hw.c +++ linux-lts-raring-3.8.0/ubuntu/alx/alx_hw.c @@ -0,0 +1,1461 @@ +/* + * Copyright (c) 2012 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + */ +#include +#include +#include +#include + +#include "alx_reg.h" +#include "alx_hw.h" + +#define ALX_REV_A(_r) ((_r) == ALX_REV_A0 || (_r) == ALX_REV_A1) + +/* get permanent mac address from */ +int alx_get_perm_macaddr(struct alx_hw *hw, u8 *addr) +{ + u32 val, mac0, mac1; + u16 flag, i; + +#define INTN_LOADED 0x1 +#define EXTN_LOADED 0x2 + + flag = 0; + val = 0; + +read_mcadr: + + /* get it from register first */ + ALX_MEM_R32(hw, ALX_STAD0, &mac0); + ALX_MEM_R32(hw, ALX_STAD1, &mac1); + + /* addr should be big-endian */ + *(__be32 *)(addr + 2) = cpu_to_be32(mac0); + *(__be16 *)addr = cpu_to_be16((u16)mac1); + + if (is_valid_ether_addr(addr)) + return 0; + + if ((flag & INTN_LOADED) == 0) { + /* load from efuse ? */ + for (i = 0; i < ALX_SLD_MAX_TO; i++) { + ALX_MEM_R32(hw, ALX_SLD, &val); + if ((val & (ALX_SLD_STAT | ALX_SLD_START)) == 0) + break; + mdelay(1); + } + if (i == ALX_SLD_MAX_TO) + goto out; + ALX_MEM_W32(hw, ALX_SLD, val | ALX_SLD_START); + for (i = 0; i < ALX_SLD_MAX_TO; i++) { + mdelay(1); + ALX_MEM_R32(hw, ALX_SLD, &val); + if ((val & ALX_SLD_START) == 0) + break; + } + if (i == ALX_SLD_MAX_TO) + goto out; + flag |= INTN_LOADED; + goto read_mcadr; + } + + if ((flag & EXTN_LOADED) == 0) { + ALX_MEM_R32(hw, ALX_EFLD, &val); + if ((val & (ALX_EFLD_F_EXIST | ALX_EFLD_E_EXIST)) != 0) { + /* load from eeprom/flash ? */ + for (i = 0; i < ALX_SLD_MAX_TO; i++) { + ALX_MEM_R32(hw, ALX_EFLD, &val); + if ((val & (ALX_EFLD_STAT | + ALX_EFLD_START)) == 0) { + break; + } + mdelay(1); + } + if (i == ALX_SLD_MAX_TO) + goto out; + ALX_MEM_W32(hw, ALX_EFLD, val | ALX_EFLD_START); + for (i = 0; i < ALX_SLD_MAX_TO; i++) { + mdelay(1); + ALX_MEM_R32(hw, ALX_EFLD, &val); + if ((val & ALX_EFLD_START) == 0) + break; + } + if (i == ALX_SLD_MAX_TO) + goto out; + flag |= EXTN_LOADED; + goto read_mcadr; + } + } + +out: + return ALX_ERR_ALOAD; +} + +void alx_set_macaddr(struct alx_hw *hw, u8 *addr) +{ + u32 val; + + /* for example: 00-0B-6A-F6-00-DC * STAD0=6AF600DC, STAD1=000B */ + val = be32_to_cpu(*(__be32 *)(addr + 2)); + ALX_MEM_W32(hw, ALX_STAD0, val); + val = be16_to_cpu(*(__be16 *)addr); + ALX_MEM_W32(hw, ALX_STAD1, val); +} + +void alx_add_mc_addr(struct alx_hw *hw, u8 *addr) +{ + u32 crc32, bit, reg; + + crc32 = ether_crc(ETH_ALEN, addr); + + /* The HASH Table is a register array of 2 32-bit registers. + * It is treated like an array of 64 bits. We want to set + * bit BitArray[hash_value]. So we figure out what register + * the bit is in, read it, OR in the new bit, then write + * back the new value. The register is determined by the + * upper 7 bits of the hash value and the bit within that + * register are determined by the lower 5 bits of the value. + */ + reg = (crc32 >> 31) & 0x1; + bit = (crc32 >> 26) & 0x1F; + + hw->mc_hash[reg] |= (0x1 << bit); +} + +void alx_enable_osc(struct alx_hw *hw) +{ + u32 val; + + /* rising edge */ + ALX_MEM_R32(hw, ALX_MISC, &val); + ALX_MEM_W32(hw, ALX_MISC, val & ~ALX_MISC_INTNLOSC_OPEN); + ALX_MEM_W32(hw, ALX_MISC, val | ALX_MISC_INTNLOSC_OPEN); +} + +void alx_reset_osc(struct alx_hw *hw, u8 rev) +{ + u32 val, val2; + + /* clear Internal OSC settings, switching OSC by hw itself */ + ALX_MEM_R32(hw, ALX_MISC3, &val); + ALX_MEM_W32(hw, ALX_MISC3, + (val & ~ALX_MISC3_25M_BY_SW) | ALX_MISC3_25M_NOTO_INTNL); + + /* 25M clk from chipset may be unstable 1s after de-assert of + * PERST, driver need re-calibrate before enter Sleep for WoL + */ + ALX_MEM_R32(hw, ALX_MISC, &val); + if (rev >= ALX_REV_B0) { + /* restore over current protection def-val, + * this val could be reset by MAC-RST + */ + FIELD_SET32(val, ALX_MISC_PSW_OCP, ALX_MISC_PSW_OCP_DEF); + /* a 0->1 change will update the internal val of osc */ + val &= ~ALX_MISC_INTNLOSC_OPEN; + ALX_MEM_W32(hw, ALX_MISC, val); + ALX_MEM_W32(hw, ALX_MISC, val | ALX_MISC_INTNLOSC_OPEN); + /* hw will automatically dis OSC after cab. */ + ALX_MEM_R32(hw, ALX_MSIC2, &val2); + val2 &= ~ALX_MSIC2_CALB_START; + ALX_MEM_W32(hw, ALX_MSIC2, val2); + ALX_MEM_W32(hw, ALX_MSIC2, val2 | ALX_MSIC2_CALB_START); + } else { + val &= ~ALX_MISC_INTNLOSC_OPEN; + /* disable isoloate for A0 */ + if (ALX_REV_A(rev)) + val &= ~ALX_MISC_ISO_EN; + + ALX_MEM_W32(hw, ALX_MISC, val | ALX_MISC_INTNLOSC_OPEN); + ALX_MEM_W32(hw, ALX_MISC, val); + } + + udelay(20); +} + +int alx_reset_mac(struct alx_hw *hw) +{ + u32 val, pmctrl; + int i, ret; + u8 rev; + bool a_cr; + + pmctrl = 0; + rev = (u8)ALX_REVID(hw); + a_cr = ALX_REV_A(rev) && ALX_WITH_CR(hw); + + /* disable all interrupts, RXQ/TXQ */ + ALX_MEM_W32(hw, ALX_MSIX_MASK, 0xFFFFFFFF); + ALX_MEM_W32(hw, ALX_IMR, 0); + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + + ret = alx_stop_mac(hw); + if (ret) + return ret; + + /* mac reset workaroud */ + ALX_MEM_W32(hw, ALX_RFD_PIDX, 1); + + /* dis l0s/l1 before mac reset */ + if (a_cr) { + ALX_MEM_R32(hw, ALX_PMCTRL, &pmctrl); + if ((pmctrl & (ALX_PMCTRL_L1_EN | ALX_PMCTRL_L0S_EN)) != 0) { + ALX_MEM_W32(hw, ALX_PMCTRL, + pmctrl & ~(ALX_PMCTRL_L1_EN | + ALX_PMCTRL_L0S_EN)); + } + } + + /* reset whole mac safely */ + ALX_MEM_R32(hw, ALX_MASTER, &val); + ALX_MEM_W32(hw, ALX_MASTER, + val | ALX_MASTER_DMA_MAC_RST | ALX_MASTER_OOB_DIS); + + /* make sure it's real idle */ + udelay(10); + for (i = 0; i < ALX_DMA_MAC_RST_TO; i++) { + ALX_MEM_R32(hw, ALX_RFD_PIDX, &val); + if (val == 0) + break; + udelay(10); + } + for (; i < ALX_DMA_MAC_RST_TO; i++) { + ALX_MEM_R32(hw, ALX_MASTER, &val); + if ((val & ALX_MASTER_DMA_MAC_RST) == 0) + break; + udelay(10); + } + if (i == ALX_DMA_MAC_RST_TO) + return ALX_ERR_RSTMAC; + udelay(10); + + if (a_cr) { + /* set ALX_MASTER_PCLKSEL_SRDS (affect by soft-rst, PERST) */ + ALX_MEM_W32(hw, ALX_MASTER, val | ALX_MASTER_PCLKSEL_SRDS); + /* resoter l0s / l1 */ + if (pmctrl & (ALX_PMCTRL_L1_EN | ALX_PMCTRL_L0S_EN)) + ALX_MEM_W32(hw, ALX_PMCTRL, pmctrl); + } + + alx_reset_osc(hw, rev); + /* clear Internal OSC settings, switching OSC by hw itself, + * disable isoloate for A version + */ + ALX_MEM_R32(hw, ALX_MISC3, &val); + ALX_MEM_W32(hw, ALX_MISC3, + (val & ~ALX_MISC3_25M_BY_SW) | ALX_MISC3_25M_NOTO_INTNL); + ALX_MEM_R32(hw, ALX_MISC, &val); + val &= ~ALX_MISC_INTNLOSC_OPEN; + if (ALX_REV_A(rev)) + val &= ~ALX_MISC_ISO_EN; + ALX_MEM_W32(hw, ALX_MISC, val); + udelay(20); + + /* driver control speed/duplex, hash-alg */ + ALX_MEM_W32(hw, ALX_MAC_CTRL, hw->rx_ctrl); + + /* clk sw */ + ALX_MEM_R32(hw, ALX_SERDES, &val); + ALX_MEM_W32(hw, ALX_SERDES, + val | ALX_SERDES_MACCLK_SLWDWN | ALX_SERDES_PHYCLK_SLWDWN); + + /* mac reset cause MDIO ctrl restore non-polling status */ + if (hw->is_fpga) + __alx_start_phy_polling(hw, ALX_MDIO_CLK_SEL_25MD128); + + + return ret; +} + +/* alx_reset_phy + * completely reset phy, all settings/workaround will be re-configureed + * hib_en: enable/disable hibernation on PHY + */ +void alx_reset_phy(struct alx_hw *hw, bool hib_en) +{ + int i; + u32 val; + u16 phy_val; + + /* (DSP)reset PHY core */ + ALX_MEM_R32(hw, ALX_PHY_CTRL, &val); + val &= ~(ALX_PHY_CTRL_DSPRST_OUT | ALX_PHY_CTRL_IDDQ | + ALX_PHY_CTRL_GATE_25M | ALX_PHY_CTRL_POWER_DOWN | + ALX_PHY_CTRL_CLS); + val |= ALX_PHY_CTRL_RST_ANALOG; + + if (hib_en) + val |= (ALX_PHY_CTRL_HIB_PULSE | ALX_PHY_CTRL_HIB_EN); + else + val &= ~(ALX_PHY_CTRL_HIB_PULSE | ALX_PHY_CTRL_HIB_EN); + ALX_MEM_W32(hw, ALX_PHY_CTRL, val); + udelay(10); + ALX_MEM_W32(hw, ALX_PHY_CTRL, val | ALX_PHY_CTRL_DSPRST_OUT); + + /* delay 800us */ + for (i = 0; i < ALX_PHY_CTRL_DSPRST_TO; i++) + udelay(10); + + if (hw->is_fpga) + goto set_imr; + + /* phy power saving & hib */ + if (hib_en) { + alx_write_phy_dbg(hw, ALX_MIIDBG_LEGCYPS, ALX_LEGCYPS_DEF); + alx_write_phy_dbg(hw, ALX_MIIDBG_SYSMODCTRL, + ALX_SYSMODCTRL_IECHOADJ_DEF); + alx_write_phy_ext(hw, ALX_MIIEXT_PCS, ALX_MIIEXT_VDRVBIAS, + ALX_VDRVBIAS_DEF); + } else { + alx_write_phy_dbg(hw, ALX_MIIDBG_LEGCYPS, + ALX_LEGCYPS_DEF & ~ALX_LEGCYPS_EN); + alx_write_phy_dbg(hw, ALX_MIIDBG_HIBNEG, ALX_HIBNEG_NOHIB); + alx_write_phy_dbg(hw, ALX_MIIDBG_GREENCFG, ALX_GREENCFG_DEF); + } + + /* EEE advertisement */ + if (ALX_CAP(hw, AZ)) { + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, + ALX_MIIEXT_LOCAL_EEEADV, + ALX_CAP(hw, GIGA) ? + ALX_LOCAL_EEEADV_1000BT | ALX_LOCAL_EEEADV_100BT : + ALX_LOCAL_EEEADV_100BT); + /* half amplify */ + alx_write_phy_dbg(hw, ALX_MIIDBG_AZ_ANADECT, + ALX_AZ_ANADECT_DEF); + } else { + ALX_MEM_R32(hw, ALX_LPI_CTRL, &val); + ALX_MEM_W32(hw, ALX_LPI_CTRL, val & ~ALX_LPI_CTRL_EN); + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, + ALX_MIIEXT_LOCAL_EEEADV, 0); + } + + /* phy power saving */ + alx_write_phy_dbg(hw, ALX_MIIDBG_TST10BTCFG, ALX_TST10BTCFG_DEF); + alx_write_phy_dbg(hw, ALX_MIIDBG_SRDSYSMOD, ALX_SRDSYSMOD_DEF); + alx_write_phy_dbg(hw, ALX_MIIDBG_TST100BTCFG, ALX_TST100BTCFG_DEF); + alx_write_phy_dbg(hw, ALX_MIIDBG_ANACTRL, ALX_ANACTRL_DEF); + alx_read_phy_dbg(hw, ALX_MIIDBG_GREENCFG2, &phy_val); + alx_write_phy_dbg(hw, ALX_MIIDBG_GREENCFG2, + phy_val & ~ALX_GREENCFG2_GATE_DFSE_EN); + /* rtl8139c, 120m issue */ + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_NLP78, + ALX_MIIEXT_NLP78_120M_DEF); + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_S3DIG10, + ALX_MIIEXT_S3DIG10_DEF); + + if (hw->lnk_patch) { + /* Turn off half amplitude */ + alx_read_phy_ext(hw, ALX_MIIEXT_PCS, ALX_MIIEXT_CLDCTRL3, + &phy_val); + alx_write_phy_ext(hw, ALX_MIIEXT_PCS, ALX_MIIEXT_CLDCTRL3, + phy_val | ALX_CLDCTRL3_BP_CABLE1TH_DET_GT); + /* Turn off Green feature */ + alx_read_phy_dbg(hw, ALX_MIIDBG_GREENCFG2, &phy_val); + alx_write_phy_dbg(hw, ALX_MIIDBG_GREENCFG2, + phy_val | ALX_GREENCFG2_BP_GREEN); + /* Turn off half Bias */ + alx_read_phy_ext(hw, ALX_MIIEXT_PCS, ALX_MIIEXT_CLDCTRL5, + &phy_val); + alx_write_phy_ext(hw, ALX_MIIEXT_PCS, ALX_MIIEXT_CLDCTRL5, + phy_val | ALX_CLDCTRL5_BP_VD_HLFBIAS); + } + +set_imr: + /* set phy interrupt mask */ + alx_write_phy_reg(hw, ALX_MII_IER, + ALX_IER_LINK_UP | ALX_IER_LINK_DOWN); +} + +#define ALX_PCI_CMD (\ + PCI_COMMAND_MASTER |\ + PCI_COMMAND_MEMORY |\ + PCI_COMMAND_IO) +/* + * alx_reset_pcie + * reset pcie relative registers (pci command, clk, aspm...) + */ +void alx_reset_pcie(struct alx_hw *hw) +{ + u32 val; + u16 val16; + u8 rev = (u8)ALX_REVID(hw); + + /* Workaround for PCI problem when BIOS sets MMRBC incorrectly. */ + ALX_CFG_R16(hw, PCI_COMMAND, &val16); + if (!(val16 & ALX_PCI_CMD) || (val16 & PCI_COMMAND_INTX_DISABLE)) { + val16 = (val16 | ALX_PCI_CMD) & ~PCI_COMMAND_INTX_DISABLE; + ALX_CFG_W16(hw, PCI_COMMAND, val16); + } + + /* clear WoL setting/status */ + ALX_MEM_R32(hw, ALX_WOL0, &val); + ALX_MEM_W32(hw, ALX_WOL0, 0); + + /* deflt val of PDLL D3PLLOFF */ + ALX_MEM_R32(hw, ALX_PDLL_TRNS1, &val); + ALX_MEM_W32(hw, ALX_PDLL_TRNS1, val & ~ALX_PDLL_TRNS1_D3PLLOFF_EN); + + /* mask some pcie error bits */ + ALX_MEM_R32(hw, ALX_UE_SVRT, &val); + val &= ~(ALX_UE_SVRT_DLPROTERR | ALX_UE_SVRT_FCPROTERR); + ALX_MEM_W32(hw, ALX_UE_SVRT, val); + + /* wol 25M & pclk */ + ALX_MEM_R32(hw, ALX_MASTER, &val); + if (ALX_REV_A(rev) && ALX_WITH_CR(hw)) { + if ((val & ALX_MASTER_WAKEN_25M) == 0 || + (val & ALX_MASTER_PCLKSEL_SRDS) == 0) { + ALX_MEM_W32(hw, ALX_MASTER, + val | ALX_MASTER_PCLKSEL_SRDS | + ALX_MASTER_WAKEN_25M); + } + } else { + if ((val & ALX_MASTER_WAKEN_25M) == 0 || + (val & ALX_MASTER_PCLKSEL_SRDS) != 0) { + ALX_MEM_W32(hw, ALX_MASTER, + (val & ~ALX_MASTER_PCLKSEL_SRDS) | + ALX_MASTER_WAKEN_25M); + } + } + + /* ASPM setting */ + alx_enable_aspm(hw, ALX_CAP(hw, L0S), ALX_CAP(hw, L1)); + + udelay(10); +} + +/* alx_stop_mac + * stop the mac, transmit & receive modules + * return : 0 if ok, none-0 if busy + */ +int alx_stop_mac(struct alx_hw *hw) +{ + u32 rxq, txq, val; + u16 i; + + ALX_MEM_R32(hw, ALX_RXQ0, &rxq); + ALX_MEM_W32(hw, ALX_RXQ0, rxq & ~ALX_RXQ0_EN); + ALX_MEM_R32(hw, ALX_TXQ0, &txq); + ALX_MEM_W32(hw, ALX_TXQ0, txq & ~ALX_TXQ0_EN); + + udelay(40); + + hw->rx_ctrl &= ~(ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_TX_EN); + ALX_MEM_W32(hw, ALX_MAC_CTRL, hw->rx_ctrl); + + for (i = 0; i < ALX_DMA_MAC_RST_TO; i++) { + ALX_MEM_R32(hw, ALX_MAC_STS, &val); + if (!(val & ALX_MAC_STS_IDLE)) + break; + udelay(10); + } + + return (ALX_DMA_MAC_RST_TO == i) ? ALX_ERR_RSTMAC : 0; +} + +/* alx_start_mac + * enable rx/tx MAC module + */ +void alx_start_mac(struct alx_hw *hw) +{ + u32 mac, txq, rxq; + + ALX_MEM_R32(hw, ALX_RXQ0, &rxq); + ALX_MEM_W32(hw, ALX_RXQ0, rxq | ALX_RXQ0_EN); + ALX_MEM_R32(hw, ALX_TXQ0, &txq); + ALX_MEM_W32(hw, ALX_TXQ0, txq | ALX_TXQ0_EN); + + mac = hw->rx_ctrl; + if (hw->link_duplex == FULL_DUPLEX) + mac |= ALX_MAC_CTRL_FULLD; + else + mac &= ~ALX_MAC_CTRL_FULLD; + FIELD_SET32(mac, ALX_MAC_CTRL_SPEED, hw->link_speed == SPEED_1000 ? + ALX_MAC_CTRL_SPEED_1000 : ALX_MAC_CTRL_SPEED_10_100); + mac |= ALX_MAC_CTRL_TX_EN | ALX_MAC_CTRL_RX_EN; + hw->rx_ctrl = mac; + ALX_MEM_W32(hw, ALX_MAC_CTRL, mac); +} + +/* set flow control on MAC side */ +void alx_cfg_mac_fc(struct alx_hw *hw, u8 fc) +{ + if (fc & ALX_FC_RX) + hw->rx_ctrl |= ALX_MAC_CTRL_RXFC_EN; + else + hw->rx_ctrl &= ~ALX_MAC_CTRL_RXFC_EN; + + if (fc & ALX_FC_TX) + hw->rx_ctrl |= ALX_MAC_CTRL_TXFC_EN; + else + hw->rx_ctrl &= ~ALX_MAC_CTRL_TXFC_EN; + + ALX_MEM_W32(hw, ALX_MAC_CTRL, hw->rx_ctrl); +} + +/* enable/disable aspm support */ +void alx_enable_aspm(struct alx_hw *hw, bool l0s_en, bool l1_en) +{ + u32 pmctrl; + u8 rev = (u8)ALX_REVID(hw); + + ALX_MEM_R32(hw, ALX_PMCTRL, &pmctrl); + + FIELD_SET32(pmctrl, ALX_PMCTRL_LCKDET_TIMER, + ALX_PMCTRL_LCKDET_TIMER_DEF); + pmctrl |= ALX_PMCTRL_RCVR_WT_1US | + ALX_PMCTRL_L1_CLKSW_EN | + ALX_PMCTRL_L1_SRDSRX_PWD ; + FIELD_SET32(pmctrl, ALX_PMCTRL_L1REQ_TO, ALX_PMCTRL_L1REG_TO_DEF); + FIELD_SET32(pmctrl, ALX_PMCTRL_L1_TIMER, ALX_PMCTRL_L1_TIMER_16US); + pmctrl &= ~(ALX_PMCTRL_L1_SRDS_EN | + ALX_PMCTRL_L1_SRDSPLL_EN | + ALX_PMCTRL_L1_BUFSRX_EN | + ALX_PMCTRL_SADLY_EN | + ALX_PMCTRL_HOTRST_WTEN| + ALX_PMCTRL_L0S_EN | + ALX_PMCTRL_L1_EN | + ALX_PMCTRL_ASPM_FCEN | + ALX_PMCTRL_TXL1_AFTER_L0S | + ALX_PMCTRL_RXL1_AFTER_L0S + ); + if (ALX_REV_A(rev) && ALX_WITH_CR(hw)) + pmctrl |= ALX_PMCTRL_L1_SRDS_EN | ALX_PMCTRL_L1_SRDSPLL_EN; + + if (l0s_en) + pmctrl |= (ALX_PMCTRL_L0S_EN | ALX_PMCTRL_ASPM_FCEN); + if (l1_en) + pmctrl |= (ALX_PMCTRL_L1_EN | ALX_PMCTRL_ASPM_FCEN); + + ALX_MEM_W32(hw, ALX_PMCTRL, pmctrl); +} + + +/* translate ethtool adv /speed/duplex settting to hw specific value */ +u32 ethadv_to_hw_cfg(struct alx_hw *hw, u32 ethadv_cfg) +{ + u32 cfg = 0; + + if (ethadv_cfg & ADVERTISED_Autoneg) { + cfg |= ALX_DRV_PHY_AUTO; + if (ethadv_cfg & ADVERTISED_10baseT_Half) + cfg |= ALX_DRV_PHY_10; + if (ethadv_cfg & ADVERTISED_10baseT_Full) + cfg |= ALX_DRV_PHY_10 | ALX_DRV_PHY_DUPLEX; + if (ethadv_cfg & ADVERTISED_100baseT_Half) + cfg |= ALX_DRV_PHY_100; + if (ethadv_cfg & ADVERTISED_100baseT_Full) + cfg |= ALX_DRV_PHY_100 | ALX_DRV_PHY_DUPLEX; + if (ethadv_cfg & ADVERTISED_1000baseT_Half) + cfg |= ALX_DRV_PHY_1000; + if (ethadv_cfg & ADVERTISED_1000baseT_Full) + cfg |= ALX_DRV_PHY_100 | ALX_DRV_PHY_DUPLEX; + if (ethadv_cfg & ADVERTISED_Pause) + cfg |= ADVERTISE_PAUSE_CAP; + if (ethadv_cfg & ADVERTISED_Asym_Pause) + cfg |= ADVERTISE_PAUSE_ASYM; + if (ALX_CAP(hw, AZ)) + cfg |= ALX_DRV_PHY_EEE; + } else { + switch (ethadv_cfg) { + case ADVERTISED_10baseT_Half: + cfg |= ALX_DRV_PHY_10; + break; + case ADVERTISED_100baseT_Half: + cfg |= ALX_DRV_PHY_100; + break; + case ADVERTISED_10baseT_Full: + cfg |= ALX_DRV_PHY_10 | ALX_DRV_PHY_DUPLEX; + break; + case ADVERTISED_100baseT_Full: + cfg |= ALX_DRV_PHY_100 | ALX_DRV_PHY_DUPLEX; + break; + } + } + + return cfg; +} + +/* initialize phy for speed / flow control + * ethadv: + * format from ethtool, we use it for both autoneg and force mode + */ +int alx_setup_speed_duplex(struct alx_hw *hw, u32 ethadv, u8 flowctrl) +{ + u16 adv, giga, cr; + u32 val; + int err = 0; + + /* clear flag */ + alx_write_phy_reg(hw, ALX_MII_DBG_ADDR, 0); + ALX_MEM_R32(hw, ALX_DRV, &val); + FIELD_SET32(val, ALX_DRV_PHY, 0); + + if (ethadv & ADVERTISED_Autoneg) { + adv = ADVERTISE_CSMA; + adv |= ethtool_adv_to_mii_adv_t(ethadv); + + if (flowctrl & ALX_FC_ANEG) { + if (flowctrl & ALX_FC_RX) { + adv |= ADVERTISED_Pause; + if (!(flowctrl & ALX_FC_TX)) + adv |= ADVERTISED_Asym_Pause; + } else if (flowctrl & ALX_FC_TX) + adv |= ADVERTISED_Asym_Pause; + } + giga = 0; + if (ALX_CAP(hw, GIGA)) + giga = ethtool_adv_to_mii_ctrl1000_t(ethadv); + + cr = BMCR_RESET | BMCR_ANENABLE | BMCR_ANRESTART; + + if (alx_write_phy_reg(hw, MII_ADVERTISE, adv) || + alx_write_phy_reg(hw, MII_CTRL1000, giga) || + alx_write_phy_reg(hw, MII_BMCR, cr)) + err = ALX_ERR_MIIBUSY; + } else { + cr = BMCR_RESET; + if (ethadv == ADVERTISED_100baseT_Half || + ethadv == ADVERTISED_100baseT_Full) + cr |= BMCR_SPEED100; + if (ethadv == ADVERTISED_10baseT_Full || + ethadv == ADVERTISED_100baseT_Full) + cr |= BMCR_FULLDPLX; + + err = alx_write_phy_reg(hw, MII_BMCR, cr); + } + + if (!err) { + alx_write_phy_reg(hw, ALX_MII_DBG_ADDR, ALX_PHY_INITED); + /* save config to HW */ + val |= ethadv_to_hw_cfg(hw, ethadv); + } + + ALX_MEM_W32(hw, ALX_DRV, val); + + return err; +} + + +/* do post setting on phy if link up/down event occur */ +void alx_post_phy_link(struct alx_hw *hw, u16 speed, bool az_en) +{ + u16 phy_val, len, agc; + u8 revid = (u8)ALX_REVID(hw); + bool adj_th; + + if (revid != ALX_REV_B0 && + revid != ALX_REV_A1 && + revid != ALX_REV_A0) { + return; + } + adj_th = (revid == ALX_REV_B0) ? true : false; + + /* 1000BT/AZ, wrong cable length */ + if (speed != SPEED_0) { + alx_read_phy_ext(hw, ALX_MIIEXT_PCS, ALX_MIIEXT_CLDCTRL6, + &phy_val); + len = FIELD_GETX(phy_val, ALX_CLDCTRL6_CAB_LEN); + alx_read_phy_dbg(hw, ALX_MIIDBG_AGC, &phy_val); + agc = FIELD_GETX(phy_val, ALX_AGC_2_VGA); + + if ((speed == SPEED_1000 && + (len > ALX_CLDCTRL6_CAB_LEN_SHORT1G || + (0 == len && agc > ALX_AGC_LONG1G_LIMT))) || + (speed == SPEED_100 && + (len > ALX_CLDCTRL6_CAB_LEN_SHORT100M || + (0 == len && agc > ALX_AGC_LONG100M_LIMT)))) { + alx_write_phy_dbg(hw, ALX_MIIDBG_AZ_ANADECT, + ALX_AZ_ANADECT_LONG); + alx_read_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_AFE, + &phy_val); + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_AFE, + phy_val | ALX_AFE_10BT_100M_TH); + } else { + alx_write_phy_dbg(hw, ALX_MIIDBG_AZ_ANADECT, + ALX_AZ_ANADECT_DEF); + alx_read_phy_ext(hw, ALX_MIIEXT_ANEG, + ALX_MIIEXT_AFE, &phy_val); + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_AFE, + phy_val & ~ALX_AFE_10BT_100M_TH); + } + + /* threashold adjust */ + if (adj_th && hw->lnk_patch) { + if (speed == SPEED_100) { + alx_write_phy_dbg(hw, ALX_MIIDBG_MSE16DB, + ALX_MSE16DB_UP); + } else if (speed == SPEED_1000) { + /* + * Giga link threshold, raise the tolerance of + * noise 50% + */ + alx_read_phy_dbg(hw, ALX_MIIDBG_MSE20DB, + &phy_val); + FIELD_SETS(phy_val, ALX_MSE20DB_TH, + ALX_MSE20DB_TH_HI); + alx_write_phy_dbg(hw, ALX_MIIDBG_MSE20DB, + phy_val); + } + } + /* phy link-down in 1000BT/AZ mode */ + if (az_en && revid == ALX_REV_B0 && speed == SPEED_1000) { + alx_write_phy_dbg(hw, ALX_MIIDBG_SRDSYSMOD, + ALX_SRDSYSMOD_DEF & ~ALX_SRDSYSMOD_DEEMP_EN); + } + } else { + alx_read_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_AFE, + &phy_val); + alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, ALX_MIIEXT_AFE, + phy_val & ~ALX_AFE_10BT_100M_TH); + + if (adj_th && hw->lnk_patch) { + alx_write_phy_dbg(hw, ALX_MIIDBG_MSE16DB, + ALX_MSE16DB_DOWN); + alx_read_phy_dbg(hw, ALX_MIIDBG_MSE20DB, &phy_val); + FIELD_SETS(phy_val, ALX_MSE20DB_TH, ALX_MSE20DB_TH_DEF); + alx_write_phy_dbg(hw, ALX_MIIDBG_MSE20DB, phy_val); + } + if (az_en && revid == ALX_REV_B0) { + alx_write_phy_dbg(hw, ALX_MIIDBG_SRDSYSMOD, + ALX_SRDSYSMOD_DEF); + } + } +} + + +/* do power saving setting befor enter suspend mode + * NOTE: + * 1. phy link must be established before calling this function + * 2. wol option (pattern,magic,link,etc.) is configed before call it. + */ +int alx_pre_suspend(struct alx_hw *hw, u16 speed) +{ + u32 master, mac, phy, val; + int err = 0; + + ALX_MEM_R32(hw, ALX_MASTER, &master); + master &= ~ALX_MASTER_PCLKSEL_SRDS; + mac = hw->rx_ctrl; + /* 10/100 half */ + FIELD_SET32(mac, ALX_MAC_CTRL_SPEED, ALX_MAC_CTRL_SPEED_10_100); + mac &= ~(ALX_MAC_CTRL_FULLD | ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_TX_EN); + + ALX_MEM_R32(hw, ALX_PHY_CTRL, &phy); + phy &= ~(ALX_PHY_CTRL_DSPRST_OUT | ALX_PHY_CTRL_CLS); + phy |= ALX_PHY_CTRL_RST_ANALOG | ALX_PHY_CTRL_HIB_PULSE | + ALX_PHY_CTRL_HIB_EN; + + /* without any activity */ + if (!(hw->sleep_ctrl & ALX_SLEEP_ACTIVE)) { + err = alx_write_phy_reg(hw, ALX_MII_IER, 0); + phy |= ALX_PHY_CTRL_IDDQ | ALX_PHY_CTRL_POWER_DOWN; + goto config_reg; + } + + if (hw->sleep_ctrl & (ALX_SLEEP_WOL_MAGIC | ALX_SLEEP_CIFS)) + mac |= ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_BRD_EN; + if (hw->sleep_ctrl & ALX_SLEEP_CIFS) + mac |= ALX_MAC_CTRL_TX_EN; + if (speed % 10 == FULL_DUPLEX) + mac |= ALX_MAC_CTRL_FULLD; + if (speed >= SPEED_1000) + FIELD_SET32(mac, ALX_MAC_CTRL_SPEED, ALX_MAC_CTRL_SPEED_1000); + phy |= ALX_PHY_CTRL_DSPRST_OUT; + err = alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, + ALX_MIIEXT_S3DIG10, ALX_MIIEXT_S3DIG10_SL); +config_reg: + + if (!err) { + alx_enable_osc(hw); + hw->rx_ctrl = mac; + ALX_MEM_W32(hw, ALX_MASTER, master); + ALX_MEM_W32(hw, ALX_MAC_CTRL, mac); + ALX_MEM_W32(hw, ALX_PHY_CTRL, phy); + + /* set val of PDLL D3PLLOFF */ + ALX_MEM_R32(hw, ALX_PDLL_TRNS1, &val); + val |= ALX_PDLL_TRNS1_D3PLLOFF_EN; + ALX_MEM_W32(hw, ALX_PDLL_TRNS1, val); + } + + return err; +} + +/* wait mdio module to be idle */ +bool __alx_wait_mdio_idle(struct alx_hw *hw) +{ + u32 val; + int i; + + for (i = 0; i < ALX_MDIO_MAX_AC_TO; i++) { + ALX_MEM_R32(hw, ALX_MDIO, &val); + if (!(val & ALX_MDIO_BUSY)) + break; + udelay(10); + } + return i != ALX_MDIO_MAX_AC_TO; +} + +void __alx_stop_phy_polling(struct alx_hw *hw) +{ + if (!hw->is_fpga) + return; + + ALX_MEM_W32(hw, ALX_MDIO, 0); + __alx_wait_mdio_idle(hw); +} + +void __alx_start_phy_polling(struct alx_hw *hw, u16 clk_sel) +{ + u32 val; + + if (!hw->is_fpga) + return; + + val = ALX_MDIO_SPRES_PRMBL | + FIELDX(ALX_MDIO_CLK_SEL, clk_sel) | + FIELDX(ALX_MDIO_REG, 1) | + ALX_MDIO_START | + ALX_MDIO_OP_READ; + ALX_MEM_W32(hw, ALX_MDIO, val); + __alx_wait_mdio_idle(hw); + val |= ALX_MDIO_AUTO_POLLING; + val &= ~ALX_MDIO_START; + ALX_MEM_W32(hw, ALX_MDIO, val); + udelay(30); +} + +/* __alx_read_phy_core + * core function to read register in PHY via MDIO interface + * ext: extension register (see IEEE 802.3) + * dev: device address (see IEEE 802.3 DEVAD, PRTAD is fixed to 0) + * reg: register to read + */ +int __alx_read_phy_core(struct alx_hw *hw, bool ext, u8 dev, + u16 reg, u16 *phy_data) +{ + u32 val, clk_sel; + int err; + + __alx_stop_phy_polling(hw); + + *phy_data = 0; + + /* use slow clock when it's in hibernation status */ + clk_sel = !hw->link_up ? + ALX_MDIO_CLK_SEL_25MD128 : ALX_MDIO_CLK_SEL_25MD4; + + if (ext) { + val = FIELDX(ALX_MDIO_EXTN_DEVAD, dev) | + FIELDX(ALX_MDIO_EXTN_REG, reg); + ALX_MEM_W32(hw, ALX_MDIO_EXTN, val); + + val = ALX_MDIO_SPRES_PRMBL | + FIELDX(ALX_MDIO_CLK_SEL, clk_sel) | + ALX_MDIO_START | + ALX_MDIO_MODE_EXT | + ALX_MDIO_OP_READ; + } else { + val = ALX_MDIO_SPRES_PRMBL | + FIELDX(ALX_MDIO_CLK_SEL, clk_sel) | + FIELDX(ALX_MDIO_REG, reg) | + ALX_MDIO_START | + ALX_MDIO_OP_READ; + } + ALX_MEM_W32(hw, ALX_MDIO, val); + + if (unlikely(!__alx_wait_mdio_idle(hw))) + err = ALX_ERR_MIIBUSY; + else { + ALX_MEM_R32(hw, ALX_MDIO, &val); + *phy_data = (u16)FIELD_GETX(val, ALX_MDIO_DATA); + err = 0; + } + + __alx_start_phy_polling(hw, clk_sel); + + return err; +} + +/* __alx_write_phy_core + * core function to write to register in PHY via MDIO interface + * ext: extension register (see IEEE 802.3) + * dev: device address (see IEEE 802.3 DEVAD, PRTAD is fixed to 0) + * reg: register to write + */ +int __alx_write_phy_core(struct alx_hw *hw, bool ext, u8 dev, + u16 reg, u16 phy_data) +{ + u32 val, clk_sel; + int err = 0; + + __alx_stop_phy_polling(hw); + + /* use slow clock when it's in hibernation status */ + clk_sel = !hw->link_up ? + ALX_MDIO_CLK_SEL_25MD128 : ALX_MDIO_CLK_SEL_25MD4; + + if (ext) { + val = FIELDX(ALX_MDIO_EXTN_DEVAD, dev) | + FIELDX(ALX_MDIO_EXTN_REG, reg); + ALX_MEM_W32(hw, ALX_MDIO_EXTN, val); + + val = ALX_MDIO_SPRES_PRMBL | + FIELDX(ALX_MDIO_CLK_SEL, clk_sel) | + FIELDX(ALX_MDIO_DATA, phy_data) | + ALX_MDIO_START | + ALX_MDIO_MODE_EXT; + } else { + val = ALX_MDIO_SPRES_PRMBL | + FIELDX(ALX_MDIO_CLK_SEL, clk_sel) | + FIELDX(ALX_MDIO_REG, reg) | + FIELDX(ALX_MDIO_DATA, phy_data) | + ALX_MDIO_START; + } + ALX_MEM_W32(hw, ALX_MDIO, val); + + if (unlikely(!__alx_wait_mdio_idle(hw))) + err = ALX_ERR_MIIBUSY; + + __alx_start_phy_polling(hw, clk_sel); + + return err; +} + +/* read from PHY normal register */ +int __alx_read_phy_reg(struct alx_hw *hw, u16 reg, u16 *phy_data) +{ + return __alx_read_phy_core(hw, false, 0, reg, phy_data); +} + +/* write to PHY normal register */ +int __alx_write_phy_reg(struct alx_hw *hw, u16 reg, u16 phy_data) +{ + return __alx_write_phy_core(hw, false, 0, reg, phy_data); +} + +/* read from PHY extension register */ +int __alx_read_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 *pdata) +{ + return __alx_read_phy_core(hw, true, dev, reg, pdata); +} + +/* write to PHY extension register */ +int __alx_write_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 data) +{ + return __alx_write_phy_core(hw, true, dev, reg, data); +} + +/* read from PHY debug port */ +int __alx_read_phy_dbg(struct alx_hw *hw, u16 reg, u16 *pdata) +{ + int err; + + err = __alx_write_phy_reg(hw, ALX_MII_DBG_ADDR, reg); + if (unlikely(err)) + return err; + else + err = __alx_read_phy_reg(hw, ALX_MII_DBG_DATA, pdata); + + return err; +} + +/* write to PHY debug port */ +int __alx_write_phy_dbg(struct alx_hw *hw, u16 reg, u16 data) +{ + int err; + + err = __alx_write_phy_reg(hw, ALX_MII_DBG_ADDR, reg); + if (unlikely(err)) + return err; + else + err = __alx_write_phy_reg(hw, ALX_MII_DBG_DATA, data); + + return err; +} + +int alx_read_phy_reg(struct alx_hw *hw, u16 reg, u16 *phy_data) +{ + int err; + + spin_lock(&hw->mdio_lock); + err = __alx_read_phy_reg(hw, reg, phy_data); + spin_unlock(&hw->mdio_lock); + + return err; +} + +int alx_write_phy_reg(struct alx_hw *hw, u16 reg, u16 phy_data) +{ + int err; + + spin_lock(&hw->mdio_lock); + err = __alx_write_phy_reg(hw, reg, phy_data); + spin_unlock(&hw->mdio_lock); + + return err; +} + +int alx_read_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 *pdata) +{ + int err; + + spin_lock(&hw->mdio_lock); + err = __alx_read_phy_ext(hw, dev, reg, pdata); + spin_unlock(&hw->mdio_lock); + + return err; +} + +int alx_write_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 data) +{ + int err; + + spin_lock(&hw->mdio_lock); + err = __alx_write_phy_ext(hw, dev, reg, data); + spin_unlock(&hw->mdio_lock); + + return err; +} + +int alx_read_phy_dbg(struct alx_hw *hw, u16 reg, u16 *pdata) +{ + int err; + + spin_lock(&hw->mdio_lock); + err = __alx_read_phy_dbg(hw, reg, pdata); + spin_unlock(&hw->mdio_lock); + + return err; +} + +int alx_write_phy_dbg(struct alx_hw *hw, u16 reg, u16 data) +{ + int err; + + spin_lock(&hw->mdio_lock); + err = __alx_write_phy_dbg(hw, reg, data); + spin_unlock(&hw->mdio_lock); + + return err; +} + +u16 alx_get_phy_config(struct alx_hw *hw) +{ + u32 val; + u16 phy_val; + + ALX_MEM_R32(hw, ALX_PHY_CTRL, &val); + /* phy in rst */ + if ((val & ALX_PHY_CTRL_DSPRST_OUT) == 0) + return ALX_DRV_PHY_UNKNOWN; + + ALX_MEM_R32(hw, ALX_DRV, &val); + val = FIELD_GETX(val, ALX_DRV_PHY); + if (ALX_DRV_PHY_UNKNOWN == val) + return ALX_DRV_PHY_UNKNOWN; + + alx_read_phy_reg(hw, ALX_MII_DBG_ADDR, &phy_val); + if (ALX_PHY_INITED == phy_val) + return (u16) val; + + return ALX_DRV_PHY_UNKNOWN; +} + +bool alx_phy_configed(struct alx_hw *hw) +{ + u32 cfg, hw_cfg; + + cfg = ethadv_to_hw_cfg(hw, hw->adv_cfg); + cfg = FIELD_GETX(cfg, ALX_DRV_PHY); + hw_cfg = alx_get_phy_config(hw); + if (hw_cfg == ALX_DRV_PHY_UNKNOWN) + return false; + + return cfg == hw_cfg; +} + +int alx_get_phy_link(struct alx_hw *hw, bool *link_up, u16 *speed) +{ + struct pci_dev *pdev = hw->pdev; + u16 bmsr, giga; + int err; + + err = alx_read_phy_reg(hw, MII_BMSR, &bmsr); + err = alx_read_phy_reg(hw, MII_BMSR, &bmsr); + if (unlikely(err)) + goto out; + + if (!(bmsr & BMSR_LSTATUS)) { + *link_up = false; + goto out; + } + + *link_up = true; + + /* speed/duplex result is saved in PHY Specific Status Register */ + err = alx_read_phy_reg(hw, ALX_MII_GIGA_PSSR, &giga); + if (unlikely(err)) + goto out; + + if (!(giga & ALX_GIGA_PSSR_SPD_DPLX_RESOLVED)) + goto wrong_spd_out; + + switch (giga & ALX_GIGA_PSSR_SPEED) { + case ALX_GIGA_PSSR_1000MBS: + *speed = SPEED_1000; + break; + case ALX_GIGA_PSSR_100MBS: + *speed = SPEED_100; + break; + case ALX_GIGA_PSSR_10MBS: + *speed = SPEED_10; + break; + default: + goto wrong_spd_out; + } + *speed += (giga & ALX_GIGA_PSSR_DPLX) ? FULL_DUPLEX : HALF_DUPLEX; + goto out; + +wrong_spd_out: + dev_err(&pdev->dev, "PHY SPD/DPLX unresolved :%x\n", giga); + err = -EINVAL; +out: + return err; +} + +int alx_clear_phy_intr(struct alx_hw *hw) +{ + u16 isr; + + /* clear interrupt status by read it */ + return alx_read_phy_reg(hw, ALX_MII_ISR, &isr); +} + +int alx_config_wol(struct alx_hw *hw) +{ + u32 wol; + int err = 0; + + wol = 0; + /* turn on magic packet event */ + if (hw->sleep_ctrl & ALX_SLEEP_WOL_MAGIC) { + wol |= ALX_WOL0_MAGIC_EN | ALX_WOL0_PME_MAGIC_EN; + /* magic packet maybe Broadcast&multicast&Unicast frame */ + /* mac |= MAC_CTRL_BC_EN; */ + } + + /* turn on link up event */ + if (hw->sleep_ctrl & ALX_SLEEP_WOL_PHY) { + wol |= ALX_WOL0_LINK_EN | ALX_WOL0_PME_LINK; + /* only link up can wake up */ + err = alx_write_phy_reg(hw, ALX_MII_IER, ALX_IER_LINK_UP); + } + ALX_MEM_W32(hw, ALX_WOL0, wol); + + return err; +} + +void alx_configure_rss(struct alx_hw *hw, bool en) +{ + u32 ctrl; + int i; + + ALX_MEM_R32(hw, ALX_RXQ0, &ctrl); + + if (en) { + for (i = 0; i < sizeof(hw->rss_key); i++) { + /* rss key should be saved in chip with + * reversed order. + */ + int j = sizeof(hw->rss_key) - i - 1; + + ALX_MEM_W8(hw, ALX_RSS_KEY0 + j, hw->rss_key[i]); + } + + for (i = 0; i < ARRAY_SIZE(hw->rss_idt); i++) + ALX_MEM_W32(hw, ALX_RSS_IDT_TBL0 + i * 4, + hw->rss_idt[i]); + + FIELD_SET32(ctrl, ALX_RXQ0_RSS_HSTYP, hw->rss_hash_type); + FIELD_SET32(ctrl, ALX_RXQ0_RSS_MODE, ALX_RXQ0_RSS_MODE_MQMI); + FIELD_SET32(ctrl, ALX_RXQ0_IDT_TBL_SIZE, hw->rss_idt_size); + ctrl |= ALX_RXQ0_RSS_HASH_EN; + } else { + ctrl &= ~ALX_RXQ0_RSS_HASH_EN; + } + + ALX_MEM_W32(hw, ALX_RXQ0, ctrl); +} + +void alx_configure_basic(struct alx_hw *hw) +{ + u32 val, raw_mtu, max_payload; + u16 val16; + u8 chip_rev = ALX_REVID(hw); + + /* mac address */ + alx_set_macaddr(hw, hw->mac_addr); + + /* clk gating */ + ALX_MEM_W32(hw, ALX_CLK_GATE, ALX_CLK_GATE_ALL_A0); + + /* idle timeout to switch clk_125M */ + if (chip_rev >= ALX_REV_B0) { + ALX_MEM_W32(hw, ALX_IDLE_DECISN_TIMER, + ALX_IDLE_DECISN_TIMER_DEF); + } + + /* stats refresh timeout */ + ALX_MEM_W32(hw, ALX_SMB_TIMER, hw->smb_timer * 500UL); + + /* intr moduration */ + ALX_MEM_R32(hw, ALX_MASTER, &val); + val = val | ALX_MASTER_IRQMOD2_EN | + ALX_MASTER_IRQMOD1_EN | + ALX_MASTER_SYSALVTIMER_EN; + ALX_MEM_W32(hw, ALX_MASTER, val); + ALX_MEM_W32(hw, ALX_IRQ_MODU_TIMER, + FIELDX(ALX_IRQ_MODU_TIMER1, hw->imt >> 1)); + /* intr re-trig timeout */ + ALX_MEM_W32(hw, ALX_INT_RETRIG, ALX_INT_RETRIG_TO); + /* tpd threshold to trig int */ + ALX_MEM_W32(hw, ALX_TINT_TPD_THRSHLD, hw->ith_tpd); + ALX_MEM_W32(hw, ALX_TINT_TIMER, hw->imt); + + /* mtu, 8:fcs+vlan */ + raw_mtu = hw->mtu + ETH_HLEN; + ALX_MEM_W32(hw, ALX_MTU, raw_mtu + 8); + if (raw_mtu > ALX_MTU_JUMBO_TH) + hw->rx_ctrl &= ~ALX_MAC_CTRL_FAST_PAUSE; + + /* txq */ + if ((raw_mtu + 8) < ALX_TXQ1_JUMBO_TSO_TH) + val = (raw_mtu + 8 + 7) >> 3; + else + val = ALX_TXQ1_JUMBO_TSO_TH >> 3; + ALX_MEM_W32(hw, ALX_TXQ1, val | ALX_TXQ1_ERRLGPKT_DROP_EN); + max_payload = alx_get_readrq(hw) >> 8; + /* + * if BIOS had changed the default dma read max length, + * restore it to default value + */ + if (max_payload < ALX_DEV_CTRL_MAXRRS_MIN) + alx_set_readrq(hw, 128 << ALX_DEV_CTRL_MAXRRS_MIN); + + val = FIELDX(ALX_TXQ0_TPD_BURSTPREF, ALX_TXQ_TPD_BURSTPREF_DEF) | + ALX_TXQ0_MODE_ENHANCE | + ALX_TXQ0_LSO_8023_EN | + ALX_TXQ0_SUPT_IPOPT | + FIELDX(ALX_TXQ0_TXF_BURST_PREF, ALX_TXQ_TXF_BURST_PREF_DEF); + ALX_MEM_W32(hw, ALX_TXQ0, val); + val = FIELDX(ALX_HQTPD_Q1_NUMPREF, ALX_TXQ_TPD_BURSTPREF_DEF) | + FIELDX(ALX_HQTPD_Q2_NUMPREF, ALX_TXQ_TPD_BURSTPREF_DEF) | + FIELDX(ALX_HQTPD_Q3_NUMPREF, ALX_TXQ_TPD_BURSTPREF_DEF) | + ALX_HQTPD_BURST_EN; + ALX_MEM_W32(hw, ALX_HQTPD, val); + + /* rxq, flow control */ + ALX_MEM_R32(hw, ALX_SRAM5, &val); + val = FIELD_GETX(val, ALX_SRAM_RXF_LEN) << 3; + if (val > ALX_SRAM_RXF_LEN_8K) { + val16 = ALX_MTU_STD_ALGN >> 3; + val = (val - ALX_RXQ2_RXF_FLOW_CTRL_RSVD) >> 3; + } else { + val16 = ALX_MTU_STD_ALGN >> 3; + val = (val - ALX_MTU_STD_ALGN) >> 3; + } + ALX_MEM_W32(hw, ALX_RXQ2, + FIELDX(ALX_RXQ2_RXF_XOFF_THRESH, val16) | + FIELDX(ALX_RXQ2_RXF_XON_THRESH, val)); + val = FIELDX(ALX_RXQ0_NUM_RFD_PREF, ALX_RXQ0_NUM_RFD_PREF_DEF) | + FIELDX(ALX_RXQ0_RSS_MODE, ALX_RXQ0_RSS_MODE_DIS) | + FIELDX(ALX_RXQ0_IDT_TBL_SIZE, ALX_RXQ0_IDT_TBL_SIZE_DEF) | + ALX_RXQ0_RSS_HSTYP_ALL | + ALX_RXQ0_RSS_HASH_EN | + ALX_RXQ0_IPV6_PARSE_EN; + if (ALX_CAP(hw, GIGA)) { + FIELD_SET32(val, ALX_RXQ0_ASPM_THRESH, + ALX_RXQ0_ASPM_THRESH_100M); + } + ALX_MEM_W32(hw, ALX_RXQ0, val); + + /* DMA */ + ALX_MEM_R32(hw, ALX_DMA, &val); + val = FIELDX(ALX_DMA_RORDER_MODE, ALX_DMA_RORDER_MODE_OUT) | + ALX_DMA_RREQ_PRI_DATA | + FIELDX(ALX_DMA_RREQ_BLEN, max_payload) | + FIELDX(ALX_DMA_WDLY_CNT, ALX_DMA_WDLY_CNT_DEF) | + FIELDX(ALX_DMA_RDLY_CNT, ALX_DMA_RDLY_CNT_DEF) | + FIELDX(ALX_DMA_RCHNL_SEL, hw->dma_chnl - 1); + ALX_MEM_W32(hw, ALX_DMA, val); + + /* multi-tx-q weight */ + if (ALX_CAP(hw, MTQ)) { + val = FIELDX(ALX_WRR_PRI, hw->wrr_ctrl) | + FIELDX(ALX_WRR_PRI0, hw->wrr[0]) | + FIELDX(ALX_WRR_PRI1, hw->wrr[1]) | + FIELDX(ALX_WRR_PRI2, hw->wrr[2]) | + FIELDX(ALX_WRR_PRI3, hw->wrr[3]); + ALX_MEM_W32(hw, ALX_WRR, val); + } +} + +void alx_mask_msix(struct alx_hw *hw, int index, bool mask) +{ + u32 reg, val; + + reg = ALX_MSIX_ENTRY_BASE + index * PCI_MSIX_ENTRY_SIZE + + PCI_MSIX_ENTRY_VECTOR_CTRL; + + val = mask ? PCI_MSIX_ENTRY_CTRL_MASKBIT : 0; + + ALX_MEM_W32(hw, reg, val); + ALX_MEM_FLUSH(hw); +} + +int alx_select_powersaving_speed(struct alx_hw *hw, u16 *speed) +{ + int i, err; + u16 spd, lpa; + bool linkup; + + err = alx_get_phy_link(hw, &linkup, &spd); + if (err) + goto out; + + if (!linkup) { + *speed = SPEED_0; + goto out; + } + + err = alx_read_phy_reg(hw, MII_LPA, &lpa); + if (err) + goto out; + + if (!(lpa & LPA_LPACK)) { + *speed = spd; + goto out; + } + if (lpa & LPA_10FULL) + *speed = SPEED_10 + FULL_DUPLEX; + else if (lpa & LPA_10HALF) + *speed = SPEED_10 + HALF_DUPLEX; + else if (lpa & LPA_100FULL) + *speed = SPEED_100 + FULL_DUPLEX; + else + *speed = SPEED_100 + HALF_DUPLEX; + + if (*speed != spd) { + err = alx_write_phy_reg(hw, ALX_MII_IER, 0); + if (err) + goto out; + err = alx_setup_speed_duplex(hw, + ALX_SPEED_TO_ETHADV(*speed) | ADVERTISED_Autoneg, + ALX_FC_ANEG | ALX_FC_RX | ALX_FC_TX); + if (err) + goto out; + + /* wait for linkup */ + for (i = 0; i < ALX_MAX_SETUP_LNK_CYCLE; i++) { + u16 speed2; + bool link_on; + + msleep(100); + err = alx_get_phy_link(hw, &link_on, &speed2); + if (err) + goto out; + if (link_on) + break; + } + if (i == ALX_MAX_SETUP_LNK_CYCLE) { + err = ALX_LINK_TIMEOUT; + goto out; + } + } + +out: + return err; +} + +void __alx_update_hw_stats(struct alx_hw *hw) +{ + u16 reg; + u32 data; + unsigned long *p; + + /* RX stats */ + reg = ALX_RX_STATS_BIN; + p = &hw->stats.rx_ok; + while (reg <= ALX_RX_STATS_END) { + ALX_MEM_R32(hw, reg, &data); + *p++ += data; + reg += 4; + } + + /* TX stats */ + reg = ALX_TX_STATS_BIN; + p = &hw->stats.tx_ok; + while (reg <= ALX_TX_STATS_END) { + ALX_MEM_R32(hw, reg, &data); + *p++ += data; + reg += 4; + } +} + +static const struct alx_platform_patch plats[] = { +{0x1091, 0x00, 0x1969, 0x0091, 0x1001}, +{0}, +}; + +void alx_patch_assign(struct alx_hw *hw) +{ + int i = 0; + + while (plats[i].pci_did != 0) { + if (plats[i].pci_did == ALX_DID(hw) && + plats[i].subsystem_vid == ALX_SUB_VID(hw) && + plats[i].subsystem_did == ALX_SUB_DID(hw) && + (plats[i].pflag & ALX_PF_ANY_REV || + plats[i].pci_rev == hw->revision)) { + if (plats[i].pflag & ALX_PF_LINK) + hw->lnk_patch = true; + if (plats[i].pflag & ALX_PF_HIB) + hw->hib_patch = true; + } + i++; + } +} + +bool alx_get_phy_info(struct alx_hw *hw) +{ + u16 devs1, devs2; + + if (alx_read_phy_reg(hw, MII_PHYSID1, &hw->phy_id[0]) || + alx_read_phy_reg(hw, MII_PHYSID2, &hw->phy_id[1])) + return false; + + /* since we haven't PMA/PMD status2 register, we can't + * use mdio45_probe function for prtad and mmds. + * use fixed MMD3 to get mmds. + */ + if (alx_read_phy_ext(hw, 3, MDIO_DEVS1, &devs1) || + alx_read_phy_ext(hw, 3, MDIO_DEVS2, &devs2)) + return false; + hw->mdio.mmds = devs1 | devs2 << 16; + + return true; +} --- linux-lts-raring-3.8.0.orig/ubuntu/alx/alx.h +++ linux-lts-raring-3.8.0/ubuntu/alx/alx.h @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2012 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + */ + +#ifndef _ALX_H_ +#define _ALX_H_ + +#define ALX_WATCHDOG_TIME (5 * HZ) + +/* alx_ring_header is a single, contiguous block of memory space + * used by the three descriptor rings (tpd, rfd, rrd) + */ +struct alx_ring_header { + /* virt addr */ + void *desc; + /* phy addr */ + dma_addr_t dma; + u32 size; +}; + +/* alx_buffer wraps around a pointer to a socket buffer + * so a DMA physical address can be stored along with the skb + */ +struct alx_buffer { + struct sk_buff *skb; + /* DMA address */ + DEFINE_DMA_UNMAP_ADDR(dma); + /* buffer size */ + DEFINE_DMA_UNMAP_LEN(size); + /* information of this buffer */ + u16 flags; +}; +#define ALX_BUF_TX_FIRSTFRAG 0x1 + +/* rx queue */ +struct alx_rx_queue { + struct net_device *netdev; + /* device pointer for dma operation */ + struct device *dev; + /* rrd ring virtual addr */ + struct rrd_desc *rrd_hdr; + /* rrd ring physical addr */ + dma_addr_t rrd_dma; + /* rfd ring virtual addr */ + struct rfd_desc *rfd_hdr; + /* rfd ring physical addr */ + dma_addr_t rfd_dma; + /* info for rx-skbs */ + struct alx_buffer *bf_info; + + /* number of ring elements */ + u16 count; + /* rfd producer index */ + u16 pidx; + /* rfd consumer index */ + u16 cidx; + u16 rrd_cidx; + /* register saving producer index */ + u16 p_reg; + /* register saving consumer index */ + u16 c_reg; + /* queue index */ + u16 qidx; + unsigned long flag; + + struct sk_buff_head list; +}; +#define ALX_RQ_USING 1 +#define ALX_RX_ALLOC_THRESH 32 + +/* tx queue */ +struct alx_tx_queue { + struct net_device *netdev; + /* device pointer for dma operation */ + struct device *dev; + /* tpd ring virtual addr */ + struct tpd_desc *tpd_hdr; + dma_addr_t tpd_dma; + /* info for tx-skbs pending on HW */ + struct alx_buffer *bf_info; + /* number of ring elements */ + u16 count; + /* producer index */ + u16 pidx; + /* consumer index */ + atomic_t cidx; + /* register saving producer index */ + u16 p_reg; + /* register saving consumer index */ + u16 c_reg; + /* queue index */ + u16 qidx; +}; + +#define ALX_TX_WAKEUP_THRESH(_tq) ((_tq)->count / 4) +#define ALX_DEFAULT_TX_WORK 128 + +struct alx_napi { + struct napi_struct napi; + struct alx_adapter *adpt; + struct alx_rx_queue *rxq; + struct alx_tx_queue *txq; + int vec_idx; + u32 vec_mask; + char irq_lbl[IFNAMSIZ]; +}; + +enum ALX_FLAGS { + ALX_FLAG_USING_MSIX = 0, + ALX_FLAG_USING_MSI, + ALX_FLAG_RESETING, + ALX_FLAG_TESTING, + ALX_FLAG_HALT, + ALX_FLAG_FPGA, + ALX_FLAG_TASK_PENDING, + ALX_FLAG_TASK_CHK_LINK, + ALX_FLAG_TASK_RESET, + ALX_FLAG_TASK_UPDATE_SMB, + + ALX_FLAG_NUMBER_OF_FLAGS, +}; + + +struct alx_hw; +/* + *board specific private data structure + */ +struct alx_adapter { + struct net_device *netdev; + struct pci_dev *pdev; + + struct alx_hw hw; + + u16 bd_number; + + /* totally msix vectors */ + int nr_vec; + struct msix_entry *msix_ent; + + /* all descriptor memory */ + struct alx_ring_header ring_header; + int tx_ringsz; + int rx_ringsz; + int rxbuf_size; + + struct alx_napi *qnapi[8]; + /* number of napi for TX-Q */ + int nr_txq; + /* number of napi for RX-Q */ + int nr_rxq; + /* number independent hw RX-Q */ + int nr_hwrxq; + /* total napi for TX-Q/RX-Q */ + int nr_napi; + + /* lock for updating stats */ + spinlock_t smb_lock; + + struct work_struct task; + struct net_device_stats net_stats; + atomic_t irq_sem; + u16 msg_enable; + + unsigned long flags; + + /* ethtool private flags */ + u32 eth_pflags; + int eth_diag_vect; + int eth_diag_cnt; +}; + + +#define ALX_FLAG(_adpt, _FLAG) (\ + test_bit(ALX_FLAG_##_FLAG, &(_adpt)->flags)) +#define ALX_FLAG_SET(_adpt, _FLAG) (\ + set_bit(ALX_FLAG_##_FLAG, &(_adpt)->flags)) +#define ALX_FLAG_CLEAR(_adpt, _FLAG) (\ + clear_bit(ALX_FLAG_##_FLAG, &(_adpt)->flags)) + +static inline struct alx_rx_queue *alx_hw_rxq(struct alx_rx_queue *rxq) +{ + struct alx_adapter *adpt = netdev_priv(rxq->netdev); + + return ALX_CAP(&adpt->hw, MRQ) ? rxq : adpt->qnapi[0]->rxq; +} + +/* needed by alx_ethtool.c */ +extern void alx_configure(struct alx_adapter *adpt); +extern void alx_free_all_ring_resources(struct alx_adapter *adpt); +extern int alx_setup_all_ring_resources(struct alx_adapter *adpt); +extern void alx_init_def_rss_idt(struct alx_adapter *adpt); +extern int alx_alloc_rxring_buf(struct alx_adapter *adpt, + struct alx_rx_queue *rxq); +extern void alx_init_intr(struct alx_adapter *adpt); +extern void alx_disable_advanced_intr(struct alx_adapter *adpt); +extern void alx_reinit(struct alx_adapter *adpt, bool in_task); +extern void alx_set_ethtool_ops(struct net_device *dev); +extern char alx_drv_name[]; +extern char alx_drv_version[]; + +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/alx/alx_hw.h +++ linux-lts-raring-3.8.0/ubuntu/alx/alx_hw.h @@ -0,0 +1,661 @@ +/* + * Copyright (c) 2012 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + */ + +#ifndef ALX_HW_H_ +#define ALX_HW_H_ + +/* specific error info */ +#define ALX_ERR_SUCCESS 0x0000 +#define ALX_ERR_ALOAD 0x0001 +#define ALX_ERR_RSTMAC 0x0002 +#define ALX_ERR_PARM 0x0003 +#define ALX_ERR_MIIBUSY 0x0004 +#define ALX_LINK_TIMEOUT 0x0008 + +/* Transmit Packet Descriptor, contains 4 32-bit words. + * + * 31 16 0 + * +----------------+----------------+ + * | vlan-tag | buf length | + * +----------------+----------------+ + * | Word 1 | + * +----------------+----------------+ + * | Word 2: buf addr lo | + * +----------------+----------------+ + * | Word 3: buf addr hi | + * +----------------+----------------+ + * + * Word 2 and 3 combine to form a 64-bit buffer address + * + * Word 1 has three forms, depending on the state of bit 8/12/13: + * if bit8 =='1', the definition is just for custom checksum offload. + * if bit8 == '0' && bit12 == '1' && bit13 == '1', the *FIRST* descriptor + * for the skb is special for LSO V2, Word 2 become total skb length , + * Word 3 is meaningless. + * other condition, the definition is for general skb or ip/tcp/udp + * checksum or LSO(TSO) offload. + * + * Here is the depiction: + * + * 0-+ 0-+ + * 1 | 1 | + * 2 | 2 | + * 3 | Payload offset 3 | L4 header offset + * 4 | (7:0) 4 | (7:0) + * 5 | 5 | + * 6 | 6 | + * 7-+ 7-+ + * 8 Custom csum enable = 1 8 Custom csum enable = 0 + * 9 General IPv4 checksum 9 General IPv4 checksum + * 10 General TCP checksum 10 General TCP checksum + * 11 General UDP checksum 11 General UDP checksum + * 12 Large Send Segment enable 12 Large Send Segment enable + * 13 Large Send Segment type 13 Large Send Segment type + * 14 VLAN tagged 14 VLAN tagged + * 15 Insert VLAN tag 15 Insert VLAN tag + * 16 IPv4 packet 16 IPv4 packet + * 17 Ethernet frame type 17 Ethernet frame type + * 18-+ 18-+ + * 19 | 19 | + * 20 | 20 | + * 21 | Custom csum offset 21 | + * 22 | (25:18) 22 | + * 23 | 23 | MSS (30:18) + * 24 | 24 | + * 25-+ 25 | + * 26-+ 26 | + * 27 | 27 | + * 28 | Reserved 28 | + * 29 | 29 | + * 30-+ 30-+ + * 31 End of packet 31 End of packet + */ + +struct tpd_desc { + __le32 word0; + __le32 word1; + union { + __le64 addr; + struct { + __le32 pkt_len; + __le32 resvd; + } l; + } adrl; +} __packed; + +/* tpd word 0 */ +#define TPD_BUFLEN_MASK 0xFFFF +#define TPD_BUFLEN_SHIFT 0 +#define TPD_VLTAG_MASK 0xFFFF +#define TPD_VLTAG_SHIFT 16 + +/* tpd word 1 */ +#define TPD_CXSUMSTART_MASK 0x00FF +#define TPD_CXSUMSTART_SHIFT 0 +#define TPD_L4HDROFFSET_MASK 0x00FF +#define TPD_L4HDROFFSET_SHIFT 0 +#define TPD_CXSUM_EN_MASK 0x0001 +#define TPD_CXSUM_EN_SHIFT 8 +#define TPD_IP_XSUM_MASK 0x0001 +#define TPD_IP_XSUM_SHIFT 9 +#define TPD_TCP_XSUM_MASK 0x0001 +#define TPD_TCP_XSUM_SHIFT 10 +#define TPD_UDP_XSUM_MASK 0x0001 +#define TPD_UDP_XSUm_SHIFT 11 +#define TPD_LSO_EN_MASK 0x0001 +#define TPD_LSO_EN_SHIFT 12 +#define TPD_LSO_V2_MASK 0x0001 +#define TPD_LSO_V2_SHIFT 13 +#define TPD_VLTAGGED_MASK 0x0001 +#define TPD_VLTAGGED_SHIFT 14 +#define TPD_INS_VLTAG_MASK 0x0001 +#define TPD_INS_VLTAG_SHIFT 15 +#define TPD_IPV4_MASK 0x0001 +#define TPD_IPV4_SHIFT 16 +#define TPD_ETHTYPE_MASK 0x0001 +#define TPD_ETHTYPE_SHIFT 17 +#define TPD_CXSUMOFFSET_MASK 0x00FF +#define TPD_CXSUMOFFSET_SHIFT 18 +#define TPD_MSS_MASK 0x1FFF +#define TPD_MSS_SHIFT 18 +#define TPD_EOP_MASK 0x0001 +#define TPD_EOP_SHIFT 31 + +#define DESC_GET(_x, _name) ((_x) >> _name##SHIFT & _name##MASK) + +/* Receive Free Descriptor */ +struct rfd_desc { + __le64 addr; /* data buffer address, length is + * declared in register --- every + * buffer has the same size + */ +} __packed; + +/* Receive Return Descriptor, contains 4 32-bit words. + * + * 31 16 0 + * +----------------+----------------+ + * | Word 0 | + * +----------------+----------------+ + * | Word 1: RSS Hash value | + * +----------------+----------------+ + * | Word 2 | + * +----------------+----------------+ + * | Word 3 | + * +----------------+----------------+ + * + * Word 0 depiction & Word 2 depiction: + * + * 0--+ 0--+ + * 1 | 1 | + * 2 | 2 | + * 3 | 3 | + * 4 | 4 | + * 5 | 5 | + * 6 | 6 | + * 7 | IP payload checksum 7 | VLAN tag + * 8 | (15:0) 8 | (15:0) + * 9 | 9 | + * 10 | 10 | + * 11 | 11 | + * 12 | 12 | + * 13 | 13 | + * 14 | 14 | + * 15-+ 15-+ + * 16-+ 16-+ + * 17 | Number of RFDs 17 | + * 18 | (19:16) 18 | + * 19-+ 19 | Protocol ID + * 20-+ 20 | (23:16) + * 21 | 21 | + * 22 | 22 | + * 23 | 23-+ + * 24 | 24 | Reserved + * 25 | Start index of RFD-ring 25-+ + * 26 | (31:20) 26 | RSS Q-num (27:25) + * 27 | 27-+ + * 28 | 28-+ + * 29 | 29 | RSS Hash algorithm + * 30 | 30 | (31:28) + * 31-+ 31-+ + * + * Word 3 depiction: + * + * 0--+ + * 1 | + * 2 | + * 3 | + * 4 | + * 5 | + * 6 | + * 7 | Packet length (include FCS) + * 8 | (13:0) + * 9 | + * 10 | + * 11 | + * 12 | + * 13-+ + * 14 L4 Header checksum error + * 15 IPv4 checksum error + * 16 VLAN tagged + * 17-+ + * 18 | Protocol ID (19:17) + * 19-+ + * 20 Receive error summary + * 21 FCS(CRC) error + * 22 Frame alignment error + * 23 Truncated packet + * 24 Runt packet + * 25 Incomplete packet due to insufficient rx-desc + * 26 Broadcast packet + * 27 Multicast packet + * 28 Ethernet type (EII or 802.3) + * 29 FIFO overflow + * 30 Length error (for 802.3, length field mismatch with actual len) + * 31 Updated, indicate to driver that this RRD is refreshed. + */ + +struct rrd_desc { + __le32 word0; + __le32 rss_hash; + __le32 word2; + __le32 word3; +} __packed; + +/* rrd word 0 */ +#define RRD_XSUM_MASK 0xFFFF +#define RRD_XSUM_SHIFT 0 +#define RRD_NOR_MASK 0x000F +#define RRD_NOR_SHIFT 16 +#define RRD_SI_MASK 0x0FFF +#define RRD_SI_SHIFT 20 + +/* rrd word 2 */ +#define RRD_VLTAG_MASK 0xFFFF +#define RRD_VLTAG_SHIFT 0 +#define RRD_PID_MASK 0x00FF +#define RRD_PID_SHIFT 16 +/* non-ip packet */ +#define RRD_PID_NONIP 0 +/* ipv4(only) */ +#define RRD_PID_IPV4 1 +/* tcp/ipv6 */ +#define RRD_PID_IPV6TCP 2 +/* tcp/ipv4 */ +#define RRD_PID_IPV4TCP 3 +/* udp/ipv6 */ +#define RRD_PID_IPV6UDP 4 +/* udp/ipv4 */ +#define RRD_PID_IPV4UDP 5 +/* ipv6(only) */ +#define RRD_PID_IPV6 6 +/* LLDP packet */ +#define RRD_PID_LLDP 7 +/* 1588 packet */ +#define RRD_PID_1588 8 +#define RRD_RSSQ_MASK 0x0007 +#define RRD_RSSQ_SHIFT 25 +#define RRD_RSSALG_MASK 0x000F +#define RRD_RSSALG_SHIFT 28 +#define RRD_RSSALG_TCPV6 0x1 +#define RRD_RSSALG_IPV6 0x2 +#define RRD_RSSALG_TCPV4 0x4 +#define RRD_RSSALG_IPV4 0x8 + +/* rrd word 3 */ +#define RRD_PKTLEN_MASK 0x3FFF +#define RRD_PKTLEN_SHIFT 0 +#define RRD_ERR_L4_MASK 0x0001 +#define RRD_ERR_L4_SHIFT 14 +#define RRD_ERR_IPV4_MASK 0x0001 +#define RRD_ERR_IPV4_SHIFT 15 +#define RRD_VLTAGGED_MASK 0x0001 +#define RRD_VLTAGGED_SHIFT 16 +#define RRD_OLD_PID_MASK 0x0007 +#define RRD_OLD_PID_SHIFT 17 +#define RRD_ERR_RES_MASK 0x0001 +#define RRD_ERR_RES_SHIFT 20 +#define RRD_ERR_FCS_MASK 0x0001 +#define RRD_ERR_FCS_SHIFT 21 +#define RRD_ERR_FAE_MASK 0x0001 +#define RRD_ERR_FAE_SHIFT 22 +#define RRD_ERR_TRUNC_MASK 0x0001 +#define RRD_ERR_TRUNC_SHIFT 23 +#define RRD_ERR_RUNT_MASK 0x0001 +#define RRD_ERR_RUNT_SHIFT 24 +#define RRD_ERR_ICMP_MASK 0x0001 +#define RRD_ERR_ICMP_SHIFT 25 +#define RRD_BCAST_MASK 0x0001 +#define RRD_BCAST_SHIFT 26 +#define RRD_MCAST_MASK 0x0001 +#define RRD_MCAST_SHIFT 27 +#define RRD_ETHTYPE_MASK 0x0001 +#define RRD_ETHTYPE_SHIFT 28 +#define RRD_ERR_FIFOV_MASK 0x0001 +#define RRD_ERR_FIFOV_SHIFT 29 +#define RRD_ERR_LEN_MASK 0x0001 +#define RRD_ERR_LEN_SHIFT 30 +#define RRD_UPDATED_MASK 0x0001 +#define RRD_UPDATED_SHIFT 31 + + +/* Statistics counters collected by the MAC */ +struct alx_hw_stats { + /* rx */ + unsigned long rx_ok; + unsigned long rx_bcast; + unsigned long rx_mcast; + unsigned long rx_pause; + unsigned long rx_ctrl; + unsigned long rx_fcs_err; + unsigned long rx_len_err; + unsigned long rx_byte_cnt; + unsigned long rx_runt; + unsigned long rx_frag; + unsigned long rx_sz_64B; + unsigned long rx_sz_127B; + unsigned long rx_sz_255B; + unsigned long rx_sz_511B; + unsigned long rx_sz_1023B; + unsigned long rx_sz_1518B; + unsigned long rx_sz_max; + unsigned long rx_ov_sz; + unsigned long rx_ov_rxf; + unsigned long rx_ov_rrd; + unsigned long rx_align_err; + unsigned long rx_bc_byte_cnt; + unsigned long rx_mc_byte_cnt; + unsigned long rx_err_addr; + + /* tx */ + unsigned long tx_ok; + unsigned long tx_bcast; + unsigned long tx_mcast; + unsigned long tx_pause; + unsigned long tx_exc_defer; + unsigned long tx_ctrl; + unsigned long tx_defer; + unsigned long tx_byte_cnt; + unsigned long tx_sz_64B; + unsigned long tx_sz_127B; + unsigned long tx_sz_255B; + unsigned long tx_sz_511B; + unsigned long tx_sz_1023B; + unsigned long tx_sz_1518B; + unsigned long tx_sz_max; + unsigned long tx_single_col; + unsigned long tx_multi_col; + unsigned long tx_late_col; + unsigned long tx_abort_col; + unsigned long tx_underrun; + unsigned long tx_trd_eop; + unsigned long tx_len_err; + unsigned long tx_trunc; + unsigned long tx_bc_byte_cnt; + unsigned long tx_mc_byte_cnt; + unsigned long update; +}; + +#define SPEED_0 0 +#define HALF_DUPLEX 1 +#define FULL_DUPLEX 2 +#define ALX_MAX_SETUP_LNK_CYCLE 50 + +#define ALX_SPEED_TO_ETHADV(_speed) (\ +(_speed) == SPEED_1000 + FULL_DUPLEX ? ADVERTISED_1000baseT_Full : \ +(_speed) == SPEED_100 + FULL_DUPLEX ? ADVERTISED_100baseT_Full : \ +(_speed) == SPEED_100 + HALF_DUPLEX ? ADVERTISED_10baseT_Half : \ +(_speed) == SPEED_10 + FULL_DUPLEX ? ADVERTISED_10baseT_Full : \ +(_speed) == SPEED_10 + HALF_DUPLEX ? ADVERTISED_10baseT_Half : \ +0) + +#define speed_desc(_s) (\ + (_s) == SPEED_1000 + FULL_DUPLEX ? \ + "1 Gbps Full" : \ + (_s) == SPEED_100 + FULL_DUPLEX ? \ + "100 Mbps Full" : \ + (_s) == SPEED_100 + HALF_DUPLEX ? \ + "100 Mbps Half" : \ + (_s) == SPEED_10 + FULL_DUPLEX ? \ + "10 Mbps Full" : \ + (_s) == SPEED_10 + HALF_DUPLEX ? \ + "10 Mbps Half" : \ + "Unknown speed") + +/* for FlowControl */ +#define ALX_FC_RX 0x01 +#define ALX_FC_TX 0x02 +#define ALX_FC_ANEG 0x04 + +/* for sleep control */ +#define ALX_SLEEP_WOL_PHY 0x00000001 +#define ALX_SLEEP_WOL_MAGIC 0x00000002 +#define ALX_SLEEP_CIFS 0x00000004 +#define ALX_SLEEP_ACTIVE (\ + ALX_SLEEP_WOL_PHY | \ + ALX_SLEEP_WOL_MAGIC | \ + ALX_SLEEP_CIFS) + +/* for RSS hash type */ +#define ALX_RSS_HASH_TYPE_IPV4 0x1 +#define ALX_RSS_HASH_TYPE_IPV4_TCP 0x2 +#define ALX_RSS_HASH_TYPE_IPV6 0x4 +#define ALX_RSS_HASH_TYPE_IPV6_TCP 0x8 +#define ALX_RSS_HASH_TYPE_ALL (\ + ALX_RSS_HASH_TYPE_IPV4 |\ + ALX_RSS_HASH_TYPE_IPV4_TCP |\ + ALX_RSS_HASH_TYPE_IPV6 |\ + ALX_RSS_HASH_TYPE_IPV6_TCP) +#define ALX_DEF_RXBUF_SIZE 1536 +#define ALX_MAX_JUMBO_PKT_SIZE (9*1024) +#define ALX_MAX_TSO_PKT_SIZE (7*1024) +#define ALX_MAX_FRAME_SIZE ALX_MAX_JUMBO_PKT_SIZE +#define ALX_MIN_FRAME_SIZE 68 +#define ALX_RAW_MTU(_mtu) (_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN) + +#define ALX_MAX_RX_QUEUES 8 +#define ALX_MAX_TX_QUEUES 4 +#define ALX_MAX_HANDLED_INTRS 5 + +#define ALX_ISR_MISC (\ + ALX_ISR_PCIE_LNKDOWN | \ + ALX_ISR_DMAW | \ + ALX_ISR_DMAR | \ + ALX_ISR_SMB | \ + ALX_ISR_MANU | \ + ALX_ISR_TIMER) + +#define ALX_ISR_FATAL (\ + ALX_ISR_PCIE_LNKDOWN | \ + ALX_ISR_DMAW | \ + ALX_ISR_DMAR) + +#define ALX_ISR_ALERT (\ + ALX_ISR_RXF_OV | \ + ALX_ISR_TXF_UR | \ + ALX_ISR_RFD_UR) + +#define ALX_ISR_ALL_QUEUES (\ + ALX_ISR_TX_Q0 | \ + ALX_ISR_TX_Q1 | \ + ALX_ISR_TX_Q2 | \ + ALX_ISR_TX_Q3 | \ + ALX_ISR_RX_Q0 | \ + ALX_ISR_RX_Q1 | \ + ALX_ISR_RX_Q2 | \ + ALX_ISR_RX_Q3 | \ + ALX_ISR_RX_Q4 | \ + ALX_ISR_RX_Q5 | \ + ALX_ISR_RX_Q6 | \ + ALX_ISR_RX_Q7) + +/* maximum interrupt vectors for msix */ +#define ALX_MAX_MSIX_INTRS 16 + +#define FIELD_GETX(_x, _name) (((_x) >> (_name##_SHIFT)) & (_name##_MASK)) +#define FIELD_SETS(_x, _name, _v) (\ +(_x) = \ +((_x) & ~((_name##_MASK) << (_name##_SHIFT))) |\ +(((u16)(_v) & (_name##_MASK)) << (_name##_SHIFT))) +#define FIELD_SET32(_x, _name, _v) (\ +(_x) = \ +((_x) & ~((_name##_MASK) << (_name##_SHIFT))) |\ +(((_v) & (_name##_MASK)) << (_name##_SHIFT))) +#define FIELDX(_name, _v) (((_v) & (_name##_MASK)) << (_name##_SHIFT)) + +struct alx_hw { + void *pdev; + u8 __iomem *hw_addr; + + /* pci regs */ + u16 device_id; + u16 subdev_id; + u16 subven_id; + u8 revision; + + unsigned long capability; + + /* current & permanent mac addr */ + u8 mac_addr[ETH_ALEN]; + u8 perm_addr[ETH_ALEN]; + + u16 mtu; + u16 imt; + u8 dma_chnl; + u8 max_dma_chnl; + /* tpd threshold to trig INT */ + u32 ith_tpd; + u32 rx_ctrl; + u32 mc_hash[2]; + + u8 rss_key[40]; + u32 rss_idt[32]; + u16 rss_idt_size; + u8 rss_hash_type; + + /* weight round robin for multiple-tx-Q */ + u32 wrr[ALX_MAX_TX_QUEUES]; + /* prioirty control */ + u32 wrr_ctrl; + + /* interrupt mask for ALX_IMR */ + u32 imask; + u32 smb_timer; + bool link_up; + u16 link_speed; + u8 link_duplex; + + /* auto-neg advertisement or force mode config */ + u32 adv_cfg; + u8 flowctrl; + + struct alx_hw_stats hw_stats; + u32 sleep_ctrl; + /* sram address for pattern wol */ + u32 ptrn_ofs; + /* max patterns number */ + u16 max_ptrns; + + spinlock_t mdio_lock; + struct mdio_if_info mdio; + u16 phy_id[2]; + + struct alx_hw_stats stats; + /* PHY link patch flag */ + bool lnk_patch; + /* PHY hibernation patch flag */ + bool hib_patch; + /* FPGA or ASIC */ + bool is_fpga; +}; + +#define ALX_DID(_hw) ((_hw)->device_id) +#define ALX_SUB_VID(_hw) ((_hw)->subven_id) +#define ALX_SUB_DID(_hw) ((_hw)->subdev_id) +#define ALX_REVID(_hw) ((_hw)->revision >> ALX_PCI_REVID_SHIFT) +#define ALX_WITH_CR(_hw) ((_hw)->revision & 1) + +enum ALX_CAPS { + ALX_CAP_GIGA = 0, + ALX_CAP_PTP, + ALX_CAP_AZ, + ALX_CAP_L0S, + ALX_CAP_L1, + ALX_CAP_SWOI, + ALX_CAP_RSS, + ALX_CAP_MSIX, + /* support Multi-TX-Q */ + ALX_CAP_MTQ, + /* support Multi-RX-Q */ + ALX_CAP_MRQ, +}; +#define ALX_CAP(_hw, _cap) (\ + test_bit(ALX_CAP_##_cap, &(_hw)->capability)) +#define ALX_CAP_SET(_hw, _cap) (\ + set_bit(ALX_CAP_##_cap, &(_hw)->capability)) +#define ALX_CAP_CLEAR(_hw, _cap) (\ + clear_bit(ALX_CAP_##_cap, &(_hw)->capability)) + +/* write to 8bit register via pci memory space */ +#define ALX_MEM_W8(s, reg, val) (writeb((val), ((s)->hw_addr + reg))) + +/* read from 8bit register via pci memory space */ +#define ALX_MEM_R8(s, reg, pdat) (\ + *(u8 *)(pdat) = readb((s)->hw_addr + reg)) + +/* write to 16bit register via pci memory space */ +#define ALX_MEM_W16(s, reg, val) (writew((val), ((s)->hw_addr + reg))) + +/* read from 16bit register via pci memory space */ +#define ALX_MEM_R16(s, reg, pdat) (\ + *(u16 *)(pdat) = readw((s)->hw_addr + reg)) + +/* write to 32bit register via pci memory space */ +#define ALX_MEM_W32(s, reg, val) (writel((val), ((s)->hw_addr + reg))) + +/* read from 32bit register via pci memory space */ +#define ALX_MEM_R32(s, reg, pdat) (\ + *(u32 *)(pdat) = readl((s)->hw_addr + reg)) + +/* read from 16bit register via pci config space */ +#define ALX_CFG_R16(s, reg, pdat) (\ + pci_read_config_word((s)->pdev, (reg), (pdat))) + +/* write to 16bit register via pci config space */ +#define ALX_CFG_W16(s, reg, val) (\ + pci_write_config_word((s)->pdev, (reg), (val))) + +/* flush regs */ +#define ALX_MEM_FLUSH(s) (readl((s)->hw_addr)) + + +int alx_get_perm_macaddr(struct alx_hw *hw, u8 *addr); +void alx_add_mc_addr(struct alx_hw *hw, u8 *addr); +void alx_reset_phy(struct alx_hw *hw, bool hib_en); +void alx_reset_pcie(struct alx_hw *hw); +void alx_enable_aspm(struct alx_hw *hw, bool l0s_en, bool l1_en); +int alx_setup_speed_duplex(struct alx_hw *hw, u32 ethadv, u8 flowctrl); +void alx_post_phy_link(struct alx_hw *hw, u16 speed, bool az_en); +int alx_pre_suspend(struct alx_hw *hw, u16 speed); +int alx_read_phy_reg(struct alx_hw *hw, u16 reg, u16 *phy_data); +int alx_write_phy_reg(struct alx_hw *hw, u16 reg, u16 phy_data); +int alx_read_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 *pdata); +int alx_write_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 data); +int alx_read_phy_dbg(struct alx_hw *hw, u16 reg, u16 *pdata); +int alx_write_phy_dbg(struct alx_hw *hw, u16 reg, u16 data); +int alx_get_phy_link(struct alx_hw *hw, bool *link_up, u16 *speed); +int alx_clear_phy_intr(struct alx_hw *hw); +int alx_config_wol(struct alx_hw *hw); +void alx_cfg_mac_fc(struct alx_hw *hw, u8 fc); +void alx_start_mac(struct alx_hw *hw); +int alx_stop_mac(struct alx_hw *hw); +int alx_reset_mac(struct alx_hw *hw); +void alx_set_macaddr(struct alx_hw *hw, u8 *addr); +bool alx_phy_configed(struct alx_hw *hw); +void alx_configure_basic(struct alx_hw *hw); +void alx_configure_rss(struct alx_hw *hw, bool en); +void alx_mask_msix(struct alx_hw *hw, int index, bool mask); +int alx_select_powersaving_speed(struct alx_hw *hw, u16 *speed); +void __alx_update_hw_stats(struct alx_hw *hw); +void __alx_start_phy_polling(struct alx_hw *hw, u16 clk_sel); + +#define alx_get_readrq(_hw) pcie_get_readrq((_hw)->pdev) +#define alx_set_readrq(_hw, _v) pcie_set_readrq((_hw)->pdev, _v) + + +/* some issues are relavant to specific platforms + * we assign those patches for the chip by pci device id + * vendor id, subsystem id and revision number + */ +struct alx_platform_patch { + u16 pci_did; + u8 pci_rev; + u16 subsystem_vid; + u16 subsystem_did; + u32 pflag; +}; +/* PHY link issue */ +#define ALX_PF_LINK 0x00001 +/* Hibernatation issue */ +#define ALX_PF_HIB 0x00002 +/* not care revision number */ +#define ALX_PF_ANY_REV 0x10000 + + +void alx_patch_assign(struct alx_hw *hw); +bool alx_get_phy_info(struct alx_hw *hw); + +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/alx/Makefile +++ linux-lts-raring-3.8.0/ubuntu/alx/Makefile @@ -0,0 +1,3 @@ +obj-$(CONFIG_ALX) += alx.o +alx-objs := alx_main.o alx_ethtool.o alx_hw.o +ccflags-y += -D__CHECK_ENDIAN__ --- linux-lts-raring-3.8.0.orig/ubuntu/alx/update.sh +++ linux-lts-raring-3.8.0/ubuntu/alx/update.sh @@ -0,0 +1,20 @@ +# +# Update from the upstream repository. +# + +### github:qca == QCA Project repo +ALX_REPO="git://github.com/qca/alx.git" + +ALX_AUTHOR="Qualcomm Atheros, Inc. " +set -e + +git clone "$ALX_REPO" +descr="UBUNTU: SAUCE: alx: Update to `(cd alx; git describe --all; echo; git remote -v |grep fetch; echo -n " "; git log --pretty=oneline -1)`" + +rsync -av alx/src/ alx/LICENSE alx/README.md . +rm -rf alx + +git add . +git commit --author="$ALX_AUTHOR" -s -m"$descr" + +git log -1 --- linux-lts-raring-3.8.0.orig/ubuntu/alx/alx_main.c +++ linux-lts-raring-3.8.0/ubuntu/alx/alx_main.c @@ -0,0 +1,2818 @@ +/* + * Copyright (c) 2012 Qualcomm Atheros, Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "alx_reg.h" +#include "alx_hw.h" +#include "alx.h" + +#define DRV_MAJ 1 +#define DRV_MIN 2 +#define DRV_PATCH 3 +#define DRV_MODULE_VER \ + __stringify(DRV_MAJ) "." __stringify(DRV_MIN) "." \ + __stringify(DRV_PATCH) + +char alx_drv_name[] = "alx"; +char alx_drv_version[] = DRV_MODULE_VER; +static const char alx_drv_desc[] = +"Qualcomm Atheros(R) AR816x/AR817x PCI-E Ethernet Network Driver"; + +/* alx_pci_tbl - PCI Device ID Table + * + * Wildcard entries (PCI_ANY_ID) should come last + * Last entry must be all 0s + * + * { Vendor ID, Device ID, SubVendor ID, SubDevice ID, + * Class, Class Mask, private data (not used) } + */ +#define ALX_ETHER_DEVICE(device_id) {\ + PCI_DEVICE(ALX_VENDOR_ID, device_id)} +static DEFINE_PCI_DEVICE_TABLE(alx_pci_tbl) = { + ALX_ETHER_DEVICE(ALX_DEV_ID_AR8161), + ALX_ETHER_DEVICE(ALX_DEV_ID_AR8162), + ALX_ETHER_DEVICE(ALX_DEV_ID_AR8171), + ALX_ETHER_DEVICE(ALX_DEV_ID_AR8172), + {0,} +}; + +MODULE_DEVICE_TABLE(pci, alx_pci_tbl); +MODULE_AUTHOR("Qualcomm Corporation, "); +MODULE_DESCRIPTION("Qualcomm Atheros Gigabit Ethernet Driver"); +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_VERSION(DRV_MODULE_VER); + +static int alx_poll(struct napi_struct *napi, int budget); +static irqreturn_t alx_msix_ring(int irq, void *data); +static irqreturn_t alx_intr_msix_misc(int irq, void *data); +static irqreturn_t alx_intr_msi(int irq, void *data); +static irqreturn_t alx_intr_legacy(int irq, void *data); +static void alx_init_ring_ptrs(struct alx_adapter *adpt); +static int alx_reinit_rings(struct alx_adapter *adpt); + +static inline void alx_schedule_work(struct alx_adapter *adpt) +{ + if (!ALX_FLAG(adpt, HALT)) + schedule_work(&adpt->task); +} + +static inline void alx_cancel_work(struct alx_adapter *adpt) +{ + cancel_work_sync(&adpt->task); +} + + +static void __alx_set_rx_mode(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + struct netdev_hw_addr *ha; + + + /* comoute mc addresses' hash value ,and put it into hash table */ + netdev_for_each_mc_addr(ha, netdev) + alx_add_mc_addr(hw, ha->addr); + + ALX_MEM_W32(hw, ALX_HASH_TBL0, hw->mc_hash[0]); + ALX_MEM_W32(hw, ALX_HASH_TBL1, hw->mc_hash[1]); + + /* check for Promiscuous and All Multicast modes */ + hw->rx_ctrl &= ~(ALX_MAC_CTRL_MULTIALL_EN | ALX_MAC_CTRL_PROMISC_EN); + if (netdev->flags & IFF_PROMISC) + hw->rx_ctrl |= ALX_MAC_CTRL_PROMISC_EN; + if (netdev->flags & IFF_ALLMULTI) + hw->rx_ctrl |= ALX_MAC_CTRL_MULTIALL_EN; + + ALX_MEM_W32(hw, ALX_MAC_CTRL, hw->rx_ctrl); +} + +/* alx_set_rx_mode - Multicast and Promiscuous mode set */ +static void alx_set_rx_mode(struct net_device *netdev) +{ + __alx_set_rx_mode(netdev); +} + + +/* alx_set_mac - Change the Ethernet Address of the NIC */ +static int alx_set_mac_address(struct net_device *netdev, void *data) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + struct sockaddr *addr = data; + + if (!is_valid_ether_addr(addr->sa_data)) + return -EADDRNOTAVAIL; + + if (netdev->addr_assign_type & NET_ADDR_RANDOM) + netdev->addr_assign_type ^= NET_ADDR_RANDOM; + + memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); + memcpy(hw->mac_addr, addr->sa_data, netdev->addr_len); + alx_set_macaddr(hw, hw->mac_addr); + + return 0; +} + +static void alx_free_napis(struct alx_adapter *adpt) +{ + struct alx_napi *np; + int i; + + for (i = 0; i < adpt->nr_napi; i++) { + np = adpt->qnapi[i]; + if (!np) + continue; + + netif_napi_del(&np->napi); + kfree(np->txq); + np->txq = NULL; + kfree(np->rxq); + np->rxq = NULL; + adpt->qnapi[i] = NULL; + } +} +static u16 tx_pidx_reg[] = {ALX_TPD_PRI0_PIDX, ALX_TPD_PRI1_PIDX, + ALX_TPD_PRI2_PIDX, ALX_TPD_PRI3_PIDX}; +static u16 tx_cidx_reg[] = {ALX_TPD_PRI0_CIDX, ALX_TPD_PRI1_CIDX, + ALX_TPD_PRI2_CIDX, ALX_TPD_PRI3_CIDX}; +static u32 tx_vect_mask[] = {ALX_ISR_TX_Q0, ALX_ISR_TX_Q1, + ALX_ISR_TX_Q2, ALX_ISR_TX_Q3}; +static u32 rx_vect_mask[] = {ALX_ISR_RX_Q0, ALX_ISR_RX_Q1, + ALX_ISR_RX_Q2, ALX_ISR_RX_Q3, + ALX_ISR_RX_Q4, ALX_ISR_RX_Q5, + ALX_ISR_RX_Q6, ALX_ISR_RX_Q7}; +static int alx_alloc_napis(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + struct alx_napi *np; + struct alx_rx_queue *rxq; + struct alx_tx_queue *txq; + int i; + + hw->imask &= ~ALX_ISR_ALL_QUEUES; + + /* alloc alx_napi */ + for (i = 0; i < adpt->nr_napi; i++) { + np = kzalloc(sizeof(struct alx_napi), GFP_KERNEL); + if (!np) + goto err_out; + + np->adpt = adpt; + netif_napi_add(adpt->netdev, &np->napi, alx_poll, 64); + adpt->qnapi[i] = np; + } + + /* alloc tx queue */ + for (i = 0; i < adpt->nr_txq; i++) { + np = adpt->qnapi[i]; + txq = kzalloc(sizeof(struct alx_tx_queue), GFP_KERNEL); + if (!txq) + goto err_out; + np->txq = txq; + txq->p_reg = tx_pidx_reg[i]; + txq->c_reg = tx_cidx_reg[i]; + txq->count = adpt->tx_ringsz; + txq->qidx = (u16)i; + np->vec_mask |= tx_vect_mask[i]; + hw->imask |= tx_vect_mask[i]; + } + + /* alloc rx queue */ + for (i = 0; i < adpt->nr_rxq; i++) { + np = adpt->qnapi[i]; + rxq = kzalloc(sizeof(struct alx_rx_queue), GFP_KERNEL); + if (!rxq) + goto err_out; + np->rxq = rxq; + rxq->p_reg = ALX_RFD_PIDX; + rxq->c_reg = ALX_RFD_CIDX; + rxq->count = adpt->rx_ringsz; + rxq->qidx = (u16)i; + __skb_queue_head_init(&rxq->list); + np->vec_mask |= rx_vect_mask[i]; + hw->imask |= rx_vect_mask[i]; + } + + return 0; + +err_out: + alx_free_napis(adpt); + return -ENOMEM; +} + +static int alx_alloc_rings(struct alx_adapter *adpt) +{ + struct alx_buffer *bf; + u8 *desc; + dma_addr_t dma; + int i, size, offset; + + /* alx_buffer */ + size = sizeof(struct alx_buffer) * adpt->nr_txq * adpt->tx_ringsz + + sizeof(struct alx_buffer) * adpt->nr_hwrxq * adpt->rx_ringsz; + + bf = vzalloc(size); + if (!bf) + goto err_out; + + /* physical rx rings */ + size = sizeof(struct tpd_desc) * adpt->tx_ringsz * adpt->nr_txq + + (sizeof(struct rrd_desc) + sizeof(struct rfd_desc)) * + adpt->rx_ringsz * adpt->nr_hwrxq + + adpt->nr_txq * 8 + + adpt->nr_hwrxq * 8; + desc = dma_alloc_coherent(&adpt->pdev->dev, size, &dma, GFP_KERNEL); + if (!desc) + goto err_out; + + memset(desc, 0, size); + adpt->ring_header.desc = desc; + adpt->ring_header.dma = dma; + adpt->ring_header.size = size; + + size = sizeof(struct tpd_desc) * adpt->tx_ringsz; + for (i = 0; i < adpt->nr_txq; i++) { + offset = ALIGN(dma, 8) - dma; + desc += offset; + dma += offset; + adpt->qnapi[i]->txq->netdev = adpt->netdev; + adpt->qnapi[i]->txq->dev = &adpt->pdev->dev; + adpt->qnapi[i]->txq->tpd_hdr = (struct tpd_desc *)desc; + adpt->qnapi[i]->txq->tpd_dma = dma; + adpt->qnapi[i]->txq->count = adpt->tx_ringsz; + adpt->qnapi[i]->txq->bf_info = bf; + desc += size; + dma += size; + bf += adpt->tx_ringsz; + } + size = sizeof(struct rrd_desc) * adpt->rx_ringsz; + for (i = 0; i < adpt->nr_hwrxq; i++) { + offset = ALIGN(dma, 8) - dma; + desc += offset; + dma += offset; + adpt->qnapi[i]->rxq->rrd_hdr = (struct rrd_desc *)desc; + adpt->qnapi[i]->rxq->rrd_dma = dma; + adpt->qnapi[i]->rxq->bf_info = bf; + desc += size; + dma += size; + bf += adpt->rx_ringsz; + } + size = sizeof(struct rfd_desc) * adpt->rx_ringsz; + for (i = 0; i < adpt->nr_hwrxq; i++) { + offset = ALIGN(dma, 8) - dma; + desc += offset; + dma += offset; + adpt->qnapi[i]->rxq->rfd_hdr = (struct rfd_desc *)desc; + adpt->qnapi[i]->rxq->rfd_dma = dma; + desc += size; + dma += size; + } + for (i = 0; i < adpt->nr_rxq; i++) { + adpt->qnapi[i]->rxq->netdev = adpt->netdev; + adpt->qnapi[i]->rxq->dev = &adpt->pdev->dev; + adpt->qnapi[i]->rxq->count = adpt->rx_ringsz; + } + + return 0; + +err_out: + if (bf) + vfree(bf); + + return -ENOMEM; +} + +static void alx_free_rings(struct alx_adapter *adpt) +{ + struct alx_buffer *bf; + struct alx_napi *np; + + /* alx_buffer header is in the 1st tpdq->bf_info */ + np = adpt->qnapi[0]; + if (np) { + bf = np->txq->bf_info; + if (bf) { + vfree(bf); + np->txq->bf_info = NULL; + } + } + if (adpt->ring_header.desc) { + dma_free_coherent(&adpt->pdev->dev, + adpt->ring_header.size, + adpt->ring_header.desc, + adpt->ring_header.dma); + adpt->ring_header.desc = NULL; + } +} + +/* dequeue skb from RXQ, return true if the RXQ is empty */ +static inline bool alx_skb_dequeue_n(struct alx_rx_queue *rxq, int max_pkts, + struct sk_buff_head *list) +{ + struct alx_adapter *adpt = netdev_priv(rxq->netdev); + bool use_lock = !ALX_CAP(&adpt->hw, MRQ); + bool empty; + struct sk_buff *skb; + int count = 0; + + if (use_lock) + spin_lock(&rxq->list.lock); + + while (count < max_pkts || max_pkts == -1) { + skb = __skb_dequeue(&rxq->list); + if (skb) { + __skb_queue_tail(list, skb); + count++; + } else + break; + } + + empty = skb_queue_empty(&rxq->list); + + if (use_lock) + spin_unlock(&rxq->list.lock); + + netif_info(adpt, rx_status, adpt->netdev, + "RX %d packets\n", + count); + + return empty; +} + +static inline void alx_skb_queue_tail(struct alx_rx_queue *rxq, + struct sk_buff *skb) +{ + struct alx_adapter *adpt = netdev_priv(rxq->netdev); + bool use_lock = !ALX_CAP(&adpt->hw, MRQ); + + if (use_lock) + spin_lock(&rxq->list.lock); + + __skb_queue_tail(&rxq->list, skb); + + if (use_lock) + spin_unlock(&rxq->list.lock); +} + +int alx_alloc_rxring_buf(struct alx_adapter *adpt, + struct alx_rx_queue *rxq) +{ + struct sk_buff *skb; + struct alx_buffer *cur_buf; + struct rfd_desc *rfd; + dma_addr_t dma; + u16 cur, next, count = 0; + + next = cur = rxq->pidx; + if (++next == rxq->count) + next = 0; + cur_buf = rxq->bf_info + cur; + rfd = rxq->rfd_hdr + cur; + + while (!cur_buf->skb && next != rxq->cidx) { + skb = dev_alloc_skb(adpt->rxbuf_size); + if (unlikely(!skb)) { + netdev_warn(adpt->netdev, "alloc skb failed\n"); + break; + } + dma = dma_map_single(rxq->dev, + skb->data, + adpt->rxbuf_size, + DMA_FROM_DEVICE); + if (dma_mapping_error(rxq->dev, dma)) { + netdev_warn(adpt->netdev, "mapping rx-buffer failed\n"); + dev_kfree_skb(skb); + break; + } + cur_buf->skb = skb; + dma_unmap_len_set(cur_buf, size, adpt->rxbuf_size); + dma_unmap_addr_set(cur_buf, dma, dma); + rfd->addr = cpu_to_le64(dma); + + cur = next; + if (++next == rxq->count) + next = 0; + cur_buf = rxq->bf_info + cur; + rfd = rxq->rfd_hdr + cur; + count++; + } + + if (count) { + wmb(); + rxq->pidx = cur; + ALX_MEM_W16(&adpt->hw, rxq->p_reg, (u16)cur); + } + + return count; +} + +static void alx_free_rxring_buf(struct alx_rx_queue *rxq) +{ + struct alx_buffer *cur_buf; + struct sk_buff_head list; + u16 i; + + if (rxq == NULL) + return; + + for (i = 0; i < rxq->count; i++) { + cur_buf = rxq->bf_info + i; + if (cur_buf->skb) { + dma_unmap_single(rxq->dev, + dma_unmap_addr(cur_buf, dma), + dma_unmap_len(cur_buf, size), + DMA_FROM_DEVICE); + dev_kfree_skb(cur_buf->skb); + cur_buf->skb = NULL; + dma_unmap_len_set(cur_buf, size, 0); + dma_unmap_addr_set(cur_buf, dma, 0); + } + } + + /* some skbs might be pending in the list */ + __skb_queue_head_init(&list); + alx_skb_dequeue_n(rxq, -1, &list); + while (!skb_queue_empty(&list)) { + struct sk_buff *skb; + + skb = __skb_dequeue(&list); + dev_kfree_skb(skb); + } + + rxq->pidx = 0; + rxq->cidx = 0; + rxq->rrd_cidx = 0; +} + +int alx_setup_all_ring_resources(struct alx_adapter *adpt) +{ + int err; + + err = alx_alloc_napis(adpt); + if (err) + goto out; + + err = alx_alloc_rings(adpt); + if (err) + goto out; + + err = alx_reinit_rings(adpt); + +out: + if (unlikely(err)) { + netif_err(adpt, ifup, adpt->netdev, + "setup_all_ring_resources fail %d\n", + err); + } + return err; +} + +static void alx_txbuf_unmap_and_free(struct alx_tx_queue *txq, int entry) +{ + struct alx_buffer *txb = txq->bf_info + entry; + + if (dma_unmap_len(txb, size) && + txb->flags & ALX_BUF_TX_FIRSTFRAG) { + dma_unmap_single(txq->dev, + dma_unmap_addr(txb, dma), + dma_unmap_len(txb, size), + DMA_TO_DEVICE); + txb->flags &= ~ALX_BUF_TX_FIRSTFRAG; + } else if (dma_unmap_len(txb, size)) { + dma_unmap_page(txq->dev, + dma_unmap_addr(txb, dma), + dma_unmap_len(txb, size), + DMA_TO_DEVICE); + } + if (txb->skb) { + dev_kfree_skb_any(txb->skb); + txb->skb = NULL; + } + dma_unmap_len_set(txb, size, 0); +} + +static void alx_free_txring_buf(struct alx_tx_queue *txq) +{ + int i; + + if (!txq->bf_info) + return; + + for (i = 0; i < txq->count; i++) + alx_txbuf_unmap_and_free(txq, i); + + memset(txq->bf_info, 0, txq->count * sizeof(struct alx_buffer)); + memset(txq->tpd_hdr, 0, txq->count * sizeof(struct tpd_desc)); + txq->pidx = 0; + atomic_set(&txq->cidx, 0); + + netdev_tx_reset_queue(netdev_get_tx_queue(txq->netdev, txq->qidx)); +} + +/* free up pending skb for tx/rx */ +static void alx_free_all_rings_buf(struct alx_adapter *adpt) +{ + int i; + + for (i = 0; i < adpt->nr_txq; i++) + if (adpt->qnapi[i]) + alx_free_txring_buf(adpt->qnapi[i]->txq); + + for (i = 0; i < adpt->nr_hwrxq; i++) + if (adpt->qnapi[i]) + alx_free_rxring_buf(adpt->qnapi[i]->rxq); +} + +void alx_free_all_ring_resources(struct alx_adapter *adpt) +{ + alx_free_all_rings_buf(adpt); + alx_free_rings(adpt); + alx_free_napis(adpt); +} + +static inline int alx_tpd_avail(struct alx_tx_queue *txq) +{ + u16 cidx = atomic_read(&txq->cidx); + + return txq->pidx >= cidx ? + txq->count + cidx - txq->pidx - 1 : + cidx - txq->pidx - 1; +} + + + +static bool alx_clean_tx_irq(struct alx_tx_queue *txq) +{ + struct alx_adapter *adpt = netdev_priv(txq->netdev); + struct netdev_queue *netque; + u16 hw_cidx, sw_cidx; + unsigned int total_bytes = 0, total_packets = 0; + int budget = ALX_DEFAULT_TX_WORK; + + if (ALX_FLAG(adpt, HALT)) + return true; + + netque = netdev_get_tx_queue(adpt->netdev, txq->qidx); + sw_cidx = atomic_read(&txq->cidx); + + ALX_MEM_R16(&adpt->hw, txq->c_reg, &hw_cidx); + + if (sw_cidx != hw_cidx) { + + netif_info(adpt, tx_done, adpt->netdev, + "TX[Q:%d, Preg:%x]: cons = 0x%x, hw-cons = 0x%x\n", + txq->qidx, txq->p_reg, sw_cidx, hw_cidx); + + while (sw_cidx != hw_cidx && budget > 0) { + struct sk_buff *skb; + + skb = txq->bf_info[sw_cidx].skb; + if (skb) { + total_bytes += skb->len; + total_packets++; + budget--; + } + alx_txbuf_unmap_and_free(txq, sw_cidx); + if (++sw_cidx == txq->count) + sw_cidx = 0; + } + atomic_set(&txq->cidx, sw_cidx); + + netdev_tx_completed_queue(netque, total_packets, total_bytes); + } + + if (unlikely(netif_tx_queue_stopped(netque) && + netif_carrier_ok(adpt->netdev) && + alx_tpd_avail(txq) > ALX_TX_WAKEUP_THRESH(txq) && + !ALX_FLAG(adpt, HALT))) { + netif_tx_wake_queue(netque); + } + + return sw_cidx == hw_cidx; +} + +static bool alx_dispatch_skb(struct alx_rx_queue *rxq) +{ + struct alx_adapter *adpt = netdev_priv(rxq->netdev); + struct rrd_desc *rrd; + struct alx_buffer *rxb; + struct sk_buff *skb; + u16 length, rfd_cleaned = 0; + struct alx_rx_queue *tmp_rxq; + int qnum; + + if (test_and_set_bit(ALX_RQ_USING, &rxq->flag)) + return false; + + while (1) { + rrd = rxq->rrd_hdr + rxq->rrd_cidx; + if (!(rrd->word3 & (1 << RRD_UPDATED_SHIFT))) + break; + rrd->word3 &= ~(1 << RRD_UPDATED_SHIFT); + + if (unlikely(FIELD_GETX(rrd->word0, RRD_SI) != rxq->cidx || + FIELD_GETX(rrd->word0, RRD_NOR) != 1)) { + netif_err(adpt, rx_err, adpt->netdev, + "wrong SI/NOR packet! rrd->word0= %08x\n", + rrd->word0); + /* reset chip */ + ALX_FLAG_SET(adpt, TASK_RESET); + alx_schedule_work(adpt); + return true; + } + rxb = rxq->bf_info + rxq->cidx; + dma_unmap_single(rxq->dev, + dma_unmap_addr(rxb, dma), + dma_unmap_len(rxb, size), + DMA_FROM_DEVICE); + dma_unmap_len_set(rxb, size, 0); + skb = rxb->skb; + rxb->skb = NULL; + + if (unlikely(rrd->word3 & (1 << RRD_ERR_RES_SHIFT) || + rrd->word3 & (1 << RRD_ERR_LEN_SHIFT))) { + netdev_warn(adpt->netdev, + "wrong packet! rrd->word3 is %08x\n", + rrd->word3); + rrd->word3 = 0; + dev_kfree_skb_any(skb); + goto next_pkt; + } + length = FIELD_GETX(rrd->word3, RRD_PKTLEN) - ETH_FCS_LEN; + skb_put(skb, length); + skb->protocol = eth_type_trans(skb, adpt->netdev); + /* checksum */ + skb_checksum_none_assert(skb); + if (adpt->netdev->features & NETIF_F_RXCSUM) { + switch (FIELD_GETX(rrd->word2, RRD_PID)) { + case RRD_PID_IPV6UDP: + case RRD_PID_IPV4UDP: + case RRD_PID_IPV4TCP: + case RRD_PID_IPV6TCP: + if (rrd->word3 & ((1 << RRD_ERR_L4_SHIFT) | + (1 << RRD_ERR_IPV4_SHIFT))) { + netdev_warn( + adpt->netdev, + "rx-chksum error, w2=%X\n", + rrd->word2); + break; + } + skb->ip_summed = CHECKSUM_UNNECESSARY; + break; + } + } + /* vlan tag */ + if (rrd->word3 & (1 << RRD_VLTAGGED_SHIFT)) { + u16 tag = ntohs(FIELD_GETX(rrd->word2, RRD_VLTAG)); + __vlan_hwaccel_put_tag(skb, ntohs(tag)); + } + qnum = FIELD_GETX(rrd->word2, RRD_RSSQ) % adpt->nr_rxq; + tmp_rxq = ALX_CAP(&adpt->hw, MRQ) ? + rxq : adpt->qnapi[qnum]->rxq; + alx_skb_queue_tail(tmp_rxq, skb); + +next_pkt: + + if (++rxq->cidx == rxq->count) + rxq->cidx = 0; + if (++rxq->rrd_cidx == rxq->count) + rxq->rrd_cidx = 0; + + if (++rfd_cleaned > ALX_RX_ALLOC_THRESH) + rfd_cleaned -= alx_alloc_rxring_buf(adpt, rxq); + } + + if (rfd_cleaned) + alx_alloc_rxring_buf(adpt, rxq); + + clear_bit(ALX_RQ_USING, &rxq->flag); + + return true; +} + +static inline struct napi_struct *alx_rxq_to_napi( + struct alx_rx_queue *rxq) +{ + struct alx_adapter *adpt = netdev_priv(rxq->netdev); + + return &adpt->qnapi[rxq->qidx]->napi; +} + +static bool alx_clean_rx_irq(struct alx_rx_queue *rxq, int budget) +{ + struct sk_buff_head list; + bool empty; + + __skb_queue_head_init(&list); + alx_dispatch_skb(alx_hw_rxq(rxq)); + empty = alx_skb_dequeue_n(rxq, budget, &list); + if (!skb_queue_empty(&list)) { + struct napi_struct *napi; + struct sk_buff *skb; + + napi = alx_rxq_to_napi(rxq); + while (!skb_queue_empty(&list)) { + skb = __skb_dequeue(&list); + napi_gro_receive(napi, skb); + } + } else { + struct alx_adapter *adpt = netdev_priv(rxq->netdev); + + netif_info(adpt, rx_status, adpt->netdev, + "no packet received for this rxQ\n"); + } + + + return empty; +} + +static int alx_request_msix(struct alx_adapter *adpt) +{ + struct net_device *netdev = adpt->netdev; + int i, err; + int vec; + + err = request_irq(adpt->msix_ent[0].vector, + alx_intr_msix_misc, 0, netdev->name, adpt); + if (err) + goto out; + + vec = 1; + for (i = 0; i < adpt->nr_napi; i++) { + struct alx_napi *np = adpt->qnapi[i]; + + if (np->txq && np->rxq) + sprintf(np->irq_lbl, "%s-TR-%u", netdev->name, i); + else if (np->txq) + sprintf(np->irq_lbl, "%s-T-%u", netdev->name, i); + else + sprintf(np->irq_lbl, "%s-R-%u", netdev->name, i); + + np->vec_idx = vec; + err = request_irq(adpt->msix_ent[vec].vector, + alx_msix_ring, 0, np->irq_lbl, np); + if (err) { + for (i--, vec--; i >= 0; i--) { + np = adpt->qnapi[i]; + free_irq(adpt->msix_ent[vec].vector, np); + } + free_irq(adpt->msix_ent[0].vector, adpt); + goto out; + } + vec++; + } + +out: + return err; +} + +static void alx_disable_msix(struct alx_adapter *adpt) +{ + if (adpt->msix_ent) { + pci_disable_msix(adpt->pdev); + kfree(adpt->msix_ent); + adpt->msix_ent = NULL; + } + ALX_FLAG_CLEAR(adpt, USING_MSIX); +} + +static void alx_disable_msi(struct alx_adapter *adpt) +{ + if (ALX_FLAG(adpt, USING_MSI)) { + pci_disable_msi(adpt->pdev); + ALX_FLAG_CLEAR(adpt, USING_MSI); + } +} + +static int txq_vec_mapping_shift[] = { + 0, ALX_MSI_MAP_TBL1_TXQ0_SHIFT, + 0, ALX_MSI_MAP_TBL1_TXQ1_SHIFT, + 1, ALX_MSI_MAP_TBL2_TXQ2_SHIFT, + 1, ALX_MSI_MAP_TBL2_TXQ3_SHIFT, +}; +static int rxq_vec_mapping_shift[] = { + 0, ALX_MSI_MAP_TBL1_RXQ0_SHIFT, + 0, ALX_MSI_MAP_TBL1_RXQ1_SHIFT, + 0, ALX_MSI_MAP_TBL1_RXQ2_SHIFT, + 0, ALX_MSI_MAP_TBL1_RXQ3_SHIFT, + 1, ALX_MSI_MAP_TBL2_RXQ4_SHIFT, + 1, ALX_MSI_MAP_TBL2_RXQ5_SHIFT, + 1, ALX_MSI_MAP_TBL2_RXQ6_SHIFT, + 1, ALX_MSI_MAP_TBL2_RXQ7_SHIFT, +}; +static void alx_config_vector_mapping(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + u32 tbl[2]; + int vect, idx, shft; + int i; + + tbl[0] = tbl[1] = 0; + + if (ALX_FLAG(adpt, USING_MSIX)) { + for (vect = 1, i = 0; i < adpt->nr_txq; i++, vect++) { + idx = txq_vec_mapping_shift[i * 2]; + shft = txq_vec_mapping_shift[i * 2 + 1]; + tbl[idx] |= vect << shft; + } + for (vect = 1, i = 0; i < adpt->nr_rxq; i++, vect++) { + idx = rxq_vec_mapping_shift[i * 2]; + shft = rxq_vec_mapping_shift[i * 2 + 1]; + tbl[idx] |= vect << shft; + } + } + ALX_MEM_W32(hw, ALX_MSI_MAP_TBL1, tbl[0]); + ALX_MEM_W32(hw, ALX_MSI_MAP_TBL2, tbl[1]); + ALX_MEM_W32(hw, ALX_MSI_ID_MAP, 0); +} + +void alx_disable_advanced_intr(struct alx_adapter *adpt) +{ + alx_disable_msix(adpt); + alx_disable_msi(adpt); + + /* clear vector/intr-event mapping */ + alx_config_vector_mapping(adpt); +} + +static void alx_irq_enable(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + int i; + + if (!atomic_dec_and_test(&adpt->irq_sem)) + return; + + /* level-1 interrupt switch */ + ALX_MEM_W32(hw, ALX_ISR, 0); + ALX_MEM_W32(hw, ALX_IMR, hw->imask); + ALX_MEM_FLUSH(hw); + + if (!ALX_FLAG(adpt, USING_MSIX)) + return; + + /* enable all individual MSIX IRQs */ + for (i = 0; i < adpt->nr_vec; i++) + alx_mask_msix(hw, i, false); +} + +static void alx_irq_disable(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + int i; + + atomic_inc(&adpt->irq_sem); + + ALX_MEM_W32(hw, ALX_ISR, ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_IMR, 0); + ALX_MEM_FLUSH(hw); + + if (ALX_FLAG(adpt, USING_MSIX)) { + for (i = 0; i < adpt->nr_vec; i++) { + alx_mask_msix(hw, i, true); + synchronize_irq(adpt->msix_ent[i].vector); + } + } else { + synchronize_irq(adpt->pdev->irq); + } +} + +static int alx_request_irq(struct alx_adapter *adpt) +{ + struct pci_dev *pdev = adpt->pdev; + struct alx_hw *hw = &adpt->hw; + int err; + u32 msi_ctrl; + + msi_ctrl = FIELDX(ALX_MSI_RETRANS_TM, hw->imt >> 1); + + if (ALX_FLAG(adpt, USING_MSIX)) { + ALX_MEM_W32(hw, ALX_MSI_RETRANS_TIMER, msi_ctrl); + err = alx_request_msix(adpt); + if (!err) + goto out; + /* fall back to MSI or legacy interrupt mode, + * re-alloc all resources + */ + alx_free_all_ring_resources(adpt); + alx_disable_msix(adpt); + adpt->nr_rxq = 1; + adpt->nr_txq = 1; + adpt->nr_napi = 1; + adpt->nr_vec = 1; + adpt->nr_hwrxq = 1; + alx_configure_rss(hw, false); + if (!pci_enable_msi(pdev)) + ALX_FLAG_SET(adpt, USING_MSI); + + err = alx_setup_all_ring_resources(adpt); + if (err) + goto out; + } + + if (ALX_FLAG(adpt, USING_MSI)) { + ALX_MEM_W32(hw, ALX_MSI_RETRANS_TIMER, + msi_ctrl | ALX_MSI_MASK_SEL_LINE); + err = request_irq(pdev->irq, alx_intr_msi, 0, + adpt->netdev->name, adpt); + if (!err) + goto out; + /* fall back to legacy interrupt */ + alx_disable_msi(adpt); + } + + ALX_MEM_W32(hw, ALX_MSI_RETRANS_TIMER, 0); + err = request_irq(pdev->irq, alx_intr_legacy, IRQF_SHARED, + adpt->netdev->name, adpt); + + if (err) + netif_err(adpt, intr, adpt->netdev, + "request shared irq failed, err = %d\n", + err); + +out: + if (likely(!err)) { + alx_config_vector_mapping(adpt); + + netif_info(adpt, drv, adpt->netdev, + "nr_rxq=%d, nr_txq=%d, nr_napi=%d, nr_vec=%d\n", + adpt->nr_rxq, adpt->nr_txq, + adpt->nr_napi, adpt->nr_vec); + netif_info(adpt, drv, adpt->netdev, + "flags=%lX, Interrupt Mode: %s\n", + adpt->flags, + ALX_FLAG(adpt, USING_MSIX) ? "MSIX" : + ALX_FLAG(adpt, USING_MSI) ? "MSI" : "INTx"); + } else + netdev_err(adpt->netdev, + "register IRQ fail %d\n", + err); + + return err; +} + +static void alx_free_irq(struct alx_adapter *adpt) +{ + struct pci_dev *pdev = adpt->pdev; + int i, vec; + + if (ALX_FLAG(adpt, USING_MSIX)) { + free_irq(adpt->msix_ent[0].vector, adpt); + vec = 1; + for (i = 0; i < adpt->nr_napi; i++, vec++) + free_irq(adpt->msix_ent[vec].vector, adpt->qnapi[i]); + } else { + free_irq(pdev->irq, adpt); + } + alx_disable_advanced_intr(adpt); +} + + +static int alx_identify_hw(struct alx_adapter *adpt) +{ + struct pci_dev *pdev = adpt->pdev; + struct alx_hw *hw = &adpt->hw; + int rev; + int err = -EINVAL; + + hw->device_id = pdev->device; + hw->subdev_id = pdev->subsystem_device; + hw->subven_id = pdev->subsystem_vendor; + hw->revision = pdev->revision; + rev = ALX_REVID(hw); + + switch (ALX_DID(hw)) { + case ALX_DEV_ID_AR8161: + case ALX_DEV_ID_AR8162: + case ALX_DEV_ID_AR8171: + case ALX_DEV_ID_AR8172: + if (rev > ALX_REV_C0) + break; + err = 0; + ALX_CAP_SET(hw, L0S); + ALX_CAP_SET(hw, L1); + ALX_CAP_SET(hw, MTQ); + ALX_CAP_SET(hw, RSS); + ALX_CAP_SET(hw, MSIX); + ALX_CAP_SET(hw, SWOI); + hw->max_dma_chnl = rev >= ALX_REV_B0 ? 4 : 2; + if (rev < ALX_REV_C0) { + hw->ptrn_ofs = 0x600; + hw->max_ptrns = 8; + pdev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG; + } else { + hw->ptrn_ofs = 0x14000; + hw->max_ptrns = 16; + } + break; + } + + if (!err && ALX_DID(hw) & 1) + ALX_CAP_SET(hw, GIGA); + + return err; +} + + +static const u8 def_rss_key[40] = { + 0xE2, 0x91, 0xD7, 0x3D, 0x18, 0x05, 0xEC, 0x6C, + 0x2A, 0x94, 0xB3, 0x0D, 0xA5, 0x4F, 0x2B, 0xEC, + 0xEA, 0x49, 0xAF, 0x7C, 0xE2, 0x14, 0xAD, 0x3D, + 0xB8, 0x55, 0xAA, 0xBE, 0x6A, 0x3E, 0x67, 0xEA, + 0x14, 0x36, 0x4D, 0x17, 0x3B, 0xED, 0x20, 0x0D, +}; + +void alx_init_def_rss_idt(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + int i, x, y; + u32 val; + + for (i = 0; i < hw->rss_idt_size; i++) { + val = ethtool_rxfh_indir_default(i, adpt->nr_rxq); + x = i >> 3; + y = i * 4 & 0x1F; + hw->rss_idt[x] &= ~(0xF << y); + hw->rss_idt[x] |= (val & 0xF) << y; + } +} + +/* alx_init_adapter - + * initialize general software structure (struct alx_adapter). + * fields are inited based on PCI device information. + */ +static int alx_init_sw(struct alx_adapter *adpt) +{ + struct pci_dev *pdev = adpt->pdev; + struct alx_hw *hw = &adpt->hw; + int i, err; + + err = alx_identify_hw(adpt); + if (err) { + dev_err(&pdev->dev, "unrecognize the chip, aborting\n"); + return err; + } + + /* assign patch flag for specific platforms */ + alx_patch_assign(hw); + + memcpy(hw->rss_key, def_rss_key, sizeof(def_rss_key)); + hw->rss_idt_size = 128; + hw->rss_hash_type = ALX_RSS_HASH_TYPE_ALL; + hw->smb_timer = 400; + hw->mtu = adpt->netdev->mtu; + adpt->rxbuf_size = ALIGN(ALX_RAW_MTU(hw->mtu), 8); + adpt->tx_ringsz = 256; + adpt->rx_ringsz = 512; + hw->sleep_ctrl = ALX_SLEEP_WOL_MAGIC | ALX_SLEEP_WOL_PHY; + hw->imt = 200; + hw->imask = ALX_ISR_MISC; + hw->dma_chnl = hw->max_dma_chnl; + hw->ith_tpd = adpt->tx_ringsz / 3; + hw->link_up = false; + hw->link_duplex = 0; + hw->link_speed = SPEED_0; + hw->adv_cfg = ADVERTISED_Autoneg | + ADVERTISED_10baseT_Half | + ADVERTISED_10baseT_Full | + ADVERTISED_100baseT_Full | + ADVERTISED_100baseT_Half | + ADVERTISED_1000baseT_Full; + hw->flowctrl = ALX_FC_ANEG | ALX_FC_RX | ALX_FC_TX; + hw->wrr_ctrl = ALX_WRR_PRI_RESTRICT_NONE; + for (i = 0; i < ARRAY_SIZE(hw->wrr); i++) + hw->wrr[i] = 4; + + hw->rx_ctrl = ALX_MAC_CTRL_WOLSPED_SWEN | + ALX_MAC_CTRL_MHASH_ALG_HI5B | + ALX_MAC_CTRL_BRD_EN | + ALX_MAC_CTRL_PCRCE | + ALX_MAC_CTRL_CRCE | + ALX_MAC_CTRL_RXFC_EN | + ALX_MAC_CTRL_TXFC_EN | + FIELDX(ALX_MAC_CTRL_PRMBLEN, 7); + hw->is_fpga = false; + + atomic_set(&adpt->irq_sem, 1); + ALX_FLAG_SET(adpt, HALT); + + return err; +} + + +static void alx_set_vlan_mode(struct alx_hw *hw, + netdev_features_t features) +{ + if (features & NETIF_F_HW_VLAN_RX) + hw->rx_ctrl |= ALX_MAC_CTRL_VLANSTRIP; + else + hw->rx_ctrl &= ~ALX_MAC_CTRL_VLANSTRIP; + + ALX_MEM_W32(hw, ALX_MAC_CTRL, hw->rx_ctrl); +} + + +static netdev_features_t alx_fix_features(struct net_device *netdev, + netdev_features_t features) +{ + /* + * Since there is no support for separate rx/tx vlan accel + * enable/disable make sure tx flag is always in same state as rx. + */ + if (features & NETIF_F_HW_VLAN_RX) + features |= NETIF_F_HW_VLAN_TX; + else + features &= ~NETIF_F_HW_VLAN_TX; + + if (netdev->mtu > ALX_MAX_TSO_PKT_SIZE) + features &= ~(NETIF_F_TSO | NETIF_F_TSO6); + + return features; +} + + +static int alx_set_features(struct net_device *netdev, + netdev_features_t features) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + netdev_features_t changed = netdev->features ^ features; + + if (!(changed & NETIF_F_HW_VLAN_RX)) + return 0; + + alx_set_vlan_mode(&adpt->hw, features); + + return 0; +} + +/* alx_change_mtu - Change the Maximum Transfer Unit */ +static int alx_change_mtu(struct net_device *netdev, int new_mtu) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + int old_mtu = netdev->mtu; + int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN; + + if ((max_frame < ALX_MIN_FRAME_SIZE) || + (max_frame > ALX_MAX_FRAME_SIZE)) { + netif_err(adpt, hw, netdev, + "invalid MTU setting (%x)\n", + new_mtu); + return -EINVAL; + } + /* set MTU */ + if (old_mtu != new_mtu) { + netif_info(adpt, drv, adpt->netdev, + "changing MTU from %d to %d\n", + netdev->mtu, new_mtu); + netdev->mtu = new_mtu; + adpt->hw.mtu = new_mtu; + adpt->rxbuf_size = new_mtu > ALX_DEF_RXBUF_SIZE ? + ALIGN(max_frame, 8) : ALX_DEF_RXBUF_SIZE; + netdev_update_features(netdev); + if (netif_running(netdev)) + alx_reinit(adpt, false); + } + + return 0; +} + +/* configure hardware everything except: + * 1. interrupt vectors + * 2. enable control for rx modules + */ +void alx_configure(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + + alx_configure_basic(hw); + alx_configure_rss(hw, adpt->nr_rxq > 1); + __alx_set_rx_mode(adpt->netdev); + alx_set_vlan_mode(hw, adpt->netdev->features); +} + +static void alx_netif_stop(struct alx_adapter *adpt) +{ + int i; + + adpt->netdev->trans_start = jiffies; + if (netif_carrier_ok(adpt->netdev)) { + netif_carrier_off(adpt->netdev); + netif_tx_disable(adpt->netdev); + for (i = 0; i < adpt->nr_napi; i++) + napi_disable(&adpt->qnapi[i]->napi); + } +} + +static void alx_netif_start(struct alx_adapter *adpt) +{ + int i; + + netif_tx_wake_all_queues(adpt->netdev); + for (i = 0; i < adpt->nr_napi; i++) + napi_enable(&adpt->qnapi[i]->napi); + netif_carrier_on(adpt->netdev); +} + +static bool alx_enable_msix(struct alx_adapter *adpt) +{ + int nr_txq, nr_rxq, vec_req; + int i, err; + + nr_txq = min_t(int, num_online_cpus(), ALX_MAX_TX_QUEUES); + nr_rxq = min_t(int, num_online_cpus(), ALX_MAX_RX_QUEUES); + nr_rxq = rounddown_pow_of_two(nr_rxq); + /* one more vector for PHY link change & timer & other events */ + vec_req = max_t(int, nr_txq, nr_rxq) + 1; + + if (vec_req <= 2) { + netif_info(adpt, intr, adpt->netdev, + "cpu core num is less, MSI-X isn't necessary\n"); + return false; + } + + adpt->msix_ent = kcalloc(vec_req, + sizeof(struct msix_entry), + GFP_KERNEL); + if (!adpt->msix_ent) { + netif_warn(adpt, intr, adpt->netdev, + "can't alloc msix entries\n"); + return false; + } + for (i = 0; i < vec_req; i++) + adpt->msix_ent[i].entry = i; + + err = pci_enable_msix(adpt->pdev, adpt->msix_ent, vec_req); + if (err) { + kfree(adpt->msix_ent); + adpt->msix_ent = NULL; + netif_warn(adpt, intr, adpt->netdev, + "can't enable MSI-X interrupt\n"); + return false; + } + + adpt->nr_txq = nr_txq; + adpt->nr_rxq = nr_rxq; + adpt->nr_vec = vec_req; + adpt->nr_napi = vec_req - 1; + adpt->nr_hwrxq = ALX_CAP(&adpt->hw, MRQ) ? adpt->nr_rxq : 1; + + return true; +} + +void alx_init_intr(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + + if ((ALX_CAP(hw, MTQ) || ALX_CAP(hw, RSS)) && ALX_CAP(hw, MSIX)) { + if (alx_enable_msix(adpt)) + ALX_FLAG_SET(adpt, USING_MSIX); + } + if (!ALX_FLAG(adpt, USING_MSIX)) { + adpt->nr_txq = 1; + adpt->nr_rxq = 1; + adpt->nr_napi = 1; + adpt->nr_vec = 1; + adpt->nr_hwrxq = 1; + + if (!pci_enable_msi(adpt->pdev)) + ALX_FLAG_SET(adpt, USING_MSI); + } +} + +static int __alx_open(struct alx_adapter *adpt, bool resume) +{ + int err; + + /* decide interrupt mode, some resources allocation depend on it */ + alx_init_intr(adpt); + + /* init rss indirection table */ + alx_init_def_rss_idt(adpt); + + if (!resume) + netif_carrier_off(adpt->netdev); + + /* allocate all memory resources */ + err = alx_setup_all_ring_resources(adpt); + if (err) + goto err_out; + + /* make hardware ready before allocate interrupt */ + alx_configure(adpt); + + err = alx_request_irq(adpt); + if (err) + goto err_out; + + /* netif_set_real_num_tx/rx_queues need rtnl_lock held */ + if (resume) + rtnl_lock(); + netif_set_real_num_tx_queues(adpt->netdev, adpt->nr_txq); + netif_set_real_num_rx_queues(adpt->netdev, adpt->nr_rxq); + if (resume) + rtnl_unlock(); + + ALX_FLAG_CLEAR(adpt, HALT); + + /* clear old interrupts */ + ALX_MEM_W32(&adpt->hw, ALX_ISR, (u32)~ALX_ISR_DIS); + + alx_irq_enable(adpt); + + if (!resume) + netif_tx_start_all_queues(adpt->netdev); + + ALX_FLAG_SET(adpt, TASK_CHK_LINK); + alx_schedule_work(adpt); + return 0; + +err_out: + + alx_free_all_ring_resources(adpt); + alx_disable_advanced_intr(adpt); + return err; +} + +static void alx_halt(struct alx_adapter *adpt, bool in_task) +{ + struct alx_hw *hw = &adpt->hw; + + ALX_FLAG_SET(adpt, HALT); + if (!in_task) + alx_cancel_work(adpt); + + alx_netif_stop(adpt); + hw->link_up = false; + hw->link_speed = SPEED_0; + + alx_reset_mac(hw); + + /* disable l0s/l1 */ + alx_enable_aspm(hw, false, false); + alx_irq_disable(adpt); + alx_free_all_rings_buf(adpt); +} + +static void alx_activate(struct alx_adapter *adpt) +{ + /* hardware setting lost, restore it */ + alx_reinit_rings(adpt); + alx_configure(adpt); + + ALX_FLAG_CLEAR(adpt, HALT); + /* clear old interrupts */ + ALX_MEM_W32(&adpt->hw, ALX_ISR, (u32)~ALX_ISR_DIS); + + alx_irq_enable(adpt); + + ALX_FLAG_SET(adpt, TASK_CHK_LINK); + alx_schedule_work(adpt); +} + +static void __alx_stop(struct alx_adapter *adpt) +{ + alx_halt(adpt, false); + + alx_free_irq(adpt); + + alx_free_all_ring_resources(adpt); +} + +static void alx_init_ring_ptrs(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + struct alx_napi *np; + int i, tx_idx, rx_idx; + u32 addr_hi; + u16 txring_header_reg[] = {ALX_TPD_PRI0_ADDR_LO, ALX_TPD_PRI1_ADDR_LO, + ALX_TPD_PRI2_ADDR_LO, ALX_TPD_PRI3_ADDR_LO}; + u16 rfdring_header_reg[] = {ALX_RFD_ADDR_LO}; + u16 rrdring_header_reg[] = {ALX_RRD_ADDR_LO}; + + tx_idx = 0; + rx_idx = 0; + for (i = 0; i < adpt->nr_napi; i++) { + np = adpt->qnapi[i]; + if (np->rxq) { + np->rxq->pidx = 0; + np->rxq->cidx = 0; + np->rxq->rrd_cidx = 0; + if (!ALX_CAP(hw, MRQ) && rx_idx == 0) { + ALX_MEM_W32(hw, rfdring_header_reg[0], + np->rxq->rfd_dma); + ALX_MEM_W32(hw, rrdring_header_reg[0], + np->rxq->rrd_dma); + } + rx_idx++; + } + if (np->txq) { + np->txq->pidx = 0; + atomic_set(&np->txq->cidx, 0); + ALX_MEM_W32(hw, txring_header_reg[tx_idx], + np->txq->tpd_dma); + tx_idx++; + } + } + + addr_hi = ((u64)adpt->ring_header.dma) >> 32; + ALX_MEM_W32(hw, ALX_TX_BASE_ADDR_HI, addr_hi); + ALX_MEM_W32(hw, ALX_RX_BASE_ADDR_HI, addr_hi); + ALX_MEM_W32(hw, ALX_TPD_RING_SZ, adpt->tx_ringsz); + ALX_MEM_W32(hw, ALX_RRD_RING_SZ, adpt->rx_ringsz); + ALX_MEM_W32(hw, ALX_RFD_RING_SZ, adpt->rx_ringsz); + ALX_MEM_W32(hw, ALX_RFD_BUF_SZ, adpt->rxbuf_size); + + /* load these ptrs into chip internal */ + ALX_MEM_W32(hw, ALX_SRAM9, ALX_SRAM_LOAD_PTR); +} + +static void alx_show_speed(struct alx_adapter *adpt, u16 speed) +{ + netif_info(adpt, link, adpt->netdev, + "NIC Link Up: %s\n", + speed_desc(speed)); +} + +static int alx_reinit_rings(struct alx_adapter *adpt) +{ + int i, err = 0; + + alx_free_all_rings_buf(adpt); + + /* set rings' header to HW register */ + alx_init_ring_ptrs(adpt); + + /* alloc hw-rxing buf */ + for (i = 0; i < adpt->nr_hwrxq; i++) { + int count; + + count = alx_alloc_rxring_buf(adpt, adpt->qnapi[i]->rxq); + if (unlikely(!count)) { + err = -ENOMEM; + break; + } + } + + return err; +} + + + +static void alx_check_link(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + u16 speed, old_speed; + bool link_up, old_link_up; + int err; + + if (ALX_FLAG(adpt, HALT)) + return; + + /* clear PHY internal interrupt status, + * otherwise the Main interrupt status will be asserted + * for ever. + */ + alx_clear_phy_intr(hw); + + err = alx_get_phy_link(hw, &link_up, &speed); + if (err) + goto out; + + /* open interrutp mask */ + hw->imask |= ALX_ISR_PHY; + ALX_MEM_W32(hw, ALX_IMR, hw->imask); + + if (!link_up && !hw->link_up) + goto out; + + old_speed = hw->link_speed + hw->link_duplex; + old_link_up = hw->link_up; + + if (link_up) { + /* same speed ? */ + if (old_link_up && old_speed == speed) + goto out; + + alx_show_speed(adpt, speed); + hw->link_duplex = speed % 10; + hw->link_speed = speed - hw->link_duplex; + hw->link_up = true; + alx_post_phy_link(hw, hw->link_speed, ALX_CAP(hw, AZ)); + alx_enable_aspm(hw, ALX_CAP(hw, L0S), ALX_CAP(hw, L1)); + alx_start_mac(hw); + + /* link kept, just speed changed */ + if (old_link_up) + goto out; + /* link changed from 'down' to 'up' */ + alx_netif_start(adpt); + goto out; + } + + /* link changed from 'up' to 'down' */ + alx_netif_stop(adpt); + hw->link_up = false; + hw->link_speed = SPEED_0; + netif_info(adpt, link, adpt->netdev, "NIC Link Down\n"); + err = alx_reset_mac(hw); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "linkdown:reset_mac fail %d\n", err); + err = -EIO; + goto out; + } + alx_irq_disable(adpt); + + /* reset-mac cause all settings on HW lost, + * following steps restore all of them and + * refresh whole RX/TX rings + */ + err = alx_reinit_rings(adpt); + if (err) + goto out; + alx_configure(adpt); + alx_enable_aspm(hw, false, ALX_CAP(hw, L1)); + alx_post_phy_link(hw, SPEED_0, ALX_CAP(hw, AZ)); + alx_irq_enable(adpt); + +out: + + if (err) { + ALX_FLAG_SET(adpt, TASK_RESET); + alx_schedule_work(adpt); + } +} + +/* alx_open - Called when a network interface is made active */ +static int alx_open(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + int err; + + /* during diag running, disallow open */ + if (ALX_FLAG(adpt, TESTING)) + return -EBUSY; + + err = __alx_open(adpt, false); + + return err; +} + +/* alx_stop - Disables a network interface */ +static int alx_stop(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + WARN_ON(ALX_FLAG(adpt, RESETING)); + + __alx_stop(adpt); + + return 0; +} + +static int __alx_shutdown(struct pci_dev *pdev, bool *wol_en) +{ + struct alx_adapter *adpt = pci_get_drvdata(pdev); + struct net_device *netdev = adpt->netdev; + struct alx_hw *hw = &adpt->hw; + int err; + u16 speed; + + netif_device_detach(netdev); + if (netif_running(netdev)) + __alx_stop(adpt); + +#ifdef CONFIG_PM_SLEEP + err = pci_save_state(pdev); + if (err) + goto out; +#endif + + err = alx_select_powersaving_speed(hw, &speed); + if (!err) + err = alx_clear_phy_intr(hw); + if (!err) + err = alx_pre_suspend(hw, speed); + if (!err) + err = alx_config_wol(hw); + if (err) + goto out; + + *wol_en = false; + if (hw->sleep_ctrl & ALX_SLEEP_ACTIVE) { + netif_info(adpt, wol, netdev, + "wol: ctrl=%X, speed=%X\n", + hw->sleep_ctrl, speed); + + device_set_wakeup_enable(&pdev->dev, true); + *wol_en = true; + } + + pci_disable_device(pdev); + +out: + if (unlikely(err)) { + netif_info(adpt, hw, netdev, + "shutown err(%x)\n", + err); + err = -EIO; + } + + return err; +} + +static void alx_shutdown(struct pci_dev *pdev) +{ + int err; + bool wol_en; + + err = __alx_shutdown(pdev, &wol_en); + if (likely(!err)) { + pci_wake_from_d3(pdev, wol_en); + pci_set_power_state(pdev, PCI_D3hot); + } else { + dev_err(&pdev->dev, "shutdown fail %d\n", err); + } +} + +#ifdef CONFIG_PM_SLEEP +static int alx_suspend(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + int err; + bool wol_en; + + err = __alx_shutdown(pdev, &wol_en); + if (unlikely(err)) { + dev_err(&pdev->dev, "shutdown fail in suspend %d\n", err); + err = -EIO; + goto out; + } + if (wol_en) { + pci_prepare_to_sleep(pdev); + } else { + pci_wake_from_d3(pdev, false); + pci_set_power_state(pdev, PCI_D3hot); + } + +out: + return err; +} + +static int alx_resume(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + struct alx_adapter *adpt = pci_get_drvdata(pdev); + struct net_device *netdev = adpt->netdev; + struct alx_hw *hw = &adpt->hw; + int err; + + pci_set_power_state(pdev, PCI_D0); + pci_restore_state(pdev); + pci_save_state(pdev); + + pci_enable_wake(pdev, PCI_D3hot, 0); + pci_enable_wake(pdev, PCI_D3cold, 0); + + hw->link_up = false; + hw->link_speed = SPEED_0; + hw->imask = ALX_ISR_MISC; + + alx_reset_pcie(hw); + alx_reset_phy(hw, !hw->hib_patch); + err = alx_reset_mac(hw); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "resume:reset_mac fail %d\n", + err); + return -EIO; + } + err = alx_setup_speed_duplex(hw, hw->adv_cfg, hw->flowctrl); + if (err) { + netif_err(adpt, hw, adpt->netdev, + "resume:setup_speed_duplex fail %d\n", + err); + return -EIO; + } + + if (netif_running(netdev)) { + err = __alx_open(adpt, true); + if (err) + return err; + } + + netif_device_attach(netdev); + + return err; +} +#endif + + + +/* alx_update_hw_stats - Update the board statistics counters. */ +static void alx_update_hw_stats(struct alx_adapter *adpt) +{ + if (ALX_FLAG(adpt, HALT) || ALX_FLAG(adpt, RESETING)) + return; + + __alx_update_hw_stats(&adpt->hw); +} + +/* alx_get_stats - Get System Network Statistics + * + * Returns the address of the device statistics structure. + * The statistics are actually updated from the timer callback. + */ +static struct net_device_stats *alx_get_stats(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct net_device_stats *net_stats = &netdev->stats; + struct alx_hw_stats *hw_stats = &adpt->hw.stats; + + spin_lock(&adpt->smb_lock); + + alx_update_hw_stats(adpt); + + net_stats->tx_packets = hw_stats->tx_ok; + net_stats->tx_bytes = hw_stats->tx_byte_cnt; + net_stats->rx_packets = hw_stats->rx_ok; + net_stats->rx_bytes = hw_stats->rx_byte_cnt; + net_stats->multicast = hw_stats->rx_mcast; + net_stats->collisions = hw_stats->tx_single_col + + hw_stats->tx_multi_col * 2 + + hw_stats->tx_late_col + hw_stats->tx_abort_col; + + net_stats->rx_errors = hw_stats->rx_frag + hw_stats->rx_fcs_err + + hw_stats->rx_len_err + hw_stats->rx_ov_sz + + hw_stats->rx_ov_rrd + hw_stats->rx_align_err; + + net_stats->rx_fifo_errors = hw_stats->rx_ov_rxf; + net_stats->rx_length_errors = hw_stats->rx_len_err; + net_stats->rx_crc_errors = hw_stats->rx_fcs_err; + net_stats->rx_frame_errors = hw_stats->rx_align_err; + net_stats->rx_over_errors = hw_stats->rx_ov_rrd + hw_stats->rx_ov_rxf; + + net_stats->rx_missed_errors = hw_stats->rx_ov_rrd + hw_stats->rx_ov_rxf; + + net_stats->tx_errors = hw_stats->tx_late_col + hw_stats->tx_abort_col + + hw_stats->tx_underrun + hw_stats->tx_trunc; + + net_stats->tx_aborted_errors = hw_stats->tx_abort_col; + net_stats->tx_fifo_errors = hw_stats->tx_underrun; + net_stats->tx_window_errors = hw_stats->tx_late_col; + + spin_unlock(&adpt->smb_lock); + + return net_stats; +} + +static void alx_update_stats(struct alx_adapter *adpt) +{ + spin_lock(&adpt->smb_lock); + alx_update_hw_stats(adpt); + spin_unlock(&adpt->smb_lock); +} + +void alx_reinit(struct alx_adapter *adpt, bool in_task) +{ + WARN_ON(in_interrupt()); + + while (test_and_set_bit(ALX_FLAG_RESETING, &adpt->flags)) + msleep(20); + + if (ALX_FLAG(adpt, HALT)) + return; + + alx_halt(adpt, in_task); + alx_activate(adpt); + + ALX_FLAG_CLEAR(adpt, RESETING); +} + +/* alx_task - manages and runs subtasks */ +static void alx_task(struct work_struct *work) +{ + struct alx_adapter *adpt = container_of(work, struct alx_adapter, task); + + /* don't support reentrance */ + while (test_and_set_bit(ALX_FLAG_TASK_PENDING, &adpt->flags)) + msleep(20); + + if (ALX_FLAG(adpt, HALT)) + goto out; + + if (test_and_clear_bit(ALX_FLAG_TASK_RESET, &adpt->flags)) { + netif_info(adpt, hw, adpt->netdev, + "task:alx_reinit\n"); + alx_reinit(adpt, true); + } + + if (test_and_clear_bit(ALX_FLAG_TASK_UPDATE_SMB, &adpt->flags)) + alx_update_stats(adpt); + + if (test_and_clear_bit(ALX_FLAG_TASK_CHK_LINK, &adpt->flags)) + alx_check_link(adpt); + +out: + ALX_FLAG_CLEAR(adpt, TASK_PENDING); +} + + +static irqreturn_t alx_msix_ring(int irq, void *data) +{ + struct alx_napi *np = data; + struct alx_adapter *adpt = np->adpt; + struct alx_hw *hw = &adpt->hw; + + /* mask interrupt to ACK chip */ + alx_mask_msix(hw, np->vec_idx, true); + /* clear interrutp status */ + ALX_MEM_W32(hw, ALX_ISR, np->vec_mask); + + if (!ALX_FLAG(adpt, HALT)) + napi_schedule(&np->napi); + + return IRQ_HANDLED; +} + +static inline bool alx_handle_intr_misc(struct alx_adapter *adpt, u32 intr) +{ + struct alx_hw *hw = &adpt->hw; + + if (unlikely(intr & ALX_ISR_FATAL)) { + netif_info(adpt, hw, adpt->netdev, + "intr-fatal:%08X\n", intr); + ALX_FLAG_SET(adpt, TASK_RESET); + alx_schedule_work(adpt); + return true; + } + + if (intr & ALX_ISR_ALERT) + netdev_warn(adpt->netdev, "interrutp alert :%x\n", intr); + + if (intr & ALX_ISR_SMB) { + ALX_FLAG_SET(adpt, TASK_UPDATE_SMB); + alx_schedule_work(adpt); + } + + if (intr & ALX_ISR_PHY) { + /* suppress PHY interrupt, because the source + * is from PHY internal. only the internal status + * is cleared, the interrupt status could be cleared. + */ + hw->imask &= ~ALX_ISR_PHY; + ALX_MEM_W32(hw, ALX_IMR, hw->imask); + ALX_FLAG_SET(adpt, TASK_CHK_LINK); + alx_schedule_work(adpt); + } + + return false; +} + +static irqreturn_t alx_intr_msix_misc(int irq, void *data) +{ + struct alx_adapter *adpt = data; + struct alx_hw *hw = &adpt->hw; + u32 intr; + + /* mask interrupt to ACK chip */ + alx_mask_msix(hw, 0, true); + + /* read interrupt status */ + ALX_MEM_R32(hw, ALX_ISR, &intr); + intr &= (hw->imask & ~ALX_ISR_ALL_QUEUES); + + if (alx_handle_intr_misc(adpt, intr)) + return IRQ_HANDLED; + + /* clear interrupt status */ + ALX_MEM_W32(hw, ALX_ISR, intr); + + /* enable interrupt again */ + if (!ALX_FLAG(adpt, HALT)) + alx_mask_msix(hw, 0, false); + + return IRQ_HANDLED; +} + +static inline irqreturn_t alx_intr_1(struct alx_adapter *adpt, u32 intr) +{ + struct alx_hw *hw = &adpt->hw; + + /* ACK interrupt */ + netif_info(adpt, intr, adpt->netdev, + "ACK interrupt: 0x%lx\n", + intr | ALX_ISR_DIS); + ALX_MEM_W32(hw, ALX_ISR, intr | ALX_ISR_DIS); + intr &= hw->imask; + + if (alx_handle_intr_misc(adpt, intr)) + return IRQ_HANDLED; + + if (intr & (ALX_ISR_TX_Q0 | ALX_ISR_RX_Q0)) { + napi_schedule(&adpt->qnapi[0]->napi); + /* mask rx/tx interrupt, enable them when napi complete */ + hw->imask &= ~ALX_ISR_ALL_QUEUES; + ALX_MEM_W32(hw, ALX_IMR, hw->imask); + } + + ALX_MEM_W32(hw, ALX_ISR, 0); + + return IRQ_HANDLED; +} + + +static irqreturn_t alx_intr_msi(int irq, void *data) +{ + struct alx_adapter *adpt = data; + u32 intr; + + /* read interrupt status */ + ALX_MEM_R32(&adpt->hw, ALX_ISR, &intr); + + return alx_intr_1(adpt, intr); +} + +static irqreturn_t alx_intr_legacy(int irq, void *data) +{ + struct alx_adapter *adpt = data; + struct alx_hw *hw = &adpt->hw; + u32 intr; + + /* read interrupt status */ + ALX_MEM_R32(hw, ALX_ISR, &intr); + if (intr & ALX_ISR_DIS || 0 == (intr & hw->imask)) { + u32 mask; + + ALX_MEM_R32(hw, ALX_IMR, &mask); + netif_info(adpt, intr, adpt->netdev, + "seems a wild interrupt, intr=%X, imask=%X, %X\n", + intr, hw->imask, mask); + + return IRQ_NONE; + } + + return alx_intr_1(adpt, intr); +} + + +static int alx_poll(struct napi_struct *napi, int budget) +{ + struct alx_napi *np = container_of(napi, struct alx_napi, napi); + struct alx_adapter *adpt = np->adpt; + bool complete = true; + + netif_info(adpt, intr, adpt->netdev, + "alx_poll, budget(%d)\n", + budget); + + if (np->txq) + complete = alx_clean_tx_irq(np->txq); + if (np->rxq) + complete &= alx_clean_rx_irq(np->rxq, budget); + + if (!complete) + return budget; + + /* rx-packet finished, exit the polling mode */ + napi_complete(&np->napi); + + /* enable interrupt */ + if (!ALX_FLAG(adpt, HALT)) { + struct alx_hw *hw = &adpt->hw; + + if (ALX_FLAG(adpt, USING_MSIX)) + alx_mask_msix(hw, np->vec_idx, false); + else { + /* TODO: need irq spinlock for imask ?? */ + hw->imask |= ALX_ISR_TX_Q0 | ALX_ISR_RX_Q0; + ALX_MEM_W32(hw, ALX_IMR, hw->imask); + } + ALX_MEM_FLUSH(hw); + } + + return 0; +} + +static inline struct alx_tx_queue *alx_tx_queue_mapping( + struct alx_adapter *adpt, + struct sk_buff *skb) +{ + int index = skb_get_queue_mapping(skb); + + if (index >= adpt->nr_txq) + index = index % adpt->nr_txq; + + return adpt->qnapi[index]->txq; +} + +static inline int alx_tpd_req(struct sk_buff *skb) +{ + int num; + + num = skb_shinfo(skb)->nr_frags + 1; + if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) + num++; + + return num; +} + +/* get custom checksum offload params + * return val: + * neg-val: drop this skb + * 0: no custom checksum offload + * pos-val: have custom cksum offload + */ +static int alx_tx_csum(struct sk_buff *skb, struct tpd_desc *first) +{ + u8 cso, css; + + if (skb->ip_summed != CHECKSUM_PARTIAL) + return 0; + + cso = skb_checksum_start_offset(skb); + if (cso & 0x1) + return -1; + + css = cso + skb->csum_offset; + first->word1 |= FIELDX(TPD_CXSUMSTART, cso >> 1); + first->word1 |= FIELDX(TPD_CXSUMOFFSET, css >> 1); + first->word1 |= 1 << TPD_CXSUM_EN_SHIFT; + + return 1; +} + +static int alx_tso(struct sk_buff *skb, struct tpd_desc *first) +{ + int hdr_len; + int err; + + if (skb->ip_summed != CHECKSUM_PARTIAL || + !skb_is_gso(skb)) + return 0; + + if (skb_header_cloned(skb)) { + err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); + if (unlikely(err)) + return err; + } + + if (skb->protocol == htons(ETH_P_IP)) { + struct iphdr *iph; + + iph = ip_hdr(skb); + hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); + iph->check = 0; + tcp_hdr(skb)->check = ~csum_tcpudp_magic( + iph->saddr, + iph->daddr, + 0, IPPROTO_TCP, 0); + first->word1 |= 1 << TPD_IPV4_SHIFT; + first->word1 |= FIELDX(TPD_L4HDROFFSET, + skb_transport_offset(skb)); + if (unlikely(skb->len == hdr_len)) { + /* no tcp payload */ + first->word1 |= 1 << TPD_IP_XSUM_SHIFT; + first->word1 |= 1 << TPD_TCP_XSUM_SHIFT; + return 0; + } + first->word1 |= 1 << TPD_LSO_EN_SHIFT; + first->word1 |= FIELDX(TPD_MSS, skb_shinfo(skb)->gso_size); + } else if (skb_is_gso_v6(skb)) { + struct ipv6hdr *ip6h; + + ip6h = ipv6_hdr(skb); + hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); + ip6h->payload_len = 0; + tcp_hdr(skb)->check = ~csum_ipv6_magic( + &ip6h->saddr, + &ip6h->daddr, + 0, IPPROTO_TCP, 0); + first->word1 |= FIELDX(TPD_L4HDROFFSET, + skb_transport_offset(skb)); + if (unlikely(skb->len == hdr_len)) { + /* no tcp payload */ + ip6h->payload_len = skb->len - + ((unsigned char *)ip6h - skb->data) - + sizeof(struct ipv6hdr); + first->word1 |= 1 << TPD_IP_XSUM_SHIFT; + first->word1 |= 1 << TPD_TCP_XSUM_SHIFT; + return 0; + } + /* for LSOv2, the 1st TPD just provides packet length */ + first->adrl.l.pkt_len = skb->len; + first->word1 |= 1 << TPD_LSO_EN_SHIFT; + first->word1 |= 1 << TPD_LSO_V2_SHIFT; + first->word1 |= FIELDX(TPD_MSS, skb_shinfo(skb)->gso_size); + } + + return 1; +} + +static int alx_tx_map(struct alx_tx_queue *txq, struct sk_buff *skb) +{ + struct tpd_desc *tpd, *first_tpd; + struct alx_buffer *buf, *first_buf; + dma_addr_t dma; + u16 producer, maplen, f; + + producer = txq->pidx; + + first_tpd = txq->tpd_hdr + producer; + first_buf = txq->bf_info + producer; + tpd = first_tpd; + buf = first_buf; + if (tpd->word1 & (1 << TPD_LSO_V2_SHIFT)) { + if (++producer == txq->count) + producer = 0; + tpd = txq->tpd_hdr + producer; + buf = txq->bf_info + producer; + tpd->word0 = first_tpd->word0; + tpd->word1 = first_tpd->word1; + } + maplen = skb_headlen(skb); + dma = dma_map_single(txq->dev, skb->data, maplen, DMA_TO_DEVICE); + if (dma_mapping_error(txq->dev, dma)) + goto err_dma; + + dma_unmap_len_set(buf, size, maplen); + dma_unmap_addr_set(buf, dma, dma); + + tpd->adrl.addr = cpu_to_le64(dma); + FIELD_SET32(tpd->word0, TPD_BUFLEN, maplen); + + for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) { + struct skb_frag_struct *frag; + + frag = &skb_shinfo(skb)->frags[f]; + if (++producer == txq->count) + producer = 0; + tpd = txq->tpd_hdr + producer; + buf = txq->bf_info + producer; + tpd->word0 = first_tpd->word0; + tpd->word1 = first_tpd->word1; + maplen = skb_frag_size(frag); + dma = skb_frag_dma_map(txq->dev, frag, 0, + maplen, DMA_TO_DEVICE); + if (dma_mapping_error(txq->dev, dma)) + goto err_dma; + dma_unmap_len_set(buf, size, maplen); + dma_unmap_addr_set(buf, dma, dma); + + tpd->adrl.addr = cpu_to_le64(dma); + FIELD_SET32(tpd->word0, TPD_BUFLEN, maplen); + } + /* last TPD */ + tpd->word1 |= 1 << TPD_EOP_SHIFT; + + if (++producer == txq->count) + producer = 0; + + first_buf->flags |= ALX_BUF_TX_FIRSTFRAG; + buf->skb = skb; + txq->pidx = producer; + + return 0; + +err_dma: + + for (f = txq->pidx; f != producer;) { + alx_txbuf_unmap_and_free(txq, f); + if (++f == txq->count) + f = 0; + } + return -1; +} + +static netdev_tx_t alx_start_xmit_ring(struct alx_tx_queue *txq, + struct sk_buff *skb) +{ + struct alx_adapter *adpt; + struct netdev_queue *netque; + struct tpd_desc *first; + int budget, tpdreq; + int do_tso; + + adpt = netdev_priv(txq->netdev); + netque = netdev_get_tx_queue(txq->netdev, skb_get_queue_mapping(skb)); + + tpdreq = alx_tpd_req(skb); + budget = alx_tpd_avail(txq); + + if (unlikely(budget < tpdreq)) { + if (!netif_tx_queue_stopped(netque)) { + netif_tx_stop_queue(netque); + + /* TX reclaim might have plenty of free TPD + * but see tx_queue is active (because its + * judement doesn't acquire tx-spin-lock, + * this situation cause the TX-queue stop and + * never be wakeup. + * try one more time + */ + budget = alx_tpd_avail(txq); + if (budget >= tpdreq) { + netif_tx_wake_queue(netque); + goto tx_conti; + } + netif_err(adpt, tx_err, adpt->netdev, + "TPD Ring is full when queue awake!\n"); + } + return NETDEV_TX_BUSY; + } + +tx_conti: + + first = txq->tpd_hdr + txq->pidx; + memset(first, 0, sizeof(struct tpd_desc)); + + /* NOTE, chip only supports single-VLAN insertion (81-00-TAG) */ + if (vlan_tx_tag_present(skb)) { + first->word1 |= 1 << TPD_INS_VLTAG_SHIFT; + first->word0 |= FIELDX(TPD_VLTAG, htons(vlan_tx_tag_get(skb))); + } + if (skb->protocol == htons(ETH_P_8021Q)) + first->word1 |= 1 << TPD_VLTAGGED_SHIFT; + if (skb_network_offset(skb) != ETH_HLEN) + first->word1 |= 1 << TPD_ETHTYPE_SHIFT; + + do_tso = alx_tso(skb, first); + if (do_tso < 0) + goto drop; + else if (!do_tso && alx_tx_csum(skb, first) < 0) + goto drop; + + if (alx_tx_map(txq, skb) < 0) + goto drop; + + netdev_tx_sent_queue(netque, skb->len); + + /* refresh produce idx on HW */ + wmb(); + ALX_MEM_W16(&adpt->hw, txq->p_reg, txq->pidx); + + netif_info(adpt, tx_done, adpt->netdev, + "TX[Preg:%X]: producer = 0x%x, consumer = 0x%x\n", + txq->p_reg, txq->pidx, atomic_read(&txq->cidx)); + + return NETDEV_TX_OK; + +drop: + netif_info(adpt, tx_done, adpt->netdev, + "tx-skb(%d) dropped\n", + skb->len); + memset(first, 0, sizeof(struct tpd_desc)); + dev_kfree_skb(skb); + + return NETDEV_TX_OK; +} + +static netdev_tx_t alx_start_xmit(struct sk_buff *skb, + struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + if (ALX_FLAG(adpt, HALT)) { + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + + if (skb->len <= 0) { + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + + return alx_start_xmit_ring(alx_tx_queue_mapping(adpt, skb), skb); +} + + +static void alx_dump_state(struct alx_adapter *adpt) +{ + struct alx_hw *hw = &adpt->hw; + struct alx_tx_queue *txq; + struct tpd_desc *tpd; + u16 begin, end; + int i; + + for (i = 0; i < adpt->nr_txq; i++) { + + txq = adpt->qnapi[i]->txq; + begin = txq->pidx >= 8 ? (txq->pidx - 8) : + (txq->count + txq->pidx - 8); + end = txq->pidx + 4; + if (end >= txq->count) + end -= txq->count; + + netif_err(adpt, tx_err, adpt->netdev, + "-----------------TPD-ring(%d)------------------\n", + i); + + while (begin != end) { + tpd = txq->tpd_hdr + begin; + netif_err(adpt, tx_err, adpt->netdev, + "%X: W0=%08X, W1=%08X, W2=%X\n", + begin, tpd->word0, tpd->word1, + tpd->adrl.l.pkt_len); + if (++begin >= txq->count) + begin = 0; + } + } + + netif_err(adpt, tx_err, adpt->netdev, + "---------------dump registers-----------------\n"); + end = 0x1800; + for (begin = 0x1400; begin < end; begin += 16) { + u32 v1, v2, v3, v4; + + ALX_MEM_R32(hw, begin, &v1); + ALX_MEM_R32(hw, begin+4, &v2); + ALX_MEM_R32(hw, begin+8, &v3); + ALX_MEM_R32(hw, begin+12, &v4); + netif_err(adpt, tx_err, adpt->netdev, + "%04X: %08X,%08X,%08X,%08X\n", + begin, v1, v2, v3, v4); + } +} + +static void alx_tx_timeout(struct net_device *dev) +{ + struct alx_adapter *adpt = netdev_priv(dev); + + alx_dump_state(adpt); + + ALX_FLAG_SET(adpt, TASK_RESET); + alx_schedule_work(adpt); +} + +static int alx_mdio_read(struct net_device *netdev, + int prtad, int devad, u16 addr) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + u16 val; + int err; + + netif_dbg(adpt, hw, netdev, + "alx_mdio_read, prtad=%d, devad=%d, addr=%X\n", + prtad, devad, addr); + + if (prtad != hw->mdio.prtad) + return -EINVAL; + + if (devad != MDIO_DEVAD_NONE) + err = alx_read_phy_ext(hw, devad, addr, &val); + else + err = alx_read_phy_reg(hw, addr, &val); + + return err ? -EIO : val; +} + +static int alx_mdio_write(struct net_device *netdev, + int prtad, int devad, u16 addr, u16 val) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + struct alx_hw *hw = &adpt->hw; + int err; + + netif_dbg(adpt, hw, netdev, + "alx_mdio_write: prtad=%d, devad=%d, addr=%X, val=%X\n", + prtad, devad, addr, val); + + if (prtad != hw->mdio.prtad) + return -EINVAL; + + if (devad != MDIO_DEVAD_NONE) + err = alx_write_phy_ext(hw, devad, addr, val); + else + err = alx_write_phy_reg(hw, addr, val); + + return err ? -EIO : 0; +} + +static int alx_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + + if (!netif_running(netdev)) + return -EAGAIN; + + return mdio_mii_ioctl(&adpt->hw.mdio, if_mii(ifr), cmd); +} + +#ifdef CONFIG_NET_POLL_CONTROLLER +static void alx_poll_controller(struct net_device *netdev) +{ + struct alx_adapter *adpt = netdev_priv(netdev); + int i; + + if (ALX_FLAG(adpt, HALT)) + return; + + if (ALX_FLAG(adpt, USING_MSIX)) { + alx_intr_msix_misc(0, adpt); + for (i = 0; i < adpt->nr_napi; i++) + alx_msix_ring(0, adpt->qnapi[i]); + } else if (ALX_FLAG(adpt, USING_MSI)) + alx_intr_msi(0, adpt); + else + alx_intr_legacy(0, adpt); + +} +#endif + +static const struct net_device_ops alx_netdev_ops = { + .ndo_open = alx_open, + .ndo_stop = alx_stop, + .ndo_start_xmit = alx_start_xmit, + .ndo_get_stats = alx_get_stats, + .ndo_set_rx_mode = alx_set_rx_mode, + .ndo_validate_addr = eth_validate_addr, + .ndo_set_mac_address = alx_set_mac_address, + .ndo_change_mtu = alx_change_mtu, + .ndo_do_ioctl = alx_ioctl, + .ndo_tx_timeout = alx_tx_timeout, + .ndo_fix_features = alx_fix_features, + .ndo_set_features = alx_set_features, +#ifdef CONFIG_NET_POLL_CONTROLLER + .ndo_poll_controller = alx_poll_controller, +#endif +}; + +/* alx_probe - Device Initialization Routine */ +static int +alx_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +{ + struct net_device *netdev; + struct alx_adapter *adpt = NULL; + struct alx_hw *hw; + bool phy_cfged; + int bars, pm_cap, err; + static int cards_found; + + /* enable device (incl. PCI PM wakeup and hotplug setup) */ + err = pci_enable_device_mem(pdev); + if (err) { + dev_err(&pdev->dev, "cannot enable PCI device memory\n"); + return err; + } + + /* The alx chip can DMA to 64-bit addresses, but it uses a single + * shared register for the high 32 bits, so only a single, aligned, + * 4 GB physical address range can be used at a time. + */ + if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)) && + !dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) { + dev_dbg(&pdev->dev, "DMA to 64-BIT addresses\n"); + } else { + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); + if (err) { + err = dma_set_coherent_mask(&pdev->dev, + DMA_BIT_MASK(32)); + if (err) { + dev_err(&pdev->dev, + "No usable DMA config, aborting\n"); + goto err_dma_mask; + } + } + } + + /* obtain PCI resources */ + bars = pci_select_bars(pdev, IORESOURCE_MEM); + err = pci_request_selected_regions(pdev, bars, alx_drv_name); + if (err) { + dev_err(&pdev->dev, + "pci_request_selected_regions failed(bars:%d)\n", bars); + goto err_pci_region; + } + + pci_enable_pcie_error_reporting(pdev); + pci_set_master(pdev); + + /* find PM capability */ + pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); + if (pm_cap == 0) { + dev_err(&pdev->dev, + "Can't find power management capability, aborting\n"); + err = -EIO; + goto err_pm; + } + err = pci_set_power_state(pdev, PCI_D0); + if (err) { + dev_err(&pdev->dev, "switch to D0 status failed, aborting\n"); + goto err_pm; + } + + /* netdev zeroed in init_etherdev */ + netdev = alloc_etherdev_mqs(sizeof(struct alx_adapter), + ALX_MAX_TX_QUEUES, + ALX_MAX_RX_QUEUES); + if (!netdev) { + dev_err(&pdev->dev, "etherdev_mq alloc failed\n"); + err = -ENOMEM; + goto err_alloc_ethdev; + } + + SET_NETDEV_DEV(netdev, &pdev->dev); + adpt = netdev_priv(netdev); + adpt->netdev = netdev; + adpt->pdev = pdev; + adpt->msg_enable = NETIF_MSG_LINK | + NETIF_MSG_HW | + NETIF_MSG_IFUP | + NETIF_MSG_TX_ERR | + NETIF_MSG_RX_ERR | + NETIF_MSG_WOL; + adpt->bd_number = cards_found; + hw = &adpt->hw; + hw->pdev = pdev; + pci_set_drvdata(pdev, adpt); + + hw->hw_addr = pci_ioremap_bar(pdev, 0); + if (!hw->hw_addr) { + dev_err(&pdev->dev, "cannot map device registers\n"); + err = -EIO; + goto err_iomap; + } + + netdev->netdev_ops = &alx_netdev_ops; + alx_set_ethtool_ops(netdev); + netdev->irq = pdev->irq; + netdev->watchdog_timeo = ALX_WATCHDOG_TIME; + + /* init alx_adapte structure */ + err = alx_init_sw(adpt); + if (err) { + dev_err(&pdev->dev, "net device private data init failed\n"); + goto err_init_sw; + } + + /* reset pcie */ + alx_reset_pcie(hw); + + /* check if phy already configed by ohter driver */ + phy_cfged = alx_phy_configed(hw); + + /* reset PHY to a known stable status */ + if (!phy_cfged) + alx_reset_phy(hw, !hw->hib_patch); + else + dev_info(&pdev->dev, "PHY has been configured.\n"); + + /* reset mac/dma controller */ + err = alx_reset_mac(hw); + if (err) { + dev_err(&pdev->dev, "MAC Reset failed, error = %d\n", err); + err = -EIO; + goto err_rst_mac; + } + + /* setup link to put it in a known good starting state */ + if (!phy_cfged) { + err = alx_setup_speed_duplex(hw, + hw->adv_cfg, hw->flowctrl); + if (err) { + dev_err(&pdev->dev, + "config PHY speed/duplex failed,err=%d\n", + err); + err = -EIO; + goto err_setup_link; + } + } + + netdev->hw_features = NETIF_F_SG | + NETIF_F_HW_CSUM | + NETIF_F_HW_VLAN_RX | + NETIF_F_TSO | + NETIF_F_TSO6; + netdev->features = netdev->hw_features | NETIF_F_HW_VLAN_TX; + + /* read permanent mac addr from register or eFuse */ + if (alx_get_perm_macaddr(hw, hw->perm_addr)) { + dev_warn(&pdev->dev, "invalid perm-address, use random one\n"); + eth_hw_addr_random(netdev); + memcpy(hw->perm_addr, netdev->dev_addr, netdev->addr_len); + } + /* using permanent address as current address */ + memcpy(hw->mac_addr, hw->perm_addr, ETH_ALEN); + memcpy(netdev->dev_addr, hw->mac_addr, ETH_ALEN); + memcpy(netdev->perm_addr, hw->perm_addr, ETH_ALEN); + + /* PHY mdio */ + hw->mdio.prtad = 0; + hw->mdio.mmds = 0; + hw->mdio.dev = netdev; + hw->mdio.mode_support = + MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22 | MDIO_EMULATE_C22; + hw->mdio.mdio_read = alx_mdio_read; + hw->mdio.mdio_write = alx_mdio_write; + if (!alx_get_phy_info(hw)) { + dev_err(&pdev->dev, "identify PHY failed\n"); + err = -EIO; + goto err_id_phy; + } + + INIT_WORK(&adpt->task, alx_task); + + err = register_netdev(netdev); + if (err) { + dev_err(&pdev->dev, "register netdevice failed\n"); + goto err_register_netdev; + } + + /* carrier off reporting is important to ethtool even BEFORE open */ + netif_carrier_off(netdev); + + device_set_wakeup_enable(&pdev->dev, hw->sleep_ctrl); + cards_found++; + + dev_info(&pdev->dev, + "alx(%pM): Qualcomm Atheros Ethernet Network Connection\n", + netdev->dev_addr); + + return 0; + +err_id_phy: +err_register_netdev: +err_setup_link: +err_rst_mac: +err_init_sw: + iounmap(hw->hw_addr); +err_iomap: + free_netdev(netdev); +err_alloc_ethdev: +err_pm: + pci_release_selected_regions(pdev, bars); +err_pci_region: +err_dma_mask: + pci_disable_device(pdev); + dev_err(&pdev->dev, "error when probe device, error = %d\n", err); + return err; +} + +/* alx_remove - Device Removal Routine */ +static void alx_remove(struct pci_dev *pdev) +{ + struct alx_adapter *adpt = pci_get_drvdata(pdev); + struct alx_hw *hw = &adpt->hw; + struct net_device *netdev; + + if (!adpt) + return; + + netdev = adpt->netdev; + + ALX_FLAG_SET(adpt, HALT); + alx_cancel_work(adpt); + + /* restore permanent mac address */ + alx_set_macaddr(hw, hw->perm_addr); + + unregister_netdev(netdev); + iounmap(hw->hw_addr); + pci_release_selected_regions(pdev, + pci_select_bars(pdev, IORESOURCE_MEM)); + free_netdev(netdev); + pci_disable_pcie_error_reporting(pdev); + pci_disable_device(pdev); + pci_set_drvdata(pdev, NULL); +} + +/* alx_pci_error_detected */ +static pci_ers_result_t alx_pci_error_detected(struct pci_dev *pdev, + pci_channel_state_t state) +{ + struct alx_adapter *adpt = pci_get_drvdata(pdev); + struct net_device *netdev = adpt->netdev; + pci_ers_result_t rc = PCI_ERS_RESULT_NEED_RESET; + + dev_info(&pdev->dev, "pci error detected\n"); + + rtnl_lock(); + + if (netif_running(netdev)) { + netif_device_detach(netdev); + alx_halt(adpt, false); + } + if (state == pci_channel_io_perm_failure) + rc = PCI_ERS_RESULT_DISCONNECT; + else + pci_disable_device(pdev); + + rtnl_unlock(); + + return rc; +} + +/* alx_pci_error_slot_reset */ +static pci_ers_result_t alx_pci_error_slot_reset(struct pci_dev *pdev) +{ + struct alx_adapter *adpt = pci_get_drvdata(pdev); + struct alx_hw *hw = &adpt->hw; + pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; + + dev_info(&pdev->dev, "pci error slot reset\n"); + + rtnl_lock(); + + if (pci_enable_device(pdev)) { + dev_err(&pdev->dev, "Re-enable PCI device after reset fail\n"); + goto out; + } + + pci_set_master(pdev); + pci_enable_wake(pdev, PCI_D3hot, 0); + pci_enable_wake(pdev, PCI_D3cold, 0); + + alx_reset_pcie(hw); + if (!alx_reset_mac(hw)) + rc = PCI_ERS_RESULT_RECOVERED; +out: + pci_cleanup_aer_uncorrect_error_status(pdev); + + rtnl_unlock(); + + return rc; +} + +/* alx_pci_error_resume */ +static void alx_pci_error_resume(struct pci_dev *pdev) +{ + struct alx_adapter *adpt = pci_get_drvdata(pdev); + struct net_device *netdev = adpt->netdev; + + dev_info(&pdev->dev, "pci error resume\n"); + + rtnl_lock(); + + if (netif_running(netdev)) { + alx_activate(adpt); + netif_device_attach(netdev); + } + + rtnl_unlock(); +} + + +static struct pci_error_handlers alx_err_handler = { + .error_detected = alx_pci_error_detected, + .slot_reset = alx_pci_error_slot_reset, + .resume = alx_pci_error_resume, +}; + +#ifdef CONFIG_PM_SLEEP +static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); +#define ALX_PM_OPS (&alx_pm_ops) +#else +#define ALX_PM_OPS NULL +#endif + +static struct pci_driver alx_driver = { + .name = alx_drv_name, + .id_table = alx_pci_tbl, + .probe = alx_probe, + .remove = alx_remove, + .shutdown = alx_shutdown, + .err_handler = &alx_err_handler, + .driver.pm = ALX_PM_OPS, +}; + + +static int __init alx_init_module(void) +{ + pr_info("%s\n", alx_drv_desc); + return pci_register_driver(&alx_driver); +} +module_init(alx_init_module); + +static void __exit alx_exit_module(void) +{ + pci_unregister_driver(&alx_driver); +} +module_exit(alx_exit_module); --- linux-lts-raring-3.8.0.orig/ubuntu/alx/README.md +++ linux-lts-raring-3.8.0/ubuntu/alx/README.md @@ -0,0 +1,60 @@ +# alx standalone development tree + +The puropose of this development tree is to enable us to do development +on alx for both BSD and Linux with a single unified repository. This enables +us to synchronize fixes for both BSD and Linux. The idea is to help end +typical proprietary driver development for good: + +http://www.youtube.com/watch?v=9P-r3H0bY8c + +# Linux support + +Linux support targets the alx driver to be built in synch with +linux-next.git as the base development tree. Backport kernel support +is provided by utilizing the compat-drivers framework. + +To build for linux you will need a few trees. We have scripts to let +you get all that you need: + +
+cd ~
+git clone git://github.com/mcgrof/compat.git
+cd compat
+./bin/get-compat-trees
+
+cd ~
+mkdir unified/
+git clone git://github.com/mcgrof/alx.git
+
+cd alx
+./make linux
+
+ +# Contributions + +Contributions to compat follow the same mechanisms as used in the Linux kernel, +this means you should provide as Singed-off-by tag as documented on the +Developer's Certificate of Origin 1.1. + +# Submitting patches + +compat and compat-drivers contributions follow the contribution model +implemented by the Linux kernel. Patches or pull requests for compat and +compat-drivers must have be signed-offed. If you don't sign off on them they +will not accepted. This means adding a line that says "Signed-off-by: Name +email" at the end of each commit, indicating that you wrote the code and have +the right to pass it on as an open source patch. For exact definition of what +the Signed-off-by tag is you can read the definition of the "Developer's +Certificate of Origin 1.1", which you can read here: + +http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html + +You can send patches as follows: + + * To: mcgrof@kernel.org, adrian@freebsd.org + * Cc: nic-devel@qualcomm.com + * Subject: alx: foo + +# BSD support + +TBD --- linux-lts-raring-3.8.0.orig/ubuntu/alx/LICENSE +++ linux-lts-raring-3.8.0/ubuntu/alx/LICENSE @@ -0,0 +1,15 @@ +Copyright (c) 2012, Luis R. Rodriguez +Copyright (c) 2012 Qualcomm Atheros, Inc. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, 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 THIS SOFTWARE. + --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/Kconfig +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/Kconfig @@ -0,0 +1,6 @@ +config DM_RAID45 + tristate "RAID 4/5 target (EXPERIMENTAL)" + depends on BLK_DEV_DM && XOR_BLOCKS && EXPERIMENTAL + default m + ---help--- + A target that supports RAID4 and RAID5 mappings. --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-region-hash.h +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-region-hash.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2003 Sistina Software Limited. + * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * + * Device-Mapper dirty region hash interface. + * + * This file is released under the GPL. + */ + +#ifndef DM_REGION_HASH_H +#define DM_REGION_HASH_H + +#include + +/*----------------------------------------------------------------- + * Region hash + *----------------------------------------------------------------*/ +struct dm_region_hash; +struct dm_region; + +/* + * States a region can have. + */ +enum dm_rh_region_states { + DM_RH_CLEAN = 0x01, /* No writes in flight. */ + DM_RH_DIRTY = 0x02, /* Writes in flight. */ + DM_RH_NOSYNC = 0x04, /* Out of sync. */ + DM_RH_RECOVERING = 0x08, /* Under resynchronization. */ +}; + +/* + * Region hash create/destroy. + */ +struct bio_list; +struct dm_region_hash *dm_region_hash_create( + void *context, void (*dispatch_bios)(void *context, + struct bio_list *bios), + void (*wakeup_workers)(void *context), + void (*wakeup_all_recovery_waiters)(void *context), + sector_t target_begin, unsigned max_recovery, + struct dm_dirty_log *log, uint32_t region_size, + region_t nr_regions); +void dm_region_hash_destroy(struct dm_region_hash *rh); + +struct dm_dirty_log *dm_rh_dirty_log(struct dm_region_hash *rh); + +/* + * Conversion functions. + */ +region_t dm_rh_bio_to_region(struct dm_region_hash *rh, struct bio *bio); +sector_t dm_rh_region_to_sector(struct dm_region_hash *rh, region_t region); +region_t dm_rh_sector_to_region(struct dm_region_hash *rh, sector_t sector); +void *dm_rh_region_context(struct dm_region *reg); + +/* + * Get region size and key (ie. number of the region). + */ +sector_t dm_rh_get_region_size(struct dm_region_hash *rh); +region_t dm_rh_get_region_key(struct dm_region *reg); + +/* + * Get/set/update region state (and dirty log). + * + */ +int dm_rh_get_state(struct dm_region_hash *rh, region_t region, int may_block); +void dm_rh_set_state(struct dm_region_hash *rh, region_t region, + enum dm_rh_region_states state, int may_block); + +/* Non-zero errors_handled leaves the state of the region NOSYNC */ +void dm_rh_update_states(struct dm_region_hash *rh, int errors_handled); + +/* Flush the region hash and dirty log. */ +int dm_rh_flush(struct dm_region_hash *rh); + +/* Inc/dec pending count on regions. */ +void dm_rh_inc(struct dm_region_hash *rh, region_t region); +void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios); +void dm_rh_dec(struct dm_region_hash *rh, region_t region); + +/* Delay bios on regions. */ +void dm_rh_delay(struct dm_region_hash *rh, struct bio *bio); +void dm_rh_delay_by_region(struct dm_region_hash *rh, struct bio *bio, + region_t region); + +void dm_rh_mark_nosync(struct dm_region_hash *rh, + struct bio *bio, unsigned done, int error); + +/* + * Region recovery control. + */ + +/* Prepare some regions for recovery by starting to quiesce them. */ +void dm_rh_recovery_prepare(struct dm_region_hash *rh); + +/* Try fetching a quiesced region for recovery. */ +struct dm_region *dm_rh_recovery_start(struct dm_region_hash *rh); + +/* Report recovery end on a region. */ +void dm_rh_recovery_end(struct dm_region *reg, int error); + +/* Returns number of regions with recovery work outstanding. */ +int dm_rh_recovery_in_flight(struct dm_region_hash *rh); + +/* Start/stop recovery. */ +void dm_rh_start_recovery(struct dm_region_hash *rh); +void dm_rh_stop_recovery(struct dm_region_hash *rh); + +#endif /* DM_REGION_HASH_H */ --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-memcache.h +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-memcache.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * Device-mapper memory object handling: + * + * o allocate/free total_pages in a per client page pool. + * + * o allocate/free memory objects with chunks (1..n) of + * pages_per_chunk pages hanging off. + * + * This file is released under the GPL. + */ + +#ifndef _DM_MEM_CACHE_H +#define _DM_MEM_CACHE_H + +#define DM_MEM_CACHE_H_VERSION "0.1" + +#include "dm.h" +#include + +static inline struct page_list *pl_elem(struct page_list *pl, unsigned p) +{ + while (pl && p--) + pl = pl->next; + + return pl; +} + +struct dm_mem_cache_object { + struct page_list *pl; /* Dynamically allocated array */ + void *private; /* Caller context reference */ +}; + +struct dm_mem_cache_client; + +/* + * Create/destroy dm memory cache client resources. + * + * On creation, a number of @objects with @chunks of + * @pages_per_chunk pages will be allocated. + */ +struct dm_mem_cache_client * +dm_mem_cache_client_create(unsigned objects, unsigned chunks, + unsigned pages_per_chunk); +void dm_mem_cache_client_destroy(struct dm_mem_cache_client *client); + +/* + * Grow/shrink a dm memory cache client resources + * by @objetcs amount of objects. + */ +int dm_mem_cache_grow(struct dm_mem_cache_client *client, unsigned objects); +int dm_mem_cache_shrink(struct dm_mem_cache_client *client, unsigned objects); + +/* + * Allocate/free a memory object + * + * On allocation one object with an amount of chunks and + * an amount of pages per chunk will be returned on success. + */ +struct dm_mem_cache_object * +dm_mem_cache_alloc(struct dm_mem_cache_client *client); +void dm_mem_cache_free(struct dm_mem_cache_client *client, + struct dm_mem_cache_object *object); + +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-message.c +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-message.c @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2007,2008 Red Hat Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * General device-mapper message interface argument parser. + * + * This file is released under the GPL. + * + * device-mapper message parser. + * + */ + +#include "dm.h" +#include "dm-message.h" +#include +#include + +#define DM_MSG_PREFIX "dm_message" + +/* Basename of a path. */ +static inline char * +basename(char *s) +{ + char *p = strrchr(s, '/'); + + return p ? p + 1 : s; +} + +/* Get an argument depending on type. */ +static void +message_arguments(struct dm_msg *msg, int argc, char **argv) +{ + + if (argc) { + int i; + struct dm_message_argument *args = msg->spec->args; + + for (i = 0; i < args->num_args; i++) { + int r; + unsigned long **ptr = args->ptr; + enum dm_message_argument_type type = args->types[i]; + + switch (type) { + case dm_msg_base_t: + ((char **) ptr)[i] = basename(argv[i]); + break; + + case dm_msg_str_t: + ((char **) ptr)[i] = argv[i]; + break; + + case dm_msg_int_t: + r = sscanf(argv[i], "%d", ((int **) ptr)[i]); + goto check; + + case dm_msg_uint_t: + r = sscanf(argv[i], "%u", + ((unsigned **) ptr)[i]); + goto check; + + case dm_msg_uint64_t: + r = sscanf(argv[i], "%llu", + ((unsigned long long **) ptr)[i]); + +check: + if (r != 1) { + set_bit(dm_msg_ret_undef, &msg->ret); + set_bit(dm_msg_ret_arg, &msg->ret); + } + } + } + } +} + +/* Parse message options. */ +static void +message_options_parse(struct dm_msg *msg, int argc, char **argv) +{ + int hit = 0; + unsigned long *action; + size_t l1 = strlen(*argv), l_hit = 0; + struct dm_message_option *o = msg->spec->options; + char **option, **option_end = o->options + o->num_options; + + for (option = o->options, action = o->actions; + option < option_end; option++, action++) { + size_t l2 = strlen(*option); + + if (!strnicmp(*argv, *option, min(l1, l2))) { + hit++; + l_hit = l2; + set_bit(*action, &msg->action); + } + } + + /* Assume error. */ + msg->ret = 0; + set_bit(dm_msg_ret_option, &msg->ret); + if (!hit || l1 > l_hit) + set_bit(dm_msg_ret_undef, &msg->ret); /* Undefined option. */ + else if (hit > 1) + set_bit(dm_msg_ret_ambiguous, &msg->ret); /* Ambiguous option.*/ + else { + clear_bit(dm_msg_ret_option, &msg->ret); /* Option OK. */ + message_arguments(msg, --argc, ++argv); + } +} + +static inline void +print_ret(const char *caller, unsigned long ret) +{ + struct { + unsigned long err; + const char *err_str; + } static err_msg[] = { + { dm_msg_ret_ambiguous, "message ambiguous" }, + { dm_msg_ret_inval, "message invalid" }, + { dm_msg_ret_undef, "message undefined" }, + { dm_msg_ret_arg, "message argument" }, + { dm_msg_ret_argcount, "message argument count" }, + { dm_msg_ret_option, "option" }, + }, *e = ARRAY_END(err_msg); + + while (e-- > err_msg) { + if (test_bit(e->err, &ret)) + DMERR("%s %s", caller, e->err_str); + } +} + +/* Parse a message action. */ +int +dm_message_parse(const char *caller, struct dm_msg *msg, void *context, + int argc, char **argv) +{ + int hit = 0; + size_t l1, l_hit = 0; + struct dm_msg_spec *s, *s_hit = NULL, + *s_end = msg->specs + msg->num_specs; + + if (argc < 2) + return -EINVAL; + + l1 = strlen(*argv); + for (s = msg->specs; s < s_end; s++) { + size_t l2 = strlen(s->cmd); + + if (!strnicmp(*argv, s->cmd, min(l1, l2))) { + hit++; + l_hit = l2; + s_hit = s; + } + } + + msg->ret = 0; + if (!hit || l1 > l_hit) /* No hit or message string too long. */ + set_bit(dm_msg_ret_undef, &msg->ret); + else if (hit > 1) /* Ambiguous message. */ + set_bit(dm_msg_ret_ambiguous, &msg->ret); + else if (argc - 2 != s_hit->args->num_args) { + set_bit(dm_msg_ret_undef, &msg->ret); + set_bit(dm_msg_ret_argcount, &msg->ret); + } + + if (msg->ret) + goto bad; + + msg->action = 0; + msg->spec = s_hit; + set_bit(s_hit->action, &msg->action); + message_options_parse(msg, --argc, ++argv); + + if (!msg->ret) + return msg->spec->f(msg, context); + +bad: + print_ret(caller, msg->ret); + return -EINVAL; +} +EXPORT_SYMBOL(dm_message_parse); + +MODULE_DESCRIPTION(DM_NAME " device-mapper target message parser"); +MODULE_AUTHOR("Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/Makefile +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/Makefile @@ -0,0 +1,4 @@ +EXTRA_CFLAGS += -I$(srctree)/drivers/md + +obj-$(CONFIG_DM_RAID45) := dm-raid45.o +dm-raid45-objs := dm-raid4-5.o dm-memcache.o dm-region-hash.o dm-message.o --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-memcache.c +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-memcache.c @@ -0,0 +1,303 @@ +/* + * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * Device-mapper memory object handling: + * + * o allocate/free total_pages in a per client page pool. + * + * o allocate/free memory objects with chunks (1..n) of + * pages_per_chunk pages hanging off. + * + * This file is released under the GPL. + */ + +#define DM_MEM_CACHE_VERSION "0.2" + +#include "dm.h" +#include "dm-memcache.h" +#include +#include +#include + +struct dm_mem_cache_client { + spinlock_t lock; + mempool_t *objs_pool; + struct page_list *free_list; + unsigned objects; + unsigned chunks; + unsigned pages_per_chunk; + unsigned free_pages; + unsigned total_pages; +}; + +/* + * Free pages and page_list elements of client. + */ +static void free_cache_pages(struct page_list *list) +{ + while (list) { + struct page_list *pl = list; + + list = pl->next; + BUG_ON(!pl->page); + __free_page(pl->page); + kfree(pl); + } +} + +/* + * Alloc number of pages and page_list elements as required by client. + */ +static struct page_list *alloc_cache_pages(unsigned pages) +{ + struct page_list *pl, *ret = NULL; + struct page *page; + + while (pages--) { + page = alloc_page(GFP_NOIO); + if (!page) + goto err; + + pl = kmalloc(sizeof(*pl), GFP_NOIO); + if (!pl) { + __free_page(page); + goto err; + } + + pl->page = page; + pl->next = ret; + ret = pl; + } + + return ret; + +err: + free_cache_pages(ret); + return NULL; +} + +/* + * Allocate page_list elements from the pool to chunks of the memory object. + */ +static void alloc_chunks(struct dm_mem_cache_client *cl, + struct dm_mem_cache_object *obj) +{ + unsigned chunks = cl->chunks; + unsigned long flags; + + local_irq_save(flags); + local_irq_disable(); + while (chunks--) { + unsigned p = cl->pages_per_chunk; + + obj[chunks].pl = NULL; + + while (p--) { + struct page_list *pl; + + /* Take next element from free list */ + spin_lock(&cl->lock); + pl = cl->free_list; + BUG_ON(!pl); + cl->free_list = pl->next; + spin_unlock(&cl->lock); + + pl->next = obj[chunks].pl; + obj[chunks].pl = pl; + } + } + + local_irq_restore(flags); +} + +/* + * Free page_list elements putting them back onto free list + */ +static void free_chunks(struct dm_mem_cache_client *cl, + struct dm_mem_cache_object *obj) +{ + unsigned chunks = cl->chunks; + unsigned long flags; + struct page_list *next, *pl; + + local_irq_save(flags); + local_irq_disable(); + while (chunks--) { + for (pl = obj[chunks].pl; pl; pl = next) { + next = pl->next; + + spin_lock(&cl->lock); + pl->next = cl->free_list; + cl->free_list = pl; + cl->free_pages++; + spin_unlock(&cl->lock); + } + } + + local_irq_restore(flags); +} + +/* + * Create/destroy dm memory cache client resources. + */ +struct dm_mem_cache_client * +dm_mem_cache_client_create(unsigned objects, unsigned chunks, + unsigned pages_per_chunk) +{ + unsigned total_pages = objects * chunks * pages_per_chunk; + struct dm_mem_cache_client *client; + + BUG_ON(!total_pages); + client = kzalloc(sizeof(*client), GFP_KERNEL); + if (!client) + return ERR_PTR(-ENOMEM); + + client->objs_pool = mempool_create_kmalloc_pool(objects, + chunks * sizeof(struct dm_mem_cache_object)); + if (!client->objs_pool) + goto err; + + client->free_list = alloc_cache_pages(total_pages); + if (!client->free_list) + goto err1; + + spin_lock_init(&client->lock); + client->objects = objects; + client->chunks = chunks; + client->pages_per_chunk = pages_per_chunk; + client->free_pages = client->total_pages = total_pages; + return client; + +err1: + mempool_destroy(client->objs_pool); +err: + kfree(client); + return ERR_PTR(-ENOMEM); +} +EXPORT_SYMBOL(dm_mem_cache_client_create); + +void dm_mem_cache_client_destroy(struct dm_mem_cache_client *cl) +{ + BUG_ON(cl->free_pages != cl->total_pages); + free_cache_pages(cl->free_list); + mempool_destroy(cl->objs_pool); + kfree(cl); +} +EXPORT_SYMBOL(dm_mem_cache_client_destroy); + +/* + * Grow a clients cache by an amount of pages. + * + * Don't call from interrupt context! + */ +int dm_mem_cache_grow(struct dm_mem_cache_client *cl, unsigned objects) +{ + unsigned pages = objects * cl->chunks * cl->pages_per_chunk; + struct page_list *pl, *last; + + BUG_ON(!pages); + pl = alloc_cache_pages(pages); + if (!pl) + return -ENOMEM; + + last = pl; + while (last->next) + last = last->next; + + spin_lock_irq(&cl->lock); + last->next = cl->free_list; + cl->free_list = pl; + cl->free_pages += pages; + cl->total_pages += pages; + cl->objects++; + spin_unlock_irq(&cl->lock); + + mempool_resize(cl->objs_pool, cl->objects, GFP_NOIO); + return 0; +} +EXPORT_SYMBOL(dm_mem_cache_grow); + +/* Shrink a clients cache by an amount of pages */ +int dm_mem_cache_shrink(struct dm_mem_cache_client *cl, unsigned objects) +{ + int r; + unsigned pages = objects * cl->chunks * cl->pages_per_chunk, p = pages; + unsigned long flags; + struct page_list *last = NULL, *pl, *pos; + + BUG_ON(!pages); + + spin_lock_irqsave(&cl->lock, flags); + pl = pos = cl->free_list; + while (p-- && pos->next) { + last = pos; + pos = pos->next; + } + + if (++p) + r = -ENOMEM; + else { + r = 0; + cl->free_list = pos; + cl->free_pages -= pages; + cl->total_pages -= pages; + cl->objects--; + last->next = NULL; + } + spin_unlock_irqrestore(&cl->lock, flags); + + if (!r) { + free_cache_pages(pl); + mempool_resize(cl->objs_pool, cl->objects, GFP_NOIO); + } + + return r; +} +EXPORT_SYMBOL(dm_mem_cache_shrink); + +/* + * Allocate/free a memory object + * + * Can be called from interrupt context + */ +struct dm_mem_cache_object *dm_mem_cache_alloc(struct dm_mem_cache_client *cl) +{ + int r = 0; + unsigned pages = cl->chunks * cl->pages_per_chunk; + unsigned long flags; + struct dm_mem_cache_object *obj; + + obj = mempool_alloc(cl->objs_pool, GFP_NOIO); + if (!obj) + return ERR_PTR(-ENOMEM); + + spin_lock_irqsave(&cl->lock, flags); + if (pages > cl->free_pages) + r = -ENOMEM; + else + cl->free_pages -= pages; + spin_unlock_irqrestore(&cl->lock, flags); + + if (r) { + mempool_free(obj, cl->objs_pool); + return ERR_PTR(r); + } + + alloc_chunks(cl, obj); + return obj; +} +EXPORT_SYMBOL(dm_mem_cache_alloc); + +void dm_mem_cache_free(struct dm_mem_cache_client *cl, + struct dm_mem_cache_object *obj) +{ + free_chunks(cl, obj); + mempool_free(obj, cl->objs_pool); +} +EXPORT_SYMBOL(dm_mem_cache_free); + +MODULE_DESCRIPTION(DM_NAME " dm memory cache"); +MODULE_AUTHOR("Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-raid4-5.c +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-raid4-5.c @@ -0,0 +1,4536 @@ +/*[A[A + * Copyright (C) 2005-2009 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * This file is released under the GPL. + * + * + * Linux 2.6 Device Mapper RAID4 and RAID5 target. + * + * Supports: + * o RAID4 with dedicated and selectable parity device + * o RAID5 with rotating parity (left+right, symmetric+asymmetric) + * o recovery of out of sync device for initial + * RAID set creation or after dead drive replacement + * o run time optimization of xor algorithm used to calculate parity + * + * + * Thanks to MD for: + * o the raid address calculation algorithm + * o the base of the biovec <-> page list copier. + * + * + * Uses region hash to keep track of how many writes are in flight to + * regions in order to use dirty log to keep state of regions to recover: + * + * o clean regions (those which are synchronized + * and don't have write io in flight) + * o dirty regions (those with write io in flight) + * + * + * On startup, any dirty regions are migrated to the + * 'nosync' state and are subject to recovery by the daemon. + * + * See raid_ctr() for table definition. + * + * FIXME: recovery bandwidth + */ + +static const char *version = "v0.2594b"; + +#include "dm.h" +#include "dm-memcache.h" +#include "dm-message.h" +#include "dm-raid45.h" + +#include +#include +#include + +#include +#include +#include +#include "dm-region-hash.h" + +#include +#include + +/* + * Configurable parameters + */ + +/* Minimum/maximum and default # of selectable stripes. */ +#define STRIPES_MIN 8 +#define STRIPES_MAX 16384 +#define STRIPES_DEFAULT 80 + +/* Maximum and default chunk size in sectors if not set in constructor. */ +#define CHUNK_SIZE_MIN 8 +#define CHUNK_SIZE_MAX 16384 +#define CHUNK_SIZE_DEFAULT 64 + +/* Default io size in sectors if not set in constructor. */ +#define IO_SIZE_MIN CHUNK_SIZE_MIN +#define IO_SIZE_DEFAULT IO_SIZE_MIN + +/* Recover io size default in sectors. */ +#define RECOVER_IO_SIZE_MIN 64 +#define RECOVER_IO_SIZE_DEFAULT 256 + +/* Default, minimum and maximum percentage of recover io bandwidth. */ +#define BANDWIDTH_DEFAULT 10 +#define BANDWIDTH_MIN 1 +#define BANDWIDTH_MAX 100 + +/* # of parallel recovered regions */ +#define RECOVERY_STRIPES_MIN 1 +#define RECOVERY_STRIPES_MAX 64 +#define RECOVERY_STRIPES_DEFAULT RECOVERY_STRIPES_MIN +/* + * END Configurable parameters + */ + +#define TARGET "dm-raid45" +#define DAEMON "kraid45d" +#define DM_MSG_PREFIX TARGET + +#define SECTORS_PER_PAGE (PAGE_SIZE >> SECTOR_SHIFT) + +/* Amount/size for __xor(). */ +#define XOR_SIZE PAGE_SIZE + +/* Check value in range. */ +#define range_ok(i, min, max) (i >= min && i <= max) + +/* Check argument is power of 2. */ +#define POWER_OF_2(a) (!(a & (a - 1))) + +/* Structure access macros. */ +/* Derive raid_set from stripe_cache pointer. */ +#define RS(x) container_of(x, struct raid_set, sc) + +/* Page reference. */ +#define PAGE(stripe, p) ((stripe)->obj[p].pl->page) + +/* Stripe chunk reference. */ +#define CHUNK(stripe, p) ((stripe)->chunk + p) + +/* Bio list reference. */ +#define BL(stripe, p, rw) (stripe->chunk[p].bl + rw) +#define BL_CHUNK(chunk, rw) (chunk->bl + rw) + +/* Page list reference. */ +#define PL(stripe, p) (stripe->obj[p].pl) +/* END: structure access macros. */ + +/* Factor out to dm-bio-list.h */ +static inline void bio_list_push(struct bio_list *bl, struct bio *bio) +{ + bio->bi_next = bl->head; + bl->head = bio; + + if (!bl->tail) + bl->tail = bio; +} + +/* Factor out to dm.h */ +#define TI_ERR_RET(str, ret) \ + do { ti->error = str; return ret; } while (0); +#define TI_ERR(str) TI_ERR_RET(str, -EINVAL) + +/* Macro to define access IO flags access inline functions. */ +#define BITOPS(name, what, var, flag) \ +static inline int TestClear ## name ## what(struct var *v) \ +{ return test_and_clear_bit(flag, &v->io.flags); } \ +static inline int TestSet ## name ## what(struct var *v) \ +{ return test_and_set_bit(flag, &v->io.flags); } \ +static inline void Clear ## name ## what(struct var *v) \ +{ clear_bit(flag, &v->io.flags); } \ +static inline void Set ## name ## what(struct var *v) \ +{ set_bit(flag, &v->io.flags); } \ +static inline int name ## what(struct var *v) \ +{ return test_bit(flag, &v->io.flags); } + +/*----------------------------------------------------------------- + * Stripe cache + * + * Cache for all reads and writes to raid sets (operational or degraded) + * + * We need to run all data to and from a RAID set through this cache, + * because parity chunks need to get calculated from data chunks + * or, in the degraded/resynchronization case, missing chunks need + * to be reconstructed using the other chunks of the stripe. + *---------------------------------------------------------------*/ +/* A chunk within a stripe (holds bios hanging off). */ +/* IO status flags for chunks of a stripe. */ +enum chunk_flags { + CHUNK_DIRTY, /* Pages of chunk dirty; need writing. */ + CHUNK_ERROR, /* IO error on any chunk page. */ + CHUNK_IO, /* Allow/prohibit IO on chunk pages. */ + CHUNK_LOCKED, /* Chunk pages locked during IO. */ + CHUNK_MUST_IO, /* Chunk must io. */ + CHUNK_UNLOCK, /* Enforce chunk unlock. */ + CHUNK_UPTODATE, /* Chunk pages are uptodate. */ +}; + +/* + * This does not work anymore with __REQ_* values being enums + * +#if READ != 0 || WRITE != 1 +#error dm-raid45: READ/WRITE != 0/1 used as index!!! +#endif +*/ + +enum bl_type { + WRITE_QUEUED = WRITE + 1, + WRITE_MERGED, + NR_BL_TYPES, /* Must be last one! */ +}; +struct stripe_chunk { + atomic_t cnt; /* Reference count. */ + struct stripe *stripe; /* Backpointer to stripe for endio(). */ + /* Bio lists for reads, writes, and writes merged. */ + struct bio_list bl[NR_BL_TYPES]; + struct { + unsigned long flags; /* IO status flags. */ + } io; +}; + +/* Define chunk bit operations. */ +BITOPS(Chunk, Dirty, stripe_chunk, CHUNK_DIRTY) +BITOPS(Chunk, Error, stripe_chunk, CHUNK_ERROR) +BITOPS(Chunk, Io, stripe_chunk, CHUNK_IO) +BITOPS(Chunk, Locked, stripe_chunk, CHUNK_LOCKED) +BITOPS(Chunk, MustIo, stripe_chunk, CHUNK_MUST_IO) +BITOPS(Chunk, Unlock, stripe_chunk, CHUNK_UNLOCK) +BITOPS(Chunk, Uptodate, stripe_chunk, CHUNK_UPTODATE) + +/* + * Stripe linked list indexes. Keep order, because the stripe + * and the stripe cache rely on the first 3! + */ +enum list_types { + LIST_FLUSH, /* Stripes to flush for io. */ + LIST_ENDIO, /* Stripes to endio. */ + LIST_LRU, /* Least recently used stripes. */ + SC_NR_LISTS, /* # of lists in stripe cache. */ + LIST_HASH = SC_NR_LISTS, /* Hashed stripes. */ + LIST_RECOVER = LIST_HASH, /* For recovery type stripes only. */ + STRIPE_NR_LISTS,/* To size array in struct stripe. */ +}; + +/* Adressing region recovery. */ +struct recover_addr { + struct dm_region *reg; /* Actual region to recover. */ + sector_t pos; /* Position within region to recover. */ + sector_t end; /* End of region to recover. */ +}; + +/* A stripe: the io object to handle all reads and writes to a RAID set. */ +struct stripe { + atomic_t cnt; /* Reference count. */ + struct stripe_cache *sc; /* Backpointer to stripe cache. */ + + /* + * 4 linked lists: + * o io list to flush io + * o endio list + * o LRU list to put stripes w/o reference count on + * o stripe cache hash + */ + struct list_head lists[STRIPE_NR_LISTS]; + + sector_t key; /* Hash key. */ + region_t region; /* Region stripe is mapped to. */ + + struct { + unsigned long flags; /* Stripe state flags (see below). */ + + /* + * Pending ios in flight: + * + * used to control move of stripe to endio list + */ + atomic_t pending; + + /* Sectors to read and write for multi page stripe sets. */ + unsigned size; + } io; + + /* Address region recovery. */ + struct recover_addr *recover; + + /* Lock on stripe (Future: for clustering). */ + void *lock; + + struct { + unsigned short parity; /* Parity chunk index. */ + short recover; /* Recovery chunk index. */ + } idx; + + /* + * This stripe's memory cache object (dm-mem-cache); + * i.e. the io chunk pages. + */ + struct dm_mem_cache_object *obj; + + /* Array of stripe sets (dynamically allocated). */ + struct stripe_chunk chunk[0]; +}; + +/* States stripes can be in (flags field). */ +enum stripe_states { + STRIPE_ERROR, /* io error on stripe. */ + STRIPE_MERGED, /* Writes got merged to be written. */ + STRIPE_RBW, /* Read-before-write stripe. */ + STRIPE_RECONSTRUCT, /* Reconstruct of a missing chunk required. */ + STRIPE_RECONSTRUCTED, /* Reconstructed of a missing chunk. */ + STRIPE_RECOVER, /* Stripe used for RAID set recovery. */ +}; + +/* Define stripe bit operations. */ +BITOPS(Stripe, Error, stripe, STRIPE_ERROR) +BITOPS(Stripe, Merged, stripe, STRIPE_MERGED) +BITOPS(Stripe, RBW, stripe, STRIPE_RBW) +BITOPS(Stripe, Reconstruct, stripe, STRIPE_RECONSTRUCT) +BITOPS(Stripe, Reconstructed, stripe, STRIPE_RECONSTRUCTED) +BITOPS(Stripe, Recover, stripe, STRIPE_RECOVER) + +/* A stripe hash. */ +struct stripe_hash { + struct list_head *hash; + unsigned buckets; + unsigned mask; + unsigned prime; + unsigned shift; +}; + +enum sc_lock_types { + LOCK_ENDIO, /* Protect endio list. */ + LOCK_LRU, /* Protect LRU list. */ + NR_LOCKS, /* To size array in struct stripe_cache. */ +}; + +/* A stripe cache. */ +struct stripe_cache { + /* Stripe hash. */ + struct stripe_hash hash; + + spinlock_t locks[NR_LOCKS]; /* Locks to protect lists. */ + + /* Stripes with io to flush, stripes to endio and LRU lists. */ + struct list_head lists[SC_NR_LISTS]; + + /* Slab cache to allocate stripes from. */ + struct { + struct kmem_cache *cache; /* Cache itself. */ + char name[32]; /* Unique name. */ + } kc; + + struct dm_io_client *dm_io_client; /* dm-io client resource context. */ + + /* dm-mem-cache client resource context. */ + struct dm_mem_cache_client *mem_cache_client; + + int stripes_parm; /* # stripes parameter from constructor. */ + atomic_t stripes; /* actual # of stripes in cache. */ + atomic_t stripes_to_set; /* # of stripes to resize cache to. */ + atomic_t stripes_last; /* last # of stripes in cache. */ + atomic_t active_stripes; /* actual # of active stripes in cache. */ + + /* REMOVEME: */ + atomic_t active_stripes_max; /* actual # of active stripes in cache. */ +}; + +/* Flag specs for raid_dev */ ; +enum raid_dev_flags { + DEV_FAILED, /* Device failed. */ + DEV_IO_QUEUED, /* Io got queued to device. */ +}; + +/* The raid device in a set. */ +struct raid_dev { + struct dm_dev *dev; + sector_t start; /* Offset to map to. */ + struct { /* Using struct to be able to BITOPS(). */ + unsigned long flags; /* raid_dev_flags. */ + } io; +}; + +BITOPS(Dev, Failed, raid_dev, DEV_FAILED) +BITOPS(Dev, IoQueued, raid_dev, DEV_IO_QUEUED) + +/* Flags spec for raid_set. */ +enum raid_set_flags { + RS_CHECK_OVERWRITE, /* Check for chunk overwrites. */ + RS_DEAD, /* RAID set inoperational. */ + RS_DEGRADED, /* Io errors on RAID device. */ + RS_DEVEL_STATS, /* REMOVEME: display status information. */ + RS_RECOVER, /* Do recovery. */ + RS_RECOVERY_BANDWIDTH, /* Allow recovery bandwidth (delayed bios). */ + RS_SC_BUSY, /* Stripe cache busy -> send an event. */ + RS_SUSPEND, /* Suspend RAID set. */ +}; + +/* REMOVEME: devel stats counters. */ +enum stats_types { + S_BIOS_READ, + S_BIOS_ADDED_READ, + S_BIOS_ENDIO_READ, + S_BIOS_WRITE, + S_BIOS_ADDED_WRITE, + S_BIOS_ENDIO_WRITE, + S_CAN_MERGE, + S_CANT_MERGE, + S_CONGESTED, + S_DM_IO_READ, + S_DM_IO_WRITE, + S_BANDWIDTH, + S_BARRIER, + S_BIO_COPY_PL_NEXT, + S_DEGRADED, + S_DELAYED_BIOS, + S_FLUSHS, + S_HITS_1ST, + S_IOS_POST, + S_INSCACHE, + S_MAX_LOOKUP, + S_CHUNK_LOCKED, + S_NO_BANDWIDTH, + S_NOT_CONGESTED, + S_NO_RW, + S_NOSYNC, + S_OVERWRITE, + S_PROHIBITCHUNKIO, + S_RECONSTRUCT_EI, + S_RECONSTRUCT_DEV, + S_RECONSTRUCT_SET, + S_RECONSTRUCTED, + S_REQUEUE, + S_STRIPE_ERROR, + S_SUM_DELAYED_BIOS, + S_XORS, + S_NR_STATS, /* # of stats counters. Must be last! */ +}; + +/* Status type -> string mappings. */ +struct stats_map { + const enum stats_types type; + const char *str; +}; + +static struct stats_map stats_map[] = { + { S_BIOS_READ, "r=" }, + { S_BIOS_ADDED_READ, "/" }, + { S_BIOS_ENDIO_READ, "/" }, + { S_BIOS_WRITE, " w=" }, + { S_BIOS_ADDED_WRITE, "/" }, + { S_BIOS_ENDIO_WRITE, "/" }, + { S_DM_IO_READ, " rc=" }, + { S_DM_IO_WRITE, " wc=" }, + { S_BANDWIDTH, "\nbw=" }, + { S_NO_BANDWIDTH, " no_bw=" }, + { S_BARRIER, "\nbarrier=" }, + { S_BIO_COPY_PL_NEXT, "\nbio_cp_next=" }, + { S_CAN_MERGE, "\nmerge=" }, + { S_CANT_MERGE, "/no_merge=" }, + { S_CHUNK_LOCKED, "\nchunk_locked=" }, + { S_CONGESTED, "\ncgst=" }, + { S_NOT_CONGESTED, "/not_cgst=" }, + { S_DEGRADED, "\ndegraded=" }, + { S_DELAYED_BIOS, "\ndel_bios=" }, + { S_SUM_DELAYED_BIOS, "/sum_del_bios=" }, + { S_FLUSHS, "\nflushs=" }, + { S_HITS_1ST, "\nhits_1st=" }, + { S_IOS_POST, " ios_post=" }, + { S_INSCACHE, " inscache=" }, + { S_MAX_LOOKUP, " maxlookup=" }, + { S_NO_RW, "\nno_rw=" }, + { S_NOSYNC, " nosync=" }, + { S_OVERWRITE, " ovr=" }, + { S_PROHIBITCHUNKIO, " prhbt_io=" }, + { S_RECONSTRUCT_EI, "\nrec_ei=" }, + { S_RECONSTRUCT_DEV, " rec_dev=" }, + { S_RECONSTRUCT_SET, " rec_set=" }, + { S_RECONSTRUCTED, " rec=" }, + { S_REQUEUE, " requeue=" }, + { S_STRIPE_ERROR, " stripe_err=" }, + { S_XORS, " xors=" }, +}; + +/* + * A RAID set. + */ +#define dm_rh_client dm_region_hash +enum count_type { IO_WORK = 0, IO_RECOVER, IO_NR_COUNT }; +typedef void (*xor_function_t)(unsigned count, unsigned long **data); +struct raid_set { + struct dm_target *ti; /* Target pointer. */ + + struct { + unsigned long flags; /* State flags. */ + struct mutex in_lock; /* Protects central input list below. */ + struct bio_list in; /* Pending ios (central input list). */ + struct bio_list work; /* ios work set. */ + wait_queue_head_t suspendq; /* suspend synchronization. */ + atomic_t in_process; /* counter of queued bios (suspendq). */ + atomic_t in_process_max;/* counter of queued bios max. */ + + /* io work. */ + struct workqueue_struct *wq; + struct delayed_work dws_do_raid; /* For main worker. */ + struct work_struct ws_do_table_event; /* For event worker. */ + } io; + + /* Stripe locking abstraction. */ + struct dm_raid45_locking_type *locking; + + struct stripe_cache sc; /* Stripe cache for this set. */ + + /* Xor optimization. */ + struct { + struct xor_func *f; + unsigned chunks; + unsigned speed; + } xor; + + /* Recovery parameters. */ + struct recover { + struct dm_dirty_log *dl; /* Dirty log. */ + struct dm_rh_client *rh; /* Region hash. */ + + struct dm_io_client *dm_io_client; /* recovery dm-io client. */ + /* dm-mem-cache client resource context for recovery stripes. */ + struct dm_mem_cache_client *mem_cache_client; + + struct list_head stripes; /* List of recovery stripes. */ + + region_t nr_regions; + region_t nr_regions_to_recover; + region_t nr_regions_recovered; + unsigned long start_jiffies; + unsigned long end_jiffies; + + unsigned bandwidth; /* Recovery bandwidth [%]. */ + unsigned bandwidth_work; /* Recovery bandwidth [factor]. */ + unsigned bandwidth_parm; /* " constructor parm. */ + unsigned io_size; /* recovery io size <= region size. */ + unsigned io_size_parm; /* recovery io size ctr parameter. */ + unsigned recovery; /* Recovery allowed/prohibited. */ + unsigned recovery_stripes; /* # of parallel recovery stripes. */ + + /* recovery io throttling. */ + atomic_t io_count[IO_NR_COUNT]; /* counter recover/regular io.*/ + unsigned long last_jiffies; + } recover; + + /* RAID set parameters. */ + struct { + struct raid_type *raid_type; /* RAID type (eg, RAID4). */ + unsigned raid_parms; /* # variable raid parameters. */ + + unsigned chunk_size; /* Sectors per chunk. */ + unsigned chunk_size_parm; + unsigned chunk_shift; /* rsector chunk size shift. */ + + unsigned io_size; /* Sectors per io. */ + unsigned io_size_parm; + unsigned io_mask; /* Mask for bio_copy_page_list(). */ + unsigned io_inv_mask; /* Mask for raid_address(). */ + + sector_t sectors_per_dev; /* Sectors per device. */ + + atomic_t failed_devs; /* Amount of devices failed. */ + + /* Index of device to initialize. */ + int dev_to_init; + int dev_to_init_parm; + + /* Raid devices dynamically allocated. */ + unsigned raid_devs; /* # of RAID devices below. */ + unsigned data_devs; /* # of RAID data devices. */ + + int ei; /* index of failed RAID device. */ + + /* Index of dedicated parity device (i.e. RAID4). */ + int pi; + int pi_parm; /* constructor parm for status output. */ + } set; + + /* REMOVEME: devel stats counters. */ + atomic_t stats[S_NR_STATS]; + + /* Dynamically allocated temporary pointers for xor(). */ + unsigned long **data; + + /* Dynamically allocated RAID devices. Alignment? */ + struct raid_dev dev[0]; +}; + +/* Define RAID set bit operations. */ +BITOPS(RS, Bandwidth, raid_set, RS_RECOVERY_BANDWIDTH) +BITOPS(RS, CheckOverwrite, raid_set, RS_CHECK_OVERWRITE) +BITOPS(RS, Dead, raid_set, RS_DEAD) +BITOPS(RS, Degraded, raid_set, RS_DEGRADED) +BITOPS(RS, DevelStats, raid_set, RS_DEVEL_STATS) +BITOPS(RS, Recover, raid_set, RS_RECOVER) +BITOPS(RS, ScBusy, raid_set, RS_SC_BUSY) +BITOPS(RS, Suspend, raid_set, RS_SUSPEND) +#undef BITOPS + +/*----------------------------------------------------------------- + * Raid-4/5 set structures. + *---------------------------------------------------------------*/ +/* RAID level definitions. */ +enum raid_level { + raid4, + raid5, +}; + +/* Symmetric/Asymmetric, Left/Right parity rotating algorithms. */ +enum raid_algorithm { + none, + left_asym, + right_asym, + left_sym, + right_sym, +}; + +struct raid_type { + const char *name; /* RAID algorithm. */ + const char *descr; /* Descriptor text for logging. */ + const unsigned parity_devs; /* # of parity devices. */ + const unsigned minimal_devs; /* minimal # of devices in set. */ + const enum raid_level level; /* RAID level. */ + const enum raid_algorithm algorithm; /* RAID algorithm. */ +}; + +/* Supported raid types and properties. */ +static struct raid_type raid_types[] = { + {"raid4", "RAID4 (dedicated parity disk)", 1, 3, raid4, none}, + {"raid5_la", "RAID5 (left asymmetric)", 1, 3, raid5, left_asym}, + {"raid5_ra", "RAID5 (right asymmetric)", 1, 3, raid5, right_asym}, + {"raid5_ls", "RAID5 (left symmetric)", 1, 3, raid5, left_sym}, + {"raid5_rs", "RAID5 (right symmetric)", 1, 3, raid5, right_sym}, +}; + +/* Address as calculated by raid_address(). */ +struct raid_address { + sector_t key; /* Hash key (address of stripe % chunk_size). */ + unsigned di, pi; /* Data and parity disks index. */ +}; + +/* REMOVEME: reset statistics counters. */ +static void stats_reset(struct raid_set *rs) +{ + unsigned s = S_NR_STATS; + + while (s--) + atomic_set(rs->stats + s, 0); +} + +/*---------------------------------------------------------------- + * RAID set management routines. + *--------------------------------------------------------------*/ +/* + * Begin small helper functions. + */ +/* No need to be called from region hash indirectly at dm_rh_dec(). */ +static void wake_dummy(void *context) {} + +/* Return # of io reference. */ +static int io_ref(struct raid_set *rs) +{ + return atomic_read(&rs->io.in_process); +} + +/* Get an io reference. */ +static void io_get(struct raid_set *rs) +{ + int p = atomic_inc_return(&rs->io.in_process); + + if (p > atomic_read(&rs->io.in_process_max)) + atomic_set(&rs->io.in_process_max, p); /* REMOVEME: max. */ +} + +/* Put the io reference and conditionally wake io waiters. */ +static void io_put(struct raid_set *rs) +{ + /* Intel: rebuild data corrupter? */ + if (atomic_dec_and_test(&rs->io.in_process)) + wake_up(&rs->io.suspendq); + else + BUG_ON(io_ref(rs) < 0); +} + +/* Wait until all io has been processed. */ +static void wait_ios(struct raid_set *rs) +{ + wait_event(rs->io.suspendq, !io_ref(rs)); +} + +/* Queue (optionally delayed) io work. */ +static void wake_do_raid_delayed(struct raid_set *rs, unsigned long delay) +{ + queue_delayed_work(rs->io.wq, &rs->io.dws_do_raid, delay); +} + +/* Queue io work immediately (called from region hash too). */ +static void wake_do_raid(void *context) +{ + struct raid_set *rs = context; + + queue_work(rs->io.wq, &rs->io.dws_do_raid.work); +} + +/* Calculate device sector offset. */ +static sector_t _sector(struct raid_set *rs, struct bio *bio) +{ + sector_t sector = bio->bi_sector; + + sector_div(sector, rs->set.data_devs); + return sector; +} + +/* Return # of active stripes in stripe cache. */ +static int sc_active(struct stripe_cache *sc) +{ + return atomic_read(&sc->active_stripes); +} + +/* Stripe cache busy indicator. */ +static int sc_busy(struct raid_set *rs) +{ + return sc_active(&rs->sc) > + atomic_read(&rs->sc.stripes) - (STRIPES_MIN / 2); +} + +/* Set chunks states. */ +enum chunk_dirty_type { CLEAN, DIRTY, ERROR }; +static void chunk_set(struct stripe_chunk *chunk, enum chunk_dirty_type type) +{ + switch (type) { + case CLEAN: + ClearChunkDirty(chunk); + break; + case DIRTY: + SetChunkDirty(chunk); + break; + case ERROR: + SetChunkError(chunk); + SetStripeError(chunk->stripe); + return; + default: + BUG(); + } + + SetChunkUptodate(chunk); + SetChunkIo(chunk); + ClearChunkError(chunk); +} + +/* Return region state for a sector. */ +static int region_state(struct raid_set *rs, sector_t sector, + enum dm_rh_region_states state) +{ + struct dm_rh_client *rh = rs->recover.rh; + region_t region = dm_rh_sector_to_region(rh, sector); + + return !!(dm_rh_get_state(rh, region, 1) & state); +} + +/* + * Return true in case a chunk should be read/written + * + * Conditions to read/write: + * o chunk not uptodate + * o chunk dirty + * + * Conditios to avoid io: + * o io already ongoing on chunk + * o io explitely prohibited + */ +static int chunk_io(struct stripe_chunk *chunk) +{ + /* 2nd run optimization (flag set below on first run). */ + if (TestClearChunkMustIo(chunk)) + return 1; + + /* Avoid io if prohibited or a locked chunk. */ + if (!ChunkIo(chunk) || ChunkLocked(chunk)) + return 0; + + if (!ChunkUptodate(chunk) || ChunkDirty(chunk)) { + SetChunkMustIo(chunk); /* 2nd run optimization. */ + return 1; + } + + return 0; +} + +/* Call a function on each chunk needing io unless device failed. */ +static unsigned for_each_io_dev(struct stripe *stripe, + void (*f_io)(struct stripe *stripe, unsigned p)) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p, r = 0; + + for (p = 0; p < rs->set.raid_devs; p++) { + if (chunk_io(CHUNK(stripe, p)) && !DevFailed(rs->dev + p)) { + f_io(stripe, p); + r++; + } + } + + return r; +} + +/* + * Index of device to calculate parity on. + * + * Either the parity device index *or* the selected + * device to init after a spare replacement. + */ +static int dev_for_parity(struct stripe *stripe, int *sync) +{ + struct raid_set *rs = RS(stripe->sc); + int r = region_state(rs, stripe->key, DM_RH_NOSYNC | DM_RH_RECOVERING); + + *sync = !r; + + /* Reconstruct a particular device ?. */ + if (r && rs->set.dev_to_init > -1) + return rs->set.dev_to_init; + else if (rs->set.raid_type->level == raid4) + return rs->set.pi; + else if (!StripeRecover(stripe)) + return stripe->idx.parity; + else + return -1; +} + +/* RAID set congested function. */ +static int rs_congested(void *congested_data, int bdi_bits) +{ + int r; + unsigned p; + struct raid_set *rs = congested_data; + + if (sc_busy(rs) || RSSuspend(rs)) + r = 1; + else for (r = 0, p = rs->set.raid_devs; !r && p--; ) { + /* If any of our component devices are overloaded. */ + struct request_queue *q = bdev_get_queue(rs->dev[p].dev->bdev); + + r |= bdi_congested(&q->backing_dev_info, bdi_bits); + } + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (r ? S_CONGESTED : S_NOT_CONGESTED)); + return r; +} + +/* RAID device degrade check. */ +static void rs_check_degrade_dev(struct raid_set *rs, + struct stripe *stripe, unsigned p) +{ + if (TestSetDevFailed(rs->dev + p)) + return; + + /* Through an event in case of member device errors. */ + if (atomic_inc_return(&rs->set.failed_devs) > + rs->set.raid_type->parity_devs && + !TestSetRSDead(rs)) { + /* Display RAID set dead message once. */ + unsigned p; + char buf[BDEVNAME_SIZE]; + + DMERR("FATAL: too many devices failed -> RAID set broken"); + for (p = 0; p < rs->set.raid_devs; p++) { + if (DevFailed(rs->dev + p)) + DMERR("device /dev/%s failed", + bdevname(rs->dev[p].dev->bdev, buf)); + } + } + + /* Only log the first member error. */ + if (!TestSetRSDegraded(rs)) { + char buf[BDEVNAME_SIZE]; + + /* Store index for recovery. */ + rs->set.ei = p; + DMERR("CRITICAL: %sio error on device /dev/%s " + "in region=%llu; DEGRADING RAID set\n", + stripe ? "" : "FAKED ", + bdevname(rs->dev[p].dev->bdev, buf), + (unsigned long long) (stripe ? stripe->key : 0)); + DMERR("further device error messages suppressed"); + } + + schedule_work(&rs->io.ws_do_table_event); +} + +/* RAID set degrade check. */ +static void rs_check_degrade(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p = rs->set.raid_devs; + + while (p--) { + if (ChunkError(CHUNK(stripe, p))) + rs_check_degrade_dev(rs, stripe, p); + } +} + +/* Lookup a RAID device by name or by major:minor number. */ +static int raid_dev_lookup(struct raid_set *rs, struct raid_dev *dev_lookup) +{ + unsigned p; + struct raid_dev *dev; + + /* + * Must be an incremental loop, because the device array + * can have empty slots still on calls from raid_ctr() + */ + for (dev = rs->dev, p = 0; + dev->dev && p < rs->set.raid_devs; + dev++, p++) { + if (dev_lookup->dev->bdev->bd_dev == dev->dev->bdev->bd_dev) + return p; + } + + return -ENODEV; +} +/* + * End small helper functions. + */ + +/* + * Stripe hash functions + */ +/* Initialize/destroy stripe hash. */ +static int hash_init(struct stripe_hash *hash, unsigned stripes) +{ + unsigned buckets = 2, max_buckets = stripes >> 1; + static unsigned hash_primes[] = { + /* Table of primes for hash_fn/table size optimization. */ + 1, 2, 3, 7, 13, 27, 53, 97, 193, 389, 769, + 1543, 3079, 6151, 12289, 24593, 49157, 98317, + }; + + /* Calculate number of buckets (2^^n <= stripes / 2). */ + while (buckets < max_buckets) + buckets <<= 1; + + /* Allocate stripe hash buckets. */ + hash->hash = vmalloc(buckets * sizeof(*hash->hash)); + if (!hash->hash) + return -ENOMEM; + + hash->buckets = buckets; + hash->mask = buckets - 1; + hash->shift = ffs(buckets); + if (hash->shift > ARRAY_SIZE(hash_primes)) + hash->shift = ARRAY_SIZE(hash_primes) - 1; + + BUG_ON(hash->shift < 2); + hash->prime = hash_primes[hash->shift]; + + /* Initialize buckets. */ + while (buckets--) + INIT_LIST_HEAD(hash->hash + buckets); + return 0; +} + +static void hash_exit(struct stripe_hash *hash) +{ + if (hash->hash) { + vfree(hash->hash); + hash->hash = NULL; + } +} + +static unsigned hash_fn(struct stripe_hash *hash, sector_t key) +{ + return (unsigned) (((key * hash->prime) >> hash->shift) & hash->mask); +} + +static struct list_head *hash_bucket(struct stripe_hash *hash, sector_t key) +{ + return hash->hash + hash_fn(hash, key); +} + +/* Insert an entry into a hash. */ +static void stripe_insert(struct stripe_hash *hash, struct stripe *stripe) +{ + list_add(stripe->lists + LIST_HASH, hash_bucket(hash, stripe->key)); +} + +/* Lookup an entry in the stripe hash. */ +static struct stripe *stripe_lookup(struct stripe_cache *sc, sector_t key) +{ + unsigned look = 0; + struct stripe *stripe; + struct list_head *bucket = hash_bucket(&sc->hash, key); + + list_for_each_entry(stripe, bucket, lists[LIST_HASH]) { + look++; + + if (stripe->key == key) { + /* REMOVEME: statisics. */ + if (look > atomic_read(RS(sc)->stats + S_MAX_LOOKUP)) + atomic_set(RS(sc)->stats + S_MAX_LOOKUP, look); + return stripe; + } + } + + return NULL; +} + +/* Resize the stripe cache hash on size changes. */ +static int sc_hash_resize(struct stripe_cache *sc) +{ + /* Resize indicated ? */ + if (atomic_read(&sc->stripes) != atomic_read(&sc->stripes_last)) { + int r; + struct stripe_hash hash; + + r = hash_init(&hash, atomic_read(&sc->stripes)); + if (r) + return r; + + if (sc->hash.hash) { + unsigned b = sc->hash.buckets; + struct list_head *pos, *tmp; + + /* Walk old buckets and insert into new. */ + while (b--) { + list_for_each_safe(pos, tmp, sc->hash.hash + b) + stripe_insert(&hash, + list_entry(pos, struct stripe, + lists[LIST_HASH])); + } + + } + + hash_exit(&sc->hash); + memcpy(&sc->hash, &hash, sizeof(sc->hash)); + atomic_set(&sc->stripes_last, atomic_read(&sc->stripes)); + } + + return 0; +} +/* End hash stripe hash function. */ + +/* List add, delete, push and pop functions. */ +/* Add stripe to flush list. */ +#define DEL_LIST(lh) \ + if (!list_empty(lh)) \ + list_del_init(lh); + +/* Delete stripe from hash. */ +static void stripe_hash_del(struct stripe *stripe) +{ + DEL_LIST(stripe->lists + LIST_HASH); +} + +/* Return stripe reference count. */ +static inline int stripe_ref(struct stripe *stripe) +{ + return atomic_read(&stripe->cnt); +} + +static void stripe_flush_add(struct stripe *stripe) +{ + struct stripe_cache *sc = stripe->sc; + struct list_head *lh = stripe->lists + LIST_FLUSH; + + if (!StripeReconstruct(stripe) && list_empty(lh)) + list_add_tail(lh, sc->lists + LIST_FLUSH); +} + +/* + * Add stripe to LRU (inactive) list. + * + * Need lock, because of concurrent access from message interface. + */ +static void stripe_lru_add(struct stripe *stripe) +{ + if (!StripeRecover(stripe)) { + unsigned long flags; + struct list_head *lh = stripe->lists + LIST_LRU; + spinlock_t *lock = stripe->sc->locks + LOCK_LRU; + + spin_lock_irqsave(lock, flags); + if (list_empty(lh)) + list_add_tail(lh, stripe->sc->lists + LIST_LRU); + spin_unlock_irqrestore(lock, flags); + } +} + +#define POP_LIST(list) \ + do { \ + if (list_empty(sc->lists + (list))) \ + stripe = NULL; \ + else { \ + stripe = list_first_entry(sc->lists + (list), \ + struct stripe, \ + lists[(list)]); \ + list_del_init(stripe->lists + (list)); \ + } \ + } while (0); + +/* Pop an available stripe off the LRU list. */ +static struct stripe *stripe_lru_pop(struct stripe_cache *sc) +{ + struct stripe *stripe; + spinlock_t *lock = sc->locks + LOCK_LRU; + + spin_lock_irq(lock); + POP_LIST(LIST_LRU); + spin_unlock_irq(lock); + + return stripe; +} + +/* Pop an available stripe off the io list. */ +static struct stripe *stripe_io_pop(struct stripe_cache *sc) +{ + struct stripe *stripe; + + POP_LIST(LIST_FLUSH); + return stripe; +} + +/* Push a stripe safely onto the endio list to be handled by do_endios(). */ +static void stripe_endio_push(struct stripe *stripe) +{ + unsigned long flags; + struct stripe_cache *sc = stripe->sc; + struct list_head *stripe_list = stripe->lists + LIST_ENDIO, + *sc_list = sc->lists + LIST_ENDIO; + spinlock_t *lock = sc->locks + LOCK_ENDIO; + + /* This runs in parallel with do_endios(). */ + spin_lock_irqsave(lock, flags); + if (list_empty(stripe_list)) + list_add_tail(stripe_list, sc_list); + spin_unlock_irqrestore(lock, flags); + + wake_do_raid(RS(sc)); /* Wake myself. */ +} + +/* Pop a stripe off safely off the endio list. */ +static struct stripe *stripe_endio_pop(struct stripe_cache *sc) +{ + struct stripe *stripe; + spinlock_t *lock = sc->locks + LOCK_ENDIO; + + /* This runs in parallel with endio(). */ + spin_lock_irq(lock); + POP_LIST(LIST_ENDIO) + spin_unlock_irq(lock); + return stripe; +} +#undef POP_LIST + +/* + * Stripe cache locking functions + */ +/* Dummy lock function for single host RAID4+5. */ +static void *no_lock(sector_t key, enum dm_lock_type type) +{ + return &no_lock; +} + +/* Dummy unlock function for single host RAID4+5. */ +static void no_unlock(void *lock_handle) +{ +} + +/* No locking (for single host RAID 4+5). */ +static struct dm_raid45_locking_type locking_none = { + .lock = no_lock, + .unlock = no_unlock, +}; + +/* Lock a stripe (for clustering). */ +static int +stripe_lock(struct stripe *stripe, int rw, sector_t key) +{ + stripe->lock = RS(stripe->sc)->locking->lock(key, rw == READ ? DM_RAID45_SHARED : DM_RAID45_EX); + return stripe->lock ? 0 : -EPERM; +} + +/* Unlock a stripe (for clustering). */ +static void stripe_unlock(struct stripe *stripe) +{ + RS(stripe->sc)->locking->unlock(stripe->lock); + stripe->lock = NULL; +} + +/* Test io pending on stripe. */ +static int stripe_io_ref(struct stripe *stripe) +{ + return atomic_read(&stripe->io.pending); +} + +static void stripe_io_get(struct stripe *stripe) +{ + if (atomic_inc_return(&stripe->io.pending) == 1) + /* REMOVEME: statistics */ + atomic_inc(&stripe->sc->active_stripes); + else + BUG_ON(stripe_io_ref(stripe) < 0); +} + +static void stripe_io_put(struct stripe *stripe) +{ + if (atomic_dec_and_test(&stripe->io.pending)) { + if (unlikely(StripeRecover(stripe))) + /* Don't put recovery stripe on endio list. */ + wake_do_raid(RS(stripe->sc)); + else + /* Add regular stripe to endio list and wake daemon. */ + stripe_endio_push(stripe); + + /* REMOVEME: statistics */ + atomic_dec(&stripe->sc->active_stripes); + } else + BUG_ON(stripe_io_ref(stripe) < 0); +} + +/* Take stripe reference out. */ +static int stripe_get(struct stripe *stripe) +{ + int r; + struct list_head *lh = stripe->lists + LIST_LRU; + spinlock_t *lock = stripe->sc->locks + LOCK_LRU; + + /* Delete stripe from LRU (inactive) list if on. */ + spin_lock_irq(lock); + DEL_LIST(lh); + spin_unlock_irq(lock); + + BUG_ON(stripe_ref(stripe) < 0); + + /* Lock stripe on first reference */ + r = (atomic_inc_return(&stripe->cnt) == 1) ? + stripe_lock(stripe, WRITE, stripe->key) : 0; + + return r; +} +#undef DEL_LIST + +/* Return references on a chunk. */ +static int chunk_ref(struct stripe_chunk *chunk) +{ + return atomic_read(&chunk->cnt); +} + +/* Take out reference on a chunk. */ +static int chunk_get(struct stripe_chunk *chunk) +{ + return atomic_inc_return(&chunk->cnt); +} + +/* Drop reference on a chunk. */ +static void chunk_put(struct stripe_chunk *chunk) +{ + BUG_ON(atomic_dec_return(&chunk->cnt) < 0); +} + +/* + * Drop reference on a stripe. + * + * Move it to list of LRU stripes if zero. + */ +static void stripe_put(struct stripe *stripe) +{ + if (atomic_dec_and_test(&stripe->cnt)) { + BUG_ON(stripe_io_ref(stripe)); + stripe_unlock(stripe); + } else + BUG_ON(stripe_ref(stripe) < 0); +} + +/* Helper needed by for_each_io_dev(). */ +static void stripe_get_references(struct stripe *stripe, unsigned p) +{ + + /* + * Another one to reference the stripe in + * order to protect vs. LRU list moves. + */ + io_get(RS(stripe->sc)); /* Global io references. */ + stripe_get(stripe); + stripe_io_get(stripe); /* One for each chunk io. */ +} + +/* Helper for endio() to put all take references. */ +static void stripe_put_references(struct stripe *stripe) +{ + stripe_io_put(stripe); /* One for each chunk io. */ + stripe_put(stripe); + io_put(RS(stripe->sc)); +} + +/* + * Stripe cache functions. + */ +/* + * Invalidate all chunks (i.e. their pages) of a stripe. + * + * I only keep state for the whole chunk. + */ +static inline void stripe_chunk_invalidate(struct stripe_chunk *chunk) +{ + chunk->io.flags = 0; +} + +static void +stripe_chunks_invalidate(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) + stripe_chunk_invalidate(CHUNK(stripe, p)); +} + +/* Prepare stripe for (re)use. */ +static void stripe_invalidate(struct stripe *stripe) +{ + stripe->io.flags = 0; + stripe->idx.parity = stripe->idx.recover = -1; + stripe_chunks_invalidate(stripe); +} + +/* + * Allow io on all chunks of a stripe. + * If not set, IO will not occur; i.e. it's prohibited. + * + * Actual IO submission for allowed chunks depends + * on their !uptodate or dirty state. + */ +static void stripe_allow_io(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) + SetChunkIo(CHUNK(stripe, p)); +} + +/* Initialize a stripe. */ +static void stripe_init(struct stripe_cache *sc, struct stripe *stripe) +{ + unsigned i, p = RS(sc)->set.raid_devs; + + /* Work all io chunks. */ + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + + atomic_set(&chunk->cnt, 0); + chunk->stripe = stripe; + i = ARRAY_SIZE(chunk->bl); + while (i--) + bio_list_init(chunk->bl + i); + } + + stripe->sc = sc; + + + i = ARRAY_SIZE(stripe->lists); + while (i--) + INIT_LIST_HEAD(stripe->lists + i); + + stripe->io.size = RS(sc)->set.io_size; + atomic_set(&stripe->cnt, 0); + atomic_set(&stripe->io.pending, 0); + stripe_invalidate(stripe); +} + +/* Number of pages per chunk. */ +static inline unsigned chunk_pages(unsigned sectors) +{ + return dm_div_up(sectors, SECTORS_PER_PAGE); +} + +/* Number of pages per stripe. */ +static inline unsigned stripe_pages(struct raid_set *rs, unsigned io_size) +{ + return chunk_pages(io_size) * rs->set.raid_devs; +} + +/* Initialize part of page_list (recovery). */ +static void stripe_zero_pl_part(struct stripe *stripe, int p, + unsigned start, unsigned count) +{ + unsigned o = start / SECTORS_PER_PAGE, pages = chunk_pages(count); + /* Get offset into the page_list. */ + struct page_list *pl = pl_elem(PL(stripe, p), o); + + BUG_ON(!pl); + while (pl && pages--) { + BUG_ON(!pl->page); + memset(page_address(pl->page), 0, PAGE_SIZE); + pl = pl->next; + } +} + +/* Initialize parity chunk of stripe. */ +static void stripe_zero_chunk(struct stripe *stripe, int p) +{ + if (p > -1) + stripe_zero_pl_part(stripe, p, 0, stripe->io.size); +} + +/* Return dynamic stripe structure size. */ +static size_t stripe_size(struct raid_set *rs) +{ + return sizeof(struct stripe) + + rs->set.raid_devs * sizeof(struct stripe_chunk); +} + +/* Allocate a stripe and its memory object. */ +/* XXX adjust to cope with stripe cache and recovery stripe caches. */ +enum grow { SC_GROW, SC_KEEP }; +static struct stripe *stripe_alloc(struct stripe_cache *sc, + struct dm_mem_cache_client *mc, + enum grow grow) +{ + int r; + struct stripe *stripe; + + stripe = kmem_cache_zalloc(sc->kc.cache, GFP_KERNEL); + if (stripe) { + /* Grow the dm-mem-cache by one object. */ + if (grow == SC_GROW) { + r = dm_mem_cache_grow(mc, 1); + if (r) + goto err_free; + } + + stripe->obj = dm_mem_cache_alloc(mc); + if (!stripe->obj) + goto err_shrink; + + stripe_init(sc, stripe); + } + + return stripe; + +err_shrink: + if (grow == SC_GROW) + dm_mem_cache_shrink(mc, 1); +err_free: + kmem_cache_free(sc->kc.cache, stripe); + return NULL; +} + +/* + * Free a stripes memory object, shrink the + * memory cache and free the stripe itself. + */ +static void stripe_free(struct stripe *stripe, struct dm_mem_cache_client *mc) +{ + dm_mem_cache_free(mc, stripe->obj); + dm_mem_cache_shrink(mc, 1); + kmem_cache_free(stripe->sc->kc.cache, stripe); +} + +/* Free the recovery stripe. */ +static void stripe_recover_free(struct raid_set *rs) +{ + struct recover *rec = &rs->recover; + struct dm_mem_cache_client *mc; + + mc = rec->mem_cache_client; + rec->mem_cache_client = NULL; + if (mc) { + struct stripe *stripe; + + while (!list_empty(&rec->stripes)) { + stripe = list_first_entry(&rec->stripes, struct stripe, + lists[LIST_RECOVER]); + list_del(stripe->lists + LIST_RECOVER); + kfree(stripe->recover); + stripe_free(stripe, mc); + } + + dm_mem_cache_client_destroy(mc); + dm_io_client_destroy(rec->dm_io_client); + rec->dm_io_client = NULL; + } +} + +/* Grow stripe cache. */ +static int sc_grow(struct stripe_cache *sc, unsigned stripes, enum grow grow) +{ + int r = 0; + + /* Try to allocate this many (additional) stripes. */ + while (stripes--) { + struct stripe *stripe = + stripe_alloc(sc, sc->mem_cache_client, grow); + + if (likely(stripe)) { + stripe_lru_add(stripe); + atomic_inc(&sc->stripes); + } else { + r = -ENOMEM; + break; + } + } + + return r ? r : sc_hash_resize(sc); +} + +/* Shrink stripe cache. */ +static int sc_shrink(struct stripe_cache *sc, unsigned stripes) +{ + int r = 0; + + /* Try to get unused stripe from LRU list. */ + while (stripes--) { + struct stripe *stripe; + + stripe = stripe_lru_pop(sc); + if (stripe) { + /* An LRU stripe may never have ios pending! */ + BUG_ON(stripe_io_ref(stripe)); + BUG_ON(stripe_ref(stripe)); + atomic_dec(&sc->stripes); + /* Remove from hash if on before deletion. */ + stripe_hash_del(stripe); + stripe_free(stripe, sc->mem_cache_client); + } else { + r = -ENOENT; + break; + } + } + + /* Check if stats are still sane. */ + if (atomic_read(&sc->active_stripes_max) > + atomic_read(&sc->stripes)) + atomic_set(&sc->active_stripes_max, 0); + + if (r) + return r; + + return atomic_read(&sc->stripes) ? sc_hash_resize(sc) : 0; +} + +/* Create stripe cache and recovery. */ +static int sc_init(struct raid_set *rs, unsigned stripes) +{ + unsigned i, r, rstripes; + struct stripe_cache *sc = &rs->sc; + struct stripe *stripe; + struct recover *rec = &rs->recover; + struct mapped_device *md; + struct gendisk *disk; + + /* Initialize lists and locks. */ + i = ARRAY_SIZE(sc->lists); + while (i--) + INIT_LIST_HEAD(sc->lists + i); + + INIT_LIST_HEAD(&rec->stripes); + + /* Initialize endio and LRU list locks. */ + i = NR_LOCKS; + while (i--) + spin_lock_init(sc->locks + i); + + /* Initialize atomic variables. */ + atomic_set(&sc->stripes, 0); + atomic_set(&sc->stripes_to_set, 0); + atomic_set(&sc->active_stripes, 0); + atomic_set(&sc->active_stripes_max, 0); /* REMOVEME: statistics. */ + + /* + * We need a runtime unique # to suffix the kmem cache name + * because we'll have one for each active RAID set. + */ + md = dm_table_get_md(rs->ti->table); + disk = dm_disk(md); + sprintf(sc->kc.name, "%s-%d", TARGET, disk->first_minor); + dm_put(md); + sc->kc.cache = kmem_cache_create(sc->kc.name, stripe_size(rs), + 0, 0, NULL); + if (!sc->kc.cache) + return -ENOMEM; + + /* Create memory cache client context for RAID stripe cache. */ + sc->mem_cache_client = + dm_mem_cache_client_create(stripes, rs->set.raid_devs, + chunk_pages(rs->set.io_size)); + if (IS_ERR(sc->mem_cache_client)) + return PTR_ERR(sc->mem_cache_client); + + /* Create memory cache client context for RAID recovery stripe(s). */ + rstripes = rec->recovery_stripes; + rec->mem_cache_client = + dm_mem_cache_client_create(rstripes, rs->set.raid_devs, + chunk_pages(rec->io_size)); + if (IS_ERR(rec->mem_cache_client)) + return PTR_ERR(rec->mem_cache_client); + + /* Create dm-io client context for IO stripes. */ + sc->dm_io_client = + dm_io_client_create(); + if (IS_ERR(sc->dm_io_client)) + return PTR_ERR(sc->dm_io_client); + + /* FIXME: intermingeled with stripe cache initialization. */ + /* Create dm-io client context for recovery stripes. */ + rec->dm_io_client = + dm_io_client_create(); + if (IS_ERR(rec->dm_io_client)) + return PTR_ERR(rec->dm_io_client); + + /* Allocate stripes for set recovery. */ + while (rstripes--) { + stripe = stripe_alloc(sc, rec->mem_cache_client, SC_KEEP); + if (!stripe) + return -ENOMEM; + + stripe->recover = kzalloc(sizeof(*stripe->recover), GFP_KERNEL); + if (!stripe->recover) { + stripe_free(stripe, rec->mem_cache_client); + return -ENOMEM; + } + + SetStripeRecover(stripe); + stripe->io.size = rec->io_size; + list_add_tail(stripe->lists + LIST_RECOVER, &rec->stripes); + /* Don't add recovery stripes to LRU list! */ + } + + /* + * Allocate the stripe objetcs from the + * cache and add them to the LRU list. + */ + r = sc_grow(sc, stripes, SC_KEEP); + if (!r) + atomic_set(&sc->stripes_last, stripes); + + return r; +} + +/* Destroy the stripe cache. */ +static void sc_exit(struct stripe_cache *sc) +{ + struct raid_set *rs = RS(sc); + + if (sc->kc.cache) { + stripe_recover_free(rs); + BUG_ON(sc_shrink(sc, atomic_read(&sc->stripes))); + kmem_cache_destroy(sc->kc.cache); + sc->kc.cache = NULL; + + if (sc->mem_cache_client && !IS_ERR(sc->mem_cache_client)) + dm_mem_cache_client_destroy(sc->mem_cache_client); + + if (sc->dm_io_client && !IS_ERR(sc->dm_io_client)) + dm_io_client_destroy(sc->dm_io_client); + + hash_exit(&sc->hash); + } +} + +/* + * Calculate RAID address + * + * Delivers tuple with the index of the data disk holding the chunk + * in the set, the parity disks index and the start of the stripe + * within the address space of the set (used as the stripe cache hash key). + */ +/* thx MD. */ +static struct raid_address *raid_address(struct raid_set *rs, sector_t sector, + struct raid_address *addr) +{ + sector_t stripe, tmp; + + /* + * chunk_number = sector / chunk_size + * stripe_number = chunk_number / data_devs + * di = stripe % data_devs; + */ + stripe = sector >> rs->set.chunk_shift; + addr->di = sector_div(stripe, rs->set.data_devs); + + switch (rs->set.raid_type->level) { + case raid4: + addr->pi = rs->set.pi; + goto check_shift_di; + case raid5: + tmp = stripe; + addr->pi = sector_div(tmp, rs->set.raid_devs); + + switch (rs->set.raid_type->algorithm) { + case left_asym: /* Left asymmetric. */ + addr->pi = rs->set.data_devs - addr->pi; + case right_asym: /* Right asymmetric. */ +check_shift_di: + if (addr->di >= addr->pi) + addr->di++; + break; + case left_sym: /* Left symmetric. */ + addr->pi = rs->set.data_devs - addr->pi; + case right_sym: /* Right symmetric. */ + addr->di = (addr->pi + addr->di + 1) % + rs->set.raid_devs; + break; + case none: /* Ain't happen: RAID4 algorithm placeholder. */ + BUG(); + } + } + + /* + * Start offset of the stripes chunk on any single device of the RAID + * set, adjusted in case io size differs from chunk size. + */ + addr->key = (stripe << rs->set.chunk_shift) + + (sector & rs->set.io_inv_mask); + return addr; +} + +/* + * Copy data across between stripe pages and bio vectors. + * + * Pay attention to data alignment in stripe and bio pages. + */ +static void bio_copy_page_list(int rw, struct stripe *stripe, + struct page_list *pl, struct bio *bio) +{ + unsigned i, page_offset; + void *page_addr; + struct raid_set *rs = RS(stripe->sc); + struct bio_vec *bv; + + /* Get start page in page list for this sector. */ + i = (bio->bi_sector & rs->set.io_mask) / SECTORS_PER_PAGE; + pl = pl_elem(pl, i); + BUG_ON(!pl); + BUG_ON(!pl->page); + + page_addr = page_address(pl->page); + page_offset = to_bytes(bio->bi_sector & (SECTORS_PER_PAGE - 1)); + + /* Walk all segments and copy data across between bio_vecs and pages. */ + bio_for_each_segment(bv, bio, i) { + int len = bv->bv_len, size; + unsigned bio_offset = 0; + void *bio_addr = __bio_kmap_atomic(bio, i, KM_USER0); +redo: + size = (page_offset + len > PAGE_SIZE) ? + PAGE_SIZE - page_offset : len; + + if (rw == READ) + memcpy(bio_addr + bio_offset, + page_addr + page_offset, size); + else + memcpy(page_addr + page_offset, + bio_addr + bio_offset, size); + + page_offset += size; + if (page_offset == PAGE_SIZE) { + /* + * We reached the end of the chunk page -> + * need to refer to the next one to copy more data. + */ + len -= size; + if (len) { + /* Get next page. */ + pl = pl->next; + BUG_ON(!pl); + BUG_ON(!pl->page); + page_addr = page_address(pl->page); + page_offset = 0; + bio_offset += size; + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BIO_COPY_PL_NEXT); + goto redo; + } + } + + __bio_kunmap_atomic(bio_addr, KM_USER0); + } +} + +/* + * Xor optimization macros. + */ +/* Xor data pointer declaration and initialization macros. */ +#define DECLARE_2 unsigned long *d0 = data[0], *d1 = data[1] +#define DECLARE_3 DECLARE_2, *d2 = data[2] +#define DECLARE_4 DECLARE_3, *d3 = data[3] +#define DECLARE_5 DECLARE_4, *d4 = data[4] +#define DECLARE_6 DECLARE_5, *d5 = data[5] +#define DECLARE_7 DECLARE_6, *d6 = data[6] +#define DECLARE_8 DECLARE_7, *d7 = data[7] + +/* Xor unrole macros. */ +#define D2(n) d0[n] = d0[n] ^ d1[n] +#define D3(n) D2(n) ^ d2[n] +#define D4(n) D3(n) ^ d3[n] +#define D5(n) D4(n) ^ d4[n] +#define D6(n) D5(n) ^ d5[n] +#define D7(n) D6(n) ^ d6[n] +#define D8(n) D7(n) ^ d7[n] + +#define X_2(macro, offset) macro(offset); macro(offset + 1); +#define X_4(macro, offset) X_2(macro, offset); X_2(macro, offset + 2); +#define X_8(macro, offset) X_4(macro, offset); X_4(macro, offset + 4); +#define X_16(macro, offset) X_8(macro, offset); X_8(macro, offset + 8); +#define X_32(macro, offset) X_16(macro, offset); X_16(macro, offset + 16); +#define X_64(macro, offset) X_32(macro, offset); X_32(macro, offset + 32); + +/* Define a _xor_#chunks_#xors_per_run() function. */ +#define _XOR(chunks, xors_per_run) \ +static void _xor ## chunks ## _ ## xors_per_run(unsigned long **data) \ +{ \ + unsigned end = XOR_SIZE / sizeof(data[0]), i; \ + DECLARE_ ## chunks; \ +\ + for (i = 0; i < end; i += xors_per_run) { \ + X_ ## xors_per_run(D ## chunks, i); \ + } \ +} + +/* Define xor functions for 2 - 8 chunks and xors per run. */ +#define MAKE_XOR_PER_RUN(xors_per_run) \ + _XOR(2, xors_per_run); _XOR(3, xors_per_run); \ + _XOR(4, xors_per_run); _XOR(5, xors_per_run); \ + _XOR(6, xors_per_run); _XOR(7, xors_per_run); \ + _XOR(8, xors_per_run); + +MAKE_XOR_PER_RUN(8) /* Define _xor_*_8() functions. */ +MAKE_XOR_PER_RUN(16) /* Define _xor_*_16() functions. */ +MAKE_XOR_PER_RUN(32) /* Define _xor_*_32() functions. */ +MAKE_XOR_PER_RUN(64) /* Define _xor_*_64() functions. */ + +#define MAKE_XOR(xors_per_run) \ +struct { \ + void (*f)(unsigned long **); \ +} static xor_funcs ## xors_per_run[] = { \ + { NULL }, /* NULL pointers to optimize indexing in xor(). */ \ + { NULL }, \ + { _xor2_ ## xors_per_run }, \ + { _xor3_ ## xors_per_run }, \ + { _xor4_ ## xors_per_run }, \ + { _xor5_ ## xors_per_run }, \ + { _xor6_ ## xors_per_run }, \ + { _xor7_ ## xors_per_run }, \ + { _xor8_ ## xors_per_run }, \ +}; \ +\ +static void xor_ ## xors_per_run(unsigned n, unsigned long **data) \ +{ \ + /* Call respective function for amount of chunks. */ \ + xor_funcs ## xors_per_run[n].f(data); \ +} + +/* Define xor_8() - xor_64 functions. */ +MAKE_XOR(8) +MAKE_XOR(16) +MAKE_XOR(32) +MAKE_XOR(64) + +/* Maximum number of chunks, which can be xor'ed in one go. */ +#define XOR_CHUNKS_MAX (ARRAY_SIZE(xor_funcs8) - 1) + +static void xor_blocks_wrapper(unsigned n, unsigned long **data) +{ + BUG_ON(n < 2 || n > MAX_XOR_BLOCKS + 1); + xor_blocks(n - 1, XOR_SIZE, (void *) data[0], (void **) data + 1); +} + +struct xor_func { + xor_function_t f; + const char *name; +} static xor_funcs[] = { + { xor_8, "xor_8" }, + { xor_16, "xor_16" }, + { xor_32, "xor_32" }, + { xor_64, "xor_64" }, + { xor_blocks_wrapper, "xor_blocks" }, +}; + +/* + * Check, if chunk has to be xored in/out: + * + * o if writes are queued + * o if writes are merged + * o if stripe is to be reconstructed + * o if recovery stripe + */ +static inline int chunk_must_xor(struct stripe_chunk *chunk) +{ + if (ChunkUptodate(chunk)) { + BUG_ON(!bio_list_empty(BL_CHUNK(chunk, WRITE_QUEUED)) && + !bio_list_empty(BL_CHUNK(chunk, WRITE_MERGED))); + + if (!bio_list_empty(BL_CHUNK(chunk, WRITE_QUEUED)) || + !bio_list_empty(BL_CHUNK(chunk, WRITE_MERGED))) + return 1; + + if (StripeReconstruct(chunk->stripe) || + StripeRecover(chunk->stripe)) + return 1; + } + + return 0; +} + +/* + * Calculate crc. + * + * This indexes into the chunks of a stripe and their pages. + * + * All chunks will be xored into the indexed (@pi) + * chunk in maximum groups of xor.chunks. + * + */ +static void xor(struct stripe *stripe, unsigned pi, unsigned sector) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned max_chunks = rs->xor.chunks, n = 1, + o = sector / SECTORS_PER_PAGE, /* Offset into the page_list. */ + p = rs->set.raid_devs; + unsigned long **d = rs->data; + xor_function_t xor_f = rs->xor.f->f; + + BUG_ON(sector > stripe->io.size); + + /* Address of parity page to xor into. */ + d[0] = page_address(pl_elem(PL(stripe, pi), o)->page); + + while (p--) { + /* Preset pointers to data pages. */ + if (p != pi && chunk_must_xor(CHUNK(stripe, p))) + d[n++] = page_address(pl_elem(PL(stripe, p), o)->page); + + /* If max chunks -> xor. */ + if (n == max_chunks) { + xor_f(n, d); + n = 1; + } + } + + /* If chunks -> xor. */ + if (n > 1) + xor_f(n, d); +} + +/* Common xor loop through all stripe page lists. */ +static void common_xor(struct stripe *stripe, sector_t count, + unsigned off, unsigned pi) +{ + unsigned sector; + + BUG_ON(!count); + for (sector = off; sector < count; sector += SECTORS_PER_PAGE) + xor(stripe, pi, sector); + + /* Set parity page uptodate and clean. */ + chunk_set(CHUNK(stripe, pi), CLEAN); + atomic_inc(RS(stripe->sc)->stats + S_XORS); /* REMOVEME: statistics. */ +} + +/* + * Calculate parity sectors on intact stripes. + * + * Need to calculate raid address for recover stripe, because its + * chunk sizes differs and is typically larger than io chunk size. + */ +static void parity_xor(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned chunk_size = rs->set.chunk_size, io_size = stripe->io.size, + xor_size = chunk_size > io_size ? io_size : chunk_size; + sector_t off; + + /* This can be the recover stripe with a larger io size. */ + for (off = 0; off < io_size; off += xor_size) { + /* + * Recover stripe is likely bigger than regular io + * ones and has no precalculated parity disk index -> + * need to calculate RAID address. + */ + if (unlikely(StripeRecover(stripe))) { + struct raid_address addr; + + raid_address(rs, + (stripe->key + off) * rs->set.data_devs, + &addr); + stripe->idx.parity = addr.pi; + stripe_zero_pl_part(stripe, addr.pi, off, xor_size); + } + + common_xor(stripe, xor_size, off, stripe->idx.parity); + chunk_set(CHUNK(stripe, stripe->idx.parity), DIRTY); + } +} + +/* Reconstruct missing chunk. */ +static void stripe_reconstruct(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + int p = rs->set.raid_devs, pr = stripe->idx.recover; + + BUG_ON(pr < 0); + + /* Check if all but the chunk to be reconstructed are uptodate. */ + while (p--) + BUG_ON(p != pr && !ChunkUptodate(CHUNK(stripe, p))); + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (RSDegraded(rs) ? S_RECONSTRUCT_EI : + S_RECONSTRUCT_DEV)); + /* Zero chunk to be reconstructed. */ + stripe_zero_chunk(stripe, pr); + common_xor(stripe, stripe->io.size, 0, pr); + stripe->idx.recover = -1; +} + +/* + * Recovery io throttling + */ +/* Conditionally reset io counters. */ +static int recover_io_reset(struct raid_set *rs) +{ + unsigned long j = jiffies; + + /* Pay attention to jiffies overflows. */ + if (j > rs->recover.last_jiffies + HZ / 20 || + j < rs->recover.last_jiffies) { + atomic_set(rs->recover.io_count + IO_WORK, 0); + atomic_set(rs->recover.io_count + IO_RECOVER, 0); + rs->recover.last_jiffies = j; + return 1; + } + + return 0; +} + +/* Count ios. */ +static void recover_io_count(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + + recover_io_reset(rs); + atomic_inc(rs->recover.io_count + + (StripeRecover(stripe) ? IO_RECOVER : IO_WORK)); +} + +/* Try getting a stripe either from the hash or from the LRU list. */ +static struct stripe *stripe_find(struct raid_set *rs, + struct raid_address *addr) +{ + int r; + struct stripe_cache *sc = &rs->sc; + struct stripe *stripe; + + /* Try stripe from hash. */ + stripe = stripe_lookup(sc, addr->key); + if (stripe) { + r = stripe_get(stripe); + if (r) + goto get_lock_failed; + + atomic_inc(rs->stats + S_HITS_1ST); /* REMOVEME: statistics. */ + } else { + /* Not in hash -> try to get an LRU stripe. */ + stripe = stripe_lru_pop(sc); + if (stripe) { + /* + * An LRU stripe may not be referenced + * and may never have ios pending! + */ + BUG_ON(stripe_ref(stripe)); + BUG_ON(stripe_io_ref(stripe)); + + /* Remove from hash if on before reuse. */ + stripe_hash_del(stripe); + + /* Invalidate before reinserting with changed key. */ + stripe_invalidate(stripe); + + stripe->key = addr->key; + stripe->region = dm_rh_sector_to_region(rs->recover.rh, + addr->key); + stripe->idx.parity = addr->pi; + r = stripe_get(stripe); + if (r) + goto get_lock_failed; + + /* Insert stripe into the stripe hash. */ + stripe_insert(&sc->hash, stripe); + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_INSCACHE); + } + } + + return stripe; + +get_lock_failed: + stripe_put(stripe); + return NULL; +} + +/* + * Process end io + * + * I need to do it here because I can't in interrupt + */ +/* End io all bios on a bio list. */ +static void bio_list_endio(struct stripe *stripe, struct bio_list *bl, + int p, int error) +{ + struct raid_set *rs = RS(stripe->sc); + struct bio *bio; + struct page_list *pl = PL(stripe, p); + struct stripe_chunk *chunk = CHUNK(stripe, p); + + /* Update region counters. */ + while ((bio = bio_list_pop(bl))) { + if (bio_data_dir(bio) == WRITE) + /* Drop io pending count for any writes. */ + dm_rh_dec(rs->recover.rh, stripe->region); + else if (!error) + /* Copy data accross. */ + bio_copy_page_list(READ, stripe, pl, bio); + + bio_endio(bio, error); + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (bio_data_dir(bio) == READ ? + S_BIOS_ENDIO_READ : S_BIOS_ENDIO_WRITE)); + + chunk_put(chunk); + stripe_put(stripe); + io_put(rs); /* Wake any suspend waiters on last bio. */ + } +} + +/* + * End io all reads/writes on a stripe copying + * read data accross from stripe to bios and + * decrementing region counters for writes. + * + * Processing of ios depeding on state: + * o no chunk error -> endio ok + * o degraded: + * - chunk error and read -> ignore to be requeued + * - chunk error and write -> endio ok + * o dead (more than parity_devs failed) and chunk_error-> endio failed + */ +static void stripe_endio(int rw, struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p = rs->set.raid_devs; + int write = (rw != READ); + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct bio_list *bl; + + BUG_ON(ChunkLocked(chunk)); + + bl = BL_CHUNK(chunk, rw); + if (bio_list_empty(bl)) + continue; + + if (unlikely(ChunkError(chunk) || !ChunkUptodate(chunk))) { + /* RAID set dead. */ + if (unlikely(RSDead(rs))) + bio_list_endio(stripe, bl, p, -EIO); + /* RAID set degraded. */ + else if (write) + bio_list_endio(stripe, bl, p, 0); + } else { + BUG_ON(!RSDegraded(rs) && ChunkDirty(chunk)); + bio_list_endio(stripe, bl, p, 0); + } + } +} + +/* Fail all ios hanging off all bio lists of a stripe. */ +static void stripe_fail_io(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned p = rs->set.raid_devs; + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + int i = ARRAY_SIZE(chunk->bl); + + /* Fail all bios on all bio lists of the stripe. */ + while (i--) { + struct bio_list *bl = chunk->bl + i; + + if (!bio_list_empty(bl)) + bio_list_endio(stripe, bl, p, -EIO); + } + } + + /* Put stripe on LRU list. */ + BUG_ON(stripe_io_ref(stripe)); + BUG_ON(stripe_ref(stripe)); +} + +/* Unlock all required chunks. */ +static void stripe_chunks_unlock(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + struct stripe_chunk *chunk; + + while (p--) { + chunk = CHUNK(stripe, p); + + if (TestClearChunkUnlock(chunk)) + ClearChunkLocked(chunk); + } +} + +/* + * Queue reads and writes to a stripe by hanging + * their bios off the stripesets read/write lists. + */ +static int stripe_queue_bio(struct raid_set *rs, struct bio *bio, + struct bio_list *reject) +{ + struct raid_address addr; + struct stripe *stripe; + + stripe = stripe_find(rs, raid_address(rs, bio->bi_sector, &addr)); + if (stripe) { + int r = 0, rw = bio_data_dir(bio); + + /* Distinguish reads and writes. */ + bio_list_add(BL(stripe, addr.di, rw), bio); + + if (rw == READ) + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BIOS_ADDED_READ); + else { + /* Inrement pending write count on region. */ + dm_rh_inc(rs->recover.rh, stripe->region); + r = 1; + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BIOS_ADDED_WRITE); + } + + /* + * Put on io (flush) list in case of + * initial bio queued to chunk. + */ + if (chunk_get(CHUNK(stripe, addr.di)) == 1) + stripe_flush_add(stripe); + + return r; + } + + /* Got no stripe from cache or failed to lock it -> reject bio. */ + bio_list_add(reject, bio); + atomic_inc(rs->stats + S_IOS_POST); /* REMOVEME: statistics. */ + return 0; +} + +/* + * Handle all stripes by handing them to the daemon, because we can't + * map their chunk pages to copy the data in interrupt context. + * + * We don't want to handle them here either, while interrupts are disabled. + */ + +/* Read/write endio function for dm-io (interrupt context). */ +static void endio(unsigned long error, void *context) +{ + struct stripe_chunk *chunk = context; + + if (unlikely(error)) { + chunk_set(chunk, ERROR); + /* REMOVEME: statistics. */ + atomic_inc(RS(chunk->stripe->sc)->stats + S_STRIPE_ERROR); + } else + chunk_set(chunk, CLEAN); + + /* + * For recovery stripes, I need to reset locked locked + * here, because those aren't processed in do_endios(). + */ + if (unlikely(StripeRecover(chunk->stripe))) + ClearChunkLocked(chunk); + else + SetChunkUnlock(chunk); + + /* Indirectly puts stripe on cache's endio list via stripe_io_put(). */ + stripe_put_references(chunk->stripe); +} + +/* Read/Write a chunk asynchronously. */ +static void stripe_chunk_rw(struct stripe *stripe, unsigned p) +{ + struct stripe_cache *sc = stripe->sc; + struct raid_set *rs = RS(sc); + struct dm_mem_cache_object *obj = stripe->obj + p; + struct page_list *pl = obj->pl; + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct raid_dev *dev = rs->dev + p; + struct dm_io_region io = { + .bdev = dev->dev->bdev, + .sector = stripe->key, + .count = stripe->io.size, + }; + struct dm_io_request control = { + .bi_rw = ChunkDirty(chunk) ? WRITE : READ, + .mem = { + .type = DM_IO_PAGE_LIST, + .ptr.pl = pl, + .offset = 0, + }, + .notify = { + .fn = endio, + .context = chunk, + }, + .client = StripeRecover(stripe) ? rs->recover.dm_io_client : + sc->dm_io_client, + }; + + BUG_ON(ChunkLocked(chunk)); + BUG_ON(!ChunkUptodate(chunk) && ChunkDirty(chunk)); + BUG_ON(ChunkUptodate(chunk) && !ChunkDirty(chunk)); + + /* + * Don't rw past end of device, which can happen, because + * typically sectors_per_dev isn't divisible by io_size. + */ + if (unlikely(io.sector + io.count > rs->set.sectors_per_dev)) + io.count = rs->set.sectors_per_dev - io.sector; + + BUG_ON(!io.count); + io.sector += dev->start; /* Add . */ + if (RSRecover(rs)) + recover_io_count(stripe); /* Recovery io accounting. */ + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (ChunkDirty(chunk) ? S_DM_IO_WRITE : + S_DM_IO_READ)); + SetChunkLocked(chunk); + SetDevIoQueued(dev); + BUG_ON(dm_io(&control, 1, &io, NULL)); +} + +/* + * Write dirty or read not uptodate page lists of a stripe. + */ +static int stripe_chunks_rw(struct stripe *stripe) +{ + int r; + struct raid_set *rs = RS(stripe->sc); + + /* + * Increment the pending count on the stripe + * first, so that we don't race in endio(). + * + * An inc (IO) is needed for any chunk unless !ChunkIo(chunk): + * + * o not uptodate + * o dirtied by writes merged + * o dirtied by parity calculations + */ + r = for_each_io_dev(stripe, stripe_get_references); + if (r) { + /* Io needed: chunks are either not uptodate or dirty. */ + int max; /* REMOVEME: */ + struct stripe_cache *sc = &rs->sc; + + /* Submit actual io. */ + for_each_io_dev(stripe, stripe_chunk_rw); + + /* REMOVEME: statistics */ + max = sc_active(sc); + if (atomic_read(&sc->active_stripes_max) < max) + atomic_set(&sc->active_stripes_max, max); + + atomic_inc(rs->stats + S_FLUSHS); + /* END REMOVEME: statistics */ + } + + return r; +} + +/* Merge in all writes hence dirtying respective chunks. */ +static void stripe_merge_writes(struct stripe *stripe) +{ + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct bio_list *write = BL_CHUNK(chunk, WRITE_QUEUED); + + if (!bio_list_empty(write)) { + struct bio *bio; + struct page_list *pl = stripe->obj[p].pl; + + /* + * We can play with the lists without holding a lock, + * because it is just us accessing them anyway. + */ + bio_list_for_each(bio, write) + bio_copy_page_list(WRITE, stripe, pl, bio); + + bio_list_merge(BL_CHUNK(chunk, WRITE_MERGED), write); + bio_list_init(write); + chunk_set(chunk, DIRTY); + } + } +} + +/* Queue all writes to get merged. */ +static int stripe_queue_writes(struct stripe *stripe) +{ + int r = 0; + unsigned p = RS(stripe->sc)->set.raid_devs; + + while (p--) { + struct stripe_chunk *chunk = CHUNK(stripe, p); + struct bio_list *write = BL_CHUNK(chunk, WRITE); + + if (!bio_list_empty(write)) { + bio_list_merge(BL_CHUNK(chunk, WRITE_QUEUED), write); + bio_list_init(write); +SetChunkIo(chunk); + r = 1; + } + } + + return r; +} + + +/* Check, if a chunk gets completely overwritten. */ +static int stripe_check_chunk_overwrite(struct stripe *stripe, unsigned p) +{ + unsigned sectors = 0; + struct bio *bio; + struct bio_list *bl = BL(stripe, p, WRITE_QUEUED); + + bio_list_for_each(bio, bl) + sectors += bio_sectors(bio); + + BUG_ON(sectors > RS(stripe->sc)->set.io_size); + return sectors == RS(stripe->sc)->set.io_size; +} + +/* + * Avoid io on broken/reconstructed drive in order to + * reconstruct date on endio. + * + * (*1*) We set StripeReconstruct() in here, so that _do_endios() + * will trigger a reconstruct call before resetting it. + */ +static int stripe_chunk_set_io_flags(struct stripe *stripe, int pr) +{ + struct stripe_chunk *chunk = CHUNK(stripe, pr); + + /* + * Allow io on all chunks but the indexed one, + * because we're either degraded or prohibit it + * on the one for later reconstruction. + */ + /* Includes ClearChunkIo(), ClearChunkUptodate(). */ + stripe_chunk_invalidate(chunk); + stripe->idx.recover = pr; + SetStripeReconstruct(stripe); + + /* REMOVEME: statistics. */ + atomic_inc(RS(stripe->sc)->stats + S_PROHIBITCHUNKIO); + return -EPERM; +} + +/* Chunk locked/uptodate and device failed tests. */ +static struct stripe_chunk * +stripe_chunk_check(struct stripe *stripe, unsigned p, unsigned *chunks_uptodate) +{ + struct raid_set *rs = RS(stripe->sc); + struct stripe_chunk *chunk = CHUNK(stripe, p); + + /* Can't access active chunks. */ + if (ChunkLocked(chunk)) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_CHUNK_LOCKED); + return NULL; + } + + /* Can't access broken devive. */ + if (ChunkError(chunk) || DevFailed(rs->dev + p)) + return NULL; + + /* Can access uptodate chunks. */ + if (ChunkUptodate(chunk)) { + (*chunks_uptodate)++; + return NULL; + } + + return chunk; +} + +/* + * Degraded/reconstruction mode. + * + * Check stripe state to figure which chunks don't need IO. + * + * Returns 0 for fully operational, -EPERM for degraded/resynchronizing. + */ +static int stripe_check_reconstruct(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + + if (RSDead(rs)) { + ClearStripeReconstruct(stripe); + ClearStripeReconstructed(stripe); + stripe_allow_io(stripe); + return 0; + } + + /* Avoid further reconstruction setting, when already set. */ + if (StripeReconstruct(stripe)) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_RECONSTRUCT_SET); + return -EBUSY; + } + + /* Initially allow io on all chunks. */ + stripe_allow_io(stripe); + + /* Return if stripe is already reconstructed. */ + if (StripeReconstructed(stripe)) { + atomic_inc(rs->stats + S_RECONSTRUCTED); + return 0; + } + + /* + * Degraded/reconstruction mode (device failed) -> + * avoid io on the failed device. + */ + if (unlikely(RSDegraded(rs))) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_DEGRADED); + /* Allow IO on all devices but the dead one. */ + BUG_ON(rs->set.ei < 0); + return stripe_chunk_set_io_flags(stripe, rs->set.ei); + } else { + int sync, pi = dev_for_parity(stripe, &sync); + + /* + * Reconstruction mode (ie. a particular (replaced) device or + * some (rotating) parity chunk is being resynchronized) -> + * o make sure all needed chunks are read in + * o writes are allowed to go through + */ + if (!sync) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_NOSYNC); + /* Allow IO on all devs but the one to reconstruct. */ + return stripe_chunk_set_io_flags(stripe, pi); + } + } + + return 0; +} + +/* + * Check, if stripe is ready to merge writes. + * I.e. if all chunks present to allow to merge bios. + * + * We prohibit io on: + * + * o chunks without bios + * o chunks which get completely written over + */ +static int stripe_merge_possible(struct stripe *stripe, int nosync) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned chunks_overwrite = 0, chunks_prohibited = 0, + chunks_uptodate = 0, p = rs->set.raid_devs; + + /* Walk all chunks. */ + while (p--) { + struct stripe_chunk *chunk; + + /* Prohibit io on broken devices. */ + if (DevFailed(rs->dev + p)) { + chunk = CHUNK(stripe, p); + goto prohibit_io; + } + + /* We can't optimize any further if no chunk. */ + chunk = stripe_chunk_check(stripe, p, &chunks_uptodate); + if (!chunk || nosync) + continue; + + /* + * We have a chunk, which is not uptodate. + * + * If this is not parity and we don't have + * reads queued, we can optimize further. + */ + if (p != stripe->idx.parity && + bio_list_empty(BL_CHUNK(chunk, READ)) && + bio_list_empty(BL_CHUNK(chunk, WRITE_MERGED))) { + if (bio_list_empty(BL_CHUNK(chunk, WRITE_QUEUED))) + goto prohibit_io; + else if (RSCheckOverwrite(rs) && + stripe_check_chunk_overwrite(stripe, p)) + /* Completely overwritten chunk. */ + chunks_overwrite++; + } + + /* Allow io for chunks with bios and overwritten ones. */ + SetChunkIo(chunk); + continue; + +prohibit_io: + /* No io for broken devices or for chunks w/o bios. */ + ClearChunkIo(chunk); + chunks_prohibited++; + /* REMOVEME: statistics. */ + atomic_inc(RS(stripe->sc)->stats + S_PROHIBITCHUNKIO); + } + + /* All data chunks will get written over. */ + if (chunks_overwrite == rs->set.data_devs) + atomic_inc(rs->stats + S_OVERWRITE); /* REMOVEME: statistics.*/ + else if (chunks_uptodate + chunks_prohibited < rs->set.raid_devs) { + /* We don't have enough chunks to merge. */ + atomic_inc(rs->stats + S_CANT_MERGE); /* REMOVEME: statistics.*/ + return -EPERM; + } + + /* + * If we have all chunks up to date or overwrite them, we + * just zero the parity chunk and let stripe_rw() recreate it. + */ + if (chunks_uptodate == rs->set.raid_devs || + chunks_overwrite == rs->set.data_devs) { + stripe_zero_chunk(stripe, stripe->idx.parity); + BUG_ON(StripeReconstruct(stripe)); + SetStripeReconstruct(stripe); /* Enforce xor in caller. */ + } else { + /* + * With less chunks, we xor parity out. + * + * (*4*) We rely on !StripeReconstruct() in chunk_must_xor(), + * so that only chunks with queued or merged writes + * are being xored. + */ + parity_xor(stripe); + } + + /* + * We do have enough chunks to merge. + * All chunks are uptodate or get written over. + */ + atomic_inc(rs->stats + S_CAN_MERGE); /* REMOVEME: statistics. */ + return 0; +} + +/* + * Avoid reading chunks in case we're fully operational. + * + * We prohibit io on any chunks without bios but the parity chunk. + */ +static void stripe_avoid_reads(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + unsigned dummy = 0, p = rs->set.raid_devs; + + /* Walk all chunks. */ + while (p--) { + struct stripe_chunk *chunk = + stripe_chunk_check(stripe, p, &dummy); + + if (!chunk) + continue; + + /* If parity or any bios pending -> allow io. */ + if (chunk_ref(chunk) || p == stripe->idx.parity) + SetChunkIo(chunk); + else { + ClearChunkIo(chunk); + /* REMOVEME: statistics. */ + atomic_inc(RS(stripe->sc)->stats + S_PROHIBITCHUNKIO); + } + } +} + +/* + * Read/write a stripe. + * + * All stripe read/write activity goes through this function + * unless recovery, which has to call stripe_chunk_rw() directly. + * + * Make sure we don't try already merged stripes in order + * to avoid data corruption. + * + * Check the state of the RAID set and if degraded (or + * resynchronizing for reads), read in all other chunks but + * the one on the dead/resynchronizing device in order to be + * able to reconstruct the missing one in _do_endios(). + * + * Can be called on active stripes in order + * to dispatch new io on inactive chunks. + * + * States to cover: + * o stripe to read and/or write + * o stripe with error to reconstruct + */ +static void stripe_rw(struct stripe *stripe) +{ + int nosync, r; + struct raid_set *rs = RS(stripe->sc); + + /* + * Check, if a chunk needs to be reconstructed + * because of a degraded set or a region out of sync. + */ + nosync = stripe_check_reconstruct(stripe); + switch (nosync) { + case -EBUSY: + return; /* Wait for stripe reconstruction to finish. */ + case -EPERM: + goto io; + } + + /* + * If we don't have merged writes pending, we can schedule + * queued writes to be merged next without corrupting data. + */ + if (!StripeMerged(stripe)) { + r = stripe_queue_writes(stripe); + if (r) + /* Writes got queued -> flag RBW. */ + SetStripeRBW(stripe); + } + + /* + * Merge all writes hanging off uptodate/overwritten + * chunks of the stripe. + */ + if (StripeRBW(stripe)) { + r = stripe_merge_possible(stripe, nosync); + if (!r) { /* Merge possible. */ + struct stripe_chunk *chunk; + + /* + * I rely on valid parity in order + * to xor a fraction of chunks out + * of parity and back in. + */ + stripe_merge_writes(stripe); /* Merge writes in. */ + parity_xor(stripe); /* Update parity. */ + ClearStripeReconstruct(stripe); /* Reset xor enforce. */ + SetStripeMerged(stripe); /* Writes merged. */ + ClearStripeRBW(stripe); /* Disable RBW. */ + + /* + * REMOVEME: sanity check on parity chunk + * states after writes got merged. + */ + chunk = CHUNK(stripe, stripe->idx.parity); + BUG_ON(ChunkLocked(chunk)); + BUG_ON(!ChunkUptodate(chunk)); + BUG_ON(!ChunkDirty(chunk)); + BUG_ON(!ChunkIo(chunk)); + } + } else if (!nosync && !StripeMerged(stripe)) + /* Read avoidance if not degraded/resynchronizing/merged. */ + stripe_avoid_reads(stripe); + +io: + /* Now submit any reads/writes for non-uptodate or dirty chunks. */ + r = stripe_chunks_rw(stripe); + if (!r) { + /* + * No io submitted because of chunk io + * prohibited or locked chunks/failed devices + * -> push to end io list for processing. + */ + stripe_endio_push(stripe); + atomic_inc(rs->stats + S_NO_RW); /* REMOVEME: statistics. */ + } +} + +/* + * Recovery functions + */ +/* Read a stripe off a raid set for recovery. */ +static int stripe_recover_read(struct stripe *stripe, int pi) +{ + BUG_ON(stripe_io_ref(stripe)); + + /* Invalidate all chunks so that they get read in. */ + stripe_chunks_invalidate(stripe); + stripe_allow_io(stripe); /* Allow io on all recovery chunks. */ + + /* + * If we are reconstructing a perticular device, we can avoid + * reading the respective chunk in, because we're going to + * reconstruct it anyway. + * + * We can't do that for resynchronization of rotating parity, + * because the recovery stripe chunk size is typically larger + * than the sets chunk size. + */ + if (pi > -1) + ClearChunkIo(CHUNK(stripe, pi)); + + return stripe_chunks_rw(stripe); +} + +/* Write a stripe to a raid set for recovery. */ +static int stripe_recover_write(struct stripe *stripe, int pi) +{ + BUG_ON(stripe_io_ref(stripe)); + + /* + * If this is a reconstruct of a particular device, then + * reconstruct the respective chunk, else create parity chunk. + */ + if (pi > -1) { + stripe_zero_chunk(stripe, pi); + common_xor(stripe, stripe->io.size, 0, pi); + chunk_set(CHUNK(stripe, pi), DIRTY); + } else + parity_xor(stripe); + + return stripe_chunks_rw(stripe); +} + +/* Read/write a recovery stripe. */ +static int stripe_recover_rw(struct stripe *stripe) +{ + int r = 0, sync = 0; + + /* Read/write flip-flop. */ + if (TestClearStripeRBW(stripe)) { + SetStripeMerged(stripe); + stripe->key = stripe->recover->pos; + r = stripe_recover_read(stripe, dev_for_parity(stripe, &sync)); + BUG_ON(!r); + } else if (TestClearStripeMerged(stripe)) { + r = stripe_recover_write(stripe, dev_for_parity(stripe, &sync)); + BUG_ON(!r); + } + + BUG_ON(sync); + return r; +} + +/* Recover bandwidth available ?. */ +static int recover_bandwidth(struct raid_set *rs) +{ + int r, work; + + /* On reset or when bios delayed -> allow recovery. */ + r = recover_io_reset(rs); + if (r || RSBandwidth(rs)) + goto out; + + work = atomic_read(rs->recover.io_count + IO_WORK); + if (work) { + /* Pay attention to larger recover stripe size. */ + int recover = atomic_read(rs->recover.io_count + IO_RECOVER) * + rs->recover.io_size / rs->set.io_size; + + /* + * Don't use more than given bandwidth + * of the work io for recovery. + */ + if (recover > work / rs->recover.bandwidth_work) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_NO_BANDWIDTH); + return 0; + } + } + +out: + atomic_inc(rs->stats + S_BANDWIDTH); /* REMOVEME: statistics. */ + return 1; +} + +/* Try to get a region to recover. */ +static int stripe_recover_get_region(struct stripe *stripe) +{ + struct raid_set *rs = RS(stripe->sc); + struct recover *rec = &rs->recover; + struct recover_addr *addr = stripe->recover; + struct dm_dirty_log *dl = rec->dl; + struct dm_rh_client *rh = rec->rh; + + BUG_ON(!dl); + BUG_ON(!rh); + + /* Return, that we have region first to finish it during suspension. */ + if (addr->reg) + return 1; + + if (RSSuspend(rs)) + return -EPERM; + + if (dl->type->get_sync_count(dl) >= rec->nr_regions) + return -ENOENT; + + /* If we don't have enough bandwidth, we don't proceed recovering. */ + if (!recover_bandwidth(rs)) + return -EAGAIN; + + /* Start quiescing a region. */ + dm_rh_recovery_prepare(rh); + addr->reg = dm_rh_recovery_start(rh); + if (!addr->reg) + return -EAGAIN; + + addr->pos = dm_rh_region_to_sector(rh, dm_rh_get_region_key(addr->reg)); + addr->end = addr->pos + dm_rh_get_region_size(rh); + + /* + * Take one global io reference out for the + * whole region, which is going to be released + * when the region is completely done with. + */ + io_get(rs); + return 0; +} + +/* Update region hash state. */ +enum recover_type { REC_FAILURE = 0, REC_SUCCESS = 1 }; +static void recover_rh_update(struct stripe *stripe, enum recover_type success) +{ + struct recover_addr *addr = stripe->recover; + struct raid_set *rs = RS(stripe->sc); + struct recover *rec = &rs->recover; + + if (!addr->reg) { + DMERR("%s- Called w/o region", __func__); + return; + } + + dm_rh_recovery_end(addr->reg, success); + if (success) + rec->nr_regions_recovered++; + + addr->reg = NULL; + + /* + * Completely done with this region -> + * release the 1st io reference. + */ + io_put(rs); +} + +/* Set start of recovery state. */ +static void set_start_recovery(struct raid_set *rs) +{ + /* Initialize recovery. */ + rs->recover.start_jiffies = jiffies; + rs->recover.end_jiffies = 0; +} + +/* Set end of recovery state. */ +static void set_end_recovery(struct raid_set *rs) +{ + ClearRSRecover(rs); + rs->set.dev_to_init = -1; + + /* Check for jiffies overrun. */ + rs->recover.end_jiffies = jiffies; + if (rs->recover.end_jiffies < rs->recover.start_jiffies) + rs->recover.end_jiffies = ~0; +} + +/* Handle recovery on one recovery stripe. */ +static int _do_recovery(struct stripe *stripe) +{ + int r; + struct raid_set *rs = RS(stripe->sc); + struct recover_addr *addr = stripe->recover; + + /* If recovery is active -> return. */ + if (stripe_io_ref(stripe)) + return 1; + + /* IO error is fatal for recovery -> stop it. */ + if (unlikely(StripeError(stripe))) + goto err; + + /* Recovery end required. */ + if (!RSRecover(rs)) + goto err; + + /* Get a region to recover. */ + r = stripe_recover_get_region(stripe); + switch (r) { + case 0: /* Got a new region: flag initial read before write. */ + SetStripeRBW(stripe); + case 1: /* Have a region in the works. */ + break; + case -EAGAIN: + /* No bandwidth/quiesced region yet, try later. */ + if (!io_ref(rs)) + wake_do_raid_delayed(rs, HZ / 4); + case -EPERM: + /* Suspend. */ + return 1; + case -ENOENT: /* No more regions to recover. */ + schedule_work(&rs->io.ws_do_table_event); + return 0; + default: + BUG(); + } + + /* Read/write a recover stripe. */ + r = stripe_recover_rw(stripe); + if (r) + /* IO initiated. */ + return 1; + + /* Read and write finished-> update recovery position within region. */ + addr->pos += stripe->io.size; + + /* If we're at end of region, update region hash. */ + if (addr->pos >= addr->end || + addr->pos >= rs->set.sectors_per_dev) + recover_rh_update(stripe, REC_SUCCESS); + else + /* Prepare to read next region segment. */ + SetStripeRBW(stripe); + + /* Schedule myself for another round... */ + wake_do_raid(rs); + return 1; + +err: + /* FIXME: rather try recovering other regions on error? */ + rs_check_degrade(stripe); + recover_rh_update(stripe, REC_FAILURE); + + /* Check state of partially recovered array. */ + if (RSDegraded(rs) && !RSDead(rs) && + rs->set.dev_to_init != -1 && + rs->set.ei != rs->set.dev_to_init) + /* Broken drive != drive to recover -> FATAL. */ + SetRSDead(rs); + + if (StripeError(stripe)) { + char buf[BDEVNAME_SIZE]; + + DMERR("stopping recovery due to " + "ERROR on /dev/%s, stripe at offset %llu", + bdevname(rs->dev[rs->set.ei].dev->bdev, buf), + (unsigned long long) stripe->key); + + } + + /* Make sure, that all quiesced regions get released. */ + while (addr->reg) { + dm_rh_recovery_end(addr->reg, -EIO); + addr->reg = dm_rh_recovery_start(rs->recover.rh); + } + + return 0; +} + +/* Called by main io daemon to recover regions. */ +static void do_recovery(struct raid_set *rs) +{ + if (RSRecover(rs)) { + int r = 0; + struct stripe *stripe; + + list_for_each_entry(stripe, &rs->recover.stripes, + lists[LIST_RECOVER]) + r += _do_recovery(stripe); + + if (!r) { + set_end_recovery(rs); + stripe_recover_free(rs); + } + } +} + +/* + * END recovery functions + */ + +/* End io process all stripes handed in by endio() callback. */ +static void _do_endios(struct raid_set *rs, struct stripe *stripe, + struct list_head *flush_list) +{ + /* First unlock all required chunks. */ + stripe_chunks_unlock(stripe); + + /* + * If an io error on a stripe occured, degrade the RAID set + * and try to endio as many bios as possible. If any bios can't + * be endio processed, requeue the stripe (stripe_ref() != 0). + */ + if (TestClearStripeError(stripe)) { + /* + * FIXME: if read, rewrite the failed chunk after reconstruction + * in order to trigger disk bad sector relocation. + */ + rs_check_degrade(stripe); /* Resets ChunkError(). */ + ClearStripeReconstruct(stripe); + ClearStripeReconstructed(stripe); + } + + /* Got to reconstruct a missing chunk. */ + if (StripeReconstruct(stripe)) { + /* + * (*2*) We use StripeReconstruct() to allow for + * all chunks to be xored into the reconstructed + * one (see chunk_must_xor()). + */ + stripe_reconstruct(stripe); + + /* + * (*3*) Now we reset StripeReconstruct() and flag + * StripeReconstructed() to show to stripe_rw(), + * that we have reconstructed a missing chunk. + */ + ClearStripeReconstruct(stripe); + SetStripeReconstructed(stripe); + + /* FIXME: reschedule to be written in case of read. */ + // if (!StripeRBW(stripe)) { + // chunk_set(CHUNK(stripe, pr), DIRTY); + // stripe_chunks_rw(stripe); + // } + } + + /* + * Now that we eventually got a complete stripe, we + * can process the rest of the end ios on reads. + */ + stripe_endio(READ, stripe); + + /* End io all merged writes. */ + if (TestClearStripeMerged(stripe)) + stripe_endio(WRITE_MERGED, stripe); + + /* If RAID set is dead -> fail any ios to dead drives. */ + if (RSDead(rs)) { + DMERR_LIMIT("RAID set dead: failing ios to dead devices"); + stripe_fail_io(stripe); + } + + /* + * We have stripe references still, + * beacuse of read befeore writes or IO errors -> + * got to put on flush list for processing. + */ + if (stripe_ref(stripe)) { + BUG_ON(!list_empty(stripe->lists + LIST_LRU)); + list_add_tail(stripe->lists + LIST_FLUSH, flush_list); + atomic_inc(rs->stats + S_REQUEUE); /* REMOVEME: statistics. */ + } else + stripe_lru_add(stripe); +} + +/* Pop any endio stripes off of the endio list and belabour them. */ +static void do_endios(struct raid_set *rs) +{ + struct stripe_cache *sc = &rs->sc; + struct stripe *stripe; + /* IO flush list for sorted requeued stripes. */ + struct list_head flush_list; + + INIT_LIST_HEAD(&flush_list); + + while ((stripe = stripe_endio_pop(sc))) { + /* Avoid endio on stripes with newly io'ed chunks. */ + if (!stripe_io_ref(stripe)) + _do_endios(rs, stripe, &flush_list); + } + + /* + * Insert any requeued stripes in the proper + * order at the beginning of the io (flush) list. + */ + list_splice(&flush_list, sc->lists + LIST_FLUSH); +} + +/* Flush any stripes on the io list. */ +static void do_flush(struct raid_set *rs) +{ + struct stripe *stripe; + + while ((stripe = stripe_io_pop(&rs->sc))) + stripe_rw(stripe); /* Read/write stripe. */ +} + +/* Stripe cache resizing. */ +static void do_sc_resize(struct raid_set *rs) +{ + unsigned set = atomic_read(&rs->sc.stripes_to_set); + + if (set) { + unsigned cur = atomic_read(&rs->sc.stripes); + int r = (set > cur) ? sc_grow(&rs->sc, set - cur, SC_GROW) : + sc_shrink(&rs->sc, cur - set); + + /* Flag end of resizeing if ok. */ + if (!r) + atomic_set(&rs->sc.stripes_to_set, 0); + } +} + +/* + * Process all ios + * + * We do different things with the io depending + * on the state of the region that it is in: + * + * o reads: hang off stripe cache or postpone if full + * + * o writes: + * + * CLEAN/DIRTY/NOSYNC: increment pending and hang io off stripe's stripe set. + * In case stripe cache is full or busy, postpone the io. + * + * RECOVERING: delay the io until recovery of the region completes. + * + */ +static void do_ios(struct raid_set *rs, struct bio_list *ios) +{ + int r; + unsigned flush = 0, delay = 0; + sector_t sector; + struct dm_rh_client *rh = rs->recover.rh; + struct bio *bio; + struct bio_list reject; + + bio_list_init(&reject); + + /* + * Classify each io: + * o delay writes to recovering regions (let reads go through) + * o queue io to all other regions + */ + while ((bio = bio_list_pop(ios))) { + /* + * In case we get a barrier bio, push it back onto + * the input queue unless all work queues are empty + * and the stripe cache is inactive. + */ + if (unlikely(bio->bi_rw & REQ_FLUSH)) { + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + S_BARRIER); + if (delay || + !list_empty(rs->sc.lists + LIST_FLUSH) || + !bio_list_empty(&reject) || + sc_active(&rs->sc)) { + bio_list_push(ios, bio); + break; + } + } + + /* Check for recovering regions. */ + sector = _sector(rs, bio); + r = region_state(rs, sector, DM_RH_RECOVERING); + if (unlikely(r && bio_data_dir(bio) == WRITE)) { + delay++; + /* Wait writing to recovering regions. */ + dm_rh_delay_by_region(rh, bio, + dm_rh_sector_to_region(rh, + sector)); + /* REMOVEME: statistics.*/ + atomic_inc(rs->stats + S_DELAYED_BIOS); + atomic_inc(rs->stats + S_SUM_DELAYED_BIOS); + + /* Force bandwidth tests in recovery. */ + SetRSBandwidth(rs); + } else { + /* + * Process ios to non-recovering regions by queueing + * them to stripes (does dm_rh_inc()) for writes). + */ + flush += stripe_queue_bio(rs, bio, &reject); + } + } + + if (flush) { + /* FIXME: better error handling. */ + r = dm_rh_flush(rh); /* Writes got queued -> flush dirty log. */ + if (r) + DMERR_LIMIT("dirty log flush"); + } + + /* Merge any rejected bios back to the head of the input list. */ + bio_list_merge_head(ios, &reject); +} + +/* Send an event in case we're getting too busy. */ +static void do_busy_event(struct raid_set *rs) +{ + if (sc_busy(rs)) { + if (!TestSetRSScBusy(rs)) + schedule_work(&rs->io.ws_do_table_event); + } + + ClearRSScBusy(rs); +} + +/* Throw an event. */ +static void do_table_event(struct work_struct *ws) +{ + struct raid_set *rs = container_of(ws, struct raid_set, + io.ws_do_table_event); + dm_table_event(rs->ti->table); +} + + +/*----------------------------------------------------------------- + * RAID daemon + *---------------------------------------------------------------*/ +/* + * o belabour all end ios + * o update the region hash states + * o optionally shrink the stripe cache + * o optionally do recovery + * o unplug any component raid devices with queued bios + * o grab the input queue + * o work an all requeued or new ios and perform stripe cache flushs + * o unplug any component raid devices with queued bios + * o check, if the stripe cache gets too busy and throw an event if so + */ +static void do_raid(struct work_struct *ws) +{ + struct raid_set *rs = container_of(ws, struct raid_set, + io.dws_do_raid.work); + struct bio_list *ios = &rs->io.work, *ios_in = &rs->io.in; + struct blk_plug plug; + + /* + * We always need to end io, so that ios can get errored in + * case the set failed and the region counters get decremented + * before we update region hash states and go any further. + */ + do_endios(rs); + dm_rh_update_states(rs->recover.rh, 1); + + /* + * Now that we've end io'd, which may have put stripes on the LRU list + * to allow for shrinking, we resize the stripe cache if requested. + */ + do_sc_resize(rs); + + /* Try to recover regions. */ + blk_start_plug(&plug); + do_recovery(rs); + blk_finish_plug(&plug); /* Unplug the queue */ + + /* Quickly grab all new ios queued and add them to the work list. */ + mutex_lock(&rs->io.in_lock); + bio_list_merge(ios, ios_in); + bio_list_init(ios_in); + mutex_unlock(&rs->io.in_lock); + + blk_start_plug(&plug); + if (!bio_list_empty(ios)) + do_ios(rs, ios); /* Got ios to work into the cache. */ + + do_flush(rs); /* Flush any stripes on io list. */ + blk_finish_plug(&plug); /* Unplug the queue */ + do_busy_event(rs); /* Check if we got too busy. */ +} + +/* + * Callback for region hash to dispatch + * delayed bios queued to recovered regions + * (gets called via dm_rh_update_states()). + */ +static void dispatch_delayed_bios(void *context, struct bio_list *bl) +{ + struct raid_set *rs = context; + struct bio *bio; + + /* REMOVEME: statistics; decrement pending delayed bios counter. */ + bio_list_for_each(bio, bl) + atomic_dec(rs->stats + S_DELAYED_BIOS); + + /* Merge region hash private list to work list. */ + bio_list_merge_head(&rs->io.work, bl); + bio_list_init(bl); + ClearRSBandwidth(rs); +} + +/************************************************************* + * Constructor helpers + *************************************************************/ +/* Calculate MB/sec. */ +static unsigned mbpers(struct raid_set *rs, unsigned speed) +{ + return to_bytes(speed * rs->set.data_devs * + rs->recover.io_size * HZ >> 10) >> 10; +} + +/* + * Discover fastest xor algorithm and # of chunks combination. + */ +/* Calculate speed for algorithm and # of chunks. */ +static unsigned xor_speed(struct stripe *stripe) +{ + unsigned r = 0; + unsigned long j; + + /* Wait for next tick. */ + for (j = jiffies; j == jiffies; ) + ; + + /* Do xors for a full tick. */ + for (j = jiffies; j == jiffies; ) { + mb(); + common_xor(stripe, stripe->io.size, 0, 0); + mb(); + r++; + } + + return r; +} + +/* Optimize xor algorithm for this RAID set. */ +static unsigned xor_optimize(struct raid_set *rs) +{ + unsigned chunks_max = 2, p = rs->set.raid_devs, speed_max = 0; + struct xor_func *f = ARRAY_END(xor_funcs), *f_max = NULL; + struct stripe *stripe; + + BUG_ON(list_empty(&rs->recover.stripes)); + stripe = list_first_entry(&rs->recover.stripes, struct stripe, + lists[LIST_RECOVER]); + + /* Must set uptodate so that xor() will belabour chunks. */ + while (p--) + SetChunkUptodate(CHUNK(stripe, p)); + + /* Try all xor functions. */ + while (f-- > xor_funcs) { + unsigned speed; + + /* Set actual xor function for common_xor(). */ + rs->xor.f = f; + rs->xor.chunks = (f->f == xor_blocks_wrapper ? + (MAX_XOR_BLOCKS + 1) : XOR_CHUNKS_MAX) + 1; + + while (rs->xor.chunks-- > 2) { + speed = xor_speed(stripe); + if (speed > speed_max) { + speed_max = speed; + chunks_max = rs->xor.chunks; + f_max = f; + } + } + } + + /* Memorize optimum parameters. */ + rs->xor.f = f_max; + rs->xor.chunks = chunks_max; + return speed_max; +} + +/* + * Allocate a RAID context (a RAID set) + */ +/* Structure for variable RAID parameters. */ +struct variable_parms { + int bandwidth; + int bandwidth_parm; + int chunk_size; + int chunk_size_parm; + int io_size; + int io_size_parm; + int stripes; + int stripes_parm; + int recover_io_size; + int recover_io_size_parm; + int raid_parms; + int recovery; + int recovery_stripes; + int recovery_stripes_parm; +}; + +static struct raid_set * +context_alloc(struct raid_type *raid_type, struct variable_parms *p, + unsigned raid_devs, sector_t sectors_per_dev, + struct dm_target *ti, unsigned dl_parms, char **argv) +{ + int r; + size_t len; + sector_t region_size, ti_len; + struct raid_set *rs = NULL; + struct dm_dirty_log *dl; + struct recover *rec; + + /* + * Create the dirty log + * + * We need to change length for the dirty log constructor, + * because we want an amount of regions for all stripes derived + * from the single device size, so that we can keep region + * size = 2^^n independant of the number of devices + */ + ti_len = ti->len; + ti->len = sectors_per_dev; + dl = dm_dirty_log_create(argv[0], ti, NULL, dl_parms, argv + 2); + ti->len = ti_len; + if (!dl) + goto bad_dirty_log; + + /* Chunk size *must* be smaller than region size. */ + region_size = dl->type->get_region_size(dl); + if (p->chunk_size > region_size) + goto bad_chunk_size; + + /* Recover io size *must* be smaller than region size as well. */ + if (p->recover_io_size > region_size) + goto bad_recover_io_size; + + /* Size and allocate the RAID set structure. */ + len = sizeof(*rs->data) + sizeof(*rs->dev); + if (dm_array_too_big(sizeof(*rs), len, raid_devs)) + goto bad_array; + + len = sizeof(*rs) + raid_devs * len; + rs = kzalloc(len, GFP_KERNEL); + if (!rs) + goto bad_alloc; + + rec = &rs->recover; + atomic_set(&rs->io.in_process, 0); + atomic_set(&rs->io.in_process_max, 0); + rec->io_size = p->recover_io_size; + + /* Pointer to data array. */ + rs->data = (unsigned long **) + ((void *) rs->dev + raid_devs * sizeof(*rs->dev)); + rec->dl = dl; + rs->set.raid_devs = raid_devs; + rs->set.data_devs = raid_devs - raid_type->parity_devs; + rs->set.raid_type = raid_type; + + rs->set.raid_parms = p->raid_parms; + rs->set.chunk_size_parm = p->chunk_size_parm; + rs->set.io_size_parm = p->io_size_parm; + rs->sc.stripes_parm = p->stripes_parm; + rec->io_size_parm = p->recover_io_size_parm; + rec->bandwidth_parm = p->bandwidth_parm; + rec->recovery = p->recovery; + rec->recovery_stripes = p->recovery_stripes; + + /* + * Set chunk and io size and respective shifts + * (used to avoid divisions) + */ + rs->set.chunk_size = p->chunk_size; + rs->set.chunk_shift = ffs(p->chunk_size) - 1; + + rs->set.io_size = p->io_size; + rs->set.io_mask = p->io_size - 1; + /* Mask to adjust address key in case io_size != chunk_size. */ + rs->set.io_inv_mask = (p->chunk_size - 1) & ~rs->set.io_mask; + + rs->set.sectors_per_dev = sectors_per_dev; + + rs->set.ei = -1; /* Indicate no failed device. */ + atomic_set(&rs->set.failed_devs, 0); + + rs->ti = ti; + + atomic_set(rec->io_count + IO_WORK, 0); + atomic_set(rec->io_count + IO_RECOVER, 0); + + /* Initialize io lock and queues. */ + mutex_init(&rs->io.in_lock); + bio_list_init(&rs->io.in); + bio_list_init(&rs->io.work); + + init_waitqueue_head(&rs->io.suspendq); /* Suspend waiters (dm-io). */ + + rec->nr_regions = dm_sector_div_up(sectors_per_dev, region_size); + rec->rh = dm_region_hash_create(rs, dispatch_delayed_bios, + wake_dummy, wake_do_raid, 0, p->recovery_stripes, + dl, region_size, rec->nr_regions); + if (IS_ERR(rec->rh)) + goto bad_rh; + + /* Initialize stripe cache. */ + r = sc_init(rs, p->stripes); + if (r) + goto bad_sc; + + /* REMOVEME: statistics. */ + stats_reset(rs); + ClearRSDevelStats(rs); /* Disnable development status. */ + return rs; + +bad_dirty_log: + TI_ERR_RET("Error creating dirty log", ERR_PTR(-ENOMEM)); + +bad_chunk_size: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Chunk size larger than region size", ERR_PTR(-EINVAL)); + +bad_recover_io_size: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Recover stripe io size larger than region size", + ERR_PTR(-EINVAL)); + +bad_array: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Arry too big", ERR_PTR(-EINVAL)); + +bad_alloc: + dm_dirty_log_destroy(dl); + TI_ERR_RET("Cannot allocate raid context", ERR_PTR(-ENOMEM)); + +bad_rh: + dm_dirty_log_destroy(dl); + ti->error = DM_MSG_PREFIX "Error creating dirty region hash"; + goto free_rs; + +bad_sc: + dm_region_hash_destroy(rec->rh); /* Destroys dirty log too. */ + sc_exit(&rs->sc); + ti->error = DM_MSG_PREFIX "Error creating stripe cache"; +free_rs: + kfree(rs); + return ERR_PTR(-ENOMEM); +} + +/* Free a RAID context (a RAID set). */ +static void context_free(struct raid_set *rs, unsigned p) +{ + while (p--) + dm_put_device(rs->ti, rs->dev[p].dev); + + sc_exit(&rs->sc); + dm_region_hash_destroy(rs->recover.rh); /* Destroys dirty log too. */ + kfree(rs); +} + +/* Create work queue and initialize delayed work. */ +static int rs_workqueue_init(struct raid_set *rs) +{ + struct dm_target *ti = rs->ti; + + rs->io.wq = create_singlethread_workqueue(DAEMON); + if (!rs->io.wq) + TI_ERR_RET("failed to create " DAEMON, -ENOMEM); + + INIT_DELAYED_WORK(&rs->io.dws_do_raid, do_raid); + INIT_WORK(&rs->io.ws_do_table_event, do_table_event); + return 0; +} + +/* Return pointer to raid_type structure for raid name. */ +static struct raid_type *get_raid_type(char *name) +{ + struct raid_type *r = ARRAY_END(raid_types); + + while (r-- > raid_types) { + if (!strcmp(r->name, name)) + return r; + } + + return NULL; +} + +/* FIXME: factor out to dm core. */ +static int multiple(sector_t a, sector_t b, sector_t *n) +{ + sector_t r = a; + + sector_div(r, b); + *n = r; + return a == r * b; +} + +/* Log RAID set information to kernel log. */ +static void rs_log(struct raid_set *rs, unsigned speed) +{ + unsigned p; + char buf[BDEVNAME_SIZE]; + + for (p = 0; p < rs->set.raid_devs; p++) + DMINFO("/dev/%s is raid disk %u%s", + bdevname(rs->dev[p].dev->bdev, buf), p, + (p == rs->set.pi) ? " (parity)" : ""); + + DMINFO("%d/%d/%d sectors chunk/io/recovery size, %u stripes\n" + "algorithm \"%s\", %u chunks with %uMB/s\n" + "%s set with net %u/%u devices", + rs->set.chunk_size, rs->set.io_size, rs->recover.io_size, + atomic_read(&rs->sc.stripes), + rs->xor.f->name, rs->xor.chunks, mbpers(rs, speed), + rs->set.raid_type->descr, rs->set.data_devs, rs->set.raid_devs); +} + +/* Get all devices and offsets. */ +static int dev_parms(struct raid_set *rs, char **argv, int *p) +{ + struct dm_target *ti = rs->ti; + + for (*p = 0; *p < rs->set.raid_devs; (*p)++, argv += 2) { + int r; + unsigned long long tmp; + struct raid_dev *dev = rs->dev + *p; + + /* Get offset and device. */ + if (sscanf(argv[1], "%llu", &tmp) != 1 || + tmp > rs->set.sectors_per_dev) + TI_ERR("Invalid RAID device offset parameter"); + + dev->start = tmp; + r = dm_get_device(ti, *argv, dm_table_get_mode(ti->table), &dev->dev); + if (r) + TI_ERR_RET("RAID device lookup failure", r); + + r = raid_dev_lookup(rs, dev); + if (r != -ENODEV && r < *p) { + (*p)++; /* Ensure dm_put_device() on actual device. */ + TI_ERR_RET("Duplicate RAID device", -ENXIO); + } + } + + return 0; +} + +/* Set recovery bandwidth. */ +static void +recover_set_bandwidth(struct raid_set *rs, unsigned bandwidth) +{ + rs->recover.bandwidth = bandwidth; + rs->recover.bandwidth_work = 100 / bandwidth; +} + +/* Handle variable number of RAID parameters. */ +static int get_raid_variable_parms(struct dm_target *ti, char **argv, + struct variable_parms *vp) +{ + int p, value; + struct { + int action; /* -1: skip, 0: no pwer2 check, 1: power2 check */ + char *errmsg; + int min, max; + int *var, *var2, *var3; + } argctr[] = { + { 1, + "Invalid chunk size; must be -1 or 2^^n and <= 16384", + IO_SIZE_MIN, CHUNK_SIZE_MAX, + &vp->chunk_size_parm, &vp->chunk_size, &vp->io_size }, + { 0, + "Invalid number of stripes: must be -1 or >= 8 and <= 16384", + STRIPES_MIN, STRIPES_MAX, + &vp->stripes_parm, &vp->stripes, NULL }, + { 1, + "Invalid io size; must -1 or >= 8, 2^^n and less equal " + "min(BIO_MAX_SECTORS/2, chunk size)", + IO_SIZE_MIN, 0, /* Needs to be updated in loop below. */ + &vp->io_size_parm, &vp->io_size, NULL }, + { 1, + "Invalid recovery io size; must be -1 or " + "2^^n and less equal BIO_MAX_SECTORS/2", + RECOVER_IO_SIZE_MIN, BIO_MAX_SECTORS / 2, + &vp->recover_io_size_parm, &vp->recover_io_size, NULL }, + { 0, + "Invalid recovery bandwidth percentage; " + "must be -1 or > 0 and <= 100", + BANDWIDTH_MIN, BANDWIDTH_MAX, + &vp->bandwidth_parm, &vp->bandwidth, NULL }, + /* Handle sync argument seperately in loop. */ + { -1, + "Invalid recovery switch; must be \"sync\" or \"nosync\"" }, + { 0, + "Invalid number of recovery stripes;" + "must be -1, > 0 and <= 16384", + RECOVERY_STRIPES_MIN, RECOVERY_STRIPES_MAX, + &vp->recovery_stripes_parm, &vp->recovery_stripes, NULL }, + }, *varp; + + /* Fetch # of variable raid parameters. */ + if (sscanf(*(argv++), "%d", &vp->raid_parms) != 1 || + !range_ok(vp->raid_parms, 0, 7)) + TI_ERR("Bad variable raid parameters number"); + + /* Preset variable RAID parameters. */ + vp->chunk_size = CHUNK_SIZE_DEFAULT; + vp->io_size = IO_SIZE_DEFAULT; + vp->stripes = STRIPES_DEFAULT; + vp->recover_io_size = RECOVER_IO_SIZE_DEFAULT; + vp->bandwidth = BANDWIDTH_DEFAULT; + vp->recovery = 1; + vp->recovery_stripes = RECOVERY_STRIPES_DEFAULT; + + /* Walk the array of argument constraints for all given ones. */ + for (p = 0, varp = argctr; p < vp->raid_parms; p++, varp++) { + BUG_ON(varp >= ARRAY_END(argctr)); + + /* Special case for "[no]sync" string argument. */ + if (varp->action < 0) { + if (!strcmp(*argv, "sync")) + ; + else if (!strcmp(*argv, "nosync")) + vp->recovery = 0; + else + TI_ERR(varp->errmsg); + + argv++; + continue; + } + + /* + * Special case for io_size depending + * on previously set chunk size. + */ + if (p == 2) + varp->max = min(BIO_MAX_SECTORS / 2, vp->chunk_size); + + if (sscanf(*(argv++), "%d", &value) != 1 || + (value != -1 && + ((varp->action && !POWER_OF_2(value)) || + !range_ok(value, varp->min, varp->max)))) + TI_ERR(varp->errmsg); + + *varp->var = value; + if (value != -1) { + if (varp->var2) + *varp->var2 = value; + if (varp->var3) + *varp->var3 = value; + } + } + + return 0; +} + +/* Parse optional locking parameters. */ +static int get_raid_locking_parms(struct dm_target *ti, char **argv, + int *locking_parms, + struct dm_raid45_locking_type **locking_type) +{ + if (!strnicmp(argv[0], "locking", strlen(argv[0]))) { + char *lckstr = argv[1]; + size_t lcksz = strlen(lckstr); + + if (!strnicmp(lckstr, "none", lcksz)) { + *locking_type = &locking_none; + *locking_parms = 2; + } else if (!strnicmp(lckstr, "cluster", lcksz)) { + DMERR("locking type \"%s\" not yet implemented", + lckstr); + return -EINVAL; + } else { + DMERR("unknown locking type \"%s\"", lckstr); + return -EINVAL; + } + } + + *locking_parms = 0; + *locking_type = &locking_none; + return 0; +} + +/* Set backing device read ahead properties of RAID set. */ +static void rs_set_read_ahead(struct raid_set *rs, + unsigned sectors, unsigned stripes) +{ + unsigned ra_pages = dm_div_up(sectors, SECTORS_PER_PAGE); + struct mapped_device *md = dm_table_get_md(rs->ti->table); + struct backing_dev_info *bdi = &dm_disk(md)->queue->backing_dev_info; + + /* Set read-ahead for the RAID set and the component devices. */ + if (ra_pages) { + unsigned p = rs->set.raid_devs; + + bdi->ra_pages = stripes * ra_pages * rs->set.data_devs; + + while (p--) { + struct request_queue *q = + bdev_get_queue(rs->dev[p].dev->bdev); + + q->backing_dev_info.ra_pages = ra_pages; + } + } + + dm_put(md); +} + +/* Set congested function. */ +static void rs_set_congested_fn(struct raid_set *rs) +{ + struct mapped_device *md = dm_table_get_md(rs->ti->table); + struct backing_dev_info *bdi = &dm_disk(md)->queue->backing_dev_info; + + /* Set congested function and data. */ + bdi->congested_fn = rs_congested; + bdi->congested_data = rs; + dm_put(md); +} + +/* + * Construct a RAID4/5 mapping: + * + * log_type #log_params \ + * raid_type [#parity_dev] #raid_variable_params \ + * [locking "none"/"cluster"] + * #raid_devs #dev_to_initialize [ ]{3,} + * + * log_type = "core"/"disk", + * #log_params = 1-3 (1-2 for core dirty log type, 3 for disk dirty log only) + * log_params = [dirty_log_path] region_size [[no]sync]) + * + * raid_type = "raid4", "raid5_la", "raid5_ra", "raid5_ls", "raid5_rs" + * + * #parity_dev = N if raid_type = "raid4" + * o N = -1: pick default = last device + * o N >= 0 and < #raid_devs: parity device index + * + * #raid_variable_params = 0-7; raid_params (-1 = default): + * [chunk_size [#stripes [io_size [recover_io_size \ + * [%recovery_bandwidth [recovery_switch [#recovery_stripes]]]]]]] + * o chunk_size (unit to calculate drive addresses; must be 2^^n, > 8 + * and <= CHUNK_SIZE_MAX) + * o #stripes is number of stripes allocated to stripe cache + * (must be > 1 and < STRIPES_MAX) + * o io_size (io unit size per device in sectors; must be 2^^n and > 8) + * o recover_io_size (io unit size per device for recovery in sectors; + must be 2^^n, > SECTORS_PER_PAGE and <= region_size) + * o %recovery_bandwith is the maximum amount spend for recovery during + * application io (1-100%) + * o recovery switch = [sync|nosync] + * o #recovery_stripes is the number of recovery stripes used for + * parallel recovery of the RAID set + * If raid_variable_params = 0, defaults will be used. + * Any raid_variable_param can be set to -1 to apply a default + * + * #raid_devs = N (N >= 3) + * + * #dev_to_initialize = N + * -1: initialize parity on all devices + * >= 0 and < #raid_devs: initialize raid_path; used to force reconstruction + * of a failed devices content after replacement + * + * = device_path (eg, /dev/sdd1) + * = begin at offset on + * + */ +#define MIN_PARMS 13 +static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv) +{ + int dev_to_init, dl_parms, i, locking_parms, + parity_parm, pi = -1, r, raid_devs; + unsigned speed; + sector_t tmp, sectors_per_dev; + struct dm_raid45_locking_type *locking; + struct raid_set *rs; + struct raid_type *raid_type; + struct variable_parms parms; + + /* Ensure minimum number of parameters. */ + if (argc < MIN_PARMS) + TI_ERR("Not enough parameters"); + + /* Fetch # of dirty log parameters. */ + if (sscanf(argv[1], "%d", &dl_parms) != 1 || + !range_ok(dl_parms, 1, 4711)) /* ;-) */ + TI_ERR("Bad dirty log parameters number"); + + /* Check raid_type. */ + raid_type = get_raid_type(argv[dl_parms + 2]); + if (!raid_type) + TI_ERR("Bad raid type"); + + /* In case of RAID4, parity drive is selectable. */ + parity_parm = !!(raid_type->level == raid4); + + /* Handle variable number of RAID parameters. */ + r = get_raid_variable_parms(ti, argv + dl_parms + parity_parm + 3, + &parms); + if (r) + return r; + + /* Handle any locking parameters. */ + r = get_raid_locking_parms(ti, + argv + dl_parms + parity_parm + + parms.raid_parms + 4, + &locking_parms, &locking); + if (r) + return r; + + /* # of raid devices. */ + i = dl_parms + parity_parm + parms.raid_parms + locking_parms + 4; + if (sscanf(argv[i], "%d", &raid_devs) != 1 || + raid_devs < raid_type->minimal_devs) + TI_ERR("Invalid number of raid devices"); + + /* In case of RAID4, check parity drive index is in limits. */ + if (raid_type->level == raid4) { + /* Fetch index of parity device. */ + if (sscanf(argv[dl_parms + 3], "%d", &pi) != 1 || + (pi != -1 && !range_ok(pi, 0, raid_devs - 1))) + TI_ERR("Invalid RAID4 parity device index"); + } + + /* + * Index of device to initialize starts at 0 + * + * o -1 -> don't initialize a selected device; + * initialize parity conforming to algorithm + * o 0..raid_devs-1 -> initialize respective device + * (used for reconstruction of a replaced device) + */ + if (sscanf(argv[dl_parms + parity_parm + parms.raid_parms + + locking_parms + 5], "%d", &dev_to_init) != 1 || + !range_ok(dev_to_init, -1, raid_devs - 1)) + TI_ERR("Invalid number for raid device to initialize"); + + /* Check # of raid device arguments. */ + if (argc - dl_parms - parity_parm - parms.raid_parms - 6 != + 2 * raid_devs) + TI_ERR("Wrong number of raid device/offset arguments"); + + /* + * Check that the table length is devisable + * w/o rest by (raid_devs - parity_devs) + */ + if (!multiple(ti->len, raid_devs - raid_type->parity_devs, + §ors_per_dev)) + TI_ERR("Target length not divisible by number of data devices"); + + /* + * Check that the device size is + * devisable w/o rest by chunk size + */ + if (!multiple(sectors_per_dev, parms.chunk_size, &tmp)) + TI_ERR("Device length not divisible by chunk_size"); + + /**************************************************************** + * Now that we checked the constructor arguments -> + * let's allocate the RAID set + ****************************************************************/ + rs = context_alloc(raid_type, &parms, raid_devs, sectors_per_dev, + ti, dl_parms, argv); + if (IS_ERR(rs)) + return PTR_ERR(rs); + + + rs->set.dev_to_init = rs->set.dev_to_init_parm = dev_to_init; + rs->set.pi = rs->set.pi_parm = pi; + + /* Set RAID4 parity drive index. */ + if (raid_type->level == raid4) + rs->set.pi = (pi == -1) ? rs->set.data_devs : pi; + + recover_set_bandwidth(rs, parms.bandwidth); + + /* Use locking type to lock stripe access. */ + rs->locking = locking; + + /* Get the device/offset tupels. */ + argv += dl_parms + 6 + parity_parm + parms.raid_parms; + r = dev_parms(rs, argv, &i); + if (r) + goto err; + + /* Set backing device information (eg. read ahead). */ + rs_set_read_ahead(rs, 2 * rs->set.chunk_size, 4 /* stripes */); + rs_set_congested_fn(rs); /* Set congested function. */ + SetRSCheckOverwrite(rs); /* Allow chunk overwrite checks. */ + speed = xor_optimize(rs); /* Select best xor algorithm. */ + + /* Set for recovery of any nosync regions. */ + if (parms.recovery) + SetRSRecover(rs); + else { + /* + * Need to free recovery stripe(s) here in case + * of nosync, because xor_optimize uses one. + */ + set_start_recovery(rs); + set_end_recovery(rs); + stripe_recover_free(rs); + } + + /* + * Make sure that dm core only hands maximum io size + * length down and pays attention to io boundaries. + */ + ti->max_io_len = rs->set.io_size; + ti->private = rs; + + /* Initialize work queue to handle this RAID set's io. */ + r = rs_workqueue_init(rs); + if (r) + goto err; + + rs_log(rs, speed); /* Log information about RAID set. */ + return 0; + +err: + context_free(rs, i); + return r; +} + +/* + * Destruct a raid mapping + */ +static void raid_dtr(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + + destroy_workqueue(rs->io.wq); + context_free(rs, rs->set.raid_devs); +} + +/* Raid mapping function. */ +static int raid_map(struct dm_target *ti, struct bio *bio) +{ + /* I don't want to waste stripe cache capacity. */ + if (bio_rw(bio) == READA) + return -EIO; + else { + struct raid_set *rs = ti->private; + + /* + * Get io reference to be waiting for to drop + * to zero on device suspension/destruction. + */ + io_get(rs); + bio->bi_sector -= ti->begin; /* Remap sector. */ + + /* Queue io to RAID set. */ + mutex_lock(&rs->io.in_lock); + bio_list_add(&rs->io.in, bio); + mutex_unlock(&rs->io.in_lock); + + /* Wake daemon to process input list. */ + wake_do_raid(rs); + + /* REMOVEME: statistics. */ + atomic_inc(rs->stats + (bio_data_dir(bio) == READ ? + S_BIOS_READ : S_BIOS_WRITE)); + return DM_MAPIO_SUBMITTED; /* Handle later. */ + } +} + +/* Device suspend. */ +static void raid_presuspend(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + struct dm_dirty_log *dl = rs->recover.dl; + + SetRSSuspend(rs); + + if (RSRecover(rs)) + dm_rh_stop_recovery(rs->recover.rh); + + cancel_delayed_work(&rs->io.dws_do_raid); + flush_workqueue(rs->io.wq); + wait_ios(rs); /* Wait for completion of all ios being processed. */ + + if (dl->type->presuspend && dl->type->presuspend(dl)) + /* FIXME: need better error handling. */ + DMWARN("log presuspend failed"); +} + +static void raid_postsuspend(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + struct dm_dirty_log *dl = rs->recover.dl; + + if (dl->type->postsuspend && dl->type->postsuspend(dl)) + /* FIXME: need better error handling. */ + DMWARN("log postsuspend failed"); + +} + +/* Device resume. */ +static void raid_resume(struct dm_target *ti) +{ + struct raid_set *rs = ti->private; + struct recover *rec = &rs->recover; + struct dm_dirty_log *dl = rec->dl; + + if (dl->type->resume && dl->type->resume(dl)) + /* Resume dirty log. */ + /* FIXME: need better error handling. */ + DMWARN("log resume failed"); + + rec->nr_regions_to_recover = + rec->nr_regions - dl->type->get_sync_count(dl); + + /* Restart any unfinished recovery. */ + if (RSRecover(rs)) { + set_start_recovery(rs); + dm_rh_start_recovery(rec->rh); + } + + ClearRSSuspend(rs); + wake_do_raid(rs); +} + +/* Return stripe cache size. */ +static unsigned sc_size(struct raid_set *rs) +{ + return to_sector(atomic_read(&rs->sc.stripes) * + (sizeof(struct stripe) + + (sizeof(struct stripe_chunk) + + (sizeof(struct page_list) + + to_bytes(rs->set.io_size) * + rs->set.raid_devs)) + + (rs->recover.end_jiffies ? + 0 : rs->recover.recovery_stripes * + to_bytes(rs->set.raid_devs * rs->recover.io_size)))); +} + +/* REMOVEME: status output for development. */ +static void raid_devel_stats(struct dm_target *ti, char *result, + unsigned *size, unsigned maxlen) +{ + unsigned sz = *size; + unsigned long j; + char buf[BDEVNAME_SIZE], *p; + struct stats_map *sm; + struct raid_set *rs = ti->private; + struct recover *rec = &rs->recover; + struct timespec ts; + + DMEMIT("%s %s %u\n", version, rs->xor.f->name, rs->xor.chunks); + DMEMIT("act_ios=%d ", io_ref(rs)); + DMEMIT("act_ios_max=%d\n", atomic_read(&rs->io.in_process_max)); + DMEMIT("act_stripes=%d ", sc_active(&rs->sc)); + DMEMIT("act_stripes_max=%d\n", + atomic_read(&rs->sc.active_stripes_max)); + + for (sm = stats_map; sm < ARRAY_END(stats_map); sm++) + DMEMIT("%s%d", sm->str, atomic_read(rs->stats + sm->type)); + + DMEMIT(" checkovr=%s\n", RSCheckOverwrite(rs) ? "on" : "off"); + DMEMIT("sc=%u/%u/%u/%u/%u/%u/%u\n", rs->set.chunk_size, + atomic_read(&rs->sc.stripes), rs->set.io_size, + rec->recovery_stripes, rec->io_size, rs->sc.hash.buckets, + sc_size(rs)); + + j = (rec->end_jiffies ? rec->end_jiffies : jiffies) - + rec->start_jiffies; + jiffies_to_timespec(j, &ts); + sprintf(buf, "%ld.%ld", ts.tv_sec, ts.tv_nsec); + p = strchr(buf, '.'); + p[3] = 0; + + DMEMIT("rg=%llu/%llu/%llu/%u %s\n", + (unsigned long long) rec->nr_regions_recovered, + (unsigned long long) rec->nr_regions_to_recover, + (unsigned long long) rec->nr_regions, rec->bandwidth, buf); + + *size = sz; +} + +static void raid_status(struct dm_target *ti, status_type_t type, + unsigned status_flags, char *result, unsigned maxlen) +{ + unsigned p, sz = 0; + char buf[BDEVNAME_SIZE]; + struct raid_set *rs = ti->private; + int raid_parms[] = { + rs->set.chunk_size_parm, + rs->sc.stripes_parm, + rs->set.io_size_parm, + rs->recover.io_size_parm, + rs->recover.bandwidth_parm, + -2, + rs->recover.recovery_stripes, + }; + + switch (type) { + case STATUSTYPE_INFO: + /* REMOVEME: statistics. */ + if (RSDevelStats(rs)) + raid_devel_stats(ti, result, &sz, maxlen); + + DMEMIT("%u ", rs->set.raid_devs); + + for (p = 0; p < rs->set.raid_devs; p++) + DMEMIT("%s ", + format_dev_t(buf, rs->dev[p].dev->bdev->bd_dev)); + + DMEMIT("1 "); + for (p = 0; p < rs->set.raid_devs; p++) { + DMEMIT("%c", !DevFailed(rs->dev + p) ? 'A' : 'D'); + + if (p == rs->set.pi) + DMEMIT("p"); + + if (rs->set.dev_to_init == p) + DMEMIT("i"); + } + + break; + case STATUSTYPE_TABLE: + sz = rs->recover.dl->type->status(rs->recover.dl, type, + result, maxlen); + DMEMIT("%s %u ", rs->set.raid_type->name, + rs->set.raid_parms); + + for (p = 0; p < rs->set.raid_parms; p++) { + if (raid_parms[p] > -2) + DMEMIT("%d ", raid_parms[p]); + else + DMEMIT("%s ", rs->recover.recovery ? + "sync" : "nosync"); + } + + DMEMIT("%u %d ", rs->set.raid_devs, rs->set.dev_to_init); + + for (p = 0; p < rs->set.raid_devs; p++) + DMEMIT("%s %llu ", + format_dev_t(buf, rs->dev[p].dev->bdev->bd_dev), + (unsigned long long) rs->dev[p].start); + } +} + +/* + * Message interface + */ +enum raid_msg_actions { + act_bw, /* Recovery bandwidth switch. */ + act_dev, /* Device failure switch. */ + act_overwrite, /* Stripe overwrite check. */ + act_stats, /* Development statistics switch. */ + act_sc, /* Stripe cache switch. */ + + act_on, /* Set entity on. */ + act_off, /* Set entity off. */ + act_reset, /* Reset entity. */ + + act_set = act_on, /* Set # absolute. */ + act_grow = act_off, /* Grow # by an amount. */ + act_shrink = act_reset, /* Shrink # by an amount. */ +}; + +/* Turn a delta into an absolute value. */ +static int _absolute(unsigned long action, int act, int r) +{ + /* Make delta absolute. */ + if (test_bit(act_set, &action)) + ; + else if (test_bit(act_grow, &action)) + r += act; + else if (test_bit(act_shrink, &action)) + r = act - r; + else + r = -EINVAL; + + return r; +} + + /* Change recovery io bandwidth. */ +static int bandwidth_change(struct dm_msg *msg, void *context) +{ + struct raid_set *rs = context; + int act = rs->recover.bandwidth; + int bandwidth = DM_MSG_INT_ARG(msg); + + if (range_ok(bandwidth, BANDWIDTH_MIN, BANDWIDTH_MAX)) { + /* Make delta bandwidth absolute. */ + bandwidth = _absolute(msg->action, act, bandwidth); + + /* Check range. */ + if (range_ok(bandwidth, BANDWIDTH_MIN, BANDWIDTH_MAX)) { + recover_set_bandwidth(rs, bandwidth); + return 0; + } + } + + set_bit(dm_msg_ret_arg, &msg->ret); + set_bit(dm_msg_ret_inval, &msg->ret); + return -EINVAL; +} + +/* Set/reset development feature flags. */ +static int devel_flags(struct dm_msg *msg, void *context) +{ + struct raid_set *rs = context; + + if (test_bit(act_on, &msg->action)) + return test_and_set_bit(msg->spec->parm, + &rs->io.flags) ? -EPERM : 0; + else if (test_bit(act_off, &msg->action)) + return test_and_clear_bit(msg->spec->parm, + &rs->io.flags) ? 0 : -EPERM; + else if (test_bit(act_reset, &msg->action)) { + if (test_bit(act_stats, &msg->action)) { + stats_reset(rs); + goto on; + } else if (test_bit(act_overwrite, &msg->action)) { +on: + set_bit(msg->spec->parm, &rs->io.flags); + return 0; + } + } + + return -EINVAL; +} + +/* Resize the stripe cache. */ +static int sc_resize(struct dm_msg *msg, void *context) +{ + int act, stripes; + struct raid_set *rs = context; + + /* Deny permission in case the daemon is still resizing!. */ + if (atomic_read(&rs->sc.stripes_to_set)) + return -EPERM; + + stripes = DM_MSG_INT_ARG(msg); + if (stripes > 0) { + act = atomic_read(&rs->sc.stripes); + + /* Make delta stripes absolute. */ + stripes = _absolute(msg->action, act, stripes); + + /* + * Check range and that the # of stripes changes. + * We leave the resizing to the wroker. + */ + if (range_ok(stripes, STRIPES_MIN, STRIPES_MAX) && + stripes != atomic_read(&rs->sc.stripes)) { + atomic_set(&rs->sc.stripes_to_set, stripes); + wake_do_raid(rs); + return 0; + } + } + + set_bit(dm_msg_ret_arg, &msg->ret); + set_bit(dm_msg_ret_inval, &msg->ret); + return -EINVAL; +} + +/* Parse the RAID message action. */ +/* + * 'ba[ndwidth] {se[t],g[row],sh[rink]} #' # e.g 'ba se 50' + * "o[verwrite] {on,of[f],r[eset]}' # e.g. 'o of' + * 'sta[tistics] {on,of[f],r[eset]}' # e.g. 'stat of' + * 'str[ipecache] {se[t],g[row],sh[rink]} #' # e.g. 'stripe set 1024' + * + */ +static int raid_message(struct dm_target *ti, unsigned argc, char **argv) +{ + /* Variables to store the parsed parameters im. */ + static int i[2]; + static unsigned long *i_arg[] = { + (unsigned long *) i + 0, + (unsigned long *) i + 1, + }; + + /* Declare all message option strings. */ + static char *str_sgs[] = { "set", "grow", "shrink" }; + static char *str_oor[] = { "on", "off", "reset" }; + + /* Declare all actions. */ + static unsigned long act_sgs[] = { act_set, act_grow, act_shrink }; + static unsigned long act_oor[] = { act_on, act_off, act_reset }; + + /* Bandwidth option. */ + static struct dm_message_option bw_opt = { 3, str_sgs, act_sgs }; + static struct dm_message_argument bw_args = { + 1, i_arg, { dm_msg_int_t } + }; + + static struct dm_message_argument null_args = { + 0, NULL, { dm_msg_int_t } + }; + + /* Overwrite and statistics option. */ + static struct dm_message_option ovr_stats_opt = { 3, str_oor, act_oor }; + + /* Sripecache option. */ + static struct dm_message_option stripe_opt = { 3, str_sgs, act_sgs }; + + /* Declare messages. */ + static struct dm_msg_spec specs[] = { + { "bandwidth", act_bw, &bw_opt, &bw_args, + 0, bandwidth_change }, + { "overwrite", act_overwrite, &ovr_stats_opt, &null_args, + RS_CHECK_OVERWRITE, devel_flags }, + { "statistics", act_stats, &ovr_stats_opt, &null_args, + RS_DEVEL_STATS, devel_flags }, + { "stripecache", act_sc, &stripe_opt, &bw_args, + 0, sc_resize }, + }; + + /* The message for the parser. */ + struct dm_msg msg = { + .num_specs = ARRAY_SIZE(specs), + .specs = specs, + }; + + return dm_message_parse(TARGET, &msg, ti->private, argc, argv); +} +/* + * END message interface + */ + +static struct target_type raid_target = { + .name = "raid45", + .version = {1, 0, 0}, + .module = THIS_MODULE, + .ctr = raid_ctr, + .dtr = raid_dtr, + .map = raid_map, + .presuspend = raid_presuspend, + .postsuspend = raid_postsuspend, + .resume = raid_resume, + .status = raid_status, + .message = raid_message, +}; + +static void init_exit(const char *bad_msg, const char *good_msg, int r) +{ + if (r) + DMERR("Failed to %sregister target [%d]", bad_msg, r); + else + DMINFO("%s %s", good_msg, version); +} + +static int __init dm_raid_init(void) +{ + int r = dm_register_target(&raid_target); + + init_exit("", "initialized", r); + return r; +} + +static void __exit dm_raid_exit(void) +{ + dm_unregister_target(&raid_target); + init_exit("un", "exit", 0); +} + +/* Module hooks. */ +module_init(dm_raid_init); +module_exit(dm_raid_exit); + +MODULE_DESCRIPTION(DM_NAME " raid4/5 target"); +MODULE_AUTHOR("Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("dm-raid4"); +MODULE_ALIAS("dm-raid5"); --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-raid4-5.h +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-raid4-5.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2006 Red Hat GmbH + * + * Module Author: Heinz Mauelshagen (Mauelshagen@RedHat.com) + * + * This file is released under the GPL. + * + */ + +#ifndef _DM_RAID45_H +#define _DM_RAID45_H + +/* Factor out to dm.h! */ +#define STR_LEN(ptr, str) ptr, str, strlen(ptr) + +enum lock_type { RAID45_EX, RAID45_SHARED }; + +struct dmraid45_locking_type { + /* Request a lock on a stripe. */ + void* (*lock)(sector_t key, enum lock_type type); + + /* Release a lock on a stripe. */ + void (*unlock)(void *lock_handle); + +}; + +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/BOM +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/BOM @@ -0,0 +1,3 @@ +Downloaded from: http://people.redhat.com/~heinzm/sw/dm/dm-raid45/ +Current Version: 2009.04.24 (2.6.30-rc3) +Comments: All of the patches to dmraid1/dm-log, etc are upstream. --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-message.h +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-message.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2007,2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen + * + * General device-mapper message interface argument parser. + * + * This file is released under the GPL. + * + */ + +#ifndef DM_MESSAGE_H +#define DM_MESSAGE_H + +/* Factor out to dm.h. */ +/* Reference to array end. */ +#define ARRAY_END(a) ((a) + ARRAY_SIZE(a)) + +/* Message return bits. */ +enum dm_message_return { + dm_msg_ret_ambiguous, /* Action ambiguous. */ + dm_msg_ret_inval, /* Action invalid. */ + dm_msg_ret_undef, /* Action undefined. */ + + dm_msg_ret_option, /* Option error. */ + dm_msg_ret_arg, /* Argument error. */ + dm_msg_ret_argcount, /* Argument count error. */ +}; + +/* Message argument type conversions. */ +enum dm_message_argument_type { + dm_msg_base_t, /* Basename string. */ + dm_msg_str_t, /* String. */ + dm_msg_int_t, /* Signed int. */ + dm_msg_uint_t, /* Unsigned int. */ + dm_msg_uint64_t, /* Unsigned int 64. */ +}; + +/* A message option. */ +struct dm_message_option { + unsigned num_options; + char **options; + unsigned long *actions; +}; + +/* Message arguments and types. */ +struct dm_message_argument { + unsigned num_args; + unsigned long **ptr; + enum dm_message_argument_type types[]; +}; + +/* Client message. */ +struct dm_msg { + unsigned long action; /* Identified action. */ + unsigned long ret; /* Return bits. */ + unsigned num_specs; /* # of sepcifications listed. */ + struct dm_msg_spec *specs; /* Specification list. */ + struct dm_msg_spec *spec; /* Specification selected. */ +}; + +/* Secification of the message. */ +struct dm_msg_spec { + const char *cmd; /* Name of the command (i.e. 'bandwidth'). */ + unsigned long action; + struct dm_message_option *options; + struct dm_message_argument *args; + unsigned long parm; /* Parameter to pass through to callback. */ + /* Function to process for action. */ + int (*f) (struct dm_msg *msg, void *context); +}; + +/* Parameter access macros. */ +#define DM_MSG_PARM(msg) ((msg)->spec->parm) + +#define DM_MSG_STR_ARGS(msg, idx) ((char *) *(msg)->spec->args->ptr[idx]) +#define DM_MSG_INT_ARGS(msg, idx) ((int) *(msg)->spec->args->ptr[idx]) +#define DM_MSG_UINT_ARGS(msg, idx) ((unsigned) DM_MSG_INT_ARG(msg, idx)) +#define DM_MSG_UINT64_ARGS(msg, idx) ((uint64_t) *(msg)->spec->args->ptr[idx]) + +#define DM_MSG_STR_ARG(msg) DM_MSG_STR_ARGS(msg, 0) +#define DM_MSG_INT_ARG(msg) DM_MSG_INT_ARGS(msg, 0) +#define DM_MSG_UINT_ARG(msg) DM_MSG_UINT_ARGS(msg, 0) +#define DM_MSG_UINT64_ARG(msg) DM_MSG_UINT64_ARGS(msg, 0) + + +/* Parse a message and its options and optionally call a function back. */ +int dm_message_parse(const char *caller, struct dm_msg *msg, void *context, + int argc, char **argv); + +#endif --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-region-hash.c +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-region-hash.c @@ -0,0 +1,719 @@ +/* + * Copyright (C) 2003 Sistina Software Limited. + * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * + * This file is released under the GPL. + */ + +#include +#include "dm-region-hash.h" + +#include +#include +#include +#include +#include + +#include "dm.h" + +#define DM_MSG_PREFIX "region hash" + +/*----------------------------------------------------------------- + * Region hash + * + * The mirror splits itself up into discrete regions. Each + * region can be in one of three states: clean, dirty, + * nosync. There is no need to put clean regions in the hash. + * + * In addition to being present in the hash table a region _may_ + * be present on one of three lists. + * + * clean_regions: Regions on this list have no io pending to + * them, they are in sync, we are no longer interested in them, + * they are dull. dm_rh_update_states() will remove them from the + * hash table. + * + * quiesced_regions: These regions have been spun down, ready + * for recovery. rh_recovery_start() will remove regions from + * this list and hand them to kmirrord, which will schedule the + * recovery io with kcopyd. + * + * recovered_regions: Regions that kcopyd has successfully + * recovered. dm_rh_update_states() will now schedule any delayed + * io, up the recovery_count, and remove the region from the + * hash. + * + * There are 2 locks: + * A rw spin lock 'hash_lock' protects just the hash table, + * this is never held in write mode from interrupt context, + * which I believe means that we only have to disable irqs when + * doing a write lock. + * + * An ordinary spin lock 'region_lock' that protects the three + * lists in the region_hash, with the 'state', 'list' and + * 'delayed_bios' fields of the regions. This is used from irq + * context, so all other uses will have to suspend local irqs. + *---------------------------------------------------------------*/ +struct dm_region_hash { + uint32_t region_size; + unsigned region_shift; + + /* holds persistent region state */ + struct dm_dirty_log *log; + + /* hash table */ + rwlock_t hash_lock; + mempool_t *region_pool; + unsigned mask; + unsigned nr_buckets; + unsigned prime; + unsigned shift; + struct list_head *buckets; + + unsigned max_recovery; /* Max # of regions to recover in parallel */ + + spinlock_t region_lock; + atomic_t recovery_in_flight; + struct semaphore recovery_count; + struct list_head clean_regions; + struct list_head quiesced_regions; + struct list_head recovered_regions; + struct list_head failed_recovered_regions; + + void *context; + sector_t target_begin; + + /* Callback function to schedule bios writes */ + void (*dispatch_bios)(void *context, struct bio_list *bios); + + /* Callback function to wakeup callers worker thread. */ + void (*wakeup_workers)(void *context); + + /* Callback function to wakeup callers recovery waiters. */ + void (*wakeup_all_recovery_waiters)(void *context); +}; + +struct dm_region { + struct dm_region_hash *rh; /* FIXME: can we get rid of this ? */ + region_t key; + int state; + + struct list_head hash_list; + struct list_head list; + + atomic_t pending; + struct bio_list delayed_bios; +}; + +/* + * Conversion fns + */ +region_t dm_rh_sector_to_region(struct dm_region_hash *rh, sector_t sector) +{ + return sector >> rh->region_shift; +} +// EXPORT_SYMBOL_GPL(dm_rh_sector_to_region); + +sector_t dm_rh_region_to_sector(struct dm_region_hash *rh, region_t region) +{ + return region << rh->region_shift; +} +// EXPORT_SYMBOL_GPL(dm_rh_region_to_sector); + +region_t dm_rh_bio_to_region(struct dm_region_hash *rh, struct bio *bio) +{ + return dm_rh_sector_to_region(rh, bio->bi_sector - rh->target_begin); +} +// EXPORT_SYMBOL_GPL(dm_rh_bio_to_region); + +void *dm_rh_region_context(struct dm_region *reg) +{ + return reg->rh->context; +} +// EXPORT_SYMBOL_GPL(dm_rh_region_context); + +region_t dm_rh_get_region_key(struct dm_region *reg) +{ + return reg->key; +} +// EXPORT_SYMBOL_GPL(dm_rh_get_region_key); + +sector_t dm_rh_get_region_size(struct dm_region_hash *rh) +{ + return rh->region_size; +} +// EXPORT_SYMBOL_GPL(dm_rh_get_region_size); + +/* + * FIXME: shall we pass in a structure instead of all these args to + * dm_region_hash_create()???? + */ +#define RH_HASH_MULT 2654435387U +#define RH_HASH_SHIFT 12 + +#define MIN_REGIONS 64 +struct dm_region_hash *dm_region_hash_create( + void *context, void (*dispatch_bios)(void *context, + struct bio_list *bios), + void (*wakeup_workers)(void *context), + void (*wakeup_all_recovery_waiters)(void *context), + sector_t target_begin, unsigned max_recovery, + struct dm_dirty_log *log, uint32_t region_size, + region_t nr_regions) +{ + struct dm_region_hash *rh; + unsigned nr_buckets, max_buckets; + size_t i; + + /* + * Calculate a suitable number of buckets for our hash + * table. + */ + max_buckets = nr_regions >> 6; + for (nr_buckets = 128u; nr_buckets < max_buckets; nr_buckets <<= 1) + ; + nr_buckets >>= 1; + + rh = kmalloc(sizeof(*rh), GFP_KERNEL); + if (!rh) { + DMERR("unable to allocate region hash memory"); + return ERR_PTR(-ENOMEM); + } + + rh->context = context; + rh->dispatch_bios = dispatch_bios; + rh->wakeup_workers = wakeup_workers; + rh->wakeup_all_recovery_waiters = wakeup_all_recovery_waiters; + rh->target_begin = target_begin; + rh->max_recovery = max_recovery; + rh->log = log; + rh->region_size = region_size; + rh->region_shift = ffs(region_size) - 1; + rwlock_init(&rh->hash_lock); + rh->mask = nr_buckets - 1; + rh->nr_buckets = nr_buckets; + + rh->shift = RH_HASH_SHIFT; + rh->prime = RH_HASH_MULT; + + rh->buckets = vmalloc(nr_buckets * sizeof(*rh->buckets)); + if (!rh->buckets) { + DMERR("unable to allocate region hash bucket memory"); + kfree(rh); + return ERR_PTR(-ENOMEM); + } + + for (i = 0; i < nr_buckets; i++) + INIT_LIST_HEAD(rh->buckets + i); + + spin_lock_init(&rh->region_lock); + sema_init(&rh->recovery_count, 0); + atomic_set(&rh->recovery_in_flight, 0); + INIT_LIST_HEAD(&rh->clean_regions); + INIT_LIST_HEAD(&rh->quiesced_regions); + INIT_LIST_HEAD(&rh->recovered_regions); + INIT_LIST_HEAD(&rh->failed_recovered_regions); + + rh->region_pool = mempool_create_kmalloc_pool(MIN_REGIONS, + sizeof(struct dm_region)); + if (!rh->region_pool) { + vfree(rh->buckets); + kfree(rh); + rh = ERR_PTR(-ENOMEM); + } + + return rh; +} +// EXPORT_SYMBOL_GPL(dm_region_hash_create); + +void dm_region_hash_destroy(struct dm_region_hash *rh) +{ + unsigned h; + struct dm_region *reg, *nreg; + + BUG_ON(!list_empty(&rh->quiesced_regions)); + for (h = 0; h < rh->nr_buckets; h++) { + list_for_each_entry_safe(reg, nreg, rh->buckets + h, + hash_list) { + BUG_ON(atomic_read(®->pending)); + mempool_free(reg, rh->region_pool); + } + } + + if (rh->log) + dm_dirty_log_destroy(rh->log); + + if (rh->region_pool) + mempool_destroy(rh->region_pool); + + vfree(rh->buckets); + kfree(rh); +} +// EXPORT_SYMBOL_GPL(dm_region_hash_destroy); + +struct dm_dirty_log *dm_rh_dirty_log(struct dm_region_hash *rh) +{ + return rh->log; +} +// EXPORT_SYMBOL_GPL(dm_rh_dirty_log); + +static unsigned rh_hash(struct dm_region_hash *rh, region_t region) +{ + return (unsigned) ((region * rh->prime) >> rh->shift) & rh->mask; +} + +static struct dm_region *__rh_lookup(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg; + struct list_head *bucket = rh->buckets + rh_hash(rh, region); + + list_for_each_entry(reg, bucket, hash_list) + if (reg->key == region) + return reg; + + return NULL; +} + +static void __rh_insert(struct dm_region_hash *rh, struct dm_region *reg) +{ + list_add(®->hash_list, rh->buckets + rh_hash(rh, reg->key)); +} + +static struct dm_region *__rh_alloc(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg, *nreg; + + nreg = mempool_alloc(rh->region_pool, GFP_ATOMIC); + if (unlikely(!nreg)) + nreg = kmalloc(sizeof(*nreg), GFP_NOIO | __GFP_NOFAIL); + + nreg->state = rh->log->type->in_sync(rh->log, region, 1) ? + DM_RH_CLEAN : DM_RH_NOSYNC; + nreg->rh = rh; + nreg->key = region; + INIT_LIST_HEAD(&nreg->list); + atomic_set(&nreg->pending, 0); + bio_list_init(&nreg->delayed_bios); + + write_lock_irq(&rh->hash_lock); + reg = __rh_lookup(rh, region); + if (reg) + /* We lost the race. */ + mempool_free(nreg, rh->region_pool); + else { + __rh_insert(rh, nreg); + if (nreg->state == DM_RH_CLEAN) { + spin_lock(&rh->region_lock); + list_add(&nreg->list, &rh->clean_regions); + spin_unlock(&rh->region_lock); + } + + reg = nreg; + } + write_unlock_irq(&rh->hash_lock); + + return reg; +} + +static struct dm_region *__rh_find(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg; + + reg = __rh_lookup(rh, region); + if (!reg) { + read_unlock(&rh->hash_lock); + reg = __rh_alloc(rh, region); + read_lock(&rh->hash_lock); + } + + return reg; +} + +int dm_rh_get_state(struct dm_region_hash *rh, region_t region, int may_block) +{ + int r; + struct dm_region *reg; + + read_lock(&rh->hash_lock); + reg = __rh_lookup(rh, region); + read_unlock(&rh->hash_lock); + + if (reg) + return reg->state; + + /* + * The region wasn't in the hash, so we fall back to the + * dirty log. + */ + r = rh->log->type->in_sync(rh->log, region, may_block); + + /* + * Any error from the dirty log (eg. -EWOULDBLOCK) gets + * taken as a DM_RH_NOSYNC + */ + return r == 1 ? DM_RH_CLEAN : DM_RH_NOSYNC; +} +// EXPORT_SYMBOL_GPL(dm_rh_get_state); + +static void complete_resync_work(struct dm_region *reg, int success) +{ + struct dm_region_hash *rh = reg->rh; + + rh->log->type->set_region_sync(rh->log, reg->key, success); + + /* + * Dispatch the bios before we call 'wake_up_all'. + * This is important because if we are suspending, + * we want to know that recovery is complete and + * the work queue is flushed. If we wake_up_all + * before we dispatch_bios (queue bios and call wake()), + * then we risk suspending before the work queue + * has been properly flushed. + */ + rh->dispatch_bios(rh->context, ®->delayed_bios); + if (atomic_dec_and_test(&rh->recovery_in_flight)) + rh->wakeup_all_recovery_waiters(rh->context); + up(&rh->recovery_count); +} + +/* dm_rh_mark_nosync + * @ms + * @bio + * @done + * @error + * + * The bio was written on some mirror(s) but failed on other mirror(s). + * We can successfully endio the bio but should avoid the region being + * marked clean by setting the state DM_RH_NOSYNC. + * + * This function is _not_ safe in interrupt context! + */ +void dm_rh_mark_nosync(struct dm_region_hash *rh, + struct bio *bio, unsigned done, int error) +{ + unsigned long flags; + struct dm_dirty_log *log = rh->log; + struct dm_region *reg; + region_t region = dm_rh_bio_to_region(rh, bio); + int recovering = 0; + + /* We must inform the log that the sync count has changed. */ + log->type->set_region_sync(log, region, 0); + + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + read_unlock(&rh->hash_lock); + + /* region hash entry should exist because write was in-flight */ + BUG_ON(!reg); + BUG_ON(!list_empty(®->list)); + + spin_lock_irqsave(&rh->region_lock, flags); + /* + * Possible cases: + * 1) DM_RH_DIRTY + * 2) DM_RH_NOSYNC: was dirty, other preceeding writes failed + * 3) DM_RH_RECOVERING: flushing pending writes + * Either case, the region should have not been connected to list. + */ + recovering = (reg->state == DM_RH_RECOVERING); + reg->state = DM_RH_NOSYNC; + BUG_ON(!list_empty(®->list)); + spin_unlock_irqrestore(&rh->region_lock, flags); + + bio_endio(bio, error); + if (recovering) + complete_resync_work(reg, 0); +} +// EXPORT_SYMBOL_GPL(dm_rh_mark_nosync); + +void dm_rh_update_states(struct dm_region_hash *rh, int errors_handled) +{ + struct dm_region *reg, *next; + + LIST_HEAD(clean); + LIST_HEAD(recovered); + LIST_HEAD(failed_recovered); + + /* + * Quickly grab the lists. + */ + write_lock_irq(&rh->hash_lock); + spin_lock(&rh->region_lock); + if (!list_empty(&rh->clean_regions)) { + list_splice_init(&rh->clean_regions, &clean); + + list_for_each_entry(reg, &clean, list) + list_del(®->hash_list); + } + + if (!list_empty(&rh->recovered_regions)) { + list_splice_init(&rh->recovered_regions, &recovered); + + list_for_each_entry(reg, &recovered, list) + list_del(®->hash_list); + } + + if (!list_empty(&rh->failed_recovered_regions)) { + list_splice_init(&rh->failed_recovered_regions, + &failed_recovered); + + list_for_each_entry(reg, &failed_recovered, list) + list_del(®->hash_list); + } + + spin_unlock(&rh->region_lock); + write_unlock_irq(&rh->hash_lock); + + /* + * All the regions on the recovered and clean lists have + * now been pulled out of the system, so no need to do + * any more locking. + */ + list_for_each_entry_safe(reg, next, &recovered, list) { + rh->log->type->clear_region(rh->log, reg->key); + complete_resync_work(reg, 1); + mempool_free(reg, rh->region_pool); + } + + list_for_each_entry_safe(reg, next, &failed_recovered, list) { + complete_resync_work(reg, errors_handled ? 0 : 1); + mempool_free(reg, rh->region_pool); + } + + list_for_each_entry_safe(reg, next, &clean, list) { + rh->log->type->clear_region(rh->log, reg->key); + mempool_free(reg, rh->region_pool); + } + + rh->log->type->flush(rh->log); +} +// EXPORT_SYMBOL_GPL(dm_rh_update_states); + +void dm_rh_inc(struct dm_region_hash *rh, region_t region) +{ + struct dm_region *reg; + + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + + spin_lock_irq(&rh->region_lock); + atomic_inc(®->pending); + + if (reg->state == DM_RH_CLEAN) { + reg->state = DM_RH_DIRTY; + list_del_init(®->list); /* take off the clean list */ + spin_unlock_irq(&rh->region_lock); + + rh->log->type->mark_region(rh->log, reg->key); + } else + spin_unlock_irq(&rh->region_lock); + + + read_unlock(&rh->hash_lock); +} +// EXPORT_SYMBOL_GPL(dm_rh_inc); + +void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios) +{ + struct bio *bio; + + for (bio = bios->head; bio; bio = bio->bi_next) + dm_rh_inc(rh, dm_rh_bio_to_region(rh, bio)); +} +// EXPORT_SYMBOL_GPL(dm_rh_inc_pending); + +void dm_rh_dec(struct dm_region_hash *rh, region_t region) +{ + unsigned long flags; + struct dm_region *reg; + int should_wake = 0; + + read_lock(&rh->hash_lock); + reg = __rh_lookup(rh, region); + read_unlock(&rh->hash_lock); + + spin_lock_irqsave(&rh->region_lock, flags); + if (atomic_dec_and_test(®->pending)) { + /* + * There is no pending I/O for this region. + * We can move the region to corresponding list for next action. + * At this point, the region is not yet connected to any list. + * + * If the state is DM_RH_NOSYNC, the region should be kept off + * from clean list. + * The hash entry for DM_RH_NOSYNC will remain in memory + * until the region is recovered or the map is reloaded. + */ + + /* do nothing for DM_RH_NOSYNC */ + if (reg->state == DM_RH_RECOVERING) { + list_add_tail(®->list, &rh->quiesced_regions); + } else if (reg->state == DM_RH_DIRTY) { + reg->state = DM_RH_CLEAN; + list_add(®->list, &rh->clean_regions); + } + should_wake = 1; + } + spin_unlock_irqrestore(&rh->region_lock, flags); + + if (should_wake) + rh->wakeup_workers(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_dec); + +/* + * Starts quiescing a region in preparation for recovery. + */ +static int __rh_recovery_prepare(struct dm_region_hash *rh) +{ + int r; + region_t region; + struct dm_region *reg; + + /* + * Ask the dirty log what's next. + */ + r = rh->log->type->get_resync_work(rh->log, ®ion); + if (r <= 0) + return r; + + /* + * Get this region, and start it quiescing by setting the + * recovering flag. + */ + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + read_unlock(&rh->hash_lock); + + spin_lock_irq(&rh->region_lock); + reg->state = DM_RH_RECOVERING; + + /* Already quiesced ? */ + if (atomic_read(®->pending)) + list_del_init(®->list); + else + list_move(®->list, &rh->quiesced_regions); + + spin_unlock_irq(&rh->region_lock); + + return 1; +} + +void dm_rh_recovery_prepare(struct dm_region_hash *rh) +{ + /* Extra reference to avoid race with dm_rh_stop_recovery */ + atomic_inc(&rh->recovery_in_flight); + + while (!down_trylock(&rh->recovery_count)) { + atomic_inc(&rh->recovery_in_flight); + if (__rh_recovery_prepare(rh) <= 0) { + atomic_dec(&rh->recovery_in_flight); + up(&rh->recovery_count); + break; + } + } + + /* Drop the extra reference */ + if (atomic_dec_and_test(&rh->recovery_in_flight)) + rh->wakeup_all_recovery_waiters(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_prepare); + +/* + * Returns any quiesced regions. + */ +struct dm_region *dm_rh_recovery_start(struct dm_region_hash *rh) +{ + struct dm_region *reg = NULL; + + spin_lock_irq(&rh->region_lock); + if (!list_empty(&rh->quiesced_regions)) { + reg = list_entry(rh->quiesced_regions.next, + struct dm_region, list); + list_del_init(®->list); /* remove from the quiesced list */ + } + spin_unlock_irq(&rh->region_lock); + + return reg; +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_start); + +void dm_rh_recovery_end(struct dm_region *reg, int success) +{ + struct dm_region_hash *rh = reg->rh; + + spin_lock_irq(&rh->region_lock); + if (success) + list_add(®->list, ®->rh->recovered_regions); + else { + reg->state = DM_RH_NOSYNC; + list_add(®->list, ®->rh->failed_recovered_regions); + } + spin_unlock_irq(&rh->region_lock); + + rh->wakeup_workers(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_end); + +/* Return recovery in flight count. */ +int dm_rh_recovery_in_flight(struct dm_region_hash *rh) +{ + return atomic_read(&rh->recovery_in_flight); +} +// EXPORT_SYMBOL_GPL(dm_rh_recovery_in_flight); + +int dm_rh_flush(struct dm_region_hash *rh) +{ + return rh->log->type->flush(rh->log); +} +// EXPORT_SYMBOL_GPL(dm_rh_flush); + +void dm_rh_delay(struct dm_region_hash *rh, struct bio *bio) +{ + struct dm_region *reg; + + read_lock(&rh->hash_lock); + reg = __rh_find(rh, dm_rh_bio_to_region(rh, bio)); + bio_list_add(®->delayed_bios, bio); + read_unlock(&rh->hash_lock); +} +// EXPORT_SYMBOL_GPL(dm_rh_delay); + +void dm_rh_delay_by_region(struct dm_region_hash *rh, + struct bio *bio, region_t region) +{ + struct dm_region *reg; + + /* FIXME: locking. */ + read_lock(&rh->hash_lock); + reg = __rh_find(rh, region); + bio_list_add(®->delayed_bios, bio); + read_unlock(&rh->hash_lock); +} +// EXPORT_SYMBOL_GPL(dm_rh_delay_by_region); + +void dm_rh_stop_recovery(struct dm_region_hash *rh) +{ + int i; + + /* wait for any recovering regions */ + for (i = 0; i < rh->max_recovery; i++) + down(&rh->recovery_count); +} +// EXPORT_SYMBOL_GPL(dm_rh_stop_recovery); + +void dm_rh_start_recovery(struct dm_region_hash *rh) +{ + int i; + + for (i = 0; i < rh->max_recovery; i++) + up(&rh->recovery_count); + + rh->wakeup_workers(rh->context); +} +// EXPORT_SYMBOL_GPL(dm_rh_start_recovery); + +MODULE_DESCRIPTION(DM_NAME " region hash"); +MODULE_AUTHOR("Joe Thornber/Heinz Mauelshagen "); +MODULE_LICENSE("GPL"); --- linux-lts-raring-3.8.0.orig/ubuntu/dm-raid4-5/dm-raid45.h +++ linux-lts-raring-3.8.0/ubuntu/dm-raid4-5/dm-raid45.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2006-2008 Red Hat, Inc. All rights reserved. + * + * Module Author: Heinz Mauelshagen (Mauelshagen@RedHat.com) + * + * Locking definitions for the device-mapper RAID45 target. + * + * This file is released under the GPL. + * + */ + +#ifndef _DM_RAID45_H +#define _DM_RAID45_H + +/* Factor out to dm.h! */ +#define STR_LEN(ptr, str) (ptr), (str), strlen((ptr)) + +enum dm_lock_type { DM_RAID45_EX, DM_RAID45_SHARED }; + +struct dm_raid45_locking_type { + /* Request a lock on a stripe. */ + void* (*lock)(sector_t key, enum dm_lock_type type); + + /* Release a lock on a stripe. */ + void (*unlock)(void *lock_handle); +}; + +#endif --- linux-lts-raring-3.8.0.orig/Documentation/kernel-parameters.txt +++ linux-lts-raring-3.8.0/Documentation/kernel-parameters.txt @@ -564,6 +564,8 @@ UART at the specified I/O port or MMIO address, switching to the matching ttyS device later. The options are the same as for ttyS, above. + hvc Use the hypervisor console device . This is for + both Xen and PowerPC hypervisors. If the device connected to the port is not a TTY but a braille device, prepend "brl," before the device type, for instance @@ -579,6 +581,10 @@ /proc//coredump_filter. See also Documentation/filesystems/proc.txt. + 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 @@ -754,6 +760,7 @@ earlyprintk= [X86,SH,BLACKFIN] earlyprintk=vga + earlyprintk=xen earlyprintk=serial[,ttySn[,baudrate]] earlyprintk=ttySn[,baudrate] earlyprintk=dbgp[debugController#] @@ -771,6 +778,8 @@ The VGA output is eventually overwritten by the real console. + The xen output can only be used by Xen PV guests. + ekgdboc= [X86,KGDB] Allow early kernel console debugging ekgdboc=kbd @@ -780,6 +789,12 @@ edd= [EDD] Format: {"off" | "on" | "skip[mbr]"} + efi_no_storage_paranoia [EFI; X86] + Using this parameter you can use more than 50% of + your efi variable storage. Use this parameter only if + you are really sure that your UEFI does sane gc and + fulfills the spec otherwise your board may brick. + eisa_irq_edge= [PARISC,HW] See header of drivers/parisc/eisa.c. @@ -1100,6 +1115,8 @@ inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver Format: + int_pln_enable [x86] Enable power limit notification interrupt + intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option on Enable intel iommu driver. --- linux-lts-raring-3.8.0.orig/Documentation/filesystems/overlayfs.txt +++ linux-lts-raring-3.8.0/Documentation/filesystems/overlayfs.txt @@ -0,0 +1,199 @@ +Written by: Neil Brown + +Overlay Filesystem +================== + +This document describes a prototype for a new approach to providing +overlay-filesystem functionality in Linux (sometimes referred to as +union-filesystems). An overlay-filesystem tries to present a +filesystem which is the result over overlaying one filesystem on top +of the other. + +The result will inevitably fail to look exactly like a normal +filesystem for various technical reasons. The expectation is that +many use cases will be able to ignore these differences. + +This approach is 'hybrid' because the objects that appear in the +filesystem do not all appear to belong to that filesystem. In many +cases an object accessed in the union will be indistinguishable +from accessing the corresponding object from the original filesystem. +This is most obvious from the 'st_dev' field returned by stat(2). + +While directories will report an st_dev from the overlay-filesystem, +all non-directory objects will report an st_dev from the lower or +upper filesystem that is providing the object. Similarly st_ino will +only be unique when combined with st_dev, and both of these can change +over the lifetime of a non-directory object. Many applications and +tools ignore these values and will not be affected. + +Upper and Lower +--------------- + +An overlay filesystem combines two filesystems - an 'upper' filesystem +and a 'lower' filesystem. When a name exists in both filesystems, the +object in the 'upper' filesystem is visible while the object in the +'lower' filesystem is either hidden or, in the case of directories, +merged with the 'upper' object. + +It would be more correct to refer to an upper and lower 'directory +tree' rather than 'filesystem' as it is quite possible for both +directory trees to be in the same filesystem and there is no +requirement that the root of a filesystem be given for either upper or +lower. + +The lower filesystem can be any filesystem supported by Linux and does +not need to be writable. The lower filesystem can even be another +overlayfs. The upper filesystem will normally be writable and if it +is it must support the creation of trusted.* extended attributes, and +must provide valid d_type in readdir responses, at least for symbolic +links - so NFS is not suitable. + +A read-only overlay of two read-only filesystems may use any +filesystem type. + +Directories +----------- + +Overlaying mainly involves directories. If a given name appears in both +upper and lower filesystems and refers to a non-directory in either, +then the lower object is hidden - the name refers only to the upper +object. + +Where both upper and lower objects are directories, a merged directory +is formed. + +At mount time, the two directories given as mount options are combined +into a merged directory: + + mount -t overlayfs overlayfs -olowerdir=/lower,upperdir=/upper /overlay + +Then whenever a lookup is requested in such a merged directory, the +lookup is performed in each actual directory and the combined result +is cached in the dentry belonging to the overlay filesystem. If both +actual lookups find directories, both are stored and a merged +directory is created, otherwise only one is stored: the upper if it +exists, else the lower. + +Only the lists of names from directories are merged. Other content +such as metadata and extended attributes are reported for the upper +directory only. These attributes of the lower directory are hidden. + +whiteouts and opaque directories +-------------------------------- + +In order to support rm and rmdir without changing the lower +filesystem, an overlay filesystem needs to record in the upper filesystem +that files have been removed. This is done using whiteouts and opaque +directories (non-directories are always opaque). + +The overlay filesystem uses extended attributes with a +"trusted.overlay." prefix to record these details. + +A whiteout is created as a symbolic link with target +"(overlay-whiteout)" and with xattr "trusted.overlay.whiteout" set to "y". +When a whiteout is found in the upper level of a merged directory, any +matching name in the lower level is ignored, and the whiteout itself +is also hidden. + +A directory is made opaque by setting the xattr "trusted.overlay.opaque" +to "y". Where the upper filesystem contains an opaque directory, any +directory in the lower filesystem with the same name is ignored. + +readdir +------- + +When a 'readdir' request is made on a merged directory, the upper and +lower directories are each read and the name lists merged in the +obvious way (upper is read first, then lower - entries that already +exist are not re-added). This merged name list is cached in the +'struct file' and so remains as long as the file is kept open. If the +directory is opened and read by two processes at the same time, they +will each have separate caches. A seekdir to the start of the +directory (offset 0) followed by a readdir will cause the cache to be +discarded and rebuilt. + +This means that changes to the merged directory do not appear while a +directory is being read. This is unlikely to be noticed by many +programs. + +seek offsets are assigned sequentially when the directories are read. +Thus if + - read part of a directory + - remember an offset, and close the directory + - re-open the directory some time later + - seek to the remembered offset + +there may be little correlation between the old and new locations in +the list of filenames, particularly if anything has changed in the +directory. + +Readdir on directories that are not merged is simply handled by the +underlying directory (upper or lower). + + +Non-directories +--------------- + +Objects that are not directories (files, symlinks, device-special +files etc.) are presented either from the upper or lower filesystem as +appropriate. When a file in the lower filesystem is accessed in a way +the requires write-access, such as opening for write access, changing +some metadata etc., the file is first copied from the lower filesystem +to the upper filesystem (copy_up). Note that creating a hard-link +also requires copy_up, though of course creation of a symlink does +not. + +The copy_up may turn out to be unnecessary, for example if the file is +opened for read-write but the data is not modified. + +The copy_up process first makes sure that the containing directory +exists in the upper filesystem - creating it and any parents as +necessary. It then creates the object with the same metadata (owner, +mode, mtime, symlink-target etc.) and then if the object is a file, the +data is copied from the lower to the upper filesystem. Finally any +extended attributes are copied up. + +Once the copy_up is complete, the overlay filesystem simply +provides direct access to the newly created file in the upper +filesystem - future operations on the file are barely noticed by the +overlay filesystem (though an operation on the name of the file such as +rename or unlink will of course be noticed and handled). + + +Non-standard behavior +--------------------- + +The copy_up operation essentially creates a new, identical file and +moves it over to the old name. The new file may be on a different +filesystem, so both st_dev and st_ino of the file may change. + +Any open files referring to this inode will access the old data and +metadata. Similarly any file locks obtained before copy_up will not +apply to the copied up file. + +On a file opened with O_RDONLY fchmod(2), fchown(2), futimesat(2) and +fsetxattr(2) will fail with EROFS. + +If a file with multiple hard links is copied up, then this will +"break" the link. Changes will not be propagated to other names +referring to the same inode. + +Symlinks in /proc/PID/ and /proc/PID/fd which point to a non-directory +object in overlayfs will not contain valid absolute paths, only +relative paths leading up to the filesystem's root. This will be +fixed in the future. + +Some operations are not atomic, for example a crash during copy_up or +rename will leave the filesystem in an inconsistent state. This will +be addressed in the future. + +Changes to underlying filesystems +--------------------------------- + +Offline changes, when the overlay is not mounted, are allowed to either +the upper or the lower trees. + +Changes to the underlying filesystems while part of a mounted overlay +filesystem are not allowed. If the underlying filesystem is changed, +the behavior of the overlay is undefined, though it will not result in +a crash or deadlock. --- linux-lts-raring-3.8.0.orig/Documentation/filesystems/Locking +++ linux-lts-raring-3.8.0/Documentation/filesystems/Locking @@ -64,6 +64,7 @@ int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned open_flag, umode_t create_mode, int *opened); + int (*dentry_open)(struct dentry *, struct file *, const struct cred *); locking rules: all may block @@ -91,6 +92,7 @@ fiemap: no update_time: no atomic_open: yes +dentry_open: no Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on victim. --- linux-lts-raring-3.8.0.orig/Documentation/filesystems/vfs.txt +++ linux-lts-raring-3.8.0/Documentation/filesystems/vfs.txt @@ -362,6 +362,7 @@ int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned open_flag, umode_t create_mode, int *opened); + int (*dentry_open)(struct dentry *, struct file *, const struct cred *); }; Again, all methods are called without any locks being held, unless @@ -681,6 +682,12 @@ but instead uses bmap to find out where the blocks in the file are and uses those addresses directly. + dentry_open: this is an alternative to f_op->open(), the difference is that + this method may open a file not necessarily originating from the same + filesystem as the one i_op->open() was called on. It may be + useful for stacking filesystems which want to allow native I/O directly + on underlying files. + invalidatepage: If a page has PagePrivate set, then invalidatepage will be called when part or all of the page is to be removed --- linux-lts-raring-3.8.0.orig/Documentation/devicetree/bindings/dma/snps-dma.txt +++ linux-lts-raring-3.8.0/Documentation/devicetree/bindings/dma/snps-dma.txt @@ -6,6 +6,26 @@ - interrupt-parent: Should be the phandle for the interrupt controller that services interrupts for this device - interrupt: Should contain the DMAC interrupt number +- nr_channels: Number of channels supported by hardware +- is_private: The device channels should be marked as private and not for by the + general purpose DMA channel allocator. False if not passed. +- chan_allocation_order: order of allocation of channel, 0 (default): ascending, + 1: descending +- chan_priority: priority of channels. 0 (default): increase from chan 0->n, 1: + increase from chan n->0 +- block_size: Maximum block size supported by the controller +- nr_masters: Number of AHB masters supported by the controller +- data_width: Maximum data width supported by hardware per AHB master + (0 - 8bits, 1 - 16bits, ..., 5 - 256bits) +- slave_info: + - bus_id: name of this device channel, not just a device name since + devices may have more than one channel e.g. "foo_tx". For using the + dw_generic_filter(), slave drivers must pass exactly this string as + param to filter function. + - cfg_hi: Platform-specific initializer for the CFG_HI register + - cfg_lo: Platform-specific initializer for the CFG_LO register + - src_master: src master for transfers on allocated channel. + - dst_master: dest master for transfers on allocated channel. Example: @@ -14,4 +34,28 @@ reg = <0xfc000000 0x1000>; interrupt-parent = <&vic1>; interrupts = <12>; + + nr_channels = <8>; + chan_allocation_order = <1>; + chan_priority = <1>; + block_size = <0xfff>; + nr_masters = <2>; + data_width = <3 3 0 0>; + + slave_info { + uart0-tx { + bus_id = "uart0-tx"; + cfg_hi = <0x4000>; /* 0x8 << 11 */ + cfg_lo = <0>; + src_master = <0>; + dst_master = <1>; + }; + spi0-tx { + bus_id = "spi0-tx"; + cfg_hi = <0x2000>; /* 0x4 << 11 */ + cfg_lo = <0>; + src_master = <0>; + dst_master = <0>; + }; + }; }; --- linux-lts-raring-3.8.0.orig/Documentation/devicetree/bindings/tty/serial/of-serial.txt +++ linux-lts-raring-3.8.0/Documentation/devicetree/bindings/tty/serial/of-serial.txt @@ -11,6 +11,9 @@ - "nvidia,tegra20-uart" - "nxp,lpc3220-uart" - "ibm,qpace-nwp-serial" + - "altr,16550-FIFO32" + - "altr,16550-FIFO64" + - "altr,16550-FIFO128" - "serial" if the port type is unknown. - reg : offset and length of the register set for the device. - interrupts : should contain uart interrupt. --- linux-lts-raring-3.8.0.orig/Documentation/ABI/testing/sysfs-bus-usb +++ linux-lts-raring-3.8.0/Documentation/ABI/testing/sysfs-bus-usb @@ -227,3 +227,12 @@ Description: The /sys/bus/usb/devices/.../(hub interface)/portX is usb port device's sysfs directory. + +What: /sys/bus/usb/devices/.../(hub interface)/portX/connect_type +Date: January 2013 +Contact: Lan Tianyu +Description: + Some platforms provide usb port connect types through ACPI. + This attribute is to expose these information to user space. + The file will read "hotplug", "wired" and "not used" if the + information is available, and "unknown" otherwise. --- linux-lts-raring-3.8.0.orig/Documentation/networking/ipvs-sysctl.txt +++ linux-lts-raring-3.8.0/Documentation/networking/ipvs-sysctl.txt @@ -15,6 +15,13 @@ enabled and the variable is automatically set to 2, otherwise the strategy is disabled and the variable is set to 1. +backup_only - BOOLEAN + 0 - disabled (default) + not 0 - enabled + + If set, disable the director function while the server is + in backup mode to avoid packet loops for DR/TUN methods. + conntrack - BOOLEAN 0 - disabled (default) not 0 - enabled --- linux-lts-raring-3.8.0.orig/Documentation/i2c/busses/i2c-i801 +++ linux-lts-raring-3.8.0/Documentation/i2c/busses/i2c-i801 @@ -22,6 +22,7 @@ * Intel Panther Point (PCH) * Intel Lynx Point (PCH) * Intel Lynx Point-LP (PCH) + * Intel Avoton (SOC) Datasheets: Publicly available at the Intel website On Intel Patsburg and later chipsets, both the normal host SMBus controller --- linux-lts-raring-3.8.0.orig/Documentation/i2c/busses/i2c-ismt +++ linux-lts-raring-3.8.0/Documentation/i2c/busses/i2c-ismt @@ -0,0 +1,36 @@ +Kernel driver i2c-ismt + +Supported adapters: + * Intel S12xx series SOCs + +Authors: + Bill Brown + + +Module Parameters +----------------- + +* bus_speed (unsigned int) +Allows changing of the bus speed. Normally, the bus speed is set by the BIOS +and never needs to be changed. However, some SMBus analyzers are too slow for +monitoring the bus during debug, thus the need for this module parameter. +Specify the bus speed in kHz. +Available bus frequency settings: + 0 no change + 80 kHz + 100 kHz + 400 kHz + 1000 kHz + + +Description +----------- + +The S12xx series of SOCs have a pair of integrated SMBus 2.0 controllers +targeted primarily at the microserver and storage markets. + +The S12xx series contain a pair of PCI functions. An output of lspci will show +something similar to the following: + + 00:13.0 System peripheral: Intel Corporation Centerton SMBus 2.0 Controller 0 + 00:13.1 System peripheral: Intel Corporation Centerton SMBus 2.0 Controller 1 --- linux-lts-raring-3.8.0.orig/Documentation/i2c/busses/i2c-piix4 +++ linux-lts-raring-3.8.0/Documentation/i2c/busses/i2c-piix4 @@ -13,7 +13,7 @@ * AMD SP5100 (SB700 derivative found on some server mainboards) Datasheet: Publicly available at the AMD website http://support.amd.com/us/Embedded_TechDocs/44413.pdf - * AMD Hudson-2 + * AMD Hudson-2, CZ Datasheet: Not publicly available * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge Datasheet: Publicly available at the SMSC website http://www.smsc.com --- linux-lts-raring-3.8.0.orig/Documentation/DocBook/media_api.tmpl +++ linux-lts-raring-3.8.0/Documentation/DocBook/media_api.tmpl @@ -1,6 +1,6 @@ - %media-entities; --- linux-lts-raring-3.8.0.orig/Documentation/DocBook/drm.tmpl +++ linux-lts-raring-3.8.0/Documentation/DocBook/drm.tmpl @@ -743,6 +743,10 @@ These two operations are mandatory for GEM drivers that support DRM PRIME. + + DRM PRIME Helper Functions Reference +!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers + GEM Objects Mapping --- linux-lts-raring-3.8.0.orig/sound/usb/pcm.c +++ linux-lts-raring-3.8.0/sound/usb/pcm.c @@ -1161,7 +1161,7 @@ stride = runtime->frame_bits >> 3; for (i = 0; i < urb->number_of_packets; i++) { - cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset; + cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset + subs->pkt_offset_adj; if (urb->iso_frame_desc[i].status && printk_ratelimit()) { snd_printdd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status); // continue; --- linux-lts-raring-3.8.0.orig/sound/usb/card.h +++ linux-lts-raring-3.8.0/sound/usb/card.h @@ -116,6 +116,7 @@ unsigned int altset_idx; /* USB data format: index of alternate setting */ unsigned int txfr_quirk:1; /* allow sub-frame alignment */ unsigned int fmt_type; /* USB audio format type (1-3) */ + unsigned int pkt_offset_adj; /* Bytes to drop from beginning of packets (for non-compliant devices) */ unsigned int running: 1; /* running status */ --- linux-lts-raring-3.8.0.orig/sound/usb/card.c +++ linux-lts-raring-3.8.0/sound/usb/card.c @@ -144,14 +144,32 @@ return -EINVAL; } + alts = &iface->altsetting[0]; + altsd = get_iface_desc(alts); + + /* + * Android with both accessory and audio interfaces enabled gets the + * interface numbers wrong. + */ + if ((chip->usb_id == USB_ID(0x18d1, 0x2d04) || + chip->usb_id == USB_ID(0x18d1, 0x2d05)) && + interface == 0 && + altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC && + altsd->bInterfaceSubClass == USB_SUBCLASS_VENDOR_SPEC) { + interface = 2; + iface = usb_ifnum_to_if(dev, interface); + if (!iface) + return -EINVAL; + alts = &iface->altsetting[0]; + altsd = get_iface_desc(alts); + } + if (usb_interface_claimed(iface)) { snd_printdd(KERN_INFO "%d:%d:%d: skipping, already claimed\n", dev->devnum, ctrlif, interface); return -EINVAL; } - alts = &iface->altsetting[0]; - altsd = get_iface_desc(alts); if ((altsd->bInterfaceClass == USB_CLASS_AUDIO || altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC) && altsd->bInterfaceSubClass == USB_SUBCLASS_MIDISTREAMING) { @@ -612,7 +630,9 @@ int err = -ENODEV; down_read(&chip->shutdown_rwsem); - if (!chip->shutdown && !chip->probing) + if (chip->probing) + err = 0; + else if (!chip->shutdown) err = usb_autopm_get_interface(chip->pm_intf); up_read(&chip->shutdown_rwsem); --- linux-lts-raring-3.8.0.orig/sound/usb/stream.c +++ linux-lts-raring-3.8.0/sound/usb/stream.c @@ -94,6 +94,7 @@ subs->dev = as->chip->dev; subs->txfr_quirk = as->chip->txfr_quirk; subs->speed = snd_usb_get_speed(subs->dev); + subs->pkt_offset_adj = 0; snd_usb_set_pcm_ops(as->pcm, stream); @@ -396,6 +397,14 @@ if (!csep && altsd->bNumEndpoints >= 2) csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT); + /* + * If we can't locate the USB_DT_CS_ENDPOINT descriptor in the extra + * bytes after the first endpoint, go search the entire interface. + * Some devices have it directly *before* the standard endpoint. + */ + if (!csep) + csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT); + if (!csep || csep->bLength < 7 || csep->bDescriptorSubtype != UAC_EP_GENERAL) { snd_printk(KERN_WARNING "%d:%u:%d : no or invalid" --- linux-lts-raring-3.8.0.orig/sound/usb/quirks-table.h +++ linux-lts-raring-3.8.0/sound/usb/quirks-table.h @@ -215,7 +215,13 @@ .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL }, { - USB_DEVICE(0x046d, 0x0990), + .match_flags = USB_DEVICE_ID_MATCH_DEVICE | + USB_DEVICE_ID_MATCH_INT_CLASS | + USB_DEVICE_ID_MATCH_INT_SUBCLASS, + .idVendor = 0x046d, + .idProduct = 0x0990, + .bInterfaceClass = USB_CLASS_AUDIO, + .bInterfaceSubClass = USB_SUBCLASS_AUDIOCONTROL, .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .vendor_name = "Logitech, Inc.", .product_name = "QuickCam Pro 9000", @@ -1714,7 +1720,11 @@ USB_DEVICE_VENDOR_SPEC(0x0582, 0x0108), .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { .ifnum = 0, - .type = QUIRK_MIDI_STANDARD_INTERFACE + .type = QUIRK_MIDI_FIXED_ENDPOINT, + .data = & (const struct snd_usb_midi_endpoint_info) { + .out_cables = 0x0007, + .in_cables = 0x0007 + } } }, { @@ -1750,7 +1760,7 @@ .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { /* .vendor_name = "Roland", */ /* .product_name = "A-PRO", */ - .ifnum = 1, + .ifnum = 0, .type = QUIRK_MIDI_FIXED_ENDPOINT, .data = & (const struct snd_usb_midi_endpoint_info) { .out_cables = 0x0003, --- linux-lts-raring-3.8.0.orig/sound/usb/midi.c +++ linux-lts-raring-3.8.0/sound/usb/midi.c @@ -126,7 +126,6 @@ struct snd_usb_midi_in_endpoint *in; } endpoints[MIDI_MAX_ENDPOINTS]; unsigned long input_triggered; - bool autopm_reference; unsigned int opened[2]; unsigned char disconnected; unsigned char input_running; @@ -1040,7 +1039,6 @@ { struct snd_usb_midi* umidi = substream->rmidi->private_data; struct snd_kcontrol *ctl; - int err; down_read(&umidi->disc_rwsem); if (umidi->disconnected) { @@ -1051,13 +1049,6 @@ mutex_lock(&umidi->mutex); if (open) { if (!umidi->opened[0] && !umidi->opened[1]) { - err = usb_autopm_get_interface(umidi->iface); - umidi->autopm_reference = err >= 0; - if (err < 0 && err != -EACCES) { - mutex_unlock(&umidi->mutex); - up_read(&umidi->disc_rwsem); - return -EIO; - } if (umidi->roland_load_ctl) { ctl = umidi->roland_load_ctl; ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; @@ -1080,8 +1071,6 @@ snd_ctl_notify(umidi->card, SNDRV_CTL_EVENT_MASK_INFO, &ctl->id); } - if (umidi->autopm_reference) - usb_autopm_put_interface(umidi->iface); } } mutex_unlock(&umidi->mutex); @@ -2256,6 +2245,8 @@ return err; } + usb_autopm_get_interface_no_resume(umidi->iface); + list_add_tail(&umidi->list, midi_list); return 0; } --- linux-lts-raring-3.8.0.orig/sound/usb/quirks.c +++ linux-lts-raring-3.8.0/sound/usb/quirks.c @@ -486,7 +486,7 @@ { int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 0xaf, USB_TYPE_VENDOR | USB_RECIP_DEVICE, - cpu_to_le16(1), 0, NULL, 0, 1000); + 1, 0, NULL, 0, 1000); if (ret < 0) return ret; @@ -533,7 +533,7 @@ { struct usb_host_config *config = dev->actconfig; int err; - u8 bootresponse[12]; + u8 bootresponse[0x12]; int fwsize; int count; @@ -837,6 +837,7 @@ break; } snd_emuusb_set_samplerate(subs->stream->chip, emu_samplerate_id); + subs->pkt_offset_adj = (emu_samplerate_id >= EMU_QUIRK_SR_176400HZ) ? 4 : 0; } void snd_usb_set_format_quirk(struct snd_usb_substream *subs, --- linux-lts-raring-3.8.0.orig/sound/usb/endpoint.c +++ linux-lts-raring-3.8.0/sound/usb/endpoint.c @@ -584,17 +584,16 @@ ep->stride = frame_bits >> 3; ep->silence_value = pcm_format == SNDRV_PCM_FORMAT_U8 ? 0x80 : 0; - /* calculate max. frequency */ - if (ep->maxpacksize) { + /* assume max. frequency is 25% higher than nominal */ + ep->freqmax = ep->freqn + (ep->freqn >> 2); + maxsize = ((ep->freqmax + 0xffff) * (frame_bits >> 3)) + >> (16 - ep->datainterval); + /* but wMaxPacketSize might reduce this */ + if (ep->maxpacksize && ep->maxpacksize < maxsize) { /* whatever fits into a max. size packet */ maxsize = ep->maxpacksize; ep->freqmax = (maxsize / (frame_bits >> 3)) << (16 - ep->datainterval); - } else { - /* no max. packet size: just take 25% higher than nominal */ - ep->freqmax = ep->freqn + (ep->freqn >> 2); - maxsize = ((ep->freqmax + 0xffff) * (frame_bits >> 3)) - >> (16 - ep->datainterval); } if (ep->fill_max) @@ -677,7 +676,7 @@ if (!u->urb->transfer_buffer) goto out_of_memory; u->urb->pipe = ep->pipe; - u->urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP; + u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; u->urb->interval = 1 << ep->datainterval; u->urb->context = u; u->urb->complete = snd_complete_urb; @@ -716,8 +715,7 @@ u->urb->transfer_dma = ep->sync_dma + i * 4; u->urb->transfer_buffer_length = 4; u->urb->pipe = ep->pipe; - u->urb->transfer_flags = URB_ISO_ASAP | - URB_NO_TRANSFER_DMA_MAP; + u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP; u->urb->number_of_packets = 1; u->urb->interval = 1 << ep->syncinterval; u->urb->context = u; --- linux-lts-raring-3.8.0.orig/sound/usb/mixer_quirks.c +++ linux-lts-raring-3.8.0/sound/usb/mixer_quirks.c @@ -509,7 +509,7 @@ else ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), bRequest, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, - 0, cpu_to_le16(wIndex), + 0, wIndex, &tmp, sizeof(tmp), 1000); up_read(&mixer->chip->shutdown_rwsem); @@ -540,7 +540,7 @@ else ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), bRequest, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, - cpu_to_le16(wValue), cpu_to_le16(wIndex), + wValue, wIndex, NULL, 0, 1000); up_read(&mixer->chip->shutdown_rwsem); --- linux-lts-raring-3.8.0.orig/sound/usb/mixer.c +++ linux-lts-raring-3.8.0/sound/usb/mixer.c @@ -715,8 +715,9 @@ case UAC2_CLOCK_SELECTOR: { struct uac_selector_unit_descriptor *d = p1; /* call recursively to retrieve the channel info */ - if (check_input_term(state, d->baSourceID[0], term) < 0) - return -ENODEV; + err = check_input_term(state, d->baSourceID[0], term); + if (err < 0) + return err; term->type = d->bDescriptorSubtype << 16; /* virtual type */ term->id = id; term->name = uac_selector_unit_iSelector(d); @@ -725,7 +726,8 @@ case UAC1_PROCESSING_UNIT: case UAC1_EXTENSION_UNIT: /* UAC2_PROCESSING_UNIT_V2 */ - /* UAC2_EFFECT_UNIT */ { + /* UAC2_EFFECT_UNIT */ + case UAC2_EXTENSION_UNIT_V2: { struct uac_processing_unit_descriptor *d = p1; if (state->mixer->protocol == UAC_VERSION_2 && @@ -882,7 +884,9 @@ case USB_ID(0x046d, 0x0808): case USB_ID(0x046d, 0x0809): + case USB_ID(0x046d, 0x081b): /* HD Webcam c310 */ case USB_ID(0x046d, 0x081d): /* HD Webcam c510 */ + case USB_ID(0x046d, 0x0825): /* HD Webcam c270 */ case USB_ID(0x046d, 0x0991): /* Most audio usb devices lie about volume resolution. * Most Logitech webcams have res = 384. @@ -1355,8 +1359,9 @@ return err; /* determine the input source type and name */ - if (check_input_term(state, hdr->bSourceID, &iterm) < 0) - return -EINVAL; + err = check_input_term(state, hdr->bSourceID, &iterm); + if (err < 0) + return err; master_bits = snd_usb_combine_bytes(bmaControls, csize); /* master configuration quirks */ @@ -2051,6 +2056,8 @@ return parse_audio_extension_unit(state, unitid, p1); else /* UAC_VERSION_2 */ return parse_audio_processing_unit(state, unitid, p1); + case UAC2_EXTENSION_UNIT_V2: + return parse_audio_extension_unit(state, unitid, p1); default: snd_printk(KERN_ERR "usbaudio: unit %u: unexpected type 0x%02x\n", unitid, p1[2]); return -EINVAL; @@ -2117,7 +2124,7 @@ state.oterm.type = le16_to_cpu(desc->wTerminalType); state.oterm.name = desc->iTerminal; err = parse_audio_unit(&state, desc->bSourceID); - if (err < 0) + if (err < 0 && err != -EINVAL) return err; } else { /* UAC_VERSION_2 */ struct uac2_output_terminal_descriptor *desc = p; @@ -2129,12 +2136,12 @@ state.oterm.type = le16_to_cpu(desc->wTerminalType); state.oterm.name = desc->iTerminal; err = parse_audio_unit(&state, desc->bSourceID); - if (err < 0) + if (err < 0 && err != -EINVAL) return err; /* for UAC2, use the same approach to also add the clock selectors */ err = parse_audio_unit(&state, desc->bCSourceID); - if (err < 0) + if (err < 0 && err != -EINVAL) return err; } } --- linux-lts-raring-3.8.0.orig/sound/usb/caiaq/audio.c +++ linux-lts-raring-3.8.0/sound/usb/caiaq/audio.c @@ -670,7 +670,6 @@ if (send_it) { out->number_of_packets = outframe; - out->transfer_flags = URB_ISO_ASAP; usb_submit_urb(out, GFP_ATOMIC); } else { struct snd_usb_caiaq_cb_info *oinfo = out->context; @@ -686,7 +685,6 @@ } urb->number_of_packets = FRAMES_PER_URB; - urb->transfer_flags = URB_ISO_ASAP; usb_submit_urb(urb, GFP_ATOMIC); } @@ -751,7 +749,6 @@ * BYTES_PER_FRAME; urbs[i]->context = &dev->data_cb_info[i]; urbs[i]->interval = 1; - urbs[i]->transfer_flags = URB_ISO_ASAP; urbs[i]->number_of_packets = FRAMES_PER_URB; urbs[i]->complete = (dir == SNDRV_PCM_STREAM_CAPTURE) ? read_completed : write_completed; --- linux-lts-raring-3.8.0.orig/sound/usb/usx2y/usx2yhwdeppcm.c +++ linux-lts-raring-3.8.0/sound/usb/usx2y/usx2yhwdeppcm.c @@ -443,7 +443,6 @@ if (0 == u) atomic_set(&subs->state, state_STARTING3); urb->dev = usX2Y->dev; - urb->transfer_flags = URB_ISO_ASAP; for (pack = 0; pack < nr_of_packs(); pack++) { urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs()); urb->iso_frame_desc[pack].length = subs->maxpacksize; --- linux-lts-raring-3.8.0.orig/sound/usb/usx2y/usb_stream.c +++ linux-lts-raring-3.8.0/sound/usb/usx2y/usb_stream.c @@ -69,7 +69,6 @@ ++u, transfer += transfer_length) { struct urb *urb = urbs[u]; struct usb_iso_packet_descriptor *desc; - urb->transfer_flags = URB_ISO_ASAP; urb->transfer_buffer = transfer; urb->dev = dev; urb->pipe = pipe; --- linux-lts-raring-3.8.0.orig/sound/usb/usx2y/usbusx2yaudio.c +++ linux-lts-raring-3.8.0/sound/usb/usx2y/usbusx2yaudio.c @@ -273,7 +273,11 @@ struct snd_usX2Y_substream *subs = usX2Y->subs[s]; if (subs) { if (atomic_read(&subs->state) >= state_PRERUNNING) { + unsigned long flags; + + snd_pcm_stream_lock_irqsave(subs->pcm_substream, flags); snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock_irqrestore(subs->pcm_substream, flags); } for (u = 0; u < NRURBS; u++) { struct urb *urb = subs->urb[u]; @@ -503,7 +507,6 @@ if (0 == i) atomic_set(&subs->state, state_STARTING3); urb->dev = usX2Y->dev; - urb->transfer_flags = URB_ISO_ASAP; for (pack = 0; pack < nr_of_packs(); pack++) { urb->iso_frame_desc[pack].offset = subs->maxpacksize * pack; urb->iso_frame_desc[pack].length = subs->maxpacksize; --- linux-lts-raring-3.8.0.orig/sound/usb/6fire/pcm.c +++ linux-lts-raring-3.8.0/sound/usb/6fire/pcm.c @@ -543,7 +543,7 @@ snd_pcm_uframes_t ret; if (rt->panic || !sub) - return SNDRV_PCM_STATE_XRUN; + return SNDRV_PCM_POS_XRUN; spin_lock_irqsave(&sub->lock, flags); ret = sub->dma_off; @@ -575,12 +575,38 @@ urb->instance.pipe = in ? usb_rcvisocpipe(chip->dev, ep) : usb_sndisocpipe(chip->dev, ep); urb->instance.interval = 1; - urb->instance.transfer_flags = URB_ISO_ASAP; urb->instance.complete = handler; urb->instance.context = urb; urb->instance.number_of_packets = PCM_N_PACKETS_PER_URB; } +static int usb6fire_pcm_buffers_init(struct pcm_runtime *rt) +{ + int i; + + for (i = 0; i < PCM_N_URBS; i++) { + rt->out_urbs[i].buffer = kzalloc(PCM_N_PACKETS_PER_URB + * PCM_MAX_PACKET_SIZE, GFP_KERNEL); + if (!rt->out_urbs[i].buffer) + return -ENOMEM; + rt->in_urbs[i].buffer = kzalloc(PCM_N_PACKETS_PER_URB + * PCM_MAX_PACKET_SIZE, GFP_KERNEL); + if (!rt->in_urbs[i].buffer) + return -ENOMEM; + } + return 0; +} + +static void usb6fire_pcm_buffers_destroy(struct pcm_runtime *rt) +{ + int i; + + for (i = 0; i < PCM_N_URBS; i++) { + kfree(rt->out_urbs[i].buffer); + kfree(rt->in_urbs[i].buffer); + } +} + int usb6fire_pcm_init(struct sfire_chip *chip) { int i; @@ -592,6 +618,13 @@ if (!rt) return -ENOMEM; + ret = usb6fire_pcm_buffers_init(rt); + if (ret) { + usb6fire_pcm_buffers_destroy(rt); + kfree(rt); + return ret; + } + rt->chip = chip; rt->stream_state = STREAM_DISABLED; rt->rate = ARRAY_SIZE(rates); @@ -613,6 +646,7 @@ ret = snd_pcm_new(chip->card, "DMX6FireUSB", 0, 1, 1, &pcm); if (ret < 0) { + usb6fire_pcm_buffers_destroy(rt); kfree(rt); snd_printk(KERN_ERR PREFIX "cannot create pcm instance.\n"); return ret; @@ -628,6 +662,7 @@ snd_dma_continuous_data(GFP_KERNEL), MAX_BUFSIZE, MAX_BUFSIZE); if (ret) { + usb6fire_pcm_buffers_destroy(rt); kfree(rt); snd_printk(KERN_ERR PREFIX "error preallocating pcm buffers.\n"); @@ -642,17 +677,25 @@ void usb6fire_pcm_abort(struct sfire_chip *chip) { struct pcm_runtime *rt = chip->pcm; + unsigned long flags; int i; if (rt) { rt->panic = true; - if (rt->playback.instance) + if (rt->playback.instance) { + snd_pcm_stream_lock_irqsave(rt->playback.instance, flags); snd_pcm_stop(rt->playback.instance, SNDRV_PCM_STATE_XRUN); - if (rt->capture.instance) + snd_pcm_stream_unlock_irqrestore(rt->playback.instance, flags); + } + + if (rt->capture.instance) { + snd_pcm_stream_lock_irqsave(rt->capture.instance, flags); snd_pcm_stop(rt->capture.instance, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock_irqrestore(rt->capture.instance, flags); + } for (i = 0; i < PCM_N_URBS; i++) { usb_poison_urb(&rt->in_urbs[i].instance); @@ -664,6 +707,9 @@ void usb6fire_pcm_destroy(struct sfire_chip *chip) { - kfree(chip->pcm); + struct pcm_runtime *rt = chip->pcm; + + usb6fire_pcm_buffers_destroy(rt); + kfree(rt); chip->pcm = NULL; } --- linux-lts-raring-3.8.0.orig/sound/usb/6fire/comm.c +++ linux-lts-raring-3.8.0/sound/usb/6fire/comm.c @@ -110,19 +110,37 @@ static int usb6fire_comm_write8(struct comm_runtime *rt, u8 request, u8 reg, u8 value) { - u8 buffer[13]; /* 13: maximum length of message */ + u8 *buffer; + int ret; + + /* 13: maximum length of message */ + buffer = kmalloc(13, GFP_KERNEL); + if (!buffer) + return -ENOMEM; usb6fire_comm_init_buffer(buffer, 0x00, request, reg, value, 0x00); - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); + + kfree(buffer); + return ret; } static int usb6fire_comm_write16(struct comm_runtime *rt, u8 request, u8 reg, u8 vl, u8 vh) { - u8 buffer[13]; /* 13: maximum length of message */ + u8 *buffer; + int ret; + + /* 13: maximum length of message */ + buffer = kmalloc(13, GFP_KERNEL); + if (!buffer) + return -ENOMEM; usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, vh); - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); + + kfree(buffer); + return ret; } int usb6fire_comm_init(struct sfire_chip *chip) @@ -135,6 +153,12 @@ if (!rt) return -ENOMEM; + rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, GFP_KERNEL); + if (!rt->receiver_buffer) { + kfree(rt); + return -ENOMEM; + } + urb = &rt->receiver; rt->serial = 1; rt->chip = chip; @@ -153,6 +177,7 @@ urb->interval = 1; ret = usb_submit_urb(urb, GFP_KERNEL); if (ret < 0) { + kfree(rt->receiver_buffer); kfree(rt); snd_printk(KERN_ERR PREFIX "cannot create comm data receiver."); return ret; @@ -171,6 +196,9 @@ void usb6fire_comm_destroy(struct sfire_chip *chip) { - kfree(chip->comm); + struct comm_runtime *rt = chip->comm; + + kfree(rt->receiver_buffer); + kfree(rt); chip->comm = NULL; } --- linux-lts-raring-3.8.0.orig/sound/usb/6fire/midi.c +++ linux-lts-raring-3.8.0/sound/usb/6fire/midi.c @@ -19,6 +19,10 @@ #include "chip.h" #include "comm.h" +enum { + MIDI_BUFSIZE = 64 +}; + static void usb6fire_midi_out_handler(struct urb *urb) { struct midi_runtime *rt = urb->context; @@ -156,6 +160,12 @@ if (!rt) return -ENOMEM; + rt->out_buffer = kzalloc(MIDI_BUFSIZE, GFP_KERNEL); + if (!rt->out_buffer) { + kfree(rt); + return -ENOMEM; + } + rt->chip = chip; rt->in_received = usb6fire_midi_in_received; rt->out_buffer[0] = 0x80; /* 'send midi' command */ @@ -169,6 +179,7 @@ ret = snd_rawmidi_new(chip->card, "6FireUSB", 0, 1, 1, &rt->instance); if (ret < 0) { + kfree(rt->out_buffer); kfree(rt); snd_printk(KERN_ERR PREFIX "unable to create midi.\n"); return ret; @@ -197,6 +208,9 @@ void usb6fire_midi_destroy(struct sfire_chip *chip) { - kfree(chip->midi); + struct midi_runtime *rt = chip->midi; + + kfree(rt->out_buffer); + kfree(rt); chip->midi = NULL; } --- linux-lts-raring-3.8.0.orig/sound/usb/6fire/comm.h +++ linux-lts-raring-3.8.0/sound/usb/6fire/comm.h @@ -24,7 +24,7 @@ struct sfire_chip *chip; struct urb receiver; - u8 receiver_buffer[COMM_RECEIVER_BUFSIZE]; + u8 *receiver_buffer; u8 serial; /* urb serial */ --- linux-lts-raring-3.8.0.orig/sound/usb/6fire/midi.h +++ linux-lts-raring-3.8.0/sound/usb/6fire/midi.h @@ -16,10 +16,6 @@ #include "common.h" -enum { - MIDI_BUFSIZE = 64 -}; - struct midi_runtime { struct sfire_chip *chip; struct snd_rawmidi *instance; @@ -32,7 +28,7 @@ struct snd_rawmidi_substream *out; struct urb out_urb; u8 out_serial; /* serial number of out packet */ - u8 out_buffer[MIDI_BUFSIZE]; + u8 *out_buffer; int buffer_offset; void (*in_received)(struct midi_runtime *rt, u8 *data, int length); --- linux-lts-raring-3.8.0.orig/sound/usb/6fire/pcm.h +++ linux-lts-raring-3.8.0/sound/usb/6fire/pcm.h @@ -32,7 +32,7 @@ struct urb instance; struct usb_iso_packet_descriptor packets[PCM_N_PACKETS_PER_URB]; /* END DO NOT SEPARATE */ - u8 buffer[PCM_N_PACKETS_PER_URB * PCM_MAX_PACKET_SIZE]; + u8 *buffer; struct pcm_urb *peer; }; --- linux-lts-raring-3.8.0.orig/sound/usb/misc/ua101.c +++ linux-lts-raring-3.8.0/sound/usb/misc/ua101.c @@ -613,14 +613,24 @@ static void abort_alsa_capture(struct ua101 *ua) { - if (test_bit(ALSA_CAPTURE_RUNNING, &ua->states)) + unsigned long flags; + + if (test_bit(ALSA_CAPTURE_RUNNING, &ua->states)) { + snd_pcm_stream_lock_irqsave(ua->capture.substream, flags); snd_pcm_stop(ua->capture.substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock_irqrestore(ua->capture.substream, flags); + } } static void abort_alsa_playback(struct ua101 *ua) { - if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states)) + unsigned long flags; + + if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states)) { + snd_pcm_stream_lock_irqsave(ua->playback.substream, flags); snd_pcm_stop(ua->playback.substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock_irqrestore(ua->playback.substream, flags); + } } static int set_stream_hw(struct ua101 *ua, struct snd_pcm_substream *substream, @@ -1120,8 +1130,7 @@ usb_init_urb(&urb->urb); urb->urb.dev = ua->dev; urb->urb.pipe = stream->usb_pipe; - urb->urb.transfer_flags = URB_ISO_ASAP | - URB_NO_TRANSFER_DMA_MAP; + urb->urb.transfer_flags = URB_NO_TRANSFER_DMA_MAP; urb->urb.transfer_buffer = addr; urb->urb.transfer_dma = dma; urb->urb.transfer_buffer_length = max_packet_size; --- linux-lts-raring-3.8.0.orig/sound/soc/soc-core.c +++ linux-lts-raring-3.8.0/sound/soc/soc-core.c @@ -2959,7 +2959,7 @@ val = val << shift; ret = snd_soc_update_bits_locked(codec, reg, val_mask, val); - if (ret != 0) + if (ret < 0) return ret; if (snd_soc_volsw_is_stereo(mc)) { --- linux-lts-raring-3.8.0.orig/sound/soc/s6000/s6000-pcm.c +++ linux-lts-raring-3.8.0/sound/soc/s6000/s6000-pcm.c @@ -128,7 +128,9 @@ substream->runtime && snd_pcm_running(substream)) { dev_dbg(pcm->dev, "xrun\n"); + snd_pcm_stream_lock(substream); snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock(substream); ret = IRQ_HANDLED; } --- linux-lts-raring-3.8.0.orig/sound/soc/tegra/tegra30_i2s.c +++ linux-lts-raring-3.8.0/sound/soc/tegra/tegra30_i2s.c @@ -227,7 +227,7 @@ reg = TEGRA30_I2S_CIF_RX_CTRL; } else { val |= TEGRA30_AUDIOCIF_CTRL_DIRECTION_TX; - reg = TEGRA30_I2S_CIF_RX_CTRL; + reg = TEGRA30_I2S_CIF_TX_CTRL; } regmap_write(i2s->regmap, reg, val); --- linux-lts-raring-3.8.0.orig/sound/soc/atmel/atmel-pcm-dma.c +++ linux-lts-raring-3.8.0/sound/soc/atmel/atmel-pcm-dma.c @@ -80,7 +80,9 @@ /* stop RX and capture: will be enabled again at restart */ ssc_writex(prtd->ssc->regs, SSC_CR, prtd->mask->ssc_disable); + snd_pcm_stream_lock(substream); snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock(substream); /* now drain RHR and read status to remove xrun condition */ ssc_readx(prtd->ssc->regs, SSC_RHR); --- linux-lts-raring-3.8.0.orig/sound/soc/sh/dma-sh7760.c +++ linux-lts-raring-3.8.0/sound/soc/sh/dma-sh7760.c @@ -342,8 +342,8 @@ return 0; } -static struct snd_soc_platform sh7760_soc_platform = { - .pcm_ops = &camelot_pcm_ops, +static struct snd_soc_platform_driver sh7760_soc_platform = { + .ops = &camelot_pcm_ops, .pcm_new = camelot_pcm_new, .pcm_free = camelot_pcm_free, }; --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/cs42l52.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/cs42l52.c @@ -86,7 +86,7 @@ { CS42L52_BEEP_VOL, 0x00 }, /* r1D Beep Volume off Time */ { CS42L52_BEEP_TONE_CTL, 0x00 }, /* r1E Beep Tone Cfg. */ { CS42L52_TONE_CTL, 0x00 }, /* r1F Tone Ctl */ - { CS42L52_MASTERA_VOL, 0x88 }, /* r20 Master A Volume */ + { CS42L52_MASTERA_VOL, 0x00 }, /* r20 Master A Volume */ { CS42L52_MASTERB_VOL, 0x00 }, /* r21 Master B Volume */ { CS42L52_HPA_VOL, 0x00 }, /* r22 Headphone A Volume */ { CS42L52_HPB_VOL, 0x00 }, /* r23 Headphone B Volume */ @@ -449,7 +449,7 @@ SOC_ENUM("Beep Pitch", beep_pitch_enum), SOC_ENUM("Beep on Time", beep_ontime_enum), SOC_ENUM("Beep off Time", beep_offtime_enum), - SOC_SINGLE_TLV("Beep Volume", CS42L52_BEEP_VOL, 0, 0x1f, 0x07, hl_tlv), + SOC_SINGLE_SX_TLV("Beep Volume", CS42L52_BEEP_VOL, 0, 0x07, 0x1f, hl_tlv), SOC_SINGLE("Beep Mixer Switch", CS42L52_BEEP_TONE_CTL, 5, 1, 1), SOC_ENUM("Beep Treble Corner Freq", beep_treble_enum), SOC_ENUM("Beep Bass Corner Freq", beep_bass_enum), --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm8994.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm8994.c @@ -2841,6 +2841,7 @@ default: return 0; } + break; default: return 0; } --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm5110.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm5110.c @@ -177,7 +177,7 @@ ARIZONA_MIXER_CONTROLS("DSP3L", ARIZONA_DSP3LMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("DSP3R", ARIZONA_DSP3RMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("DSP4L", ARIZONA_DSP4LMIX_INPUT_1_SOURCE), -ARIZONA_MIXER_CONTROLS("DSP5R", ARIZONA_DSP4RMIX_INPUT_1_SOURCE), +ARIZONA_MIXER_CONTROLS("DSP4R", ARIZONA_DSP4RMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("Mic", ARIZONA_MICMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("Noise", ARIZONA_NOISEMIX_INPUT_1_SOURCE), --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/sgtl5000.h +++ linux-lts-raring-3.8.0/sound/soc/codecs/sgtl5000.h @@ -347,7 +347,7 @@ #define SGTL5000_PLL_INT_DIV_MASK 0xf800 #define SGTL5000_PLL_INT_DIV_SHIFT 11 #define SGTL5000_PLL_INT_DIV_WIDTH 5 -#define SGTL5000_PLL_FRAC_DIV_MASK 0x0700 +#define SGTL5000_PLL_FRAC_DIV_MASK 0x07ff #define SGTL5000_PLL_FRAC_DIV_SHIFT 0 #define SGTL5000_PLL_FRAC_DIV_WIDTH 11 --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/sgtl5000.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/sgtl5000.c @@ -37,7 +37,7 @@ static const u16 sgtl5000_regs[SGTL5000_MAX_REG_OFFSET] = { [SGTL5000_CHIP_CLK_CTRL] = 0x0008, [SGTL5000_CHIP_I2S_CTRL] = 0x0010, - [SGTL5000_CHIP_SSS_CTRL] = 0x0008, + [SGTL5000_CHIP_SSS_CTRL] = 0x0010, [SGTL5000_CHIP_DAC_VOL] = 0x3c3c, [SGTL5000_CHIP_PAD_STRENGTH] = 0x015f, [SGTL5000_CHIP_ANA_HP_CTRL] = 0x1818, --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm8960.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm8960.c @@ -847,9 +847,9 @@ if (pll_div.k) { reg |= 0x20; - snd_soc_write(codec, WM8960_PLL2, (pll_div.k >> 18) & 0x3f); - snd_soc_write(codec, WM8960_PLL3, (pll_div.k >> 9) & 0x1ff); - snd_soc_write(codec, WM8960_PLL4, pll_div.k & 0x1ff); + snd_soc_write(codec, WM8960_PLL2, (pll_div.k >> 16) & 0xff); + snd_soc_write(codec, WM8960_PLL3, (pll_div.k >> 8) & 0xff); + snd_soc_write(codec, WM8960_PLL4, pll_div.k & 0xff); } snd_soc_write(codec, WM8960_PLL1, reg); --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/mc13783.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/mc13783.c @@ -126,6 +126,10 @@ ret = mc13xxx_reg_write(priv->mc13xxx, reg, value); + /* include errata fix for spi audio problems */ + if (reg == MC13783_AUDIO_CODEC || reg == MC13783_AUDIO_DAC) + ret = mc13xxx_reg_write(priv->mc13xxx, reg, value); + mc13xxx_unlock(priv->mc13xxx); return ret; --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/max98088.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/max98088.c @@ -1594,7 +1594,7 @@ static void max98088_sync_cache(struct snd_soc_codec *codec) { - u16 *reg_cache = codec->reg_cache; + u8 *reg_cache = codec->reg_cache; int i; if (!codec->cache_sync) @@ -2006,7 +2006,7 @@ ret); goto err_access; } - dev_info(codec->dev, "revision %c\n", ret + 'A'); + dev_info(codec->dev, "revision %c\n", ret - 0x40 + 'A'); snd_soc_write(codec, M98088_REG_51_PWR_SYS, M98088_PWRSV); --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/max98095.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/max98095.c @@ -1863,7 +1863,7 @@ struct max98095_pdata *pdata = max98095->pdata; int channel = max98095_get_eq_channel(kcontrol->id.name); struct max98095_cdata *cdata; - int sel = ucontrol->value.integer.value[0]; + unsigned int sel = ucontrol->value.integer.value[0]; struct max98095_eq_cfg *coef_set; int fs, best, best_val, i; int regmask, regsave; @@ -2016,7 +2016,7 @@ struct max98095_pdata *pdata = max98095->pdata; int channel = max98095_get_bq_channel(codec, kcontrol->id.name); struct max98095_cdata *cdata; - int sel = ucontrol->value.integer.value[0]; + unsigned int sel = ucontrol->value.integer.value[0]; struct max98095_biquad_cfg *coef_set; int fs, best, best_val, i; int regmask, regsave; --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm5102.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm5102.c @@ -576,7 +576,7 @@ struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = w->codec; - struct arizona *arizona = dev_get_drvdata(codec->dev); + struct arizona *arizona = dev_get_drvdata(codec->dev->parent); struct regmap *regmap = codec->control_data; const struct reg_default *patch = NULL; int i, patch_size; --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm2200.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm2200.c @@ -1126,9 +1126,9 @@ SOC_DOUBLE_R("IN1 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_1L, WM2200_ADC_DIGITAL_VOLUME_1R, WM2200_IN1L_MUTE_SHIFT, 1, 1), -SOC_DOUBLE_R("IN2 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_1L, +SOC_DOUBLE_R("IN2 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_2L, WM2200_ADC_DIGITAL_VOLUME_2R, WM2200_IN2L_MUTE_SHIFT, 1, 1), -SOC_DOUBLE_R("IN3 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_1L, +SOC_DOUBLE_R("IN3 Digital Switch", WM2200_ADC_DIGITAL_VOLUME_3L, WM2200_ADC_DIGITAL_VOLUME_3R, WM2200_IN3L_MUTE_SHIFT, 1, 1), SOC_DOUBLE_R_TLV("IN1 Digital Volume", WM2200_ADC_DIGITAL_VOLUME_1L, --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/88pm860x-codec.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/88pm860x-codec.c @@ -351,6 +351,9 @@ val = ucontrol->value.integer.value[0]; val2 = ucontrol->value.integer.value[1]; + if (val >= ARRAY_SIZE(st_table) || val2 >= ARRAY_SIZE(st_table)) + return -EINVAL; + err = snd_soc_update_bits(codec, reg, 0x3f, st_table[val].m); if (err < 0) return err; --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/ab8500-codec.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/ab8500-codec.c @@ -1225,13 +1225,18 @@ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev); struct device *dev = codec->dev; bool apply_fir, apply_iir; - int req, status; + unsigned int req; + int status; dev_dbg(dev, "%s: Enter.\n", __func__); mutex_lock(&drvdata->anc_lock); req = ucontrol->value.integer.value[0]; + if (req >= ARRAY_SIZE(enum_anc_state)) { + status = -EINVAL; + goto cleanup; + } if (req != ANC_APPLY_FIR_IIR && req != ANC_APPLY_FIR && req != ANC_APPLY_IIR) { dev_err(dev, "%s: ERROR: Unsupported status to set '%s'!\n", --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm8962.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm8962.c @@ -1600,7 +1600,6 @@ struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); - u16 *reg_cache = codec->reg_cache; int ret; /* Apply the update (if any) */ @@ -1609,16 +1608,19 @@ return 0; /* If the left PGA is enabled hit that VU bit... */ - if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTL_PGA_ENA) - return snd_soc_write(codec, WM8962_HPOUTL_VOLUME, - reg_cache[WM8962_HPOUTL_VOLUME]); + ret = snd_soc_read(codec, WM8962_PWR_MGMT_2); + if (ret & WM8962_HPOUTL_PGA_ENA) { + snd_soc_write(codec, WM8962_HPOUTL_VOLUME, + snd_soc_read(codec, WM8962_HPOUTL_VOLUME)); + return 1; + } /* ...otherwise the right. The VU is stereo. */ - if (snd_soc_read(codec, WM8962_PWR_MGMT_2) & WM8962_HPOUTR_PGA_ENA) - return snd_soc_write(codec, WM8962_HPOUTR_VOLUME, - reg_cache[WM8962_HPOUTR_VOLUME]); + if (ret & WM8962_HPOUTR_PGA_ENA) + snd_soc_write(codec, WM8962_HPOUTR_VOLUME, + snd_soc_read(codec, WM8962_HPOUTR_VOLUME)); - return 0; + return 1; } /* The VU bits for the speakers are in a different register to the mute @@ -3378,7 +3380,6 @@ int ret; struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec); struct wm8962_pdata *pdata = dev_get_platdata(codec->dev); - u16 *reg_cache = codec->reg_cache; int i, trigger, irq_pol; bool dmicclk, dmicdat; @@ -3436,8 +3437,9 @@ /* Put the speakers into mono mode? */ if (pdata->spk_mono) - reg_cache[WM8962_CLASS_D_CONTROL_2] - |= WM8962_SPK_MONO; + snd_soc_update_bits(codec, WM8962_CLASS_D_CONTROL_2, + WM8962_SPK_MONO_MASK, WM8962_SPK_MONO); + /* Micbias setup, detection enable and detection * threasholds. */ --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/wm8903.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/wm8903.c @@ -1083,6 +1083,8 @@ { "ROP", NULL, "Right Speaker PGA" }, { "RON", NULL, "Right Speaker PGA" }, + { "Charge Pump", NULL, "CLK_DSP" }, + { "Left Headphone Output PGA", NULL, "Charge Pump" }, { "Right Headphone Output PGA", NULL, "Charge Pump" }, { "Left Line Output PGA", NULL, "Charge Pump" }, --- linux-lts-raring-3.8.0.orig/sound/soc/codecs/arizona.c +++ linux-lts-raring-3.8.0/sound/soc/codecs/arizona.c @@ -910,7 +910,7 @@ cfg->n = target / (ratio * Fref); - if (target % Fref) { + if (target % (ratio * Fref)) { gcd_fll = gcd(target, ratio * Fref); arizona_fll_dbg(fll, "GCD=%u\n", gcd_fll); @@ -922,6 +922,15 @@ cfg->lambda = 0; } + /* Round down to 16bit range with cost of accuracy lost. + * Denominator must be bigger than numerator so we only + * take care of it. + */ + while (cfg->lambda >= (1 << 16)) { + cfg->theta >>= 1; + cfg->lambda >>= 1; + } + arizona_fll_dbg(fll, "N=%x THETA=%x LAMBDA=%x\n", cfg->n, cfg->theta, cfg->lambda); arizona_fll_dbg(fll, "FRATIO=%x(%d) OUTDIV=%x REFCLK_DIV=%x\n", --- linux-lts-raring-3.8.0.orig/sound/soc/spear/spear_pcm.c +++ linux-lts-raring-3.8.0/sound/soc/spear/spear_pcm.c @@ -149,9 +149,9 @@ static u64 spear_pcm_dmamask = DMA_BIT_MASK(32); -static int spear_pcm_new(struct snd_card *card, - struct snd_soc_dai *dai, struct snd_pcm *pcm) +static int spear_pcm_new(struct snd_soc_pcm_runtime *rtd) { + struct snd_card *card = rtd->card->snd_card; int ret; if (!card->dev->dma_mask) @@ -159,16 +159,16 @@ if (!card->dev->coherent_dma_mask) card->dev->coherent_dma_mask = DMA_BIT_MASK(32); - if (dai->driver->playback.channels_min) { - ret = spear_pcm_preallocate_dma_buffer(pcm, + if (rtd->cpu_dai->driver->playback.channels_min) { + ret = spear_pcm_preallocate_dma_buffer(rtd->pcm, SNDRV_PCM_STREAM_PLAYBACK, spear_pcm_hardware.buffer_bytes_max); if (ret) return ret; } - if (dai->driver->capture.channels_min) { - ret = spear_pcm_preallocate_dma_buffer(pcm, + if (rtd->cpu_dai->driver->capture.channels_min) { + ret = spear_pcm_preallocate_dma_buffer(rtd->pcm, SNDRV_PCM_STREAM_CAPTURE, spear_pcm_hardware.buffer_bytes_max); if (ret) --- linux-lts-raring-3.8.0.orig/sound/soc/fsl/imx-ssi.c +++ linux-lts-raring-3.8.0/sound/soc/fsl/imx-ssi.c @@ -496,6 +496,8 @@ if (imx_ssi->ac97_reset) imx_ssi->ac97_reset(ac97); + /* First read sometimes fails, do a dummy read */ + imx_ssi_ac97_read(ac97, 0); } static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97) @@ -504,6 +506,9 @@ if (imx_ssi->ac97_warm_reset) imx_ssi->ac97_warm_reset(ac97); + + /* First read sometimes fails, do a dummy read */ + imx_ssi_ac97_read(ac97, 0); } struct snd_ac97_bus_ops soc_ac97_ops = { --- linux-lts-raring-3.8.0.orig/sound/drivers/aloop.c +++ linux-lts-raring-3.8.0/sound/drivers/aloop.c @@ -286,12 +286,14 @@ loopback_active_notify(dpcm); break; case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + case SNDRV_PCM_TRIGGER_SUSPEND: spin_lock(&cable->lock); cable->pause |= stream; loopback_timer_stop(dpcm); spin_unlock(&cable->lock); break; case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + case SNDRV_PCM_TRIGGER_RESUME: spin_lock(&cable->lock); dpcm->last_jiffies = jiffies; cable->pause &= ~stream; @@ -563,7 +565,8 @@ static struct snd_pcm_hardware loopback_pcm_hardware = { .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP | - SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE), + SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE | + SNDRV_PCM_INFO_RESUME), .formats = (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE | SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE | SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE), --- linux-lts-raring-3.8.0.orig/sound/isa/opti9xx/opti92x-ad1848.c +++ linux-lts-raring-3.8.0/sound/isa/opti9xx/opti92x-ad1848.c @@ -173,11 +173,7 @@ #endif /* CONFIG_PNP */ -#ifdef OPTi93X -#define DEV_NAME "opti93x" -#else -#define DEV_NAME "opti92x" -#endif +#define DEV_NAME KBUILD_MODNAME static char * snd_opti9xx_names[] = { "unknown", @@ -1168,7 +1164,7 @@ static struct pnp_card_driver opti9xx_pnpc_driver = { .flags = PNP_DRIVER_RES_DISABLE, - .name = "opti9xx", + .name = DEV_NAME, .id_table = snd_opti9xx_pnpids, .probe = snd_opti9xx_pnp_probe, .remove = snd_opti9xx_pnp_remove, --- linux-lts-raring-3.8.0.orig/sound/pci/atiixp.c +++ linux-lts-raring-3.8.0/sound/pci/atiixp.c @@ -688,7 +688,9 @@ if (! dma->substream || ! dma->running) return; snd_printdd("atiixp: XRUN detected (DMA %d)\n", dma->ops->type); + snd_pcm_stream_lock(dma->substream); snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock(dma->substream); } /* --- linux-lts-raring-3.8.0.orig/sound/pci/bt87x.c +++ linux-lts-raring-3.8.0/sound/pci/bt87x.c @@ -836,6 +836,8 @@ {0x7063, 0x2000}, /* pcHDTV HD-2000 TV */ }; +static struct pci_driver driver; + /* return the id of the card, or a negative value if it's blacklisted */ static int snd_bt87x_detect_card(struct pci_dev *pci) { @@ -962,11 +964,24 @@ { } }; -static struct pci_driver bt87x_driver = { +static struct pci_driver driver = { .name = KBUILD_MODNAME, .id_table = snd_bt87x_ids, .probe = snd_bt87x_probe, .remove = snd_bt87x_remove, }; -module_pci_driver(bt87x_driver); +static int __init alsa_card_bt87x_init(void) +{ + if (load_all) + driver.id_table = snd_bt87x_default_ids; + return pci_register_driver(&driver); +} + +static void __exit alsa_card_bt87x_exit(void) +{ + pci_unregister_driver(&driver); +} + +module_init(alsa_card_bt87x_init) +module_exit(alsa_card_bt87x_exit) --- linux-lts-raring-3.8.0.orig/sound/pci/atiixp_modem.c +++ linux-lts-raring-3.8.0/sound/pci/atiixp_modem.c @@ -638,7 +638,9 @@ if (! dma->substream || ! dma->running) return; snd_printdd("atiixp-modem: XRUN detected (DMA %d)\n", dma->ops->type); + snd_pcm_stream_lock(dma->substream); snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock(dma->substream); } /* --- linux-lts-raring-3.8.0.orig/sound/pci/rme32.c +++ linux-lts-raring-3.8.0/sound/pci/rme32.c @@ -1017,7 +1017,7 @@ spin_lock_irq(&rme32->lock); rme32->capture_substream = NULL; rme32->capture_periodsize = 0; - spin_unlock(&rme32->lock); + spin_unlock_irq(&rme32->lock); return 0; } --- linux-lts-raring-3.8.0.orig/sound/pci/asihpi/asihpi.c +++ linux-lts-raring-3.8.0/sound/pci/asihpi/asihpi.c @@ -769,7 +769,10 @@ s->number); ds->drained_count++; if (ds->drained_count > 20) { + unsigned long flags; + snd_pcm_stream_lock_irqsave(s, flags); snd_pcm_stop(s, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock_irqrestore(s, flags); continue; } } else { --- linux-lts-raring-3.8.0.orig/sound/pci/hda/patch_sigmatel.c +++ linux-lts-raring-3.8.0/sound/pci/hda/patch_sigmatel.c @@ -5110,7 +5110,7 @@ } snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE, afg_power_state); - snd_hda_codec_set_power_to_all(codec, fg, power_state, true); + snd_hda_codec_set_power_to_all(codec, fg, power_state); } #else #define stac92xx_suspend NULL --- linux-lts-raring-3.8.0.orig/sound/pci/hda/patch_conexant.c +++ linux-lts-raring-3.8.0/sound/pci/hda/patch_conexant.c @@ -435,7 +435,7 @@ /* partial workaround for "azx_get_response timeout" */ if (power_state == AC_PWRST_D0) msleep(10); - snd_hda_codec_set_power_to_all(codec, fg, power_state, true); + snd_hda_codec_set_power_to_all(codec, fg, power_state); } static int conexant_init(struct hda_codec *codec) @@ -1175,7 +1175,7 @@ } if (spec->beep_amp) - snd_hda_attach_beep_device(codec, spec->beep_amp); + snd_hda_attach_beep_device(codec, get_amp_nid_(spec->beep_amp)); return 0; } @@ -1954,7 +1954,7 @@ } if (spec->beep_amp) - snd_hda_attach_beep_device(codec, spec->beep_amp); + snd_hda_attach_beep_device(codec, get_amp_nid_(spec->beep_amp)); return 0; } @@ -3136,7 +3136,7 @@ } if (spec->beep_amp) - snd_hda_attach_beep_device(codec, spec->beep_amp); + snd_hda_attach_beep_device(codec, get_amp_nid_(spec->beep_amp)); return 0; } @@ -4576,7 +4576,7 @@ spec->capture_stream = &cx_auto_pcm_analog_capture; codec->patch_ops = cx_auto_patch_ops; if (spec->beep_amp) - snd_hda_attach_beep_device(codec, spec->beep_amp); + snd_hda_attach_beep_device(codec, get_amp_nid_(spec->beep_amp)); /* Some laptops with Conexant chips show stalls in S3 resume, * which falls into the single-cmd mode. --- linux-lts-raring-3.8.0.orig/sound/pci/hda/patch_hdmi.c +++ linux-lts-raring-3.8.0/sound/pci/hda/patch_hdmi.c @@ -38,6 +38,7 @@ #include #include "hda_codec.h" #include "hda_local.h" +#include "hda_auto_parser.h" #include "hda_jack.h" static bool static_hdmi_pcm; @@ -79,8 +80,10 @@ }; struct hdmi_spec { + struct hda_gen_spec gen; int num_cvts; struct hdmi_spec_per_cvt cvts[MAX_HDMI_CVTS]; + hda_nid_t cvt_nids[MAX_HDMI_CVTS]; int num_pins; struct hdmi_spec_per_pin pins[MAX_HDMI_PINS]; @@ -530,6 +533,17 @@ } } + if (!ca) { + /* if there was no match, select the regular ALSA channel + * allocation with the matching number of channels */ + for (i = 0; i < ARRAY_SIZE(channel_allocations); i++) { + if (channels == channel_allocations[i].channels) { + ca = channel_allocations[i].ca_index; + break; + } + } + } + snd_print_channel_allocation(eld->spk_alloc, buf, sizeof(buf)); snd_printdd("HDMI: select CA 0x%x for %d-channel allocation: %s\n", ca, channels, buf); @@ -714,9 +728,10 @@ static void hdmi_setup_channel_mapping(struct hda_codec *codec, hda_nid_t pin_nid, bool non_pcm, int ca, - int channels, unsigned char *map) + int channels, unsigned char *map, + bool chmap_set) { - if (!non_pcm && map) { + if (!non_pcm && chmap_set) { hdmi_manual_setup_channel_mapping(codec, pin_nid, channels, map); } else { @@ -905,7 +920,8 @@ pin_nid, channels); hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, - channels, per_pin->chmap); + channels, per_pin->chmap, + per_pin->chmap_set); hdmi_stop_infoframe_trans(codec, pin_nid); hdmi_fill_audio_infoframe(codec, pin_nid, ai.bytes, sizeof(ai)); @@ -915,7 +931,8 @@ * accordingly */ if (per_pin->non_pcm != non_pcm) hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, - channels, per_pin->chmap); + channels, per_pin->chmap, + per_pin->chmap_set); } per_pin->non_pcm = non_pcm; @@ -994,6 +1011,41 @@ hdmi_non_intrinsic_event(codec, res); } +static void haswell_verify_pin_D0(struct hda_codec *codec, hda_nid_t nid) +{ + int pwr, lamp, ramp; + + pwr = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0); + pwr = (pwr & AC_PWRST_ACTUAL) >> AC_PWRST_ACTUAL_SHIFT; + if (pwr != AC_PWRST_D0) { + snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_POWER_STATE, + AC_PWRST_D0); + msleep(40); + pwr = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0); + pwr = (pwr & AC_PWRST_ACTUAL) >> AC_PWRST_ACTUAL_SHIFT; + snd_printd("Haswell HDMI audio: Power for pin 0x%x is now D%d\n", nid, pwr); + } + + lamp = snd_hda_codec_read(codec, nid, 0, + AC_VERB_GET_AMP_GAIN_MUTE, + AC_AMP_GET_LEFT | AC_AMP_GET_OUTPUT); + ramp = snd_hda_codec_read(codec, nid, 0, + AC_VERB_GET_AMP_GAIN_MUTE, + AC_AMP_GET_RIGHT | AC_AMP_GET_OUTPUT); + if (lamp != ramp) { + snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, + AC_AMP_SET_RIGHT | AC_AMP_SET_OUTPUT | lamp); + + lamp = snd_hda_codec_read(codec, nid, 0, + AC_VERB_GET_AMP_GAIN_MUTE, + AC_AMP_GET_LEFT | AC_AMP_GET_OUTPUT); + ramp = snd_hda_codec_read(codec, nid, 0, + AC_VERB_GET_AMP_GAIN_MUTE, + AC_AMP_GET_RIGHT | AC_AMP_GET_OUTPUT); + snd_printd("Haswell HDMI audio: Mute after set on pin 0x%x: [0x%x 0x%x]\n", nid, lamp, ramp); + } +} + /* * Callbacks */ @@ -1008,6 +1060,9 @@ int pinctl; int new_pinctl = 0; + if (codec->vendor_id == 0x80862807) + haswell_verify_pin_D0(codec, pin_nid); + if (snd_hda_query_pin_caps(codec, pin_nid) & AC_PINCAP_HBR) { pinctl = snd_hda_codec_read(codec, pin_nid, 0, AC_VERB_GET_PIN_WIDGET_CONTROL, 0); @@ -1084,7 +1139,7 @@ per_cvt->assigned = 1; hinfo->nid = per_cvt->cvt_nid; - snd_hda_codec_write(codec, per_pin->pin_nid, 0, + snd_hda_codec_write_cache(codec, per_pin->pin_nid, 0, AC_VERB_SET_CONNECT_SEL, mux_idx); snd_hda_spdif_ctls_assign(codec, pin_idx, per_cvt->cvt_nid); @@ -1100,8 +1155,12 @@ if (!static_hdmi_pcm && eld->eld_valid) { snd_hdmi_eld_update_pcm_info(eld, hinfo); if (hinfo->channels_min > hinfo->channels_max || - !hinfo->rates || !hinfo->formats) + !hinfo->rates || !hinfo->formats) { + per_cvt->assigned = 0; + hinfo->nid = 0; + snd_hda_spdif_ctls_unassign(codec, pin_idx); return -ENODEV; + } } /* Store the updated parameters */ @@ -1165,6 +1224,7 @@ "HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n", codec->addr, pin_nid, eld->monitor_present, eld_valid); + eld->eld_valid = false; if (eld_valid) { if (!snd_hdmi_get_eld(eld, codec, pin_nid)) snd_hdmi_show_eld(eld); @@ -1187,6 +1247,9 @@ hdmi_present_sense(per_pin, per_pin->repoll_count); } +static void intel_haswell_fixup_connect_list(struct hda_codec *codec, + hda_nid_t nid); + static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid) { struct hdmi_spec *spec = codec->spec; @@ -1206,6 +1269,9 @@ if (snd_BUG_ON(spec->num_pins >= MAX_HDMI_PINS)) return -E2BIG; + if (codec->vendor_id == 0x80862807) + intel_haswell_fixup_connect_list(codec, pin_nid); + pin_idx = spec->num_pins; per_pin = &spec->pins[pin_idx]; @@ -1253,7 +1319,7 @@ if (err < 0) return err; - spec->num_cvts++; + spec->cvt_nids[spec->num_cvts++] = cvt_nid; return 0; } @@ -1565,6 +1631,9 @@ if (pcmdev > 0) sprintf(hdmi_str + strlen(hdmi_str), ",pcm=%d", pcmdev); + if (!is_jack_detectable(codec, per_pin->pin_nid)) + strncat(hdmi_str, " Phantom", + sizeof(hdmi_str) - strlen(hdmi_str) - 1); return snd_hda_jack_add_kctl(codec, per_pin->pin_nid, hdmi_str, 0); } @@ -1606,6 +1675,9 @@ struct snd_pcm_chmap *chmap; struct snd_kcontrol *kctl; int i; + + if (!codec->pcm_info[pin_idx].pcm) + break; err = snd_pcm_add_chmap_ctls(codec->pcm_info[pin_idx].pcm, SNDRV_PCM_STREAM_PLAYBACK, NULL, 0, pin_idx, &chmap); @@ -1681,29 +1753,79 @@ .unsol_event = hdmi_unsol_event, }; -static void intel_haswell_fixup_connect_list(struct hda_codec *codec) + +static void intel_haswell_fixup_connect_list(struct hda_codec *codec, + hda_nid_t nid) +{ + struct hdmi_spec *spec = codec->spec; + hda_nid_t conns[4]; + int nconns; + + nconns = snd_hda_get_connections(codec, nid, conns, ARRAY_SIZE(conns)); + if (nconns == spec->num_cvts && + !memcmp(conns, spec->cvt_nids, spec->num_cvts * sizeof(hda_nid_t))) + return; + + /* override pins connection list */ + snd_printdd("hdmi: haswell: override pin connection 0x%x\n", nid); + snd_hda_override_conn_list(codec, nid, spec->num_cvts, spec->cvt_nids); +} + +#define INTEL_VENDOR_NID 0x08 +#define INTEL_GET_VENDOR_VERB 0xf81 +#define INTEL_SET_VENDOR_VERB 0x781 +#define INTEL_EN_DP12 0x02 /* enable DP 1.2 features */ +#define INTEL_EN_ALL_PIN_CVTS 0x01 /* enable 2nd & 3rd pins and convertors */ + +static void intel_haswell_enable_all_pins(struct hda_codec *codec, + bool update_tree) { unsigned int vendor_param; - hda_nid_t list[3] = {0x2, 0x3, 0x4}; - vendor_param = snd_hda_codec_read(codec, 0x08, 0, 0xf81, 0); - if (vendor_param == -1 || vendor_param & 0x02) + vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0, + INTEL_GET_VENDOR_VERB, 0); + if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS) return; - /* enable DP1.2 mode */ - vendor_param |= 0x02; - snd_hda_codec_read(codec, 0x08, 0, 0x781, vendor_param); + vendor_param |= INTEL_EN_ALL_PIN_CVTS; + vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0, + INTEL_SET_VENDOR_VERB, vendor_param); + if (vendor_param == -1) + return; + + if (update_tree) + snd_hda_codec_update_widgets(codec); +} + +static void intel_haswell_fixup_enable_dp12(struct hda_codec *codec) +{ + unsigned int vendor_param; - vendor_param = snd_hda_codec_read(codec, 0x08, 0, 0xf81, 0); - if (vendor_param == -1 || !(vendor_param & 0x02)) + vendor_param = snd_hda_codec_read(codec, INTEL_VENDOR_NID, 0, + INTEL_GET_VENDOR_VERB, 0); + if (vendor_param == -1 || vendor_param & INTEL_EN_DP12) return; - /* override 3 pins connection list */ - snd_hda_override_conn_list(codec, 0x05, 3, list); - snd_hda_override_conn_list(codec, 0x06, 3, list); - snd_hda_override_conn_list(codec, 0x07, 3, list); + /* enable DP1.2 mode */ + vendor_param |= INTEL_EN_DP12; + snd_hda_codec_write_cache(codec, INTEL_VENDOR_NID, 0, + INTEL_SET_VENDOR_VERB, vendor_param); } +/* Haswell needs to re-issue the vendor-specific verbs before turning to D0. + * Otherwise you may get severe h/w communication errors. + */ +static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg, + unsigned int power_state) +{ + if (power_state == AC_PWRST_D0) { + intel_haswell_enable_all_pins(codec, false); + intel_haswell_fixup_enable_dp12(codec); + } + + snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE, power_state); + snd_hda_codec_set_power_to_all(codec, fg, power_state); +} static int patch_generic_hdmi(struct hda_codec *codec) { @@ -1715,8 +1837,10 @@ codec->spec = spec; - if (codec->vendor_id == 0x80862807) - intel_haswell_fixup_connect_list(codec); + if (codec->vendor_id == 0x80862807) { + intel_haswell_enable_all_pins(codec, true); + intel_haswell_fixup_enable_dp12(codec); + } if (hdmi_parse_codec(codec) < 0) { codec->spec = NULL; @@ -1724,6 +1848,9 @@ return -EINVAL; } codec->patch_ops = generic_hdmi_patch_ops; + if (codec->vendor_id == 0x80862807) + codec->patch_ops.set_power_state = haswell_set_power_state; + generic_hdmi_init_per_pins(codec); init_channel_allocations(); @@ -2328,6 +2455,7 @@ { .id = 0x10de0043, .name = "GPU 43 HDMI/DP", .patch = patch_generic_hdmi }, { .id = 0x10de0044, .name = "GPU 44 HDMI/DP", .patch = patch_generic_hdmi }, { .id = 0x10de0051, .name = "GPU 51 HDMI/DP", .patch = patch_generic_hdmi }, +{ .id = 0x10de0060, .name = "GPU 60 HDMI/DP", .patch = patch_generic_hdmi }, { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch }, { .id = 0x11069f80, .name = "VX900 HDMI/DP", .patch = patch_via_hdmi }, @@ -2380,6 +2508,7 @@ MODULE_ALIAS("snd-hda-codec-id:10de0043"); MODULE_ALIAS("snd-hda-codec-id:10de0044"); MODULE_ALIAS("snd-hda-codec-id:10de0051"); +MODULE_ALIAS("snd-hda-codec-id:10de0060"); MODULE_ALIAS("snd-hda-codec-id:10de0067"); MODULE_ALIAS("snd-hda-codec-id:10de8001"); MODULE_ALIAS("snd-hda-codec-id:11069f80"); --- linux-lts-raring-3.8.0.orig/sound/pci/hda/hda_eld.c +++ linux-lts-raring-3.8.0/sound/pci/hda/hda_eld.c @@ -322,7 +322,7 @@ struct hda_codec *codec, hda_nid_t nid) { int i; - int ret; + int ret = 0; int size; unsigned char *buf; --- linux-lts-raring-3.8.0.orig/sound/pci/hda/hda_intel.c +++ linux-lts-raring-3.8.0/sound/pci/hda/hda_intel.c @@ -3099,6 +3099,7 @@ SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */ SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */ SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */ + SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */ SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */ SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */ {} @@ -3618,13 +3619,15 @@ { PCI_DEVICE(0x8086, 0x9c21), .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, /* Haswell */ + { PCI_DEVICE(0x8086, 0x0a0c), + .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH }, { PCI_DEVICE(0x8086, 0x0c0c), .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH }, { PCI_DEVICE(0x8086, 0x0d0c), .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH }, /* 5 Series/3400 */ { PCI_DEVICE(0x8086, 0x3b56), - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH }, + .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, /* Poulsbo */ { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, --- linux-lts-raring-3.8.0.orig/sound/pci/hda/patch_realtek.c +++ linux-lts-raring-3.8.0/sound/pci/hda/patch_realtek.c @@ -5394,6 +5394,7 @@ SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601), SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT), SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP), + SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP), /* All Apple entries are in codec SSIDs */ SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF), @@ -5822,6 +5823,7 @@ ALC269_TYPE_ALC280, ALC269_TYPE_ALC282, ALC269_TYPE_ALC284, + ALC269_TYPE_ALC286, }; /* @@ -5845,6 +5847,7 @@ case ALC269_TYPE_ALC269VB: case ALC269_TYPE_ALC269VD: case ALC269_TYPE_ALC282: + case ALC269_TYPE_ALC286: ssids = alc269_ssids; break; default: @@ -6450,6 +6453,9 @@ case 0x10ec0292: spec->codec_variant = ALC269_TYPE_ALC284; break; + case 0x10ec0286: + spec->codec_variant = ALC269_TYPE_ALC286; + break; } /* automatic parse from the BIOS config */ @@ -6719,7 +6725,8 @@ const hda_nid_t *ssids; if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 || - codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670) + codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670 || + codec->vendor_id == 0x10ec0671) ssids = alc663_ssids; else ssids = alc662_ssids; @@ -6922,9 +6929,11 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_FIXUP_ASUS_MODE2), + SND_PCI_QUIRK(0x1025, 0x022f, "Acer Aspire One", ALC662_FIXUP_INV_DMIC), SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE), SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE), SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC), + SND_PCI_QUIRK(0x1025, 0x034a, "Gateway LT27", ALC662_FIXUP_INV_DMIC), SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), @@ -7155,6 +7164,7 @@ { .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 }, { .id = 0x10ec0283, .name = "ALC283", .patch = patch_alc269 }, { .id = 0x10ec0284, .name = "ALC284", .patch = patch_alc269 }, + { .id = 0x10ec0286, .name = "ALC286", .patch = patch_alc269 }, { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 }, { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", @@ -7172,6 +7182,7 @@ { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 }, { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, + { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 }, { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, --- linux-lts-raring-3.8.0.orig/sound/pci/hda/hda_codec.c +++ linux-lts-raring-3.8.0/sound/pci/hda/hda_codec.c @@ -173,7 +173,7 @@ "Line Out", "Speaker", "HP Out", "CD", "SPDIF Out", "Digital Out", "Modem Line", "Modem Hand", "Line In", "Aux", "Mic", "Telephony", - "SPDIF In", "Digitial In", "Reserved", "Other" + "SPDIF In", "Digital In", "Reserved", "Other" }; return jack_types[(cfg & AC_DEFCFG_DEVICE) @@ -617,6 +617,9 @@ struct hda_bus_unsolicited *unsol; unsigned int wp; + if (!bus || !bus->workq) + return 0; + trace_hda_unsol_event(bus, res, res_ex); unsol = bus->unsol; if (!unsol) @@ -1203,6 +1206,8 @@ static unsigned int hda_set_power_state(struct hda_codec *codec, unsigned int power_state); +static unsigned int default_power_filter(struct hda_codec *codec, hda_nid_t nid, + unsigned int power_state); /** * snd_hda_codec_new - create a HDA codec @@ -1321,6 +1326,7 @@ #endif codec->epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS); + codec->power_filter = default_power_filter; /* power-up all before initialization */ hda_set_power_state(codec, AC_PWRST_D0); @@ -1343,6 +1349,30 @@ } EXPORT_SYMBOL_HDA(snd_hda_codec_new); +int snd_hda_codec_update_widgets(struct hda_codec *codec) +{ + hda_nid_t fg; + int err; + + /* Assume the function group node does not change, + * only the widget nodes may change. + */ + kfree(codec->wcaps); + fg = codec->afg ? codec->afg : codec->mfg; + err = read_widget_caps(codec, fg); + if (err < 0) { + snd_printk(KERN_ERR "hda_codec: cannot malloc\n"); + return err; + } + + snd_array_free(&codec->init_pins); + err = read_pin_defaults(codec); + + return err; +} +EXPORT_SYMBOL_HDA(snd_hda_codec_update_widgets); + + /** * snd_hda_codec_configure - (Re-)configure the HD-audio codec * @codec: the HDA codec @@ -2160,11 +2190,12 @@ EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl); static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name, - int dev) + int start_idx) { - int idx; - for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */ - if (!find_mixer_ctl(codec, name, dev, idx)) + int i, idx; + /* 16 ctlrs should be large enough */ + for (i = 0, idx = start_idx; i < 16; i++, idx++) { + if (!find_mixer_ctl(codec, name, 0, idx)) return idx; } return -EBUSY; @@ -2966,7 +2997,7 @@ if (val & AC_DIG1_PROFESSIONAL) sbits |= IEC958_AES0_PROFESSIONAL; if (sbits & IEC958_AES0_PROFESSIONAL) { - if (sbits & AC_DIG1_EMPHASIS) + if (val & AC_DIG1_EMPHASIS) sbits |= IEC958_AES0_PRO_EMPHASIS_5015; } else { if (val & AC_DIG1_EMPHASIS) @@ -3132,30 +3163,29 @@ int err; struct snd_kcontrol *kctl; struct snd_kcontrol_new *dig_mix; - int idx, dev = 0; - const int spdif_pcm_dev = 1; + int idx = 0; + const int spdif_index = 16; struct hda_spdif_out *spdif; + struct hda_bus *bus = codec->bus; - if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI && + if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI && type == HDA_PCM_TYPE_SPDIF) { - dev = spdif_pcm_dev; - } else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF && + idx = spdif_index; + } else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF && type == HDA_PCM_TYPE_HDMI) { - for (idx = 0; idx < codec->spdif_out.used; idx++) { - spdif = snd_array_elem(&codec->spdif_out, idx); - for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { - kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx); - if (!kctl) - break; - kctl->id.device = spdif_pcm_dev; - } + /* suppose a single SPDIF device */ + for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) { + kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0); + if (!kctl) + break; + kctl->id.index = spdif_index; } - codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI; + bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI; } - if (!codec->primary_dig_out_type) - codec->primary_dig_out_type = type; + if (!bus->primary_dig_out_type) + bus->primary_dig_out_type = type; - idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev); + idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx); if (idx < 0) { printk(KERN_ERR "hda_codec: too many IEC958 outputs\n"); return -EBUSY; @@ -3165,7 +3195,6 @@ kctl = snd_ctl_new1(dig_mix, codec); if (!kctl) return -ENOMEM; - kctl->id.device = dev; kctl->id.index = idx; kctl->private_value = codec->spdif_out.used - 1; err = snd_hda_ctl_add(codec, associated_nid, kctl); @@ -3495,29 +3524,23 @@ #endif /* CONFIG_PM */ void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg, - unsigned int power_state, - bool eapd_workaround) + unsigned int power_state) { hda_nid_t nid = codec->start_nid; int i; for (i = 0; i < codec->num_nodes; i++, nid++) { unsigned int wcaps = get_wcaps(codec, nid); + unsigned int state = power_state; if (!(wcaps & AC_WCAP_POWER)) continue; - /* don't power down the widget if it controls eapd and - * EAPD_BTLENABLE is set. - */ - if (eapd_workaround && power_state == AC_PWRST_D3 && - get_wcaps_type(wcaps) == AC_WID_PIN && - (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) { - int eapd = snd_hda_codec_read(codec, nid, 0, - AC_VERB_GET_EAPD_BTLENABLE, 0); - if (eapd & 0x02) + if (codec->power_filter) { + state = codec->power_filter(codec, nid, power_state); + if (state != power_state && power_state == AC_PWRST_D3) continue; } snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_POWER_STATE, - power_state); + state); } } EXPORT_SYMBOL_HDA(snd_hda_codec_set_power_to_all); @@ -3564,6 +3587,21 @@ return state; } +/* don't power down the widget if it controls eapd and EAPD_BTLENABLE is set */ +static unsigned int default_power_filter(struct hda_codec *codec, hda_nid_t nid, + unsigned int power_state) +{ + if (power_state == AC_PWRST_D3 && + get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_PIN && + (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)) { + int eapd = snd_hda_codec_read(codec, nid, 0, + AC_VERB_GET_EAPD_BTLENABLE, 0); + if (eapd & 0x02) + return AC_PWRST_D0; + } + return power_state; +} + /* * set power state of the codec, and return the power state */ @@ -3589,8 +3627,7 @@ snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE, power_state); - snd_hda_codec_set_power_to_all(codec, fg, power_state, - true); + snd_hda_codec_set_power_to_all(codec, fg, power_state); } state = hda_sync_power_state(codec, fg, power_state); if (!(state & AC_PWRST_ERROR)) --- linux-lts-raring-3.8.0.orig/sound/pci/hda/hda_codec.h +++ linux-lts-raring-3.8.0/sound/pci/hda/hda_codec.h @@ -671,6 +671,8 @@ unsigned int response_reset:1; /* controller was reset */ unsigned int in_reset:1; /* during reset operation */ unsigned int power_keep_link_on:1; /* don't power off HDA link */ + + int primary_dig_out_type; /* primary digital out PCM type */ }; /* @@ -837,7 +839,6 @@ struct mutex hash_mutex; struct snd_array spdif_out; unsigned int spdif_in_enable; /* SPDIF input enable? */ - int primary_dig_out_type; /* primary digital out PCM type */ const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */ struct snd_array init_pins; /* initial (BIOS) pin configurations */ struct snd_array driver_pins; /* pin configs set by codec parser */ @@ -881,6 +882,10 @@ spinlock_t power_lock; #endif + /* filter the requested power state per nid */ + unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid, + unsigned int power_state); + /* codec-specific additional proc output */ void (*proc_widget_hook)(struct snd_info_buffer *buffer, struct hda_codec *codec, hda_nid_t nid); @@ -910,6 +915,7 @@ int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr, struct hda_codec **codecp); int snd_hda_codec_configure(struct hda_codec *codec); +int snd_hda_codec_update_widgets(struct hda_codec *codec); /* * low level functions @@ -1036,8 +1042,7 @@ void snd_hda_get_codec_name(struct hda_codec *codec, char *name, int namelen); void snd_hda_bus_reboot_notify(struct hda_bus *bus); void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg, - unsigned int power_state, - bool eapd_workaround); + unsigned int power_state); int snd_hda_lock_devices(struct hda_bus *bus); void snd_hda_unlock_devices(struct hda_bus *bus); --- linux-lts-raring-3.8.0.orig/sound/pci/emu10k1/emu10k1_main.c +++ linux-lts-raring-3.8.0/sound/pci/emu10k1/emu10k1_main.c @@ -657,14 +657,14 @@ return 0; } -static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu) +static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, + const struct firmware *fw_entry) { int n, i; int reg; int value; unsigned int write_post; unsigned long flags; - const struct firmware *fw_entry = emu->firmware; if (!fw_entry) return -EIO; @@ -725,9 +725,34 @@ /* Return to Audio Dock programming mode */ snd_printk(KERN_INFO "emu1010: Loading Audio Dock Firmware\n"); snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_AUDIODOCK); - err = snd_emu1010_load_firmware(emu); - if (err != 0) - continue; + + if (!emu->dock_fw) { + const char *filename = NULL; + switch (emu->card_capabilities->emu_model) { + case EMU_MODEL_EMU1010: + filename = DOCK_FILENAME; + break; + case EMU_MODEL_EMU1010B: + filename = MICRO_DOCK_FILENAME; + break; + case EMU_MODEL_EMU1616: + filename = MICRO_DOCK_FILENAME; + break; + } + if (filename) { + err = request_firmware(&emu->dock_fw, + filename, + &emu->pci->dev); + if (err) + continue; + } + } + + if (emu->dock_fw) { + err = snd_emu1010_load_firmware(emu, emu->dock_fw); + if (err) + continue; + } snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0); snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, ®); @@ -862,6 +887,12 @@ filename, emu->firmware->size); } + err = snd_emu1010_load_firmware(emu, emu->firmware); + if (err != 0) { + snd_printk(KERN_INFO "emu1010: Loading Firmware failed\n"); + return err; + } + /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); if ((reg & 0x3f) != 0x15) { @@ -1247,6 +1278,8 @@ kthread_stop(emu->emu1010.firmware_thread); if (emu->firmware) release_firmware(emu->firmware); + if (emu->dock_fw) + release_firmware(emu->dock_fw); if (emu->irq >= 0) free_irq(emu->irq, emu); /* remove reserved page */ --- linux-lts-raring-3.8.0.orig/sound/pci/ice1712/ice1712.c +++ linux-lts-raring-3.8.0/sound/pci/ice1712/ice1712.c @@ -2594,6 +2594,8 @@ snd_ice1712_proc_init(ice); synchronize_irq(pci->irq); + card->private_data = ice; + err = pci_request_regions(pci, "ICE1712"); if (err < 0) { kfree(ice); --- linux-lts-raring-3.8.0.orig/sound/pci/ali5451/ali5451.c +++ linux-lts-raring-3.8.0/sound/pci/ali5451/ali5451.c @@ -1435,7 +1435,7 @@ spin_lock(&codec->reg_lock); if (!pvoice->running) { - spin_unlock_irq(&codec->reg_lock); + spin_unlock(&codec->reg_lock); return 0; } outb(pvoice->number, ALI_REG(codec, ALI_GC_CIR)); --- linux-lts-raring-3.8.0.orig/sound/arm/pxa2xx-pcm-lib.c +++ linux-lts-raring-3.8.0/sound/arm/pxa2xx-pcm-lib.c @@ -166,7 +166,9 @@ } else { printk(KERN_ERR "%s: DMA error on channel %d (DCSR=%#x)\n", rtd->params->name, dma_ch, dcsr); + snd_pcm_stream_lock(substream); snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN); + snd_pcm_stream_unlock(substream); } } EXPORT_SYMBOL(pxa2xx_pcm_dma_irq); --- linux-lts-raring-3.8.0.orig/sound/core/compress_offload.c +++ linux-lts-raring-3.8.0/sound/core/compress_offload.c @@ -608,7 +608,7 @@ mutex_lock(&stream->device->lock); switch (_IOC_NR(cmd)) { case _IOC_NR(SNDRV_COMPRESS_IOCTL_VERSION): - put_user(SNDRV_COMPRESS_VERSION, + retval = put_user(SNDRV_COMPRESS_VERSION, (int __user *)arg) ? -EFAULT : 0; break; case _IOC_NR(SNDRV_COMPRESS_GET_CAPS): @@ -689,7 +689,8 @@ struct snd_compr *compr; compr = device->device_data; - snd_unregister_device(compr->direction, compr->card, compr->device); + snd_unregister_device(SNDRV_DEVICE_TYPE_COMPRESS, compr->card, + compr->device); return 0; } --- linux-lts-raring-3.8.0.orig/sound/core/vmaster.c +++ linux-lts-raring-3.8.0/sound/core/vmaster.c @@ -213,7 +213,10 @@ } if (!changed) return 0; - return slave_put_val(slave, ucontrol); + err = slave_put_val(slave, ucontrol); + if (err < 0) + return err; + return 1; } static int slave_tlv_cmd(struct snd_kcontrol *kcontrol, --- linux-lts-raring-3.8.0.orig/sound/core/pcm_native.c +++ linux-lts-raring-3.8.0/sound/core/pcm_native.c @@ -3222,18 +3222,10 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, struct vm_area_struct *area) { - long size; - unsigned long offset; + struct snd_pcm_runtime *runtime = substream->runtime;; area->vm_page_prot = pgprot_noncached(area->vm_page_prot); - area->vm_flags |= VM_IO; - size = area->vm_end - area->vm_start; - offset = area->vm_pgoff << PAGE_SHIFT; - if (io_remap_pfn_range(area, area->vm_start, - (substream->runtime->dma_addr + offset) >> PAGE_SHIFT, - size, area->vm_page_prot)) - return -EAGAIN; - return 0; + return vm_iomap_memory(area, runtime->dma_addr, runtime->dma_bytes); } EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem); --- linux-lts-raring-3.8.0.orig/sound/core/seq/seq_timer.c +++ linux-lts-raring-3.8.0/sound/core/seq/seq_timer.c @@ -290,10 +290,10 @@ tid.device = SNDRV_TIMER_GLOBAL_SYSTEM; err = snd_timer_open(&t, str, &tid, q->queue); } - if (err < 0) { - snd_printk(KERN_ERR "seq fatal error: cannot create timer (%i)\n", err); - return err; - } + } + if (err < 0) { + snd_printk(KERN_ERR "seq fatal error: cannot create timer (%i)\n", err); + return err; } t->callback = snd_seq_timer_interrupt; t->callback_data = q; --- linux-lts-raring-3.8.0.orig/block/genhd.c +++ linux-lts-raring-3.8.0/block/genhd.c @@ -25,7 +25,7 @@ struct kobject *block_depr; /* for extended dynamic devt allocation, currently only one major is used */ -#define MAX_EXT_DEVT (1 << MINORBITS) +#define NR_EXT_DEVT (1 << MINORBITS) /* For extended devt allocation. ext_devt_mutex prevents look up * results from going away underneath its user. @@ -422,17 +422,18 @@ do { if (!idr_pre_get(&ext_devt_idr, GFP_KERNEL)) return -ENOMEM; + mutex_lock(&ext_devt_mutex); rc = idr_get_new(&ext_devt_idr, part, &idx); + if (!rc && idx >= NR_EXT_DEVT) { + idr_remove(&ext_devt_idr, idx); + rc = -EBUSY; + } + mutex_unlock(&ext_devt_mutex); } while (rc == -EAGAIN); if (rc) return rc; - if (idx > MAX_EXT_DEVT) { - idr_remove(&ext_devt_idr, idx); - return -EBUSY; - } - *devt = MKDEV(BLOCK_EXT_MAJOR, blk_mangle_minor(idx)); return 0; } @@ -519,7 +520,7 @@ ddev->parent = disk->driverfs_dev; - dev_set_name(ddev, disk->disk_name); + dev_set_name(ddev, "%s", disk->disk_name); /* delay uevents, until we scanned partition table */ dev_set_uevent_suppress(ddev, 1); @@ -646,7 +647,6 @@ disk_part_iter_exit(&piter); invalidate_partition(disk, 0); - blk_free_devt(disk_to_dev(disk)->devt); set_capacity(disk, 0); disk->flags &= ~GENHD_FL_UP; @@ -664,6 +664,7 @@ if (!sysfs_deprecated) sysfs_remove_link(block_depr, dev_name(disk_to_dev(disk))); device_del(disk_to_dev(disk)); + blk_free_devt(disk_to_dev(disk)->devt); } EXPORT_SYMBOL(del_gendisk); --- linux-lts-raring-3.8.0.orig/block/blk-cgroup.c +++ linux-lts-raring-3.8.0/block/blk-cgroup.c @@ -790,10 +790,10 @@ if (!blkg) return -ENOMEM; - preloaded = !radix_tree_preload(GFP_KERNEL); - blk_queue_bypass_start(q); + preloaded = !radix_tree_preload(GFP_KERNEL); + /* make sure the root blkg exists and count the existing blkgs */ spin_lock_irq(q->queue_lock); --- linux-lts-raring-3.8.0.orig/block/cfq-iosched.c +++ linux-lts-raring-3.8.0/block/cfq-iosched.c @@ -1484,7 +1484,7 @@ if (samples) { v = blkg_stat_read(&cfqg->stats.avg_queue_size_sum); - do_div(v, samples); + v = div64_u64(v, samples); } __blkg_prfill_u64(sf, pd, v); return 0; --- linux-lts-raring-3.8.0.orig/block/scsi_ioctl.c +++ linux-lts-raring-3.8.0/block/scsi_ioctl.c @@ -27,6 +27,9 @@ #include #include #include +#include +#include +#include #include #include @@ -710,8 +713,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-lts-raring-3.8.0.orig/block/partition-generic.c +++ linux-lts-raring-3.8.0/block/partition-generic.c @@ -249,11 +249,11 @@ if (!part) return; - blk_free_devt(part_devt(part)); rcu_assign_pointer(ptbl->part[partno], NULL); rcu_assign_pointer(ptbl->last_lookup, NULL); kobject_put(part->holder_dir); device_del(part_to_dev(part)); + blk_free_devt(part_devt(part)); hd_struct_put(part); } @@ -418,7 +418,7 @@ int p, highest, res; rescan: if (state && !IS_ERR(state)) { - kfree(state); + free_partitions(state); state = NULL; } @@ -525,7 +525,7 @@ md_autodetect_dev(part_to_dev(part)->devt); #endif } - kfree(state); + free_partitions(state); return 0; } --- linux-lts-raring-3.8.0.orig/block/blk-sysfs.c +++ linux-lts-raring-3.8.0/block/blk-sysfs.c @@ -229,6 +229,8 @@ unsigned long val; \ ssize_t ret; \ ret = queue_var_store(&val, page, count); \ + if (ret < 0) \ + return ret; \ if (neg) \ val = !val; \ \ --- linux-lts-raring-3.8.0.orig/block/partitions/check.h +++ linux-lts-raring-3.8.0/block/partitions/check.h @@ -15,13 +15,15 @@ int flags; bool has_info; struct partition_meta_info info; - } parts[DISK_MAX_PARTS]; + } *parts; int next; int limit; bool access_beyond_eod; char *pp_buf; }; +void free_partitions(struct parsed_partitions *state); + struct parsed_partitions * check_partition(struct gendisk *, struct block_device *); --- linux-lts-raring-3.8.0.orig/block/partitions/check.c +++ linux-lts-raring-3.8.0/block/partitions/check.c @@ -14,6 +14,7 @@ */ #include +#include #include #include @@ -106,18 +107,45 @@ NULL }; +static struct parsed_partitions *allocate_partitions(struct gendisk *hd) +{ + struct parsed_partitions *state; + int nr; + + state = kzalloc(sizeof(*state), GFP_KERNEL); + if (!state) + return NULL; + + nr = disk_max_parts(hd); + state->parts = vzalloc(nr * sizeof(state->parts[0])); + if (!state->parts) { + kfree(state); + return NULL; + } + + state->limit = nr; + + return state; +} + +void free_partitions(struct parsed_partitions *state) +{ + vfree(state->parts); + kfree(state); +} + struct parsed_partitions * check_partition(struct gendisk *hd, struct block_device *bdev) { struct parsed_partitions *state; int i, res, err; - state = kzalloc(sizeof(struct parsed_partitions), GFP_KERNEL); + state = allocate_partitions(hd); if (!state) return NULL; state->pp_buf = (char *)__get_free_page(GFP_KERNEL); if (!state->pp_buf) { - kfree(state); + free_partitions(state); return NULL; } state->pp_buf[0] = '\0'; @@ -128,10 +156,9 @@ if (isdigit(state->name[strlen(state->name)-1])) sprintf(state->name, "p"); - state->limit = disk_max_parts(hd); i = res = err = 0; while (!res && check_part[i]) { - memset(&state->parts, 0, sizeof(state->parts)); + memset(state->parts, 0, state->limit * sizeof(state->parts[0])); res = check_part[i++](state); if (res < 0) { /* We have hit an I/O error which we don't report now. @@ -161,6 +188,6 @@ printk(KERN_INFO "%s", state->pp_buf); free_page((unsigned long)state->pp_buf); - kfree(state); + free_partitions(state); return ERR_PTR(res); } --- linux-lts-raring-3.8.0.orig/security/security.c +++ linux-lts-raring-3.8.0/security/security.c @@ -396,6 +396,7 @@ return 0; return security_ops->path_rmdir(dir, dentry); } +EXPORT_SYMBOL(security_path_rmdir); int security_path_unlink(struct path *dir, struct dentry *dentry) { @@ -412,6 +413,7 @@ return 0; return security_ops->path_symlink(dir, dentry, old_name); } +EXPORT_SYMBOL(security_path_symlink); int security_path_link(struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry) @@ -420,6 +422,7 @@ return 0; return security_ops->path_link(old_dentry, new_dir, new_dentry); } +EXPORT_SYMBOL(security_path_link); int security_path_rename(struct path *old_dir, struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry) @@ -438,6 +441,7 @@ return 0; return security_ops->path_truncate(path); } +EXPORT_SYMBOL(security_path_truncate); int security_path_chmod(struct path *path, umode_t mode) { @@ -445,6 +449,7 @@ return 0; return security_ops->path_chmod(path, mode); } +EXPORT_SYMBOL(security_path_chmod); int security_path_chown(struct path *path, kuid_t uid, kgid_t gid) { @@ -452,6 +457,7 @@ return 0; return security_ops->path_chown(path, uid, gid); } +EXPORT_SYMBOL(security_path_chown); int security_path_chroot(struct path *path) { @@ -528,6 +534,7 @@ return 0; return security_ops->inode_readlink(dentry); } +EXPORT_SYMBOL(security_inode_readlink); int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) { @@ -542,6 +549,7 @@ return 0; return security_ops->inode_permission(inode, mask); } +EXPORT_SYMBOL(security_inode_permission); int security_inode_setattr(struct dentry *dentry, struct iattr *attr) { @@ -663,6 +671,7 @@ return fsnotify_perm(file, mask); } +EXPORT_SYMBOL(security_file_permission); int security_file_alloc(struct file *file) { @@ -723,6 +732,7 @@ return ret; return ima_file_mmap(file, prot); } +EXPORT_SYMBOL(security_mmap_file); int security_mmap_addr(unsigned long addr) { --- linux-lts-raring-3.8.0.orig/security/device_cgroup.c +++ linux-lts-raring-3.8.0/security/device_cgroup.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -631,6 +632,7 @@ return __devcgroup_check_permission(type, imajor(inode), iminor(inode), access); } +EXPORT_SYMBOL(__devcgroup_inode_permission); int devcgroup_inode_mknod(int mode, dev_t dev) { --- linux-lts-raring-3.8.0.orig/security/commoncap.c +++ linux-lts-raring-3.8.0/security/commoncap.c @@ -988,9 +988,11 @@ } return ret; } +EXPORT_SYMBOL(cap_mmap_addr); int cap_mmap_file(struct file *file, unsigned long reqprot, unsigned long prot, unsigned long flags) { return 0; } +EXPORT_SYMBOL(cap_mmap_file); --- linux-lts-raring-3.8.0.orig/security/apparmor/apparmorfs.c +++ linux-lts-raring-3.8.0/security/apparmor/apparmorfs.c @@ -182,6 +182,232 @@ .release = single_release, }; +/** + * __next_namespace - find the next namespace to list + * @root: root namespace to stop search at (NOT NULL) + * @ns: current ns position (NOT NULL) + * + * Find the next namespace from @ns under @root and handle all locking needed + * while switching current namespace. + * + * Returns: next namespace or NULL if at last namespace under @root + * NOTE: will not unlock root->lock + */ +static struct aa_namespace *__next_namespace(struct aa_namespace *root, + struct aa_namespace *ns) +{ + struct aa_namespace *parent; + + /* is next namespace a child */ + if (!list_empty(&ns->sub_ns)) { + struct aa_namespace *next; + next = list_first_entry(&ns->sub_ns, typeof(*ns), base.list); + read_lock(&next->lock); + return next; + } + + /* check if the next ns is a sibling, parent, gp, .. */ + parent = ns->parent; + while (parent) { + read_unlock(&ns->lock); + list_for_each_entry_continue(ns, &parent->sub_ns, base.list) { + read_lock(&ns->lock); + return ns; + } + if (parent == root) + return NULL; + ns = parent; + parent = parent->parent; + } + + return NULL; +} + +/** + * __first_profile - find the first profile in a namespace + * @root: namespace that is root of profiles being displayed (NOT NULL) + * @ns: namespace to start in (NOT NULL) + * + * Returns: unrefcounted profile or NULL if no profile + */ +static struct aa_profile *__first_profile(struct aa_namespace *root, + struct aa_namespace *ns) +{ + for ( ; ns; ns = __next_namespace(root, ns)) { + if (!list_empty(&ns->base.profiles)) + return list_first_entry(&ns->base.profiles, + struct aa_profile, base.list); + } + return NULL; +} + +/** + * __next_profile - step to the next profile in a profile tree + * @profile: current profile in tree (NOT NULL) + * + * Perform a depth first taversal on the profile tree in a namespace + * + * Returns: next profile or NULL if done + * Requires: profile->ns.lock to be held + */ +static struct aa_profile *__next_profile(struct aa_profile *p) +{ + struct aa_profile *parent; + struct aa_namespace *ns = p->ns; + + /* is next profile a child */ + if (!list_empty(&p->base.profiles)) + return list_first_entry(&p->base.profiles, typeof(*p), + base.list); + + /* is next profile a sibling, parent sibling, gp, subling, .. */ + parent = p->parent; + while (parent) { + list_for_each_entry_continue(p, &parent->base.profiles, + base.list) + return p; + p = parent; + parent = parent->parent; + } + + /* is next another profile in the namespace */ + list_for_each_entry_continue(p, &ns->base.profiles, base.list) + return p; + + return NULL; +} + +/** + * next_profile - step to the next profile in where ever it may be + * @root: root namespace (NOT NULL) + * @profile: current profile (NOT NULL) + * + * Returns: next profile or NULL if there isn't one + */ +static struct aa_profile *next_profile(struct aa_namespace *root, + struct aa_profile *profile) +{ + struct aa_profile *next = __next_profile(profile); + if (next) + return next; + + /* finished all profiles in namespace move to next namespace */ + return __first_profile(root, __next_namespace(root, profile->ns)); +} + +/** + * p_start - start a depth first traversal of profile tree + * @f: seq_file to fill + * @pos: current position + * + * Returns: first profile under current namespace or NULL if none found + * + * acquires first ns->lock + */ +static void *p_start(struct seq_file *f, loff_t *pos) + __acquires(root->lock) +{ + struct aa_profile *profile = NULL; + struct aa_namespace *root = aa_current_profile()->ns; + loff_t l = *pos; + f->private = aa_get_namespace(root); + + + /* find the first profile */ + read_lock(&root->lock); + profile = __first_profile(root, root); + + /* skip to position */ + for (; profile && l > 0; l--) + profile = next_profile(root, profile); + + return profile; +} + +/** + * p_next - read the next profile entry + * @f: seq_file to fill + * @p: profile previously returned + * @pos: current position + * + * Returns: next profile after @p or NULL if none + * + * may acquire/release locks in namespace tree as necessary + */ +static void *p_next(struct seq_file *f, void *p, loff_t *pos) +{ + struct aa_profile *profile = p; + struct aa_namespace *root = f->private; + (*pos)++; + + return next_profile(root, profile); +} + +/** + * p_stop - stop depth first traversal + * @f: seq_file we are filling + * @p: the last profile writen + * + * Release all locking done by p_start/p_next on namespace tree + */ +static void p_stop(struct seq_file *f, void *p) + __releases(root->lock) +{ + struct aa_profile *profile = p; + struct aa_namespace *root = f->private, *ns; + + if (profile) { + for (ns = profile->ns; ns && ns != root; ns = ns->parent) + read_unlock(&ns->lock); + } + read_unlock(&root->lock); + aa_put_namespace(root); +} + +/** + * seq_show_profile - show a profile entry + * @f: seq_file to file + * @p: current position (profile) (NOT NULL) + * + * Returns: error on failure + */ +static int seq_show_profile(struct seq_file *f, void *p) +{ + struct aa_profile *profile = (struct aa_profile *)p; + struct aa_namespace *root = f->private; + + if (profile->ns != root) + seq_printf(f, ":%s://", aa_ns_name(root, profile->ns)); + seq_printf(f, "%s (%s)\n", profile->base.hname, + COMPLAIN_MODE(profile) ? "complain" : "enforce"); + + return 0; +} + +static const struct seq_operations aa_fs_profiles_op = { + .start = p_start, + .next = p_next, + .stop = p_stop, + .show = seq_show_profile, +}; + +static int profiles_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &aa_fs_profiles_op); +} + +static int profiles_release(struct inode *inode, struct file *file) +{ + return seq_release(inode, file); +} + +const struct file_operations aa_fs_profiles_fops = { + .open = profiles_open, + .read = seq_read, + .llseek = seq_lseek, + .release = profiles_release, +}; + /** Base file system setup **/ static struct aa_fs_entry aa_fs_entry_file[] = { @@ -198,9 +424,23 @@ { } }; +static struct aa_fs_entry aa_fs_entry_mount[] = { + AA_FS_FILE_STRING("mask", "mount umount"), + { } +}; + +static struct aa_fs_entry aa_fs_entry_namespaces[] = { + AA_FS_FILE_BOOLEAN("profile", 1), + AA_FS_FILE_BOOLEAN("pivot_root", 1), + { } +}; + static struct aa_fs_entry aa_fs_entry_features[] = { AA_FS_DIR("domain", aa_fs_entry_domain), AA_FS_DIR("file", aa_fs_entry_file), + AA_FS_DIR("network", aa_fs_entry_network), + AA_FS_DIR("mount", aa_fs_entry_mount), + AA_FS_DIR("namespaces", aa_fs_entry_namespaces), AA_FS_FILE_U64("capability", VFS_CAP_FLAGS_MASK), AA_FS_DIR("rlimit", aa_fs_entry_rlimit), { } @@ -210,6 +450,7 @@ AA_FS_FILE_FOPS(".load", 0640, &aa_fs_profile_load), AA_FS_FILE_FOPS(".replace", 0640, &aa_fs_profile_replace), AA_FS_FILE_FOPS(".remove", 0640, &aa_fs_profile_remove), + AA_FS_FILE_FOPS("profiles", 0640, &aa_fs_profiles_fops), AA_FS_DIR("features", aa_fs_entry_features), { } }; --- linux-lts-raring-3.8.0.orig/security/apparmor/net.c +++ linux-lts-raring-3.8.0/security/apparmor/net.c @@ -0,0 +1,162 @@ +/* + * AppArmor security module + * + * This file contains AppArmor network mediation + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2012 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/apparmor.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/net.h" +#include "include/policy.h" + +#include "net_names.h" + +struct aa_fs_entry aa_fs_entry_network[] = { + AA_FS_FILE_STRING("af_mask", AA_FS_AF_MASK), + { } +}; + +/* audit callback for net specific fields */ +static void audit_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[sa->aad->net.type]) { + audit_log_string(ab, sock_type_names[sa->aad->net.type]); + } else { + audit_log_format(ab, "\"unknown(%d)\"", sa->aad->net.type); + } + audit_log_format(ab, " protocol=%d", sa->aad->net.protocol); +} + +/** + * audit_net - audit network access + * @profile: profile being enforced (NOT NULL) + * @op: operation being checked + * @family: network family + * @type: network type + * @protocol: network protocol + * @sk: socket auditing is being applied to + * @error: error code for failure else 0 + * + * Returns: %0 or sa->error else other errorcode on failure + */ +static int audit_net(struct aa_profile *profile, int op, u16 family, int type, + int protocol, struct sock *sk, int error) +{ + int audit_type = AUDIT_APPARMOR_AUTO; + struct common_audit_data sa; + struct apparmor_audit_data aad = { }; + struct lsm_network_audit net = { }; + if (sk) { + sa.type = LSM_AUDIT_DATA_NET; + } else { + sa.type = LSM_AUDIT_DATA_NONE; + } + /* todo fill in socket addr info */ + sa.aad = &aad; + sa.u.net = &net; + sa.aad->op = op, + sa.u.net->family = family; + sa.u.net->sk = sk; + sa.aad->net.type = type; + sa.aad->net.protocol = protocol; + sa.aad->error = error; + + if (likely(!sa.aad->error)) { + u16 audit_mask = profile->net.audit[sa.u.net->family]; + if (likely((AUDIT_MODE(profile) != AUDIT_ALL) && + !(1 << sa.aad->net.type & audit_mask))) + return 0; + audit_type = AUDIT_APPARMOR_AUDIT; + } else { + u16 quiet_mask = profile->net.quiet[sa.u.net->family]; + u16 kill_mask = 0; + u16 denied = (1 << sa.aad->net.type); + + if (denied & kill_mask) + audit_type = AUDIT_APPARMOR_KILL; + + if ((denied & quiet_mask) && + AUDIT_MODE(profile) != AUDIT_NOQUIET && + AUDIT_MODE(profile) != AUDIT_ALL) + return COMPLAIN_MODE(profile) ? 0 : sa.aad->error; + } + + return aa_audit(audit_type, profile, GFP_KERNEL, &sa, audit_cb); +} + +/** + * aa_net_perm - very course network access check + * @op: operation being checked + * @profile: profile being enforced (NOT NULL) + * @family: network family + * @type: network type + * @protocol: network protocol + * + * Returns: %0 else error if permission denied + */ +int aa_net_perm(int op, struct aa_profile *profile, u16 family, int type, + int protocol, struct sock *sk) +{ + u16 family_mask; + int error; + + if ((family < 0) || (family >= AF_MAX)) + return -EINVAL; + + if ((type < 0) || (type >= SOCK_MAX)) + return -EINVAL; + + /* unix domain and netlink sockets are handled by ipc */ + if (family == AF_UNIX || family == AF_NETLINK) + return 0; + + family_mask = profile->net.allow[family]; + + error = (family_mask & (1 << type)) ? 0 : -EACCES; + + return audit_net(profile, op, family, type, protocol, sk, error); +} + +/** + * aa_revalidate_sk - Revalidate access to a sock + * @op: operation being checked + * @sk: sock being revalidated (NOT NULL) + * + * Returns: %0 else error if permission denied + */ +int aa_revalidate_sk(int op, struct sock *sk) +{ + struct aa_profile *profile; + int error = 0; + + /* aa_revalidate_sk should not be called from interrupt context + * don't mediate these calls as they are not task related + */ + if (in_interrupt()) + return 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_net_perm(op, profile, sk->sk_family, sk->sk_type, + sk->sk_protocol, sk); + + return error; +} --- linux-lts-raring-3.8.0.orig/security/apparmor/Makefile +++ linux-lts-raring-3.8.0/security/apparmor/Makefile @@ -4,10 +4,9 @@ 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 sid.o file.o - -clean-files := capability_names.h rlim_names.h + resource.o sid.o file.o mount.o net.o +clean-files := capability_names.h rlim_names.h net_names.h # Build a lower case string table of capability names # Transforms lines from @@ -20,6 +19,38 @@ -e 's/^\#define[ \t]+CAP_([A-Z0-9_]+)[ \t]+([0-9]+)/[\2] = "\L\1",/p';\ echo "};" >> $@ +# 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_FS_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 \ + 's/^\#define[ \t]+AF_([A-Z0-9_]+)[ \t]+([0-9]+)(.*)/[\2] = "\L\1",/p';\ + echo "};" >> $@ ;\ + echo -n '\#define AA_FS_AF_MASK "' >> $@ ;\ + sed -r -n '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 rlimit names. # Transforms lines from @@ -56,6 +87,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 @@ -63,3 +95,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-lts-raring-3.8.0.orig/security/apparmor/mount.c +++ linux-lts-raring-3.8.0/security/apparmor/mount.c @@ -0,0 +1,620 @@ +/* + * AppArmor security module + * + * This file contains AppArmor mediation of files + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2012 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 + +#include "include/apparmor.h" +#include "include/audit.h" +#include "include/context.h" +#include "include/domain.h" +#include "include/file.h" +#include "include/match.h" +#include "include/mount.h" +#include "include/path.h" +#include "include/policy.h" + + +static void audit_mnt_flags(struct audit_buffer *ab, unsigned long flags) +{ + if (flags & MS_RDONLY) + audit_log_format(ab, "ro"); + else + audit_log_format(ab, "rw"); + if (flags & MS_NOSUID) + audit_log_format(ab, ", nosuid"); + if (flags & MS_NODEV) + audit_log_format(ab, ", nodev"); + if (flags & MS_NOEXEC) + audit_log_format(ab, ", noexec"); + if (flags & MS_SYNCHRONOUS) + audit_log_format(ab, ", sync"); + if (flags & MS_REMOUNT) + audit_log_format(ab, ", remount"); + if (flags & MS_MANDLOCK) + audit_log_format(ab, ", mand"); + if (flags & MS_DIRSYNC) + audit_log_format(ab, ", dirsync"); + if (flags & MS_NOATIME) + audit_log_format(ab, ", noatime"); + if (flags & MS_NODIRATIME) + audit_log_format(ab, ", nodiratime"); + if (flags & MS_BIND) + audit_log_format(ab, flags & MS_REC ? ", rbind" : ", bind"); + if (flags & MS_MOVE) + audit_log_format(ab, ", move"); + if (flags & MS_SILENT) + audit_log_format(ab, ", silent"); + if (flags & MS_POSIXACL) + audit_log_format(ab, ", acl"); + if (flags & MS_UNBINDABLE) + audit_log_format(ab, flags & MS_REC ? ", runbindable" : + ", unbindable"); + if (flags & MS_PRIVATE) + audit_log_format(ab, flags & MS_REC ? ", rprivate" : + ", private"); + if (flags & MS_SLAVE) + audit_log_format(ab, flags & MS_REC ? ", rslave" : + ", slave"); + if (flags & MS_SHARED) + audit_log_format(ab, flags & MS_REC ? ", rshared" : + ", shared"); + if (flags & MS_RELATIME) + audit_log_format(ab, ", relatime"); + if (flags & MS_I_VERSION) + audit_log_format(ab, ", iversion"); + if (flags & MS_STRICTATIME) + audit_log_format(ab, ", strictatime"); + if (flags & MS_NOUSER) + audit_log_format(ab, ", nouser"); +} + +/** + * audit_cb - call back for mount specific audit fields + * @ab: audit_buffer (NOT NULL) + * @va: audit struct to audit values of (NOT NULL) + */ +static void audit_cb(struct audit_buffer *ab, void *va) +{ + struct common_audit_data *sa = va; + + if (sa->aad->mnt.type) { + audit_log_format(ab, " fstype="); + audit_log_untrustedstring(ab, sa->aad->mnt.type); + } + if (sa->aad->mnt.src_name) { + audit_log_format(ab, " srcname="); + audit_log_untrustedstring(ab, sa->aad->mnt.src_name); + } + if (sa->aad->mnt.trans) { + audit_log_format(ab, " trans="); + audit_log_untrustedstring(ab, sa->aad->mnt.trans); + } + if (sa->aad->mnt.flags || sa->aad->op == OP_MOUNT) { + audit_log_format(ab, " flags=\""); + audit_mnt_flags(ab, sa->aad->mnt.flags); + audit_log_format(ab, "\""); + } + if (sa->aad->mnt.data) { + audit_log_format(ab, " options="); + audit_log_untrustedstring(ab, sa->aad->mnt.data); + } +} + +/** + * audit_mount - handle the auditing of mount operations + * @profile: the profile being enforced (NOT NULL) + * @gfp: allocation flags + * @op: operation being mediated (NOT NULL) + * @name: name of object being mediated (MAYBE NULL) + * @src_name: src_name of object being mediated (MAYBE_NULL) + * @type: type of filesystem (MAYBE_NULL) + * @trans: name of trans (MAYBE NULL) + * @flags: filesystem idependent mount flags + * @data: filesystem mount flags + * @request: permissions requested + * @perms: the permissions computed for the request (NOT NULL) + * @info: extra information message (MAYBE NULL) + * @error: 0 if operation allowed else failure error code + * + * Returns: %0 or error on failure + */ +static int audit_mount(struct aa_profile *profile, gfp_t gfp, int op, + const char *name, const char *src_name, + const char *type, const char *trans, + unsigned long flags, const void *data, u32 request, + struct file_perms *perms, const char *info, int error) +{ + int audit_type = AUDIT_APPARMOR_AUTO; + struct common_audit_data sa; + struct apparmor_audit_data aad = { }; + + if (likely(!error)) { + u32 mask = perms->audit; + + if (unlikely(AUDIT_MODE(profile) == AUDIT_ALL)) + mask = 0xffff; + + /* mask off perms that are not being force audited */ + request &= mask; + + if (likely(!request)) + return 0; + audit_type = AUDIT_APPARMOR_AUDIT; + } else { + /* only report permissions that were denied */ + request = request & ~perms->allow; + + if (request & perms->kill) + audit_type = AUDIT_APPARMOR_KILL; + + /* quiet known rejects, assumes quiet and kill do not overlap */ + if ((request & perms->quiet) && + AUDIT_MODE(profile) != AUDIT_NOQUIET && + AUDIT_MODE(profile) != AUDIT_ALL) + request &= ~perms->quiet; + + if (!request) + return COMPLAIN_MODE(profile) ? + complain_error(error) : error; + } + + sa.type = LSM_AUDIT_DATA_NONE; + sa.aad = &aad; + sa.aad->op = op; + sa.aad->name = name; + sa.aad->mnt.src_name = src_name; + sa.aad->mnt.type = type; + sa.aad->mnt.trans = trans; + sa.aad->mnt.flags = flags; + if (data && (perms->audit & AA_AUDIT_DATA)) + sa.aad->mnt.data = data; + sa.aad->info = info; + sa.aad->error = error; + + return aa_audit(audit_type, profile, gfp, &sa, audit_cb); +} + +/** + * match_mnt_flags - Do an ordered match on mount flags + * @dfa: dfa to match against + * @state: state to start in + * @flags: mount flags to match against + * + * Mount flags are encoded as an ordered match. This is done instead of + * checking against a simple bitmask, to allow for logical operations + * on the flags. + * + * Returns: next state after flags match + */ +static unsigned int match_mnt_flags(struct aa_dfa *dfa, unsigned int state, + unsigned long flags) +{ + unsigned int i; + + for (i = 0; i <= 31 ; ++i) { + if ((1 << i) & flags) + state = aa_dfa_next(dfa, state, i + 1); + } + + return state; +} + +/** + * compute_mnt_perms - compute mount permission associated with @state + * @dfa: dfa to match against (NOT NULL) + * @state: state match finished in + * + * Returns: mount permissions + */ +static struct file_perms compute_mnt_perms(struct aa_dfa *dfa, + unsigned int state) +{ + struct file_perms perms; + + perms.kill = 0; + perms.allow = dfa_user_allow(dfa, state); + perms.audit = dfa_user_audit(dfa, state); + perms.quiet = dfa_user_quiet(dfa, state); + perms.xindex = dfa_user_xindex(dfa, state); + + return perms; +} + +static const char const *mnt_info_table[] = { + "match succeeded", + "failed mntpnt match", + "failed srcname match", + "failed type match", + "failed flags match", + "failed data match" +}; + +/* + * Returns 0 on success else element that match failed in, this is the + * index into the mnt_info_table above + */ +static int do_match_mnt(struct aa_dfa *dfa, unsigned int start, + const char *mntpnt, const char *devname, + const char *type, unsigned long flags, + void *data, bool binary, struct file_perms *perms) +{ + unsigned int state; + + state = aa_dfa_match(dfa, start, mntpnt); + state = aa_dfa_null_transition(dfa, state); + if (!state) + return 1; + + if (devname) + state = aa_dfa_match(dfa, state, devname); + state = aa_dfa_null_transition(dfa, state); + if (!state) + return 2; + + if (type) + state = aa_dfa_match(dfa, state, type); + state = aa_dfa_null_transition(dfa, state); + if (!state) + return 3; + + state = match_mnt_flags(dfa, state, flags); + if (!state) + return 4; + *perms = compute_mnt_perms(dfa, state); + if (perms->allow & AA_MAY_MOUNT) + return 0; + + /* only match data if not binary and the DFA flags data is expected */ + if (data && !binary && (perms->allow & AA_CONT_MATCH)) { + state = aa_dfa_null_transition(dfa, state); + if (!state) + return 4; + + state = aa_dfa_match(dfa, state, data); + if (!state) + return 5; + *perms = compute_mnt_perms(dfa, state); + if (perms->allow & AA_MAY_MOUNT) + return 0; + } + + /* failed at end of flags match */ + return 4; +} + +/** + * match_mnt - handle path matching for mount + * @profile: the confining profile + * @mntpnt: string for the mntpnt (NOT NULL) + * @devname: string for the devname/src_name (MAYBE NULL) + * @type: string for the dev type (MAYBE NULL) + * @flags: mount flags to match + * @data: fs mount data (MAYBE NULL) + * @binary: whether @data is binary + * @perms: Returns: permission found by the match + * @info: Returns: infomation string about the match for logging + * + * Returns: 0 on success else error + */ +static int match_mnt(struct aa_profile *profile, const char *mntpnt, + const char *devname, const char *type, + unsigned long flags, void *data, bool binary, + struct file_perms *perms, const char **info) +{ + int pos; + + if (!profile->policy.dfa) + return -EACCES; + + pos = do_match_mnt(profile->policy.dfa, + profile->policy.start[AA_CLASS_MOUNT], + mntpnt, devname, type, flags, data, binary, perms); + if (pos) { + *info = mnt_info_table[pos]; + return -EACCES; + } + + return 0; +} + +static int path_flags(struct aa_profile *profile, struct path *path) +{ + return profile->path_flags | + S_ISDIR(path->dentry->d_inode->i_mode) ? PATH_IS_DIR : 0; +} + +int aa_remount(struct aa_profile *profile, struct path *path, + unsigned long flags, void *data) +{ + struct file_perms perms = { }; + const char *name, *info = NULL; + char *buffer = NULL; + int binary, error; + + binary = path->dentry->d_sb->s_type->fs_flags & FS_BINARY_MOUNTDATA; + + error = aa_path_name(path, path_flags(profile, path), &buffer, &name, + &info); + if (error) + goto audit; + + error = match_mnt(profile, name, NULL, NULL, flags, data, binary, + &perms, &info); + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_MOUNT, name, NULL, NULL, + NULL, flags, data, AA_MAY_MOUNT, &perms, info, + error); + kfree(buffer); + + return error; +} + +int aa_bind_mount(struct aa_profile *profile, struct path *path, + const char *dev_name, unsigned long flags) +{ + struct file_perms perms = { }; + char *buffer = NULL, *old_buffer = NULL; + const char *name, *old_name = NULL, *info = NULL; + struct path old_path; + int error; + + if (!dev_name || !*dev_name) + return -EINVAL; + + flags &= MS_REC | MS_BIND; + + error = aa_path_name(path, path_flags(profile, path), &buffer, &name, + &info); + if (error) + goto audit; + + error = kern_path(dev_name, LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT, &old_path); + if (error) + goto audit; + + error = aa_path_name(&old_path, path_flags(profile, &old_path), + &old_buffer, &old_name, &info); + path_put(&old_path); + if (error) + goto audit; + + error = match_mnt(profile, name, old_name, NULL, flags, NULL, 0, + &perms, &info); + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_MOUNT, name, old_name, + NULL, NULL, flags, NULL, AA_MAY_MOUNT, &perms, + info, error); + kfree(buffer); + kfree(old_buffer); + + return error; +} + +int aa_mount_change_type(struct aa_profile *profile, struct path *path, + unsigned long flags) +{ + struct file_perms perms = { }; + char *buffer = NULL; + const char *name, *info = NULL; + int error; + + /* These are the flags allowed by do_change_type() */ + flags &= (MS_REC | MS_SILENT | MS_SHARED | MS_PRIVATE | MS_SLAVE | + MS_UNBINDABLE); + + error = aa_path_name(path, path_flags(profile, path), &buffer, &name, + &info); + if (error) + goto audit; + + error = match_mnt(profile, name, NULL, NULL, flags, NULL, 0, &perms, + &info); + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_MOUNT, name, NULL, NULL, + NULL, flags, NULL, AA_MAY_MOUNT, &perms, info, + error); + kfree(buffer); + + return error; +} + +int aa_move_mount(struct aa_profile *profile, struct path *path, + const char *orig_name) +{ + struct file_perms perms = { }; + char *buffer = NULL, *old_buffer = NULL; + const char *name, *old_name = NULL, *info = NULL; + struct path old_path; + int error; + + if (!orig_name || !*orig_name) + return -EINVAL; + + error = aa_path_name(path, path_flags(profile, path), &buffer, &name, + &info); + if (error) + goto audit; + + error = kern_path(orig_name, LOOKUP_FOLLOW, &old_path); + if (error) + goto audit; + + error = aa_path_name(&old_path, path_flags(profile, &old_path), + &old_buffer, &old_name, &info); + path_put(&old_path); + if (error) + goto audit; + + error = match_mnt(profile, name, old_name, NULL, MS_MOVE, NULL, 0, + &perms, &info); + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_MOUNT, name, old_name, + NULL, NULL, MS_MOVE, NULL, AA_MAY_MOUNT, &perms, + info, error); + kfree(buffer); + kfree(old_buffer); + + return error; +} + +int aa_new_mount(struct aa_profile *profile, const char *orig_dev_name, + struct path *path, const char *type, unsigned long flags, + void *data) +{ + struct file_perms perms = { }; + char *buffer = NULL, *dev_buffer = NULL; + const char *name = NULL, *dev_name = NULL, *info = NULL; + int binary = 1; + int error; + + dev_name = orig_dev_name; + if (type) { + int requires_dev; + struct file_system_type *fstype = get_fs_type(type); + if (!fstype) + return -ENODEV; + + binary = fstype->fs_flags & FS_BINARY_MOUNTDATA; + requires_dev = fstype->fs_flags & FS_REQUIRES_DEV; + put_filesystem(fstype); + + if (requires_dev) { + struct path dev_path; + + if (!dev_name || !*dev_name) { + error = -ENOENT; + goto out; + } + + error = kern_path(dev_name, LOOKUP_FOLLOW, &dev_path); + if (error) + goto audit; + + error = aa_path_name(&dev_path, + path_flags(profile, &dev_path), + &dev_buffer, &dev_name, &info); + path_put(&dev_path); + if (error) + goto audit; + } + } + + error = aa_path_name(path, path_flags(profile, path), &buffer, &name, + &info); + if (error) + goto audit; + + error = match_mnt(profile, name, dev_name, type, flags, data, binary, + &perms, &info); + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_MOUNT, name, dev_name, + type, NULL, flags, data, AA_MAY_MOUNT, &perms, info, + error); + kfree(buffer); + kfree(dev_buffer); + +out: + return error; + +} + +int aa_umount(struct aa_profile *profile, struct vfsmount *mnt, int flags) +{ + struct file_perms perms = { }; + char *buffer = NULL; + const char *name, *info = NULL; + int error; + + struct path path = { mnt, mnt->mnt_root }; + error = aa_path_name(&path, path_flags(profile, &path), &buffer, &name, + &info); + if (error) + goto audit; + + if (!error && profile->policy.dfa) { + unsigned int state; + state = aa_dfa_match(profile->policy.dfa, + profile->policy.start[AA_CLASS_MOUNT], + name); + perms = compute_mnt_perms(profile->policy.dfa, state); + } + + if (AA_MAY_UMOUNT & ~perms.allow) + error = -EACCES; + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_UMOUNT, name, NULL, NULL, + NULL, 0, NULL, AA_MAY_UMOUNT, &perms, info, error); + kfree(buffer); + + return error; +} + +int aa_pivotroot(struct aa_profile *profile, struct path *old_path, + struct path *new_path) +{ + struct file_perms perms = { }; + struct aa_profile *target = NULL; + char *old_buffer = NULL, *new_buffer = NULL; + const char *old_name, *new_name = NULL, *info = NULL; + int error; + + error = aa_path_name(old_path, path_flags(profile, old_path), + &old_buffer, &old_name, &info); + if (error) + goto audit; + + error = aa_path_name(new_path, path_flags(profile, new_path), + &new_buffer, &new_name, &info); + if (error) + goto audit; + + if (profile->policy.dfa) { + unsigned int state; + state = aa_dfa_match(profile->policy.dfa, + profile->policy.start[AA_CLASS_MOUNT], + new_name); + state = aa_dfa_null_transition(profile->policy.dfa, state); + state = aa_dfa_match(profile->policy.dfa, state, old_name); + perms = compute_mnt_perms(profile->policy.dfa, state); + } + + if (AA_MAY_PIVOTROOT & perms.allow) { + if ((perms.xindex & AA_X_TYPE_MASK) == AA_X_TABLE) { + target = x_table_lookup(profile, perms.xindex); + if (!target) + error = -ENOENT; + else + error = aa_replace_current_profile(target); + } + } else + error = -EACCES; + +audit: + error = audit_mount(profile, GFP_KERNEL, OP_PIVOTROOT, new_name, + old_name, NULL, target ? target->base.name : NULL, + 0, NULL, AA_MAY_PIVOTROOT, &perms, info, error); + aa_put_profile(target); + kfree(old_buffer); + kfree(new_buffer); + + return error; +} --- linux-lts-raring-3.8.0.orig/security/apparmor/policy_unpack.c +++ linux-lts-raring-3.8.0/security/apparmor/policy_unpack.c @@ -193,6 +193,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((u16 *) 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)) { @@ -471,6 +484,7 @@ { struct aa_profile *profile = NULL; const char *name = NULL; + size_t size = 0; int i, error = -EPROTO; kernel_cap_t tmpcap; u32 tmp; @@ -564,6 +578,38 @@ if (!unpack_rlimits(e, profile)) 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; + } + /* + * allow unix domain and netlink sockets they are handled + * by IPC + */ + 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 */ profile->policy.dfa = unpack_dfa(e); --- linux-lts-raring-3.8.0.orig/security/apparmor/domain.c +++ linux-lts-raring-3.8.0/security/apparmor/domain.c @@ -242,7 +242,7 @@ * * Returns: refcounted profile, or NULL on failure (MAYBE NULL) */ -static struct aa_profile *x_table_lookup(struct aa_profile *profile, u32 xindex) +struct aa_profile *x_table_lookup(struct aa_profile *profile, u32 xindex) { struct aa_profile *new_profile = NULL; struct aa_namespace *ns = profile->ns; --- linux-lts-raring-3.8.0.orig/security/apparmor/lsm.c +++ linux-lts-raring-3.8.0/security/apparmor/lsm.c @@ -32,9 +32,11 @@ #include "include/context.h" #include "include/file.h" #include "include/ipc.h" +#include "include/net.h" #include "include/path.h" #include "include/policy.h" #include "include/procattr.h" +#include "include/mount.h" /* Flag indicating whether initialization completed */ int apparmor_initialized __initdata; @@ -503,6 +505,60 @@ !(vma->vm_flags & VM_SHARED) ? MAP_PRIVATE : 0); } +static int apparmor_sb_mount(const char *dev_name, struct path *path, const char *type, + unsigned long flags, void *data) +{ + struct aa_profile *profile; + int error = 0; + + /* Discard magic */ + if ((flags & MS_MGC_MSK) == MS_MGC_VAL) + flags &= ~MS_MGC_MSK; + + flags &= ~AA_MS_IGNORE_MASK; + + profile = __aa_current_profile(); + if (!unconfined(profile)) { + if (flags & MS_REMOUNT) + error = aa_remount(profile, path, flags, data); + else if (flags & MS_BIND) + error = aa_bind_mount(profile, path, dev_name, flags); + else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE | + MS_UNBINDABLE)) + error = aa_mount_change_type(profile, path, flags); + else if (flags & MS_MOVE) + error = aa_move_mount(profile, path, dev_name); + else + error = aa_new_mount(profile, dev_name, path, type, + flags, data); + } + return error; +} + +static int apparmor_sb_umount(struct vfsmount *mnt, int flags) +{ + struct aa_profile *profile; + int error = 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_umount(profile, mnt, flags); + + return error; +} + +static int apparmor_sb_pivotroot(struct path *old_path, struct path *new_path) +{ + struct aa_profile *profile; + int error = 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_pivotroot(profile, old_path, new_path); + + return error; +} + static int apparmor_getprocattr(struct task_struct *task, char *name, char **value) { @@ -614,6 +670,104 @@ return error; } +static int apparmor_socket_create(int family, int type, int protocol, int kern) +{ + struct aa_profile *profile; + int error = 0; + + if (kern) + return 0; + + profile = __aa_current_profile(); + if (!unconfined(profile)) + error = aa_net_perm(OP_CREATE, profile, family, type, protocol, + NULL); + return error; +} + +static int apparmor_socket_bind(struct socket *sock, + struct sockaddr *address, int addrlen) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_BIND, sk); +} + +static int apparmor_socket_connect(struct socket *sock, + struct sockaddr *address, int addrlen) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_CONNECT, sk); +} + +static int apparmor_socket_listen(struct socket *sock, int backlog) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_LISTEN, sk); +} + +static int apparmor_socket_accept(struct socket *sock, struct socket *newsock) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_ACCEPT, sk); +} + +static int apparmor_socket_sendmsg(struct socket *sock, + struct msghdr *msg, int size) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_SENDMSG, sk); +} + +static int apparmor_socket_recvmsg(struct socket *sock, + struct msghdr *msg, int size, int flags) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_RECVMSG, sk); +} + +static int apparmor_socket_getsockname(struct socket *sock) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_GETSOCKNAME, sk); +} + +static int apparmor_socket_getpeername(struct socket *sock) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_GETPEERNAME, sk); +} + +static int apparmor_socket_getsockopt(struct socket *sock, int level, + int optname) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_GETSOCKOPT, sk); +} + +static int apparmor_socket_setsockopt(struct socket *sock, int level, + int optname) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_SETSOCKOPT, sk); +} + +static int apparmor_socket_shutdown(struct socket *sock, int how) +{ + struct sock *sk = sock->sk; + + return aa_revalidate_sk(OP_SOCK_SHUTDOWN, sk); +} + static struct security_operations apparmor_ops = { .name = "apparmor", @@ -622,6 +776,10 @@ .capget = apparmor_capget, .capable = apparmor_capable, + .sb_mount = apparmor_sb_mount, + .sb_umount = apparmor_sb_umount, + .sb_pivotroot = apparmor_sb_pivotroot, + .path_link = apparmor_path_link, .path_unlink = apparmor_path_unlink, .path_symlink = apparmor_path_symlink, @@ -646,6 +804,19 @@ .getprocattr = apparmor_getprocattr, .setprocattr = apparmor_setprocattr, + .socket_create = apparmor_socket_create, + .socket_bind = apparmor_socket_bind, + .socket_connect = apparmor_socket_connect, + .socket_listen = apparmor_socket_listen, + .socket_accept = apparmor_socket_accept, + .socket_sendmsg = apparmor_socket_sendmsg, + .socket_recvmsg = apparmor_socket_recvmsg, + .socket_getsockname = apparmor_socket_getsockname, + .socket_getpeername = apparmor_socket_getpeername, + .socket_getsockopt = apparmor_socket_getsockopt, + .socket_setsockopt = apparmor_socket_setsockopt, + .socket_shutdown = apparmor_socket_shutdown, + .cred_alloc_blank = apparmor_cred_alloc_blank, .cred_free = apparmor_cred_free, .cred_prepare = apparmor_cred_prepare, --- linux-lts-raring-3.8.0.orig/security/apparmor/audit.c +++ linux-lts-raring-3.8.0/security/apparmor/audit.c @@ -44,6 +44,10 @@ "file_mmap", "file_mprotect", + "pivotroot", + "mount", + "umount", + "create", "post_create", "bind", --- linux-lts-raring-3.8.0.orig/security/apparmor/policy.c +++ linux-lts-raring-3.8.0/security/apparmor/policy.c @@ -747,6 +747,7 @@ aa_free_file_rules(&profile->file); aa_free_cap_rules(&profile->caps); + aa_free_net_rules(&profile->net); aa_free_rlimit_rules(&profile->rlimits); aa_free_sid(profile->sid); --- linux-lts-raring-3.8.0.orig/security/apparmor/include/audit.h +++ linux-lts-raring-3.8.0/security/apparmor/include/audit.h @@ -73,6 +73,10 @@ OP_FMMAP, OP_FMPROT, + OP_PIVOTROOT, + OP_MOUNT, + OP_UMOUNT, + OP_CREATE, OP_POST_CREATE, OP_BIND, @@ -122,11 +126,22 @@ unsigned long max; } rlim; struct { + const char *src_name; + const char *type; + const char *trans; + const char *data; + unsigned long flags; + } mnt; + struct { const char *target; u32 request; u32 denied; kuid_t ouid; } fs; + struct { + int type, protocol; + struct sock *sk; + } net; }; }; --- linux-lts-raring-3.8.0.orig/security/apparmor/include/net.h +++ linux-lts-raring-3.8.0/security/apparmor/include/net.h @@ -0,0 +1,44 @@ +/* + * AppArmor security module + * + * This file contains AppArmor network mediation definitions. + * + * Copyright (C) 1998-2008 Novell/SUSE + * Copyright 2009-2012 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 "apparmorfs.h" + +/* struct aa_net - network confinement data + * @allowed: basic network families permissions + * @audit_network: which network permissions to force audit + * @quiet_network: which network permissions to quiet rejects + */ +struct aa_net { + u16 allow[AF_MAX]; + u16 audit[AF_MAX]; + u16 quiet[AF_MAX]; +}; + +extern struct aa_fs_entry aa_fs_entry_network[]; + +extern int aa_net_perm(int op, struct aa_profile *profile, u16 family, + int type, int protocol, struct sock *sk); +extern int aa_revalidate_sk(int op, struct sock *sk); + +static inline void aa_free_net_rules(struct aa_net *new) +{ + /* NOP */ +} + +#endif /* __AA_NET_H */ --- linux-lts-raring-3.8.0.orig/security/apparmor/include/mount.h +++ linux-lts-raring-3.8.0/security/apparmor/include/mount.h @@ -0,0 +1,54 @@ +/* + * AppArmor security module + * + * This file contains AppArmor file mediation function definitions. + * + * Copyright 2012 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_MOUNT_H +#define __AA_MOUNT_H + +#include +#include + +#include "domain.h" +#include "policy.h" + +/* mount perms */ +#define AA_MAY_PIVOTROOT 0x01 +#define AA_MAY_MOUNT 0x02 +#define AA_MAY_UMOUNT 0x04 +#define AA_AUDIT_DATA 0x40 +#define AA_CONT_MATCH 0x40 + +#define AA_MS_IGNORE_MASK (MS_KERNMOUNT | MS_NOSEC | MS_ACTIVE | MS_BORN) + +int aa_remount(struct aa_profile *profile, struct path *path, + unsigned long flags, void *data); + +int aa_bind_mount(struct aa_profile *profile, struct path *path, + const char *old_name, unsigned long flags); + + +int aa_mount_change_type(struct aa_profile *profile, struct path *path, + unsigned long flags); + +int aa_move_mount(struct aa_profile *profile, struct path *path, + const char *old_name); + +int aa_new_mount(struct aa_profile *profile, const char *dev_name, + struct path *path, const char *type, unsigned long flags, + void *data); + +int aa_umount(struct aa_profile *profile, struct vfsmount *mnt, int flags); + +int aa_pivotroot(struct aa_profile *profile, struct path *old_path, + struct path *new_path); + +#endif /* __AA_MOUNT_H */ --- linux-lts-raring-3.8.0.orig/security/apparmor/include/policy.h +++ linux-lts-raring-3.8.0/security/apparmor/include/policy.h @@ -27,6 +27,7 @@ #include "capability.h" #include "domain.h" #include "file.h" +#include "net.h" #include "resource.h" extern const char *const profile_mode_names[]; @@ -157,6 +158,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 * * The AppArmor profile contains the basic confinement data. Each profile @@ -194,6 +196,7 @@ struct aa_policydb policy; struct aa_file_rules file; struct aa_caps caps; + struct aa_net net; struct aa_rlimit rlimits; }; --- linux-lts-raring-3.8.0.orig/security/apparmor/include/apparmor.h +++ linux-lts-raring-3.8.0/security/apparmor/include/apparmor.h @@ -29,8 +29,9 @@ #define AA_CLASS_NET 4 #define AA_CLASS_RLIMITS 5 #define AA_CLASS_DOMAIN 6 +#define AA_CLASS_MOUNT 7 -#define AA_CLASS_LAST AA_CLASS_DOMAIN +#define AA_CLASS_LAST AA_CLASS_MOUNT /* Control parameters settable through module/boot flags */ extern enum audit_mode aa_g_audit; --- linux-lts-raring-3.8.0.orig/security/apparmor/include/domain.h +++ linux-lts-raring-3.8.0/security/apparmor/include/domain.h @@ -23,6 +23,8 @@ char **table; }; +struct aa_profile *x_table_lookup(struct aa_profile *profile, u32 xindex); + int apparmor_bprm_set_creds(struct linux_binprm *bprm); int apparmor_bprm_secureexec(struct linux_binprm *bprm); void apparmor_bprm_committing_creds(struct linux_binprm *bprm); --- linux-lts-raring-3.8.0.orig/security/selinux/xfrm.c +++ linux-lts-raring-3.8.0/security/selinux/xfrm.c @@ -310,7 +310,7 @@ if (old_ctx) { new_ctx = kmalloc(sizeof(*old_ctx) + old_ctx->ctx_len, - GFP_KERNEL); + GFP_ATOMIC); if (!new_ctx) return -ENOMEM; --- linux-lts-raring-3.8.0.orig/security/smack/smackfs.c +++ linux-lts-raring-3.8.0/security/smack/smackfs.c @@ -818,7 +818,7 @@ if (format == SMK_FIXED24_FMT) rule += SMK_LABELLEN; else - rule += strlen(skp->smk_known); + rule += strlen(skp->smk_known) + 1; ret = sscanf(rule, "%d", &maplevel); if (ret != 1 || maplevel > SMACK_CIPSO_MAXLEVEL) --- linux-lts-raring-3.8.0.orig/security/keys/process_keys.c +++ linux-lts-raring-3.8.0/security/keys/process_keys.c @@ -57,7 +57,7 @@ kenter("%p{%u}", user, uid); - if (user->uid_keyring) { + if (user->uid_keyring && user->session_keyring) { kleave(" = 0 [exist]"); return 0; } @@ -367,6 +367,8 @@ switch (PTR_ERR(key_ref)) { case -EAGAIN: /* no key */ + if (ret) + break; case -ENOKEY: /* negative key */ ret = key_ref; break; @@ -837,7 +839,7 @@ new-> sgid = old-> sgid; new->fsgid = old->fsgid; new->user = get_uid(old->user); - new->user_ns = get_user_ns(new->user_ns); + new->user_ns = get_user_ns(old->user_ns); new->group_info = get_group_info(old->group_info); new->securebits = old->securebits; --- linux-lts-raring-3.8.0.orig/security/keys/compat.c +++ linux-lts-raring-3.8.0/security/keys/compat.c @@ -40,12 +40,12 @@ ARRAY_SIZE(iovstack), iovstack, &iov); if (ret < 0) - return ret; + goto err; if (ret == 0) goto no_payload_free; ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid); - +err: if (iov != iovstack) kfree(iov); return ret; --- linux-lts-raring-3.8.0.orig/debian.master/changelog.historical +++ linux-lts-raring-3.8.0/debian.master/changelog.historical @@ -0,0 +1,4171 @@ + +linux (2.6.28-9.31) jaunty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: cpufreq-nforce2: probe failures are not errors + - LP: #332170 + * SAUCE: mmc: add MODALIAS linkage for MMC/SD devices + - LP: #30335 + * remove test-suspend script + - LP: #333856 + + [ Kees Cook ] + + * handle relative paths in modules.dep + Fixes 2.6.28-9.30 FTBS. + + [ Upstream Kernel Changes ] + + * ricoh_mmc: Handle newer models of Ricoh controllers + + -- Tim Gardner Wed, 11 Mar 2009 08:19:24 -0600 + +linux (2.6.28-9.30) jaunty; urgency=low + + [ Amit Kucheria ] + + * ARM:mx51 Add SoC and board support for mx51 platforms + * ARM:mx51 Add CONFIG_ARCH_MXC_CANONICAL to disable parts of Freescale's + code + * MMC: Add support for 8-bit cards + * Add ARM:MX51 SoC support to the build system + * ARM: Make ARM arch aware of ubuntu/ drivers + * ARM: Add imx51 configuration + * Disable d-i modules for imx51 and mv78xx0 + * Disable Apparmor on boot for ARM + * Updating imx51 config + + [ Jason Liu ] + + * Do not use OOB with MLC NAND + + [ Richard Zhu ] + + * Support the eMMC4.3 card + + [ Rob Herring ] + + * ARM: Add more cache memory types macros + + [ Tim Gardner ] + + * Set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y for i386/amd64/lpia + + [ Manoj Iyer ] + + * Enable CONFIG_RTL8187SE=m + + [ Upstream Kernel Changes ] + + * USB: EHCI: slow down ITD reuse + - LP: #329437 + + -- Tim Gardner Sun, 08 Mar 2009 14:14:15 -0600 + +linux (2.6.28-9.29) jaunty; urgency=low + + [ Andy Whitcroft ] + + * link-headers -- only link directories which do not already exist + - LP: #315252 + + [ Daniel Marjamäki ] + + * SAUCE: (drop after 2.6.28) netxen: fix memory leak in + drivers/net/netxen_nic_init.c + - LP: #330813 + + [ Dhananjay Phadke ] + + * SAUCE: (drop after 2.6.28) netxen: fix endianness in firmware commands + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix ipv6 offload and tx cleanup + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix link speed reporting for some + boards + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: firmware init fix + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: cleanup mac list on driver unload + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: hold tx lock while sending firmware + commands + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: handle dma mapping failures + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: avoid invalid iounmap + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: include ipv6.h (fixes build failure) + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix vlan tso/checksum offload + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: reduce memory footprint + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: revert jumbo ringsize + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix msi-x interrupt handling + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: remove pcie workaround + - LP: #330813 + + [ Hannes Eder ] + + * SAUCE: (drop after 2.6.28) drivers/net/netxen: fix sparse warnings: use + NULL pointer instead of plain integer + - LP: #330813 + + [ Huaxu Wan ] + + * SAUCE: report rfkill changes event if interface is down + - LP: #193970 + + [ Tim Gardner ] + + * MV78XX0 must specify a target in the vars definition. + + [ Upstream Kernel Changes ] + + * Revert "ext4: wait on all pending commits in ext4_sync_fs()" + * jbd2: Fix return value of jbd2_journal_start_commit() + * jbd2: Avoid possible NULL dereference in + jbd2_journal_begin_ordered_truncate() + * ext4: Fix to read empty directory blocks correctly in 64k + * ext4: Fix lockdep warning + * ext4: Initialize preallocation list_head's properly + * ext4: Implement range_cyclic in ext4_da_writepages instead of + write_cache_pages + * ext4: Fix NULL dereference in ext4_ext_migrate()'s error handling + * ext4: Add fallback for find_group_flex + * ext4: Fix deadlock in ext4_write_begin() and ext4_da_write_begin() + * Added mv78xx0 flavor + + -- Tim Gardner Fri, 06 Mar 2009 06:13:31 -0700 + +linux (2.6.28-8.28) jaunty; urgency=low + + [ Alexey Starikovskiy ] + + * SAUCE: ACPI: EC: Limit workaround for ASUS notebooks even more + - LP: #288385 + + [ Scott James Remnant ] + + * SAUCE: Auto-load esp module when device opened. + * SAUCE: Auto-load bridge module when socket opened. + * SAUCE: Auto-load af_netlink module when socket opened. + * SAUCE: Auto-load wanrouter module when socket opened. + * SAUCE: Auto-load ip_queue module when socket opened. + * SAUCE: Auto-load ip6_queue module when socket opened. + * SAUCE: Auto-load cn module when socket opened. + * SAUCE: Auto-load scsi_transport_iscsi module when socket opened. + * SAUCE: Auto-load ftl module when device opened. + * SAUCE: Auto-load pcd module when device opened. + * SAUCE: Auto-load pf module when device opened. + * SAUCE: Auto-load nftl module when device opened. + * SAUCE: Auto-load mousedev module when psaux device opened. + * SAUCE: Auto-load mousedev module when /dev/input/mice opened. + * SAUCE: Auto-load rng-core module when device opened. + * SAUCE: Auto-load openprom module when device opened. + * SAUCE: Auto-load applicom module when device opened. + * SAUCE: Auto-load toshiba module when device opened. + * SAUCE: Auto-load cyclades module when device opened. + * SAUCE: Auto-load riscom8 module when device opened. + * SAUCE: Auto-load specialix module when device opened. + * SAUCE: Auto-load videodev module when device opened. + * SAUCE: Auto-load i2c_dev module when device opened. + * SAUCE: Auto-load mtdchar module when device opened. + * SAUCE: Auto-load pt module when device opened. + * SAUCE: Auto-load pg module when device opened. + * SAUCE: Auto-load cdc_acm module when device opened. + * SAUCE: Auto-load msr module when device opened. + * SAUCE: Auto-load cpuid module when device opened. + * SAUCE: quickcam: Enable double-buffering by default + * SAUCE: libata: Ignore HPA by default. + * SAUCE: hostap: Change initial operation mode to managed (infra) + * SAUCE: floppy: Provide a PnP device table in the module. + - LP: #255651 + * SAUCE: Auto-load mwave module when device opened. + * Build CONFIG_FUSE_FS into kernel, not as module. + + [ Stefan Bader ] + + * Enable build of ext4 as a module on LPIA + - LP: #331848 + + [ Tim Gardner ] + + * Update configs to fix LPIA FTBS + + -- Tim Gardner Thu, 05 Mar 2009 10:43:24 -0700 + +linux (2.6.28-8.27) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs (arm:ixp4xx) + + [ Andy Whitcroft ] + + * SAUCE: enable Intel HDMI output + + [ Manoj Iyer ] + + * SAUCE: Added quirk for Linksys WUSB600N USB wifi-n networking adapter + - LP: #323473 + + [ Steve Beattie ] + + * fix apparmor memory leak on unlinked file ops + - LP: #329489 + + [ Tim Gardner ] + + * SAUCE: Dell XPS710 reboot quirk + - LP: #323592 + * SAUCE: (drop after 2.6.28) ieee80211: Add infrastructure to obsolete + scan results + - LP: #336055 + * Add modules.order to the linux-image package. + + [ Upstream Kernel Changes ] + + * iwlwifi: fix time interval misuse in iwl_poll_{direct_}bit + * x86: only scan the root bus in early PCI quirks + - LP: #267295 + * ALSA: hda - Intel HDMI audio support + * ALSA: hda - Fix unused function in patch_intelhdmi.c + * ALSA: handle SiI1392 HDMI codec in patch_intelhdmi.c + * ALSA: hda-intel: reorder HDMI audio enabling sequence + * ALSA: introduce snd_print_pcm_rates() + * ALSA: create hda_eld.c for ELD routines and proc interface + * ALSA: ELD proc interface for HDMI sinks + * ALSA: hda: make standalone hdmi_fill_audio_infoframe() + * ALSA: hda: make global snd_print_channel_allocation() + * ALSA: hda: HDMI channel allocations for audio infoframe + * ALSA: hda: HDMI channel mapping cleanups + * ALSA: hda: minor code cleanups + * ALSA: hda: rename sink_eld to hdmi_eld + * ALSA: hda - Release ELD proc file + * ALSA: hda - minor HDMI code cleanups + * ALSA: hda - report selected CA index for Audio InfoFrame + * ALSA: hda - Add Intel vendor id string + + -- Tim Gardner Wed, 25 Feb 2009 14:23:46 -0700 + +linux (2.6.28-8.26) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs (armel:ixp4xx) + - LP: #331510 + + [ Tim Gardner ] + + * Add more missing modules + + -- Tim Gardner Tue, 24 Feb 2009 06:58:53 -0700 + +linux (2.6.28-8.25) jaunty; urgency=low + + [ Scott James Remnant ] + + * SAUCE: Prefer powernow-k8 to acpi-cpufreq + * Change CONFIG_X86_P4_CLOCKMOD to be a module again. + + [ Tim Gardner ] + + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Initialize the new + group descriptor when resizing the filesystem" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add sanity check + to make_indexed_dir" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: only use + i_size_high for regular files" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add sanity checks + for the superblock before mounting the filesystem" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix + s_dirty_blocks_counter if block allocation failed with nodelalloc" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Init the complete + page while building buddy cache" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Don't allow new + groups to be added during block allocation" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: mark the + blocks/inode bitmap beyond end of group as used" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Use new + buffer_head flag to check uninit group bitmaps initialization" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix the race + between read_inode_bitmap() and ext4_new_inode()" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix race between + read_block_bitmap() and mark_diskspace_used()" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: don't use blocks + freed but not yet committed in buddy cache init" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: cleanup mballoc + header files" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Use + EXT4_GROUP_INFO_NEED_INIT_BIT during resize" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add blocks added + during resize to bitmap" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Don't overwrite + allocation_context ac_status" + * Revert "SAUCE: (revert before 2.6.28.y update) jbd2: Add barrier not + supported test to journal_wait_on_commit_record" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Widen type of + ext4_sb_info.s_mb_maxs[]" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: avoid ext4_error + when mounting a fs with a single bg" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix the delalloc + writepages to allocate blocks at the right offset." + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: tone down + ext4_da_writepages warnings" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add support for + non-native signed/unsigned htree hash algorithms" + * Enabled X86_ACPI_CPUFREQ=y + + [ Upstream Kernel Changes ] + + * ath9k: quiet harmless ForceXPAon messages + - LP: #321474 + * [WATCHDOG] iTCO_wdt: fix SMI_EN regression 2 + - LP: #314050 + * pid: implement ns_of_pid + * mqueue: fix si_pid value in mqueue do_notify() + * powerpc/vsx: Fix VSX alignment handler for regs 32-63 + * sata_nv: give up hardreset on nf2 + * Fix Intel IOMMU write-buffer flushing + * SCSI: libiscsi: fix iscsi pool leak + * x86/cpa: make sure cpa is safe to call in lazy mmu mode + * sched: SCHED_OTHER vs SCHED_IDLE isolation + * x86, vm86: fix preemption bug + * Add support for VT6415 PCIE PATA IDE Host Controller + * ext2/xip: refuse to change xip flag during remount with busy inodes + * 3c505: do not set pcb->data.raw beyond its size + * Bluetooth: Fix TX error path in btsdio driver + * ext4: Add support for non-native signed/unsigned htree hash algorithms + * ext4: tone down ext4_da_writepages warnings + * ext4: Fix the delalloc writepages to allocate blocks at the right + offset. + * ext4: avoid ext4_error when mounting a fs with a single bg + * ext4: Widen type of ext4_sb_info.s_mb_maxs[] + * jbd2: Add barrier not supported test to journal_wait_on_commit_record + * ext4: Don't overwrite allocation_context ac_status + * ext4: Add blocks added during resize to bitmap + * ext4: Use EXT4_GROUP_INFO_NEED_INIT_BIT during resize + * ext4: cleanup mballoc header files + * ext4: don't use blocks freed but not yet committed in buddy cache init + * ext4: Fix race between read_block_bitmap() and mark_diskspace_used() + * ext4: Fix the race between read_inode_bitmap() and ext4_new_inode() + * ext4: Use new buffer_head flag to check uninit group bitmaps + initialization + * ext4: mark the blocks/inode bitmap beyond end of group as used + * ext4: Don't allow new groups to be added during block allocation + * ext4: Init the complete page while building buddy cache + * ext4: Fix s_dirty_blocks_counter if block allocation failed with + nodelalloc + * ext4: Add sanity checks for the superblock before mounting the + filesystem + * ext4: only use i_size_high for regular files + * ext4: Add sanity check to make_indexed_dir + * ext4: Initialize the new group descriptor when resizing the filesystem + * Fix longstanding "error: storage size of '__mod_dmi_device_table' isn't + known" + * Linux 2.6.28.7 + + -- Tim Gardner Thu, 19 Feb 2009 06:45:55 -0700 + +linux (2.6.28-8.24) jaunty; urgency=low + + [ Scott James Remnant ] + + * Change CPU_FREQ_DEFAULT_GOV_ONDEMAND to y + * SAUCE: Link acpi-cpufreq.o first + + [ Tim Gardner ] + + * Build in CPU Frequency scaling drivers + + -- Tim Gardner Wed, 18 Feb 2009 06:12:24 -0700 + +linux (2.6.28-8.23) jaunty; urgency=low + + [ Andy Whitcroft ] + + * include the kernel configuration in the sub-flavour images + - LP: #328859 + + [ Tim Gardner ] + + * Revert "SAUCE: (drop after 2.6.28) [eCryptfs] Regression in unencrypted + filename symlinks" in favor of upstream commit. + * Fix compile issues with qc-usb + * SAUCE: (remove after 2.6.28) V4L/DVB (10216): saa7127: fix broken + S-Video with saa7129 + - LP: #329267 + + [ Upstream Kernel Changes ] + + * Subject:SAUCE: LP#193970 iwlagn: fix hw-rfkill while the interface is + down + - LP: #193970 + * x86, vmi: put a missing paravirt_release_pmd in pgd_dtor + * nbd: fix I/O hang on disconnected nbds + * mac80211: restrict to AP in outgoing interface heuristic + * w1: w1 temp calculation overflow fix + * zd1211rw: adding 0ace:0xa211 as a ZD1211 device + * zd1211rw: treat MAXIM_NEW_RF(0x08) as UW2453_RF(0x09) for TP-Link + WN322/422G + * parport: parport_serial, don't bind netmos ibm 0299 + * syscall define: fix uml compile bug + * kernel-doc: fix syscall wrapper processing + * Fix page writeback thinko, causing Berkeley DB slowdown + * write-back: fix nr_to_write counter + * writeback: fix break condition + * mm: rearrange exit_mmap() to unlock before arch_exit_mmap + * powerpc/fsl-booke: Fix mapping functions to use phys_addr_t + * lockd: fix regression in lockd's handling of blocked locks + * sctp: Fix crc32c calculations on big-endian arhes. + * sctp: Correctly start rtx timer on new packet transmissions. + * sctp: Properly timestamp outgoing data chunks for rtx purposes + * net: Fix frag_list handling in skb_seq_read + * net: Fix OOPS in skb_seq_read(). + * drivers/net/skfp: if !capable(CAP_NET_ADMIN): inverted logic + * ipv4: fix infinite retry loop in IP-Config + * net: Fix userland breakage wrt. linux/if_tunnel.h + * net: packet socket packet_lookup_frame fix + * packet: Avoid lock_sock in mmap handler + * sungem: Soft lockup in sungem on Netra AC200 when switching interface + up + * udp: Fix UDP short packet false positive + * udp: increments sk_drops in __udp_queue_rcv_skb() + * ipv6: Disallow rediculious flowlabel option sizes. + * ipv6: Copy cork options in ip6_append_data + * net: 4 bytes kernel memory disclosure in SO_BSDCOMPAT gsopt try #2 + * sky2: fix hard hang with netconsoling and iface going up + * tun: Add some missing TUN compat ioctl translations. + * tun: Fix unicast filter overflow + * virtio_net: Fix MAX_PACKET_LEN to support 802.1Q VLANs + * tcp: splice as many packets as possible at once + * tcp: Fix length tcp_splice_data_recv passes to skb_splice_bits. + * sparc: Enable syscall wrappers for 64-bit (CVE-2009-0029) + * sparc64: Annotate sparc64 specific syscalls with SYSCALL_DEFINEx() + * ALSA: hda - Add missing terminator in slave dig-out array + * ALSA: mtpav - Fix initial value for input hwport + * HID: adjust report descriptor fixup for MS 1028 receiver + * ide/libata: fix ata_id_is_cfa() (take 4) + * libata: fix EH device failure handling + * netfilter: fix tuple inversion for Node information request + * netfilter: xt_sctp: sctp chunk mapping doesn't work + * x86: microcode_amd: fix wrong handling of equivalent CPU id + * ide-cd: fix DMA for non bio-backed requests + * net: Fix data corruption when splicing from sockets. + * Linux 2.6.28.6 + * eCryptfs: Regression in unencrypted filename symlinks + + -- Tim Gardner Mon, 16 Feb 2009 06:43:51 -0700 + +linux (2.6.28-8.22) jaunty; urgency=low + + [ Amit Kucheria ] + + * Remove perm-blacklist + + [ Andy Whitcroft ] + + * SAUCE: psmouse/synaptics: ensure we reset the device on resume + - LP: #317270 + + [ Tim Gardner ] + + * Add lpia to getabi script + * SAUCE: tracer for sreadahead + + -- Amit Kucheria Fri, 13 Feb 2009 15:23:21 +0200 + +linux (2.6.28-8.21) jaunty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: switch the Asus Pundit P1-AH2 to old acpi sleep ordering + - LP: #327267 + + [ Tim Gardner ] + + * Added LPIA arch support + * Added libdrm-dev as a 'Replaces' to linux-libc-dev + * SAUCE: LPIA support for 9202 HDA Sigmatel codec + * SAUCE: Add an X86_LPIA Kconfig option + * SAUCE: UHCI USB quirk for resume + * SAUCE: LPIA Reboot fix for Intel Crownbeach development boards + * SAUCE: LPIA Logical reset of USB port on resume + * Set CONFIG_WIRELESS_OLD_REGULATORY=n, added wireless-crda + as an install dependency. + + [ Upstream Kernel Changes ] + + * Revert "Revert "x86, early_ioremap: fix fencepost error"" + - LP: #312554 + * drm/i915: capture last_vblank count at IRQ uninstall time too + - LP: #320813 + * drm/i915: add get_vblank_counter function for GM45 + - LP: #320813 + * Staging: comedi: fix Kbuild + * Staging: meilhaus: fix Kbuild + * Staging: android: binder: fix arm build errors + * Staging: android: timed_gpio: Fix build to build on kernels after + 2.6.25. + * Staging: android: fix build error on 64bit boxes + * Staging: android: Add lowmemorykiller documentation. + * Staging: android: task_get_unused_fd_flags: fix the wrong usage of + tsk->signal + * staging: agnx: drivers/staging/agnx/agnx.h needs + * Staging: usbip: usbip_start_threads(): handle kernel_thread failure + * Staging: poch: fix verification of memory area + * Documentation: move DMA-mapping.txt to Doc/PCI/ + * sgi-xp: fix writing past the end of kzalloc()'d space + * do_wp_page: fix regression with execute in place + * wait: prevent exclusive waiter starvation + * shm: fix shmctl(SHM_INFO) lockup with !CONFIG_SHMEM + * revert "rlimit: permit setting RLIMIT_NOFILE to RLIM_INFINITY" + * prevent kprobes from catching spurious page faults + * sound: usb-audio: handle wMaxPacketSize for FIXED_ENDPOINT devices + * md: Ensure an md array never has too many devices. + * md: Fix a bug in linear.c causing which_dev() to return the wrong + device. + * ACPI: Enable bit 11 in _PDC to advertise hw coord + * ACPI: dock: Don't eval _STA on every show_docked sysfs read + * ieee1394: ohci1394: increase AT req. retries, fix ack_busy_X from + Panasonic camcorders and others + * firewire: ohci: increase AT req. retries, fix ack_busy_X from Panasonic + camcorders and others + * firewire: sbp2: fix DMA mapping leak on the failure path + * firewire: sbp2: add workarounds for 2nd and 3rd generation iPods + * ieee1394: sbp2: add workarounds for 2nd and 3rd generation iPods + * module: remove over-zealous check in __module_get() + * x86: APIC: enable workaround on AMD Fam10h CPUs + * eeepc-laptop: fix oops when changing backlight brightness during + eeepc-laptop init + * eeepc-laptop: Add support for extended hotkeys + * e1000: fix bug with shared interrupt during reset + * e1000: Fix PCI enable to honor the need_ioport flag + * agp/intel: Fix broken ® symbol in device name. + * ALSA: hda - Add quirk for FSC Amilo Xi2550 + * ALSA: hda - Add missing COEF initialization for ALC887 + * ALSA: hda - Add missing initialization for ALC272 + * asus_acpi: Add R1F support + * panasonic-laptop: fix X[ ARRAY_SIZE(X) ] + * ACPI: Skip the first two elements in the _BCL package + * ACPI: proc_dir_entry 'video/VGA' already registered + * ACPI: disable ACPI cleanly when bad RSDP found + * ACPICA: Fix table entry truncation calculation + * PCI: properly clean up ASPM link state on device remove + * PCI: return error on failure to read PCI ROMs + * seq_file: move traverse so it can be used from seq_read + * seq_file: fix big-enough lseek() + read() + * serial: set correct baud_base for Oxford Semiconductor Ltd EXSYS + EX-41092 Dual 16950 Serial adapter + * Add support for '8-port RS-232 MIC-3620 from advantech' + * mm: fix error case in mlock downgrade reversion + * elf core dump: fix get_user use + * ACPI: video: Fix reversed brightness behavior on ThinkPad SL series + * ipw2200: fix scanning while associated + * XFS: set b_error from bio error in xfs_buf_bio_end_io + * Revert USB: option: add Pantech cards + * USB: option: New mobile broadband modems to be supported + * USB: new id for ti_usb_3410_5052 driver + * USB: two more usb ids for ti_usb_3410_5052 + * USB: usb-storage: add Pentax to the bad-vendor list + * sata_via: Add VT8261 support + * nbd: do not allow two clients at the same time + * sctp: Fix another socket race during accept/peeloff + * Linux 2.6.28.5 + + -- Tim Gardner Mon, 09 Feb 2009 16:11:28 -0700 + +linux (2.6.28-7.20) jaunty; urgency=low + + [ Tim Gardner ] + + * SAUCE: Input: atkbd - Samsung NC10 key repeat fix + + [ Upstream Kernel Changes ] + + * Manually revert "mlock: downgrade mmap sem while populating mlocked + regions" + * xen: make sysfs files behave as their names suggest + * sata_mv: fix 8-port timeouts on 508x/6081 chips + * m68knommu: set NO_DMA + * PCI/MSI: bugfix/utilize for msi_capability_init() + * x86: use early clobbers in usercopy*.c + * netfilter: ctnetlink: fix scheduling while atomic + * orinoco: move kmalloc(..., GFP_KERNEL) outside spinlock in + orinoco_ioctl_set_genie + * fbdev/atyfb: Fix DSP config on some PowerMacs & PowerBooks + * kmalloc: return NULL instead of link failure + * sata_nv: rename nv_nf2_hardreset() + * sata_nv: fix MCP5x reset + * sata_nv: ck804 has borked hardreset too + * Fix memory corruption in console selection + * Add enable_ms to jsm driver + * nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is + found + * nfsd: Ensure nfsv4 calls the underlying filesystem on LOCKT + * iwlwifi: fix rs_get_rate WARN_ON() + * p54: fix lm87 checksum endianness + * p54: fix p54_read_eeprom to cope with tx_hdr_len + * p54usb: rewriting rx/tx routines to make use of usb_anchor's facilities + * minstrel: fix warning if lowest supported rate index is not 0 + * PCI: irq and pci_ids patch for Intel Tigerpoint DeviceIDs + * cpuidle: Add decaying history logic to menu idle predictor + * ACPI: Avoid array address overflow when _CST MWAIT hint bits are set + * video: always update the brightness when poking "brightness" + * Newly inserted battery might differ from one just removed, so update of + battery info fields is required. + * ACPI: Do not modify SCI_EN directly + * dlm: initialize file_lock struct in GETLK before copying conflicting + lock + * sata_mv: Fix chip type for Hightpoint RocketRaid 1740/1742 + * ACPICA: Allow multiple backslash prefix in namepaths + * Linux 2.6.28.4 + + -- Tim Gardner Sat, 07 Feb 2009 18:53:42 -0700 + +linux (2.6.28-7.19) jaunty; urgency=low + + * Fix missing modules FTBS + + -- Tim Gardner Thu, 05 Feb 2009 15:28:15 -0700 + +linux (2.6.28-7.18) jaunty; urgency=low + + [ Alok Kataria ] + + * SAUCE: (drop after 2.6.29) x86: add a synthetic TSC_RELIABLE feature + bit + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: add X86_FEATURE_HYPERVISOR feature bit + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Hypervisor detection and get tsc_freq + from hypervisor + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Add a synthetic TSC_RELIABLE feature + bit. + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Skip verification by the watchdog for + TSC clocksource. + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: VMware: Fix vmware_get_tsc code + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: vmware: look for DMI string in the + product serial key + - LP: #319945 + + [ Andy Whitcroft ] + + * SAUCE: toshiba_acpi -- pull in current -dev version of driver + - LP: #269831 + * SAUCE: toshiba_acpi -- add acpi hotkey kernel thread + - LP: #269831 + * move toshiba laptops back from tlsup to toshiba_acpi + - LP: #269831 + + [ Aneesh Kumar K.V ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Fix the delalloc + writepages to allocate blocks at the right offset. + * SAUCE: (revert before 2.6.28.y update) ext4: avoid ext4_error when + mounting a fs with a single bg + * SAUCE: (revert before 2.6.28.y update) ext4: Don't overwrite + allocation_context ac_status + * SAUCE: (revert before 2.6.28.y update) ext4: Add blocks added during + resize to bitmap + * SAUCE: (revert before 2.6.28.y update) ext4: Use + EXT4_GROUP_INFO_NEED_INIT_BIT during resize + * SAUCE: (revert before 2.6.28.y update) ext4: cleanup mballoc header + files + * SAUCE: (revert before 2.6.28.y update) ext4: don't use blocks freed but + not yet committed in buddy cache init + * SAUCE: (revert before 2.6.28.y update) ext4: Fix race between + read_block_bitmap() and mark_diskspace_used() + * SAUCE: (revert before 2.6.28.y update) ext4: Fix the race between + read_inode_bitmap() and ext4_new_inode() + * SAUCE: (revert before 2.6.28.y update) ext4: Use new buffer_head flag + to check uninit group bitmaps initialization + * SAUCE: (revert before 2.6.28.y update) ext4: mark the blocks/inode + bitmap beyond end of group as used + * SAUCE: (revert before 2.6.28.y update) ext4: Don't allow new groups to + be added during block allocation + * SAUCE: (revert before 2.6.28.y update) ext4: Init the complete page + while building buddy cache + * SAUCE: (revert before 2.6.28.y update) ext4: Fix s_dirty_blocks_counter + if block allocation failed with nodelalloc + + [ Hannes Eder ] + + * SAUCE: (drop after 2.6.29) x86: vmware - fix sparse warnings + - LP: #319945 + + [ Luke Yelavich ] + + * hid modules have hyphens instead of underscores in their names + + [ Mark Fasheh ] + + * SAUCE: (revert before 2.6.28.y update) jbd2: Add BH_JBDPrivateStart + + [ Theodore Ts'o ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Add support for non-native + signed/unsigned htree hash algorithms + * SAUCE: (revert before 2.6.28.y update) ext4: tone down + ext4_da_writepages warnings + * SAUCE: (revert before 2.6.28.y update) jbd2: Add barrier not supported + test to journal_wait_on_commit_record + * SAUCE: (revert before 2.6.28.y update) ext4: Add sanity checks for the + superblock before mounting the filesystem + * SAUCE: (revert before 2.6.28.y update) ext4: only use i_size_high for + regular files + * SAUCE: (revert before 2.6.28.y update) ext4: Add sanity check to + make_indexed_dir + * SAUCE: (revert before 2.6.28.y update) jbd2: On a __journal_expect() + assertion failure printk "JBD2", not "EXT3-fs" + * SAUCE: (revert before 2.6.28.y update) ext4: Initialize the new group + descriptor when resizing the filesystem + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.28) [eCryptfs] Regression in unencrypted + filename symlinks + - LP: #322532 + + [ Upstream Kernel Changes ] + + * Input: atkbd - broaden the Dell DMI signatures + - LP: #261721 + * ti_usb_3410_5052: support alternate firmware + * ath5k: fix mesh point operation + * mac80211: decrement ref count to netdev after launching mesh discovery + * inotify: clean up inotify_read and fix locking problems + * fuse: destroy bdi on umount + * fuse: fix missing fput on error + * fuse: fix NULL deref in fuse_file_alloc() + * x86, mm: fix pte_free() + * klist.c: bit 0 in pointer can't be used as flag + * sysfs: fix problems with binary files + * x86: fix page attribute corruption with cpa() + * USB: fix toggle mismatch in disable_endpoint paths + * sound: virtuoso: enable UART on Xonar HDAV1.3 + * USB: usbmon: Implement compat_ioctl + * USB: fix char-device disconnect handling + * USB: storage: add unusual devs entry + * alpha: nautilus - fix compile failure with gcc-4.3 + * alpha: fix vmalloc breakage + * resources: skip sanity check of busy resources + * rtl8187: Add termination packet to prevent stall + * it821x: Add ultra_mask quirk for Vortex86SX + * libata: pata_via: support VX855, future chips whose IDE controller use + 0x0571 + * serial_8250: support for Sealevel Systems Model 7803 COMM+8 + * drm: stash AGP include under the do-we-have-AGP ifdef + * Fix OOPS in mmap_region() when merging adjacent VM_LOCKED file segments + * bnx2x: Block nvram access when the device is inactive + * ext3: Add sanity check to make_indexed_dir + * rtl8187: Fix error in setting OFDM power settings for RTL8187L + * epoll: drop max_user_instances and rely only on max_user_watches + * gpiolib: fix request related issue + * sgi-xpc: Remove NULL pointer dereference. + * sgi-xpc: ensure flags are updated before bte_copy + * include/linux: Add bsg.h to the Kernel exported headers + * ALSA: hda - Fix PCM reference NID for STAC/IDT analog outputs + * ALSA: hda - add another MacBook Pro 4, 1 subsystem ID + * ALSA: hda - Add quirk for HP DV6700 laptop + * crypto: authenc - Fix zero-length IV crash + * crypto: ccm - Fix handling of null assoc data + * x86, pat: fix reserve_memtype() for legacy 1MB range + * x86, pat: fix PTE corruption issue while mapping RAM using /dev/mem + * PCI hotplug: fix lock imbalance in pciehp + * dmaengine: fix dependency chaining + * NET: net_namespace, fix lock imbalance + * relay: fix lock imbalance in relay_late_setup_files + * Linux 2.6.28.3 + * ALSA: Enable SPDIF output on ALC655 + * ALSA: hda - Add ASUS V1Sn support + * ALSA: hda - support detecting HD Audio devices with PCI class code + * ALSA: hda: alc883 model for ASUS P5Q-EM boards + * ALSA: hda - Add quirk for MSI 7260 mobo + * ALSA: hda - Add quirk for Sony VAIO VGN-SR19XN + * ALSA: oxygen: add Claro halo support + * ALSA: hda - Add a new function to seek for a codec ID + * ALSA: patch_sigmatel: Add missing Gateway entries and autodetection + * ALSA: hda - More fixes on Gateway entries + * ALSA: hda - Add MCP67 HDMI support + * ALSA: hda - fix name for ALC1200 + * LSA: hda - Add HP Acacia detection + * ALSA: hda - Add quirk for HP 2230s + * ALSA: hda - Add quirk for Dell Inspiron Mini9 + * ALSA: hda - add support for Intel DX58SO board + * ALSA: hda - Fix silent headphone output on Panasonic CF-74 + * ALSA: USB quirk for Logitech Quickcam Pro 9000 name + * ALSA: hda - add quirks for some 82801H variants to use ALC883_MITAC + + [ Yasunori Goto ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Widen type of + ext4_sb_info.s_mb_maxs[] + + -- Tim Gardner Mon, 02 Feb 2009 23:07:13 -0700 + +linux (2.6.28-6.17) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs: ARMEL/versatile + + -- Amit Kucheria Fri, 30 Jan 2009 13:36:59 +0200 + +linux (2.6.28-6.16) jaunty; urgency=low + + [ Luke Yelavich ] + + * Add hid quirks to input-modules udeb + + [ Tim Gardner ] + + * Revert "[arm] Fix kexec on ARM by properly calling the relocation + function". This patch was deemed 'bogus' by Russell King on the + ARM mailing list. + + [ Upstream Kernel Changes ] + + * PCI: keep ASPM link state consistent throughout PCIe hierarchy + * security: introduce missing kfree + * rt2x00: add USB ID for the Linksys WUSB200. + * p54usb: Add USB ID for Thomson Speedtouch 121g + * lib/idr.c: use kmem_cache_zalloc() for the idr_layer cache + * sgi-xp: eliminate false detection of no heartbeat + * sched: fix update_min_vruntime + * IA64: Turn on CONFIG_HAVE_UNSTABLE_CLOCK + * sound: virtuoso: do not overwrite EEPROM on Xonar D2/D2X + * ALSA: hda - Add quirk for another HP dv5 + * ALSA: hda - Fix HP dv5 mic input + * ALSA: hda - Don't reset HP pinctl in patch_sigmatel.c + * ALSA: hda - make laptop-eapd model back for AD1986A + * drivers/net/irda/irda-usb.c: fix buffer overflow + * usb-storage: add last-sector hacks + * usb-storage: set CAPACITY_HEURISTICS flag for bad vendors + * pkt_sched: sch_htb: Fix deadlock in hrtimers triggered by HTB + * ipv6: Fix fib6_dump_table walker leak + * sctp: Avoid memory overflow while FWD-TSN chunk is received with bad + stream ID + * pkt_sched: cls_u32: Fix locking in u32_change() + * r6040: fix wrong logic in mdio code + * r6040: save and restore MIER correctly in the interrupt routine + * r6040: bump release number to 0.19 + * tcp: don't mask EOF and socket errors on nonblocking splice receive + * p54usb: fix traffic stalls / packet drop + * netfilter: x_tables: fix match/target revision lookup + * netfilter: ebtables: fix inversion in match code + * netfilter: nf_conntrack: fix ICMP/ICMPv6 timeout sysctls on big-endian + * dell_rbu: use scnprintf() instead of less secure sprintf() + * powerpc: is_hugepage_only_range() must account for both 4kB and 64kB + slices + * hwmon: (abituguru3) Fix CONFIG_DMI=n fallback to probe + * mm: write_cache_pages cyclic fix + * mm: write_cache_pages early loop termination + * mm: write_cache_pages writepage error fix + * mm: write_cache_pages integrity fix + * mm: write_cache_pages cleanups + * mm: write_cache_pages optimise page cleaning + * mm: write_cache_pages terminate quickly + * mm: write_cache_pages more terminate quickly + * mm: do_sync_mapping_range integrity fix + * mm: direct IO starvation improvement + * fs: remove WB_SYNC_HOLD + * fs: sync_sb_inodes fix + * fs: sys_sync fix + * Linux 2.6.28.2 + + -- Tim Gardner Sun, 25 Jan 2009 13:36:16 -0700 + +linux (2.6.28-5.15) jaunty; urgency=low + + [ Tim Gardner ] + + * Revert "Enabled CONFIG_PID_NS=y for i386/amd64" + Somehow this commit also reverted the 7 prior commits (which is bad). + * Enabled CONFIG_PID_NS=y for i386/amd64 (version 2) + + -- Tim Gardner Thu, 22 Jan 2009 13:48:34 -0700 + +linux (2.6.28-5.14) jaunty; urgency=low + + [ Ben Collins ] + + * lirc_gpio: Forward ported to current kernel (jaunty) + * configs: Enable LIRC_GPIO on 64-bit/32-bit x86 + - LP: #298791 + + [ Jeff Layton ] + + * SAUCE: cifs: make sure we allocate enough storage for socket address + - LP: #318565 + + [ Tim Gardner ] + + * check-abi: Return success when ABI skip is requested and no ABI files exist. + This ought to fix the armel FTBS. + + -- Tim Gardner Thu, 22 Jan 2009 06:42:49 -0700 + +linux (2.6.28-5.13) jaunty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: don't use buggy _BCL/_BCM/_BQC for backlight control" + + [ Tim Gardner ] + + * Fix udeb generation breakage caused by the previous armel versatile + flavour config update. + + -- Tim Gardner Wed, 21 Jan 2009 12:38:35 -0700 + +linux (2.6.28-5.12) jaunty; urgency=low + + [ Ante ] + + * Update drbd to 8.3.0 + + [ Dave Airlie ] + + * i915/drm: provide compat defines for userspace for certain struct + + [ Eric Anholt ] + + * drm/i915: Don't double-unpin buffers if we take a signal in + * drm/i915: Don't complain when interrupted while pinning in execbuffers. + * drm/i915: Don't allow objects to get bound while VT switched. + + [ Jani Monoses ] + + * Fix webcam having USB ID 0ac8:303b + - LP: #292086 + + [ Jesse Barnes ] + + * drm/i915: set vblank enabled flag correctly across IRQ + * drm/i915: don't enable vblanks on disabled pipes + + [ Michael Casadevall ] + + * [arm] Fix kexec on ARM by properly calling the relocation function + + [ Tim Gardner ] + + * Enabled CONFIG_PID_NS=y for i386/amd64 + * SAUCE: Increase ATA_TMOUT_PMP_SRST_WAIT to 5 seconds. + - LP: #318978 + * Update armel versatile config + - LP: #314789 + * Enabled CONFIG_RT2860=m for i386/amd64 + * Enabled CONFIG_RT2870=m for i386/amd64 + + [ Upstream Kernel Changes ] + + * Input: atkbd - add keyboard quirk for HP Pavilion ZV6100 laptop + - LP: #291878 + * ALSA: hda - Add quirk for another HP dv7 + * ALSA: hda - Add quirk for HP6730B laptop + * ALSA: caiaq - Fix Oops with MIDI + * ALSA: hda - Fix typos for AD1882 codecs + * x86: fix intel x86_64 llc_shared_map/cpu_llc_id anomolies + * x86: default to SWIOTLB=y on x86_64 + * CIFS: make sure that DFS pathnames are properly formed + * ring-buffer: prevent false positive warning + * ring-buffer: fix dangling commit race + * iwlwifi: use GFP_KERNEL to allocate Rx SKB memory + * tx493[89]ide: Fix length for __ide_flush_dcache_range + * tx4939ide: Do not use zero count PRD entry + * SCSI: eata: fix the data buffer accessors conversion regression + * USB: emi26: fix oops on load + * x86, UV: remove erroneous BAU initialization + * x86: fix incorrect __read_mostly on _boot_cpu_pda + * vmalloc.c: fix flushing in vmap_page_range() + * fs: symlink write_begin allocation context fix + * cgroups: fix a race between cgroup_clone and umount + * dm raid1: fix error count + * dm log: fix dm_io_client leak on error paths + * minix: fix add link's wrong position calculation + * md: fix bitmap-on-external-file bug. + * sched_clock: prevent scd->clock from moving backwards, take #2 + * devices cgroup: allow mkfifo + * SCSI: aha152x_cs: Fix regression that keeps driver from using shared + interrupts + * ioat: fix self test for multi-channel case + * USB: isp1760: use a specific PLX bridge instead of any bdridge + * USB: isp1760: Fix probe in PCI glue code + * USB: unusual_devs.h additions for Pentax K10D + * inotify: fix type errors in interfaces + * Move compat system call declarations to compat header file + * Convert all system calls to return a long + * Rename old_readdir to sys_old_readdir + * Remove __attribute__((weak)) from sys_pipe/sys_pipe2 + * Make sys_pselect7 static + * Make sys_syslog a conditional system call + * System call wrapper infrastructure + * powerpc: Enable syscall wrappers for 64-bit + * s390: enable system call wrappers + * System call wrapper special cases + * System call wrappers part 01 + * System call wrappers part 02 + * System call wrappers part 03 + * System call wrappers part 04 + * System call wrappers part 05 + * System call wrappers part 06 + * System call wrappers part 07 + * System call wrappers part 08 + * System call wrappers part 09 + * System call wrappers part 10 + * System call wrappers part 11 + * System call wrappers part 12 + * System call wrappers part 13 + * System call wrappers part 14 + * System call wrappers part 15 + * System call wrappers part 16 + * System call wrappers part 17 + * System call wrappers part 18 + * System call wrappers part 19 + * System call wrappers part 20 + * System call wrappers part 21 + * System call wrappers part 22 + * System call wrappers part 23 + * System call wrappers part 24 + * System call wrappers part 25 + * System call wrappers part 26 + * System call wrappers part 27 + * System call wrappers part 28 + * System call wrappers part 29 + * System call wrappers part 30 + * System call wrappers part 31 + * System call wrappers part 32 + * System call wrappers part 33 + * s390 specific system call wrappers + * x86: fix RIP printout in early_idt_handler + * Fix timeouts in sys_pselect7 + * USB: another unusual_devs entry for another bad Argosy storage device + * USB: storage: extend unusual range for 067b:3507 + * USB: storage: recognizing and enabling Nokia 5200 cell phoes + * HID: fix error condition propagation in hid-sony driver + * fix switch_names() breakage in short-to-short case + * nfs: remove redundant tests on reading new pages + * eCryptfs: check readlink result was not an error before using it + * mvsas: increase port type detection delay to suit Seagate's 10k6 drive ST3450856SS 0003 + * x86: avoid theoretical vmalloc fault loop + * ath9k: enable RXing of beacons on STA/IBSS + * mm lockless pagecache barrier fix + * powerpc: Disable Collaborative Memory Manager for kdump + * ibmvfc: Delay NPIV login retry and add retries + * ibmvfc: Improve async event handling + * getrusage: RUSAGE_THREAD should return ru_utime and ru_stime + * ath5k: ignore the return value of ath5k_hw_noise_floor_calibration + * mm: fix assertion + * XFS: truncate readdir offsets to signed 32 bit values + * Linux 2.6.28.1 + * eCryptfs: Filename Encryption: Tag 70 packets + * eCryptfs: Filename Encryption: Header updates + * eCryptfs: Filename Encryption: Encoding and encryption functions + * eCryptfs: Filename Encryption: filldir, lookup, and readlink + * eCryptfs: Filename Encryption: mount option + * eCryptfs: Replace %Z with %z + * eCryptfs: Fix data types (int/size_t) + * eCryptfs: kerneldoc for ecryptfs_parse_tag_70_packet() + * eCryptfs: Clean up ecryptfs_decode_from_filename() + * fs/ecryptfs/inode.c: cleanup kerneldoc + * staging-p80211: Kill directly reference of netdev->priv + * staging-slicoss: Kill directly reference of netdev->priv + * staging-winbond: Kill directly reference of netdev->priv + * Staging: go7007: fixes due to video_usercopy api change + * Staging: go7007: fixes due v4l2_file_operations api change + * staging: correct dubious use of !x & y + * Staging: w35und: make wb35_probe() and wb35_disconnect() funtions static + * Staging: w35und: remove unused wb35_open() and wb35_close() functions + * Staging: w35und: use msleep() and udelay() + * Staging: w35und: remove the no-op pa_stall_execution macro + * Staging: w35und: purb typedef removal + * Staging: w35und: reg queue struct typedef removal + * Staging: w35und: wb35reg struct typedef removal + * Staging: w35und: padapter struct typedef removal + * Staging: w35und: merge wblinux struct to adapter + * Staging: w35und: wb35_probe() cleanup + * Staging: w35und: remove usb_submit_urb wrapper function + * Staging: w35und: remove usb_alloc_urb wrapper function + * w35und: remove dead code from wbusb_f.h + * Staging: w35und: remove true/false boolean macros + * Staging: w35und: OS_MEMORY_ALLOC wrapper removal + * Staging: w35und: usb_put_dev() is missing from wb35_disconnect() + * Staging: w35und: remove macro magic from MLME_GetNextPacket() + * Staging: w35und: plug memory leak in wbsoft_tx() + * Staging: w35und: move supported band initialization out of wb35_probe() + * Staging: w35und: remove timer wrappers + * Staging: w35und: remove atomic op wrappers + * Staging: w35und: remove memcpy/memcmp wrappers + * Staging: w35und: remove abs() and BIT() macros + * Staging: w35und: remove unused macros from common.h + * Staging: w35und: remove unused link status code + * Staging: w35und: #include cleanup + * Staging: w35und: remove some dead code + * Staging: w35und: move source files to one directory + * Staging: w35und: move struct wbsoft_priv to core.h and use it + * Staging: w35und: remove ->adapter from struct _HW_DATA_T + * Staging: w35und: clean up adapter.h a bit + * Staging: w35und: merge struct wb35_adapter to struct wbsoft_priv + * Staging: w35und: remove global struct ieee80211_hw + * Staging: w35und: inline DRIVER_AUTHOR and DRIVER_DESC macros + * Staging: w35und: clean up wblinux.c a bit + * Staging: w35und: remove unused ->ShutDowned member from struct + LOCAL_PARA + * Staging: w35und: move global wbsoft_enabled to struct wbsoft_priv + * Staging: w35und: move packet_came() to wb35rx.c + * Staging: w35und: remove ->skb_array from struct wbsoft_priv + * Staging: w35und: remove ->shutdown from struct wbsoft_priv + * Staging: w35und: make functions local to mds.c static + * Staging: w35und: make functions local to mlmetxrx.c static + * Staging: w35und: remove dead code from mto.c + * Staging: w35und: make functions local to wb35rx.c static + * Staging: w35und: make functions local to wb35tx.c static + * Staging: w35und: remove dead code from wbhal.c + * Staging: w35und: remove rxisr.c as dead code + * Staging: w35und: fix Kconfig + * Staging: w35und: fix config build warnings + * Staging: wlan-ng: Remove PCI/PLX/PCMCIA files. + * Staging: wlan-ng: Update Help text to mention prism3 devices. + * Staging: wlan-ng: Delete PCI/PLX/PCMCIA-specific code. + * Staging: wlan-ng: Make wlan-ng use WEXT mode by default. + * Staging: wlan-ng: Eliminate more <2.6 kernel support. + * Staging: wlan-ng: Eliminate all backwards-compatibility for <2.6.13 kernels. + * Staging: wlan-ng: Eliminate a boatload of tertiaryAP-only code. + * Staging: wlan-ng: Remove AP-only code from MLME functions. + * Staging: wlan-ng: Get rid of the MTU tests in the rx conversion path. + * Staging: wlan-ng: Eliminate one more rx mtu test. + * Staging: wlan-ng: Eliminate local 'version.h' + * Staging: wlan-ng: Eliminate usage of procfs. + * Staging: wlan-ng: Use standard kernel integer (u32/s32/etc) types. + * Staging: wlan-ng: Eliminate all backwards-compatible kernel code. + * Staging: wlan-ng: Wireless Extension support is mandatory. + * Staging: wlan-ng: use WIRELESS_EXT, not CONFIG_WIRELESS_EXT + * Staging: wlan-ng: Delete a large pile of now-unused code. + * Staging: wlan-ng: Delete a pile of unused mibs. And fix WEXT SET_TXPOWER. + * Staging: wlan-ng: Consolidate wlan-ng into a single module. + * Staging: wlan-ng: Purge all MIBs not used internally. + * Staging: wlan-ng: p80211netdev.c fix netdev alloc to prevent oops on device start + * Staging: wlan-ng: prism2_usb.c always enable the card in probe_usb + * Staging: wlan-ng: hfa384x_usb.c use newest version of 384x_drvr_start + * Staging: wlan-ng: p80211wext.c add latest changes & remove extra nulls from wext_handlers + * Staging: wlan-ng: p80211wext don't set default key id twice + * Staging: wlan-ng: hfa384x_usbin_callback: check for hardware removed + * Staging: wlan-ng: p80211conv.c copy code from wlan-ng-devel branch to not drop packets + * Staging: wlan-ng: remove unused #include + * Staging: wlan-ng: p80211wext.c: use ARRAY_SIZE + * Staging: wlan-ng: fix compiler warnings + * Staging: wlan-ng: skb_p80211_to_ether() - payload_length is unsigned, check before subtraction + * Staging: at76_usb: update drivers/staging/at76_usb w/ mac80211 port + * Staging: at76_usb: fix build breakage + * Staging: at76_usb: remove compiler warnings + * Staging: at76_usb: fix up all remaining checkpatch.pl warnings + * Staging: at76_usb: cleanup dma on stack issues + * Staging: poch: Block size bug fix + * Staging: poch: Update TODO list + * Staging: poch: Correct pages from bytes. + * Staging: poch: minor fixes + * Staging: poch: Fix build warnings + * Staging: poch: Rx control register init + * Staging: poch: Fix user space protocol syncing + * Staging: poch: Fine grained locking + * Staging: sxg: remove typedefs + * Staging: sxg: break the build in a cleaner way when !x86 + * Staging: sxg: update README + * staging: struct device - replace bus_id with dev_name(), dev_set_name() + * Staging: echo: remove typedefs + * Staging: echo: Lindent drivers/staging/echo + * Staging: go7007: saa7134 updates + * Staging: go7007: add sensoray 2250/2251 support + * Staging: go7007: Convert driver to use video_ioctl2 + * Staging: go7007: annotate code pointers + * Staging: go7007: fix minor build warnings + * Staging: go7007: small cleanup + * Staging: go7007: add some more v4l2 ioctls + * Staging: et131x: Cleanup et131x_debug.h defines + * Staging: et131x: fix build failure + * Staging: et131x: remove unused variable in et1310_tx.c + * Staging: usbip: cleanup kerneldoc + * Staging: slicoss: use kzalloc + * Staging: slicoss: use correct type for memory allcations + * Staging: slicoss: use request_firmware + * Staging: add agnx wireless driver + * Staging: agnx: fix build errors due to ssid removal + * Staging: agnx: fix build errors due to rate control API changes + * Staging: agnx: fix build warnings + * Staging: add otus Atheros wireless network driver + * Staging: otus: fix netdev->priv usage + * Staging: otus: fix name clash + * Staging: otus: fix urb callback function type + * Staging: otus: remove dependence on kernel version + * Staging: add rt2860 wireless driver + * Staging: rt2860: disable root hack for reading files + * Staging: rt2860: fix up netdev->priv usage + * Staging: rt2860: use standard bit-reverse function + * Staging: rt2860: Fix minor compiler warnings + * Staging: rt2860: enable WPA_SUPPLICANT support + * Staging: Add ServerEngines benet 10Gb ethernet driver + * Staging: benet: fix netif api breakage + * Staging: benet: fix up netdev->priv change + * Staging: benet: build is broken unless CONFIG_NETPOLL is enabled + * Staging: benet: patch to remove subdirectories + * Staging: benet: fix build errors when CONFIG_NETPOLL is off + * Staging: benet: fix build error. + * Staging: benet: patch to use offsetof() instead of AMAP_BYTE_OFFSET() + * Staging: benet: fix problems reported by checkpatch + * Staging: benet: cleanup a check while posting rx buffers + * Staging: add comedi core + * Staging: comedi: fix up a lot of checkpatch.pl warnings + * Staging: comedi: fix checkpatch.pl errors in comedi_fops.c + * Staging: comedi: fix build error in comedilib.h + * Staging: comedi: add kcomedilib to the tree + * Staging: comedi: set up infrastructure for individual drivers + * Staging: comedi: add local copy of interrupt.h + * Staging: comedi: add pci and usb wrapper header files + * Staging: comedi: comedi driver common function module + * Staging: comedi: add mite comedi pci driver + * Staging: comedi: add usb usbdux driver + * Staging: comedi: add usb usbduxfast driver + * Staging: comedi: add usb dt9812 driver + * Staging: comedi: add comedi_bond driver + * Staging: comedi: add comedi_test driver + * Staging: comedi: add comedi_parport driver + * Staging: comedi: dt9812: fix up a lot of coding style issues + * Staging: comedi: dt9812: remove dt9812.h + * Staging: comedi: dt9812: remove typedefs + * Staging: comedi: dt9812: fix sparse warnings + * Staging: comedi: usbdux: remove kernel version checks + * Staging: comedi: usbdux: code style cleanups + * Staging: comedi: usbdux: remove // comments + * Staging: comedi: usbdux: fix up printk calls + * Staging: comedi: usbdux: remove checkpatch.pl warnings + * Staging: comedi: usbdux: remove typedef + * Staging: comedi: usbdux: remove comedi usb wrappers + * Staging: comedi: usbduxfast: remove comedi usb wrappers + * Staging: comedi: dt9812: remove #ifdef that is not needed + * Staging: comedi: remove usb wrappers + * Staging: comedi: remove PCI wrappers + * Staging: comedi: add icp_multi driver + * Staging: comedi: add me4000 driver + * Staging: comedi: fix checkpatch.pl issues in comedi_bond.c + * Staging: comedi: fix checkpatch.pl issues in comedi_fc.c + * Staging: comedi: remove typedefs from comedi_bond.c + * Staging: comedi: fix sparse issues in comedi_bond.c + * Staging: comedi: fix checkpatch.pl issues in comedi_test.c + * Staging: comedi: fix sparse issues in comedi_test.c + * Staging: comedi: remove typedefs from comedi_test.c + * Staging: comedi: fix comedi_parport.c checkpatch.pl issues. + * Staging: comedi: fix comedi_fc.h checkpatch.pl issues. + * Staging: comedi: fix comedi_pci.h checkpatch.pl issues. + * Staging: comedi: comedi_pci.h: remove unneeded wrapper + * Staging: comedi: comedi_pci.h: remove comedi_pci_enable_no_regions + * Staging: comedi: comedi_pci.h: remove comedi_pci_disable_no_regions + * Staging: comedi: add s626 driver + * Staging: comedi: add rtd520 driver + * Staging: comedi: add me_daq driver + * Staging: comedi: me_daq: fix checkpatch.pl issues + * Staging: comedi: me_daq: remove typedefs + * Staging: comedi: me_daq: fix sparse issues + * Staging: comedi: fix checkpatch.pl warning in interrupt.h + * Staging: comedi: fix build if CONFIG_PROC_FS is not set + * Staging: add asus_oled driver + * Staging: asus_oled: fix build dependancy + * Staging: Add the Meilhaus ME-IDS driver package + * Staging: meilhaus: fix __symbol_get problems + * Staging: add lcd-panel driver + * Staging: panel: major checkpatch cleanup + * Staging: panel: remove ifdefs and code for pre-2.6 kernels + * Staging: panel: remove support for smartcards + * Staging: add Driver for Altera PCI Express Chaining DMA reference design + * Staging: add rtl8187se driver + * Staging: rtl8187se: remove unneeded files + * Staging: rtl8187se: make the built module be the proper name + * Staging: rtl8187se: remove duplicate pci ids + * Staging: me4000: switch to list_for_each*() + * Staging: usbip: switch to list_for_each_entry() + * Staging: add princeton instruments usb camera driver + * Staging: add mimio xi driver + * Staging: add rt2870 wireless driver + * Staging: rt2870: disable root hack for reading files + * Staging: rt2870: fix up netdev->priv usage + * Staging: add frontier tranzport and alphatrack drivers + * Staging: frontier: remove unused alphatrack_sysfs.c file + * Staging: frontier: fix compiler warnings + * Staging: add epl stack + * Staging: epl: run Lindent on all kernel/*.h files + * Staging: epl: run Lindent on all user/*.h files + * Staging: epl: run Lindent on *.h files + * Staging: epl: run Lindent on *.c files + * Staging: epl: hr timers all run in hard irq context now + * Staging: epl: fix netdev->priv b0rkage + * Staging: add android framework + * Staging: android: add binder driver + * Staging: android: binder: Fix gcc warnings about improper format specifiers for size_t in printk + * staging: android: binder: Fix use of euid + * Staging: android: add logging driver + * Staging: android: add ram_console driver + * Staging: android: add timed_gpio driver + * Staging: android: timed_gpio: Rename android_timed_gpio to timed_gpio + * Staging: android: remove dummy android.c driver + * Staging: android: add lowmemorykiller driver + * Staging: android: binder: fix build errors + * staging: __FUNCTION__ is gcc-specific, use __func__ + * V4L/DVB (10176a): Switch remaining clear_user_page users over to + clear_user_highpage + + [ Zhenyu Wang ] + + * agp/intel: add support for G41 chipset + + -- Tim Gardner Sun, 18 Jan 2009 20:22:54 -0700 + +linux (2.6.28-4.11) jaunty; urgency=low + + [ Mario Limonciello ] + + * SAUCE: Enable HDMI audio codec on Studio XPS 1340 + - LP: #309508 + + [ Tim Gardner ] + + * Fix armel d-i FTBSs + + [ Upstream Kernel Changes ] + + * USB: re-enable interface after driver unbinds + + -- Tim Gardner Tue, 13 Jan 2009 16:33:08 -0700 + +linux (2.6.28-4.10) jaunty; urgency=low + + [ Andy Whitcroft ] + + * update kernel bootloader recommends: to prefer grub + - LP: #314004 + * SAUCE: don't use buggy _BCL/_BCM/_BQC for backlight control + - LP: #311716 + * SAUCE: test-suspend -- add the suspend test scripts + - LP: #316419 + + [ Colin Watson ] + + * Enable udebs for armel + + [ Tim Gardner ] + + * SAUCE: Dell laptop digital mic does not work, PCI 1028:0271 + - LP: #309508 + * Enable CIFS_XATTR=y and CONFIG_CIFS_POSIX=y + - LP: #220658 + + -- Tim Gardner Thu, 08 Jan 2009 10:38:22 -0700 + +linux (2.6.28-4.9) jaunty; urgency=low + + [ Tim Gardner ] + + * Restore DM_CRYPT, AES, ECB, and CBC as modules. This fixes + some installer issues with encrypted /home and Private directories. + * Take one more stab at building armel without module or ABI errors. + + -- Tim Gardner Tue, 06 Jan 2009 08:38:23 -0700 + +linux (2.6.28-4.8) jaunty; urgency=low + + * Fix i386/amd64 FTBS by ignoring all module and ABI changes, + not something you would normally do, but I'm sure the ABI + has not changed. This will probably also allow the ARM builds to complete. + + -- Tim Gardner Mon, 05 Jan 2009 14:42:58 -0700 + +linux (2.6.28-4.7) jaunty; urgency=low + + [ Tim Gardner ] + + * Enable CONFIG_ATH5K=m for i386/amd64 + - LP: #306719 + * Build all i386/amd64 AGP/DRM components as modules. + - LP: #312721 + * git commands are now installed outside the default $PATH + Use 'git CMD' instead of 'git-CMD'. + * Build in most PATA/SATA drivers. This should allow most i386/amd64 systems to boot + without an initramfs, though some support work is still required in initramfs-tools + and grub. + - LP: #311730 + + -- Tim Gardner Fri, 02 Jan 2009 07:33:09 -0700 + +linux (2.6.28-4.6) jaunty; urgency=low + + [ Tim Gardner ] + + * Enable CONFIG_X86_E_POWERSAVER=m for i386 generic + - LP: #237405 + * Build i386 AGP drivers as modules + - LP: #312721 + * Build i386 DRM as a module + - LP: #312721 + + [ Upstream Kernel Changes ] + + * drm/i915: Add missing userland definitions for gem init/execbuffer. + - LP: #308387 + + -- Tim Gardner Mon, 29 Dec 2008 09:16:47 -0700 + +linux (2.6.28-4.5) jaunty; urgency=low + + [ Andy Whitcroft ] + + * clean up module dependancy information on package removal/purge + - LP: #300773 + + [ Tim Gardner ] + + * Update iscsitarget to 0.4.17 + * Build in ext{234} + * Build in Crypto modules AES, CBC, ECB + * Build in ACPI AC,BATTERY,BUTTON,FAN,PCI_SLOT,PROCESSOR,SBS,THERMAL,WMI + * Build in AGP intel,via,sis,ali,amd,amd64,efficeon,nvidia,sworks + * Build in ata,dev_dm,dev_loop,dev_md,dev_sd,dev_sr + * Build in BT l2cap,rfcomm,sco + * Reduce CONFIG_LEGACY_PTY_COUNT to 0 + * Build in CDROM_PKTCDVD and CHR_DEV_SG + * Build in CPU_FREQ + GOV_CONSERVATIVE,GOV_ONDEMAND,GOV_POWERSAVE,GOV_USERSPACE,STAT,TABLE + * Build in DM CRYPT,MIRROR,MULTIPATH,SNAPSHOT + * Build in DRM + * Build in HID + * Build in HOTPLUG PCI,PCIE + * Build in I2C + * Build in IEEE1394 OHCI1394 + * Build in INPUT EVDEV + * Build in IPV6 + * Build in MMC + * Build in PACKET + * Enable both IEEE1394 (Firewire) stacks as modules + - LP: #276463 + * Disable SUNRPC_REGISTER_V4 + - LP: #306016 + * Enable dm-raid4-5 + - LP: #309378 + * Build in PPP + * Build in RFKILL + * Build in USB SERIAL + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28 + + -- Tim Gardner Thu, 18 Dec 2008 21:18:44 -0700 + +linux (2.6.28-3.4) jaunty; urgency=low + + [ Tim Gardner ] + + * Build ecryptfs into the kernel + - LP: #302870 + * Deprecated gnbd + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28-rc8 + + -- Tim Gardner Wed, 10 Dec 2008 22:45:13 -0700 + +linux (2.6.28-2.3) jaunty; urgency=low + + [ Andy Whitcroft ] + + * update the templates so that we have spaces following the title line + + [ Tim Gardner ] + + * Add upload number to kernel version signature. This has the side effect + of renaming kernel packages back to the original way, e.g., without '-ub' + in the name. + + -- Tim Gardner Thu, 04 Dec 2008 12:18:31 -0700 + +linux (2.6.28-2.2) jaunty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: (no-up) version: Implement version_signature proc file." + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: serial: RS485 ioctl structure uses __u32 include linux/types.h + - LP: #303711 + + [ Tim Gardner ] + + * UBUNTU: Removed CONFIG_DRM_VIA_CHROME9 since it is upstream. + * UBUNTU: Removed ubuntu/via_chrome9 + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28-rc7 + + -- Tim Gardner Tue, 02 Dec 2008 07:33:32 -0700 + +linux (2.6.28-1.1) jaunty; urgency=low + + [ Amit Kucheria ] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + * SAUCE: Adds support for COMPAL JHL90 webcam + * Map armel to arm to all editconfigs to work correctly + * Add armel to getabis for completeness sake + * Add -ub to our versioning to allow kerneloops.org to identify us + + [ Andy Whitcroft ] + + * Fix Vcs-Git path for the kernel repository. + - LP: #296915 + + [ Ben Collins ] + + * SAUCE: Lower warning level of some PCI messages + - LP: #159241 + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: (no-up) connector.h: Add idx/val for drbd + * SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache + * SAUCE: drivers: Remove some duplicate device entries in various modules + * SAUCE: (no-up) [AppArmor] merge with upstream subversion r1291 + * SAUCE: (no-up) Enable ubuntu extra subdirectory + * SAUCE: (no-up) ACPI: initramfs DSDT override support + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add BOM for iscsitarget + * ubuntu: Add squashfs driver + * SAUCE: (no-up) Check for squashfs superblock in initramfs mounting. + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Added et131x driver + * ubuntu: Add dm-raid4-5 driver + * ubuntu: Add ndiswrapper driver + * ubuntu: Added ram backed compressed swap module (compcache) + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add ov511 and bt-sco drivers + * ubuntu: Add acx, prism2_usb wireless drivers + * ubuntu: Add at76 driver to build + * ubuntu: Add fsam7400 sw kill switch driver + * ubuntu: Added qc-usb driver + * ubuntu: e1000e: Upgraded module to 0.4.1.7 + * ubuntu: Added rfkill drivers + * ubuntu: VIA - Add VIA DRM Chrome9 3D engine + * ubuntu: unionfs: Added v1.4 module from hardy + * ubuntu: Add LIRC driver + * ubuntu: Add GFS driver + * ubuntu: New tlsup driver for toshiba laptops + * SAUCE: (no-up) Export lookup_has for aufs + * SAUCE: (no-up) Modularize vesafb + * ubuntu: Config files + * Disable some modules that need porting to 2.6.28 + * ubuntu: Fixup headers creation to include arch/*/include + * ubuntu/module-check: Ignore comment lines + + [ Chuck Short ] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + + [ cking ] + + * SAUCE: Enable speedstep for sonoma processors. + + [ Colin Ian King ] + + * ubuntu: Add dm-loop + * SAUCE: cx88: Support Leadtek WinFast DTV2000 H version J. + * SAUCE: fix kernel oops in VirtualBox during paravirt patching + * SAUCE: qc-usb: Enable Logitech QuickCam Messenger + * SAUCE: appleir: Enable driver for new MacBook Pro + + [ Colin Watson ] + + * Enable configfs, fuse, jfs, reiserfs, and xfs for armel + * Extend debian/d-i/ modules handling to make armel easier to support + * Create udebs for armel + + [ Fabio M. Di Nitto ] + + * ubuntu: update GFS Cluster File System + + [ Kees Cook ] + + * SAUCE: AppArmor: update to upstream subversion r1302 + + [ Leann Ogasawara ] + + * Add automatic model setting for Samsung Q45 + * Add Dell Dimension 9200 reboot quirk + + [ Mackenzie Morgan ] + + * SAUCE: Add quirk for ASUS Z37E to make sound audible after resume + + [ Matthew Garrett ] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + + [ Michael Haas ] + + * add proper aufs source tree from 20080922 + * Fix AUFS compilation in vfsub.c + * Add splice-2.6.23.patch from AUFS to export a symbol needed by AUFS + * Add put_filp.patch from AUFS to export a symbol needed by AUFS + * Add deny_write_access.patch from AUFS - export deny_write_access + * Add sec_perm-2.6.24.patch from AUFS - export security_inode_permission + * make sure TMPFS_MAGIC is defined in AUFS Makefile + * SAUCE: Revert aufs changes from AppArmor merge + + [ Mohamed Abbas ] + + * SAUCE: iwlagn -- fix rfkill when on when driver loaded + + [ Phillip Lougher ] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [ Stefan Bader ] + + * SAUCE: (no-up) Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: mmc: Increase power_up deleay to fix TI readers + * gfs1: GFS1 can't create more than 4kb file + * uvcvideo: Commit streaming parameters when enabling the video stream. + + [ Tim Gardner ] + + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: (no-up) Take care of orinoco_cs overlap with hostap_cs + * ubuntu: Add GNBD driver + * SAUCE: e1000e: Map NV RAM dynamically only when needed. + * SAUCE: Correctly blacklist Thinkpad r40e in ACPI + * SAUCE: Update Wacom tablet driver to 1.49 + * SAUCE: Fix Wacom tablet 1.49 porting errors + * SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit controller + * SAUCE: Fix Oops in wlan_setup + * SAUCE: ipw2200: change default policy for auto-associate + * Dell Wireless 365 needs BTUSB_RESET quirk. + * ndiswrapper remote buffer overflows on long ESSIDs (CVE 2008-4395) + * Disabled ubuntu/e1000e config + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + * Revert "x86, early_ioremap: fix fencepost error" + * mac80211: fix two issues in debugfs + * iwl3945: do not send scan command if channel count zero + + -- Ben Collins Fri, 07 Nov 2008 09:37:42 -0700 + +linux (2.6.27-8.17) intrepid-proposed; urgency=low + + [ John W. Linville ] + + * SAUCE: iwlagn: avoid sleep in softirq context + -LP: #286285 + + [ Tim Gardner ] + + * Dell Wireless 365 needs BTUSB_RESET quirk. + - LP: #293670 + * SAUCE: ALSA: hda: make a STAC_DELL_EQ option (version 2) + - LP: #293271 + + [ Upstream Kernel Changes ] + + * iwlagn: downgrade BUG_ON in interrupt + * Input: atkbd - expand Latitude's force release quirk to other Dells + * fbcon_set_all_vcs: fix kernel crash when switching the rotated consoles + * modules: fix module "notes" kobject leak + * Driver core: Fix cleanup in device_create_vargs(). + * Driver core: Clarify device cleanup. + * ath9k/mac80211: disallow fragmentation in ath9k, report to userspace + * md: Fix rdev_size_store with size == 0 + * xfs: fix remount rw with unrecognized options + * OHCI: Allow broken controllers to auto-stop + * USB: OHCI: fix endless polling behavior + * USB: Fix s3c2410_udc usb speed handling + * USB: EHCI: log a warning if ehci-hcd is not loaded first + * usb gadget: cdc ethernet notification bugfix + * usb: musb_hdrc build fixes + * drm/i915: fix ioremap of a user address for non-root (CVE-2008-3831) + * DVB: au0828: add support for another USB id for Hauppauge HVR950Q + * DVB: sms1xxx: support two new revisions of the Hauppauge WinTV + MiniStick + * security: avoid calling a NULL function pointer in + drivers/video/tvaudio.c + * Linux 2.6.27.3 + -LP: #294152 + + * gpiolib: fix oops in gpio_get_value_cansleep() + * edac cell: fix incorrect edac_mode + * x86 ACPI: fix breakage of resume on 64-bit UP systems with SMP kernel + * sched: fix the wrong mask_len + * USB: cdc-wdm: make module autoload work + * USB: don't rebind drivers after failed resume or reset + * USB: fix memory leak in cdc-acm + * USB: Speedtouch: add pre_reset and post_reset routines + * dm kcopyd: avoid queue shuffle + * dm snapshot: fix primary_pe race + * amd_iommu: fix nasty bug that caused ILLEGAL_DEVICE_TABLE_ENTRY errors + * CIFS: fix saving of resume key before CIFSFindNext + * netfilter: xt_iprange: fix range inversion match + * netfilter: snmp nat leaks memory in case of failure + * netfilter: restore lost ifdef guarding defrag exception + * anon_vma_prepare: properly lock even newly allocated entries + * hvc_console: Fix free_irq in spinlocked section + * ACPI Suspend: Enable ACPI during resume if SCI_EN is not set + * ACPI suspend: Blacklist HP xw4600 Workstation for old code ordering + * ACPI suspend: Always use the 32-bit waking vector + * proc: fix vma display mismatch between /proc/pid/{maps,smaps} + * SCSI: scsi_dh: add Dell product information into rdac device handler + * PCI hotplug: cpqphp: fix kernel NULL pointer dereference + * V4L/DVB (9300): pvrusb2: Fix deadlock problem + * Linux 2.6.27.4 + -LP: #294155 + + -- Tim Gardner Tue, 04 Nov 2008 12:16:07 -0700 + +linux (2.6.27-7.16) intrepid-security; urgency=low + + [ Tim Gardner ] + + * ndiswrapper remote buffer overflows on long ESSIDs (CVE 2008-4395) + - LP: #275860 + + [ Upstream Kernel Changes ] + + * ext[234]: Avoid printk floods in the face of directory corruption + (CVE-2008-3528) + + -- Tim Gardner Mon, 03 Nov 2008 13:34:42 -0700 + +linux (2.6.27-7.15) intrepid-security; urgency=low + + [ Upstream Kernel Changes ] + + * tcp: Restore ordering of TCP options for the sake of inter-operability + - LP: #264019 + + -- Tim Gardner Mon, 27 Oct 2008 19:28:06 -0600 + +linux (2.6.27-7.14) intrepid; urgency=low + + [ Tim Gardner ] + + * Disable ath5k in 2.6.27 + - LP: #288148 + + -- Tim Gardner Thu, 23 Oct 2008 07:40:43 -0600 + +linux (2.6.27-7.13) intrepid; urgency=low + + [ Stefan Bader ] + + * gfs1: GFS1 can't create more than 4kb file + + [ Tim Gardner ] + + * Revert "SAUCE: x86: Reserve FIRST_DEVICE_VECTOR in used_vectors + bitmap.". Use upstream commit to avoid future conflicts. + * Revert "STABLE queue: mac80211: fix two issues in debugfs". + Use upstream commit to avoid future conflicts. + * Revert "x86, early_ioremap: fix fencepost error" + Use upstream commit to avoid future conflicts. + + [ Upstream Kernel Changes ] + + * sched_rt.c: resch needed in rt_rq_enqueue() for the root rt_rq + * x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + * mac80211: fix two issues in debugfs + * Fix barrier fail detection in XFS + * tty: Termios locking - sort out real_tty confusions and lock reads + * CIFS: make sure we have the right resume info before calling + CIFSFindNext + * rfkill: update LEDs for all state changes + * libertas: clear current command on card removal + * b43legacy: Fix failure in rate-adjustment mechanism + * x86, early_ioremap: fix fencepost error + * x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC + * x86: improve UP kernel when CPU-hotplug and SMP is enabled + * sky2: Fix WOL regression + * netdrvr: atl1e: Don't take the mdio_lock in atl1e_probe + * Linux 2.6.27.2 + + [ Amit Kucheria ] + + * Ubuntu: agp: Fix stolen memory counting on G4X. + -LP: 285572 + + [ Scott Remnant ] + + * add MODULE_ALIAS to load ipmi_devintf with ipmi_si + + -- Tim Gardner Sun, 19 Oct 2008 10:06:21 -0600 + +linux (2.6.27-7.12) intrepid; urgency=low + + [ Chuck Short ] + + * xen: Add xen modules to virtual flavours. + + [ Mario Limonciello ] + + * SAUCE: Add back in lost commit for Apple BT Wireless Keyboard + - LP: #162083 + + [ Tim Gardner ] + + * Remove depmod created files from packages. + - LP: #250511 + * Changed default TCP congestion algorithm to 'cubic' (again) + - LP: #278801 + * Update configs for 'disable CONFIG_DYNAMIC_FTRACE' + - LP: #263555 + + [ Upstream Kernel Changes ] + + * x86: register a platform RTC device if PNP doesn't describe it + * disable CONFIG_DYNAMIC_FTRACE due to possible memory corruption on + module unload + + -- Tim Gardner Fri, 17 Oct 2008 11:25:39 -0600 + +linux (2.6.27-7.11) intrepid; urgency=low + + [ Amit Kucheria ] + + * STABLE queue: mac80211: fix two issues in debugfs + - LP: #275227 + * SAUCE: Adds support for COMPAL JHL90 webcam + + [ Ben Collins ] + + * SAUCE: (no-up) x86: Quiet "Kernel alive" messages + - LP: #39985 + * SAUCE: (no-up) Modularize vesafb + * build/config: Enable vesafb module + * build: Switch to vesafb as preferred. + + [ Leann Ogasawara ] + + * Add Dell Dimension 9200 reboot quirk + - LP: #271370 + + [ Michael Haas ] + + * SAUCE: Revert aufs changes from AppArmor merge + + [ Tim Gardner ] + + * fix virtio udeb layout + - LP: #257739 + * Enabled CONFIG_EXT4DEV_FS=m + * Changed default TCP congestion algorithm to 'cubic' + - LP: #278801 + * SAUCE: ipw2200: change default policy for auto-associate + - LP: #264104 + + [ Upstream Kernel Changes ] + + * x86, early_ioremap: fix fencepost error + - LP: #263543 + + -- Tim Gardner Sat, 11 Oct 2008 08:07:42 -0600 + +linux (2.6.27-7.10) intrepid; urgency=low + + [ Alexey Starikovskiy ] + + * SAUCE: ACPI: EC: do transaction from interrupt context + - LP: #277802 + + [ Ben Collins ] + + * build/d-i: Change virtio-modules udeb to prio standard + + [ Colin Ian King ] + + * SAUCE: Blacklist IBM 2656 in serio/i8042 + - LP: #21558 + + [ Henrik Rydberg ] + + * Revert "SAUCE: applesmc: Add MacBookAir" + * SAUCE: [PATCH 1/5] hwmon: applesmc: Specified number of bytes to read + should match actual + * SAUCE: [PATCH 2/5] hwmon: applesmc: Fix the 'wait status failed: c != + 8' problem + * SAUCE: [PATCH 3/5] hwmon: applesmc: Prolong status wait + * SAUCE: [PATCH 4/5] hwmon: applesmc: Allow for variable ALV0 and ALV1 + package length + * SAUCE: [PATCH 5/5] hwmon: applesmc: Add support for Macbook Air + * SAUCE: hwmon: applesmc: Add support for Macbook Pro 4 + * SAUCE: hwmon: applesmc: Add support for Macbook Pro 3 + * SAUCE: hwmon: applesmc: Lighter wait mechanism, drastic improvement + + [ Leann Ogasawara ] + + * Add automatic model setting for Samsung Q45 + - LP: #200210 + + [ Tim Gardner ] + + * SAUCE: Correctly blacklist Thinkpad r40e in ACPI + - LP: #278794 + * SAUCE: Update Wacom tablet driver to 1.49 + - LP: #260675 + * SAUCE: ALPS touchpad for Dell Latitude E6500/E6400 + - LP: #270643 + * SAUCE: Fix Wacom tablet 1.49 porting errors + * SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit controller + * SAUCE: Fix Oops in wlan_setup + - LP: #263309 + + [ Upstream Kernel Changes ] + + * ath9k: fix oops on trying to hold the wrong spinlock + * [Bluetooth] Fix double frees on error paths of btusb and bpa10x drivers + * [Bluetooth] Add reset quirk for new Targus and Belkin dongles + * [Bluetooth] Add reset quirk for A-Link BlueUSB21 dongle + * Revert "ax25: Fix std timer socket destroy handling." + * ax25: Quick fix for making sure unaccepted sockets get destroyed. + * netrom: Fix sock_orphan() use in nr_release + * Revert "V4L/DVB (8904): cx88: add missing unlock_kernel" + * SLOB: fix bogus ksize calculation + * net: only invoke dev->change_rx_flags when device is UP + * tcp: Fix possible double-ack w/ user dma + * net: Fix netdev_run_todo dead-lock + * tcp: Fix tcp_hybla zero congestion window growth with small rho and large cwnd. + * [MIPS] Sibyte: Register PIO PATA device only for Swarm and Litte Sur + * eeepc-laptop: Fix hwmon interface + * hwmon: (it87) Prevent power-off on Shuttle SN68PT + * hwmon: Define sysfs interface for energy consumption register + * hwmon: (adt7473) Fix some bogosity in documentation file + * hwmon: (abituguru3) Enable reading from AUX3 fan on Abit AT8 32X + * hwmon: (abituguru3) Enable DMI probing feature on Abit AT8 32X + * [CPUFREQ] correct broken links and email addresses + * SLOB: fix bogus ksize calculation fix + * Don't allow splice() to files opened with O_APPEND + * Linux 2.6.27 + + -- Tim Gardner Wed, 08 Oct 2008 21:19:34 -0600 + +linux (2.6.27-6.9) intrepid; urgency=low + + [ Kees Cook ] + + * SAUCE: AppArmor: update to upstream subversion r1302 + - LP: #269921 + + [ Stefan Bader ] + + * Update configuration files to be compliant to desktop specs + - LP: #279019 + + [ Tim Gardner ] + + * Add support in e1000e for a couple of ICH10 PCI IDs + * Enable CONFIG_INPUT_PCSPKR=m + - LP: #275453 + + [ Upstream Kernel Changes ] + + * V4L/DVB (8559a): Fix a merge conflict at gspca/sonixb + * V4L/DVB (8789): wm8739: remove wrong kfree + * V4L/DVB (8883): w9968cf: Fix order of usb_alloc_urb validation + * V4L/DVB (8884): em28xx-audio: fix memory leak + * V4L/DVB (8885): cpia2_usb: fix memory leak + * V4L/DVB (8886): ov511: fix memory leak + * V4L/DVB (8887): gspca: fix memory leak + * V4L/DVB (8892): pvrusb2: Handle USB ID 2040:2950 same as 2040:2900 + * V4L/DVB (8904): cx88: add missing unlock_kernel + * V4L/DVB (8905): ov511: fix exposure sysfs attribute bug + * V4L/DVB (8909): gspca: PAC 7302 webcam 093a:262a added. + * hrtimer: migrate pending list on cpu offline + * hrtimer: fix migration of CB_IRQSAFE_NO_SOFTIRQ hrtimers + * hrtimer: mark migration state + * hrtimer: prevent migration of per CPU hrtimers + * [IA64] Put the space for cpu0 per-cpu area into .data section + * powerpc: Fix PCI in Holly device tree + * powerpc: Fix failure to shutdown with CPU hotplug + * mfd: Fix Kconfig accroding to the new gpiolib symbols + * mfd: Fix asic3 compilation + * x86: fix typo in enable_mtrr_cleanup early parameter + * ipsec: Fix pskb_expand_head corruption in xfrm_state_check_space + * iucv: Fix mismerge again. + * ALSA: ASoC: Fix cs4270 error path + * ALSA: hda - Fix model for Dell Inspiron 1525 + * sctp: Fix kernel panic while process protocol violation parameter + * x86: Fix broken LDT access in VMI + * x86, vmi: fix broken LDT access + * tcp: Fix NULL dereference in tcp_4_send_ack() + * ipv6: NULL pointer dereferrence in tcp_v6_send_ack + * XFRM,IPv6: initialize ip6_dst_blackhole_ops.kmem_cachep + * af_key: Free dumping state on socket close + * dm: always allow one page in dm_merge_bvec + * dm: cope with access beyond end of device in dm_merge_bvec + * dm mpath: add missing path switching locking + * MN10300: Fix IRQ handling + * pxa2xx_spi: fix build breakage + * e1000e: write protect ICHx NVM to prevent malicious write/erase + * powerpc: Fix boot hang regression on MPC8544DS + * ASoC: Set correct name for WM8753 rec mixer output + * ALSA: snd-powermac: mixers for PowerMac G4 AGP + * ALSA: snd-powermac: HP detection for 1st iMac G3 SL + * fbcon: fix monochrome color value calculation + * inotify: fix lock ordering wrt do_page_fault's mmap_sem + * braille_console: only register notifiers when the braille console is used + * fix error-path NULL deref in alloc_posix_timer() + * memory hotplug: missing zone->lock in test_pages_isolated() + * mm: tiny-shmem nommu fix + * mm: handle initialising compound pages at orders greater than MAX_ORDER + * e1000e: reset swflag after resetting hardware + * e1000e: do not ever sleep in interrupt context + * e1000e: remove phy read from inside spinlock + * e1000e: drop stats lock + * e1000e: debug contention on NVM SWFLAG + * e1000e: update version from k4 to k6 + * Check mapped ranges on sysfs resource files + * e1000e: Fix incorrect debug warning + * [MIPS] Build fix: Fix irq flags type + * [MIPS] SMTC: Build fix: Fix filename in Makefile + * [MIPS] SMTC: Fix holes in SMTC and FPU affinity support. + * [MIPS] SMTC: Close tiny holes in the SMTC IPI replay system. + * [MIPS] SMTC: Fix SMTC dyntick support. + * [S390] nohz: Fix __udelay. + * [S390] qdio: prevent stack clobber + * Fix init/main.c to use regular printk with '%pF' for initcall fn + * x86 setup: correct segfault in generation of 32-bit reloc kernel + * selinux: Fix an uninitialized variable BUG/panic in selinux_secattr_to_sid() + * rtc: fix kernel panic on second use of SIGIO nofitication + * fbdev: fix recursive notifier and locking when fbdev console is blanked + * orion_spi: fix handling of default transfer speed + * include/linux/stacktrace.h: declare struct task_struct + * cpusets: remove pj from cpuset maintainers + * MAINTAINERS: add mailing list for man-pages + * SubmitChecklist: interfaces changes should CC linux-api@ + * Documentation/HOWTO: info about interface changes should CC linux-api@vger + * dw_dmac: fix copy/paste bug in tasklet + * leds-fsg: change order of initialization and deinitialization + * leds-pca955x: add proper error handling and fix bogus memory handling + * ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again) + * clockevents: check broadcast tick device not the clock events device + * V4L/DVB (8919): cx18: Fix tuner audio input for Compro H900 cards + * V4L/DVB (8926): gspca: Bad fix of leak memory (changeset 43d2ead315b1). + * V4L/DVB (8933): gspca: Disable light frquency for zc3xx cs2102 Kokom. + * V4L/DVB (8935): em28xx-cards: Remove duplicate entry (EM2800_BOARD_KWORLD_USB2800) + * V4L/DVB (8955): bttv: Prevent NULL pointer dereference in radio_open + * V4L/DVB (8957): zr36067: Restore the default pixel format + * V4L/DVB (8958): zr36067: Return proper bytes-per-line value + * V4L/DVB (8960): drivers/media/video/cafe_ccic.c needs mm.h + * V4L/DVB (8961): zr36067: Fix RGBR pixel format + * V4L/DVB (8963): s2255drv field count fix + * V4L/DVB (8967): Use correct XC3028L firmware for AMD ATI TV Wonder 600 + * V4L/DVB (8978): sms1xxx: fix product name for Hauppauge WinTV MiniStick + * V4L/DVB (8979): sms1xxx: Add new USB product ID for Hauppauge WinTV MiniStick + * V4L/DVB (9029): Fix deadlock in demux code + * V4L/DVB (9037): Fix support for Hauppauge Nova-S SE + * V4L/DVB (9043): S5H1420: Fix size of shadow-array to avoid overflow + * V4L/DVB (9053): fix buffer overflow in uvc-video + * V4L/DVB (9075): gspca: Bad check of returned status in i2c_read() spca561. + * V4L/DVB (9080): gspca: Add a delay after writing to the sonixj sensors. + * V4L/DVB (9092): gspca: Bad init values for sonixj ov7660. + * V4L/DVB (9099): em28xx: Add detection for K-WORLD DVB-T 310U + * V4L/DVB (9103): em28xx: HVR-900 B3C0 - fix audio clicking issue + * x86: gart iommu have direct mapping when agp is present too + * ide-cd: temporary tray close fix + * ide-dma: fix ide_build_dmatable() for TRM290 + * IDE: Fix platform device registration in Swarm IDE driver (v2) + * ide-cd: Optiarc DVD RW AD-7200A does play audio + * ide: workaround for bogus gcc warning in ide_sysfs_register_port() + * [MIPS] Fix CMP Kconfig configuration and mark as broken. + * [MIPS] IP27: Fix build errors if CONFIG_MAPPED_KERNEL=y + * x86 ACPI: Blacklist two HP machines with buggy BIOSes + * kgdb, x86: Avoid invoking kgdb_nmicallback twice per NMI + * kgdb: call touch_softlockup_watchdog on resume + * atmel-mci: Initialize BLKR before sending data transfer command + * Marker depmod fix core kernel list + * Linux 2.6.27-rc9 + + -- Tim Gardner Sun, 05 Oct 2008 21:27:49 -0600 + +linux (2.6.27-5.8) intrepid; urgency=low + + [ Amit Kucheria ] + + * Update AUFS-related Kconfig + - LP: #264048 + + [ Michael Haas ] + + * add proper aufs source tree from 20080922 + * Fix AUFS compilation in vfsub.c + * Add splice-2.6.23.patch from AUFS to export a symbol needed by AUFS + * Add put_filp.patch from AUFS to export a symbol needed by AUFS + * apply (modified) lhash.patch from AUFS to export __lookup_hash() + * Add deny_write_access.patch from AUFS - export deny_write_access + * Add sec_perm-2.6.24.patch from AUFS - export security_inode_permission + * make sure TMPFS_MAGIC is defined in AUFS Makefile + + [ Tim Gardner ] + + * Enabled CONFIG_IPWIRELESS + - LP: #274748 + * Enabled CONFIG_E1000E, disabled CONFIG_E1000E_NEW + This takes advantage of the upstream NVM protection fix in + commit 4a7703582836f55a1cbad0e2c1c6ebbee3f9b3a7. + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + * [SCSI] qla2xxx: Defer enablement of RISC interrupts until ISP + initialization completes. + * PCI: Fix pcie_aspm=force + * PCI: fix compiler warnings in pci_get_subsys() + * UBIFS: create the name of the background thread in every case + * UBIFS: TNC / GC race fixes + * UBIFS: remove incorrect assert + * UBIFS: fix printk format warnings + * AMD IOMMU: set iommu sunc flag after command queuing + * AMD IOMMU: protect completion wait loop with iommu lock + * sparc64: Fix disappearing PCI devices on e3500. + * x86, oprofile: BUG scheduling while atomic + * ALSA: ASoC: Fix at32-pcm build breakage with PM enabled + * ath9k: connectivity is lost after Group rekeying is done + * wireless: zd1211rw: add device ID fix wifi dongle "trust nw-3100" + * [IA64] Ski simulator doesn't need check_sal_cache_flush + * [IA64] kexec fails on systems with blocks of uncached memory + * ath9k: Fix IRQ nobody cared issue with ath9k + * [Bluetooth] Fix I/O errors on MacBooks with Broadcom chips + * [Bluetooth] Fix wrong URB handling of btusb driver + * [Bluetooth] Fix USB disconnect handling of btusb driver + * sparc64: Fix missing devices due to PCI bridge test in + of_create_pci_dev(). + * [WATCHDOG] ibmasr: remove unnecessary spin_unlock() + * [WATCHDOG] wdt285: fix sparse warnings + * [WATCHDOG] unlocked_ioctl changes + * x86: fix 27-rc crash on vsmp due to paravirt during module load + * sched: fix init_hrtick() section mismatch warning + * clockevents: prevent cpu online to interfere with nohz + * x86: prevent stale state of c1e_mask across CPU offline/online + * clockevents: prevent stale tick_next_period for onlining CPUs + * clockevents: check broadcast device not tick device + * clockevents: prevent mode mismatch on cpu online + * x86: prevent C-states hang on AMD C1E enabled machines + * x86: c1e_idle: don't mark TSC unstable if CPU has invariant TSC + * timers: fix build error in !oneshot case + * ALSA: ASoC: maintainers - update email address for Liam Girdwood + * ibmasr: remove unnecessary spin_unlock() + * smb.h: do not include linux/time.h in userspace + * kernel-doc: allow structs whose members are all private + * kexec: fix segmentation fault in kimage_add_entry + * Documentation/DMA-mapping.txt: update for pci_dma_mapping_error() + changes + * sys_paccept: disable paccept() until API design is resolved + * mm: tiny-shmem fix lock ordering: mmap_sem vs i_mutex + * Documentation/sysctl/kernel.txt: fix softlockup_thresh description + * memcg: check under limit at shrink_usage + * atmel_serial: update the powersave handler to match serial core + * [SCSI] Fix hang with split requests + * USB Storage: Sierra: Non-configurable TRU-Install + * USB Serial: Sierra: Device addition & version rev + * USB: ehci: fix some ehci hangs and crashes + * USB: Fix the Nokia 6300 storage-mode. + * USB: Correct Sierra Wireless USB EVDO Modem Device ID + * USB: fix hcd interrupt disabling + * USB: update of Documentation/usb/anchors.txt + * usb gadget: fix omap_udc DMA regression + * USB: Fixing Nokia 3310c in storage mode + * usb: musb: fix include path + * USB: fix EHCI periodic transfers + * usb-serial: Add Siemens EF81 to PL-2303 hack triggers + * USB: SERIAL CP2101 add device IDs + * USB: unusual_devs addition for RockChip MP3 player + * USB: fsl_usb2_udc: fix VDBG() format string + * usb serial: ti_usb_3410_5052 obviously broken by firmware changes + * USB: ftdi_sio: Add 0x5050/0x0900 USB IDs (Papouch Quido USB 4/4) + * USB: serial: add ZTE CDMA Tech id to option driver + * USB Serial: Sierra: Add MC8785 VID/PID + * USB: drivers/usb/musb/: disable it on SuperH + * usb: ftdi_sio: add support for Domintell devices + * usb: unusual devs patch for Nokia 5310 Music Xpress + * USB: revert recovery from transient errors + * [MIPS] au1000: Fix gpio direction + * [MIPS] Fixe the definition of PTRS_PER_PGD + * x86: prevent stale state of c1e_mask across CPU offline/online, fix + * x86: disable apm on the olpc + * i2c-powermac: Fix section for probe and remove functions + * i2c-dev: Return correct error code on class_create() failure + * i2c: Fix mailing lists in two MAINTAINERS entries + * ath9k: disable MIB interrupts to fix interrupt storm + * 9p: implement proper trans module refcounting and unregistration + * 9p-trans_fd: fix trans_fd::p9_conn_destroy() + * 9p-trans_fd: clean up p9_conn_create() + * 9p-trans_fd: don't do fs segment mangling in p9_fd_poll() + * 9p-trans_fd: fix and clean up module init/exit paths + * 9p: introduce missing kfree + * 9p: use an IS_ERR test rather than a NULL test + * 9p: fix put_data error handling + * netfilter: ip6t_{hbh,dst}: Rejects not-strict mode on rule insertion + * MN10300: Move asm-arm/cnt32_to_63.h to include/linux/ + * MN10300: Make sched_clock() report time since boot + * ALSA: fix locking in snd_pcm_open*() and snd_rawmidi_open*() + * ALSA: remove unneeded power_mutex lock in snd_pcm_drop + * IPoIB: Fix crash when path record fails after path flush + * [XFS] Fix extent list corruption in xfs_iext_irec_compact_full(). + * [XFS] Remove xfs_iext_irec_compact_full() + * kgdb: could not write to the last of valid memory with kgdb + * kgdb, x86, arm, mips, powerpc: ignore user space single stepping + * kgdb, x86_64: gdb serial has BX and DX reversed + * kgdb, x86_64: fix PS CS SS registers in gdb serial + * kgdboc,tty: Fix tty polling search to use name correctly + * ARM: Delete ARM's own cnt32_to_63.h + * m32r: remove the unused NOHIGHMEM option + * m32r: don't offer CONFIG_ISA + * m32r: export empty_zero_page + * m32r: export __ndelay + * m32r/kernel/: cleanups + * [MIPS] au1000: Make sure GPIO value is zero or one + * [MIPS] IP27: Switch to dynamic interrupt routing avoding panic on + error. + * [MIPS] BCM47xx: Fix build error due to missing PCI functions + * [SSB] Initialise dma_mask for SSB_BUSTYPE_SSB devices + * Swarm: Fix crash due to missing initialization + * ide-tape: fix vendor strings + * ide: note that IDE generic may prevent other drivers from attaching + * cdrom: update ioctl documentation + * [SCSI] qlogicpti: fix sg list traversal error in continuation entries + * sata_nv: reinstate nv_hardreset() for non generic controllers + * scsi: fix fall out of sg-chaining patch in qlogicpti + * ALSA: make the CS4270 driver a new-style I2C driver + * ALSA: ASoC: Fix another cs4270 error path + * Fix NULL pointer dereference in proc_sys_compare + * kconfig: fix silentoldconfig + * kconfig: readd lost change count + * mm owner: fix race between swapoff and exit + * Linux 2.6.27-rc8 + * e1000e: write protect ICHx NVM to prevent malicious write/erase + + -- Amit Kucheria Tue, 30 Sep 2008 18:22:35 +0300 + +linux (2.6.27-4.7) intrepid; urgency=low + + [ Ben Collins ] + + * build/abi: Add gfs1 to perm blacklist + * build/abi: Ignored changes in gfs2 symbols + + [ Fabio M. Di Nitto ] + + * Revert "SAUCE: Export gfs2 symbols required for gfs1 kernel module" + * ubuntu: update GFS Cluster File System + + [ Stefan Bader ] + + * SAUCE: x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + - LP: #276334 + + [ Tim Gardner ] + + * Revert "Disable e1000e until the NVRAM corruption problem is found." + * Add atl1e and atl2 to Debian installer bits + - LP: #273904 + * SAUCE: e1000e: Map NV RAM dynamically only when needed. + - LP: #263555 + + -- Tim Gardner Fri, 26 Sep 2008 20:51:22 -0600 + +linux (2.6.27-4.6) intrepid; urgency=low + + [ Tim Gardner ] + + * Disable e1000e until the NVRAM corruption problem is found. + - LP: #263555 + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + + -- Ben Collins Tue, 23 Sep 2008 09:53:57 -0400 + +linux (2.6.27-4.5) intrepid; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "b43/b43legacy: add RFKILL_STATE_HARD_BLOCKED support" + * udf: Fix lock inversion between iprune_mutex and alloc_mutex (v2) + * udf: Fix error paths in udf_new_inode() + * [SCSI] sd: select CRC_T10DIF only when necessary + * [SCSI] zfcp: Fix request queue locking + * [SCSI] zfcp: Correctly query end flag in gpn_ft response + * [SCSI] zfcp: Simplify ccw notify handler + * [SCSI] zfcp: Fix reference counter for remote ports + * [SCSI] zfcp: channel cannot be detached due to refcount imbalance + * [SCSI] zfcp: Remove duplicated unlikely() macros. + * [SCSI] scsi_dh: make check_sense return ADD_TO_MLQUEUE + * [SCSI] make scsi_check_sense HARDWARE_ERROR return ADD_TO_MLQUEUE on + retry + * [SCSI] fix check of PQ and PDT bits for WLUNs + * pcm037: add rts/cts support for serial port + * i.MX serial: fix init failure + * imx serial: set RXD mux bit on i.MX27 and i.MX31 + * imx serial: fix rts handling for non imx1 based hardware + * mlx4_core: Set RAE and init mtt_sz field in FRMR MPT entries + * udf: add llseek method + * PCI/iommu: blacklist DMAR on Intel G31/G33 chipsets + * PCI: Fix printk warnings in probe.c + * PCI: Fix printk warnings in setup-bus.c + * PCI Hotplug: fakephp: fix deadlock... again + * clockevents: remove WARN_ON which was used to gather information + * ocfs2: Fix a bug in direct IO read. + * arch/x86/kernel/kdebugfs.c: introduce missing kfree + * [IA64] fix compile failure with non modular builds + * [IA64] fix up bte.h + * [IA64] arch/ia64/sn/pci/tioca_provider.c: introduce missing kfree + * PCI: fix pciehp_free_irq() + * [IA64] prevent ia64 from invoking irq handlers on offline CPUs + * ide: Fix pointer arithmetic in hpt3xx driver code (3rd try) + * add deprecated ide-scsi to feature-removal-schedule.txt + * swiotlb: fix back-off path when memory allocation fails + * sparc64: Fix interrupt register calculations on Psycho and Sabre. + * VIDEO_SH_MOBILE_CEU should depend on HAS_DMA + * m68k: Update defconfigs for 2.6.27-rc6 + * sparc32: Fix function signature of of_bus_sbus_get_flags(). + * sched: fix 2.6.27-rc5 couldn't boot on tulsa machine randomly + * sched: fix deadlock in setting scheduler parameter to zero + * KVM: SVM: fix random segfaults with NPT enabled + * KVM: SVM: fix guest global tlb flushes with NPT + * KVM: VMX: Always return old for clear_flush_young() when using EPT + * clocksource, acpi_pm.c: fix check for monotonicity + * [ARM] OMAP: Fix MMC device data + * block: disable sysfs parts of the disk command filter + * ath9k: Assign seq# when mac80211 requests this + * sg: disable interrupts inside sg_copy_buffer + * MN10300: Change the fault handler to check in_atomic() not + in_interrupt() + * [Bluetooth] Fix regression from using default link policy + * netlink: fix overrun in attribute iteration + * x86: fix possible x86_64 and EFI regression + * sparc64: Fix PCI error interrupt registry on PSYCHO. + * sparc: Fix user_regset 'n' field values. + * niu: panic on reset + * PCI: re-add debug prints for unmodified BARs + * [ARM] 5245/1: Fix warning about unused return value in drivers/pcmcia + * [ARM] 5246/1: tosa: add proper clock alias for tc6393xb clock + * [ARM] 5247/1: tosa: SW_EAR_IN support + * [ARM] Fix PCI_DMA_BUS_IS_PHYS for ARM + * ata: duplicate variable sparse warning + * sata_inic162x: enable LED blinking + * [libata] LBA28/LBA48 off-by-one bug in ata.h + * proc: more debugging for "already registered" case + * include/linux/ioport.h: add missing macro argument for devm_release_* + family + * cpuset: avoid changing cpuset's cpus when -errno returned + * cpuset: hotplug documentation fix + * coredump_filter: add description of bit 4 + * bfs: fix Lockdep warning + * mm: ifdef Quicklists in /proc/meminfo + * spi_mpc83xx: fix clockrate calculation for low speed + * spi_mpc83xx: reject invalid transfer sizes + * pxa2xx_spi: chipselect bugfixes + * pxa2xx_spi: dma bugfixes + * mm: mark the correct zone as full when scanning zonelists + * Documentation/ABI: /sys/class/gpio + * MAINTAINERS: fix USB VIDEO CLASS mail list address + * ia64: fix panic during `modprobe -r xpc' + * atmel_lcdfb: disable LCD and DMA engines when suspending + * spi_s3c24xx: fix section warning + * rescan_partitions(): make device capacity errors non-fatal + * memstick: fix MSProHG 8-bit interface mode support + * Add Uwe Kleine-König to .mailmap + * xen: fix for xen guest with mem > 3.7G + * x86/paravirt: Remove duplicate paravirt_pagetable_setup_{start, done}() + * crypto: talitos - Avoid consecutive packets going out with same IV + * slub: fixed uninitialized counter in struct kmem_cache_node + * udp: Fix rcv socket locking + * IB/mlx4: Fix up fast register page list format + * [MIPS] VR41xx: unsigned irq cannot be negative + * x86: completely disable NOPL on 32 bits + * [S390] cio: Fix driver_data handling for ccwgroup devices. + * [S390] cio: fix orb initialization in cio_start_key + * sparc64: Fix OOPS in psycho_pcierr_intr_other(). + * sparc64: Fix SMP bootup with CONFIG_STACK_DEBUG or ftrace. + * RDMA/nes: Fix client side QP destroy + * IPoIB: Fix deadlock on RTNL between bcast join comp and ipoib_stop() + * clockevents: make device shutdown robust + * powerpc: Fix interrupt values for DMA2 in MPC8610 HPCD device tree + * hpplus: fix build regression + * Fix PNP build failure, bugzilla #11276 + * warn: Turn the netdev timeout WARN_ON() into a WARN() + * [XFS] Move memory allocations for log tracing out of the critical path + * [XFS] Fix regression introduced by remount fixup + * [XFS] Prevent direct I/O from mapping extents beyond eof + * [XFS] Fix barrier status change detection. + * [XFS] Prevent lockdep false positives when locking two inodes. + * [XFS] Fix use-after-free with buffers + * [XFS] Don't do I/O beyond eof when unreserving space + * powerpc: Holly board needs dtbImage target + * Fix compile failure with non modular builds + * [ARM] 5249/1: davinci: remove redundant check in davinci_psc_config() + * [ARM] omap: back out 'internal_clock' support + * sctp: set the skb->ip_summed correctly when sending over loopback. + * [ARM] 5255/1: Update jornada ssp to remove build errors/warnings + * sctp: do not enable peer features if we can't do them. + * sctp: Fix oops when INIT-ACK indicates that peer doesn't support AUTH + * bnx2: Promote vector field in bnx2_irq structure from u16 to unsigned + int + * forcedeth: call restore mac addr in nv_shutdown path + * e1000: prevent corruption of EEPROM/NVM + * e100: Use pci_pme_active to clear PME_Status and disable PME# + * md: Don't wait UNINTERRUPTIBLE for other resync to finish + * atstk1000: fix build breakage with BOARD_ATSTK100X_SW2_CUSTOM=y + * avr32: add .gitignore files + * avr32: add generic_find_next_le_bit bit function + * avr32: fix sys_sync_file_range() call convention + * avr32: nmi_enter() without nmi_exit() + * KVM: ia64: 'struct fdesc' build fix + * hwmon: (atxp1) Fix device detection logic + * hwmon: (it87) Fix fan tachometer reading in IT8712F rev 0x7 (I) + * hwmon: (ad7414) Make ad7414_update_device() static + * tmio_mmc: fix compilation with debug enabled + * atmel-mci: debugfs: enable clock before dumping regs + * atmel-mci: Fix memory leak in atmci_regs_show + * atmel-mci: Fix bogus debugfs file size + * atmel-mci: Set MMC_CAP_NEEDS_POLL if no detect_pin + * mmc_block: handle error from mmc_register_driver() + * mmc_test: initialize mmc_test_lock statically + * [MIPS] Fix 64-bit IP checksum code + * [MIPS] SMTC: Clear TIF_FPUBOUND on clone / fork. + * [MIPS] Fix potential latency problem due to non-atomic cpu_wait. + * [MIPS] vmlinux.lds.S: handle .text.* + * MAINTAINERS: Trivial whitespace cleanups + * MAINTAINERS: Various fixes + * Linux 2.6.27-rc7 + + -- Tim Gardner Sun, 21 Sep 2008 21:49:28 -0600 + +linux (2.6.27-3.4) intrepid; urgency=low + + [ Colin Ian King ] + + * SAUCE: fix kernel oops in VirtualBox during paravirt patching + - LP: #246067 + * SAUCE: qc-usb: Enable Logitech QuickCam Messenger + - LP: #209901 + * SAUCE: appleir: Enable driver for new MacBook Pro + - LP: #157919 + + [ Tim Gardner ] + + * Enabled CONFIG_DEBUG_RODATA=y + + [ Upstream Kernel Changes ] + + * Revert "ALSA: hda - Added model selection for iMac 24"" + * Revert "x86: fix HPET regression in 2.6.26 versus 2.6.25, check hpet + against BAR, v3" + * Revert "[ARM] use the new byteorder headers" + * Revert "mac80211: Use IWEVASSOCREQIE instead of IWEVCUSTOM" + * Revert "crypto: camellia - Use kernel-provided bitops, unaligned access + helpers" + * svcrdma: Fix race between svc_rdma_recvfrom thread and the dto_tasklet + * sched, cpuset: rework sched domains and CPU hotplug handling (v4) + * ACPI: Fix now signed module parameter. + * ACPI: Change package length error to warning + * ACPI: Fix now signed module parameter. + * ACPI: Fix typo in "Disable MWAIT via DMI on broken Compal board" + * acpi: add checking for NULL early param + * UBIFS: fix zero-length truncations + * Input: bcm5974 - add maintainer entry + * sh64: re-add the __strnlen_user() prototype + * sh: fix ptrace_64.c:user_disable_single_step() + * PNPACPI: ignore the producer/consumer bit for extended IRQ descriptors + * UBIFS: always read hashed-key nodes under TNC mutex + * UBIFS: allow for racing between GC and TNC + * [CIFS] Fix plaintext authentication + * sparc32: Implement smp_call_function_single(). + * sh: crash kernel resource fix + * sh: fix kexec entry point for crash kernels + * sh: fix platform_resource_setup_memory() section mismatch + * sh: update Migo-R defconfig + * sh: update AP325RXA defconfig + * sh: fix semtimedop syscall + * cifs: fix O_APPEND on directio mounts + * [CIFS] update cifs change log + * [CIFS] Turn off Unicode during session establishment for plaintext + authentication + * ACPI: thinkpad-acpi: wan radio control is not experimental + * sparc: Fix resource flags for PCI children in OF device tree. + * remove blk_register_filter and blk_unregister_filter in gendisk + * ALSA: oxygen: fix distorted output on AK4396-based cards + * ipv6: When we droped a packet, we should return NET_RX_DROP instead of + 0 + * pkt_sched: Fix locking of qdisc_root with qdisc_root_sleeping_lock() + * net: Unbreak userspace usage of linux/mroute.h + * Don't trigger softlockup detector on network fs blocked tasks + * Resource handling: add 'insert_resource_expand_to_fit()' function + * sparc64: setup_valid_addr_bitmap_from_pavail() should be __init + * UBIFS: do not update min_idx_lebs in stafs + * UBIFS: push empty flash hack down + * UBIFS: remove incorrect index space check + * UBIFS: improve statfs reporting + * UBIFS: fix assertion + * UBIFS: add forgotten gc_idx_lebs component + * UBIFS: introduce LEB overhead + * UBIFS: improve statfs reporting even more + * UBIFS: fill f_fsid + * drm/radeon: downgrade debug message from info to debug. + * Remove invalidate_partition call from do_md_stop. + * Fix problem with waiting while holding rcu read lock in md/bitmap.c + * ALSA: hda: Distortion fix for dell_m6_core_init + * ALSA: ASoC: fix pxa2xx-i2s clk_get call + * block: restore original behavior of /proc/partition when there's no + partition + * debugobjects: fix lockdep warning + * avr32: Fix lockup after Java stack underflow in user mode + * avr32: pm_standby low-power ram bug fix + * nfsd: fix compound state allocation error handling + * sunrpc: fix possible overrun on read of /proc/sys/sunrpc/transports + * nfsd: fix buffer overrun decoding NFSv4 acl + * audit: Moved variable declaration to beginning of function + * Fix modules_install on RO nfs-exported trees. + * Remove '#include ' from mm/page_isolation.c + * dabusb_fpga_download(): fix a memory leak + * [MTD] mtdchar.c: Fix regression in MEMGETREGIONINFO ioctl() + * ALSA: hda - Fix ALC663 auto-probe + * ALSA: hda - Add mic-boost controls to ALC662/663 auto configuration + * Un-break printk strings in x86 PCI probing code + * kernel/resource.c: fix new kernel-doc warning + * softlockup: minor cleanup, don't check task->state twice + * fix typo in arch/parisc/hpux/fs.c + * m68k: atari_keyb_init operator precedence fix + * ACPI: Fix typo in "Disable MWAIT via DMI on broken Compal board" + * don't diff generated firmware files + * IDE: compile fix for sff_dma_ops + * IDE: palm_bk3710: fix compile warning for unused variable + * ide: fix hwif_to_node() + * palm_bk3710: improve IDE registration + * ide-disk: remove stale init_idedisk_capacity() documentation + * ide/Kconfig: mark ide-scsi as deprecated + * net/wireless/Kconfig: clarify the description for + CONFIG_WIRELESS_EXT_SYSFS + * iwlwifi: do not use GFP_DMA in iwl_tx_queue_init + * iwlwifi: workaround interrupt handling no some platforms + * iwlwifi: fix apm_stop (wrong bit polarity for FLAG_INIT_DONE) + * iwlwifi: fix 64bit platform firmware loading + * orinoco: Multicast to the specified addresses + * wireless/libertas/if_cs.c: fix memory leaks + * mac80211: Fix debugfs union misuse and pointer corruption + * rt2x00: Compiler warning unmasked by fix of BUILD_BUG_ON + * ath9k: Incorrect key used when group and pairwise ciphers are + different. + * ath9: Fix ath_rx_flush_tid() for IRQs disabled kernel warning message. + * net/xfrm: Use an IS_ERR test rather than a NULL test + * ipv: Re-enable IP when MTU > 68 + * NTFS: update homepage + * mm: make setup_zone_migrate_reserve() aware of overlapping nodes + * VFS: fix dio write returning EIO when try_to_release_page fails + * acer-wmi: remove debugfs entries upon unloading + * mm/bootmem: silence section mismatch warning - + contig_page_data/bootmem_node_data + * MAINTAINERS: add a maintainer for the BCM5974 multitouch driver + * 8250: improve workaround for UARTs that don't re-assert THRE correctly + * mmc: at91_mci: don't use coherent dma buffers + * pid_ns: zap_pid_ns_processes: fix the ->child_reaper changing + * pid_ns: (BUG 11391) change ->child_reaper when init->group_leader exits + * cirrusfb: check_par fixes + * devcgroup: fix race against rmdir() + * mm: show quicklist usage in /proc/meminfo + * mm: size of quicklists shouldn't be proportional to the number of CPUs + * ipc: document the new auto_msgmni proc file + * hp-wmi: update to match current rfkill semantics + * hp-wmi: add proper hotkey support + * tdfxfb: fix SDRAM memory size detection + * tdfxfb: fix frame buffer name overrun + * rtc_time_to_tm: fix signed/unsigned arithmetic + * ibft: fix target info parsing in ibft module + * sysfs: document files in /sys/firmware/sgi_uv/ + * rtc-cmos: wake again from S5 + * pm_qos_requirement might sleep + * drivers/char/random.c: fix a race which can lead to a bogus BUG() + * ipsec: Fix deadlock in xfrm_state management. + * [x86] Fix TSC calibration issues + * tipc: Don't use structure names which easily globally conflict. + * sparc64: Fix IPI call locking. + * [ARM] omap: fix gpio.c build error + * sparc64: Prevent sparc64 from invoking irq handlers on offline CPUs + * powerpc: Fix uninitialised variable in VSX alignment code + * powerpc: Only make kernel text pages of linear mapping executable + * powerpc: Make sure _etext is after all kernel text + * powerpc: Work around gcc's -fno-omit-frame-pointer bug + * powerpc: Fix build error with 64K pages and !hugetlbfs + * powerpc: Fix for getting CPU number in power_save_ppc32_restore() + * UBIFS: amend f_fsid + * net/usb/pegasus: avoid hundreds of diagnostics + * ixgbe: initialize interrupt throttle rate + * pcnet-cs, axnet_cs: add new IDs, remove dup ID with less info + * netxen: Remove workaround for chipset quirk + * Split up PIT part of TSC calibration from native_calibrate_tsc + * iwlwifi: W/A for the TSF correction in IBSS + * iwlwifi: fix hidden ssid discovery in passive channels + * iwlwifi: remove false rxon if rx chain changes + * iwlwifi: fix station mimo power save values + * iwlwifi: fix rx_chain computation + * iwlwifi: fix Tx cmd memory allocation failure handling + * iwlwifi: call apm stop on exit + * iwlwifi: fix STATUS_EXIT_PENDING is not set on pci_remove + * ath9k: Fix TX status reporting + * ath9k: Fix TX control flag use for no ACK and RTS/CTS + * V4L/DVB (8555): au8522: add mechanism to configure IF frequency for vsb + and qam + * V4L/DVB (8556): au0828: add support for Hauppauge Woodbury + * V4L/DVB (8598): au8522: clean up function au8522_set_if + * V4L/DVB (8599): au8522: remove if frequency settings from vsb/qam + modulation tables + * V4L/DVB (8600): au0828: explicitly set 6 MHz IF frequency in + hauppauge_hvr950q_config + * V4L/DVB (8629): v4l2-ioctl: do not try to handle private V4L1 ioctls + * V4L/DVB (8633): ivtv: update ivtv version number + * V4L/DVB (8648): ivtv: improve CC support + * V4L/DVB (8660): gspca: Simplify the scan of URB packets in pac7311. + * V4L/DVB (8661): gspca: Bug in the previous changeset about pac7311. + * V4L/DVB (8663): gspca: Webcam 0c45:6128 added in sonixj. + * V4L/DVB (8664): gspca: The bridge/sensor of the webcam 093a:2621 is a + PAC 7302. + * V4L/DVB (8665): gspca: Fix the 640x480 resolution of the webcam + 093a:2621. + * V4L/DVB (8666): gspca: Bad scanning of frames in pac7311. + * V4L/DVB (8667): gspca: Bad probe of Z-Star/Vimicro webcams with pas106 + sensor. + * V4L/DVB (8668): gspca: Conflict GSPCA / ET61X251 for the webcam + 102c:6251. + * V4L/DVB (8669): gspca: Add white balance control for spca561 rev 012A. + * V4L/DVB (8671): gspca: Remove the unused field 'dev_name' of the device + structure. + * V4L/DVB (8672): gspca: Big rewrite of spca561. + * V4L/DVB (8673): gspca: Bad frame scanning again and bad init in + pac7311. + * V4L/DVB (8674): gspca: Webcam 0c45:612e added in sonixj. + * V4L/DVB (8675): gspca: Pixmap PJPG (Pixart 73xx JPEG) added, generated + by pac7311. + * V4L/DVB (8678): Remove the dead CONFIG_RADIO_MIROPCM20{,_RDS} code + * V4L/DVB (8681): v4l2-ioctl.c: fix warning + * V4L/DVB (8682): V4L: fix return value of register video func + * V4L/DVB (8701): cx18: Add missing lock for when the irq handler + manipulates the queues + * V4L/DVB (8703): gspca: Do controls work for spca561 revision 12a. + * V4L/DVB (8705): gspca: Adjust some control limits in spca561. + * V4L/DVB (8706): Make contrast and brightness work for pac7302. + * V4L/DVB (8707): gspca: Colors, hflip and vflip controls added for + pac7302. + * V4L/DVB (8709): gspca: Fix initialization and controls of sn9x110 - + ov7630. + * V4L/DVB (8710): gspca: Bad color control in sonixj. + * V4L/DVB (8711): gspca: Bad controls and quantization table of pac7311. + * V4L/DVB (8712): gspca: Bad start of sonixj webcams since changeset + a8779025e7e8. + * V4L/DVB (8713): gspca: Bad color control again in sonixj. + * V4L/DVB (8714): gspca: Bad start of sn9c110 and sensor om6802. + * V4L/DVB (8715): gspca: Change the name of some webcam in the gspca doc. + * V4L/DVB (8716): gspca: Bad start of sn9c110 and sensor ov7630. + * V4L/DVB (8717): gspca: Frame buffer too small for small resolutions + (sonixj and t613). + * V4L/DVB (8718): gspca: suspend/resume added. + * V4L/DVB (8719): gspca: Have VIDIOC_QUERYCTRL more compliant to the + spec. + * V4L/DVB (8720): gspca: V4L2_CAP_SENSOR_UPSIDE_DOWN added as a cap for + some webcams. + * V4L/DVB (8722): sms1xxx: fix typo in license header + * V4L/DVB (8726): link tuner before saa7134 + * V4L/DVB (8727): V4L1: make PMS not autoprobe when builtin. + * V4L/DVB (8728): 1-make-pms-not-autoprobe-when-builtin update + * V4L/DVB (8749): Fix error code, when camera is not turned on by sonypi + * V4L/DVB (8750): V4L: check inval in video_register_device_index() + * V4L/DVB (8751): vivi: Fix some issues at vivi register routine + * V4L/DVB (8757): v4l-dvb: fix a bunch of sparse warnings + * V4L/DVB (8769): cx18: Simplify queue flush logic to prevent oops in + cx18_flush_queues() + * V4L/DVB (8778): radio: fix incorrect video_register_device result check + * V4L/DVB (8779): v4l: fix more incorrect video_register_device result + checks + * V4L/DVB (8790): saa7115: call i2c_set_clientdata only when state != + NULL + * V4L/DVB (8803): s5h1409: Enable QAM_AUTO mode + * V4L/DVB (8804): s5h1411: Enable QAM_AUTO mode + * V4L/DVB (8805): Steven Toth email address change + * V4L/DVB (8809): gspca: Revert commit + 9a9335776548d01525141c6e8f0c12e86bbde982 + * V4L/DVB (8810): gspca: Compile error when CONFIG_PM not defined. + * V4L/DVB (8812): gspca: Do pac73xx webcams work. + * V4L/DVB (8813): gspca: Adjust SOF detection for pac73xx. + * V4L/DVB (8814): gspca: Set DISABLED the disabled controls at query + control time. + * V4L/DVB (8815): gspca: Fix problems with disabled controls. + * V4L/DVB (8816): gspca: Set disabled ctrls and fix a register pb with + ovxxxx in sonixb. + * V4L/DVB (8817): gspca: LED and proble changes in sonixb. + * V4L/DVB (8818): gspca: Reinitialize the device on resume. + * V4L/DVB (8819): gspca: Initialize the ov519 at open time and source + cleanup. + * V4L/DVB (8820): gspca: Change initialization and gamma of zc3xx - + pas106. + * V4L/DVB (8822): gspca: Change some subdriver functions for + suspend/resume. + * V4L/DVB (8823): gspca: H and V flips work for ov7670 only in ov519. + * V4L/DVB (8824): gspca: Too much code removed in the suspend/resume + changeset. + * V4L/DVB (8825): gspca: More controls for pac73xx and new webcam + 093a:2624. + * V4L/DVB (8826): gspca: Webcam Labtec 2200 (093a:2626) added in pac7311. + * V4L/DVB (8827): gspca: Stop pac7302 autogain oscillation. + * V4L/DVB (8828): gspca: Set the clock at the end of initialization in + sonixj. + * V4L/DVB (8829): gspca: Have a clean kmalloc-ated buffer for USB + exchanges. + * V4L/DVB (8830): gspca: Move some probe code to the new init function. + * V4L/DVB (8831): gspca: Resolve webcam conflicts between some drivers. + * V4L/DVB (8832): gspca: Bad pixelformat of vc0321 webcams. + * V4L/DVB (8833): gspca: Cleanup the sonixb code. + * V4L/DVB (8834): gspca: Have a bigger buffer for sn9c10x compressed + images. + * V4L/DVB (8835): gspca: Same pixfmt as the sn9c102 driver and raw Bayer + added in sonixb. + * V4L/DVB (8837): dvb: fix I2C adapters name size + * V4L/DVB (8839): dib0700: add comment to identify 35th USB id pair + * V4L/DVB (8840): dib0700: add basic support for Hauppauge Nova-TD-500 + (84xxx) + * V4L/DVB (8842): vivi_release(): fix use-after-free + * V4L/DVB (8843): tda10048_firmware_upload(): fix a memory leak + * V4L/DVB (8844): dabusb_fpga_download(): fix a memory leak + * bnx2x: Accessing un-mapped page + * SELinux: memory leak in security_context_to_sid_core + * x86: add io delay quirk for Presario F700 + * mmap: fix petty bug in anonymous shared mmap offset handling + * x86: Change warning message in TSC calibration. + * PCI: fix pbus_size_mem() resource alignment for CardBus controllers + * [ARM] omap: fix build error in ohci-omap.c + * [ARM] remove unused #include + * ACPI: Make Len Brown the ACPI maintainer again + * fujitsu-laptop: fix regression for P8010 in 2.6.27-rc + * ACPI: Avoid bogus timeout about SMbus check + * acer-wmi: remove debugfs entries upon unloading + * forgotten refcount on sysctl root table + * V4L/DVB (8868): gspca: Support for vga modes with sif sensors in + sonixb. + * V4L/DVB (8869): gspca: Move the Sonix webcams with TAS5110C1B from + sn9c102 to gspca. + * V4L/DVB (8870): gspca: Fix dark room problem with sonixb. + * V4L/DVB (8872): gspca: Bad image format and offset with rev072a of + spca561. + * V4L/DVB (8873): gspca: Bad image offset with rev012a of spca561 and + adjust exposure. + * V4L/DVB (8874): gspca: Adjust hstart for sn9c103/ov7630 and update + usb-id's. + * [ARM] omap: fix virtual vs physical address space confusions + * V4L/DVB (8876): budget: udelay changed to mdelay + * V4L/DVB (8877): b2c2 and bt8xx: udelay to mdelay + * V4L/DVB (8880): PATCH: Fix parents on some webcam drivers + * V4L/DVB (8881): gspca: After 'while (retry--) {...}', retry will be -1 + but not 0. + * powerpc/spufs: Fix multiple get_spu_context() + * powerpc/spufs: Fix race for a free SPU + * Input: bcm5974 - small formatting cleanup + * Input: bcm5974 - improve finger tracking and counting + * Input: bcm5974 - add BTN_TOUCH event for mousedev benefit + * Input: i8042 - make Lenovo 3000 N100 blacklist entry more specific + * sh: resume_kernel fix for kernel oops built with CONFIG_BKL_PREEMPT=y. + * sh64: resume_kernel fix for kernel oops built with + CONFIG_BKL_PREEMPT=y. + * i2c: fix i2c-sh_mobile timing issues + * clockevents: prevent clockevent event_handler ending up handler_noop + * clockevents: prevent endless loop in periodic broadcast handler + * clockevents: enforce reprogram in oneshot setup + * clockevents: prevent multiple init/shutdown + * clockevents: prevent endless loop lockup + * HPET: make minimum reprogramming delta useful + * [MTD] [NAND] tmio_nand: fix base address programming + * Fix conditional export of kvh.h and a.out.h to userspace. + * async_tx: fix the bug in async_tx_run_dependencies + * sched_clock: fix NOHZ interaction + * sched: fix process time monotonicity + * UBIFS: fix division by zero + * UBIFS: make minimum fanout 3 + * [MIPS] Fix data bus error recovery + * [MIPS] Fix WARNING: at kernel/smp.c:290 + * [MIPS] TXx9: Fix txx9_pcode initialization + * [MIPS] TX39xx: Add missing local_flush_icache_range initialization + * [MIPS] Probe initrd header only if explicitly specified + * res_counter: fix off-by-one bug in setting limit + * forcedeth: fix kexec regression + * atmel_lcdfb: fix oops in rmmod when framebuffer fails to register + * tracehook: comment pasto fixes + * drivers/mmc/card/block.c: fix refcount leak in mmc_block_open() + * x86: boot: stub out unimplemented CPU feature words + * x86: add NOPL as a synthetic CPU feature bit + * x86: use X86_FEATURE_NOPL in alternatives + * clockevents: broadcast fixup possible waiters + * x86: HPET fix moronic 32/64bit thinko + * x86: HPET: read back compare register before reading counter + * Fix CONFIG_AC97_BUS dependency + * [ARM] 5241/1: provide ioremap_wc() + * ntp: fix calculation of the next jiffie to trigger RTC sync + * clocksource, acpi_pm.c: use proper read function also in errata mode + * clocksource, acpi_pm.c: check for monotonicity + * x86: delay early cpu initialization until cpuid is done + * x86: move mtrr cpu cap setting early in early_init_xxxx + * sched: arch_reinit_sched_domains() must destroy domains to force + rebuild + * x86, xen: Use native_pte_flags instead of native_pte_val for .pte_flags + * x86: pda_init(): fix memory leak when using CPU hotplug + * x86: cpu_init(): fix memory leak when using CPU hotplug + * powerpc/spufs: Fix possible scheduling of a context to multiple SPEs + * netfilter: nf_conntrack_sip: de-static helper pointers + * netfilter: nf_conntrack_gre: more locking around keymap list + * netfilter: nf_conntrack_gre: nf_ct_gre_keymap_flush() fixlet + * netfilter: nf_conntrack_irc: make sure string is terminated before + calling simple_strtoul + * pkt_sched: Fix qdisc state in net_tx_action() + * powerpc: Fix rare boot build breakage + * ahci, pata_marvell: play nicely together + * sata_mv: add RocketRaid 1720 PCI ID to driver + * ahci: disable PMP for marvell ahcis + * sata_nv: disable hardreset for generic + * libata-sff: kill spurious WARN_ON() in ata_hsm_move() + * pata_sil680: remove duplicate pcim_enable_device + * ahci: RAID mode SATA patch for Intel Ibex Peak DeviceIDs + * [MIPS] IP22: Fix detection of second HPC3 on Challenge S + * xen: fix 2.6.27-rc5 xen balloon driver warnings + * x86: disable static NOPLs on 32 bits + * netns : fix kernel panic in timewait socket destruction + * bridge: don't allow setting hello time to zero + * NFS: Restore missing hunk in NFS mount option parser + * usb: fix null deferences in low level usb serial + * Fix format of MAINTAINERS + * sparc64: Disable timer interrupts in fixup_irqs(). + * [Bluetooth] Fix reference counting during ACL config stage + * [Bluetooth] Enforce correct authentication requirements + * [Bluetooth] Reject L2CAP connections on an insecure ACL link + * [S390] CVE-2008-1514: prevent ptrace padding area read/write in 31-bit + mode + * [S390] cio: Correct cleanup on error. + * [S390] cio: handle ssch() return codes correctly. + * [S390] cio: allow offline processing for disconnected devices + * ipsec: Restore larval states and socket policies in dump + * update Documentation/filesystems/Locking for 2.6.27 changes + * MAINTAINERS: add Atheros maintainer for atlx + * lib: Correct printk %pF to work on all architectures + * x86: fix memmap=exactmap boot argument + * clockevents: remove WARN_ON which was used to gather information + * ipv6: Fix OOPS in ip6_dst_lookup_tail(). + * Linux 2.6.27-rc6 + + -- Ben Collins Tue, 02 Sep 2008 12:45:56 -0400 + +linux (2.6.27-2.3) intrepid; urgency=low + + [ Ben Collins ] + + * build/retag: Make script save .orig of tags for later use + * ubuntu/lirc: Fix device_create call + * build/firmware: Put in-kernel firmware into version specific subdir + - LP: #262115 + * Rebase on linux-2.6 git. + * ABI bump + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: (no-up) Apparmor warning fixes + + [ John Johansen ] + + * SAUCE: (no-up) Proper AppArmor ptrace updates for newer lsm API + + [ Mackenzie Morgan ] + + * SAUCE: Add quirk for ASUS Z37E to make sound audible after resume + - LP: #25896 + + -- Ben Collins Wed, 27 Aug 2008 14:03:05 -0400 + +linux (2.6.27-1.2) intrepid; urgency=low + + [ Amit Kucheria ] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [ Ben Collins ] + + * SAUCE: Lower warning level of some PCI messages + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: (no-up) connector.h: Add idx/val for drbd + * SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache + * SAUCE: drivers: Remove some duplicate device entries in various modules + * SAUCE: (no-up) [AppArmor] merge with upstream subversion r1291 + * SAUCE: apparmor: Update for changes to ptrace lsm hooks + * SAUCE: (no-up) Enable ubuntu extra subdirectory + * SAUCE: applesmc: Add MacBookAir + * SAUCE: (no-up) ACPI: initramfs DSDT override support + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add BOM for iscsitarget + * ubuntu: Add squashfs driver + * SAUCE: (no-up) Check for squashfs superblock in initramfs mounting. + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Added et131x driver + * ubuntu: Add dm-raid4-5 driver + * ubuntu: Add ndiswrapper driver + * ubuntu: Added ram backed compressed swap module (compcache) + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add ov511 and bt-sco drivers + * ubuntu: Add acx, prism2_usb wireless drivers + * ubuntu: Add at76 driver to build + * ubuntu: Add fsam7400 sw kill switch driver + * ubuntu: Added qc-usb driver + * ubuntu: e1000e: Upgraded module to 0.4.1.7 + * ubuntu: Added rfkill drivers + * ubuntu: VIA - Add VIA DRM Chrome9 3D engine + * ubuntu: unionfs: Added v1.4 module from hardy + * ubuntu: Add LIRC driver + * ubuntu: Add GFS driver + * ubuntu: New tlsup driver for toshiba laptops + * Update config files + * build/d-i: Remove obsolete dm modules + + [ Chuck Short ] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + + [ Colin Ian King ] + + * ubuntu: Add dm-loop + * SAUCE: Enable speedstep for sonoma processors. + + [ Dennis Noordsij ] + + * SAUCE: Work around ACPI corruption upon suspend on some Dell machines. + + [ Fabio M. Di Nitto ] + + * SAUCE: Export gfs2 symbols required for gfs1 kernel module + + [ Matthew Garrett ] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + + [ Phillip Lougher ] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [ Stefan Bader ] + + * SAUCE: (no-up) Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: mmc: Increase power_up deleay to fix TI readers + + [ Tim Gardner ] + + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: (no-up) Take care of orinoco_cs overlap with hostap_cs + * ubuntu: Add GNBD driver + + -- Ben Collins Sat, 23 Aug 2008 15:48:35 -0400 + +linux (2.6.27-0.0) intrepid; urgency=low + + * Not uploaded, placeholder for new release + + -- Ben Collins Sat, 23 Aug 2008 15:48:35 -0400 + +linux (2.6.26-5.17) intrepid; urgency=low + + [ Ben Collins ] + + * build/abi: Add tosh_smm symbol to blacklist + + -- Ben Collins Fri, 15 Aug 2008 09:29:34 -0400 + +linux (2.6.26-5.16) intrepid; urgency=low + + [ Ben Collins ] + + * Revert "SAUCE: toshiba_acpi: Rewrote most of the proc entry bits." + * Revert "SAUCE: Update toshiba_acpi.c to version 0.19a" + * build/config: Disable in-kernel toshiba driver(s) + * ubuntu/tlsup: New driver for toshiba laptops + * build/config: Enable TLSUP driver + * SAUCE: e1000e: Fix E1000E_ENABLED logic to check for our E1000E_NEW + driver as well + * ubuntu/e1000e: Remove E1000E_ENABLED option in local config + * build/config: Update configs to have E1000E_ENABLED set + * ubuntu/prism2: Remove duplicate device + + [ Fabio M. Di Nitto ] + + * SAUCE: Export gfs2 symbols required for gfs1 kernel module + + [ Stefan Bader ] + + * SAUCE: x86: HPET rework for SB700 + - LP: #255910 + + [ Tim Gardner ] + + * Add GNBD driver + * Enable GNBD driver + * SAUCE: Add GFS driver + * SAUCE: Enable gfs driver configs + * b43: Linksys WMP54G (BCM4306/3) card in a PCI format has an SPROM + coding + + [ Upstream Kernel Changes ] + + * KVM: x86 emulator: emulate clflush + * USB: quirk PLL power down mode + + -- Ben Collins Mon, 11 Aug 2008 13:19:28 -0400 + +linux (2.6.26-5.15) intrepid; urgency=low + + [ Ben Collins ] + + * Revert "SAUCE: Add blacklist support to fix Belkin bluetooth dongle." + - Superceded by upstream changes. + * build/config: New option enabled for uvcvideo + * build/control: Add Vcs-Git meta data to control file + * SAUCE: toshiba_acpi: Rewrote most of the new code + * abi/perm-blacklist: Add emu10k1 driver to blacklist + + [ Upstream Kernel Changes ] + + * pxamci: trivial fix of DMA alignment register bit clearing + * udplite: Protection against coverage value wrap-around + * ipv6: use timer pending + * ipv6: __KERNEL__ ifdef struct ipv6_devconf + * hdlcdrv: Fix CRC calculation. + * quota: fix possible infinite loop in quota code + * isofs: fix minor filesystem corruption + * KVM: VMX: Fix a wrong usage of vmcs_config + * KVM: SVM: fix suspend/resume support + * KVM: mmu_shrink: kvm_mmu_zap_page requires slots_lock to be held + * KVM: VMX: Add ept_sync_context in flush_tlb + * KVM: x86 emulator: Fix HLT instruction + * KVM: MMU: nuke shadowed pgtable pages and ptes on memslot destruction + * KVM: MMU: Fix potential race setting upper shadow ptes on nonpae hosts + * Patch Upstream: x86 ptrace: fix PTRACE_GETFPXREGS error + * rcu: fix rcu_try_flip_waitack_needed() to prevent grace-period stall + * Fix typos from signal_32/64.h merge + * x86 reboot quirks: add Dell Precision WorkStation T5400 + * USB: fix usb serial pm counter decrement for disconnected interfaces + * x86, suspend, acpi: enter Big Real Mode + * markers: fix duplicate modpost entry + * Fix build on COMPAT platforms when CONFIG_EPOLL is disabled + * proc: fix /proc/*/pagemap some more + * cpusets: fix wrong domain attr updates + * x86: fix crash due to missing debugctlmsr on AMD K6-3 + * ide-cd: fix oops when using growisofs + * rtc-at91rm9200: avoid spurious irqs + * vmlinux.lds: move __attribute__((__cold__)) functions back into final + .text section + * ARM: fix fls() for 64-bit arguments + * tcp: Clear probes_out more aggressively in tcp_ack(). + * sparc64: Fix lockdep issues in LDC protocol layer. + * sparc64: Fix cpufreq notifier registry. + * sparc64: Do not define BIO_VMERGE_BOUNDARY. + * iop-adma: fix platform driver hotplug/coldplug + * myri10ge: do not forget to setup the single slice pointers + * myri10ge: do not use mgp->max_intr_slots before loading the firmware + * ALSA: trident - pause s/pdif output + * V4L: cx18: Upgrade to newer firmware & update documentation + * DVB: dib0700: add support for Hauppauge Nova-TD Stick 52009 + * V4L: uvcvideo: Fix a buffer overflow in format descriptor parsing + * V4L: uvcvideo: Use GFP_NOIO when allocating memory during resume + * V4L: uvcvideo: Don't free URB buffers on suspend + * V4L: uvcvideo: Make input device support optional + * V4L: uvcvideo: Add support for Medion Akoya Mini E1210 integrated + webcam + * V4L: saa7134: Copy tuner data earlier to avoid overwriting manual tuner + type + * V4L: cx23885: Bugfix for concurrent use of /dev/video0 and /dev/video1 + * DVB: cx23885: Ensure PAD_CTRL is always reset to a sensible default + * DVB: cx23885: DVB Transport cards using DVB port VIDB/TS1 did not + stream + * DVB: cx23885: Reallocated the sram to avoid concurrent VIDB/C issues + * DVB: cx23885: SRAM changes for the 885 and 887 silicon parts + * x86: fix kernel_physical_mapping_init() for large x86 systems + * eCryptfs: use page_alloc not kmalloc to get a page of memory + * UML - Fix boot crash + * ixgbe: remove device ID for unsupported device + * mpc52xx_psc_spi: fix block transfer + * tmpfs: fix kernel BUG in shmem_delete_inode + * markers: fix markers read barrier for multiple probes + * VFS: increase pseudo-filesystem block size to PAGE_SIZE + * cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called + already + * b43legacy: Release mutex in error handling code + * ath5k: don't enable MSI, we cannot handle it yet + * Fix off-by-one error in iov_iter_advance() + * Linux 2.6.26.1 + * ftrace: remove unneeded documentation + * romfs_readpage: don't report errors for pages beyond i_size + * netfilter: nf_nat_sip: c= is optional for session + * SCSI: bsg: fix bsg_mutex hang with device removal + * x86: idle process - add checking for NULL early param + * x86: io delay - add checking for NULL early param + * Close race in md_probe + * Kprobe smoke test lockdep warning + * netfilter: xt_time: fix time's time_mt()'s use of do_div() + * linear: correct disk numbering error check + * SCSI: ch: fix ch_remove oops + * NFS: Ensure we zap only the access and acl caches when setting new acls + * jbd: fix race between free buffer and commit transaction + * Input: i8042 - add Intel D845PESV to nopnp list + * Input: i8042 - add Gericom Bellagio to nomux blacklist + * Input: i8042 - add Acer Aspire 1360 to nomux blacklist + * Bluetooth: Signal user-space for HIDP and BNEP socket errors + * Add compat handler for PTRACE_GETSIGINFO + * ALSA: hda - Fix wrong volumes in AD1988 auto-probe mode + * ALSA: hda - Fix DMA position inaccuracy + * ALSA: hda - Add missing Thinkpad Z60m support + * ALSA: emu10k1 - Fix inverted Analog/Digital mixer switch on Audigy2 + * vfs: fix lookup on deleted directory + * Ath5k: fix memory corruption + * Ath5k: kill tasklets on shutdown + * sound: ensure device number is valid in snd_seq_oss_synth_make_info + * Linux 2.6.26.2 + + -- Ben Collins Sun, 03 Aug 2008 13:25:02 -0400 + +linux (2.6.26-5.14) intrepid; urgency=low + + [ Ben Collins ] + + * SAUCE: applesmc: Add MacBookAir + * build: Do not build ddeb unless we are on the buildd + * build: control: Consistency in arch fields. + * SAUCE: Update toshiba_acpi.c to version 0.19a + - LP: #77026 + * build: Added perm blacklist support and per-module support to abi-check + - Blacklist p80211 module from abi checks + * ubuntu/lirc: Get rid of drivers symlink and use real include stuff + + + [ Colin Ian King ] + + * SAUCE: acerhk module - add support for Amilo A1650g keyboard + - LP: #84159 + * SAUCE: rt2x00: Fix OOPS on failed creation of rt2x00lib workqueue + - LP: #249242 + + [ Mario Limonciello ] + + * Add LIRC back in + + [ Tim Gardner ] + + * Makefile race condition can lead to ndiswrapper build failure + - LP: #241547 + * update linux-wlan-ng (prism2_usb) to upstream version 1861 + - LP: #245026 + + [ Upstream Kernel Changes ] + + * Fix typos from signal_32/64.h merge + + -- Ben Collins Fri, 01 Aug 2008 00:05:01 -0400 + +linux (2.6.26-5.13) intrepid; urgency=low + + [ Ben Collins ] + + * build: Make makedumpfile an amd64/i386 only build-dep + * ubuntu/acerhk: Fixup assembly to compile with newer binutils + + -- Ben Collins Sat, 26 Jul 2008 16:41:50 -0400 + +linux (2.6.26-4.12) intrepid; urgency=low + + [ Ben Collins ] + + * e1000e: Upgraded module to 0.4.1.7 upstream. Placed in ubuntu/, + in-kernel driver disabled + * config: Disable e1000e in-kernel, and enable newer driver in ubuntu/ + * rfkill: Update to 1.3 drivers, and move to common location + * ubuntu: Actually link kconfig/kbuild into rfkill subdir + * config: Enable loading dsdt from initramfs + - LP: #246222 + * ubuntu: [compcache] Update to fix crashes in improper BUG() + * build: Create a retag scripts to recover tags from rebases + * build: Updates for dbg pkg + * build: Make sure no empty lines show up in debian/files + * ubuntu: atl1e: Add new driver from 2.6.27-pre-rc1 + - LP: #243894 + * sys_getcwd: Fix some brokeness introduced by AppArmor __d_path + changes + - LP: #251223 + * ubuntu: unionfs: Added v1.4 module from hardy + * build: Add sub-flavour infrastructure, and virtual subflav + + [ Eric Piel ] + + * ACPI: Allow custom DSDT tables to be loaded from initramfs + + [ Kees Cook ] + + * AppArmor: Smack VFS patches + + [ Mario Limonciello ] + + * Work around ACPI corruption upon suspend on some Dell machines. + - LP: #183033 + + [ Tim Gardner ] + + * Export usbhid_modify_dquirk for LBM module bcm5974 + - LP: #250838 + * VIA - Add VIA DRM Chrome9 3D engine + - LP: #251862 + * Define TRUE/FALSE for VIA DRM driver. + + -- Ben Collins Tue, 15 Jul 2008 12:51:39 -0400 + +linux (2.6.26-4.11) intrepid; urgency=low + + [ Ben Collins ] + + * config: Enable bcm5974 driver in all configs + + [ 2.6.26-4.10 ] + + [ Amit Kucheria ] + + * Fix typo in GSPCA Makefile and make it compile + + [ Ben Collins ] + + * ubuntu: Remove UVC driver in favor of in-kernel one (-rc9) + * config: Updates for -rc9 + * ubuntu: Add acx, prism2_usb wireless drivers + * config: Enable prism2_usb and acx drivers. + * ubuntu: Add at76 driver to build + * config: Enable at76_usb driver. + * iscsitarget: Fix prototype for bi_end_io callback. + * acx: Fix section type mismatch warnings + * fsam7400: Add sw kill switch driver + * config: Enable fsam7400 driver + * qc-usb: Added new driver + * config: Enable qc-usb driver + * drbd: Remove built-in connector usage + * drbd: Do not define idx/val for connector here + * connector.h: Add idx/val for drbd + * bcm5974: Added new driver + + [ Kees Cook ] + + * SAUCE: [AppArmor] merge with upstream subversion r1291 + * SAUCE: [AppArmor] fix typo in selinux_inode_link + * SAUCE: [AppArmor] aufs patches + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + - LP: #241749 + + [ Tim Gardner ] + + * SAUCE: Medion Akoya Mini E1210 + + [ Upstream Kernel Changes ] + + * Revert "BAST: Remove old IDE driver" + * ARM: OMAP: DMA: Don't mark channel active in omap_enable_channel_irq + * ARM: OMAP: Correcting the gpmc prefetch control register address + * debugobjects: fix lockdep warning + * [ARM] 5115/1: pxafb: fix ifdef for command line option handling + * [ARM] 5116/1: pxafb: cleanup and fix order of failure handling + * [ARM] 5109/1: Mark rtc sa1100 driver as wakeup source before + registering it + * [ARM] Export dma_sync_sg_for_device() + * fix cgroup-inflicted breakage in block_dev.c + * [patch for 2.6.26 2/4] vfs: utimensat(): be consistent with utime() for + immutable and append-only files + * [patch for 2.6.26 1/4] vfs: utimensat(): ignore tv_sec if tv_nsec == + UTIME_OMIT or UTIME_NOW + * [patch for 2.6.26 3/4] vfs: utimensat(): fix error checking for + {UTIME_NOW,UTIME_OMIT} case + * [patch for 2.6.26 4/4] vfs: utimensat(): fix write access check for + futimens() + * [patch 1/4] vfs: path_{get,put}() cleanups + * [patch 2/4] fs: make struct file arg to d_path const + * [patch 3/4] vfs: fix ERR_PTR abuse in generic_readlink + * [patch 4/4] flock: remove unused fields from file_lock_operations + * [patch 3/3] vfs: make d_path() consistent across mount operations + * [patch 1/3] vfs: dcache sparse fixes + * [patch 2/3] vfs: dcache cleanups + * udf: Fix regression in UDF anchor block detection + * [SCSI] ses: Fix timeout + * netfilter: ip6table_mangle: don't reroute in LOCAL_IN + * [SCSI] esp: Fix OOPS in esp_reset_cleanup(). + * kernel/audit.c: nlh->nlmsg_type is gotten more than once + * audit: fix kernel-doc parameter notation + * remove useless argument type in audit_filter_user() + * Blackfin arch: fix bug - kernel boot fails when Spinlock and rw-lock + debugging enabled + * Blackfin arch: fix up section mismatch warning + * mac80211: implement EU regulatory domain + * b43: Do not return TX_BUSY from op_tx + * b43legacy: Do not return TX_BUSY from op_tx + * b43: Fix possible MMIO access while device is down + * b43legacy: Fix possible NULL pointer dereference in DMA code + * rt2x00: Fix unbalanced mutex locking + * iwlwifi: improve scanning band selection management + * [SCSI] esp: tidy up target reference counting + * [ARM] 5117/1: pxafb: fix __devinit/exit annotations + * thermal: Create CONFIG_THERMAL_HWMON=n + * ACPI: don't walk tables if ACPI was disabled + * dock: bay: Don't call acpi_walk_namespace() when ACPI is disabled. + * x86: shift bits the right way in native_read_tscp + * x86: section/warning fixes + * V4L/DVB (8004): Fix INPUT dependency at budget-ci + * V4L/DVB (8005): Fix OOPS if frontend is null + * V4L/DVB (8007): cx18/cx25840: the S-Video LUMA input can use all + In1-In8 inputs + * V4L/DVB (8008): cx18: remove duplicate audio and video input enums + * V4L/DVB (8010): em28xx: Properly register extensions for already + attached devices + * V4L/DVB (8011): em28xx: enable DVB for HVR-900 + * V4L/DVB (8012): gl861: sleep a little to avoid I2C errors + * V4L/DVB (8013): gl861: remove useless identify_state + * V4L/DVB (8015): gl861: replace non critical msleep(0) with msleep(1) to + be on the safe side + * V4L/DVB (8017): Ensure em28xx extensions only get run against devs that + support them + * V4L/DVB (8018): Add em2860 chip ID + * V4L/DVB (8020): Fix callbacks functions of saa7134_empress + * V4L/DVB (8022): saa7134: fix race between opening and closing the + device + * V4L/DVB (8026): Avoids an OOPS if dev struct can't be successfully + recovered + * V4L/DVB (8027): saa7134: Avermedia A700: only s-video and composite + input are working + * V4L/DVB (8028): Improve error messages for tda1004x attach + * V4L/DVB (8029): Improve error message at tda1004x_attach + * V4L/DVB (8034): tda18271: fix IF notch frequency handling + * V4L/DVB (8035): tda18271: dont touch EB14 if rf_cal lookup is out of + range + * V4L/DVB (8036): tda18271: toggle rf agc speed mode on TDA18271HD/C2 + only + * V4L/DVB (8037): tda18271: ensure that the thermometer is off during + channel configuration + * V4L/DVB (8039): pxa-camera: fix platform_get_irq() error handling. + * V4L/DVB (8040): soc-camera: remove soc_camera_host_class class + * V4L/DVB (8042): DVB-USB UMT-010 channel scan oops + * V4L/DVB (8043): au0828: add support for additional USB device id's + * V4L/DVB (8044): au8522: tuning optimizations + * V4L/DVB (8048): saa7134: Fix entries for Avermedia A16d and Avermedia + E506 + * V4L/DVB (8061): cx18: only select tuner / frontend modules if + !DVB_FE_CUSTOMISE + * V4L/DVB (8063): cx18: Fix unintended auto configurations in + cx18-av-core + * V4L/DVB (8066): cx18: Fix audio mux input definitions for HVR-1600 Line + In 2 and FM radio + * V4L/DVB (8067): cx18: Fix firmware load for case when digital capture + happens first + * V4L/DVB (8068): cx18: Add I2C slave reset via GPIO upon initialization + * V4L/DVB (8069): cx18: Fix S-Video and Compsite inputs for the Yuan + MPC718 and enable card entry + * V4L/DVB (8071): tda10023: Fix possible kernel oops during + initialisation + * V4L/DVB (8073): av7110: Catch another type of ARM crash + * V4L/DVB (8074): av7110: OSD transfers should not be interrupted + * V4L/DVB (8075): stv0299: Uncorrected block count and bit error rate + fixed + * V4L/DVB (8092): videodev: simplify and fix standard enumeration + * V4L/DVB (8096): au8522: prevent false-positive lock status + * V4L/DVB (8097): xc5000: check device hardware state to determine if + firmware download is needed + * V4L/DVB (8100): V4L/vivi: fix possible memory leak in vivi_fillbuff + * V4L/DVB (8108): Fix open/close race in saa7134 + * s2io: fix documentation about intr_type + * tc35815: Mark carrier-off before starting PHY + * tc35815: Fix receiver hangup on Rx FIFO overflow + * ixgbe: fix EEH recovery during reset on PPC + * igb: fix EEH recovery during reset on PPC + * e1000e: fix EEH recovery during reset on PPC + * pcnet_cs, axnet_cs: clear bogus interrupt before request_irq + * drivers/net/r6040.c: Eliminate double sizeof + * ipg: fix jumbo frame compilation + * ipg: use NULL, not zero, for pointers + * [netdrvr] 3c59x: remove irqs_disabled warning from local_bh_enable + * [netdrvr] netxen: fix netxen_pci_tbl[] breakage + * e100: Do pci_dma_sync after skb_alloc for proper operation on ixp4xx + * e1000: only enable TSO6 via ethtool when using correct hardware + * [netdrvr] Fix IOMMU overflow checking in s2io.c + * qla3xxx: Hold RTNL while calling dev_close() + * Hold RTNL while calling dev_close() + * sata_uli: hardreset is broken + * rt2x00: Fix lock dependency errror + * prism: islpci_eth.c endianness fix + * mac80211: fix an oops in several failure paths in key allocation + * firewire: fw-sbp2: fix parsing of logical unit directories + * kbuild: fix a.out.h export to userspace with O= build. + * Ensure interrupted recovery completed properly (v1 metadata plus + bitmap) + * Don't acknowlege that stripe-expand is complete until it really is. + * Fix error paths if md_probe fails. + * hamradio: remove unused variable + * tcp: calculate tcp_mem based on low memory instead of all memory + * tcp: fix for splice receive when used with software LRO + * af_unix: fix 'poll for write'/connected DGRAM sockets + * netdevice: Fix typo of dev_unicast_add() comment + * pkt_sched: ERR_PTR() ususally encodes an negative errno, not positive. + * pkt_sched: Remove CONFIG_NET_SCH_RR + * include/linux/netdevice.h: don't export MAX_HEADER to userspace + * tcp: /proc/net/tcp rto,ato values not scaled properly (v2) + * netlink: Fix some doc comments in net/netlink/attr.c + * CONNECTOR: add a proc entry to list connectors + * inet fragments: fix race between inet_frag_find and + inet_frag_secret_rebuild + * net/inet_lro: remove setting skb->ip_summed when not LRO-able + * netlabel: Fix a problem when dumping the default IPv6 static labels + * ipv6 route: Convert rt6_device_match() to use RT6_LOOKUP_F_xxx flags. + * sched: fix cpu hotplug + * Fix and clean top .gitignore + * x86: fix cpu hotplug crash + * ptrace GET/SET FPXREGS broken + * Input: add KEY_MEDIA_REPEAT definition + * Input: fix locking in force-feedback core + * [ARM] 5131/1: Annotate platform_secondary_init with trace_hardirqs_off + * ide: fix /proc/ide/ide?/mate reporting + * netfilter: nf_conntrack_tcp: fixing to check the lower bound of valid + ACK + * textsearch: fix Boyer-Moore text search bug + * hostap: don't report useless WDS frames by default + * hostap: fix sparse warnings + * mac80211: don't accept WEP keys other than WEP40 and WEP104 + * V4L/DVB (8145a): USB Video Class driver + * [IA64] Bugfix for system with 32 cpus + * [IA64] export account_system_vtime + * sched: fix divide error when trying to configure rt_period to zero + * x86: fix NODES_SHIFT Kconfig range + * block: Fix the starving writes bug in the anticipatory IO scheduler + * Properly notify block layer of sync writes + * rcu: fix hotplug vs rcu race + * I2C: S3C2410: Check ACK on byte transmission + * I2C: S3C2410: Fixup error codes returned rom a transfer. + * I2C: S3C2410: Add MODULE_ALIAS() for s3c2440 device. + * PCI: Restrict VPD read permission to root + * powerpc/bootwrapper: update for initrd with simpleImage + * i2c: Documentation: fix device matching description + * i2c: Fix bad hint about irqs in i2c.h + * powerpc/legacy_serial: Bail if reg-offset/shift properties are present + * powerpc/mpc5200: Fix lite5200b suspend/resume + * ipv4: fix sysctl documentation of time related values + * net-sched: change tcf_destroy_chain() to clear start of filter list + * net-sched: fix filter destruction in atm/hfsc qdisc destruction + * netlink: Unneeded local variable + * net: Tyop of sk_filter() comment + * netdevice: Fix wrong string handle in kernel command line parsing + * net: fib_rules: fix error code for unsupported families + * dm crypt: use cond_resched + * V4L/DVB (8178): uvc: Fix compilation breakage for the other drivers, if + uvc is selected + * PCI: Limit VPD read/write lengths for Broadcom 5706, 5708, 5709 rev. + * PCI: acpiphp: cleanup notify handler on all root bridges + * drivers/input/ff-core.c needs + * DRM/i915: only use tiled blits on 965+ + * tty: Fix inverted logic in send_break + * x86: fix Intel Mac booting with EFI + * arch/x86/mm/init_64.c: early_memtest(): fix types + * 9p: fix O_APPEND in legacy mode + * slub: Do not use 192 byte sized cache if minimum alignment is 128 byte + * Do not overwrite nr_zones on !NUMA when initialising zlcache_ptr + * [MIPS] IP32: Fix unexpected irq 71 + * [MIPS] IP22: Fix crashes due to wrong L1_CACHE_BYTES + * [MIPS] cevt-txx9: Reset timer counter on initialization + * hrtimer: prevent migration for raising softirq + * svcrpc: fix handling of garbage args + * OHCI: Fix problem if SM501 and another platform driver is selected + * USB: fix cdc-acm resume() + * USB: ehci - fix timer regression + * USB: ohci - record data toggle after unlink + * USB: mass storage: new id for US_SC_CYP_ATACB + * sisusbvga: Fix oops on disconnect. + * USB: New device ID for ftdi_sio driver + * USB: fix interrupt disabling for HCDs with shared interrupt handlers + * USB: don't lose disconnections during suspend + * USB: another option device id + * USB: add a pl2303 device id + * USB: fix Oops on loading ipaq module since 2.6.26 + * USB: adding comment for ipaq forcing number of ports + * [MIPS] Fix bug in atomic_sub_if_positive. + * xen: fix address truncation in pte mfn<->pfn conversion + * sata_sil24: add DID for another adaptec flavor + * ahci: always clear all bits in irq_stat + * libata-sff: improve HSM violation reporting + * sata_mv: safer logic for limit_warnings + * Update maintainers for powerpc + * Christoph has moved + * mm: dirty page accounting vs VM_MIXEDMAP + * rtc: rtc_read_alarm() handles wraparound + * firmware: fix the request_firmware() dummy + * serial: fix serial_match_port() for dynamic major tty-device numbers + * get_user_pages(): fix possible page leak on oom + * rtc-x1205: Fix alarm set + * rtc: fix CMOS time error after writing /proc/acpi/alarm + * pci: VT3336 can't do MSI either + * Miguel Ojeda has moved + * ext3: add missing unlock to error path in ext3_quota_write() + * ext4: add missing unlock to an error path in ext4_quota_write() + * reiserfs: add missing unlock to an error path in reiserfs_quota_write() + * ecryptfs: remove unnecessary mux from ecryptfs_init_ecryptfs_miscdev() + * lib: taint kernel in common report_bug() WARN path. + * gpio: pca953x (i2c) handles max7310 too + * fsl_diu_fb: fix build with CONFIG_PM=y, plus fix some warnings + * Update taskstats-struct document for scaled time accounting + * cciss: fix regression that no device nodes are created if no logical + drives are configured. + * delay accounting: maintainer update + * Doc*/kernel-parameters.txt: fix stale references + * hdaps: add support for various newer Lenovo thinkpads + * mn10300: export certain arch symbols required to build allmodconfig + * mn10300: provide __ucmpdi2() for MN10300 + * Introduce rculist.h + * man-pages is supported + * ntfs: update help text + * add kernel-doc for simple_read_from_buffer and memory_read_from_buffer + * w100fb: do not depend on SHARPSL + * w100fb: add 80 MHz modeline + * MFD maintainer + * cgroups: document the effect of attaching PID 0 to a cgroup + * spi: fix the read path in spidev + * doc: doc maintainers + * security: filesystem capabilities: fix fragile setuid fixup code + * security: filesystem capabilities: fix CAP_SETPCAP handling + * Alpha Linux kernel fails with inconsistent kallsyms data + * cpusets: document proc status cpus and mems allowed lists + * MAINTAINERS: update the email address of Andreas Dilger + * cciss: read config to obtain max outstanding commands per controller + * olpc: sdhci: add quirk for the Marvell CaFe's vdd/powerup issue + * olpc: sdhci: add quirk for the Marvell CaFe's interrupt timeout + * cpumask: introduce new APIs + * mm: switch node meminfo Active & Inactive pages to Kbytes + * Update MAINTAINERS file for the TPM device driver + * devcgroup: fix odd behaviour when writing 'a' to devices.allow + * doc: document the relax_domain_level kernel boot argument + * mmc: don't use DMA on newer ENE controllers + * mempolicy: mask off internal flags for userspace API + * x86 ACPI: normalize segment descriptor register on resume + * x86 ACPI: fix resume from suspend to RAM on uniprocessor x86-64 + * softlockup: print a module list on being stuck + * ide: fix hwif->gendev refcounting + * ide: ide_unregister() warm-plug bugfix + * ide: ide_unregister() locking bugfix + * ahci: give another shot at clearing all bits in irq_stat + * Fix clear_refs_write() use of struct mm_walk + * Move _RET_IP_ and _THIS_IP_ to include/linux/kernel.h + * Fix pagemap_read() use of struct mm_walk + * Linux 2.6.26-rc9 + * Revert "USB: don't explicitly reenable root-hub status interrupts" + * Revert "PCI: Correct last two HP entries in the bfsort whitelist" + * iwlwifi: fix incorrect 5GHz rates reported in monitor mode + * iwlwifi: drop skb silently for Tx request in monitor mode + * libertas: support USB persistence on suspend/resume (resend) + * tcp: net/ipv4/tcp.c needs linux/scatterlist.h + * tcp: fix a size_t < 0 comparison in tcp_read_sock + * bridge: fix use-after-free in br_cleanup_bridges() + * Add missing skb->dev assignment in Frame Relay RX code + * forcedeth: fix lockdep warning on ethtool -s + * ehea: fix might sleep problem + * ehea: add MODULE_DEVICE_TABLE + * ehea: fix race condition + * ehea: Access iph->tot_len with correct endianness + * pasemi_mac: Access iph->tot_len with correct endianness + * ibm_newemac: Fixes kernel crashes when speed of cable connected changes + * ibm_newemac: Fixes entry of short packets + * fs_enet: restore promiscuous and multicast settings in restart() + * can: add sanity checks + * x86: KVM guest: Add memory clobber to hypercalls + * KVM: IOAPIC: Fix level-triggered irq injection hang + * [SCSI] erase invalid data returned by device + * pxamci: fix byte aligned DMA transfers + * vsprintf: split out '%s' handling logic + * vsprintf: split out '%p' handling logic + * vsprintf: add infrastructure support for extended '%p' specifiers + * vsprintf: add support for '%pS' and '%pF' pointer formats + * powerpc: Fix unterminated of_device_id array in legacy_serial.c + * [UML] fix gcc ICEs and unresolved externs + * ocfs2/dlm: Fixes oops in dlm_new_lockres() + * hostap_cs: correct poor NULL checks in suspend/resume routines + * drivers/net/wireless/iwlwifi/iwl-3945.c Fix type issue on 64bit + * mac80211: move netif_carrier_on to after + ieee80211_bss_info_change_notify + * mac80211: Only flush workqueue when last interface was removed + * zd1211rw: add ID for AirTies WUS-201 + * ssb-pcicore: Fix IRQ-vector init on embedded devices + * mac80211: don't report selected IBSS when not found + * crypto: tcrypt - Fix memory leak in test_cipher + * sctp: Mark the tsn as received after all allocations finish + * [S390] protect _PAGE_SPECIAL bit against mprotect + * irda: via-ircc proper dma freeing + * irda: New device ID for nsc-ircc + * irda: Fix netlink error path return value + * [SCSI] mptspi: fix oops in mptspi_dv_renegotiate_work() + * Correct hash flushing from huge_ptep_set_wrprotect() + * ide: add __ide_default_irq() inline helper + * palm_bk3710: fix IDECLK period calculation + * it8213: fix return value in it8213_init_one() + * [MIPS] Atlas, decstation: Fix section mismatches triggered by + defconfigs + * [MIPS] Fix 32bit kernels on R4k with 128 byte cache line size + * NFS: Fix readdir cache invalidation + * SUNRPC: Fix a double-free in rpcbind + * SUNRPC: Fix an rpcbind breakage for the case of IPv6 lookups + * reiserfs: discard prealloc in reiserfs_delete_inode + * Fix broken fix for fsl-diu-db + * RDMA/cxgb3: Fix regression caused by class_device -> device conversion + * ipv6: fix race between ipv6_del_addr and DAD timer + * sctp: Add documentation for sctp sysctl variable + * kernel/printk.c: Made printk_recursion_bug_msg static. + * powerpc: Add missing reference to coherent_dma_mask + * rc80211_pid: Fix fast_start parameter handling + * rt2x00: Disable synchronization during initialization + * zd1211rw: stop beacons on remove_interface + * libertas: fix memory alignment problems on the blackfin + * netfilter: nf_conntrack_tcp: fix endless loop + * netfilter: nf_nat_snmp_basic: fix a range check in NAT for SNMP + * md: ensure all blocks are uptodate or locked when syncing + * sched: fix cpu hotplug + * x86: fix /dev/mem compatibility under PAT + * crypto: chainiv - Invoke completion function + * ocfs2: Fix flags in ocfs2_file_lock + * kernel/kprobes.c: Made kprobe_blacklist static. + * arch/x86/kernel/.gitignore: Added vmlinux.lds to .gitignore file + because it shouldn't be tracked. + * ftrace: Documentation + * Fix PREEMPT_RCU without HOTPLUG_CPU + * sched: fix cpu hotplug, cleanup + * exec: fix stack excutability without PT_GNU_STACK + * slub: Fix use-after-preempt of per-CPU data structure + * Documentation: clarify tcp_{r,w}mem sysctl docs + * ip: sysctl documentation cleanup + * tcp: correct kcalloc usage + * ipv4: fib_trie: Fix lookup error return + * netlabel: netlink_unicast calls kfree_skb on error path by itself + * ipv6: missed namespace context in ipv6_rthdr_rcv + * xfrm: Add a XFRM_STATE_AF_UNSPEC flag to xfrm_usersa_info + * tun: Persistent devices can get stuck in xoff state + * tpm: add Intel TPM TIS device HID + * rapidio: fix device reference counting + * Fix name of Russell King in various comments + * rtc: fix reported IRQ rate for when HPET is enabled + * libata-acpi: filter out DIPM enable + * Added Targa Visionary 1000 IDE adapter to pata_sis.c + * libata-acpi: don't call sleeping function from invalid context + * Fix reference counting race on log buffers + * [SCSI] ipr: Fix HDIO_GET_IDENTITY oops for SATA devices + * IPMI: return correct value from ipmi_write + * x86: fix ldt limit for 64 bit + * [SCSI] fusion: default MSI to disabled for SPI and FC controllers + * [SCSI] bsg: fix oops on remove + * drivers/char/pcmcia/ipwireless/hardware.c fix resource leak + * drivers/isdn/i4l/isdn_common.c fix small resource leak + * fbdev: bugfix for multiprocess defio + * serial8250: sanity check nr_uarts on all paths. + * ov7670: clean up ov7670_read semantics + * rtc-fm3130: fix chip naming + * rtc-pcf8563: add chip id + * OProfile kernel maintainership changes + * frv: fix irqs_disabled() to return an int, not an unsigned long + * cifs: fix inode leak in cifs_get_inode_info_unix + * cifs: fix wksidarr declaration to be big-endian friendly + * cpusets, hotplug, scheduler: fix scheduler domain breakage + * Documentation/HOWTO: correct wrong kernel bugzilla FAQ URL + * devcgroup: always show positive major/minor num + * devcgroup: fix permission check when adding entry to child cgroup + * Linux 2.6.26 + + -- Ben Collins Mon, 14 Jul 2008 13:41:50 -0400 + +linux (2.6.26-3.9) intrepid; urgency=low + + * abi: Add dca and ioatdma to modules.ignore + + [ 2.6.26-3.8 ] + + [ Ben Collins ] + + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add heci to kconfig/kbuild + * config: Enable heci module on all flavours + * dm-bbr: Update to get it to compile with 2.6.26 + * config: Enable dm-bbr + * ubuntu: Add some media drivers + * config: Enable misc media drivers + * udeb: Switch to uvesafb in fb-modules + * abi: Add more modules to ignore (known) + + [ 2.6.26-3.7 ] + + [Amit Kucheria] + + * SAUCE: make fc transport removal of target configurable + - LP: #163075 + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [Ben Collins] + + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: irda: Default to dongle type 9 on IBM hardware + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: version: Implement version_signature proc file. + * build: Cleanup arches + * build: Remove remnants of unused binary-custom infrastructure + * build: Remove disable_d_i (not needed) and cleanup ppa build stuff + * ubuntu: New modules, acer-acpi + * build: Remove -virtual, and rebuild configs + * ubuntu: Add drbd module + * acer-acpi: Fix makefile + * x86/Kconfig: Fix missing quote for ubuntu Kconfig source + * ubuntu: Add iscsitarget module + * ubuntu: Added Amiga FS driver + * ubuntu: Add squashfs driver + * ubuntu: Remove asfs (Amiga FS). Need to be in linux-ports instead + * squashfs: Move headers to real include directory + * build/configs: The Great Config Consistency Check of 2008 + * ubuntu: Move third-party includes to ubuntu/include + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Add dm-radi4-5 driver + * build: Add CONFIG_DEBUG_SECTION_MISMATCH=y to get old style warnings + from build + * ubuntu/Makefile: Fixup dm-raid4-5 and add kludge for kbuild + * squashfs: Fixes for VFS changes + * ubuntu/dm-raid4-5: Fixups for moved/renamed headers/functions in core + md + * ubuntu: Add ndiswrapper driver + * d-i: Update module listings + * build: Disable xd block device (ancient) + * ndiswrapper: Fixup makefile + * d-i: Remove efi-modules. The only module, efivars, is built-in + * build: Remove install-source, obsolete and caused build failure + * Ubuntu-2.6.26-1.3 + * build: linux-doc rules got broken when disabling html side. Fixed now. + * Ubuntu-2.6.26-1.4 + * x86: Update to -rc6 allows CONFIG_PCI_OLPC to work with PCI_GOANY + * d-i: Make virtio-ring optional (it's built-in on i386) + * Ubuntu-2.6.26-1.4 + * Ubuntu-2.6.26-1.5 + * config: Enable DVB devices + * ubuntu/aufs: Make aufs a bool config, since it needs to be built-in + * config: Build aufs into the kernels + * build: Fix arguments passed to link-headers script + * config: Disable early printk + * d-i: Move isofs to storage-core and kill st (scsi tape) from list + * config: Enable non-promiscuous access to /dev/mem + * x86: Add option to disable decompression info messages + * config: Enable no-bz-chatter config options + * build: Re-add linux-source package + * d-i: Re-add socket-modules. Accidentally removed + - LP: #241295 + * Ubuntu-2.6.26-2.6 + * Use makedumpfile to generate a vmcoreinfo file. + * build: Build-Depend on makedumpfile for vmcoreinfo generation + * build: Remove debug print from git-ubuntu-log + * Updated configs for -rc7 + * build: postinst, do not call depmod with -F + * config: Enable rtc-cmos as a built-in driver. + * control: Provide ndiswrapper-modules-1.9 + * build: Generate vmcoreinfo in image build for crashdumps without debug + image + * config: Disable vesafb, since we'll prefer uvesafb + * build: Copy uvesafb module to initrd mod directory + * abi-check: New, more robust script + * config: Enable heap randomization by default + * abi-check: Cleanup output and call with perl (not $SHELL) + * abi: Ignore missing vesafb (known) + * config: Disable pcspkr (in favor of snd-pcsp) + * swap: Add notify_swap_entry_free callback for compcache + * compcache: Added ram backed compressed swap module + * ubuntu: Enable kbuild and kconfig for compcache + * config: Enable compcache and tlsf allocator as modules + * config: Updated for -rc8. Disables XEN on i386 + * config: Switch i386-server to 64G, enable PAE, 64-bit res, and XEN + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Enable build of misc/ subdir + * config: Enable misc drivers + * aufs: Fix warning about single non-string-literal arg to printf style + function + * drivers: Remove some duplicate device entries in various modules + * config: Disable some duplicate drivers + * keyspan: Remove duplicate device ID's + * check-aliases: Cleanup output, and fix rolling checks + * ubuntu: Disable dm-bbr for now + * dm-bbr: First cut at forward portiong. Still needs work. + * ubuntu: Disable dm-bbr in kbuild/kconfig + + [Chuck Short] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + - LP: #175834 + * SAUCE: [USB]: add ASUS LCM to the blacklist + + [Colin Ian King] + + * SAUCE: airprime.c supports more devices + - LP: #208250 + * SAUCE: Enable speedstep for sonoma processors. + - LP: #132271 + * Add dm-loop + * Add dm-loop BOM + + [Kyle McMartin] + + * SAUCE: fix orinoco_cs oops + + [Mario Limonciello] + + * SAUCE: Enable Reset and SCO workaround on Dell 410 BT adapter + + [Matthew Garrett] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [Phillip Lougher] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [Stefan Bader] + + * SAUCE: Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: Always use SCO protocol (disable eSCO support) Bug: #39414 + * SAUCE: mmc: Increase power_up deleay to fix TI readers OriginalAuthor: + Pascal Terjan Bug: #137686 + * SAUCE: Add blacklist support to fix Belkin bluetooth dongle. Bug: + #140511 + * SAUCE: Lower warning level of pci resource allocation messages. Bug: + 159241 + * SAUCE: Lower message level for PCI memory and I/O allocation. + - LP: #159241 + * Modify log generation to catch bug numbers when adding with git-am. + + [Tim Gardner] + + * Added the debian directory. Ignore: yes + * Add support for UBUNTUINCLUDE Ignore: yes + * LUM headers go in /usr/src Ignore: yes + * First pass at 2.6.25 configs Ignore: yes + * i386 -generic builds. Ignore: yes + * SAUCE: Increase CONFIG_IDE_MAX_HWIFS to 8 (from 4) + * SAUCE: Add extra headers to linux-libc-dev OriginalAuthor: Soren Hansen + OriginalLocation: + https://lists.ubuntu.com/archives/kernel-team/2007-November/001891.html + * Set CONFIG_DEVKMEM=n Ignore: yes + * Enabled ALSA and CGROUPS for i386 Ignore: yes + * Enabled amd64 configs. Ignore: yes + * CONFIG_STANDALONE=n Ignore: yes + * CONFIG_BLK_DEV_4DRIVES=n for i386 Ignore: yes + * CONFIG: CONFIG_DEFAULT_RELATIME=y for all flavours. Ignore: yes + * Set CONFIG_EDD_OFF=y Ignore: yes + * SAUCE: Blacklist Bluetooth Dell Wireless 370 for SCO MTU + OriginalAuthor: Mario Limonciello Bug: + #209715 + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: frame buffer regression - screen blank except for blinking + cursor after fbcon vtswitch OriginalAuthor: Matthew Garrett + Bug: #201591 + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + OriginalAuthor: Klaus S. Madsen + OriginalAuthor: Chuck Short + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: orinoco_cs.ko missing + * Set CONFIG_FB_VESA=m for i386/amd64 Ignore: yes + * Set CONFIG_PM_DISABLE_CONSOLE=y for all flavours Ignore: yes + * Thorough review of amd64 -generic config Ignore: yes + * Build PPA packages for Hardy until the Intrepid archive is opened. + * Deleted obsolete flavours Ignore: yes + * Don't build docs for PPA Ignore: yes + * Build all standard packages in PPA. Ignore: yes + * Remove duplicate USB ids + * SAUCE: DVB-USB UMT-010 driver oops on install Bug: #115284 + * Update configs after rebase to 2.6.26-rc1 Ignore: yes + * Update configs after rebase Ignore: yes + * Disable V4L until the build issues get ironed out. Ignore: yes + * Update configs after rebase. Ignore: yes + * Another device enable pass Ignore: yes + * Update configs after merge. Ignore: yes + * SAUCE: fn key doesn't work in hardy with macbook pro fourth generation + (4,1) + - LP: #207127 + * Enabled CONFIG_CIFS_DFS_UPCALL=y and CONFIG_CIFS_UPCALL=y + - LP: #236830 + + [Upstream Kernel Changes] + + * Revert "[WATCHDOG] hpwdt: Add CFLAGS to get driver working" + * mac80211: detect driver tx bugs + * hwmon: (lm85) Fix function RANGE_TO_REG() + * hwmon: (adt7473) Initialize max_duty_at_overheat before use + * hwmon: Update the sysfs interface documentation + * hwmon: (abituguru3) Identify Abit AW8D board as such + * hwmon: (w83791d) new maintainer + * hwmon: (abituguru3) update driver detection + * hwmon: (lm75) sensor reading bugfix + * ipv6: Remove options header when setsockopt's optlen is 0 + * ipv6: Drop packets for loopback address from outside of the box. + * sched: rt: dont stop the period timer when there are tasks wanting to + run + * sched: fix wait_for_completion_timeout() spurious failure under heavy + load + * x86: fix NULL pointer deref in __switch_to + * xen: Use wmb instead of rmb in xen_evtchn_do_upcall(). + * xen: mask unwanted pte bits in __supported_pte_mask + * xen: don't drop NX bit + * sched: refactor wait_for_completion_timeout() + * Ext4: Fix online resize block group descriptor corruption + * [IA64] SN2: security hole in sn2_ptc_proc_write + * alpha: fix module load failures on smp (bug #10926) + * alpha: link failure fix + * alpha: fix compile failures with gcc-4.3 (bug #10438) + * alpha: resurrect Cypress IDE quirk + * pppoe: warning fix + * sctp: Make sure N * sizeof(union sctp_addr) does not overflow. + * netns: Don't receive new packets in a dead network namespace. + * Add return value to reserve_bootmem_node() + * Slab: Fix memory leak in fallback_alloc() + * Fix performance regression on lmbench select benchmark + * ALSA: aw2 - Fix Oops at initialization + * ALSA: sb - Fix wrong assertions + * futexes: fix fault handling in futex_lock_pi + * IB/mthca: Clear ICM pages before handing to FW + * tty_driver: Update required method documentation + * removed unused var real_tty on n_tty_ioctl() + * Fix ZERO_PAGE breakage with vmware + * mm: fix race in COW logic + * NFS: Reduce the NFS mount code stack usage. + * NFS: Fix filehandle size comparisons in the mount code + * NFS: nfs_updatepage(): don't mark page as dirty if an error occurred + * alpha: fix compile error in arch/alpha/mm/init.c + * KVM: Fix race between timer migration and vcpu migration + * KVM: close timer injection race window in __vcpu_run + * KVM: MMU: Fix rmap_write_protect() hugepage iteration bug + * KVM: MMU: large page update_pte issue with non-PAE 32-bit guests + (resend) + * KVM: MMU: Fix oops on guest userspace access to guest pagetable + * KVM: ioapic: fix lost interrupt when changing a device's irq + * KVM: VMX: Fix host msr corruption with preemption enabled + * [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000 + * xen: remove support for non-PAE 32-bit + * kgdb: documentation update - remove kgdboe + * kgdb: sparse fix + * [IA64] Fix boot failure on ia64/sn2 + * [IA64] Handle count==0 in sn2_ptc_proc_write() + * [IA64] Eliminate NULL test after alloc_bootmem in iosapic_alloc_rte() + * [GFS2] fix gfs2 block allocation (cleaned up) + * x86: Add structs and functions for paravirt clocksource + * x86: Make xen use the paravirt clocksource structs and functions + * KVM: Make kvm host use the paravirt clocksource structs + * x86: KVM guest: Use the paravirt clocksource structs and functions + * KVM: Remove now unused structs from kvm_para.h + * enable bus mastering on i915 at resume time + * Linux 2.6.26-rc8 + * # Ubuntu external driver commit. + * # Ubuntu commit template. + + -- Ben Collins Sat, 21 Jun 2008 09:05:15 -0400 + +linux (2.6.26-2.6) intrepid; urgency=low + + [Ben Collins] + + * Revert "SAUCE: Export symbols for aufs (in lum) (not needed) + * config: Enable DVB devices + * ubuntu/aufs: Make aufs a bool config, since it needs to be built-in + * config: Build aufs into the kernels + * build: Fix arguments passed to link-headers script + * config: Disable early printk + * d-i: Move isofs to storage-core and kill st (scsi tape) from list + * config: Enable non-promiscuous access to /dev/mem + * x86: Add option to disable decompression info messages + * config: Enable no-bz-chatter config options + * build: Re-add linux-source package + * d-i: Re-add socket-modules. Accidentally removed + - LP: #241295 + + [Colin Ian King] + + * Add dm-loop + + [Tim Gardner] + + * Revert "SAUCE: USB bluetooth device 0x0e5e:0x6622 floods errors to + syslog (merged upstream) + + -- Ben Collins Mon, 16 Jun 2008 10:56:01 -0400 + +linux (2.6.26-1.5) intrepid; urgency=low + + * d-i: Make virtio-ring optional (it's built-in on i386) + * Rebased on 2.6.26-rc6 + + [Ubuntu-2.6.26-1.4 Changes below] + + * build: linux-doc rules got broken when disabling html side. Fixed now. + + [Ubuntu-2.6.26-1.3 Changes below] + + * build: Remove install-source, obsolete and caused build failure + + [Ubuntu-2.6.26-1.2 Changes below] + + * Remove efi-modules from d-i module list (efivars is built-in). Caused a + build failure. + * Patch to arch/x86/xen/time.c to remove __divdi3 usage (build failure on + i386). + + [Ubuntu-2.6.26-1.1 Changes below] + + [Amit Kucheria] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: Add AGP support for Radeon Mobility 9000 chipset + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [Ben Collins] + + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: irda: Default to dongle type 9 on IBM hardware + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: version: Implement version_signature proc file. + * build: Remove remnants of unused binary-custom infrastructure + * mmc_block: Fix bad allocation on 64-bit (zero len array) + * ubuntu: New modules, acer-acpi + * build: Remove -virtual, and rebuild configs + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add squashfs driver + * build/configs: The Great Config Consistency Check of 2008 + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Add dm-radi4-5 driver + * build: Add CONFIG_DEBUG_SECTION_MISMATCH=y to get old style warnings + from build + * squashfs: Fixes for VFS changes + * ubuntu/dm-raid4-5: Fixups for moved/renamed headers/functions in core + md + * ubuntu: Add ndiswrapper driver + * d-i: Update module listings + + [Chuck Short] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + * SAUCE: [USB]: add ASUS LCM to the blacklist + + [Colin Ian King] + + * SAUCE: Enable speedstep for sonoma processors. + * SAUCE: airprime.c supports more devices + + [Kyle McMartin] + + * SAUCE: fix orinoco_cs oops + + [Mario Limonciello] + + * SAUCE: Enable Reset and SCO workaround on Dell 410 BT adapter + + [Matthew Garrett] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [Phillip Lougher] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [Stefan Bader] + + * SAUCE: Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: Always use SCO protocol (disable eSCO support) Bug: #39414 + * SAUCE: mmc: Increase power_up deleay to fix TI readers + * SAUCE: Add blacklist support to fix Belkin bluetooth dongle. + * SAUCE: Lower warning level of pci resource allocation messages. + * SAUCE: Lower message level for PCI memory and I/O allocation. + - LP: #159241 + * Modify log generation to catch bug numbers when adding with git-am. + + [Tim Gardner] + + * SAUCE: hdaps module does not load on Thinkpad T61P + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Export symbols for aufs (in lum). + * SAUCE: USB bluetooth device 0x0e5e:0x6622 floods errors to syslog + * SAUCE: Blacklist Bluetooth Dell Wireless 370 for SCO MTU + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: frame buffer regression - screen blank except for blinking + cursor after fbcon vtswitch + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: Modualrize vesafb + * SAUCE: DVB-USB UMT-010 driver oops on install + * SAUCE: fn key doesn't work in hardy with macbook pro fourth generation + (4,1) + - LP: #207127 + + -- Ben Collins Wed, 11 Jun 2008 05:28:35 -0400 --- linux-lts-raring-3.8.0.orig/debian.master/copyright +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/control.stub.in +++ linux-lts-raring-3.8.0/debian.master/control.stub.in @@ -0,0 +1,94 @@ +Source: linux +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386], libelf-dev, libnewt-dev, binutils-dev, rsync, libdw-dev, dpkg (>= 1.16.0~ubuntu4), util-linux, pkg-config, flex, bison, libunwind8-dev, openssl, libaudit-dev +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils, asciidoc +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-raring.git +XS-Testsuite: autopkgtest +#XS-Testsuite-Depends: gcc-4.7 binutils + +Package: SRCPKGNAME-source-PKGVER +Architecture: all +Section: devel +Priority: optional +Provides: SRCPKGNAME-source, SRCPKGNAME-source-3 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +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 +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: SRCPKGNAME-doc-3 +Replaces: SRCPKGNAME-doc-3 +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-tools-common +Architecture: all +Section: kernel +Priority: optional +Depends: ${misc:Depends} +Replaces: SRCPKGNAME-tools (<= 2.6.32-16.25) +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-headers-PKGVER-ABINUM +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +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 powerpc +Depends: ${misc:Depends} +Conflicts: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), amd64-libs-dev (<= 1.1), SRCPKGNAME-kernel-headers +Replaces: libc6-dev (<< 2.3.2.ds1-6), libc6.1-dev (<< 2.3.2.ds1-6), dvb-dev (<< 1.0.1-6), SRCPKGNAME-kernel-headers, libdrm-dev +Provides: SRCPKGNAME-kernel-headers +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-PKGVER-ABINUM +Architecture: i386 amd64 armhf +Section: devel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, SRCPKGNAME-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=. + --- linux-lts-raring-3.8.0.orig/debian.master/changelog +++ linux-lts-raring-3.8.0/debian.master/changelog @@ -0,0 +1,12437 @@ +linux (3.8.0-33.48) raring; urgency=low + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #1242849 + + [ Maximiliano Curia ] + + * SAUCE: (no-up) Only let characters through when there are active + readers. + - LP: #1208740 + + [ Upstream Kernel Changes ] + + * cciss: fix info leak in cciss_ioctl32_passthru() + - LP: #1188355 + - CVE-2013-2147 + * cpqarray: fix info leak in ida_locked_ioctl() + - LP: #1188355 + - CVE-2013-2147 + * mount: consolidate permission checks + - LP: #1226726 + * get rid of full-hash scan on detaching vfsmounts + - LP: #1226726 + * Smack: Fix the bug smackcipso can't set CIPSO correctly + - LP: #1236743 + * ipvs: add backup_only flag to avoid loops + - LP: #1238494 + * tuntap: correctly handle error in tun_set_iff() + - LP: #1229975 + - CVE-2013-4343 + * htb: fix sign extension bug + - LP: #1240580 + * net: avoid to hang up on sending due to sysctl configuration overflow. + - LP: #1240580 + * net: check net.core.somaxconn sysctl values + - LP: #1240580 + * macvlan: validate flags + - LP: #1240580 + * neighbour: populate neigh_parms on alloc before calling ndo_neigh_setup + - LP: #1240580 + * bonding: modify only neigh_parms owned by us + - LP: #1240580 + * fib_trie: remove potential out of bound access + - LP: #1240580 + * bridge: don't try to update timers in case of broken MLD queries + - LP: #1240580 + * tcp: cubic: fix overflow error in bictcp_update() + - LP: #1240580 + * tcp: cubic: fix bug in bictcp_acked() + - LP: #1240580 + * ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not + match + - LP: #1240580 + * 8139cp: Fix skb leak in rx_status_loop failure path. + - LP: #1240580 + * tun: signedness bug in tun_get_user() + - LP: #1240580 + * ipv6: remove max_addresses check from ipv6_create_tempaddr + - LP: #1240580 + * ipv6: Store Router Alert option in IP6CB directly. + - LP: #1240580 + * ipv6: drop packets with multiple fragmentation headers + - LP: #1240580 + * tcp: set timestamps for restored skb-s + - LP: #1240580 + * net: usb: Add HP hs2434 device to ZLP exception table + - LP: #1240580 + * tcp: initialize rcv_tstamp for restored sockets + - LP: #1240580 + * ipv4: sendto/hdrincl: don't use destination address found in header + - LP: #1240580 + * tcp: tcp_make_synack() should use sock_wmalloc + - LP: #1240580 + * tipc: set sk_err correctly when connection fails + - LP: #1240580 + * net: bridge: convert MLDv2 Query MRC into msecs_to_jiffies for + max_delay + - LP: #1240580 + * ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO + - LP: #1240580 + * tg3: Don't turn off led on 5719 serdes port 0 + - LP: #1240580 + * vhost_net: poll vhost queue after marking DMA is done + - LP: #1240580 + * net: ipv6: tcp: fix potential use after free in tcp_v6_do_rcv + - LP: #1240580 + * drm/radeon/si: Add support for CP DMA to CS checker for compute v2 + - LP: #1240580 + * sfc: Fix efx_rx_buf_offset() for recycled pages + - LP: #1240580 + * cfq: explicitly use 64bit divide operation for 64bit arguments + - LP: #1240580 + * drm/radeon/atom: workaround vbios bug in transmitter table on rs880 + (v2) + - LP: #1240580 + * drm/ast: fix the ast open key function + - LP: #1240580 + * sched/fair: Fix small race where child->se.parent,cfs_rq might point to + invalid ones + - LP: #1240580 + * tg3: Expand led off fix to include 5720 + - LP: #1240580 + * HID: provide a helper for validating hid reports + - LP: #1240580 + * HID: zeroplus: validate output report details + - LP: #1240580 + - CVE-2013-2889 + * HID: LG: validate HID output report details + - LP: #1240580 + - CVE-2013-2893 + * HID: lenovo-tpkbd: validate output report details + - LP: #1240580 + - CVE-2013-2894 + * HID: validate feature and input report details + - LP: #1240580 + - CVE-2013-2897 + * HID: logitech-dj: validate output report details + - LP: #1240580 + - CVE-2013-2895 + * HID: multitouch: validate indexes details + - LP: #1240580 + - CVE-2013-2897 + * HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails + - LP: #1240580 + * drm/radeon: fix panel scaling with eDP and LVDS bridges + - LP: #1240580 + * cifs: fix filp leak in cifs_atomic_open() + - LP: #1240580 + * net: usb: cdc_ether: Use wwan interface for Telit modules + - LP: #1240580 + * usb: gadget: fix a bug and a WARN_ON in dummy-hcd + - LP: #1240580 + * drm/i915: do not update cursor in crtc mode set + - LP: #1240580 + * drm/i915: Don't enable the cursor on a disable pipe + - LP: #1240580 + * drm/ttm: fix the tt_populated check in ttm_tt_destroy() + - LP: #1240580 + * PCI / ACPI / PM: Clear pme_poll for devices in D3cold on wakeup + - LP: #1240580 + * serial: pch_uart: fix tty-kref leak in dma-rx path + - LP: #1240580 + * x86, efi: Don't map Boot Services on i386 + - LP: #1240580 + * ALSA: compress: Fix compress device unregister. + - LP: #1240580 + * dm snapshot: workaround for a false positive lockdep warning + - LP: #1240580 + * dm-snapshot: fix performance degradation due to small hash size + - LP: #1240580 + * drm/radeon: Make r100_cp_ring_info() and radeon_ring_gfx() safe (v2) + - LP: #1240580 + * ARM: 7837/3: fix Thumb-2 bug in AES assembler code + - LP: #1240580 + * x86/reboot: Add quirk to make Dell C6100 use reboot=pci automatically + - LP: #1240580 + * drm/radeon: disable tests/benchmarks if accel is disabled + - LP: #1240580 + * xhci: Fix oops happening after address device timeout + - LP: #1240580 + * xhci: Ensure a command structure points to the correct trb on the + command ring + - LP: #1240580 + * drm/i915/dp: increase i2c-over-aux retry interval on AUX DEFER + - LP: #1240580 + * staging: vt6656: [BUG] main_usb.c oops on device_close move flag + earlier. + - LP: #1240580 + * staging: vt6656: [BUG] iwctl_siwencodeext return if device not open + - LP: #1240580 + * USB: UHCI: accept very late isochronous URBs + - LP: #1240580 + * USB: OHCI: accept very late isochronous URBs + - LP: #1240580 + * USB: fix PM config symbol in uhci-hcd, ehci-hcd, and xhci-hcd + - LP: #1240580 + * usb/core/devio.c: Don't reject control message to endpoint with wrong + direction bit + - LP: #1240580 + * hwmon: (applesmc) Check key count before proceeding + - LP: #1240580 + * fsl/usb: Resolve PHY_CLK_VLD instability issue for ULPI phy + - LP: #1240580 + * driver core : Fix use after free of dev->parent in device_shutdown + - LP: #1240580 + * USB: Fix breakage in ffs_fs_mount() + - LP: #1240580 + * usb: dwc3: pci: add support for BayTrail + - LP: #1240580 + * usb: dwc3: add support for Merrifield + - LP: #1240580 + * ASoC: max98095: a couple array underflows + - LP: #1240580 + * ASoC: ab8500-codec: info leak in anc_status_control_put() + - LP: #1240580 + * ASoC: 88pm860x: array overflow in snd_soc_put_volsw_2r_st() + - LP: #1240580 + * Bluetooth: Add a new PID/VID 0cf3/e005 for AR3012. + - LP: #1240580 + * Bluetooth: Fix security level for peripheral role + - LP: #1240580 + * Bluetooth: Fix encryption key size for peripheral role + - LP: #1240580 + * Bluetooth: Add support for BCM20702A0 [0b05, 17cb] + - LP: #1240580 + * Bluetooth: Introduce a new HCI_RFKILLED flag + - LP: #1240580 + * rtlwifi: Align private space in rtl_priv struct + - LP: #1240580 + * p54usb: add USB ID for Corega WLUSB2GTST USB adapter + - LP: #1240580 + * mwifiex: fix hang issue for USB chipsets + - LP: #1240580 + * mwifiex: fix NULL pointer dereference in usb suspend handler + - LP: #1240580 + * fs/binfmt_elf.c: prevent a coredump with a large vm_map_count from + Oopsing + - LP: #1240580 + * nilfs2: fix issue with race condition of competition between segments + for dirty blocks + - LP: #1240580 + * mm: avoid reinserting isolated balloon pages into LRU lists + - LP: #1240580 + * USB: serial: option: Ignore card reader interface on Huawei E1750 + - LP: #1240580 + * gpio/omap: maintain GPIO and IRQ usage separately + - LP: #1240580 + * gpio/omap: auto-setup a GPIO when used as an IRQ + - LP: #1240580 + * ib_srpt: Destroy cm_id before destroying QP. + - LP: #1240580 + * powerpc: Fix parameter clobber in csum_partial_copy_generic() + - LP: #1240580 + * powerpc: Restore registers on error exit from + csum_partial_copy_generic() + - LP: #1240580 + * powerpc/sysfs: Disable writing to PURR in guest mode + - LP: #1240580 + * powerpc/iommu: Use GFP_KERNEL instead of GFP_ATOMIC in + iommu_init_table() + - LP: #1240580 + * powerpc/vio: Fix modalias_show return values + - LP: #1240580 + * ib_srpt: always set response for task management + - LP: #1240580 + * xen/hvc: allow xenboot console to be used again + - LP: #1240580 + * net: Update the sysctl permissions handler to test effective uid/gid + - LP: #1240580 + * Linux 3.8.13.11 + - LP: #1240580 + + -- Brad Figg Mon, 21 Oct 2013 12:04:49 -0700 + +linux (3.8.0-32.47) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1233777 + + [ Upstream Kernel Changes ] + + * Revert "net/core/sock.c: add missing VSOCK string in + af_family_*_key_strings" + - LP: #1233227 + * Input: cypress_ps2 - Return zero finger count if palm is detected. + - LP: #1229361 + * isofs: Refuse RW mount of the filesystem instead of making it RO + - LP: #1228751 + * udf: Standardize return values in mount sequence + - LP: #1228751 + * udf: Refuse RW mount of the filesystem instead of making it RO + - LP: #1228751 + * ARM: update FIQ support for relocation of vectors + - LP: #1233227 + * ARM: Fix FIQ code on VIVT CPUs + - LP: #1233227 + * regmap: Add another missing header for !CONFIG_REGMAP stubs + - LP: #1233227 + * ALSA: hda - Add inverted digital mic fixup for Acer Aspire One + - LP: #1233227 + * mac80211: add missing channel context release + - LP: #1233227 + * iwl4965: fix rfkill set state regression + - LP: #1233227 + * ath9k_htc: Restore skb headroom when returning skb to mac80211 + - LP: #1233227 + * ath9k: Enable PLL fix only for AR9340/AR9330 + - LP: #1233227 + * ALSA: hda - Fix NULL dereference with CONFIG_SND_DYNAMIC_MINORS=n + - LP: #1233227 + * lparcfg: don't bother saving pointer to proc_dir_entry + - LP: #1233227 + * powerpc/pseries/lparcfg: Fix possible overflow are more than 1026 + - LP: #1233227 + * powerpc: Don't Oops when accessing /proc/powerpc/lparcfg without + hypervisor + - LP: #1233227 + * powerpc: Work around gcc miscompilation of __pa() on 64-bit + - LP: #1233227 + * powerpc/hvsi: Increase handshake timeout from 200ms to 400ms. + - LP: #1233227 + * net: Check the correct namespace when spoofing pid over SCM_RIGHTS + - LP: #1233227 + * ALSA: opti9xx: Fix conflicting driver object name + - LP: #1233227 + * SUNRPC: Fix memory corruption issue on 32-bit highmem systems + - LP: #1233227 + * drivers/base/memory.c: fix show_mem_removable() to handle missing + sections + - LP: #1233227 + * memcg: check that kmem_cache has memcg_params before accessing it + - LP: #1233227 + * workqueue: cond_resched() after processing each work item + - LP: #1233227 + * drm/i915: ivb: fix edp voltage swing reg val + - LP: #1233227 + * drm/vmwgfx: Split GMR2_REMAP commands if they are to large + - LP: #1233227 + * af_key: initialize satype in key_notify_policy_flush() + - LP: #1233227 + * Linux 3.8.13.9 + - LP: #1233227 + * zram: allow request end to coincide with disksize + - LP: #1233227 + * mtd: nand: fix NAND_BUSWIDTH_AUTO for x16 devices + - LP: #1233227 + * HID: hidraw: correctly deallocate memory on device disconnect + - LP: #1233227 + * xen-gnt: prevent adding duplicate gnt callbacks + - LP: #1233227 + * ath9k: always clear ps filter bit on new assoc + - LP: #1233227 + * ceph: Don't forget the 'up_read(&osdc->map_sem)' if met error. + - LP: #1233227 + * libceph: unregister request in __map_request failed and nofail == false + - LP: #1233227 + * usb: config->desc.bLength may not exceed amount of data returned by the + device + - LP: #1233227 + * USB: cdc-wdm: fix race between interrupt handler and tasklet + - LP: #1233227 + * powerpc: Handle unaligned ldbrx/stdbrx + - LP: #1233227 + * intel-iommu: Fix leaks in pagetable freeing + - LP: #1233227 + * drivers/misc/hpilo: Correct panic when an AUX iLO is detected + - LP: #1233227 + * USB: handle LPM errors during device suspend correctly + - LP: #1233227 + * xhci-plat: Don't enable legacy PCI interrupts. + - LP: #1233227 + * ath9k: fix rx descriptor related race condition + - LP: #1233227 + * ath9k: avoid accessing MRC registers on single-chain devices + - LP: #1233227 + * brcmsmac: Fix WARNING caused by lack of calls to dma_mapping_error() + - LP: #1233227 + * ext4: simplify truncation code in ext4_setattr() + - LP: #1233227 + * ext4: fix lost truncate due to race with writeback + - LP: #1233227 + * ASoC: wm8960: Fix PLL register writes + - LP: #1233227 + * rculist: list_first_or_null_rcu() should use list_entry_rcu() + - LP: #1233227 + * USB: mos7720: use GFP_ATOMIC under spinlock + - LP: #1233227 + * USB: mos7720: fix big-endian control requests + - LP: #1233227 + * arm64: perf: fix group validation when using enable_on_exec + - LP: #1233227 + * arm64: perf: fix ARMv8 EVTYPE_MASK to include NSH bit + - LP: #1233227 + * staging: comedi: dt282x: dt282x_ai_insn_read() always fails + - LP: #1233227 + * usb: ehci-mxc: check for pdata before dereferencing + - LP: #1233227 + * mmc: tmio_mmc_dma: fix PIO fallback on SDHI + - LP: #1233227 + * proc: Restrict mounting the proc filesystem + - LP: #1233227 + * usb: xhci: Disable runtime PM suspend for quirky controllers + - LP: #1233227 + * USB: OHCI: Allow runtime PM without system sleep + - LP: #1233227 + * pinctrl: at91: fix get_pullup/down function return + - LP: #1233227 + * ACPI / EC: Add HP Folio 13 to ec_dmi_table in order to skip DSDT scan + - LP: #1233227 + * ACPI / EC: Add ASUSTEK L4R to quirk list in order to validate ECDT + - LP: #1233227 + * HID: validate HID report id size + - LP: #1233227 + - CVE-2013-2888 + * cpuidle: coupled: abort idle if pokes are pending + - LP: #1233227 + * cpuidle: coupled: disable interrupts after entering safe state + - LP: #1233227 + * cpuidle: coupled: fix race condition between pokes and safe state + - LP: #1233227 + * of: Fix missing memory initialization on FDT unflattening + - LP: #1233227 + * leds: wm831x-status: Request a REG resource + - LP: #1233227 + * USB: fix build error when CONFIG_PM_SLEEP isn't enabled + - LP: #1233227 + * clk: wm831x: Initialise wm831x pointer on init + - LP: #1233227 + * drm/edid: add quirk for Medion MD30217PG + - LP: #1233227 + * drm/radeon: fix endian bugs in hw i2c atom routines + - LP: #1233227 + * drm/radeon: update line buffer allocation for dce4.1/5 + - LP: #1233227 + * drm/radeon: update line buffer allocation for dce6 + - LP: #1233227 + * drm/radeon: fix LCD record parsing + - LP: #1233227 + * drm/radeon: fix resume on some rs4xx boards (v2) + - LP: #1233227 + * drm/radeon: fix handling of variable sized arrays for router objects + - LP: #1233227 + * radeon kms: fix uninitialised hotplug work usage in r100_irq_process() + - LP: #1233227 + * pidns: Fix hang in zap_pid_ns_processes by sending a potentially extra + wakeup + - LP: #1233227 + * x86, smap: Handle csum_partial_copy_*_user() + - LP: #1233227 + * Introduce [compat_]save_altstack_ex() to unbreak x86 SMAP + - LP: #1233227 + * drm: fix DRM_IOCTL_MODE_GETFB handle-leak + - LP: #1233227 + * HID: picolcd: Prevent NULL pointer dereference on _remove() + - LP: #1233227 + * HID: battery: don't do DMA from stack + - LP: #1233227 + * ALSA: hda - hdmi: Fallback to ALSA allocation when selecting CA + - LP: #1233227 + * fuse: postpone end_page_writeback() in fuse_writepage_locked() + - LP: #1233227 + * fuse: invalidate inode attributes on xattr modification + - LP: #1233227 + * media: coda: Fix DT driver data pointer for i.MX27 + - LP: #1233227 + * s5p-g2d: Fix registration failure + - LP: #1233227 + * DocBook: upgrade media_api DocBook version to 4.2 + - LP: #1233227 + * v4l2: added missing mutex.h include to v4l2-ctrls.h + - LP: #1233227 + * hdpvr: fix iteration over uninitialized lists in hdpvr_probe() + - LP: #1233227 + * exynos-gsc: Register v4l2 device + - LP: #1233227 + * fuse: readdir: check for slash in names + - LP: #1233227 + * MIPS: ath79: Fix ar933x watchdog clock + - LP: #1233227 + * libceph: use pg_num_mask instead of pgp_num_mask for pg.seed calc + - LP: #1233227 + * HID: pantherlord: validate output report details + - LP: #1233227 + - CVE-2013-2892 + * HID: ntrig: validate feature report details + - LP: #1233227 + - CVE-2013-2896 + * HID: sensor-hub: validate feature report details + - LP: #1233227 + - CVE-2013-2898 + * HID: picolcd_core: validate output report details + - LP: #1233227 + - CVE-2013-2899 + * HID: check for NULL field when setting values + - LP: #1233227 + * ARM: PCI: versatile: Fix map_irq function to match hardware + - LP: #1233227 + * ARM: PCI: versatile: Fix PCI I/O + - LP: #1233227 + * ARM: PCI: versatile: Fix SMAP register offsets + - LP: #1233227 + * net: mvneta: properly disable HW PHY polling and ensure adjust_link() + works + - LP: #1233227 + * drm/i915: try not to lose backlight CBLV precision + - LP: #1233227 + * crypto: api - Fix race condition in larval lookup + - LP: #1233227 + * cifs: ensure that srv_mutex is held when dealing with ssocket pointer + - LP: #1233227 + * CIFS: Fix a memory leak when a lease break comes + - LP: #1233227 + * ALSA: hda - Add Toshiba Satellite C870 to MSI blacklist + - LP: #1233227 + * lguest: Point to the right directory for the lguest launcher + - LP: #1233227 + * powerpc: Default arch idle could cede processor on pseries + - LP: #1233227 + * ASoC: mc13783: add spi errata fix + - LP: #1233227 + * sd: Fix potential out-of-bounds access + - LP: #1233227 + * pidns: fix vfork() after unshare(CLONE_NEWPID) + - LP: #1233227 + * ocfs2: fix the end cluster offset of FIEMAP + - LP: #1233227 + * mm/huge_memory.c: fix potential NULL pointer dereference + - LP: #1233227 + * mm: fix aio performance regression for database caused by THP + - LP: #1233227 + * memcg: fix multiple large threshold notifications + - LP: #1233227 + * Linux 3.8.13.10 + - LP: #1233227 + + -- Steve Conklin Tue, 01 Oct 2013 12:43:12 -0500 + +linux (3.8.0-31.46) raring; urgency=low + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #1223406 + + * UBUNTU: [Config] KUSER_HELPERS=y for armhf + + [ Upstream Kernel Changes ] + + * Revert "cpuidle: Quickly notice prediction failure in general case" + - LP: #1221794 + * Revert "cpuidle: Quickly notice prediction failure for repeat mode" + - LP: #1221794 + * Revert "zram: use zram->lock to protect zram_free_page() in swap free + notify path" + - LP: #1215513 + * x86 thermal: Delete power-limit-notification console messages + - LP: #1215748 + * x86 thermal: Disable power limit notification interrupt by default + - LP: #1215748 + * mwifiex: do not create AP and P2P interfaces upon driver loading + - LP: #1212720 + * ARM: 7810/1: perf: Fix array out of bounds access in + armpmu_map_hw_event() + - LP: #1216442 + - CVE-2013-4254 + * ARM: 7809/1: perf: fix event validation for software group leaders + - LP: #1216442 + - CVE-2013-4254 + * veth: reduce stat overhead + - LP: #1201869 + * veth: extend device features + - LP: #1201869 + * veth: avoid a NULL deref in veth_stats_one + - LP: #1201869 + * veth: fix a NULL deref in netif_carrier_off + - LP: #1201869 + * veth: fix NULL dereference in veth_dellink() + - LP: #1201869 + * Bluetooth: Add support for Atheros [0cf3:3121] + - LP: #1202477 + * uvcvideo: quirk PROBE_DEF for Dell SP2008WFP monitor. + - LP: #1217957 + * usb: dwc3: gadget: don't prevent gadget from being probed if we fail + - LP: #1221794 + * usb: dwc3: fix wrong bit mask in dwc3_event_type + - LP: #1221794 + * ASoC: max98088 - fix element type of the register cache. + - LP: #1221794 + * ata: Fix DVD not dectected at some platform with Wellsburg PCH + - LP: #1221794 + * Tools: hv: KVP: Fix a bug in IPV6 subnet enumeration + - LP: #1221794 + * ALSA: usb-audio: 6fire: return correct XRUN indication + - LP: #1221794 + * usb: serial: cp210x: Add USB ID for Netgear Switches embedded serial + adapter + - LP: #1221794 + * USB: storage: Add MicroVault Flash Drive to unusual_devs + - LP: #1221794 + * USB: misc: Add Manhattan Hi-Speed USB DVI Converter to sisusbvga + - LP: #1221794 + * USB: option: append Petatel NP10T device to GSM modems list + - LP: #1221794 + * usb: cp210x support SEL C662 Vendor/Device + - LP: #1221794 + * USB: cp210x: add MMB and PI ZigBee USB Device Support + - LP: #1221794 + * USB: EHCI: Fix resume signalling on remote wakeup + - LP: #1221794 + * drm/radeon: fix endian issues with DP handling (v3) + - LP: #1221794 + * drm/radeon: Another card with wrong primary dac adj + - LP: #1221794 + * drm/radeon: improve dac adjust heuristics for legacy pdac + - LP: #1221794 + * drm/radeon: fix combios tables on older cards + - LP: #1221794 + * ARM: footbridge: fix overlapping PCI mappings + - LP: #1221794 + * [SCSI] isci: Fix a race condition in the SSP task management path + - LP: #1221794 + * [SCSI] qla2xxx: Properly set the tagging for commands. + - LP: #1221794 + * [SCSI] sd: fix crash when UA received on DIF enabled device + - LP: #1221794 + * nfsd: nfsd_open: when dentry_open returns an error do not propagate as + struct file + - LP: #1221794 + * USB: option: add D-Link DWM-152/C1 and DWM-156/C1 + - LP: #1221794 + * staging: comedi: COMEDI_CANCEL ioctl should wake up read/write + - LP: #1221794 + * staging: comedi: fix a race between do_cmd_ioctl() and read/write + - LP: #1221794 + * staging: android: logger: Correct write offset reset on error + - LP: #1221794 + * usb: option: add TP-LINK MA260 + - LP: #1221794 + * USB: ti_usb_3410_5052: fix dynamic-id matching + - LP: #1221794 + * usb: serial: option: Add ONYX 3G device support + - LP: #1221794 + * md/raid10: remove use-after-free bug. + - LP: #1221794 + * md/raid5: fix interaction of 'replace' and 'recovery'. + - LP: #1221794 + * drm/i915: initialize gt_lock early with other spin locks + - LP: #1221794 + * xhci: Avoid NULL pointer deref when host dies. + - LP: #1221794 + * usb: host: xhci: Enable XHCI_SPURIOUS_SUCCESS for all controllers with + xhci 1.0 + - LP: #1221794 + * xhci: fix null pointer dereference on ring_doorbell_for_active_rings + - LP: #1221794 + * usb: serial: option: blacklist ONDA MT689DC QMI interface + - LP: #1221794 + * usb: serial: option: add Olivetti Olicard 200 + - LP: #1221794 + * usb: serial: option.c: remove ONDA MT825UP product ID fromdriver + - LP: #1221794 + * USB: mos7840: fix memory leak in open + - LP: #1221794 + * usb: Clear both buffers when clearing a control transfer TT buffer. + - LP: #1221794 + * nl80211: fix mgmt tx status and testmode reporting for netns + - LP: #1221794 + * mac80211: fix ethtool stats for non-station interfaces + - LP: #1221794 + * mac80211: fix duplicate retransmission detection + - LP: #1221794 + * iwlwifi: mvm: refuse connection to APs with BI < 16 + - LP: #1221794 + * iwlwifi: add DELL SKU for 5150 HMC + - LP: #1221794 + * ath9k_htc: do some initial hardware configuration + - LP: #1221794 + * ath9k_htc: reboot firmware if it was loaded + - LP: #1221794 + * ARM: 7790/1: Fix deferred mm switch on VIVT processors + - LP: #1221794 + * ARM: 7791/1: a.out: remove partial a.out support + - LP: #1221794 + * mwifiex: Add missing endian conversion. + - LP: #1221794 + * USB: mos7840: fix race in register handling + - LP: #1221794 + * USB: mos7840: fix device-type detection + - LP: #1221794 + * USB: mos7840: fix race in led handling + - LP: #1221794 + * serial/mxs-auart: fix race condition in interrupt handler + - LP: #1221794 + * serial: mxs: fix buffer overflow + - LP: #1221794 + * serial/mxs-auart: increase time to wait for transmitter to become idle + - LP: #1221794 + * serial: arc_uart: Fix module alias + - LP: #1221794 + * firewire: fix libdc1394/FlyCap2 iso event regression + - LP: #1221794 + * USB: mos7840: fix pointer casts + - LP: #1221794 + * ixgbe: Fix Tx Hang issue with lldpad on 82598EB + - LP: #1221794 + * ALSA: compress: fix the return value for SNDRV_COMPRESS_VERSION + - LP: #1221794 + * rt2x00: fix stop queue + - LP: #1221794 + * USB: serial: ftdi_sio: add more RT Systems ftdi devices + - LP: #1221794 + * drm/nouveau: fix semaphore dmabuf obj + - LP: #1221794 + * ACPI / battery: Fix parsing _BIX return value + - LP: #1221794 + * drm/radeon/atom: initialize more atom interpretor elements to 0 + - LP: #1221794 + * drm/i915: fix missed hunk after GT access breakage + - LP: #1221794 + * ARM: poison the vectors page + - LP: #1221794 + * ARM: poison memory between kuser helpers + - LP: #1221794 + * ARM: move vector stubs + - LP: #1221794 + * ARM: use linker magic for vectors and vector stubs + - LP: #1221794 + * mm: mempolicy: fix mbind_range() && vma_adjust() interaction + - LP: #1221794 + * powerpc/windfarm: Fix noisy slots-fan on Xserve (rm31) + - LP: #1221794 + * drm/i915: Make data/link N value power of two + - LP: #1221794 + * virtio/console: Quit from splice_write if pipe->nrbufs is 0 + - LP: #1221794 + * virtio/console: Add pipe_lock/unlock for splice_write + - LP: #1221794 + * x86/iommu/vt-d: Expand interrupt remapping quirk to cover x58 chipset + - LP: #1221794 + * s390/bitops: fix find_next_bit_left + - LP: #1221794 + * x86, fpu: correct the asm constraints for fxsave, unbreak mxcsr.daz + - LP: #1221794 + * ext4: make sure group number is bumped after a inode allocation race + - LP: #1221794 + * ext4: destroy ext4_es_cachep on module unload + - LP: #1221794 + * virtio: console: fix race with port unplug and open/close + - LP: #1221794 + * virtio: console: fix race in port_fops_open() and port unplug + - LP: #1221794 + * virtio: console: clean up port data immediately at time of unplug + - LP: #1221794 + * virtio: console: fix raising SIGIO after port unplug + - LP: #1221794 + * virtio: console: return -ENODEV on all read operations after unplug + - LP: #1221794 + * KVM: s390: move kvm_guest_enter,exit closer to sie + - LP: #1221794 + * ext4: fix retry handling in ext4_ext_truncate() + - LP: #1221794 + * spi: spi-davinci: Fix direction in dma_map_single() + - LP: #1221794 + * [SCSI] megaraid_sas: megaraid_sas driver init fails in kdump kernel + - LP: #1221794 + * ACPI / PM: Fix /proc/acpi/wakeup for devices w/o bus or parent + - LP: #1221794 + * ACPI / PM: Walk physical_node_list under physical_node_lock + - LP: #1221794 + * regmap: Add missing header for !CONFIG_REGMAP stubs + - LP: #1221794 + * userns: unshare_userns(&cred) should not populate cred on failure + - LP: #1221794 + * userns: limit the maximum depth of user_namespace->parent chain + - LP: #1221794 + * drm/cirrus: Invalidate page tables when pinning a BO + - LP: #1221794 + * drm/mgag200: Invalidate page tables when pinning a BO + - LP: #1221794 + * drm/ast: invalidate page tables when pinning a BO + - LP: #1221794 + * drm/i915: do not disable backlight on vgaswitcheroo switch off + - LP: #1221794 + * ALSA: 6fire: fix DMA issues with URB transfer_buffer usage + - LP: #1221794 + * drm: Don't pass negative delta to ktime_sub_ns() + - LP: #1221794 + * ALSA: usb-audio: do not trust too-big wMaxPacketSize values + - LP: #1221794 + * hwmon: (adt7470) Fix incorrect return code check + - LP: #1221794 + * powerpc: On POWERNV enable PPC_DENORMALISATION by default + - LP: #1221794 + * Btrfs: release both paths before logging dir/changed extents + - LP: #1221794 + * sched: Ensure update_cfs_shares() is called for parents of + continuously-running tasks + - LP: #1221794 + * cifs: extend the buffer length enought for sprintf() using + - LP: #1221794 + * perf/x86: Fix intel QPI uncore event definitions + - LP: #1221794 + * cifs: don't instantiate new dentries in readdir for inodes that need to + be revalidated immediately + - LP: #1221794 + * ext4: allow the mount options nodelalloc and data=journal + - LP: #1221794 + * ext4: fix mount/remount error messages for incompatible mount options + - LP: #1221794 + * microblaze: fix clone syscall + - LP: #1221794 + * fs/proc/task_mmu.c: fix buffer overflow in add_page_map() + - LP: #1221794 + * arcnet: cleanup sizeof parameter + - LP: #1221794 + * sysctl net: Keep tcp_syn_retries inside the boundary + - LP: #1221794 + * ipv6: take rtnl_lock and mark mrt6 table as freed on namespace cleanup + - LP: #1221794 + * usbnet: do not pretend to support SG/TSO + - LP: #1221794 + * net_sched: Fix stack info leak in cbq_dump_wrr(). + - LP: #1221794 + * af_key: more info leaks in pfkey messages + - LP: #1221794 + * atl1c: use custom skb allocator + - LP: #1221794 + * net_sched: info leak in atm_tc_dump_class() + - LP: #1221794 + * ndisc: Add missing inline to ndisc_addr_option_pad + - LP: #1221794 + * 8139cp: Add dma_mapping_error checking + - LP: #1221794 + * net/mlx4_core: VFs must ignore the enable_64b_cqe_eqe module param + - LP: #1221794 + * Linux 3.8.13.7 + - LP: #1221794 + * mac80211: fix infinite loop in ieee80211_determine_chantype + - LP: #1221794 + * cfg80211/mac80211: disconnect on suspend + - LP: #1221794 + * cfg80211: fix P2P GO interface teardown + - LP: #1221794 + * iwl4965: set power mode early + - LP: #1221794 + * iwl4965: reset firmware after rfkill off + - LP: #1221794 + * ASoC: cs42l52: Reorder Min/Max and update to SX_TLV for Beep Volume + - LP: #1221794 + * can: pcan_usb: fix wrong memcpy() bytes length + - LP: #1221794 + * ALSA: 6fire: make buffers DMA-able (pcm) + - LP: #1221794 + * ALSA: 6fire: make buffers DMA-able (midi) + - LP: #1221794 + * jbd2: Fix use after free after error in jbd2_journal_dirty_metadata() + - LP: #1221794 + * USB: EHCI: accept very late isochronous URBs + - LP: #1221794 + * USB-Serial: Fix error handling of usb_wwan + - LP: #1221794 + * USB: mos7840: fix big-endian probe + - LP: #1221794 + * USB: adutux: fix big-endian device-type reporting + - LP: #1221794 + * USB: ti_usb_3410_5052: fix big-endian firmware handling + - LP: #1221794 + * m68k/atari: ARAnyM - Fix NatFeat module support + - LP: #1221794 + * m68k: Truncate base in do_div() + - LP: #1221794 + * usb: add two quirky touchscreen + - LP: #1221794 + * USB: mos7720: fix broken control requests + - LP: #1221794 + * USB: keyspan: fix null-deref at disconnect and release + - LP: #1221794 + * ASoC: tegra: fix Tegra30 I2S capture parameter setup + - LP: #1221794 + * ALSA: hda - Add a fixup for Gateway LT27 + - LP: #1221794 + * mm: fix the TLB range flushed when __tlb_remove_page() runs out of + slots + - LP: #1221794 + * arch, mm: Remove tlb_fast_mode() + - LP: #1221794 + * Fix TLB gather virtual address range invalidation corner cases + - LP: #1221794 + * s390: Fix broken build + - LP: #1221794 + * x86 get_unmapped_area: Access mmap_legacy_base through mm_struct member + - LP: #1221794 + * Bluetooth: Add support for Foxconn/Hon Hai [0489:e04d] + - LP: #1221794 + * Bluetooth: ath3k: Add support for Fujitsu Lifebook UH5x2 [04c5:1330] + - LP: #1221794 + * Bluetooth: ath3k: Add support for ID 0x13d3/0x3402 + - LP: #1221794 + * Bluetooth: Add support for Atheros [0cf3:e003] + - LP: #1221794 + * iwlwifi: dvm: fix calling ieee80211_chswitch_done() with NULL + - LP: #1221794 + * iwlwifi: pcie: disable L1 Active after pci_enable_device + - LP: #1221794 + * zd1201: do not use stack as URB transfer_buffer + - LP: #1221794 + * Hostap: copying wrong data prism2_ioctl_giwaplist() + - LP: #1221794 + * ARM: at91/DT: fix at91sam9n12ek memory node + - LP: #1221794 + * drm/i915: Move num_pipes to intel info + - LP: #1221794 + * drm/i915: Don't deref pipe->cpu_transcoder in the hangcheck code + - LP: #1221794 + * drm/i915: Invalidate TLBs for the rings after a reset + - LP: #1221794 + * libata: apply behavioral quirks to sil3826 PMP + - LP: #1221794 + * ARM: davinci: nand: specify ecc strength + - LP: #1221794 + * ARM: allow kuser helpers to be removed from the vector page + - LP: #1221794 + * ARM: 7816/1: CONFIG_KUSER_HELPERS: fix help text + - LP: #1221794 + * arm64: perf: fix array out of bounds access in armpmu_map_hw_event() + - LP: #1221794 + * arm64: perf: fix event validation for software group leaders + - LP: #1221794 + * sata_fsl: save irqs while coalescing + - LP: #1221794 + * xen/events: initialize local per-cpu mask for all possible events + - LP: #1221794 + * xen/events: mask events when changing their VCPU binding + - LP: #1221794 + * block: Add bio_for_each_segment_all() + - LP: #1221794 + * [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a + signal + - LP: #1221794 + * of: fdt: fix memory initialization for expanded DT + - LP: #1221794 + * [SCSI] zfcp: fix lock imbalance by reworking request queue locking + - LP: #1221794 + * [SCSI] zfcp: fix schedule-inside-lock in scsi_device list loops + - LP: #1221794 + * drivers/platform/olpc/olpc-ec.c: initialise earlier + - LP: #1221794 + * nilfs2: remove double bio_put() in nilfs_end_bio_write() for + BIO_EOPNOTSUPP error + - LP: #1221794 + * nilfs2: fix issue with counting number of bio requests for + BIO_EOPNOTSUPP error detection + - LP: #1221794 + * Linux 3.8.13.8 + - LP: #1221794 + * drm/nouveau: fix reclocking on nv40 + - LP: #1222898 + * mfd: rtsx: Read vendor setting from config space + - LP: #1201698 + + [ Wen-chien Jesse Sung ] + + * SAUCE: Bluetooth: use hci_send_cmd instead of usb_control_msg + - LP: #1065400 + + -- Tim Gardner Fri, 23 Aug 2013 09:00:39 -0600 + +linux (3.8.0-30.44) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1215596 + + [ Upstream Kernel Changes ] + + * Don't attempt to send extended INQUIRY command if skip_vpd_pages is set + - LP: #1215155 + + -- Steve Conklin Thu, 22 Aug 2013 15:04:40 -0500 + +linux (3.8.0-30.43) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1215095 + + [ Andy Whitcroft ] + + * [Packaging] supply perf with appropriate prefix to ensure use of local + config + - LP: #1206200 + - CVE-2013-1060 + + [ Brad Figg ] + + * Start new release + + [ John Johansen ] + + * Revert "SAUCE: (no-up) AppArmor: Disable Add PR_{GET,SET}_NO_NEW_PRIVS + to prevent execve from granting privs" + - LP: #1202161 + + [ Joseph Salisbury ] + + * SAUCE: (no-up) intel_ips: blacklist ASUSTek G60JX laptops + - LP: #1210848 + + [ Kamal Mostafa ] + + * SAUCE: (no-up) Revert "SAUCE: (no-up) drm/i915: quirk no PCH_PWM_ENABLE + for Dell XPS13 backlight" + + [ Tim Gardner ] + + * [Config] Include rbd and kvm in the virtual inclusion list + - LP: #1206961 + + [ Upstream Kernel Changes ] + + * Revert "drm/i915: Workaround incoherence between fences and LLC across + multiple CPUs" + - LP: #1207977 + * xen/blkback: Check device permissions before allowing OP_DISCARD + - LP: #1207977 + * ASoC: sglt5000: Fix the default value of CHIP_SSS_CTRL + - LP: #1207977 + * ASoC: sglt5000: Fix SGTL5000_PLL_FRAC_DIV_MASK + - LP: #1207977 + * drm/i915: Correct obj->mm_list link to + dev_priv->dev_priv->mm.inactive_list + - LP: #1207977 + * drm/i915: fix up ring cleanup for the i830/i845 CS tlb w/a + - LP: #1207977 + * Partially revert "drm/i915: unconditionally use mt forcewake on + hsw/ivb" + - LP: #1207977 + * drm/i915: Fix write-read race with multiple rings + - LP: #1207977 + * drm/i915: merge {i965, sandybridge}_write_fence_reg() + - LP: #1207977 + * drm/i915: Fix incoherence with fence updates on Sandybridge+ + - LP: #1207977 + * drm/i915: rename sdvox_reg to hdmi_reg on HDMI context + - LP: #1207977 + * drm/i915: don't setup hdmi for port D edp in ddi_init + - LP: #1207977 + * drm/i915: Preserve the DDI_A_4_LANES bit from the bios + - LP: #1207977 + * drm/radeon/hdmi: make sure we have an afmt block assigned + - LP: #1207977 + * drm/radeon: allocate SA bo in the requested domain + - LP: #1207977 + * drm/radeon: allow selection of alignment in the sub-allocator + - LP: #1207977 + * ACPI / memhotplug: Fix a stale pointer in error path + - LP: #1207977 + * PM / Sleep: avoid 'autosleep' in shutdown progress + - LP: #1207977 + * ext4: fix error handling in ext4_ext_truncate() + - LP: #1207977 + * radeon kms: do not flush uninitialized hotplug work + - LP: #1207977 + * ALSA: asihpi: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: atiixp: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: 6fire: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: ua101: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: usx2y: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ALSA: pxa2xx: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ASoC: atmel: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * ASoC: s6000: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * saa7134: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * staging: line6: Fix unlocked snd_pcm_stop() call + - LP: #1207977 + * x86, suspend: Handle CPUs which fail to #GP on RDMSR + - LP: #1207977 + * ALSA: hda - Add new GPU codec ID to snd-hda + - LP: #1207977 + * drm/i915: fix long-standing SNB regression in power consumption after + resume v2 + - LP: #1207977 + * ACPI / video: ignore BIOS initial backlight value for Fujitsu E753 + - LP: #1207977 + * arm64: mm: don't treat user cache maintenance faults as writes + - LP: #1207977 + * Btrfs: fix lock leak when resuming snapshot deletion + - LP: #1207977 + * Btrfs: re-add root to dead root list if we stop dropping it + - LP: #1207977 + * drm/i915: inverted brightness quirk for Acer Aspire 4736Z + - LP: #1207977 + * drm/i915: quirk no PCH_PWM_ENABLE for Dell XPS13 backlight + - LP: #1162026, #1163720, #1207977 + * drm/i915: Serialize almost all register access + - LP: #1207977 + * drm/i915: fix up gt init sequence fallout + - LP: #1207977 + * powerpc/modules: Module CRC relocation fix causes perf issues + - LP: #1207977 + * sparc32: vm_area_struct access for old Sun SPARCs. + - LP: #1207977 + * sparc64 address-congruence property + - LP: #1207977 + * sparc: tsb must be flushed before tlb + - LP: #1207977 + * bridge: fix switched interval for MLD Query types + - LP: #1207977 + * ipv4: Fixed MD5 key lookups when adding/ removing MD5 to/ from TCP + sockets. + - LP: #1207977 + * ipv6: don't call addrconf_dst_alloc again when enable lo + - LP: #1207977 + * macvtap: fix recovery from gup errors + - LP: #1207977 + * ipv6: ip6_sk_dst_check() must not assume ipv6 dst + - LP: #1207977 + * af_key: fix info leaks in notify messages + - LP: #1207977 + * sh_eth: fix unhandled RFE interrupt + - LP: #1207977 + * neighbour: fix a race in neigh_destroy() + - LP: #1207977 + * x25: Fix broken locking in ioctl error paths. + - LP: #1207977 + * net: Swap ver and type in pppoe_hdr + - LP: #1207977 + * vti: remove duplicated code to fix a memory leak + - LP: #1207977 + * ipv6,mcast: always hold idev->lock before mca_lock + - LP: #1207977 + * l2tp: add missing .owner to struct pppox_proto + - LP: #1207977 + * ipv6: call udp_push_pending_frames when uncorking a socket with AF_INET + pending data + - LP: #1207977 + * ipv6: ip6_append_data_mtu did not care about pmtudisc and frag_size + - LP: #1207977 + * sunvnet: vnet_port_remove must call unregister_netdev + - LP: #1207977 + * ifb: fix rcu_sched self-detected stalls + - LP: #1207977 + * tuntap: correctly linearize skb when zerocopy is used + - LP: #1207977 + * macvtap: correctly linearize skb when zerocopy is used + - LP: #1207977 + * ipv6: in case of link failure remove route directly instead of letting + it expire + - LP: #1207977 + * 9p: fix off by one causing access violations and memory corruption + - LP: #1207977 + * dummy: fix oops when loading the dummy failed + - LP: #1207977 + * ifb: fix oops when loading the ifb failed + - LP: #1207977 + * atl1e: fix dma mapping warnings + - LP: #1207977 + * atl1e: unmap partially mapped skb on dma error and free skb + - LP: #1207977 + * ipv4: set transport header earlier + - LP: #1207977 + * tuntap: do not zerocopy if iov needs more pages than MAX_SKB_FRAGS + - LP: #1207977 + * macvtap: do not zerocopy if iov needs more pages than MAX_SKB_FRAGS + - LP: #1207977 + * vlan: fix a race in egress prio management + - LP: #1207977 + * Linux 3.8.13.6 + - LP: #1207977 + * Fix HDIO_DRIVE_* ioctl() Linux 3.9 regression + - LP: #1182247 + * block/partitions: optimize memory allocation in check_partition() + - LP: #1206837 + * ALSA: hda - Add power state filtering + - LP: #1183125 + * ALSA: hda - Yet another fix for broken HSW HDMI pin connections + - LP: #1183125 + * ALSA: hda - Apply pin-enablement workaround to all Haswell HDMI codecs + - LP: #1183125 + + -- Steve Conklin Wed, 21 Aug 2013 14:33:20 -0500 + +linux (3.8.0-29.42) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1211934 + + [ Upstream Kernel Changes ] + + * Revert "veth: avoid a NULL deref in veth_stats_one" + * Revert "veth: extend device features" + * Revert "veth: reduce stat overhead" + + -- Brad Figg Tue, 13 Aug 2013 11:53:26 -0700 + +linux (3.8.0-28.41) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1205373 + + [ Andy Whitcroft ] + + * [Config] add iwldvm to nic-modules + - LP: #1204194 + + [ Brad Figg ] + + * [Config] added qlcnic driver to d-i modules + - LP: #1196597 + + [ Rob Herring ] + + * SAUCE: ARM: highbank: Only touch common coherency control register + fields + - LP: #1196946 + + [ Upstream Kernel Changes ] + + * hp-wmi: add more definitions for new event_id's + - LP: #1152458 + * MFD: rtsx_pcr: Fix probe fail path + - LP: #1201321 + * mfd: rtsx: Add support for RTL8411B + - LP: #1201321 + * veth: reduce stat overhead + - LP: #1201869 + * veth: extend device features + - LP: #1201869 + * veth: avoid a NULL deref in veth_stats_one + - LP: #1201869 + * Input: elantech - fix for newer hardware versions (v7) + - LP: #1166442 + * UBIFS: correct mount message + - LP: #1204666 + * zfcp: fix adapter (re)open recovery while link to SAN is down + - LP: #1204666 + * zfcp: block queue limits with data router + - LP: #1204666 + * zfcp: status read buffers on first adapter open with link down + - LP: #1204666 + * ahci: Add AMD CZ SATA device ID + - LP: #1204666 + * i2c-piix4: Add AMD CZ SMBus device ID + - LP: #1204666 + * sata_highbank: increase retry count but shorten duration for Calxeda + controller + - LP: #1204666 + * clocksource: dw_apb: Fix error check + - LP: #1204666 + * zram: avoid invalid memory access in zram_exit() + - LP: #1204666 + * zram: use zram->lock to protect zram_free_page() in swap free notify + path + - LP: #1204666 + * zram: destroy all devices on error recovery path in zram_init() + - LP: #1204666 + * zram: avoid access beyond the zram device + - LP: #1204666 + * zram: protect sysfs handler from invalid memory access + - LP: #1204666 + * pcmcia: at91_cf: fix gpio_get_value in at91_cf_get_status + - LP: #1204666 + * PCI: Fix refcount issue in pci_create_root_bus() error recovery path + - LP: #1204666 + * ahci: remove pmp link online check in FBS EH + - LP: #1204666 + * usb: gadget: f_mass_storage: add missing memory barrier for + thread_wakeup_needed + - LP: #1204666 + * x86, efi: retry ExitBootServices() on failure + - LP: #1204666 + * libata: skip SRST for all SIMG [34]7x port-multipliers + - LP: #1204666 + * ASoC: wm8962: Remove remaining direct register cache accesses + - LP: #1204666 + * xen/pcifront: Deal with toolstack missing 'XenbusStateClosing' state. + - LP: #1204666 + * ACPICA: Do not use extended sleep registers unless HW-reduced bit is + set + - LP: #1204666 + * ALSA: hda - Cache the MUX selection for generic HDMI + - LP: #1204666 + * cgroup: fix umount vs cgroup_cfts_commit() race + - LP: #1204666 + * cgroup: fix umount vs cgroup_event_remove() race + - LP: #1204666 + * xhci: check for failed dma pool allocation + - LP: #1204666 + * powerpc/eeh: Fix fetching bus for single-dev-PE + - LP: #1204666 + * ata_piix: IDE-mode SATA patch for Intel Coleto Creek DeviceIDs + - LP: #1204666 + * ahci: AHCI-mode SATA patch for Intel Coleto Creek DeviceIDs + - LP: #1204666 + * ARM: 7765/1: perf: Record the user-mode PC in the call chain. + - LP: #1204666 + * mpt2sas: Fix for issue Missing delay not getting set during system + bootup + - LP: #1204666 + * mpt2sas: Fix for device scan following host reset could get stuck in a + infinite loop + - LP: #1204666 + * mpt2sas: fix firmware failure with wrong task attribute + - LP: #1204666 + * usb: host: xhci-plat: release mem region while removing module + - LP: #1204666 + * USB: option,qcserial: move Novatel Gobi1K IDs to qcserial + - LP: #1204666 + * powerpc/hw_brk: Fix setting of length for exact mode breakpoints + - LP: #1204666 + * crypto: algboss - Hold ref count on larval + - LP: #1204666 + * x86: Fix /proc/mtrr with base/size more than 44bits + - LP: #1204666 + * futex: Take hugepages into account when generating futex_key + - LP: #1204666 + * pch_uart: Add uart_clk selection for the MinnowBoard + - LP: #1204666 + * perf: Disable monitoring on setuid processes for regular users + - LP: #1204666 + * sd: Fix parsing of 'temporary ' cache mode prefix + - LP: #1204666 + * Handle big endianness in NTLM (ntlmv2) authentication + - LP: #1204666 + * sd: Update WRITE SAME heuristics + - LP: #1204666 + * aacraid: Fix for arrays are going offline in the system. System hangs + - LP: #1204666 + * genirq: Fix can_request_irq() for IRQs without an action + - LP: #1204666 + * timer: Fix jiffies wrap behavior of round_jiffies_common() + - LP: #1204666 + * xen/time: remove blocked time accounting from xen "clockchip" + - LP: #1204666 + * UBIFS: prepare to fix a horrid bug + - LP: #1204666 + * UBIFS: fix a horrid bug + - LP: #1204666 + * powerpc/smp: Section mismatch from smp_release_cpus to __initdata + spinning_secondaries + - LP: #1204666 + * ext4: fix corruption when online resizing a fs with 1K block size + - LP: #1204666 + * jbd2: move superblock checksum calculation to jbd2_write_superblock() + - LP: #1204666 + * ext3,ext4: don't mess with dir_file->f_pos in htree_dirblock_to_tree() + - LP: #1204666 + * jbd2: fix theoretical race in jbd2__journal_restart + - LP: #1204666 + * tick: Prevent uncontrolled switch to oneshot mode + - LP: #1204666 + * md/raid10: fix two bugs affecting RAID10 reshape. + - LP: #1204666 + * HID: apple: Add support for the 2013 Macbook Air + - LP: #1204666 + * Input: bcm5974 - add support for the 2013 MacBook Air + - LP: #1204666 + * drivers/dma/pl330.c: fix locking in pl330_free_chan_resources() + - LP: #1204666 + * ocfs2: xattr: fix inlined xattr reflink + - LP: #1204666 + * block: do not pass disk names as format strings + - LP: #1204666 + - CVE-2013-2851 + * crypto: sanitize argument for format string + - LP: #1204666 + * mm/memory-hotplug: fix lowmem count overflow when offline pages + - LP: #1204666 + * drivers/rtc/rtc-rv3029c2.c: fix disabling AIE irq + - LP: #1204666 + * nbd: correct disconnect behavior + - LP: #1204666 + * hpfs: better test for errors + - LP: #1204666 + * ext3: fix data=journal fast mount/umount hang + - LP: #1204666 + * netfilter: xt_TCPOPTSTRIP: fix possible mangling beyond packet boundary + - LP: #1204666 + * netfilter: ipt_ULOG: fix non-null terminated string in the nf_log path + - LP: #1204666 + * netfilter: add nf_ipv6_ops hook to fix xt_addrtype with IPv6 + - LP: #1204666 + * ipvs: Fix reuse connection if real server is dead + - LP: #1204666 + * netfilter: xt_LOG: fix mark logging for IPv6 packets + - LP: #1204666 + * ipvs: info leak in __ip_vs_get_dest_entries() + - LP: #1204666 + * netfilter: nfnetlink_cttimeout: fix incomplete dumping of objects + - LP: #1204666 + * netfilter: nfnetlink_acct: fix incomplete dumping of objects + - LP: #1204666 + * netfilter: xt_TCPMSS: Fix violation of RFC879 in absence of MSS option + - LP: #1204666 + * netfilter: xt_TCPOPTSTRIP: don't use tcp_hdr() + - LP: #1204666 + * netfilter: xt_TCPMSS: Fix missing fragmentation handling + - LP: #1204666 + * netfilter: xt_TCPMSS: Fix IPv6 default MSS too + - LP: #1204666 + * ipvs: SCTP ports should be writable in ICMP packets + - LP: #1204666 + * tracing: Use current_uid() for critical time tracing + - LP: #1204666 + * ext4: fix overflow when counting used blocks on 32-bit architectures + - LP: #1204666 + * ext4: fix data offset overflow in ext4_xattr_fiemap() on 32-bit archs + - LP: #1204666 + * ext4: fix overflows in SEEK_HOLE, SEEK_DATA implementations + - LP: #1204666 + * ext4: fix data offset overflow on 32-bit archs in + ext4_inline_data_fiemap() + - LP: #1204666 + * iommu/vt-d: add quirk for broken interrupt remapping on 55XX chipsets + - LP: #1204666 + * iommu: Fix compile warnings with forward declarations + - LP: #1204666 + * dma: tegra: avoid channel lock up after free + - LP: #1204666 + * drivers/cdrom/cdrom.c: use kzalloc() for failing hardware + - LP: #1204666 + * printk: Fix rq->lock vs logbuf_lock unlock lock inversion + - LP: #1204666 + * charger-manager: Ensure event is not used as format string + - LP: #1204666 + * drm/radeon: add backlight quirk for hybrid mac + - LP: #1204666 + * b43: ensue that BCMA is "y" when B43 is "y" + - LP: #1204666 + * ath9k_hw: Assign default xlna config for AR9485 + - LP: #1204666 + * ath9k: Do not assign noise for NULL caldata + - LP: #1204666 + * iwlwifi: pcie: fix race in queue unmapping + - LP: #1204666 + * iwlwifi: pcie: wake the queue if stopped when being unmapped + - LP: #1204666 + * rtlwifi: rtl8192cu: Add new USB ID for TP-Link TL-WN8200ND + - LP: #1204666 + * media: dmxdev: remove dvb_ringbuffer_flush() on writer side + - LP: #1204666 + * MIPS: Octeon: Don't clobber bootloader data structures. + - LP: #1204666 + * iommu/amd: Only unmap large pages from the first pte + - LP: #1204666 + * rt2x00: read 5GHz TX power values from the correct offset + - LP: #1204666 + * rtlwifi: rtl8723ae: Fix typo in firmware names + - LP: #1204666 + * writeback: Fix periodic writeback after fs mount + - LP: #1204666 + * drm/i915: Fix context sizes on HSW + - LP: #1204666 + * drm/i915: Only clear write-domains after a successful wait-seqno + - LP: #1204666 + * nfsd4: fix decoding of compounds across page boundaries + - LP: #1204666 + * svcrpc: fix handling of too-short rpc's + - LP: #1204666 + * svcrpc: don't error out on small tcp fragment + - LP: #1204666 + * ARM: shmobile: emev2 GIO3 resource fix + - LP: #1204666 + * Btrfs: fix unlock after free on rewinded tree blocks + - LP: #1204666 + * Btrfs: hold the tree mod lock in __tree_mod_log_rewind + - LP: #1204666 + * Btrfs: only do the tree_mod_log_free_eb if this is our last ref + - LP: #1204666 + * uprobes: Fix return value in error handling path + - LP: #1204666 + * module: do percpu allocation after uniqueness check. No, really! + - LP: #1204666 + * libceph: Fix NULL pointer dereference in auth client code + - LP: #1204666 + - CVE-2013-1059 + * use sensible file nlink values if unprovided + - LP: #1204666 + * drm/nouveau: use vmalloc for pgt allocation + - LP: #1204666 + * drm/nva3/disp: Fix HDMI audio regression + - LP: #1204666 + * ACPI / power: add missing newline to debug messages + - LP: #1204666 + * megaraid_sas: fix memory leak if SGL has zero length entries + - LP: #1204666 + * iscsi-target: Fix tfc_tpg_nacl_auth_cit configfs length overflow + - LP: #1204666 + * mpt3sas: fix for kernel panic when driver loads with HBA conected to + non LUN 0 configured expander + - LP: #1204666 + * mpt3sas: Infinite loops can occur if MPI2_IOCSTATUS_CONFIG_INVALID_PAGE + is not returned + - LP: #1204666 + * parisc: Fix gcc miscompilation in pa_memcpy() + - LP: #1204666 + * ARM: 7778/1: smp_twd: twd_update_frequency need be run on all online + CPUs + - LP: #1204666 + * dm mpath: fix ioctl deadlock when no paths + - LP: #1204666 + * dm ioctl: set noio flag to avoid __vmalloc deadlock + - LP: #1204666 + * dm verity: fix inability to use a few specific devices sizes + - LP: #1204666 + * CIFS: Fix a deadlock when a file is reopened + - LP: #1204666 + * perf: Clone child context from parent context pmu + - LP: #1204666 + * perf: Remove WARN_ON_ONCE() check in __perf_event_enable() for valid + scenario + - LP: #1204666 + * perf: Fix perf_lock_task_context() vs RCU + - LP: #1204666 + * x86, efivars: firmware bug workarounds should be in platform code + - LP: #1204666 + * x86, efi: remove duplicate code in setup_arch() by using, + efi_is_native() + - LP: #1204666 + * x86,efi: Implement efi_no_storage_paranoia parameter + - LP: #1204666 + * Modify UEFI anti-bricking code + - LP: #1204666 + * x86/efi: Fix dummy variable buffer allocation + - LP: #1204666 + * lockd: protect nlm_blocked access in nlmsvc_retry_blocked + - LP: #1204666 + * ext4: don't show usrquota/grpquota twice in /proc/mounts + - LP: #1204666 + * ext4: don't allow ext4_free_blocks() to fail due to ENOMEM + - LP: #1204666 + * svcrdma: underflow issue in decode_write_list() + - LP: #1204666 + * Linux 3.8.13.5 + - LP: #1204666 + * fanotify: info leak in copy_event_to_user() + - LP: #1188356 + - CVE-2013-2148 + * ipv6: only static routes qualify for equal cost multipathing + - LP: #1202990 + - CVE-2013-4125 + * vhost-net: fix use-after-free in vhost_net_flush + - LP: #1202992 + - CVE-2013-4127 + + -- Brad Figg Fri, 26 Jul 2013 08:14:02 -0700 + +linux (3.8.0-27.40) raring; urgency=low + + [Brad Figg] + + * UBUNTU: [Config] CONFIG_ARM_ERRATA_643719=y + + -- Brad Figg Mon, 08 Jul 2013 16:06:32 -0700 + +linux (3.8.0-27.39) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1199128 + + [ Brad Figg ] + + * [Config] CONFIG_ATH9K_LEGACY_RATE_CONTROL=y + + [ Seth Forshee ] + + * SAUCE: Work around broken ACPI backlight on ThinkPad T430 + - LP: #1183856 + + [ Stefan Bader ] + + * (d-i) Add dm-snapshot to md-modules + - LP: #1191726 + + [ Tim Gardner ] + + * [Config] CONFIG_SUNRPC_DEBUG=y + - LP: #1127319 + + [ Upstream Kernel Changes ] + + * Revert "ath9k_hw: Update rx gain initval to improve rx sensitivity" + - LP: #1193126 + * Revert "serial: 8250_pci: add support for another kind of NetMos + Technology PCI 9835 Multi-I/O Controller" + - LP: #1190967 + * mac80211: close AP_VLAN interfaces before unregistering all + - LP: #1193126 + * ath9k: use correct OTP register offsets for AR9550 + - LP: #1193126 + * regulator: palmas: Fix "enable_reg" to point to the correct reg for + SMPS10 + - LP: #1193126 + * net: can: kvaser_usb: fix reception on "USBcan Pro" and "USBcan R" type + hardware. + - LP: #1193126 + * tg3: Add read dma workaround for 5720 + - LP: #1193126 + * xhci-mem: init list heads at the beginning of init + - LP: #1193126 + * xhci: fix list access before init + - LP: #1193126 + * xhci - correct comp_mode_recovery_timer on return from hibernate + - LP: #1193126 + * xhci: Disable D3cold for buggy TI redrivers. + - LP: #1193126 + * usb: dwc3: pci: PHY should be deleted later than dwc3 core + - LP: #1193126 + * usb: dwc3: gadget: free trb pool only from epnum 2 + - LP: #1193126 + * usb: musb: make use_sg flag URB specific + - LP: #1193126 + * USB: revert periodic scheduling bugfix + - LP: #1193126 + * USB: serial: fix Treo/Kyocera interrrupt-in urb context + - LP: #1193126 + * USB: visor: fix initialisation of Treo/Kyocera devices + - LP: #1193126 + * USB: mos7720: fix DMA to stack + - LP: #1193126 + * USB: mos7840: fix DMA to stack + - LP: #1193126 + * USB: ark3116: fix control-message timeout + - LP: #1193126 + * USB: iuu_phoenix: fix bulk-message timeout + - LP: #1193126 + * USB: mos7720: fix message timeouts + - LP: #1193126 + * USB: zte_ev: fix control-message timeouts + - LP: #1193126 + * USB: Serial: cypress_M8: Enable FRWD Dongle hidcom device + - LP: #1193126 + * USB: serial: Add Option GTM681W to qcserial device table. + - LP: #1193126 + * USB: zte_ev: fix broken open + - LP: #1193126 + * USB: keyspan: fix bogus array index + - LP: #1193126 + * USB: mos7720: fix hardware flow control + - LP: #1193126 + * x86/PCI: Map PCI setup data with ioremap() so it can be in highmem + - LP: #1193126 + * USB: whiteheat: fix broken port configuration + - LP: #1193126 + * USB: option: blacklist network interface on Huawei E1820 + - LP: #1193126 + * USB: option,zte_ev: move most ZTE CDMA devices to zte_ev + - LP: #1193126 + * ecryptfs: fixed msync to flush data + - LP: #1193126 + * dmaengine: ste_dma40: fix pm runtime ref counting + - LP: #1193126 + * cifs: fix off-by-one bug in build_unc_path_to_root + - LP: #1193126 + * ACPI video: ignore BIOS backlight value for HP dm4 + - LP: #1193126 + * ACPI video: ignore BIOS initial backlight value for HP 1000 + - LP: #1193126 + * ACPI / video: ignore BIOS initial backlight value for HP m4 + - LP: #1193126 + * ACPI / video: ignore BIOS initial backlight value for HP Pavilion g6 + - LP: #1193126 + * ALSA: usb-audio: fix Roland/Cakewalk UM-3G support + - LP: #1193126 + * drm: fix a use-after-free when GPU acceleration disabled + - LP: #1193126 + * drm/mgag200: Add missing write to index before accessing data register + - LP: #1193126 + * drm/i915: no lvds quirk for hp t5740 + - LP: #1193126 + * radeon: Fix system hang issue when using KMS with older cards + - LP: #1193126 + * drm/radeon: don't allow audio on DCE6 + - LP: #1193126 + * ALSA: usb-audio - Apply Logitech QuickCam Pro 9000 quirk only to audio + iface + - LP: #1193126 + * drm/i915/sdvo: Use &intel_sdvo->ddc instead of intel_sdvo->i2c for DDC. + - LP: #1193126 + * ALSA: usb-audio - Fix invalid volume resolution on Logitech HD webcam + c270 + - LP: #1193126 + * eCryptfs: Check return of filemap_write_and_wait during fsync + - LP: #1193126 + * acpi-cpufreq: set current frequency based on target P-State + - LP: #1193126 + * ARM: 7742/1: topology: export cpu_topology + - LP: #1193126 + * ARM: 7743/1: compressed/head.S: work around new binutils warning + - LP: #1193126 + * ARM: 7747/1: pcpu: ensure __my_cpu_offset cannot be re-ordered across + barrier() + - LP: #1193126 + * hwmon: (adm1021) Strengthen chip detection for ADM1021, LM84 and + MAX1617 + - LP: #1193126 + * hpfs: fix warnings when the filesystem fills up + - LP: #1193126 + * powerpc/eeh: Don't check RTAS token to get PE addr + - LP: #1193126 + * xen/smp: Fixup NOHZ per cpu data when onlining an offline CPU. + - LP: #1193126 + * ceph: fix statvfs fr_size + - LP: #1193126 + * libceph: must hold mutex for reset_changed_osds() + - LP: #1193126 + * ceph: add cpu_to_le32() calls when encoding a reconnect capability + - LP: #1193126 + * ceph: ceph_pagelist_append might sleep while atomic + - LP: #1193126 + * rbd: don't destroy ceph_opts in rbd_add() + - LP: #1193126 + * drm/gma500/psb: Unpin framebuffer on crtc disable + - LP: #1193126 + * drm/gma500/cdv: Unpin framebuffer on crtc disable + - LP: #1193126 + * drm/i915: prefer VBT modes for SVDO-LVDS over EDID + - LP: #1193126 + * Bluetooth: Fix missing length checks for L2CAP signalling PDUs + - LP: #1193126 + * Bluetooth: Fix mgmt handling of power on failures + - LP: #1193126 + * ath9k: Disable PowerSave by default + - LP: #1193126 + * ath9k: Use minstrel rate control by default + - LP: #1193126 + * b43: stop format string leaking into error msgs + - LP: #1193126 + - CVE-2013-2852 + * x86: Fix typo in kexec register clearing + - LP: #1193126 + * CPU hotplug: provide a generic helper to disable/enable CPU hotplug + - LP: #1193126 + * reboot: rigrate shutdown/reboot to boot cpu + - LP: #1193126 + * kmsg: honor dmesg_restrict sysctl on /dev/kmsg + - LP: #1193126 + * audit: wait_for_auditd() should use TASK_UNINTERRUPTIBLE + - LP: #1193126 + * cciss: fix broken mutex usage in ioctl + - LP: #1193126 + * drivers/rtc/rtc-twl.c: fix missing device_init_wakeup() when booted + with device tree + - LP: #1193126 + * swap: avoid read_swap_cache_async() race to deadlock while waiting on + discard I/O completion + - LP: #1193126 + * mm/page_alloc.c: fix watermark check in __zone_watermark_ok() + - LP: #1193126 + * mm: migration: add migrate_entry_wait_huge() + - LP: #1193126 + * md/raid1: consider WRITE as successful only if at least one non-Faulty + and non-rebuilding drive completed it. + - LP: #1193126 + * md/raid1,raid10: use freeze_array in place of raise_barrier in various + places. + - LP: #1193126 + * md/raid1,5,10: Disable WRITE SAME until a recovery strategy is in place + - LP: #1193126 + * Linux 3.8.13.3 + - LP: #1193126 + * mfd: lpc_ich: Add support for Intel Avoton SoC + - LP: #1196658 + * tg3: Add support for new 5762 ASIC + - LP: #1178899 + * tg3: Add NVRAM support for 5762 + - LP: #1178899 + * tg3: missing break statement in tg3_get_5720_nvram_info() + - LP: #1178899 + * tg3: Fix 5762 NVRAM sizing + - LP: #1178899 + * tg3: Fix data corruption on 5725 with TSO + - LP: #1178899 + * Drivers: hv: Execute shutdown in a thread context + - LP: #1180419 + * usb: dwc3: gadget: req->queued must be forced to false in cleanup + - LP: #1199100 + * idr: fix top layer handling + - LP: #1199100 + * Bluetooth: Add support for atheros 04ca:3004 device to ath3k + - LP: #1199100 + * Bluetooth: Device 0cf3:3008 should map AR 3012 + - LP: #1199100 + * regulator: fixed regulator_bulk_enable unwinding code + - LP: #1199100 + * perf: Fix error return code + - LP: #1199100 + * netrom: fix invalid use of sizeof in nr_recvmsg() + - LP: #1199100 + * r8169: honor jumbo settings when chipset is requested to start. + - LP: #1199100 + * nfsd4: don't allow owner override on 4.1 CLAIM_FH opens + - LP: #1199100 + * net: qmi_wwan: fixup missing ethernet header (firmware bug workaround) + - LP: #1199100 + * net: qmi_wwan: fixup destination address (firmware bug workaround) + - LP: #1199100 + * net: qmi_wwan: prevent duplicate mac address on link (firmware bug + workaround) + - LP: #1199100 + * Kirkwood: Enable PCIe port 1 on QNAP TS-11x/TS-21x + - LP: #1199100 + * ARM: plat-orion: Fix num_resources and id for ge10 and ge11 + - LP: #1199100 + * staging:iio:light:tsl2x7x: fix the error handling in tsl2x7x_probe() + - LP: #1199100 + * tg3: Skip powering down function 0 on certain serdes devices + - LP: #1199100 + * jfs: fix a couple races + - LP: #1199100 + * reiserfs: fix deadlock with nfs racing on create/lookup + - LP: #1199100 + * reiserfs: fix problems with chowning setuid file w/ xattrs + - LP: #1199100 + * reiserfs: fix spurious multiple-fill in reiserfs_readdir_dentry + - LP: #1199100 + * xen-netback: remove skb in xen_netbk_alloc_page + - LP: #1199100 + * xen-netback: fix sparse warning + - LP: #1199100 + * xen-netback: coalesce slots in TX path and fix regressions + - LP: #1199100 + * xen-netback: don't disconnect frontend when seeing oversize packet + - LP: #1199100 + * xen-netback: remove redundent parameter in netbk_count_requests + - LP: #1199100 + * xen-netback: avoid allocating variable size array on stack + - LP: #1199100 + * xen-netback: better names for thresholds + - LP: #1199100 + * xen-netfront: reduce gso_max_size to account for max TCP header + - LP: #1199100 + * iommu/amd: Re-enable IOMMU event log interrupt after handling. + - LP: #1199100 + * xen/events: Handle VIRQ_TIMER before any other hardirq in event loop. + - LP: #1199100 + * klist: del waiter from klist_remove_waiters before wakeup waitting + process + - LP: #1199100 + * drm/gma500: Increase max resolution for mode setting + - LP: #1199100 + * libceph: clear messenger auth_retry flag when we authenticate + - LP: #1199100 + * libceph: fix authorizer invalidation + - LP: #1199100 + * libceph: add update_authorizer auth method + - LP: #1199100 + * libceph: wrap auth ops in wrapper functions + - LP: #1199100 + * libceph: wrap auth methods in a mutex + - LP: #1199100 + * MODSIGN: do not send garbage to stderr when enabling modules signature + - LP: #1199100 + * Input: cyttsp - fix memcpy size param + - LP: #1199100 + * clk: remove notifier from list before freeing it + - LP: #1199100 + * USB: f81232: fix device initialisation at open + - LP: #1199100 + * USB: spcp8x5: fix device initialisation at open + - LP: #1199100 + * USB: pl2303: fix device initialisation at open + - LP: #1199100 + * drm/radeon: do not try to uselessly update virtual memory pagetable + - LP: #1199100 + * tg3: Wait for boot code to finish after power on + - LP: #1199100 + * target/iscsi: don't corrupt bh_count in iscsit_stop_time2retain_timer() + - LP: #1199100 + * tcm_qla2xxx: Fix residual for underrun commands that fail + - LP: #1199100 + * powerpc: Fix stack overflow crash in resume_kernel when ftracing + - LP: #1199100 + * powerpc: Fix emulation of illegal instructions on PowerNV platform + - LP: #1199100 + * powerpc: Fix missing/delayed calls to irq_work + - LP: #1199100 + * tilepro: work around module link error with gcc 4.7 + - LP: #1199100 + * ALSA: usb-audio: work around Android accessory firmware bug + - LP: #1199100 + * ALSA: usb-audio: Fix invalid volume resolution for Logitech HD Webcam + c310 + - LP: #1199100 + * ARM: 7752/1: errata: LoUIS bit field in CLIDR register is incorrect + - LP: #1199100 + * ARM: 7754/1: Fix the CPU ID and the mask associated to the PJ4B + - LP: #1199100 + * ARM: 7755/1: handle user space mapped pages in flush_kernel_dcache_page + - LP: #1199100 + * KVM: x86: remove vcpu's CPL check in host-invoked XCR set + - LP: #1199100 + * x86: fix build error and kconfig for ia32_emulation and binfmt + - LP: #1199100 + * x86: kvmclock: zero initialize pvclock shared memory area + - LP: #1199100 + * USB: serial: ti_usb_3410_5052: new device id for Abbot strip port cable + - LP: #1199100 + * perf: arm64: Record the user-mode PC in the call chain. + - LP: #1199100 + * drm/radeon: update lockup tracking when scheduling in empty ring + - LP: #1199100 + * tcp: fix tcp_md5_hash_skb_data() + - LP: #1199100 + * gianfar: add missing iounmap() on error in gianfar_ptp_probe() + - LP: #1199100 + * vxlan: Update vxlan fdb 'used' field after each usage + - LP: #1199100 + * ipv6: fix possible crashes in ip6_cork_release() + - LP: #1199100 + * netlabel: improve domain mapping validation + - LP: #1199100 + * r8169: fix offloaded tx checksum for small packets. + - LP: #1199100 + * 8139cp: reset BQL when ring tx ring cleared + - LP: #1199100 + * tcp: bug fix in proportional rate reduction. + - LP: #1199100 + * tcp: xps: fix reordering issues + - LP: #1199100 + * ip_tunnel: fix kernel panic with icmp_dest_unreach + - LP: #1199100 + * net: phy: fix a bug when verify the EEE support + - LP: #1199100 + * ipv4: fix redirect handling for TCP packets + - LP: #1199100 + * net: Block MSG_CMSG_COMPAT in send(m)msg and recv(m)msg + - LP: #1199100 + * net/core/sock.c: add missing VSOCK string in af_family_*_key_strings + - LP: #1199100 + * tuntap: forbid changing mq flag for persistent device + - LP: #1199100 + * net: force a reload of first item in hlist_nulls_for_each_entry_rcu + - LP: #1199100 + * ipv6: assign rt6_info to inet6_ifaddr in init_loopback + - LP: #1199100 + * vhost_net: clear msg.control for non-zerocopy case during tx + - LP: #1199100 + * net: sctp: fix NULL pointer dereference in socket destruction + - LP: #1199100 + * tuntap: set SOCK_ZEROCOPY flag during open + - LP: #1199100 + * team: check return value of team_get_port_by_index_rcu() for NULL + - LP: #1199100 + * team: move add to port list before port enablement + - LP: #1199100 + * packet: packet_getname_spkt: make sure string is always 0-terminated + - LP: #1199100 + * l2tp: Fix PPP header erasure and memory leak + - LP: #1199100 + * l2tp: Fix sendmsg() return value + - LP: #1199100 + * sctp: fully initialize sctp_outq in sctp_outq_init + - LP: #1199100 + * net: sh_eth: fix incorrect RX length error if R8A7740 + - LP: #1199100 + * hw_breakpoint: Fix cpu check in task_bp_pinned(cpu) + - LP: #1199100 + * hw_breakpoint: Use cpu_possible_mask in {reserve,release}_bp_slot() + - LP: #1199100 + * s390/ipl: Fix FCP WWPN and LUN format strings for read + - LP: #1199100 + * ARM: 7772/1: Fix missing flush_kernel_dcache_page() for noMMU + - LP: #1199100 + * libata-acpi: add back ACPI based hotplug functionality + - LP: #1199100 + * iwlwifi: dvm: fix chain noise calibration + - LP: #1199100 + * rt2800: fix RT5390 & RT3290 TX power settings regression + - LP: #1199100 + * Bluetooth: Fix crash in l2cap_build_cmd() with small MTU + - LP: #1199100 + * Bluetooth: Fix invalid length check in l2cap_information_rsp() + - LP: #1199100 + * ath9k_htc: Handle IDLE state transition properly + - LP: #1199100 + * dlci: acquire rtnl_lock before calling __dev_get_by_name() + - LP: #1199100 + * dlci: validate the net device in dlci_del() + - LP: #1199100 + * KVM: x86: fix deadlock in clock-in-progress request handling + - LP: #1199100 + * Linux 3.8.13.4 + - LP: #1199100 + + -- Brad Figg Thu, 20 Jun 2013 13:15:35 -0700 + +linux (3.8.0-26.38) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1191955 + + [ Dave Chiluk ] + + * SAUCE: ncpfs: fix rmdir returns Device or resource busy + - LP: #1035226 + + [ Upstream Kernel Changes ] + + * ARM: S5PV210: Fix PL330 DMA controller clkdev entries + - LP: #1187551 + * NFSv4: Handle NFS4ERR_DELAY and NFS4ERR_GRACE in + nfs4_lock_delegation_recall + - LP: #1187551 + * blkcg: fix "scheduling while atomic" in blk_queue_bypass_start + - LP: #1187551 + * audit: Syscall rules are not applied to existing processes on non-x86 + - LP: #1187551 + * menuconfig: Fix memory leak introduced by jump keys feature + - LP: #1187551 + * iommu/amd: Workaround for ERBT1312 + - LP: #1187551 + * drivers/rtc/rtc-at91rm9200.c: fix missing iounmap + - LP: #1187551 + * drm/mm: fix dump table BUG + - LP: #1187551 + * ASoC: wm8994: missing break in wm8994_aif3_hw_params() + - LP: #1187551 + * tile: support new Tilera hypervisor + - LP: #1187551 + * sd: fix array cache flushing bug causing performance problems + - LP: #1187551 + * ath9k: fix key allocation error handling for powersave keys + - LP: #1187551 + * target: Use FD_MAX_SECTORS/FD_BLOCKSIZE for blockdevs using fileio + - LP: #1187551 + * ext4: limit group search loop for non-extent files + - LP: #1187551 + * xen/vcpu/pvhvm: Fix vcpu hotplugging hanging. + - LP: #1187551 + * ALSA: HDA: Fix Oops caused by dereference NULL pointer + - LP: #1187551 + * iscsi-target: Fix processing of OOO commands + - LP: #1187551 + * audit: vfs: fix audit_inode call in O_CREAT case of do_last + - LP: #1187551 + * ACPICA: Fix possible buffer overflow during a field unit read operation + - LP: #1187551 + * qmi_wwan, cdc-ether: add ADU960S + - LP: #1187551 + * qmi_wwan/cdc_ether: add device IDs for Dell 5804 (Novatel E371) WWAN + card + - LP: #1187551 + * B43: Handle DMA RX descriptor underrun + - LP: #1187551 + * mwifiex: clear is_suspended flag when interrupt is received early + - LP: #1187551 + * mwifiex: fix memory leak issue when driver unload + - LP: #1187551 + * mwifiex: fix setting of multicast filter + - LP: #1187551 + * ARM: OMAP: RX-51: change probe order of touchscreen and panel SPI + devices + - LP: #1187551 + * hp_accel: Ignore the error from lis3lv02d_poweron() at resume + - LP: #1187551 + * KVM: VMX: fix halt emulation while emulating invalid guest sate + - LP: #1187551 + * nfsd: fix oops when legacy_recdir_name_error is passed a -ENOENT error + - LP: #1187551 + * shm: fix null pointer deref when userspace specifies invalid hugepage + size + - LP: #1187551 + * dm stripe: fix regression in stripe_width calculation + - LP: #1187551 + * dm snapshot: fix error return code in snapshot_ctr + - LP: #1187551 + * mm: teach mm by current context info to not do I/O during memory + allocation + - LP: #1187551 + * dm bufio: avoid a possible __vmalloc deadlock + - LP: #1187551 + * dm table: fix write same support + - LP: #1187551 + * tick: Cleanup NOHZ per cpu data on cpu down + - LP: #1187551 + * ACPI / EC: Restart transaction even when the IBF flag set + - LP: #1187551 + * drm/mgag200: Fix writes into MGA1064_PIX_CLK_CTL register + - LP: #1187551 + * drm/mgag200: Fix framebuffer base address programming + - LP: #1187551 + * drm/radeon: check incoming cliprects pointer + - LP: #1187551 + * arm64: debug: clear mdscr_el1 instead of taking the OS lock + - LP: #1187551 + * ARM: 7720/1: ARM v6/v7 cmpxchg64 shouldn't clear upper 32 bits of the + old/new value + - LP: #1187551 + * powerpc/kexec: Fix kexec when using VMX optimised memcpy + - LP: #1187551 + * powerpc: Bring all threads online prior to migration/hibernation + - LP: #1187551 + * arm64: mm: Fix operands of clz in __flush_dcache_all + - LP: #1187551 + * timer: Don't reinitialize the cpu base lock during CPU_UP_PREPARE + - LP: #1187551 + * target: close target_put_sess_cmd() vs. core_tmr_abort_task() race + - LP: #1187551 + * tracing: Fix leaks of filter preds + - LP: #1187551 + * usermodehelper: check subprocess_info->path != NULL + - LP: #1187551 + * drivers/char/ipmi: memcpy, need additional 2 bytes to avoid memory + overflow + - LP: #1187551 + * ipmi: ipmi_devintf: compat_ioctl method fails to take ipmi_mutex + - LP: #1187551 + * btrfs: don't stop searching after encountering the wrong item + - LP: #1187551 + * watchdog: Fix race condition in registration code + - LP: #1187551 + * pch_dma: Use GFP_ATOMIC because called from interrupt context + - LP: #1187551 + * ARM: EXYNOS5: Fix kernel dump in AFTR idle mode + - LP: #1187551 + * drivers/rtc/rtc-pcf2123.c: fix error return code in pcf2123_probe() + - LP: #1187551 + * tcp: force a dst refcount when prequeue packet + - LP: #1187551 + * sfc: Fix naming of MTD partitions for FPGA bitfiles + - LP: #1187551 + * net: tun: release the reference of tun device in tun_recvmsg + - LP: #1187551 + * net: mac802154: comparision issue of type cast, finding by + EXTRA_CFLAGS=-W + - LP: #1187551 + * tcp: reset timer after any SYNACK retransmit + - LP: #1187551 + * 3c509.c: call SET_NETDEV_DEV for all device types (ISA/ISAPnP/EISA) + - LP: #1187551 + * net_sched: act_ipt forward compat with xtables + - LP: #1187551 + * net: use netdev_features_t in skb_needs_linearize() + - LP: #1187551 + * net: vlan,ethtool: netdev_features_t is more than 32 bit + - LP: #1187551 + * bridge: fix race with topology change timer + - LP: #1187551 + * packet: tpacket_v3: do not trigger bug() on wrong header status + - LP: #1187551 + * virtio: don't expose u16 in userspace api + - LP: #1187551 + * 3c59x: fix freeing nonexistent resource on driver unload + - LP: #1187551 + * 3c59x: fix PCI resource management + - LP: #1187551 + * if_cablemodem.h: Add parenthesis around ioctl macros + - LP: #1187551 + * macvlan: fix passthru mode race between dev removal and rx path + - LP: #1187551 + * ipv6: do not clear pinet6 field + - LP: #1187551 + * ipv6,gre: do not leak info to user-space + - LP: #1187551 + * xfrm6: release dev before returning error + - LP: #1187551 + * drm/i915: add HAS_DDI check + - LP: #1187551 + * drm/i915: don't intel_crt_init on any ULT machines + - LP: #1187551 + * Linux 3.8.13.1 + - LP: #1187551 + * drbd: fix memory leak + - LP: #1191065 + * drbd: Fix build error when CONFIG_CRYPTO_HMAC is not set + - LP: #1191065 + * drbd: fix for deadlock when using automatic split-brain-recovery + - LP: #1191065 + * Input: egalax_ts - ABS_MT_POSITION_Y not reported well + - LP: #1191065 + * cifs: only set ops for inodes in I_NEW state + - LP: #1191065 + * staging: vt6656: use free_netdev instead of kfree + - LP: #1191065 + * hwmon: fix error return code in abituguru_probe() + - LP: #1191065 + * avr32: fix relocation check for signed 18-bit offset + - LP: #1191065 + * crypto: caam - fix inconsistent assoc dma mapping direction + - LP: #1191065 + * ARM: at91/dt: fix macb node declaration + - LP: #1191065 + * ARM: at91/trivial: fix model name for SAM9X25-EK + - LP: #1191065 + * USB: xHCI: override bogus bulk wMaxPacketSize values + - LP: #1191065 + * USB: UHCI: fix for suspend of virtual HP controller + - LP: #1191065 + * USB: fix latency in uhci-hcd and ohci-hcd + - LP: #1191065 + * USB: OHCI: fix logic for scheduling isochronous URBs + - LP: #1191065 + * cfg80211: fix wiphy_register error path + - LP: #1191065 + * mac80211: fix AP-mode frame matching + - LP: #1191065 + * staging: vt6656: [bug] Fix missing spin lock in iwctl_siwpower. + - LP: #1191065 + * usb, chipidea: fix link error when USB_EHCI_HCD is a module + - LP: #1191065 + * USB: reset resume quirk needed by a hub + - LP: #1191065 + * usb: option: Add Telewell TW-LTE 4G + - LP: #1191065 + * USB: Blacklisted Cinterion's PLxx WWAN Interface + - LP: #1191065 + * USB: option: add device IDs for Dell 5804 (Novatel E371) WWAN card + - LP: #1191065 + * i2c: designware: fix RX FIFO overrun + - LP: #1191065 + * i2c: designware: always clear interrupts before enabling them + - LP: #1191065 + * ath9k_hw: Use helper routines to simplify ar9003_hw_init_cal() + - LP: #1191065 + * ath9k_hw: Enable manual peak calibration for AR9485 + - LP: #1191065 + * USB: ftdi_sio: Add support for Newport CONEX motor drivers + - LP: #1191065 + * virtio_console: fix uapi header + - LP: #1191065 + * drm/nouveau/bios: fix thinko in ZM_MASK_ADD opcode + - LP: #1191065 + * drm/nvc0/ce: disable ce1 on a number of chipsets + - LP: #1191065 + * drm/radeon: Fix VRAM size calculation for VRAM >= 4GB + - LP: #1191065 + * USB: cxacru: potential underflow in cxacru_cm_get_array() + - LP: #1191065 + * TTY: Fix tty miss restart after we turn off flow-control + - LP: #1191065 + * drm/i915: add more VLV IDs + - LP: #1191065 + * drm/i915: Adding more reserved PCI IDs for Haswell. + - LP: #1191065 + * SUNRPC: Prevent an rpc_task wakeup race + - LP: #1191065 + * ARM: 7626/1: arm/crypto: Make asm SHA-1 and AES code Thumb-2 compatible + - LP: #1191065 + * ARM: 7723/1: crypto: sha1-armv4-large.S: fix SP handling + - LP: #1191065 + * perf: net_dropmonitor: Fix trace parameter order + - LP: #1191065 + * perf: net_dropmonitor: Fix symbol-relative addresses + - LP: #1191065 + * ACPI / video: Add "Asus UL30A" to ACPI video detect blacklist + - LP: #1191065 + * ARM: at91/dt: fix macb pinctrl_macb_rmii_mii_alt definition + - LP: #1191065 + * cifs: fix potential buffer overrun when composing a new options string + - LP: #1191065 + * fat: fix possible overflow for fat_clusters + - LP: #1191065 + * wait: fix false timeouts when using wait_event_timeout() + - LP: #1191065 + * mm: mmu_notifier: re-fix freed page still mapped in secondary MMU + - LP: #1191065 + * mm: memcg: remove incorrect VM_BUG_ON for swap cache pages in uncharge + - LP: #1191065 + * rapidio/tsi721: fix bug in MSI interrupt handling + - LP: #1191065 + * mm compaction: fix of improper cache flush in migration code + - LP: #1191065 + * mm/rmap: rename anon_vma_unlock() => anon_vma_unlock_write() + - LP: #1191065 + * mm/THP: use pmd_populate() to update the pmd with pgtable_t pointer + - LP: #1191065 + * drivers/leds/leds-ot200.c: fix error caused by shifted mask + - LP: #1191065 + * drivers/block/brd.c: fix brd_lookup_page() race + - LP: #1191065 + * nilfs2: fix issue of nilfs_set_page_dirty() for page at EOF boundary + - LP: #1191065 + * drivers/char/random.c: fix priming of last_data + - LP: #1191065 + * random: fix accounting race condition with lockless irq entropy_count + update + - LP: #1191065 + * ocfs2: goto out_unlock if ocfs2_get_clusters_nocache() failed in + ocfs2_fiemap() + - LP: #1191065 + * mm/pagewalk.c: walk_page_range should avoid VM_PFNMAP areas + - LP: #1191065 + * ata_piix: add PCI IDs for Intel BayTail + - LP: #1191065 + * libata: make ata_exec_internal_sg honor DMADIR + - LP: #1191065 + * cgroup: fix a subtle bug in descendant pre-order walk + - LP: #1191065 + * ASoC: wm5110: Correct DSP4R Mixer control name + - LP: #1191065 + * ASoC: cs42l52: fix default value for MASTERA_VOL. + - LP: #1191065 + * drm/radeon: fix typo in cu_per_sh on verde + - LP: #1191065 + * drm/radeon: fix card_posted check for newer asics + - LP: #1191065 + * NFSv4: Fix a thinko in nfs4_try_open_cached + - LP: #1191065 + * ib_srpt: Call target_sess_cmd_list_set_waiting during shutdown_session + - LP: #1191065 + * xfs: kill suid/sgid through the truncate path. + - LP: #1191065 + * x86: Allow FPU to be used at interrupt time even with eagerfpu + - LP: #1191065 + * m68k/mac: Fix unexpected interrupt with CONFIG_EARLY_PRINTK + - LP: #1191065 + * arm64: don't kill the kernel on a bad esr from el0 + - LP: #1191065 + * powerpc/32bit:Store temporary result in r0 instead of r8 + - LP: #1191065 + * powerpc/pseries: Always enable CONFIG_HOTPLUG_CPU on PSERIES SMP + - LP: #1191065 + * Linux 3.8.13.2 + - LP: #1191065 + + -- Steve Conklin Mon, 17 Jun 2013 14:48:54 -0500 + +linux (3.8.0-25.37) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1187857 + + [ Upstream Kernel Changes ] + + * iwlwifi: dvm: fix zero LQ CMD sending avoidance + - LP: #1186932 + + -- Steve Conklin Wed, 05 Jun 2013 11:21:20 -0500 + +linux (3.8.0-24.35) raring; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1186236 + + [ Joseph Salisbury ] + + * SAUCE: uvcvideo: quirk PROBE_DEF for Alienware X51 OmniVision webcam + - LP: #1180409 + + [ Upstream Kernel Changes ] + + * drm/i915: Use MLC (l3$) for context objects + * xhci: Don't warn on empty ring for suspended devices. + - LP: #1177865 + * USB: serial: option: Added support Olivetti Olicard 145 + - LP: #1178361 + * USB: option: add a D-Link DWM-156 variant + - LP: #1178361 + * staging: zsmalloc: Fix link error on ARM + - LP: #1178361 + * ARM: omap3: cpuidle: enable time keeping + - LP: #1178361 + * ARM: u300: fix ages old copy/paste bug + - LP: #1178361 + * ARM: at91/at91sam9260.dtsi: fix u(s)art pinctrl encoding + - LP: #1178361 + * ARM: at91: remove partial parameter in bootargs for at91sam9x5ek.dtsi + - LP: #1178361 + * ARM: at91: Fix typo in restart code panic message + - LP: #1178361 + * ARM: at91/trivial: fix model name for SAM9G15-EK + - LP: #1178361 + * ARM: at91/trivial: typos in compatible property + - LP: #1178361 + * powerpc: Add isync to copy_and_flush + - LP: #1178361 + * powerpc: Fix hardware IRQs with MMU on exceptions when HV=0 + - LP: #1178361 + * powerpc/power8: Fix secondary CPUs hanging on boot for HV=0 + - LP: #1178361 + * powerpc/spufs: Initialise inode->i_ino in spufs_new_inode() + - LP: #1178361 + * iwlwifi: fix freeing uninitialized pointer + - LP: #1178361 + * iwlwifi: dvm: don't send zeroed LQ cmd + - LP: #1178361 + * mwifiex: Use pci_release_region() instead of a pci_release_regions() + - LP: #1178361 + * mwifiex: Call pci_release_region after calling pci_disable_device + - LP: #1178361 + * mac80211: fix station entry leak/warning while suspending + - LP: #1178361 + * usb/misc/appledisplay: Add 24" LED Cinema display + - LP: #1178361 + * USB: add ftdi_sio USB ID for GDM Boost V1.x + - LP: #1178361 + * USB: ftdi_sio: correct ST Micro Connect Lite PIDs + - LP: #1178361 + * USB: ftdi_sio: enable two UART ports on ST Microconnect Lite + - LP: #1178361 + * usbfs: Always allow ctrl requests with USB_RECIP_ENDPOINT on the ctrl + ep + - LP: #1178361 + * usb: chipidea: udc: fix memory access of shared memory on armv5 + machines + - LP: #1178361 + * usb: chipidea: udc: fix memory leak in _ep_nuke + - LP: #1178361 + * usb: remove redundant tdi_reset + - LP: #1178361 + * usb-storage: CY7C68300A chips do not support Cypress ATACB + - LP: #1178361 + * s390/memory hotplug: prevent offline of active memory increments + - LP: #1178361 + * xen/time: Fix kasprintf splat when allocating timer%d IRQ line. + - LP: #1178361 + * xen/smp: Fix leakage of timer interrupt line for every CPU + online/offline. + - LP: #1178361 + * xen/smp/spinlock: Fix leakage of the spinlock interrupt line for every + CPU online/offline + - LP: #1178361 + * serial_core.c: add put_device() after device_find_child() + - LP: #1178361 + * arm: set the page table freeing ceiling to TASK_SIZE + - LP: #1178361 + * gianfar: do not advertise any alarm capability. + - LP: #1178361 + * tty: fix up atime/mtime mess, take three + - LP: #1178361 + * fbcon: when font is freed, clear also vc_font.data + - LP: #1178361 + * tracing: Use stack of calling function for stack tracer + - LP: #1178361 + * tracing: Fix stack tracer with fentry use + - LP: #1178361 + * tracing: Remove most or all of stack tracer stack size from + stack_max_size + - LP: #1178361 + * tracing: Fix off-by-one on allocating stat->pages + - LP: #1178361 + * tracing: Check return value of tracing_init_dentry() + - LP: #1178361 + * tracing: Reset ftrace_graph_filter_enabled if count is zero + - LP: #1178361 + * i2c: xiic: must always write 16-bit words to TX_FIFO + - LP: #1178361 + * crypto: crc32-pclmul - Use gas macro for pclmulqdq + - LP: #1178361 + * sysfs: fix use after free in case of concurrent read/write and readdir + - LP: #1178361 + * Fix initialization of CMCI/CMCP interrupts + - LP: #1178361 + * PCI / ACPI: Don't query OSC support with all possible controls + - LP: #1178361 + * PCI/PM: Fix fallback to PCI_D0 in pci_platform_power_transition() + - LP: #1178361 + * rt2x00: Fix transmit power troubles on some Ralink RT30xx cards + - LP: #1178361 + * Wrong asm register contraints in the futex implementation + - LP: #1178361 + * Wrong asm register contraints in the kvm implementation + - LP: #1178361 + * fs/fscache/stats.c: fix memory leak + - LP: #1178361 + * mm: allow arch code to control the user page table ceiling + - LP: #1178361 + * TPM: Retry SaveState command in suspend path + - LP: #1178361 + * ALSA: emu10k1: Fix dock firmware loading + - LP: #1178361 + * ALSA: snd-usb: try harder to find USB_DT_CS_ENDPOINT + - LP: #1178361 + * ALSA: usb: Add quirk for 192KHz recording on E-Mu devices + - LP: #1178361 + * ALSA: usb-audio: disable autopm for MIDI devices + - LP: #1178361 + * ALSA: usb-audio: Fix autopm error during probing + - LP: #1178361 + * ALSA: USB: adjust for changed 3.8 USB API + - LP: #1178361 + * ALSA: hda - Add the support for ALC286 codec + - LP: #1178361 + * ASoC: max98088: Fix logging of hardware revision. + - LP: #1178361 + * hrtimer: Fix ktime_add_ns() overflow on 32bit architectures + - LP: #1178361 + * hrtimer: Add expiry time overflow check in hrtimer_interrupt + - LP: #1178361 + * swap: redirty page if page write fails on swap file + - LP: #1178361 + * mm: swap: mark swap pages writeback before queueing for direct IO + - LP: #1178361 + * drivers/rtc/rtc-cmos.c: don't disable hpet emulation on suspend + - LP: #1178361 + * libata: acpi: make ata_ap_acpi_handle not block + - LP: #1178361 + * ACPI: Fix wrong parameter passed to memblock_reserve + - LP: #1178361 + * ACPI / thermal: do not always return THERMAL_TREND_RAISING for active + trip points + - LP: #1178361 + * cgroup: fix an off-by-one bug which may trigger BUG_ON() + - LP: #1178361 + * cgroup: fix broken file xattrs + - LP: #1178361 + * localmodconfig: Process source kconfig files as they are found + - LP: #1178361 + * clockevents: Set dummy handler on CPU_DEAD shutdown + - LP: #1178361 + * sata_highbank: Rename proc_name to the module name + - LP: #1178361 + * inotify: invalid mask should return a error number but not set it + - LP: #1178361 + * fs/dcache.c: add cond_resched() to shrink_dcache_parent() + - LP: #1178361 + * exec: do not abuse ->cred_guard_mutex in threadgroup_lock() + - LP: #1178361 + * LOCKD: Ensure that nlmclnt_block resets block->b_status after a server + reboot + - LP: #1178361 + * md: bad block list should default to disabled. + - LP: #1178361 + * MD: ignore discard request for hard disks of hybid raid1/raid10 array + - LP: #1178361 + * NFSv4: Handle NFS4ERR_DELAY and NFS4ERR_GRACE in + nfs4_open_delegation_recall + - LP: #1178361 + * nfsd4: don't close read-write opens too soon + - LP: #1178361 + * nfsd: don't run get_file if nfs4_preprocess_stateid_op return error + - LP: #1178361 + * nfsd: Decode and send 64bit time values + - LP: #1178361 + * wireless: regulatory: fix channel disabling race condition + - LP: #1178361 + * ipc: sysv shared memory limited to 8TiB + - LP: #1178361 + * ixgbe: fix EICR write in ixgbe_msix_other + - LP: #1178361 + * ext4/jbd2: don't wait (forever) for stale tid caused by wraparound + - LP: #1178361 + * jbd2: fix race between jbd2_journal_remove_checkpoint and + ->j_commit_callback + - LP: #1178361 + * ext4: fix journal callback list traversal + - LP: #1178361 + * ext4: fix big-endian bug in metadata checksum calculations + - LP: #1178361 + * ext4: fix online resizing for ext3-compat file systems + - LP: #1178361 + * ext4: fix Kconfig documentation for CONFIG_EXT4_DEBUG + - LP: #1178361 + * mmc: at91/avr32/atmel-mci: fix DMA-channel leak on module unload + - LP: #1178361 + * Give the OID registry file module info to avoid kernel tainting + - LP: #1178361 + * KVM: X86 emulator: fix source operand decoding for 8bit mov[zs]x + instructions + - LP: #1178361 + * x86: Eliminate irq_mis_count counted in arch_irq_stat + - LP: #1178361 + * mmc: core: Fix bit width test failing on old eMMC cards + - LP: #1178361 + * mmc: atmel-mci: pio hang on block errors + - LP: #1178361 + * rcutrace: single_open() leaks + - LP: #1178361 + * mfd: adp5520: Restore mode bits on resume + - LP: #1178361 + * Linux 3.8.12 + - LP: #1178361 + * xen/arm: actually pass a non-NULL percpu pointer to request_percpu_irq + - LP: #1179514 + * powerpc: Emulate non privileged DSCR read and write + - LP: #1179514 + * powerpc: fix numa distance for form0 device tree + - LP: #1179514 + * pwm: spear: Fix checking return value of clk_enable() and clk_prepare() + - LP: #1179514 + * autofs - remove autofs dentry mount check + - LP: #1179514 + * hugetlbfs: fix mmap failure in unaligned size request + - LP: #1179514 + * iommu/amd: Properly initialize irq-table lock + - LP: #1179514 + * net/eth/ibmveth: Fixup retrieval of MAC address + - LP: #1179514 + * perf/x86/intel: Add support for IvyBridge model 58 Uncore + - LP: #1179514 + * perf/x86/intel: Fix unintended variable name reuse + - LP: #1179514 + * perf/x86/intel/lbr: Fix LBR filter + - LP: #1179514 + * perf/x86/intel/lbr: Demand proper privileges for + PERF_SAMPLE_BRANCH_KERNEL + - LP: #1179514 + * PCI/PM: Clear state_saved during suspend + - LP: #1179514 + * e1000e: fix runtime power management transitions + - LP: #1179514 + * e1000e: fix accessing to suspended device + - LP: #1179514 + * ipvs: ip_vs_sip_fill_param() BUG: bad check of return value + - LP: #1179514 + * netfilter: nf_nat: fix race when unloading protocol modules + - LP: #1179514 + * netfilter: ipset: list:set: fix reference counter update + - LP: #1179514 + * netfilter: nf_ct_sip: don't drop packets with offsets pointing outside + the packet + - LP: #1179514 + * netfilter: ipset: "Directory not empty" error message + - LP: #1179514 + * netfilter: nf_ct_helper: don't discard helper if it is actually the + same + - LP: #1179514 + * netfilter: ctnetlink: don't permit ct creation with random tuple + - LP: #1179514 + * netfilter: xt_rpfilter: skip locally generated broadcast/multicast, too + - LP: #1179514 + * netfilter: ip6t_NPT: Fix translation for non-multiple of 32 prefix + lengths + - LP: #1179514 + * ext4: add check for inodes_count overflow in new resize ioctl + - LP: #1179514 + * r8169: fix 8168evl frame padding. + - LP: #1179514 + * RDMA/cxgb4: Fix SQ allocation when on-chip SQ is disabled + - LP: #1179514 + * arm64: Ignore the 'write' ESR flag on cache maintenance faults + - LP: #1179514 + * block: fix max discard sectors limit + - LP: #1179514 + * drm/cirrus: deal with bo reserve fail in dirty update path + - LP: #1179514 + * drm/mgag200: deal with bo reserve fail in dirty update path + - LP: #1179514 + * drm/gma500: fix backlight hotkeys behaviour on netbooks + - LP: #1179514 + * drm/prime: keep a reference from the handle to exported dma-buf (v6) + - LP: #1179514 + * drm/ast: deal with bo reserve fail in dirty update path + - LP: #1179514 + * drm/i915: Fix detection of base of stolen memory + - LP: #1179514 + * drm/i915: Fix sdvo connector get_hw_state function + - LP: #1179514 + * drm/i915: Add no-lvds quirk for Fujitsu Esprimo Q900 + - LP: #1179514 + * drm/i915: Fix SDVO connector and encoder get_hw_state functions + - LP: #1179514 + * drm/i915: Workaround incoherence between fences and LLC across multiple + CPUs + - LP: #1179514 + * drm/i915: set CPT FDI RX polarity bits based on VBT + - LP: #1179514 + * drm/i915: ensure single initialization and cleanup of backlight device + - LP: #1179514 + * drm/i915: Fixup Oops in the pipe config computation + - LP: #1179514 + * drm/i915: Fall back to bit banging mode for DVO transmitter detection + - LP: #1179514 + * drm/radeon: don't use get_engine_clock() on APUs + - LP: #1179514 + * drm/radeon: use frac fb div on RS780/RS880 + - LP: #1179514 + * drm/radeon: fix typo in rv515_mc_resume() + - LP: #1179514 + * drm/radeon/dce6: add missing display reg for tiling setup + - LP: #1179514 + * drm/radeon: update wait_for_vblank for r5xx-r7xx + - LP: #1179514 + * drm/radeon: update wait_for_vblank for evergreen+ + - LP: #1179514 + * drm/radeon: properly lock disp in mc_stop/resume for evergreen+ + - LP: #1179514 + * drm/radeon: properly lock disp in mc_stop/resume for r5xx-r7xx + - LP: #1179514 + * drm/radeon: update wait_for_vblank for r1xx-r4xx + - LP: #1179514 + * drm/radeon: disable the crtcs in mc_stop (evergreen+) (v2) + - LP: #1179514 + * drm/radeon: add some new SI PCI ids + - LP: #1179514 + * drm/radeon/evergreen+: don't enable HPD interrupts on eDP/LVDS + - LP: #1179514 + * drm/radeon: cleanup properly if mmio mapping fails + - LP: #1179514 + * drm/radeon: fix hdmi mode enable on RS600/RS690/RS740 + - LP: #1179514 + * drm/radeon: fix typo in si_select_se_sh() + - LP: #1179514 + * drm/radeon: Always flush the VM + - LP: #1179514 + * drm/radeon: disable the crtcs in mc_stop (r5xx-r7xx) (v2) + - LP: #1179514 + * drm/radeon: fix endian bugs in atom_allocate_fb_scratch() + - LP: #1179514 + * drm/radeon: fix possible segfault when parsing pm tables + - LP: #1179514 + * drm/radeon: add new richland pci ids + - LP: #1179514 + * drm/radeon: fix handling of v6 power tables + - LP: #1179514 + * tracing: Fix ftrace_dump() + - LP: #1179514 + * Btrfs: compare relevant parts of delayed tree refs + - LP: #1179514 + * Btrfs: fix extent logging with O_DIRECT into prealloc + - LP: #1179514 + * EDAC: Don't give write permission to read-only files + - LP: #1179514 + * NFSv4.x: Fix handling of partially delegated locks + - LP: #1179514 + * kernel/audit_tree.c: tree will leak memory when failure occurs in + audit_trim_trees() + - LP: #1179514 + * x86/mm: account for PGDIR_SIZE alignment + - LP: #1179514 + * Linux 3.8.13 + - LP: #1179514 + * iwlwifi: add new pci id for 6x35 series + - LP: #1180256 + * be2net: fix re-loaded PF driver to re-gain control of its VFs + - LP: #1180217 + * be2net: update driver version to 4.6.x + - LP: #1180217 + * be2net: remove BUG_ON() in be_mcc_compl_is_new() + - LP: #1180217 + * benet: Wait f/w POST until timeout + - LP: #1180217 + * be2net: use CSR-BAR SEMAPHORE reg for BE2/BE3 + - LP: #1180217 + * be2net: Update copyright year + - LP: #1180217 + * be2net: enable interrupts in be_probe() (RoCE and other ULPs need them) + - LP: #1180217 + * be2net: Use new F/W mailbox cmd to manipulate interrupts. + - LP: #1180217 + * be2net: remove unused variable 'sge' + - LP: #1180217 + * be2net: take care of __vlan_put_tag return value + - LP: #1180217 + * be2net: Use TXQ_CREATE_V2 cmd + - LP: #1180217 + * be2net: Don't log "Out of MCCQ wrbs" error + - LP: #1180217 + * be2net: Avoid flashing BE3 UFI on BE3-R chip. + - LP: #1180217 + * be2net: Use GET_PROFILE_CONFIG V1 cmd for BE3-R + - LP: #1180217 + * be2net: enable IOMMU pass through for be2net + - LP: #1180217 + * be2net: Add support for setting and getting rx flow hash options + - LP: #1180217 + * be2net: Renamed rx_address_mismatch_errors to rx_address_filtered + - LP: #1180217 + * be2net: Avoid diagnostic test in certain versions of firmware to avoid + NIC freeze. + - LP: #1180217 + * be2net: Fixed memory leak + - LP: #1180217 + * be2net: Fix to show wol disabled/enabled state correctly. + - LP: #1180217 + * be2net: Use GET_FUNCTION_CONFIG V1 cmd + - LP: #1180217 + * be2net: FLR must be first cmd issued to Lancer FW + - LP: #1180217 + * be2net: Fix to use version 2 of cq_create for SkyHawk-R devices + - LP: #1180217 + * be2net: Fix to use 32-bit stats to report rx_drops_no_fragment + - LP: #1180217 + * be2net: Fix to show tx priority pause counter in ethtool -S + - LP: #1180217 + * be2net: Fix to receive Multicast Packets when Promiscuous mode is + enabled on certain devices + - LP: #1180217 + * be2net: Fix firmware download for Lancer + - LP: #1180217 + * be2net: avoid napi_disable() when it has not been enabled + - LP: #1180217 + * be2net: Fix to fail probe if MSI-X enable fails for a VF + - LP: #1180217 + + -- Steve Conklin Fri, 31 May 2013 07:58:43 -0500 + +linux (3.8.0-23.34) raring-proposed; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1185136 + + [ Upstream Kernel Changes ] + + * iscsi-target: fix heap buffer overflow on error + - CVE-2013-2850 + + -- Steve Conklin Tue, 28 May 2013 13:19:38 -0500 + +linux (3.8.0-22.33) raring-proposed; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1180483 + * merged back all changes which were in 20.31 + + -- Steve Conklin Wed, 15 May 2013 14:00:19 -0500 + +linux (3.8.0-21.32) raring-proposed; urgency=low + + [Steve Conklin] + + * Release Tracking Bug + - LP: #1180058 + * Based on 3.8.0-19.30 release + - entire delta from 19.30 to 20.31 removed + - CVE release is based on updates+fix + + [ Upstream Kernel Changes ] + + * perf: Treat attr.config as u64 in perf_swevent_init() + - LP: #1179943 + - CVE-2013-2094 + + -- Steve Conklin Tue, 14 May 2013 14:19:21 -0500 + +linux (3.8.0-20.31) raring; urgency=low + + [Brad Figg] + + * Release Tracking Bug + - LP: #1176953 + + [ AceLan Kao ] + + * SAUCE: (no-up) alx: disables MSI generation + - LP: #927782 + + [ David Henningsson ] + + * SAUCE: (no-up) Fix oops in patch_hdmi due to missing hda_gen_spec + struct + - LP: #1169984 + + [ Kamal Mostafa ] + + * SAUCE: (no-up) drm/i915: revert PCH_PWM_ENABLE quirk for XPS13-FHD + - LP: #1169376 + + [ Seth Forshee ] + + * SAUCE: (no-up) ACPI: Disable Windows 8 compatibility for some Lenovo + ThinkPads + - LP: #1098216 + + [ Tim Gardner ] + + * SAUCE: (no-up) alx: Don't check netif_running() before powering up + - LP: #1172415 + * enable tools build for armhf + - LP: #1171580 + * [packaging] Bump ABI for every new release + + [ Upstream Kernel Changes ] + + * Revert "MIPS: page.h: Provide more readable definition for PAGE_MASK." + - LP: #1173170 + * tg3: Add 57766 device support. + - LP: #1162665 + * powerpc: add a missing label in resume_kernel + - LP: #1173170 + * kvm/powerpc/e500mc: fix tlb invalidation on cpu migration + - LP: #1173170 + * ARM: Do 15e0d9e37c (ARM: pm: let platforms select cpu_suspend support) + properly + - LP: #1173170 + * kthread: Prevent unpark race which puts threads on the wrong cpu + - LP: #1173170 + * hrtimer: Don't reinitialize a cpu_base lock on CPU_UP + - LP: #1173170 + * can: mcp251x: add missing IRQF_ONESHOT to request_threaded_irq + - LP: #1173170 + * can: sja1000: fix handling on dt properties on little endian systems + - LP: #1173170 + * hugetlbfs: stop setting VM_DONTDUMP in initializing vma(VM_HUGETLB) + - LP: #1173170 + * hugetlbfs: add swap entry check in follow_hugetlb_page() + - LP: #1173170 + * fs/binfmt_elf.c: fix hugetlb memory check in vma_dump_size() + - LP: #1173170 + * kernel/signal.c: stop info leak via the tkill and the tgkill syscalls + - LP: #1173170 + * hfsplus: fix potential overflow in hfsplus_file_truncate() + - LP: #1173170 + * md: raid1,10: Handle REQ_WRITE_SAME flag in write bios + - LP: #1173170 + * KVM: Allow cross page reads and writes from cached translations. + - LP: #1173170 + * ARM: i.MX35: enable MAX clock + - LP: #1173170 + * ARM: clk-imx35: Bugfix iomux clock + - LP: #1173170 + * sched: Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s + - LP: #1173170 + * sched/debug: Fix sd->*_idx limit range avoiding overflow + - LP: #1173170 + * ARM: 7696/1: Fix kexec by setting outer_cache.inv_all for Feroceon + - LP: #1173170 + * ARM: 7698/1: perf: fix group validation when using enable_on_exec + - LP: #1173170 + * ath9k_htc: accept 1.x firmware newer than 1.3 + - LP: #1173170 + * ath9k_hw: change AR9580 initvals to fix a stability issue + - LP: #1173170 + * mac80211: fix cfg80211 interaction on auth/assoc request + - LP: #1173170 + * ssb: implement spurious tone avoidance + - LP: #1173170 + * crypto: algif - suppress sending source address information in recvmsg + - LP: #1173170 + * perf: Treat attr.config as u64 in perf_swevent_init() + - LP: #1173170 + * perf/x86: Fix offcore_rsp valid mask for SNB/IVB + - LP: #1173170 + * vm: add vm_iomap_memory() helper function + - LP: #1173170 + * vm: convert snd_pcm_lib_mmap_iomem() to vm_iomap_memory() helper + - LP: #1173170 + * vm: convert fb_mmap to vm_iomap_memory() helper + - LP: #1173170 + * vm: convert HPET mmap to vm_iomap_memory() helper + - LP: #1173170 + * vm: convert mtdchar mmap to vm_iomap_memory() helper + - LP: #1173170 + * Btrfs: make sure nbytes are right after log replay + - LP: #1173170 + * s390: move dummy io_remap_pfn_range() to asm/pgtable.h + - LP: #1173170 + * Linux 3.8.9 + - LP: #1173170 + * Linux 3.8.10 + - LP: #1175391 + * aio: fix possible invalid memory access when DEBUG is enabled + - LP: #1175391 + * TTY: fix atime/mtime regression + - LP: #1175391 + * sparc64: Fix race in TLB batch processing. + - LP: #1175391 + * atm: update msg_namelen in vcc_recvmsg() + - LP: #1175391 + * ax25: fix info leak via msg_name in ax25_recvmsg() + - LP: #1175391 + * Bluetooth: fix possible info leak in bt_sock_recvmsg() + - LP: #1175391 + * Bluetooth: RFCOMM - Fix missing msg_namelen update in + rfcomm_sock_recvmsg() + - LP: #1175391 + * Bluetooth: SCO - Fix missing msg_namelen update in sco_sock_recvmsg() + - LP: #1175391 + * caif: Fix missing msg_namelen update in caif_seqpkt_recvmsg() + - LP: #1175391 + * irda: Fix missing msg_namelen update in irda_recvmsg_dgram() + - LP: #1175391 + * iucv: Fix missing msg_namelen update in iucv_sock_recvmsg() + - LP: #1175391 + * l2tp: fix info leak in l2tp_ip6_recvmsg() + - LP: #1175391 + * llc: Fix missing msg_namelen update in llc_ui_recvmsg() + - LP: #1175391 + * netrom: fix info leak via msg_name in nr_recvmsg() + - LP: #1175391 + * NFC: llcp: fix info leaks via msg_name in llcp_sock_recvmsg() + - LP: #1175391 + * rose: fix info leak via msg_name in rose_recvmsg() + - LP: #1175391 + * tipc: fix info leaks via msg_name in recv_msg/recv_stream + - LP: #1175391 + * cbq: incorrect processing of high limits + - LP: #1175391 + * net IPv6 : Fix broken IPv6 routing table after loopback down-up + - LP: #1175391 + * net: count hw_addr syncs so that unsync works properly. + - LP: #1175391 + * atl1e: limit gso segment size to prevent generation of wrong ip length + fields + - LP: #1175391 + * bonding: fix bonding_masters race condition in bond unloading + - LP: #1175391 + * bonding: IFF_BONDING is not stripped on enslave failure + - LP: #1175391 + * bonding: fix l23 and l34 load balancing in forwarding path + - LP: #1175391 + * af_unix: If we don't care about credentials coallesce all messages + - LP: #1175391 + * netfilter: don't reset nf_trace in nf_reset() + - LP: #1175391 + * ipv6/tcp: Stop processing ICMPv6 redirect messages + - LP: #1175391 + * rtnetlink: Call nlmsg_parse() with correct header length + - LP: #1175391 + * tcp: incoming connections might use wrong route under synflood + - LP: #1175391 + * tcp: Reallocate headroom if it would overflow csum_start + - LP: #1175391 + * net: mvmdio: add select PHYLIB + - LP: #1175391 + * esp4: fix error return code in esp_output() + - LP: #1175391 + * net: mvneta: fix improper tx queue usage in mvneta_tx() + - LP: #1175391 + * net: cdc_mbim: remove bogus sizeof() + - LP: #1175391 + * tcp: call tcp_replace_ts_recent() from tcp_ack() + - LP: #1175391 + * net: rate-limit warn-bad-offload splats. + - LP: #1175391 + * net: drop dst before queueing fragments + - LP: #1175391 + * tracing: Fix selftest function recursion accounting + - LP: #1175391 + * ARM: 7699/1: sched_clock: Add more notrace to prevent recursion + - LP: #1175391 + * ARM: 7692/1: iop3xx: move IOP3XX_PERIPHERAL_VIRT_BASE + - LP: #1175391 + * Linux 3.8.11 + - LP: #1175391 + + -- Brad Figg Mon, 06 May 2013 08:27:39 -0700 + +linux (3.8.0-19.30) raring; urgency=low + + [ Upstream Kernel Changes ] + + * Add file_ns_capable() helper function for open-time capability checking + (CVE-2013-1959) + - LP: #1174590 + - CVE-2013-1959 + * userns: Don't let unprivileged users trick privileged users into + setting the id_map (CVE-2013-1959) + - LP: #1174590 + - CVE-2013-1959 + * userns: Check uid_map's opener's fsuid, not the current fsuid + (CVE-2013-1959) + - LP: #1174590 + - CVE-2013-1959 + * net: fix incorrect credentials passing (CVE-2013-1979) + - LP: #1174827 + - CVE-2013-1979 + * userns: Changing any namespace id mappings should require privileges + (CVE-2013-1979) + - LP: #1174827 + - CVE-2013-1979 + + -- Tim Gardner Thu, 18 Apr 2013 11:21:24 -0400 + +linux (3.8.0-19.29) raring; urgency=low + + [ Paolo Pisati ] + + * UBUNTU: [Config] disable PL330_DMA + - LP: #1168039 + + [ Rob Herring ] + + * UBUNTU: SAUCE: (no-up) ARM: highbank: fix cache flush ordering for cpu hotplug + - LP: #1169956 + + [ joseph.salisbury@canonical.com ] + + * SAUCE: (no-up) x86: reboot: Make Dell Optiplex 390 use reboot=pci + - LP: #800660 + + [ Kamal Mostafa ] + + * SAUCE: [media] uvcvideo: quirk PROBE_DEF for Dell Studio / OmniVision + webcam + - LP: #1168430 + + [ Upstream Kernel Changes ] + + * Revert "drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR" + - LP: #1168506 + * Revert "PCI/ACPI: Request _OSC control before scanning PCI root bus" + - LP: #1168506 + * Revert "tty/8250_pnp: serial port detection regression since v3.7" + - LP: #1168506 + * ALSA: hda - fixup D3 pin and right channel mute on Haswell HDMI audio + - LP: #1167270 + * ASoC: imx-ssi: Fix occasional AC97 reset failure + - LP: #1168506 + * ASoC: dma-sh7760: Fix compile error + - LP: #1168506 + * ASoC: spear_pcm: Update to new pcm_new() API + - LP: #1168506 + * regmap: Initialize `map->debugfs' before regcache + - LP: #1168506 + * regmap: cache Fix regcache-rbtree sync + - LP: #1168506 + * MIPS: Fix logic errors in bitops.c + - LP: #1168506 + * HID: magicmouse: fix race between input_register() and probe() + - LP: #1168506 + * spi/s3c64xx: modified error interrupt handling and init + - LP: #1168506 + * spi/mpc512x-psc: optionally keep PSC SS asserted across xfer segmensts + - LP: #1168506 + * gpio: stmpe: pass DT node to irqdomain + - LP: #1168506 + * UBIFS: make space fixup work in the remount case + - LP: #1168506 + * reiserfs: Fix warning and inode leak when deleting inode with xattrs + - LP: #1168506 + * ALSA: hda - bug fix on return value when getting HDMI ELD info + - LP: #1168506 + * ALSA: hda - Enabling Realtek ALC 671 codec + - LP: #1168506 + * ALSA: hda - fix typo in proc output + - LP: #1168506 + * drm/nouveau: fix handling empty channel list in ioctl's + - LP: #1168506 + * drm/i915: Be sure to turn hsync/vsync back on at crt enable (v2) + - LP: #1168506 + * drm: correctly restore mappings if drm_open fails + - LP: #1168506 + * mm: prevent mmap_cache race in find_vma() + - LP: #1168506 + * EISA/PCI: Init EISA early, before PNP + - LP: #1168506 + * EISA/PCI: Fix bus res reference + - LP: #1168506 + * ixgbe: fix registration order of driver and DCA nofitication + - LP: #1168506 + * libata: Use integer return value for atapi_command_packet_set + - LP: #1168506 + * libata: Set max sector to 65535 for Slimtype DVD A DS8A8SH drive + - LP: #1168506 + * MIPS: Unbreak function tracer for 64-bit kernel. + - LP: #1168506 + * alpha: Add irongate_io to PCI bus resources + - LP: #1168506 + * PCI/ACPI: Always resume devices on ACPI wakeup notifications + - LP: #1168506 + * PCI/PM: Disable runtime PM of PCIe ports + - LP: #1168506 + * ata_piix: Fix DVD not dectected at some Haswell platforms + - LP: #1168506 + * ftrace: Consistently restore trace function on sysctl enabling + - LP: #1168506 + * powerpc: pSeries_lpar_hpte_remove fails from Adjunct partition being + performed before the ANDCOND test + - LP: #1168506 + * mwifiex: limit channel number not to overflow memory + - LP: #1168506 + * mac80211: fix remain-on-channel cancel crash + - LP: #1168506 + * x86: remove the x32 syscall bitmask from syscall_get_nr() + - LP: #1168506 + * hwspinlock: fix __hwspin_lock_request error path + - LP: #1168506 + * remoteproc/ste: fix memory leak on shutdown + - LP: #1168506 + * remoteproc: fix error path of handle_vdev + - LP: #1168506 + * remoteproc: fix FW_CONFIG typo + - LP: #1168506 + * spinlocks and preemption points need to be at least compiler barriers + - LP: #1168506 + * crypto: ux500 - add missing comma + - LP: #1168506 + * crypto: gcm - fix assumption that assoc has one segment + - LP: #1168506 + * drm/mgag200: Index 24 in extended CRTC registers is 24 in hex, not + decimal. + - LP: #1168506 + * block: avoid using uninitialized value in from queue_var_store + - LP: #1168506 + * SUNRPC: Remove extra xprt_put() + - LP: #1168506 + * NFSv4: Fix a memory leak in nfs4_discover_server_trunking + - LP: #1168506 + * NFSv4/4.1: Fix bugs in nfs4[01]_walk_client_list + - LP: #1168506 + * drm/i915: Fix build failure + - LP: #1168506 + * x86: Fix rebuild with EFI_STUB enabled + - LP: #1168506 + * thermal: return an error on failure to register thermal class + - LP: #1168506 + * msi-wmi: Fix memory leak + - LP: #1168506 + * cpufreq: exynos: Get booting freq value in exynos_cpufreq_init + - LP: #1168506 + * ARM: EXYNOS: Fix crash on soft reset on EXYNOS5440 + - LP: #1168506 + * drm/i915: add quirk to invert brightness on eMachines G725 + - LP: #1168506 + * drm/i915: add quirk to invert brightness on eMachines e725 + - LP: #1168506 + * drm/i915: add quirk to invert brightness on Packard Bell NCL20 + - LP: #1168506 + * r8169: fix auto speed down issue + - LP: #1168506 + * vfio-pci: Fix possible integer overflow + - LP: #1168506 + * NFSv4: Doh! Typo in the fix to nfs41_walk_client_list + - LP: #1168506 + * can: gw: use kmem_cache_free() instead of kfree() + - LP: #1168506 + * mwifiex: complete last internal scan + - LP: #1168506 + * Linux 3.8.7 + - LP: #1168506 + * ALSA: usb-audio: fix endianness bug in snd_nativeinstruments_* + - LP: #1169930 + * ASoC: core: Fix to check return value of snd_soc_update_bits_locked() + - LP: #1169930 + * ASoC: wm5102: Correct lookup of arizona struct in SYSCLK event + - LP: #1169930 + * ASoC: wm8903: Fix the bypass to HP/LINEOUT when no DAC or ADC is + running + - LP: #1169930 + * tracing: Fix double free when function profile init failed + - LP: #1169930 + * ARM: Kirkwood: Fix typo in the definition of ix2-200 rebuild LED + - LP: #1169930 + * ARM: imx35 Bugfix admux clock + - LP: #1169930 + * dmaengine: omap-dma: Start DMA without delay for cyclic channels + - LP: #1169930 + * PM / reboot: call syscore_shutdown() after disable_nonboot_cpus() + - LP: #1169930 + * ipc: set msg back to -EAGAIN if copy wasn't performed + - LP: #1169930 + * GFS2: Fix unlock of fcntl locks during withdrawn state + - LP: #1169930 + * GFS2: return error if malloc failed in gfs2_rs_alloc() + - LP: #1169930 + * SCSI: libsas: fix handling vacant phy in sas_set_ex_phy() + - LP: #1169930 + * cifs: Allow passwords which begin with a delimitor + - LP: #1169930 + * target: Fix incorrect fallthrough of ALUA Standby/Offline/Transition + CDBs + - LP: #1169930 + * vfs: Revert spurious fix to spinning prevention in prune_icache_sb + - LP: #1169930 + * kobject: fix kset_find_obj() race with concurrent last kobject_put() + - LP: #1169930 + * gpio: fix wrong checking condition for gpio range + - LP: #1169930 + * x86-32: Fix possible incomplete TLB invalidate with PAE pagetables + - LP: #1169930 + * tracing: Fix possible NULL pointer dereferences + - LP: #1169930 + * udl: handle EDID failure properly. + - LP: #1169930 + * ftrace: Move ftrace_filter_lseek out of CONFIG_DYNAMIC_FTRACE section + - LP: #1169930 + * sched_clock: Prevent 64bit inatomicity on 32bit systems + - LP: #1169930 + * x86, mm, paravirt: Fix vmalloc_fault oops during lazy MMU updates + - LP: #1169930 + * x86, mm: Patch out arch_flush_lazy_mmu_mode() when running on bare + metal + - LP: #1169930 + * tty: don't deadlock while flushing workqueue + - LP: #1169930 + * Linux 3.8.8 + - LP: #1169930 + + [ Tim Gardner ] + + * Release Tracking Bug + - LP: #1168504 + + -- Tim Gardner Fri, 12 Apr 2013 14:37:27 -0400 + +linux (3.8.0-18.28) raring; urgency=low + + [ Andy Whitcroft ] + + * (debian) fix internal linkage for separated header packages + - LP: #1165259 + + [ Gavin Guo ] + + * SAUCE: Bluetooth: Add support for Broadcom 413c:8143 + - LP: #1166113 + + [ John Johansen ] + + * SAUCE: (no-up) apparmor: Fix quieting of audit messages for network + mediation + - LP: #1163259 + + [ Kamal Mostafa ] + + * SAUCE: (no-up) drm/i915: quirk no PCH_PWM_ENABLE for Dell XPS13 + backlight + - LP: #1162026, #1163720 + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_PARPORT_PC_FIFO + - LP: #339752 + + [ Martin Pitt ] + + * SAUCE: (no-up) mac80211_hwsim: Register and bind to driver + - LP: #1166250 + + [ Paolo Pisati ] + + * [Config] RTC_DRV_PL031=y + + [ Stefan Bader ] + + * (debian) Abort build on unresolved symbols + - LP: #1166197 + + [ Tim Gardner ] + + * [Config] Add libceph to inclusion list + * [Config] Drop all inclusion list modules with unsatisfied dependencies + * SAUCE: (no-up) Remove emi62 files duplicated in linux-firmware + * SAUCE: (no-up) Remove emi26 files duplicated in linux-firmware + * SAUCE: (no-up) Remove whiteheat files duplicated in linux-firmware + * Release Tracking Bug + - LP: #1168040 + + [ Upstream Kernel Changes ] + + * TTY: do not update atime/mtime on read/write + - LP: #1097680 + - CVE-2013-0160 + * KVM: x86: Convert MSR_KVM_SYSTEM_TIME to use gfn_to_hva_cache functions + (CVE-2013-1797) + - LP: #1158258 + - CVE-2013-1797 + * KVM: Fix bounds checking in ioapic indirect register reads + (CVE-2013-1798) + - LP: #1158262 + - CVE-2013-1798 + * drm/i915: HDMI/DP - ELD info refresh support for Haswell + - LP: #1011438 + * ALSA - HDA: New PCI ID for Haswell ULT + - LP: #1011438 + * ALSA: hda - Support rereading widgets under the function group + - LP: #1011438 + * ALSA: hda - Add fixup for Haswell to enable all pin and convertor + widgets + - LP: #1011438 + * libata: fix DMA to stack in reading devslp_timing parameters + - LP: #1031173 + * dmaengine: dw_dmac: remove CLK dependency + - LP: #1031163 + * dmaengine: dw_dmac: Enhance device tree support + - LP: #1031163 + * dmaengine: dw_dmac: amend description and indentation + - LP: #1031163 + * dw_dmac: change dev_printk() to corresponding macros + - LP: #1031163 + * dw_dmac: don't call platform_get_drvdata twice + - LP: #1031163 + * dw_dmac: change dev_crit to dev_WARN in dwc_handle_error + - LP: #1031163 + * dw_dmac: introduce to_dw_desc() macro + - LP: #1031163 + * dw_dmac: absence of pdata isn't critical when autocfg is set + - LP: #1031163 + * dw_dmac: check for mapping errors + - LP: #1031163 + * dw_dmac: remove redundant check + - LP: #1031163 + * dw_dmac: update tx_node_active in dwc_do_single_block + - LP: #1031163 + * dma: dw_dmac: add dwc_chan_pause and dwc_chan_resume + - LP: #1031163 + * dmaengine: introduce is_slave_direction function + - LP: #1031163 + * dmaengine: add possibility for cyclic transfers + - LP: #1031163 + * dma: dw_dmac: check direction properly in dw_dma_cyclic_prep + - LP: #1031163 + * dma: ep93xx_dma: reuse is_slave_direction helper + - LP: #1031163 + * dma: ipu_idmac: reuse is_slave_direction helper + - LP: #1031163 + * dma: ste_dma40: reuse is_slave_direction helper + - LP: #1031163 + * dw_dmac: call .probe after we have a device in place + - LP: #1031163 + * dw_dmac: store direction in the custom channel structure + - LP: #1031163 + * dw_dmac: make usage of dw_dma_slave optional + - LP: #1031163 + * dw_dmac: backlink to dw_dma in dw_dma_chan is superfluous + - LP: #1031163 + * dw_dmac: allocate dma descriptors from DMA_COHERENT memory + - LP: #1031163 + * dw_dmac: don't exceed AHB master number in dwc_get_data_width + - LP: #1031163 + * dw_dmac: move soft LLP code from tasklet to dwc_scan_descriptors + - LP: #1031163 + * dw_dmac: print out DW_PARAMS and DWC_PARAMS when debug + - LP: #1031163 + * dw_dmac: remove unnecessary tx_list field in dw_dma_chan + - LP: #1031163 + * dw_dmac: introduce total_len field in struct dw_desc + - LP: #1031163 + * dw_dmac: fill individual length of descriptor + - LP: #1031163 + * dw_dmac: return proper residue value + - LP: #1031163 + * dw_dmac: apply default dma_mask if needed + - LP: #1031163 + * dw_dmac: add support for Lynxpoint DMA controllers + - LP: #1031163 + * dw_dmac: adjust slave_id accordingly to request line base + - LP: #1031163 + + -- Tim Gardner Tue, 09 Apr 2013 10:08:09 -0400 + +linux (3.8.0-17.27) raring; urgency=low + + [ Adam Lee ] + + * SAUCE: (no-up) Bluetooth: Add support for 04ca:2007 + - LP: #1153448 + * SAUCE: (no-up) Bluetooth: Add support for 105b:e065 + - LP: #1161261 + + [ Len Brown ] + + * SAUCE: (no-up) tools/power turbostat: additional Haswell CPU-id + - LP: #1083993 + + [ Tim Gardner ] + + * Revert "SAUCE: (no-up) seccomp: forcing auditing of kill condition" + Replaced by upstream patch. + * Release Tracking Bug + - LP: #1165746 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.6 + * Revert "brcmsmac: support 4313iPA" + - LP: #1157190 + * tools/power turbostat: support Haswell + - LP: #1083993 + * net: calxedaxgmac: fix rx ring handling when OOM + * cpufreq: check OF node /cpus presence before dereferencing it + * Input: cypress_ps2 - fix trackpadi found in Dell XPS12 + - LP: #1103594 + * ARM: OMAP2+: Limit omap initcalls to omap only on multiplatform kernels + * ARM: OMAP2+: Use omap initcalls + * ARM: OMAP: Fix i2c cmdline initcall for multiplatform + * ARM: OMAP: Fix dmaengine init for multiplatform + * ARM: OMAP2+: Add multiplatform debug_ll support + * ARM: OMAP2+: Disable code that currently does not work with + multiplaform + * ARM: OMAP2+: Enable ARCH_MULTIPLATFORM support + * ARM: OMAP2+: Add minimal support for booting vexpress + * ARM: OMAP2+: Remove now obsolete uncompress.h and debug-macro.S + * davinci: do not include mach/hardware.h + * clk: export __clk_get_name for re-use in imx-ipu-v3 and others + * [SCSI] storvsc: avoid usage of WRITE_SAME + - LP: #1157952 + * ACPICA: Fix possible memory leak in dispatcher error path. + * KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME (CVE-2013-1796) + - LP: #1158254 + - CVE-2013-1796 + + [ Wen-chien Jesse Sung ] + + * SAUCE: (no-up) Bluetooth: Add a load_firmware callback to struct hci_dev + - LP: #1065400 + * SAUCE: (no-up) Bluetooth: Implement broadcom patchram firmware loader + - LP: #1065400 + * SAUCE: (no-up) Bluetooth: Add support for 13d3:3388 and 13d3:3389 + - LP: #1065400 + + -- Tim Gardner Tue, 02 Apr 2013 08:02:43 -0600 + +linux (3.8.0-16.26) raring; urgency=low + + [ Len Brown ] + + * SAUCE: intel_idle: additional Haswell CPU-id + - LP: #1083993 + + [ Nishanth Menon ] + + * SAUCE: cpufreq: OMAP: instantiate omap-cpufreq as a platform_driver + + [ Tim Gardner ] + + * Rebase to 3.8.5 + * Release Tracking Bug + - LP: #1162956 + + [ Upstream Kernel Changes ] + + * iwlwifi: add 7000 series device configuration + - LP: #1011422 + * mac80211: prevent spurious HT/VHT downgrade message + + -- Tim Gardner Thu, 28 Mar 2013 11:24:36 -0400 + +linux (3.8.0-15.25) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotations -- track move to -generic for armhf + * [Config] annotations -- resync with updated armhf -generic flavour + * [Config] annotations -- clean up redundant annotations + * Revert "SAUCE: add option to hand off all kernel parameters to init" + * SAUCE: add option to hand off all kernel parameters to init + Clean up compile warnings. + - LP: #586386 + * Revert "SAUCE: isapnp_init: make isa PNP scans occur async" + * SAUCE: isapnp_init: make isa PNP scans occur async + Clean up compile warnings. + + [ Paolo Pisati ] + + * [Config] HIHGBANK=y + * [Config] SATA_HIGHBANK=y + * [Config] NET_CALXEDA_XGMAC=y + * [Config] EDAC_HIGHBANK_[MC|L2]=y + * SAUCE: cpufreq: check OF /cpus presence before dereferencing it + * [Config] CONFIG_CPU_IDLE_CALXEDA=y, CONFIG_SWP_EMULATE=y + * [Config] ARM_HIGHBANK_CPUFREQ=y + * [Config] CPU_IDLE_MULTIPLE_DRIVERS=y, CPU_FREQ_DEFAULT_GOV_ONDEMAND=y + + [ Rob Herring ] + + * SAUCE: ARM: cache-l2x0: fix masking of RTL revision numbering and + set_debug init + * SAUCE: ahci: remove calxeda ahci controller + * SAUCE: cpuidle: calxeda: disable power gating by default + * SAUCE: net: calxedaxgmac: fix rx ring handling when OOM + + [ Stefan Bader ] + + * SAUCE: dm-raid45: Fix incompatible ptr assignments + Clean up compile warnings. + + [ Tim Gardner ] + + * [Config] Removed modules from ABI + * [Config] CONFIG_SATA_HIGHBANK=n for x86 + * [Config] Remove highbank as a flavour + * [Config] CONFIG_MAILBOX=y + * SAUCE: acpi/video.c: Fix compile warnings + * SAUCE: apparmor: Fix compile warnings + * SAUCE: vesafb: Cleanup compile warnings + * Release Tracking Bug + - LP: #1161054 + + [ Upstream Kernel Changes ] + + * i2c: iSMT: add Intel Avoton DeviceIDs + - LP: #1083965 + * ARM: use device tree to get smp_twd clock + * clk / highbank: Prevent glitches in non-bypass reset mode + * ARM / highbank: add support for pl320 IPC + * cpufreq / highbank: add support for highbank cpufreq + * PM / OPP: switch exported symbols to GPL variant + * PM / OPP: Export more symbols for module usage + * mailbox, pl320-ipc: remove __init from probe function + + [ Xiangliang Yu ] + + * SAUCE: PCI: define macro for marvell vendor ID + - LP: #1159863 + * SAUCE: PCI: fix system hang issue of Marvell SATA host controller + - LP: #1159863 + + -- Tim Gardner Mon, 25 Mar 2013 11:55:34 -0600 + +linux (3.8.0-14.24) raring; urgency=low + + [ Paolo Pisati ] + + * [Config] rename omap flavour to generic + * [Config] USB_MUSB_HDRC=m + + [ Roger Quadros ] + + * SAUCE: mfd: omap-usb-host: Fix clk warnings at boot + + [ Seth Forshee ] + + * SAUCE: Revert "brcmsmac: support 4313iPA" + - LP: #1157190 + + [ Tim Gardner ] + + * [Config] CONFIG_SERIAL_8250_DW=m across all arches + - LP: #1031162 + * [debian] Build extras package only for specific arches + * [config] Set do_extras_package=true for x86en + * Rebase to 3.8.4 + * Release Tracking Bug + - LP: #1158863 + + [ Upstream Kernel Changes ] + + * Input: ALPS - document the alps.h data structures + - LP: #1089413 + * Input: ALPS - copy "model" info into alps_data struct + - LP: #1089413 + * Input: ALPS - move alps_get_model() down below hw_init code + - LP: #1089413 + * Input: ALPS - introduce helper function for repeated commands + - LP: #1089413 + * Input: ALPS - rework detection sequence + - LP: #1089413 + * Input: ALPS - use function pointers for different protocol handlers + - LP: #1089413 + * Input: ALPS - move {addr,nibble}_command settings into + alps_set_defaults() + - LP: #1089413 + * Input: ALPS - rework detection of Pinnacle AGx touchpads + - LP: #1089413 + * Input: ALPS - fix command mode check + - LP: #1089413 + * Input: ALPS - move pixel and bitmap info into alps_data struct + - LP: #1089413 + * Input: ALPS - make the V3 packet field decoder "pluggable" + - LP: #1089413 + * Input: ALPS - add support for "Rushmore" touchpads + - LP: #1089413 + * Input: ALPS - enable trackstick on Rushmore touchpads + - LP: #1089413 + * Input: ALPS - remove unused argument to alps_enter_command_mode() + - LP: #1089413 + * Input: ALPS - add "Dolphin V1" touchpad support + - LP: #1089413 + * serial: 8250_dw: Use ifdef with ACPI + - LP: #1031162 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.4 + + -- Tim Gardner Tue, 19 Mar 2013 07:37:36 -0600 + +linux (3.8.0-13.23) raring; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "drm/i915: enable irqs earlier when resuming" + - LP: #1156310 + * Revert "drm/i915: reorder setup sequence to have irqs for output setup" + - LP: #1156310 + * x86/apic: Remove noisy zero-mask warning from + default_send_IPI_mask_logical() + - LP: #1100202 + * drm/i915: Fix races in gen4 page flip interrupt handling + - LP: #1116587 + * drm/i915: Revert hdmi HDP pin checks + - LP: #1135668 + * signal: always clear sa_restorer on execve + - LP: #1153813 + - CVE-2013-0914 + + -- Tim Gardner Mon, 18 Mar 2013 10:04:33 -0600 + +linux (3.8.0-13.22) raring; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: fireware: add NO_MSI quirks for o2micro controller" + + [ Kamal Mostafa ] + + * SAUCE: alx: use github.com/qca/alx repo + - LP: #1154238 + * [packaging] do not use ../.$(series)-env file + * SAUCE: Convert bnx2x firmware files to ihex format + + [ Qualcomm Atheros, Inc ] + + * SAUCE: alx: Update to heads/master + - LP: #1154238 + + [ Seth Forshee ] + + * SAUCE: efivars: Allow disabling use as a pstore backend + * [Config] Re-enable CONFIG_PSTORE for x86 + + [ Tim Gardner ] + + * Drop efivarfs reverts in favor of 3.8.3 stable updates + Revert "efivarfs: Validate filenames much more aggressively" + Revert "efivarfs: guid part of filenames are case-insensitive" + * [Config] CONFIG_I2C_ISMT=m + - LP: #1011449 + * [Config] CONFIG_SERIAL_8250_DMA=y,CONFIG_SERIAL_8250_DW=m for x86en + - LP: #1031162 + * Release Tracking Bug + - LP: #1155680 + + [ Upstream Kernel Changes ] + + * net/sctp: Validate parameter size for SCTP_GET_ASSOC_STATS + - LP: #1152791 + - CVE-2013-1828 + * mfd: rtsx: Implement driving adjustment to device-dependent callbacks + - LP: #1153618 + * mfd: rtsx: Support RTS5227 + - LP: #1153618 + * mmc: rtsx: remove driving adjustment + - LP: #1153618 + * i2c: Adding support for Intel iSMT SMBus 2.0 host controller + - LP: #1011449 + * i2c: fix i2c-ismt.c printk format warning + - LP: #1011449 + * serial: quatech: add the other serial identifiers and preliminary + control code + - LP: #1031162 + * serial: Remove RM9000 series serial driver. + - LP: #1031162 + * serial: 8250_pci: remove __devexit usage + - LP: #1031162 + * serial: 8250: Allow drivers to deliver capabilities + - LP: #1031162 + * serial: 8250_dw: Don't use UPF_FIXED_TYPE + - LP: #1031162 + * serial: 8250_dw: Map IO memory + - LP: #1031162 + * serial: 8250_dw: Move device tree code to separate function + - LP: #1031162 + * serial: 8250_dw: Set FIFO size dynamically + - LP: #1031162 + * serial: 8250_dw: Add ACPI 5.0 support + - LP: #1031162 + * serial: 8250: Add support for dmaengine + - LP: #1031162 + * serial: 8250_dw: Enable DMA support with ACPI + - LP: #1031162 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.3 + + -- Tim Gardner Mon, 11 Mar 2013 06:53:51 -0600 + +linux (3.8.0-12.21) raring; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_PSTORE=n for x86 + * Release Tracking Bug + - LP: #1152228 + + [ Upstream Kernel Changes ] + + * Revert "efivarfs: guid part of filenames are case-insensitive" + - LP: #1146988 + * Revert "efivarfs: Validate filenames much more aggressively" + - LP: #1146988 + * mfd: rtsx: Optimize card detect flow + - LP: #1148892 + * mfd: rtsx: Fix issue that booting OS with SD card inserted + - LP: #1148892 + + -- Tim Gardner Wed, 06 Mar 2013 06:40:22 -0700 + +linux (3.8.0-11.20) raring; urgency=low + + [ Tim Gardner ] + + * Release Tracking Bug + - LP: #1147659 + * [Config] CONFIG_SPI_PXA2XX_PCI=m + - LP: #1031169 + * CONFIG_SATA_ZPODD=y + - LP: #1031180 + * CONFIG_GPIO_LYNXPOINT=y + - LP: #1031174 + + [ Upstream Kernel Changes ] + + * spi/pxa2xx-pci: switch to use pcim_* interfaces + - LP: #1031169 + * spi/pxa2xx: embed the ssp_device to platform data + - LP: #1031169 + * spi/pxa2xx: allow building on a 64-bit kernel + - LP: #1031169 + * spi/pxa2xx: fix warnings when compiling a 64-bit kernel + - LP: #1031169 + * spi/pxa2xx: convert to the pump message infrastructure + - LP: #1031169 + * spi/pxa2xx: convert to the common clk framework + - LP: #1031169 + * spi/pxa2xx: break out the private DMA API usage into a separate file + - LP: #1031169 + * spi/pxa2xx: add support for DMA engine + - LP: #1031169 + * spi/pxa2xx: add support for runtime PM + - LP: #1031169 + * spi/pxa2xx: add support for SPI_LOOP + - LP: #1031169 + * spi/pxa2xx: add support for Intel Low Power Subsystem SPI + - LP: #1031169 + * spi/pxa2xx: add support for Lynxpoint SPI controllers + - LP: #1031169 + * i2c-designware: always set the STOP bit after last byte + - LP: #1031166 + * i2c-designware: add minimal support for runtime PM + - LP: #1031166 + * i2c-designware: add support for Intel Lynxpoint + - LP: #1031166 + * remove can_power_off flag from scsi_device + - LP: #1031180 + * sr: support runtime pm + - LP: #1031180 + * libata: identify and init ZPODD devices + - LP: #1031180 + * libata: move acpi notification code to zpodd + - LP: #1031180 + * libata: check zero power ready status for ZPODD + - LP: #1031180 + * libata: handle power transition of ODD + - LP: #1031180 + * libata: expose pm qos flags for ata device + - LP: #1031180 + * libata: do not suspend port if normal ODD is attached + - LP: #1031180 + * pm: differentiate system and runtime pm for ata port + - LP: #1031180 + * PM code cleanup for ata port + - LP: #1031180 + * scsi: no poll when ODD is powered off + - LP: #1031180 + * Set proper SK when CK_COND is set. + - LP: #1031180 + * fix smatch warning for zpodd_wake_dev + - LP: #1031180 + * gpio/lynxpoint: add chipset gpio driver. + - LP: #1031174 + + -- Tim Gardner Tue, 05 Mar 2013 05:42:44 -0700 + +linux (3.8.0-10.19) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotate CONFIG_PATA_ACPI + + [ Tim Gardner ] + + * rebase to v3.8.2 + + [ Upstream Kernel Changes ] + + * NFC: Fixed nfc core and hci unregistration and cleanup + - LP: #1083994 + * NFC: Added error handling in event_received hci ops + - LP: #1083994 + * NFC: Changed event_received hci ops result semantic + - LP: #1083994 + * NFC: Fixed skb leak in tm_send() nfc and hci ops implementations + - LP: #1083994 + * NFC: Add HCI quirks to support driver (non)standard implementations + - LP: #1083994 + * USB: Don't use EHCI port sempahore for USB 3.0 hubs. + - LP: #1011415 + * USB: Prepare for refactoring by adding extra udev checks. + - LP: #1011415 + * USB: Rip out recursive call on warm port reset. + - LP: #1011415 + * USB: Fix connected device switch to Inactive state. + - LP: #1011415 + * USB: Use helper function hub_set_port_link_state + - LP: #1011415 + * USB: Refactor hub_port_wait_reset. + - LP: #1011415 + * usb/core: consider link speed while looking at bMaxPower + - LP: #1011415 + * usb/core: update power budget for SuperSpeed + - LP: #1011415 + * usb: Add driver/usb/core/(port.c,hub.h) files + - LP: #1011415 + * usb: fix compilation error and warning of driver/usb/core/port.c on arm + and blackfin + - LP: #1011415 + * usb: Add "portX/connect_type" attribute to expose usb port's connect + type + - LP: #1011415 + * usb: Create link files between child device and usb port device. + - LP: #1011415 + * USB: Set usb port's DeviceRemovable according acpi information + - LP: #1011415 + * USB: fix sign-extension bug in the hub driver + - LP: #1011415 + * usb: add runtime pm support for usb port device + - LP: #1011415 + * usb: add usb port auto power off mechanism + - LP: #1011415 + * usb: expose usb port's pm qos flags to user space + - LP: #1011415 + * usb: enable usb port device's async suspend. + - LP: #1011415 + * drm: add prime helpers + - LP: #1138440 + * drm/nouveau: use prime helpers + - LP: #1138440 + * drm/radeon: use prime helpers + - LP: #1138440 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.2 + - LP: #961286 + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1144449 + + -- Tim Gardner Fri, 01 Mar 2013 07:10:07 -0700 + +linux (3.8.0-9.18) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1135937 + * [Config] CONFIG_PATA_ACPI=m + - LP: #1084783 + + [ Upstream Kernel Changes ] + + * intel_idle: stop using driver_data for static flags + - LP: #1083993 + * intel_idle: support Haswell + - LP: #1083993 + * i2c: i801: SMBus patch for Intel Avoton DeviceIDs + - LP: #1083965 + * ahci: AHCI-mode SATA patch for Intel Avoton DeviceIDs + - LP: #1083965 + * ata_piix: IDE-mode SATA patch for Intel Avoton DeviceIDs + - LP: #1083965 + + [ Upstream Kernel Changes ] + + * rebase to v3.8.1 + - LP: #1011792 + + -- Tim Gardner Wed, 27 Feb 2013 06:10:52 -0700 + +linux (3.8.0-8.17) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1133552 + * Bump ABI to fix armhf FTBS + + [ Herton Ronaldo Krzesinski ] + + * d-i: Add hid-logitech-dj to input-modules + - LP: #975198 + + -- Tim Gardner Tue, 26 Feb 2013 12:12:21 -0700 + +linux (3.8.0-7.16) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] all new menu aligned annotations + * [Config] v3.8 configuration review -- pass 1 + * [Config] v3.8 configuration review -- pass 2 + * [Config] apply v3.8 final configuration review changes + * [Config] annotation: ALX does not build on powerpc + * [Config] CONFIG_DEBUG_INFO=y + + [ Mathias Krause ] + + * SAUCE: sock_diag: Fix out-of-bounds access to sock_diag_handlers[] + - LP: #1132896 + - CVE-2013-1763 + + -- Tim Gardner Sun, 24 Feb 2013 06:38:59 -0700 + +linux (3.8.0-7.15) raring; urgency=low + + [ Kamal Mostafa ] + + * [Config] Add CONFIG_PS2_CYPRESS + * SAUCE: Input: Cypress PS/2 Trackpad simulated multitouch + * SAUCE: Input: fix Cypress PS/2 Trackpad in Dell XPS12 + - LP: #1103594 + + [ Upstream Kernel Changes ] + + * Input: increase struct ps2dev cmdbuf[] to 8 bytes + * Input: add support for Cypress PS/2 Trackpads + - LP: #978807 + + -- Tim Gardner Thu, 21 Feb 2013 11:59:19 -0700 + +linux (3.8.0-7.14) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_RCU_USER_QS=n + * [Config] CONFIG_MTD_ONENAND_SIM=n + * annotations: add annotations for CONFIG_CC_STACKPROTECTOR + + [ Upstream Kernel Changes ] + + * rebase to v3.8 + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1130111 + * UBUNTU: SAUCE: rt2x00: rt2x00pci_regbusy_read() - only print register access failure once + - LP: #1128840 + + -- Tim Gardner Mon, 18 Feb 2013 09:25:56 -0700 + +linux (3.8.0-6.13) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1125364 + * Add ahci modules to d-i + - LP: #1124415 + + + [ Chris Wilson ] + + * SAUCE: drm/i915: Wait for pending flips to complete before tearing down + the encoders + - LP: #1097315 + + -- Tim Gardner Wed, 13 Feb 2013 12:16:48 -0700 + +linux (3.8.0-6.12) raring; urgency=low + + [Tim Gardner] + + * perf: NO_LIBPERL=1 + * Fix linux-headers dependency + * Release Tracking Bug + - LP: #1124362 + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_EXPORT to allow nfs exports + - LP: #1121699 + + [ Daniel Vetter ] + + * SAUCE: drm/i915: write backlight harder + - LP: #954661 + + -- Tim Gardner Wed, 13 Feb 2013 10:25:11 -0700 + +linux (3.8.0-6.11) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1122071 + * rebase to v3.8-rc7 + * Add libaudit-dev as a build dependency + * Build perf with NO_LIBPYTHON=1 to avoid a python build dependency. + + [ Leann Ogasawara ] + + * [Config] Remove CONFIG_SATA_AHCI annotation + + -- Tim Gardner Fri, 08 Feb 2013 07:41:13 -0500 + +linux (3.8.0-5.10) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1118568 + + * Bump ABI to fix install issue with 3.8.0-4.8. + Moving drivers/ata/*ahci* to linux-image caused an + install conflict with linux-image-extras without an + ABI bump. + + [ Jan Beulich ] + + * SAUCE: xen-pciback: rate limit error messages from + xen_pcibk_enable_msi{, x}() + - LP: #1117336 + - CVE-2013-0231 + + -- Tim Gardner Thu, 07 Feb 2013 05:38:12 -0700 + +linux (3.8.0-4.9) raring; urgency=low + + [ Herton Ronaldo Krzesinski ] + + * d-i: Add mellanox ethernet drivers to nic-modules + - LP: #1015339 + + [ Joseph Salisbury ] + + * SAUCE: ACPI: Add DMI entry for Sony VGN-FW41E_H + - LP: #1113547 + + [ Kamal Mostafa ] + + * SAUCE: alx driver import script + + [ Qualcomm Atheros, Inc ] + + * SAUCE: alx: Update to heads/master + + [ Tim Gardner ] + + * Release Tracking Bug + - LP: #1117673 + + * [debian] Remove dangling symlink from headers package + - LP: #1112442 + * [config] CONFIG_ALX=m + * [Config] Add alx to d-i nic-modules + * [Config] CONFIG_SATA_AHCI=m + - LP: #1056563 + + -- Leann Ogasawara Tue, 05 Feb 2013 05:54:32 -0800 + +linux (3.8.0-4.8) raring; urgency=low + + [ Allen Ibara ] + + * SAUCE: imx6: dts: Add IMX6Q AHCI support + + [ Andy Whitcroft ] + + * rebase to v3.8-rc6 + * updateconfigs following rebase to v3.8-rc6 + + [Leann Ogasawara] + + * Release Tracking Bug + - LP: #1112573 + + [ Paolo Pisati ] + + * SAUCE: imx6: enable sata clk if SATA_AHCI_PLATFORM + * [Config] SERIAL_AMBA_PL011=y (vexpress serial console) + * [Config] MMC_ARMMMCI=y (vexpress mmc) + * [Config] FB_ARMCLCD=y (vexpress framebuffer) + + [ Seth Forshee ] + + * [Config] CONFIG_MAC80211_MESSAGE_TRACING=y + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc6 + - LP: #1107477 + + -- Leann Ogasawara Fri, 01 Feb 2013 07:20:59 -0800 + +linux (3.8.0-3.7) raring; urgency=low + + [ Andy Green ] + + * SAUCE: ARM: OMAP2+: add cpu id register to MAC address helper + * SAUCE: ARM: omap2 add mac address allocation register api + * SAUCE: ARM: omap2 panda register ethernet and wlan for automatic mac + allocation + + [ Leann Ogasawara ] + + * rebase to v3.8-rc5 + * Release Tracking Bug + - LP: #1111486 + + [ Paolo Pisati ] + + * SAUCE: davinci: vpss: compilation fix + * [Config] enable TI OMAP4 support (Pandaboard/ES) + * [Config] OMAP_USB2=y (since TWL6030_USB depends on it) + * [Config] enable Freescale IMX6 support (SabreLite) + * [Config] SERIAL_IMX_CONSOLE=y + * [Config] MMC_*_IMX=y + * [Config] disable USB_SUSPEND + * [Config] USB_MXS_PHY=y + * [Config] USB_CHIPIDEA=y + * SAUCE: DTB: add support for multiple DTBs + * SAUCE: DTB: build imx6q-sabrelite + * SAUCE: DTB: build beaglexm + * SAUCE: DTB: build panda/panda es + * [Config] disable CPU_FREQ + * [Config] PANEL_TFP410=y (video DVI output) + * [Config] SND_OMAP_SOC*=y + * [Config] SND_IMX_SOC*=y + * [Config] I2C_IMX=y + * [Config] SPI_IMX=m + + [ Stefan Bader ] + + * [Config] Move 9p modules into generic package + - LP: #1107658 + + [ Tony Lindgren ] + + * SAUCE: ARM: OMAP2+: Limit omap initcalls to omap only on multiplatform + kernels + * SAUCE: ARM: OMAP2+: Use omap initcalls + * SAUCE: ARM: OMAP: Fix i2c cmdline initcall for multiplatform + * SAUCE: ARM: OMAP: Fix dmaengine init for multiplatform + * SAUCE: ARM: OMAP2+: Add multiplatform debug_ll support + * SAUCE: ARM: OMAP2+: Disable code that currently does not work with + multiplaform + * SAUCE: ARM: OMAP2+: Enable ARCH_MULTIPLATFORM support + * SAUCE: ARM: OMAP2+: Add minimal support for booting vexpress + * SAUCE: ARM: OMAP2+: Remove now obsolete uncompress.h and debug-macro.S + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc5 + - LP: #1096789 + + -- Leann Ogasawara Thu, 31 Jan 2013 06:44:52 -0800 + +linux (3.8.0-2.6) raring; urgency=low + + [ Adam Conrad ] + + * Fix up linux-tools -> SRCPKGNAME-tools rename + + [ Andy Whitcroft ] + + * [Config] re-disable CONFIG_SOUND_OSS + - LP: #1105230 + + [ Arend van Spriel ] + + * SAUCE: brcmsmac: fix tx status processing + + [Leann Ogasawara] + + * Release Tracking Bug + - LP: #1105104 + + -- Leann Ogasawara Fri, 25 Jan 2013 11:56:30 -0800 + +linux (3.8.0-1.5) raring; urgency=low + + [Tim Gardner] + + * Release Tracking Bug + - LP: #1101235 + + [ Dudley Du ] + + * SAUCE: Input: add support for Cypress PS/2 Trackpads + - LP: #978807 + + [ Kamal Mostafa ] + + * SAUCE: Input: increase struct ps2dev cmdbuf[] to 8 bytes + * SAUCE: Input: Cypress PS/2 Trackpad simulated multitouch + * [Config] Add CONFIG_PS2_CYPRESS + + [ Tim Gardner ] + + * rebase to v3.8-rc4 + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc4 + - LP: #1095315 + - LP: #886975 + - LP: #1086921 + + -- Leann Ogasawara Thu, 17 Jan 2013 10:50:22 -0800 + +linux (3.8.0-0.4) raring; urgency=low + + [ Leann Ogasawara ] + + * [Config] Update CONFIG_TOUCHSCREEN_EGALAX build annotation + * [Config] Update CONFIG_IIO build annotation + * [Config] Update CONFIG_TOUCHSCREEN_EETI annotation + * [Config] Remove CONFIG_SPI_DW_MMIO annotation + * [Config] Remove CONFIG_SPI_PL022 annotation + * [Config] Update CONFIG_EZX_PCAP annotation + * [Config] Update CONFIG_SENSORS_AK8975 annotation + * [Config] Disable CONFIG_DRM_MGAG200 + - LP: #1042903 + + -- Leann Ogasawara Mon, 14 Jan 2013 10:01:50 -0800 + +linux (3.8.0-0.3) raring; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: (no-up) trace: add trace events for open(), exec() and + uselib()" + + [ Scott James Remnant ] + + * SAUCE: (no-up) trace: add trace events for open(), exec() and uselib() + (for v3.7+) + - LP: #1085766, #462111 + + -- Andy Whitcroft Fri, 11 Jan 2013 16:57:27 +0000 + +linux (3.8.0-0.2) raring; urgency=low + + [ Tim Gardner ] + + * [packaging] Add macro to selectively disable building perf + * [packaging] Cannot depend on universe package libaudit-dev + + -- Tim Gardner Thu, 10 Jan 2013 12:43:24 -0700 + +linux (3.8.0-0.1) raring; urgency=low + + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc3 + - LP: #1096789 + + [ Upstream Kernel Changes ] + + * rebase to v3.8-rc2 + - LP: #1082357 + - LP: #1075882 + + -- Andy Whitcroft Mon, 17 Dec 2012 10:35:09 +0000 + +linux (3.7.0-7.15) raring; urgency=low + + [ Chris J Arges ] + + * SAUCE: add eeprom_bad_csum_allow module parameter + - LP: #1070182 + + [ Leann Ogasawara ] + + * Add ceph to linux-image for virtual instances + - LP: #1063784 + + [ Serge Hallyn ] + + * SAUCE: net: dev_change_net_namespace: send a KOBJ_REMOVED/KOBJ_ADD + + [ Tim Gardner ] + + * [Config] CONFIG_SLUB_DEBUG=y + - LP: #1090308 + + [ Upstream Kernel Changes ] + + * Revert "[SCSI] sd: Implement support for WRITE SAME" + - LP: #1089818 + + -- Leann Ogasawara Wed, 12 Dec 2012 06:50:20 -0800 + +linux (3.7.0-6.14) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotations: all new annotations scheme including defaults + * [Configs] apply annotation updates to main configs (top section) + + [ Leann Ogasawara ] + + * Revert "SAUCE: include and for mmc_core arm + build" + * Revert "SAUCE: [arm] fixup __aeabi_uldivmod undefined build error" + * Temporarily disable module check for build + + [ Stefan Bader ] + + * ubuntu: dm-raid45: Adapt to upstream interface changes + * Re-enable build of dm-raid45 + + [ Tim Gardner ] + + * SAUCE: Moved scripts/fw-to-ihex.sh to debian/scripts/misc + * SAUCE: ACPICA: Fix ACPI mutex object allocation memory leak on error + * SAUCE: drm: Fix possible EDID memory allocation oops + * SAUCE: ttm: Fix possible _manager memory allocation oops + * SAUCE: iwlwifi: iwlagn_request_scan: Fix check for priv->scan_request + * SAUCE: i915: intel_set_mode: Reduce stack allocation from 500 bytes to + 2 pointers + + [ Tomas Hozza ] + + * SAUCE: tools: hv: Netlink source address validation allows DoS + - LP: #1084777 + - CVE-2012-5532 + + [ Upstream Kernel Changes ] + + * rebase to v3.7 + + -- Leann Ogasawara Wed, 05 Dec 2012 14:11:12 -0800 + +linux (3.7.0-5.13) raring; urgency=low + + [ Lino Sanfilippo ] + + * SAUCE: inotify, fanotify: replace fsnotify_put_group() with + fsnotify_destroy_group() + - LP: #922906 + * SAUCE: fsnotify: introduce fsnotify_get_group() + - LP: #922906 + * SAUCE: fsnotify: use reference counting for groups + - LP: #922906 + * SAUCE: fsnotify: take groups mark_lock before mark lock + - LP: #922906 + * SAUCE: fanotify: add an extra flag to mark_remove_from_mask that + indicates wheather a mark should be destroyed + - LP: #922906 + * SAUCE: fsnotify: use a mutex instead of a spinlock to protect a groups + mark list + - LP: #922906 + * SAUCE: fsnotify: pass group to fsnotify_destroy_mark() + - LP: #922906 + * SAUCE: fsnotify: introduce locked versions of fsnotify_add_mark() and + fsnotify_remove_mark() + - LP: #922906 + * SAUCE: fsnotify: dont put marks on temporary list when clearing marks + by group + - LP: #922906 + * SAUCE: fsnotify: change locking order + - LP: #922906 + + [ Tim Gardner ] + + * [Config] CONFIG_NFC_LLCP=y + * [Config] get-firmware: Filter new files through fwinfo + * [Config] CONFIG_MTD_NAND_DOCG4=m for all arches + * [Config] CONFIG_DRM_EXYNOS_HDMI=y + * [Config] CONFIG_XEN=y for all arches + * [Config] CONFIG_SND_OMAP_SOC_ZOOM2=m + * [Config] CONFIG_MMC_DW_EXYNOS=m + * [Config] CONFIG_GPIO_ADNP=m + * [Config] find-obsolete-firmware: Use correct path + * rebase to v3.7-rc8 + - LP: #1084640 + + [ Upstream Kernel Changes ] + + * Revert "VFS: don't do protected {sym,hard}links by default" + - LP: #1084192 + + -- Tim Gardner Wed, 28 Nov 2012 16:07:08 +0000 + +linux (3.7.0-4.12) raring; urgency=low + + [ Tim Gardner ] + + * Revert "[Config] Use -j1 for headers_install" + * Revert "[Config] install-arch-headers needs a valid config" + Strayed into the weeds in search of the root cause of the periodic + build failure. + Fixes powerpc FTBS introduced in -4.11. + * [Config] hmake -j1 + The kernel makefile appears to have parallel dependency + problems for the install_headers target. This appears to be root + cause for a periodic build failure on N-way machines. + + -- Leann Ogasawara Tue, 27 Nov 2012 12:33:06 -0800 + +linux (3.7.0-4.11) raring; urgency=low + + [ Tim Gardner ] + + * [Config] Use -j1 for headers_install + Also fixes a powerpc FTBS introduced by + "[Config] install-arch-headers needs a valid config". + + -- Tim Gardner Tue, 27 Nov 2012 10:19:30 -0700 + +linux (3.7.0-4.10) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] add rebuild-test support for autopkgtest + - LP: #1081500 + * [tests] move build tests out of the way + - LP: #1081500 + * [tests] add an autopkgtest rebuild test + - LP: #1081500 + + [ Tim Gardner ] + + * rebase to v3.7-rc7 + * SAUCE: Remove emi62 files duplicated in linux-firmware + * SAUCE: Remove sb16 files duplicated in linux-firmware + * SAUCE: Remove whiteheat files duplicated in linux-firmware + * SAUCE: Remove yamaha files duplicated in linux-firmware + * SAUCE: Remove dsp56k files used only by m68k + * SAUCE: firmware: Remove last vestiges of dabusb + * SAUCE: Remove vicam files duplicated in linux-firmware + * [Config] install-arch-headers needs a valid config + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc7 + - LP: #1076840 + - LP: #1081466 + + -- Leann Ogasawara Wed, 21 Nov 2012 06:07:23 -0800 + +linux (3.7.0-3.9) raring; urgency=low + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_X86_CPUFREQ_NFORCE2=y + - LP: #1079900 + * Add nfsv3 to nfs-modules udeb + + [ Paolo Pisati ] + + * [Config] SND_OMAP_SOC*=y + - LP: #1019321 + + [ Stefan Bader ] + + * SAUCE: (no-up) xen/netfront: handle compound page fragments on transmit + - LP: #1078926 + + [ Tim Gardner ] + + * Revert "SAUCE: SECCOMP: audit: always report seccomp violations" + - LP: #1079469 + * Revert "SAUCE: omap3 clocks .dev_id = NULL" + * rebase to v3.7-rc6 + * SAUCE: script to detect obsolete firmware + * SAUCE: Remove yam files duplicated in linux-firmware + * SAUCE: Remove tehuti files duplicated in linux-firmware + * SAUCE: Remove matrox files duplicated in linux-firmware + * SAUCE: Remove cxgb3 files duplicated in linux-firmware + * SAUCE: Remove r128 files duplicated in linux-firmware + * SAUCE: Remove acenic files duplicated in linux-firmware + * SAUCE: Remove keyspan files duplicated in linux-firmware + * SAUCE: Remove sun files duplicated in linux-firmware + * SAUCE: Remove radeon files duplicated in linux-firmware + * SAUCE: Update bnx2x firmware to 7.8.2.0 + * [Config] generic.inclusion-list: econet has disappeared + + [ Upstream Kernel Changes ] + + * seccomp: forcing auditing of kill condition + - LP: #1079469 + * rebase to v3.7-rc6 + + -- Leann Ogasawara Tue, 20 Nov 2012 12:28:55 -0800 + +linux (3.7.0-2.8) raring; urgency=low + + [ Andy Whitcroft ] + + * Revert "overlayfs: disable until FTBS is fixed" + * Revert "ubuntu: overlayfs" + * Revert "ubuntu: AUFS" + * ubuntu: overlayfs -- overlayfs: add statfs support + * ubuntu: overlayfs -- ovl: switch to __inode_permission() + * ubuntu: overlayfs -- overlayfs: copy up i_uid/i_gid from the underlying + inode + - LP: #944386 + * ubuntu: AUFS (no-squash): basic framework and update machinary + * ubuntu: AUFS (no-squash) -- aufs3-base.patch + * ubuntu: AUFS (no-squash) -- aufs3-standalone.patch + * ubuntu: AUFS: aufs-update -- follow the uapi header changes + * ubuntu: AUFS -- update to f2873474324d0a31af4340554b9715f51331bc7f + * ubuntu: AUFS (no-squash) -- reenable + - LP: #1079193 + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: add i_op->dentry_open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + * ubuntu: overlayfs -- vfs: export __inode_permission() to modules + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Robin Dong ] + + * ubuntu: overlayfs -- overlayfs: fix possible leak in ovl_new_inode + * ubuntu: overlayfs -- overlayfs: create new inode in ovl_link + + -- Andy Whitcroft Thu, 15 Nov 2012 13:35:12 +0000 + +linux (3.7.0-1.7) raring; urgency=low + + [ Tim Gardner ] + + * [Config] Drop dependency on libaudit-dev + Its a universe package which causes an FTBS on the builders. + libaudit-dev is not strictly required for the perf tools build. + + -- Tim Gardner Wed, 14 Nov 2012 10:08:13 -0700 + +linux (3.7.0-1.6) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] enforce -- switch CONFIG_NVRAM to more readable form + * [Config] better encode the CONFIG_NVRAM constaint + * enforcer -- fix debugging output + + [ Ben Collins ] + + * [Config] Add custom_override rule to allow for alternate kernel + file/install + * [Config] Use SRCPKGNAME as prefix for indep linux headers package + + [ Tim Gardner ] + + * [Config] Dropped armel + * Drop highbank from ABI fetch list + * [Config] Use dh_prep instead of 'dh_clean -k' + * [Config] Build depend on libaudit-dev, libunwind8-dev for tools + * [Config] Document binary-indep dependency chain + * rebase to v3.7-rc5 + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc5 + + -- Tim Gardner Tue, 13 Nov 2012 07:13:37 -0500 + +linux (3.7.0-0.5) raring; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_AMD_IOMMU_V2=m + - LP: #1071520 + * [Config] CONFIG_MTD_ONENAND_SIM=n for armel + Fixes FTBS + + -- Tim Gardner Thu, 08 Nov 2012 15:45:39 -0500 + +linux (3.7.0-0.4) raring; urgency=low + + [ Ben Collins ] + + * [Config] Update enforce rule for CONFIG_NVRAM to better suit flavours + + [ Tim Gardner ] + + * [Config] do_tools=false for arm + + -- Tim Gardner Thu, 08 Nov 2012 05:39:51 -0700 + +linux (3.7.0-0.3) raring; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_DRM_EXYNOS_HDMI=n for armhf + * [Config] CONFIG_MTD_NAND_DOCG4=n for armel/armhf + * [Config] Drop highbank harder + + -- Tim Gardner Wed, 07 Nov 2012 18:11:45 +0000 + +linux (3.7.0-0.2) raring; urgency=low + + [ Andy Whitcroft ] + + * [Config] add fs/udf to linux-image to support DVD/CD formats in virtual + instances + - LP: #1066921 + * [Config] drop highbank builds + + [ Jeremy Kerr ] + + * SAUCE: efivarfs: Implement exclusive access for {get, set}_variable + - LP: #1063061 + + [ Leann Ogasawara ] + + * Reinstate dropped.txt from Ubuntu-3.7.0-0.1-rc1 + + [ Tim Gardner ] + + * [Config] Dropped powerpc/ppc64 in favour of the community kernel + * [Config] CONFIG_MODULE_SIG=y for amd64,i386, and highbank + * rebase to v3.7-rc4 + * SAUCE: MODSIGN: Emit error for incorrectly signed module + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc4 + + -- Tim Gardner Mon, 05 Nov 2012 05:35:41 -0700 + +linux (3.7.0-0.1) raring; urgency=low + + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc3 + - LP: #1056078 + + [ Upstream Kernel Changes ] + + * rebase to v3.7-rc2 + - LP: #1060729 + - LP: #1059523 + - LP: #1006690 + - LP: #1049623 + - LP: #1046512 + - LP: #1052499 + - LP: #1037642 + - LP: #559939 + - LP: #1052460 + - LP: #939161 + - LP: #1046734 + + -- Tim Gardner Tue, 02 Oct 2012 08:13:07 -0600 + +linux (3.6.0-0.1) UNRELEASED; urgency=low + + + [ Upstream Kernel Changes ] + + * rebase to v3.6 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc7 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc6 + - LP: #1000424 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc5 + - LP: #1040077 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc4 + + [ Upstream Kernel Changes ] + + * rebase to v3.6-rc3 + - LP: #1038651 + - LP: #1034779 + + -- Leann Ogasawara Tue, 24 Jul 2012 06:37:09 -0700 + +linux (3.5.0-6.6) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION enable IPv6 + experimental features + * SAUCE: highbank -- export clock functions for modules + * [Config] highbank -- reenable CONFIG_TOUCHSCREEN_W90X900 + * [Config] highbank -- renenable CONFIG_SERIO_AMBAKMI + * [Config] highbank -- reenable CONFIG_RFKILL_GPIO + * [Config] highbank -- reenable CONFIG_MMC_SDHCI_PXAV3 + * [Config] highbank -- reenable CONFIG_MMC_SDHCI_PXAV3 + * [Config] highbank -- reenable CONFIG_KEYBOARD_SAMSUNG + * [Config] highbank -- reenable CONFIG_FB_ARMCLCD + * [Config] highbank -- reenable CONFIG_DW_DMAC + * [Config] highbank -- reenable CONFIG_USB_R8A66597_HCD + * [Config] highbank -- reenable CONFIG_USB_MV_UDC + * [Config] highbank -- reenable CONFIG_USB_DWC3 + * [Config] highbank -- reenable CONFIG_SATA_MV + * [Config] highbank -- reenable CONFIG_PATA_ARASAN_CF + * [Config] highbank -- CONFIG_CAN_C_CAN_PLATFORM + * [Config] highbank -- reenable CONFIG_MMC_ARMMMCI + * [Config] highbank -- reenable CONFIG_SERIAL_AMBA_PL010 + * [Config] highbank -- reenable CONFIG_ATMEL_PWM + * [Config] highbank -- enable CONFIG_CHECKPOINT_RESTORE + * [Config] highbank -- enable CONFIG_EXPERT + * [Config] highbank -- enable CONFIG_CHECKPOINT_RESTORE + * [Config] enable CONFIG_USB_DYNAMIC_MINORS + * [Config] enable CONFIG_USB_EHCI_TT_NEWSCHED + * [Config] enable CONFIG_USB_ETH_EEM + * [Config] enable CONFIG_USB_HCD_BCMA/CONFIG_USB_HCD_SSB + * [Config] disable CONFIG_USB_M66592 + * [Config] enable CONFIG_USB_NET2272 + * [Config] enable CONFIG_USB_R8A66597 + * [Config] annotate: CONFIG_USB_OMAP not required for our h/w + * [Config] set CONFIG_USB_MUSB_HDRC=m for omap + * [Config] annotate: CONFIG_USB_G_MULTI fix rule + * [Config] CONFIG_USB_GPIO_VBUS=m for OMAP + * [Config] Enable CONFIG_DRM_AST/_CIRRUS_QEMU/_MGAG200 + * [Config] sync configuration armhf omap -> armel omap + * [Config] annotate: CONFIG_IIO triggers build failures on OMAP4 + * [Config] disable CONFIG_OMAP_IOVMM is deprecated + + [ Bryan Wu ] + + * [Config] change default IO scheduler from CFQ to Deadline + + [ Leann Ogasawara ] + + * Revert "[Config] Temporarily disable CONFIG_MV643XX_ETH on powerpc" + * [Config] Disable CONFIG_MOUSE_INPORT + + [ Tim Gardner ] + + * SAUCE: firmware: Update bnx2x to current firmware version 7.2.51 + * [Config] Add bnx2x firmware to nic-modules udeb + * SAUCE: Add script to convert firmware to ihex format + * SAUCE: firmware: Upgrade bnx2 to current versions + * [Config] Add tigon firmware to nic-modules udeb + * [Config] CONFIG_EARLY_PRINTK_DBGP=y + - LP: #1026761 + * SAUCE: Remove redundant cis firmware + * SAUCE: Remove redundant emi26 firmware + * SAUCE: Remove redundant ttusb-budget firmware + * SAUCE: Remove redundant sun/cassini firmware + * SAUCE: Remove redundant ositech/Xilinx7OD firmware + * SAUCE: Remove redundant 3com/typhoon.bin firmware + * SAUCE: Remove redundant yamaha/ds1 firmware + * SAUCE: Remove redundant keyspan_pda firmware + * rebase to v3.5 + + [ Upstream Kernel Changes ] + + * rebase to v3.5 + - LP: #1027828 + + -- Leann Ogasawara Mon, 23 Jul 2012 05:57:04 -0700 + +linux (3.5.0-5.5) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] annotations: initial import of configuration annotations + + [ Bryan Wu ] + + * [Config] enforcer -- add CONFIG_I2C_DESIGNWARE_PLATFORM enforce checker + + [ Leann Ogasawara ] + + * Rebase to v3.5-rc7 + + [ Manoj Iyer ] + + * SAUCE: Bluetooth: btusb: Add vendor specific ID (0a5c:21f4) BCM20702A0 + - LP: #1010281 + + [ Tim Gardner ] + + * [Config] enable CONFIG_I2C_HELPER_AUTO for all flavours as policy + expects + * [Config] CONFIG_I2O_CONFIG_OLD_IOCTL=n + * [Config] CONFIG_BRIDGE_EBT_ULOG=n + * [Config] CONFIG_IP_NF_QUEUE=n + * [Config] CONFIG_MTD_DOC2000=n + * [Config] CONFIG_PRINT_QUOTA_WARNING=n + * [Config] CONFIG_PRISM54=n + * [Config] CONFIG_SCx200_I2C=n + * [Config] CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc7 + + -- Leann Ogasawara Mon, 16 Jul 2012 15:38:41 -0700 + +linux (3.5.0-4.4) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Packaging] getabis should be extracting all packages + - LP: #1021174 + * [Config] getabis -- series uses linux-image-extra + - LP: #1021174 + * rebase to v3.5-rc6 + + [ Bryan Wu ] + + * [Config] built-in CONFIG_MICREL_PHY as other PHY drivers for all + flavours + * [Config] sync CONFIG_MOUSE_PS2_ config for all flavours + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_RT2800USB_RT35XX and CONFIG_RT2800USB_RT53XX + - LP: #1019561 + + [ Paolo Pisati ] + + * [Config] SND_OMAP_SOC, SND_OMAP_SOC_MCBSP and SND_OMAP_SOC_OMAP3_BEAGLE =y + - LP: #1019321 + + [ Stefan Bader ] + + * SAUCE: (pre-up) net: dont use __netdev_alloc_skb for bounce buffer + - LP: #1018456 + * (config) Disable ACPI_PROCFS_POWER + + [ Tim Gardner ] + + * [Config] CONFIG_ACPI_BGRT=y + * Extract firmware module info during getabi + - LP: #1021174 + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc6 + + -- Leann Ogasawara Mon, 09 Jul 2012 08:50:20 -0700 + +linux (3.5.0-3.3) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_MEMTEST=y + - LP: #1004535 + * [Config] config-check: add support for a cut operation + * [Config] enforcer -- switch to cut where appropriate + + [ Leann Ogasawara ] + + * Rebase to v3.5-rc5 + * [Config] Updateconfigs after rebase to v3.5-rc5 + + [ Luis Henriques ] + + * SAUCE: ocfs2: Fix NULL pointer dereferrence in + __ocfs2_change_file_space + - LP: #1006012 + + [ Seth Forshee ] + + * SAUCE: (drop after 3.5) drm/i915: ignore pipe select bit when checking + for LVDS register initialization + - LP: #1012800 + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc5 + - LP: #1013183 + - LP: #1017017 + - LP: #884652 + + -- Leann Ogasawara Mon, 02 Jul 2012 06:41:58 -0700 + +linux (3.5.0-2.2) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * rebase to v3.5-rc4 + + [ Arend van Spriel ] + + * SAUCE: (drop after 3.5) brcmsmac: fix NULL pointer crash in + brcms_c_regd_init() + - LP: #950320 + + [ Bryan Wu ] + + * [Config] Sync CONFIG_CGROUP_MEM_RES_CTLR_SWAP for ARM + + [ Chris J Arges ] + + * PACKAGING: add .gnu_debuglink sections to .ko files + - LP: #669641 + + [ Leann Ogasawara ] + + * d-i: Add hid-generic to input-modules + - LP: #1017879 + + [ Ming Lei ] + + * SAUCE: Revert "mmc: omap_hsmmc: Enable Auto CMD12" + - LP: #1017717, #225 + + [ Paolo Pisati ] + + * SAUCE: Revert "Fix OMAP EHCI suspend/resume failure (i693)" + - LP: #1017718 + * [Config] Disable generic USB_EHCI_HCD_PLATFORM on omap3 + + [ Seth Forshee ] + + * SAUCE: (drop after 3.5) brcm80211: smac: don't set up tx power limits + during initialization + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: always set channel specified + by mac80211 + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: remove unused code for 40MHz + channels + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: clean up channel.c + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: inform mac80211 of the X2 + regulatory domain + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: enable/disable radio on + regulatory updates + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: use mac80211 channel data for + tx power limits + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: don't validate channels + against internal regulatory data + - LP: #950320 + * SAUCE: (drop after 3.5) brcm80211: smac: use current regulatory domain + when checking whether OFDM is allowed + - LP: #950320 + + [ Tim Gardner ] + + * [Config] Enable CONFIG_CGROUPS for highbank + - LP: #1014692 + * [Config] FB_OMAP*=y and PANEL_TFP410=y + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc4 + + -- Leann Ogasawara Tue, 26 Jun 2012 06:21:05 -0700 + +linux (3.5.0-1.1) quantal-proposed; urgency=low + + [ Andy Whitcroft ] + + * [Config] highbank -- enable CONFIG_RFKILL=y and CONFIG_CAN=m + + [ Leann Ogasawara ] + + * Rebase to v3.5-rc1 + * [Config] Remove USB_DEVICEFS from the config enforcer + * [Config] Updateconfigs after rebase to v3.5-rc1 + * [Config] Temporarily disable CONFIG_MACH_NOKIA_RX51 on arm + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EETI on arm + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EGALAX on arm + * [Config] Temporarily disable CONFIG_EZX_PCAP on arm + * [Config] Temporarily disable CONFIG_LIS3L02DQ on arm + * [Config] Temporarily disable CONFIG_TI_CPSW on arm + * [Config] Temporarily disable CONFIG_GPIO_EM on arm + * [Config] Temporarily disable CONFIG_SERIAL_8250_EM on armhf + * [Config] Temporarily disable CONFIG_STMMAC_ETH on armhf + * [Config] Temporarily disable CONFIG_HW_RANDOM_ATMEL on armhf + * Rebase to v3.5-rc2 + * [Config] Updateconfigs after rebase to v3.5-rc2 + * [Config] Temporarily disable CONFIG_MV643XX_ETH on powerpc + * Rebase to v3.5-rc3 + * [Config] Updateconfigs after rebase to v3.5-rc3 + + [ Paul Mundt ] + + * SAUCE: fix bug.h's inclusion of kernel.h + + [ Stefan Bader ] + + * SAUCE: Fix compile failures of dm-raid45 + * [Config] Enable dm-raid45 + * Move dependency on crda to extra package + - LP: #657901 + * SAUCE: Mask CR4 writes on older Xen hypervisors + + [ Upstream Kernel Changes ] + + * rebase to v3.5-rc3 + - LP: #993162 + - LP: #925577 + * rebase to v3.5-rc2 + * rebase to v3.5-rc1 + - LP: #955892 + - LP: #978038 + - LP: #987371 + - LP: #929545 + - LP: #942316 + - LP: #903853 + + -- Leann Ogasawara Fri, 08 Jun 2012 14:28:46 -0700 + +linux (3.4.0-5.11) quantal-proposed; urgency=low + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_ARM_LPAE + - LP: #1009061 + + [ Oleksij Rempel ] + + * SAUCE: b43: do not call ieee80211_unregister_hw if we are not registred + - LP: #1008905 + + [ Paolo Pisati ] + + * [Config] omap3: MFD_OMAP_USB_HOST is usb host in omap2+. + - LP: #1009061 + + -- Leann Ogasawara Tue, 05 Jun 2012 08:06:28 -0700 + +linux (3.4.0-4.10) quantal; urgency=low + + [ Leann Ogasawara ] + + * Temporarily disable ABI and module check + + -- Leann Ogasawara Mon, 04 Jun 2012 20:27:31 -0700 + +linux (3.4.0-4.9) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] fix config split to avoid the shared config + * [Config] updateconfigs following split config fix + * [Config] linux-image-extras needs full postinst + * [Config] CONFIG_BLK_DEV_NVME commonise across architectures + * [Config] CONFIG_HP_WATCHDOG enable as module + * [Config] CONFIG_PDC_ADMA is not boot essential + * [Config] CONFIG_XEN_ACPI_PROCESSOR should be enabled on x86 + * [Config] CONFIG_VT6655/CONFIG_VT6656=m + * [Config] CONFIG_TRANZPORT=m commonise + * [Config] CONFIG_R3964=m commonise + * [Config] CONFIG_SCSI_DH=m commonise + * [Config] CONFIG_SCSI_IBMVSCSIS=m commonise + * [Config] CONFIG_AMD_PHY=y phys are not autoloadable + * [Config] CONFIG_SCSI_QLA_ISCSI=m commonise + * [Config] CONFIG_SCSI_SPI_ATTR=m commonise + * [Config] CONFIG_USB_SN9C102 is deprecated disable + * [Config] CONFIG_USB_SI470X=m commonise + * [Config] CONFIG_USB_ET61X251=m commonise + * [Config] CONFIG_RTS_PSTOR=m commonise + * [Config] CONFIG_SCANLOG=m commonise + * [Config] CONFIG_SCSI_SYM53C8XX_2=m commonise + * [Config] CONFIG_SM_FTL=m commonise + * [Config] CONFIG_SOLO6X10=m commonise + * [Config] CONFIG_SND_PCM_OSS=n using pulseaudio emulation instead + * [Config] CONFIG_SPI_DESIGNWARE=m commonise + * [Config] CONFIG_SPI_SPIDEV=m commonise + * [Config] CONFIG_TABLET_USB_WACOM=m commonise + * [Config] CONFIG_TPS65010=m commonise + * [Config] CONFIG_STE10XP=y commonise + * [Config] CONFIG_X25_ASY=m commonise + * [Config] CONFIG_USB_MON=m commonise + * [Config] CONFIG_VME_BUS=m commonise + * [Config] CONFIG_W35UND=m commonise + * [Config] -CONFIG_TCG_TPM=y commonise + * [Config] highbank -- commonise filesystems + * [Config] highbank -- commonise subsystems + * [Config] highbank -- commonise network protocols + * [Config] highbank -- commonise input drivers + * [Config] highbank -- commonise CRYPTO options + * [Config] highbank -- commonise HID options + * [Config] highbank -- commonise sensors options + * [Config] highbank -- commonise EXPORTFS/FHANDLE + * [Config] highbank -- commonise CONFIG_CRYPTO_LZO + * [Config] highbank -- commonise ENCRYPTED_KEYS + * [Config] highbank -- commonise CONFIG_ATALK + * [Config] highbank -- commonise INET/INET6 + * [Config] highbank -- commonise NLS + * [Config] highbank -- commonise BLK/CHR + * [Config] highbank -- CONFIG_EXT2_FS=y boot essential on highbank + * [Config] highbank -- commonise INET/INET6 part 2 + * [Config] highbank -- commonise PHY settings + * [Config] highbank -- commonise CRC settings + * [Config] highbank -- commonise BINFMT settings + * [Config] highbank -- commonise DM settings + * [Config] highbank -- commonise RTC_DRV settings + * [Config] highbank -- commonise KEYBOARD/MOUSE settings + * [Config] highbank -- commonise USB settings + * [Config] highbank -- commonise GPIO settings + * [Config] highbank -- commonise I2C settings + * [Config] highbank -- commonise numerous subsystem selectors + * [Config] highbank -- commonise A-C modules missmatches + * [Config] highbank -- commonise D-F modules missmatches + * [Config] CONFIG_AUDIT_LOGINUID_IMMUTABLE incompatible with upstart + * [Config] highbank -- commonise G-I modules missmatches + * [Config] highbank -- commonise J-L modules missmatches + * [Config] highbank -- commonise M modules missmatches + * [Config] highbank -- commonise N-P modules missmatches + * [Config] highbank -- commonise Q-R modules missmatches + * [Config] highbank -- commonise S modules missmatches -- part 1 + * [Config] highbank -- commonise S modules missmatches -- part 2 + * [Config] highbank -- commonise T modules missmatches + * [Config] highbank -- commonise U-Z modules missmatches + + [ Ike Panhc ] + + * [Config] add highbank flavour + - LP: #1000831 + + [ Mark Langsdorf ] + + * SAUCE: arm highbank: add support for pl320-ipc driver + - LP: #1000831 + + [ Rob Herring ] + + * SAUCE: input: add a key driver for highbank + - LP: #1000831 + * SAUCE: ARM: highbank: Add smc calls to enable/disable the L2 + - LP: #1000831 + * SAUCE: force DMA buffers to non-bufferable on highbank + - LP: #1000831 + * SAUCE: net: calxedaxgmac: fix net timeout recovery + - LP: #1000831 + + [ Tim Gardner ] + + * [Config] CONFIG_IWLWIFI_EXPERIMENTAL_MFP=n + * [Config] CONFIG_PCI_REALLOC_ENABLE_AUTO=y + * [Config] CONFIG_CIFS_EXPERIMENTAL has disappeared + * [Config] Homogenize CIFS configs across all arches + * [Config] armhf should not be skipabi or skipmodules + - LP: #1006913 + + -- Leann Ogasawara Mon, 04 Jun 2012 05:52:49 -0700 + +linux (3.4.0-3.8) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] include include/generated/compile.h + - LP: #942569 + * [Config] fix up postinst to ensure we know which error is which + - LP: #1002388 + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: async_populate_rootfs: fix build warnings + - LP: #1003417 + + [ John Johansen ] + + * Revert "SAUCE: AppArmor: Add the ability to mediate mount" + * SAUCE: apparmor: Add the ability to mediate mount + * SAUCE: AppArmor: basic networking rules + * SAUCE: apparmor: fix profile lookup for unconfined + - LP: #978038, #987371 + * SAUCE: apparmor: fix long path failure due to disconnected path + - LP: #955892 + + [ Mario Limonciello ] + + * SAUCE: dell-laptop: rfkill blacklist Dell XPS 13z, 15 + - LP: #901410 + + [ Stefan Bader ] + + * (config) Built-in xen-acpi-processor + + [ Tim Gardner ] + + * [Config] CONFIG_NET_DSA=m + - LP: #1004148 + * [Config] Ensure CONFIG_XEN_ACPI_PROCESSOR=y for amd64 + + -- Leann Ogasawara Fri, 25 May 2012 11:38:33 -0700 + +linux (3.4.0-3.7) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] drop the virtual flavour in favour of a split generic et al + * [Config] enforcer -- drop IDLE enforcement + * [Config] enable CONFIG_SCSI_VIRTIO=m for amd64 + * [Config] updateconfigs following removal of -virtual + + [ Leann Ogasawara ] + + * Rebase to v3.4 + + [ Seth Forshee ] + + * [Config] disable CONFIG_B43_BCMA_EXTRA + + [ Tim Gardner ] + + * [Config] Check for extras when building udebs + * [Config] Collapsed generic-pae into generic [i386] + + [ Upstream Kernel Changes ] + + * rebase to v3.4 + + -- Leann Ogasawara Mon, 21 May 2012 07:23:47 -0700 + +linux (3.4.0-2.6) quantal; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: overlayfs -- overlayfs: update touch_atime() usage" + * Revert "ubuntu: overlayfs -- overlayfs: switch from d_alloc_root() to + d_make_root()" + * Revert "ubuntu: overlayfs -- overlayfs: follow header cleanup" + * Revert "ubuntu: overlayfs -- overlayfs: apply device cgroup and + security permissions to overlay files" + * Revert "ubuntu: overlayfs -- fs: limit filesystem stacking depth" + * Revert "ubuntu: overlayfs -- overlay: overlay filesystem documentation" + * Revert "ubuntu: overlayfs -- overlayfs: implement show_options" + * Revert "ubuntu: overlayfs -- overlayfs: add statfs support" + * Revert "ubuntu: overlayfs -- overlay filesystem" + * Revert "ubuntu: overlayfs -- vfs: introduce clone_private_mount()" + * Revert "ubuntu: overlayfs -- vfs: export do_splice_direct() to modules" + * Revert "ubuntu: overlayfs -- vfs: add i_op->open()" + * Revert "ubuntu: overlayfs -- vfs: pass struct path to __dentry_open()" + * ubuntu: overlayfs -- overlayfs: add statfs support + * ubuntu: overlayfs -- inode_only_permission: export inode level + permissions checks + * ubuntu: overlayfs -- overlayfs: switch to use inode_only_permissions + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: pass struct path to __dentry_open() + * ubuntu: overlayfs -- vfs: add i_op->open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Robin Dong ] + + * ubuntu: overlayfs -- overlayfs: fix possible leak in ovl_new_inode + * ubuntu: overlayfs -- overlayfs: create new inode in ovl_link + + [ Tim Gardner ] + + * [Config] perarch and indep tools builds need separate build directories + * Prevent upgrading a non-PAE CPU + * perf is not parallel build safe + + -- Leann Ogasawara Wed, 16 May 2012 08:43:18 -0700 + +linux (3.4.0-2.5) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] perarch and indep tools builds need separate build directories + + [ Tim Gardner ] + + * Prevent upgrading a non-PAE CPU + * [Config] build debug + * [Config] perf tools are not parallel build safe + + -- Leann Ogasawara Tue, 15 May 2012 11:37:53 -0700 + +linux (3.4.0-2.4) quantal; urgency=low + + [ Leann Ogasawara ] + + * Revert "SAUCE: fsam7400: use UMH_WAIT_PROC consistently" + * Revert "ubuntu: fsam7400 select CHECK_SIGNATURE and depend on X86" + * Revert "ubuntu: fsam7400: Depend on CHECK_SIGNATURE" + * Revert "ubuntu: fsam7400 -- Cleanup Makefile" + * Revert "ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M + 7400" + * Revert "ubuntu: omnibook: fix source file newline" + * Revert "ubuntu: omnibook -- update BOM" + * Revert "SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} + depend on X86" + * Revert "ubuntu: omnibook -- Added missing BOM file" + * Revert "ubuntu: omnibook -- support Toshiba (HP) netbooks" + * Revert "ubuntu: nx-emu - i386: mmap randomization for executable + mappings" + * Revert "SAUCE: disable_nx should not be in __cpuinitdata section for + X86_32" + * Revert "ubuntu: nx-emu - i386: NX emulation" + * Revert "ubuntu: rfkill drivers -- version 1.3" + * Temporarily disable module check + * [Config] Remove CONFIG_FSAM7400 + * [Config] Remove CONFIG_OMNIBOOK + * [Config] Update configs + * Rebase to v3.4-rc7 + * SAUCE: genirq: export handle_edge_irq() and irq_to_desc() + + [ Tim Gardner ] + + * Updated generic-pae description + * Rebase to v3.4-rc6 + * install-tools depends on build targets + + [ Upstream Kernel Changes ] + + * kconfig: in debug mode some 0 length message prints occur + * rebase to v3.4-rc7 + * rebase to v3.3-rc6 + + -- Leann Ogasawara Mon, 14 May 2012 08:22:56 -0700 + +linux (3.4.0-1.3) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] control.stub is an intermediate product not a dependancy + - LP: #992414 + + [ Leann Ogasawara ] + + * remove i386 generic from getabis + + [ Upstream Kernel Changes ] + + * (pre-stable) b43: only reload config after successful initialization + - LP: #950295 + + -- Leann Ogasawara Wed, 02 May 2012 09:48:14 -0700 + +linux (3.4.0-1.2) quantal; urgency=low + + [ Andy Whitcroft ] + + * [Config] add build depends for flex, bison and pkg-config + + -- Andy Whitcroft Tue, 01 May 2012 13:15:41 +0100 + +linux (3.4.0-1.1) quantal; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: overlayfs -- overlayfs: apply device cgroup and security + permissions to overlay files + - LP: #915941, #918212 + - CVE-2012-0055 + + [ Leann Ogasawara ] + + * Open Q + * Rebase to v3.4-rc5 + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EETI on arm + * [Config] Temporarily disable CONFIG_TOUCHSCREEN_EGALAX on arm + * [Config] Temporarily disable CONFIG_EZX_PCAP on arm + * [Config] Temporarily disable CONFIG_MFD_OMAP_USB_HOST on arm + * [Config] Temporarily disable CONFIG_LIS3L02DQ on arm + * [Config] Temporarily disable CONFIG_USB_EHCI_HCD_PLATFORM on arm + * [Config] Temporarily disable CONFIG_TI_CPSW on arm + * [Config] Temporarily disable CONFIG_AX88796 on arm + + [ Upstream Kernel Changes ] + + * vfs: pass struct path to __dentry_open() + * vfs: add i_op->open() + * vfs: export do_splice_direct() to modules + * vfs: introduce clone_private_mount() + * overlay filesystem + * overlayfs: add statfs support + * overlayfs: implement show_options + * overlay: overlay filesystem documentation + * fs: limit filesystem stacking depth + * overlayfs: follow header cleanup + * overlayfs: switch from d_alloc_root() to d_make_root() + * overlayfs: update touch_atime() usage + * rebase to v3.4-rc5 + - LP: #950490 + * rebase to v3.4-rc4 + * rebase to v3.4-rc3 + * rebase to v3.4-rc2 + * rebase to v3.4-rc1 + * rebase to v3.3 + * rebase to v3.3-rc7 + * rebase to v3.3-rc6 + * rebase to v3.3-rc5 + * rebase to v3.3-rc4 + - LP: #900802 + - LP: #930842 + * rebase to v3.3-rc3 + - LP: #924320 + - LP: #923316 + - LP: #923409 + - LP: #918254 + * rebase to v3.3-rc2 + * rebase to v3.3-rc1 + - LP: #795823 + - LP: #909419 + - LP: #910792 + - LP: #878701 + - LP: #724831 + + -- Leann Ogasawara Wed, 25 Jan 2012 06:50:04 -0800 + +linux (3.2.0-10.18) precise; urgency=low + + [ Tim Gardner ] + + * SAUCE: ecryptfs: Print inode on metadata error + + [ Upstream Kernel Changes ] + + * Revert "proc: enable writing to /proc/pid/mem" + - LP: #919115 + - CVE-2012-0056 + * (pre-stable) ALSA: HDA: Use LPIB position fix for Macbook Pro 7, 1 + - LP: #909419 + + -- Andy Whitcroft Tue, 24 Jan 2012 10:15:12 +0000 + +linux (3.2.0-10.17) precise; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: overlayfs -- fs: limit filesystem stacking depth" + * Revert "SAUCE: overlayfs -- overlay: overlay filesystem documentation" + * Revert "SAUCE: overlayfs -- overlayfs: implement show_options" + * Revert "SAUCE: overlayfs -- overlayfs: add statfs support" + * Revert "SAUCE: overlayfs -- overlay filesystem" + * Revert "SAUCE: overlayfs -- vfs: introduce clone_private_mount()" + * Revert "SAUCE: overlayfs -- vfs: export do_splice_direct() to modules" + * Revert "SAUCE: overlayfs -- vfs: add i_op->open()" + * ensure debian/ is not excluded from git by default + * add new scripting to handle buglinks in rebases + * ubuntu: overlayfs -- overlayfs: add statfs support + * ubuntu: overlayfs -- overlayfs: apply device cgroup and security + permissions to overlay files + - LP: #915941, #918212 + - CVE-2012-0055 + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Leann Ogasawara ] + + * Revert "SAUCE: dmar: disable if ricoh multifunction detected" + * [Config] Disable CONFIG_INTEL_IOMMU_DEFAULT_ON + - LP: #907377, #911236 + * [Config] Enable CONFIG_IRQ_REMAP + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: pass struct path to __dentry_open() + * ubuntu: overlayfs -- vfs: add i_op->open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Upstream Kernel Changes ] + + * (pre-stable) x86/PCI: amd: factor out MMCONFIG discovery + - LP: #647043 + * (pre-stable) PNP: work around Dell 1536/1546 BIOS MMCONFIG bug that + breaks USB + - LP: #647043 + + -- Leann Ogasawara Mon, 16 Jan 2012 07:10:08 -0800 + +linux (3.2.0-9.16) precise; urgency=low + + [ Andy Whitcroft ] + + * [Config] Enable numerous CONFIG_VIDEO_* cards on ARM + * [Config] pull ARM sound modules =m + * [Config] CONFIG_RTC_DRV_TEST is for testing only + * [Config] CONFIG_USB_DUMMY_HCD is testing only + * [Config] CONFIG_USB_FILE_STORAGE is deprecated + + [ Leann Ogasawara ] + + * Revert "[Config] Temporarily disable CONFIG_CAN_TI_HECC on armel" + * [Config] Enable CONFIG_HW_RANDOM_PASEMI=m + * [Config] Enable CONFIG_MMC_TMIO=m + * [Config] Enable CONFIG_MTD_NAND_FSL_ELBC=m + * [Config] Enable CONFIG_ISI=m + * [Config] Enable CONFIG_MMC=y + * [Config] Enable CONFIG_LIRC_PARALLEL=m + * [Config] Enable CONFIG_MAC_EMUMOUSEBTN=m + * [Config] Enable CONFIG_CHR_DEV_SG=y + * [Config] Enable CONFIG_GPIO_PCA953X=m + * [Config] Enable CONFIG_GPIO_TWL4030=m + * [Config] Enable CONFIG_INET_DIAG=m + * [Config] Enable CONFIG_NLS_ISO8859_1=m + * [Config] Enable CONFIG_NVRAM=m + * [Config] Enable CONFIG_SLIP=m + * [Config] Enable CONFIG_PC300TOO=m + * [Config] Enable CONFIG_TUN=y + * [Config] Enable CONFIG_NET_CLS_CGROUP=m + * [Config] Enable CONFIG_THERMAL=y + * [Config] Enable CONFIG_PPP=y + * [Config] Enable CONFIG_PCI_STUB=m + * Rebase to v3.2.1 + * [Config] Enable CONFIG_RTL8192E=m + * [Config] Enable CONFIG_RTS5139=m + + [ Stefan Bader ] + + * [Config] Make CONFIG_VIRTIO_(NET|BLK)=y + + [ Upstream Kernel Changes ] + + * ARM: restart: add restart hook to machine_desc record + * ARM: restart: allow platforms more flexibility specifying restart mode + * ARM: restart: move reboot failure handing into machine_restart() + * ARM: restart: remove argument to setup_mm_for_reboot() + * ARM: 7159/1: OMAP: Introduce local common.h files + * ARM: restart: only perform setup for restart when soft-restarting + * ARM: 7189/1: OMAP3: Fix build break in cpuidle34xx.c because of irq + function + * ARM: idmap: populate identity map pgd at init time using .init.text + * ARM: suspend: use idmap_pgd instead of suspend_pgd + * ARM: proc-*.S: place cpu_reset functions into .idmap.text section + * ARM: idmap: use idmap_pgd when setting up mm for reboot + * ARM: head.S: only include __turn_mmu_on in the initial identity mapping + * ARM: SMP: use idmap_pgd for mapping MMU enable during secondary booting + * ARM: 7194/1: OMAP: Fix build after a merge between v3.2-rc4 and ARM + restart changes + * ARM: lib: add call_with_stack function for safely changing stack + * ARM: reset: implement soft_restart for jumping to a physical address + * ARM: stop: execute platform callback from cpu_stop code + * ARM: kexec: use soft_restart for branching to the reboot buffer + * ARM: restart: omap: use new restart hook + * topdown mmap support + - LP: #861296 + + [ Upstream Kernel Changes ] + + * Rebase to v3.2.1 + + -- Leann Ogasawara Fri, 13 Jan 2012 20:32:08 +0100 + +linux (3.2.0-8.15) precise; urgency=low + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_ACPI_PROCFS + * Remove server from getabis + * Temporarily disable module check + * [Config] Disable CONFIG_MTD_TESTS + * [Config] Disable CONFIG_X86_E_POWERSAVER + * [Config] Set CONFIG_ARCNET=m + * [Config] Enable CONFIG_ATM_DUMMY=m + * [Config] Enable CONFIG_BLK_DEV_MD=y + * ubuntu: fsam7400 select CHECK_SIGNATURE and depend on X86 + * [Config] Enable CONFIG_BLK_DEV_SD=y + * [Config] Enable CONFIG_BLK_DEV_SR=y + * [Config] Enable CONFIG_BLK_DEV_UB=m + * [Config] Enable CONFIG_COPS=m + * [Config] Enable CONFIG_DVB_USB_EC168=m + * [Config] Enable CONFIG_ENC28J60=m + * [Config] Enable CONFIG_FB_UVESA=m + * [Config] Enable CONFIG_FB_ATY=m + * [Config] Enable CONFIG_BROADCOM_PHY=y + * [Config] Enable CONFIG_CICADA_PHY=y + * [Config] Enable CONFIG_DAVICOM_PHY=y + * [Config] Enable CONFIG_ICPLUS_PHY=y + * [Config] Enable CONFIG_LSI_ET1011C_PHY=y + * [Config] Enable CONFIG_LXT_PHY=y + * [Config] Enable CONFIG_MARVELL_PHY=y + * [Config] Enable CONFIG_NATIONAL_PHY=y + * [Config] Enable CONFIG_QSEMI_PHY=y + * [Config] Enable CONFIG_SMSC_PHY=y + * [Config] Enable CONFIG_VITESSE_PHY=y + * Add 3w-sas to scsi-modules + - LP: #776542 + + [ Mathieu Trudel-Lapierre ] + + * SAUCE: ipv6: make the net.ipv6.conf.all.use_tempaddr sysctl propagate + to interface settings + + [ Paolo Pisati ] + + * Revert "SAUCE: omap3: beagle: if rev unknown, assume xM revision C" + - LP: #912199 + * Revert "SAUCE: omap3: beagle: detect new xM revision B" + - LP: #912199 + * Revert "SAUCE: omap3: beaglexm: fix DVI initialization" + - LP: #912199 + + [ Upstream Kernel Changes ] + + * Bluetooth: Add support for BCM20702A0 [0a5c:21e3] + - LP: #906832 + + -- Leann Ogasawara Fri, 06 Jan 2012 10:02:03 -0800 + +linux (3.2.0-8.14) precise; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_SND_USB_6FIRE + - LP: #912197 + * rebase to mainline v3.2 final release + * updateconfigs following rebase to v3.2 final + * ubuntu: AUFS -- add BOM and automated update script + * ubuntu: AUFS -- include the aufs_types.h file in linux-libc-headers + - LP: #684666 + * ubuntu: AUFS -- update aufs-update to track new locations of headers + * ubuntu: AUFS -- clean up the aufs updater and BOM + * ubuntu: AUFS -- documentation on updating aufs2 + * ubuntu: AUFS -- aufs3-base.patch + * ubuntu: AUFS -- aufs3-standalone.patch + * ubuntu: AUFS -- fix undefined __devcgroup_inode_permission + * ubuntu: AUFS -- fix undefined security_path_link + * ubuntu: AUFS -- update to 4cf5db36bcd9748e8e7270022f295f84d1fc2245 + * ubuntu: AUFS -- updateconfigs following update + * ubuntu: AUFS -- suppress benign plink warning messages + - LP: #621195 + * ubuntu: AUFS -- enable in config and makefile + * ubuntu: AUFS -- disable in favor of overlayfs + * [Config] linux-virtual -- should include the extX modules + - LP: #912308 + + [ Tyler Hicks ] + + * SAUCE: eCryptfs: Improve statfs reporting + - LP: #885744 + + [ Upstream Kernel Changes ] + + * rebase to upstream v3.2 + + -- Leann Ogasawara Mon, 26 Dec 2011 20:24:30 -0800 + +linux (3.2.0-7.13) precise; urgency=low + + [ Upstream Kernel Changes ] + + * rebase to upstream 3.2-rc7 + + -- Leann Ogasawara Mon, 19 Dec 2011 09:14:34 -0800 + +linux (3.2.0-6.12) precise; urgency=low + + [ Upstream Kernel Changes ] + + * rebase to upstream v3.2-rc6 + + -- Leann Ogasawara Fri, 16 Dec 2011 10:19:02 -0800 + +linux (3.2.0-5.11) precise; urgency=low + + [ Andy Whitcroft ] + + * enforcer -- allow arch and flavour predicates to take lists + * enforcer -- simplify armel/armhf specific options + * enforcer -- fix incorrectly specified flavour matches + + [ Leann Ogasawara ] + + * [Config] Disable IRQ_REMAP + * [Config] Enable CONFIG_SENSORS_LM95245=m + * [Config] Enable CONFIG_SENSORS_MAX1668=m + * [Config] Enable CONFIG_SENSORS_NTC_THERMISTOR=m + * [Config] Enable CONFIG_SENSORS_MAX6639=m + * [Config] Enable CONFIG_SENSORS_MAX6642=m + * [Config] Enable CONFIG_SENSORS_LINEAGE=m + * [Config] Enable CONFIG_CRYPTO_SALSA20=m + * [Config] Enable CONFIG_PATA_TOSHIBA=m + * [Config] Enable CONFIG_POHMELFS=m + * [Config] Enable CONFIG_NET_PACKET_ENGINE=y + * [Config] Enable CONFIG_PATA_OPTI=m + * add overlayfs to virtual inclusion list + - LP: #903897 + * add veth to virtual inclusion list + - LP: #903897 + * SAUCE: resolve WARNING: at drivers/block/floppy.c:2929 do_fd_request + + [ Paolo Pisati ] + + * [Config] DEFAULT_MMAP_MIN_ADDR=32k on arm + - LP: #903346 + + [ Tim Gardner ] + + * [Config] CONFIG_LOCKUP_DETECTOR=y + - LP: #903615 + + [ Upstream Kernel Changes ] + + * rebase to upstream 55b02d2f + + -- Leann Ogasawara Mon, 12 Dec 2011 07:08:10 -0800 + +linux (3.2.0-4.10) precise; urgency=low + + [ Kyle McMartin ] + + * SAUCE: dmar: disable if ricoh multifunction detected + - LP: #894070 + + [ Seth Forshee ] + + * SAUCE: dell-wmi: Demote unknown WMI event message to pr_debug + - LP: #581312 + + [ Tim Gardner ] + + * Start new release, Bump ABI, rebase to 3.2-rc5 + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_SENSORS_AK8975=m + + -- Tim Gardner Sat, 10 Dec 2011 08:57:04 -0700 + +linux (3.2.0-3.9) precise; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: ext4: correct partial write discard size calculation + - LP: #894768 + + [ Leann Ogasawara ] + + * Revert "SAUCE: x86, microcode, AMD: Restrict microcode reporting" + - LP: #892615 + + [ Matthew Garrett ] + + * SAUCE: pci: Rework ASPM disable code + + [ Upstream Kernel Changes ] + + * x86: Fix boot failures on older AMD CPU's + - LP: #892615 + * EHCI : Fix a regression in the ISO scheduler + - LP: #899165 + + -- Leann Ogasawara Mon, 05 Dec 2011 10:37:36 -0800 + +linux (3.2.0-3.8) precise; urgency=low + + [ Andy Whitcroft ] + + * armhf -- add d-i configuration + * armhf -- disable ABI checks for armhf + * armhf -- add arch to getabis config + + -- Andy Whitcroft Sat, 03 Dec 2011 14:22:52 +0000 + +linux (3.2.0-3.7) precise; urgency=low + + [ Stefan Bader ] + + * SAUCE: x86/paravirt: PTE updates in k(un)map_atomic need to be + synchronous, regardless of lazy_mmu mode + - LP: #854050 + + [ Tim Gardner ] + + * rebase to v3.2-rc4 + + -- Leann Ogasawara Fri, 02 Dec 2011 11:53:56 -0800 + +linux (3.2.0-2.6) precise; urgency=low + + [ Andy Whitcroft ] + + * armhf -- fix omap flavour to build on armhf + * [Config] CONFIG_PATA_MACIO=y to fix MAC qemu boot + + [ Borislav Petkov ] + + * SAUCE: x86, microcode, AMD: Restrict microcode reporting + - LP: #892615 + + [ Colin Watson ] + + * Add pata_macio to pata-modules + + [ Tim Gardner ] + + * [Config] Prefer crda over wireless-crda + * [Config] Fix virtual inclusion list. + - LP: #897795 + + -- Leann Ogasawara Wed, 30 Nov 2011 06:09:35 -0800 + +linux (3.2.0-2.5) precise; urgency=low + + [ Paolo Pisati ] + + * [Config] PANEL_DVI=y + + -- Leann Ogasawara Mon, 28 Nov 2011 09:13:24 -0800 + +linux (3.2.0-2.4) precise; urgency=low + + [ Andy Whitcroft ] + + * rebase to v3.2-rc3 + + [ Leann Ogasawara ] + + * Revert "SAUCE: xen: Do not use pv spinlocks on HVM" + * Revert "fix ERROR: __devcgroup_inode_permission undefined" + * Revert "olpc_dcon_xo_1_5 needs delay.h" + * Revert "olpc_dcon_xo_1 needs delay.h" + * rebase to 6fe4c6d4 + * [Config] updateconfigs after rebase to 6fe4c6d4 + + [ Tim Gardner ] + + * [Config] Replace wireless-crda with crda,wireless-regdb + - LP: #856421 + * [Config] Relax the dependencies on crda + + [ Upstream Kernel Changes ] + + * (pre-stable) HID: bump maximum global item tag report size to 96 bytes + - LP: #724831 + * Ubuntu: remove coreutils|fileutils package dependency + - LP: #892814 + * iio: iio_event_getfd -- fix ev_int build failure + + [ Upstream Kernel Changes ] + + * Rebase to v3.2-rc3 + + -- Andy Whitcroft Thu, 24 Nov 2011 16:20:45 +0000 + +linux (3.2.0-1.3) precise; urgency=low + + [ Upstream Kernel Changes ] + + * Ubuntu: Add ext2 to fs-core-modules + - LP: #893395 + + -- Leann Ogasawara Mon, 21 Nov 2011 20:42:33 -0800 + +linux (3.2.0-1.2) precise; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_NFC and associated devices + * SAUCE: allow brcmsmac and b43 to both build + + [ Soren Hansen ] + + * Add ixgbe driver to d-i + - LP: #891969 + + -- Leann Ogasawara Mon, 21 Nov 2011 08:33:46 -0800 + +linux (3.2.0-1.1) precise; urgency=low + [ Andy Whitcroft ] + + * armhf -- enable armhf and create the first flavours + * SAUCE: ensure root is ready before running usermodehelpers in it + * [Config] enforcer -- ensure CONFIG_FAT_FS is built-in on arm + + [ Leann Ogasawara ] + + * Temporarily ignore module check + * [Config] Enable PCI_IOV on powerpc + * [Config] Temporarily disable CONFIG_PASEMI_MAC on powerpc + * rebase to v3.2-rc2 + * SAUCE: include for cpuidle34xx arm build + * SAUCE: include for linux/mtd/map.h arm build + * SAUCE: include and for mmc_core arm build + * SAUCE: select ARM_AMBA if OMAP3_EMU + * [Config] updateconfigs after select ARM_AMBA + * [Config] Temporarily disable CONFIG_KVM_BOOK3S_32 on powerpc + * [Config] Enable CONFIG_EXT2_FS=m + * [Config] Build in CONFIG_SATA_AHCI=y + * Resolve linux-image-extra's install dependency + + [ Seth Forshee ] + + * [Config] Enable EVENT_POWER_TRACING_DEPRECATED=y for powertop + * SAUCE: (drop after 3.2) Input: ALPS - move protocol information to + Documentation + * SAUCE: (drop after 3.2) Input: ALPS - add protocol version field in + alps_model_info + * SAUCE: (drop after 3.2) Input: ALPS - remove assumptions about packet + size + * SAUCE: (drop after 3.2) Input: ALPS - add support for protocol versions + 3 and 4 + * SAUCE: (drop after 3.2) Input: ALPS - add semi-MT support for v3 + protocol + * SAUCE: (drop after 3.2) Input: ALPS - add documentation for protocol + versions 3 and 4 + + [ Stefan Bader ] + + * [Config] Built-in xen-netfront and xen-blkfront + * Fix build of dm-raid45 and re-enable it + + [ Tim Gardner ] + + * [Config] CONFIG_USB_XHCI_HCD=y + - LP: #886167 + * [Config] CONFIG_R6040=m + - LP: #650899 + * SAUCE: Add a new entry (413c:8197) to Bluetooth USB device ID table + - LP: #854399 + * [Config] Consolidated amd64 server flavour into generic + * [Config] updateconfigs after rebase to 3.2-rc1 + * [Config] Disabled dm-raid4-5 + * [Config] Disabled ndiswrapper + * [Config] Disable vt6656 + * [Config] exclude ppp-modules for virtual flavour + * [Config] CONFIG_MEMSTICK_R592=m + - LP: #238208 + + [ Upstream Kernel Changes ] + + * CHROMIUM: seccomp_filter: new mode with configurable syscall filters + - LP: #887780 + * CHROMIUM: seccomp_filter: add process state reporting + - LP: #887780 + * CHROMIUM: seccomp_filter: Document what seccomp_filter is and how it + works. + - LP: #887780 + * CHROMIUM: x86: add HAVE_SECCOMP_FILTER and seccomp_execve + - LP: #887780 + * CHROMIUM: arm: select HAVE_SECCOMP_FILTER + - LP: #887780 + * CHROMIUM: seccomp_filters: move to btrees + * CHROMIUM: enable CONFIG_BTREE + * CHROMIUM: seccomp_filter: kill NR_syscall references + * CHROMIUM: seccomp_filters: guard all ftrace wrapper code + * CHROMIUM: seccomp_filters: clean up warnings; kref mistake + * CHROMIUM: seccomp_filter: remove "skip" from copy and add drop helper + * CHROMIUM: seccomp_filter: allow CAP_SYS_ADMIN management of execve + * CHROMIUM: seccomp_filter: inheritance documentation + * CHROMIUM: seccomp_filter: make inherited filters composable + * CHROMIUM: Fix seccomp_t compile error + - LP: #887780 + * CHROMIUM: Fix kref usage + - LP: #887780 + * CHROMIUM: enable CONFIG_SECCOMP_FILTER and CONFIG_HAVE_SECCOMP_FILTER + * rebase to v3.2-rc2 + + -- Leann Ogasawara Mon, 31 Oct 2011 09:24:39 -0400 + +linux (3.1.0-2.3) precise; urgency=low + + [ Tim Gardner ] + + * Add postinit and postrm scripts to the extras package + - LP: #882120 + + -- Leann Ogasawara Fri, 28 Oct 2011 12:48:33 -0700 + +linux (3.1.0-2.2) precise; urgency=low + + [ Andy Whitcroft ] + + * debian: add locking to protect debian/files from parallel update + + [ Leann Ogasawara ] + + * rebase to v3.1 + + [ Upstream Kernel Changes ] + + * rebase to v3.1 + + -- Leann Ogasawara Wed, 19 Oct 2011 07:12:38 -0700 + +linux (3.1.0-1.1) precise; urgency=low + + [ Andiry Xu ] + + * SAUCE: (drop during 3.2 merge) xHCI: AMD isoc link TRB chain bit quirk + - LP: #872811 + + [ Andy Whitcroft ] + + * Revert "ubuntu: compcache -- follow changes to bd_claim/bd_release" + - LP: #832694 + * Revert "ubuntu: compcache -- version 0.5.3" + - LP: #832694 + * [Config] standardise CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m + * [Config] Enable CONFIG_MACVTAP=m + - LP: #822601 + * record the compiler in the ABI and check for inconsistant builds + * [Config] move ECRYPT_FS back to =y for all architectures + - LP: #827197 + * [Config] enable CONFIG_DRM_VMWGFX=m + - LP: #698009 + * [Config] re-fix ECRYPT_FS=y + - LP: #827197 + * enforcer -- ensure we have CONFIG_ECRYPT_FS=y + - LP: #827197 + * [Config] dropping compcache configuration options + * [Config] standardise on HZ=250 + * SAUCE: headers_install: fix #include "..." usage for userspace + - LP: #824377 + * make module-inclusion selection retain the left overs + * add a new linux-image-extras package for virtual + + [ Colin Watson ] + + * Deliver more Atheros, Ralink, and iwlagn NIC drivers to d-i + + [ edwin_rong ] + + * SAUCE: Staging: add driver for Realtek RTS5139 cardreader + - LP: #824273 + + [ Greg Kroah-Hartman ] + + * SAUCE: staging: rts5139: add vmalloc.h to some files to fix the build. + - LP: #824273 + + [ Jesse Sung ] + + * SAUCE: Unregister input device only if it is registered + - LP: #839238 + + [ Jiri Kosina ] + + * SAUCE: HID: add MacBookAir4, 2 to hid_have_special_driver[] + + [ Joshua V. Dillon ] + + * SAUCE: HID: add support for MacBookAir4,2 keyboard. + + [ Kees Cook ] + + * [Config] enable and enforce SECCOMP_FILTER on x86 + + [ Keng-Yu Lin ] + + * [Config] Enable CONFIG_RTS5139=m on i386/amd64 + - LP: #824273 + + [ Leann Ogasawara ] + + * Revert "ubuntu: overlayfs -- ovl: make lower mount read-only" + * Revert "ubuntu: overlayfs -- fs: limit filesystem stacking depth" + * Revert "ubuntu: overlayfs -- ovl: improve stack use of lookup and + readdir" + * Revert "ubuntu: overlayfs -- ovl: fix overlayfs over overlayfs" + * Revert "ubuntu: overlayfs -- overlayfs: implement show_options" + * Revert "ubuntu: overlayfs -- overlayfs: add statfs support" + * Revert "ubuntu: overlayfs -- overlay filesystem" + * Revert "ubuntu: overlayfs -- overlay: overlay filesystem documentation" + * Revert "SAUCE: ARM: OMAP: Add macros for comparing silicon revision" + * Revert "SAUCE: OMAP: DSS2: check for both cpu type and revision, rather + than just revision" + * Revert "SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX" + * Revert "ubuntu: fsam7400 disable driver" + - LP: #876030 + * rebase to v3.1-rc1 + * [Config] updateconfigs after rebase to v3.1-rc1 + * rebase to v3.1-rc2 + * [Config] Updateconfigs after rebase to v3.1-rc2 + * ubuntu: Yama - update calls to generic_permission() and + inode->i_op->permission() + * ubuntu: ndiswrapper -- remove netdev_priv macro + * ubuntu: aufs -- Temporarily disable due to build failure + * [Config] Diable INTEL_MID_PTI on armel + * [Config] Temporarily disable CONFIG_FTMAC100 on armel + * [Config] Temporarily disable CONFIG_FTGMAC100 on armel + * [Config] Temporarily disable CONFIG_CAN_TI_HECC on armel + * [Config] Temporarily disable CONFIG_VIDEO_OMAP2_VOUT on armel + * [Config] Set CONFIG_DM_MIRROR=m on amd64, i386, and arm + * [Config] Set CONFIG_DM_MULTIPATH=m on amd64, i386, and arm + * [Config] Set CONFIG_DM_SNAPSHOT=m on amd64, i386, and arm + * [Config] Enable CONFIG_EDAC_AMD8111=m on powerpc + * [Config] Enable CONFIG_EDAC_AMD8131=m on powerpc + * [Config] Enable CONFIG_EDAC_CPC925=m on powerpc + * [Config] Enable CONFIG_EDAC_PASEMI=m on powerpc + * [Config] Enable CONFIG_ECHO=m on powerpc + * [Config] Enable CONFIG_ET131X=m on powerpc + * [Config] Set CONFIG_FB_MATROX=m + * [Config] Enable CONFIG_FB_UDL=m on powerpc + * [Config] Set CONFIG_FB_VIRTUAL=n + * [Config] Enable CONFIG_FB_VGA16=m on powerpc + * [Config] Enable CONFIG_GPIO_MAX732X=m on arm + * [Config] Enable CONFIG_GPIO_PCF857X=m on arm + * [Config] Set CONFIG_HOTPLUG_PCI_FAKE=m + * [Config] Enable CONFIG_HOTPLUG_PCI=y on powerpc + * [Config] Enable CONFIG_HOTPLUG_PCI_CPCI=y on powerpc + * [Config] Enable CONFIG_HP_ILO=m on powerpc-smp + * [Config] Enable CONFIG_I2C_PASEMI=m on powerpc + * [Config] Enable CONFIG_IBM_BSR=m on powerpc + * [Config] Enable CONFIG_IBMVETH=m on powerpc + * [Config] Enable CONFIG_IDE_PHISON=m on powerpc + * [Config] Enable CONFIG_IGB=m on powerpc + * [Config] Enable CONFIG_IIO=m on powerpc + * [Config] Enable CONFIG_INFINIBAND_NES=m + * [Config] Enable CONFIG_IPMI_HANDLER=m on arm + * [Config] Enable CONFIG_IWL3945=m on powerpc + * [Config] Disable CONFIG_KVM_BOOK3S_64 + * [Config] Enable CONFIG_LAPBETHER=m on arm + * [Config] Enable CONFIG_LEDS_GPIO=m on powerpc + * [Config] Enable CONFIG_LEDS_CLEVO_MAIL=m all arch's + * [Config] Enable CONFIG_LEDS_PCA9532=m on powerpc + * [Config] Enable CONFIG_LEDS_PCA955X=m on powerpc + * [Config] Enable CONFIG_LEDS_TRIGGER_DEFAULT_ON=m on powerpc + * [Config] Set CONFIG_LEDS_TRIGGER_HEARTBEAT=m on arm and powerpc + * [Config] Set CONFIG_LEDS_TRIGGER_TIMER=m on powerpc + * [Config] Enable CONFIG_LINE6_USB=m on arm and powerpc + * [Config] Enable CONFIG_MEMSTICK=m on arm + * [Config] Enable CONFIG_MTD_AFS_PARTS=m on arm + * [Config] Enable CONFIG_MTD_ALAUDA=m on arm + * [Config] Enable CONFIG_MTD_AR7_PARTS=m on arm + * [Config] Enable CONFIG_MTD_ARM_INTEGRATOR=m on arm + * [Config] Enable CONFIG_MOXA_SMARTIO=m on powerpc + * [Config] Enable CONFIG_MTD_DATAFLASH=m on arm + * [Config] Enable CONFIG_MTD_GPIO_ADDR=m on arm + * [Config] Enable CONFIG_MTD_IMPA7=m on arm + * [Config] Enable CONFIG_MTD_NAND_GPIO=m on arm + * [Config] Enable CONFIG_MTD_NAND_NANDSIM=m on arm + * [Config] Enable CONFIG_MTD_NAND_PASEMI=m on powerpc + * [Config] Enable CONFIG_MTD_NAND_PLATFORM=m on arm + * [Config] Enable CONFIG_MTD_NAND_TMIO=m on arm + * [Config] Enable CONFIG_MTD_SST25L=m on arm + * [Config] Enable CONFIG_NET_CLS_CGROUP=y on arm + * [Config] Enable CONFIG_NET_CLS_FLOW=m on arm + * [Config] Enable CONFIG_NET_CLS_U32=m on arm + * [Config] Enable CONFIG_NET_DCCPPROBE=m on arm + * [Config] Enable CONFIG_NET_SCH_INGRESS=m on arm + * [Config] Enable CONFIG_NET_TCPPROBE=m on arm + * [Config] Enable CONFIG_PASEMI_MAC=m on powerpc + * [Config] Enable CONFIG_PATA_NS87410=m on powerpc + * [Config] Enable CONFIG_I2C_GPIO=m on powerpc64-smp + * [Config] Enable CONFIG_PANEL=m on powerpc + * [Config] Enable CONFIG_PATA_CMD640_PCI=m on powerpc + * SAUCE: x86: reboot: Make Dell Latitude E6520 use reboot=pci + - LP: #833705 + * [Config] Add CONFIG_EFI_VARS=y to the enforcer + - LP: #837332 + * [Config] Update CONFIG_EFI_VARS enforcer check + * [Config] Add aufs to virtual flavor inclusion list + - LP: #844159 + * SAUCE: x86: reboot: Make Dell Optiplex 790 use reboot=pci + - LP: #818933 + * SAUCE: x86: reboot: Make Dell Optiplex 990 use reboot=pci + - LP: #768039 + * SAUCE: x86: reboot: Make Dell Latitude E6220 use reboot=pci + - LP: #838402 + * [Config] Add igbvf to the virtual flavor inclusion list + - LP: #794570 + * [Config] Add ixgbevf to the virtual inclusion list + - LP: #872411 + * [Config] Transition -generic and -server to be identical + * rebase to v3.1-rc10 + + [ Luke Yelavich ] + + * [Config] Disable legacy IDE drivers on powerpc + + [ Ming Lei ] + + * SAUCE: fireware: add NO_MSI quirks for o2micro controller + - LP: #801719 + * SAUCE: ata_piix: make DVD Drive recognisable on systems with Intel + Sandybridge chipsets(v2) + - LP: #737388, #782389, #794642 + + [ Paolo Pisati ] + + * [Config] Compile-in vfat support for armel + - LP: #853783 + + [ Randy Dunlap ] + + * SAUCE: staging: fix rts5139 depends & build + - LP: #824273 + + [ Rene Bolldorf ] + + * SAUCE: (drop after 3.0) ideapad: Check if acpi already handle backlight + power in 'ideapad_backlight_notify_power' to avoid a page fault + + [ Seth Forshee ] + + * SAUCE: (no-up) Input: elantech - Add v3 hardware support + - LP: #681904 + * SAUCE: (drop after 3.1) usb_storage: Don't freeze in usb-stor-scan + - LP: #810020 + + [ Stefan Bader ] + + * (config) Package macvlan and macvtap for virtual + * [Config] Force perf to use libiberty for demangling + - LP: #783660 + * SAUCE: xen: Do not use pv spinlocks on HVM + - LP: #838026 + + [ Tim Gardner ] + + * [Config] Clean up tools rules + * [Config] Package x86_energy_perf_policy and turbostat + - LP: #797556 + * rebase to v3.1-rc3 + * [Config] Simplify binary-udebs dependencies + * [Config] kernel preparation cannot be parallelized + * [Config] Linearize module/abi checks + * [Config] Linearize and simplify tree preparation rules + * [Config] Build kernel image in parallel with modules + * [Config] Set concurrency for kmake invocations + * [Config] Improve install-arch-headers speed + * [Config] Fix binary-perarch dependencies + * [Config] Removed stamp-flavours target + * [Config] Serialize binary indep targets + * [Config] Use build stamp directly + * [Config] Restore prepare-% target + * rebase to v3.1-rc4 + * rebase to v3.1-rc5 + * [Config] Disable makedumpfile for i386/amd64 + * rebase to v3.1-rc6 + * [Config] Fix binary-% build target + * rebase to v3.1-rc7 + * rebase to v3.1-rc8 + * SAUCE: Add a new entry (413c:8197) to Bluetooth USB device ID table + - LP: #854399 + * [Config] Enable ftrace support in the mac80211 layer + - LP: #865171 + * rebase to v3.1-rc9 + * SAUCE: usb/core/devio.c: Check for printer class specific request + - LP: #872711 + + [ Upstream Kernel Changes ] + + * overlay filesystem + * overlayfs: add statfs support + * overlayfs: implement show_options + * overlay: overlay filesystem documentation + * fs: limit filesystem stacking depth + + [ Will Drewry ] + + * SAUCE: seccomp_filter: new mode with configurable syscall filters + * SAUCE: seccomp_filter: add process state reporting + * SAUCE: seccomp_filter: Document what seccomp_filter is and how it + works. + * SAUCE: seccomp_filter: add HAVE_SECCOMP_FILTER and seccomp_execve + + [ Upstream Kernel Changes ] + + * rebase to v3.1-rc1 + * rebase to v3.1-rc2 + * rebase to v3.1-rc3 + +CONFIG_BLK_DEV_BSGLIB=y + +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 + -CONFIG_VIDEO_OMAP2_VOUT_VRFB=y + * rebase to v3.1-rc4 + * rebase to v3.1-rc5 + * rebase to v3.1-rc6 + * rebase to v3.1-rc7 + * rebase to v3.1-rc8 + * rebase to v3.1-rc9 + * rebase to v3.1-rc10 + + -- Leann Ogasawara Wed, 10 Aug 2011 15:43:38 -0700 + +linux (3.1.0-1.0) oneiric; urgency=low + + [ Leann Ogasawara ] + + * Open P-series + + -- Leann Ogasawara Wed, 10 Aug 2011 13:42:40 -0700 + +linux (3.0.0-8.10) oneiric; urgency=low + + [ Adam Jackson ] + + * SAUCE: drm/i915/pch: Fix integer math bugs in panel fitting + - LP: #753994 + + [ John Johansen ] + + * [Config] Enable missing IPv6 options + + [ Leann Ogasawara ] + + * [Config] Disable config IWLWIFI_DEVICE_SVTOOL + - LP: #819925 + * Rebase to 3.0.1 + + [ Upstream Kernel Changes ] + + * x86, intel, power: Correct the MSR_IA32_ENERGY_PERF_BIAS message + * ALSA: hda - Turn on extra EAPDs on Conexant codecs + - LP: #783582 + * KVM: Remove SMEP bit from CR4_RESERVED_BITS + - LP: #796476 + * KVM: Add SMEP support when setting CR4 + - LP: #796476 + * KVM: Mask function7 ebx against host capability word9 + - LP: #796476 + * KVM: Add instruction fetch checking when walking guest page table + - LP: #796476 + + [ Upstream Kernel Changes ] + + * rebase to v3.0.1 + + -- Leann Ogasawara Fri, 05 Aug 2011 11:32:25 -0700 + +linux (3.0.0-7.9) oneiric; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] add local prefix to oss local change_bits" + * Revert "SAUCE: add tracing for user initiated readahead requests" + * Revert "SAUCE: vfs: Add a trace point in the mark_inode_dirty function" + * Revert "SAUCE: Input: ALPS - Enable Intellimouse mode for Lenovo + Zhaoyang E47" + * Revert "SAUCE: fix documentation strings for struct input_keymap_entry" + * Revert "SAUCE: vt -- fix handoff numbering to 1..n and add range checks + (grub)" + * Revert "SAUCE: vt -- fix handoff numbering to 1..n and add range + checks" + * Revert "SAUCE: vt -- allow grub to request automatic vt_handoff" + * Revert "SAUCE: vt -- maintain bootloader screen mode and content until + vt switch" + * [Config] enable CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 + - LP: #816035 + * ubuntu: Yama: if an underlying filesystem provides a permissions op use + it + * SAUCE: (no-up) add tracing for user initiated readahead requests + * SAUCE: vt -- maintain bootloader screen mode and content until vt + switch + * SAUCE: vt -- allow grub to request automatic vt_handoff + + [ Arjan van de Ven ] + + * SAUCE: (no-up) vfs: Add a trace point in the mark_inode_dirty function + + [ Kees Cook ] + + * Revert "SAUCE: (no-up) Disable building the ACPI debugfs source" + * [Config] enforce ACPI_CUSTOM_METHOD disabled + + [ Keng-Yu Lin ] + + * SAUCE: (no-up) Input: ALPS - Enable Intellimouse mode for Lenovo + Zhaoyang E47 + - LP: #632884, #803005 + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_BLK_DEV_CMD64X=m on powerpc + - LP: #513131 + * [Config] Enable CONFIG_RT2800PCI_RT53XX=y + - LP: #815064 + + [ Rezwanul Kabir ] + + * SAUCE: (no-up) Add support for Intellimouse Mode in ALPS touchpad on + Dell E2 series Laptops + - LP: #632884 + + [ Upstream Kernel Changes ] + + * Revert "yama: if an underlying filesystem provides a permissions op use + it" + * Revert "Add support for Intellimouse Mode in ALPS touchpad on Dell E2 + series Laptops" + * Revert "tty: include linux/slab.h for kfree" + * Revert "gpio/ml_ioh_gpio: include linux/slab.h for kfree" + * Revert "pch_dma: add include/slab.h for kfree" + * mmc: Added quirks for Ricoh 1180:e823 lower base clock frequency + - LP: #773524 + * oss: rename local change_bits to avoid powerpc bitsops.h definition + + -- Leann Ogasawara Mon, 25 Jul 2011 09:08:01 -0700 + +linux (3.0.0-7.8) oneiric; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: overlayfs -- overlayfs: add statfs support + * [Config] enable CONFIG_OVERLAYFS + + [ Erez Zadok ] + + * ubuntu: overlayfs -- overlayfs: implement show_options + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_ALIM7101_WDT=m on powerpc + * [Config] Enable CONFIG_ASUS_OLED=m on powerpc + * [Config] Disable CONFIG_ATM_DUMMY on arm + * [Config] Enable CONFIG_BLK_DEV_DRBD=m on powerpc + * Temporarily disable module check on arm + * Rebase to 3.0 final + * [Config] Enable CONFIG_CAN_TI_HECC=m on arm + * [Config] Set CONFIG_CDROM_PKTCDVD=m on amd64 and i386 + * [Config] Enable CONFIG_CRYPTO_CCM=m on powerpc + * [Config] Enable CONFIG_CRYPTO_DEV_HIFN_795X=m on powerpc + * [Config] Enable CONFIG_CRYPTO_GCM=m on powerpc + * [Config] Set CRYPTO_LZO=m on powerpc64-smp + * [Config] Enable CONFIG_DM9000=m on arm + * [Config] Set CONFIG_DISPLAY_SUPPORT=m on arm + * [Config] Enable CONFIG_DL2K=m on amd64 and i386 + + [ Miklos Szeredi ] + + * ubuntu: overlayfs -- vfs: add i_op->open() + * ubuntu: overlayfs -- vfs: export do_splice_direct() to modules + * ubuntu: overlayfs -- vfs: introduce clone_private_mount() + * ubuntu: overlayfs -- overlay filesystem + * ubuntu: overlayfs -- ovl: fix overlayfs over overlayfs + * ubuntu: overlayfs -- ovl: improve stack use of lookup and readdir + * ubuntu: overlayfs -- fs: limit filesystem stacking depth + * ubuntu: overlayfs -- ovl: make lower mount read-only + + [ Neil Brown ] + + * ubuntu: overlayfs -- overlay: overlay filesystem documentation + + [ Tim Gardner ] + + * [Config] Add enic/fnic to udebs + - LP: #801610 + + [ Upstream Kernel Changes ] + + * yama: if an underlying filesystem provides a permissions op use it + + [ Major Kernel Changes ] + + * Rebase to 3.0 final + + -- Leann Ogasawara Thu, 21 Jul 2011 07:01:32 -0700 + +linux (3.0.0-6.7) oneiric; urgency=low + + [ Eagon Yager ] + + * [Config] Fix misspelled 'skipmodule' in arm makefile. + + [ Keng-Yu Lin ] + + * SAUCE: Input: ALPS - Enable Intellimouse mode for Lenovo Zhaoyang E47 + - LP: #632884, #803005 + + [ Leann Ogasawara ] + + * Revert "[Config] Temporarily disable CONFIG_SMC91X on armel-omap" + * Revert "[Config] Temporarily Disable CONFIG_BRCMSMAC on arm" + * Revert "[Config] Temporarily Disable CONFIG_RTL8192SE on powerpc" + * Revert "[Config] Temporarily Disable CONFIG_RTL8192SE on arm" + * Revert "[Config] Temporarily disable CONFIG_BRCMSMAC on powerpc" + * [Config] Set CONFIG_ACPI_PCI_SLOT=m + * [Config] Set CONFIG_ACPI_SBS=m + * [Config] Set CONFIG_ACPI_WMI=m + * [Config] Set CONFIG_AD7150=m on arm + * [Config] Set CONFIG_AD7152=m on arm + * [Config] Drop CONFIG_GPIO_S5PV210 + * [Config] Drop CONFIG_GPIO_S5PC100 + * [Config] Drop CONFIG_GPIO_PLAT_SAMSUNG + * [Config] Drop CONFIG_GPIO_EXYNOS4 + + [ Stefan Bader ] + + * SAUCE: Re-enable RODATA for i386 virtual + - LP: #809838 + + [ Upstream Kernel Changes ] + + * Revert "Quirk to fix suspend/resume on Lenovo Edge 11,13,14,15" + * (drop after 3.0.0) acer-wmi: Add support for Aspire 1830 wlan hotkey + - LP: #771758 + + -- Leann Ogasawara Wed, 20 Jul 2011 06:36:02 -0700 + +linux (3.0.0-5.6) oneiric; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_RTL8192CU=m + * Rebase to -rc7 + + -- Tim Gardner Mon, 11 Jul 2011 22:13:50 +0100 + +linux (3.0.0-4.5) oneiric; urgency=low + + [ Ming Lei ] + + * SAUCE: fix yama_ptracer_del lockdep warning + - LP: #791019 + + [ Seth Forshee ] + + * SAUCE: (drop after 3.0) asus-wmi: Add callback for hotkey filtering + * SAUCE: (drop after 3.0) eeepc-wmi: Add support for T101MT Home/Express Gate key + * SAUCE: (drop after 3.0) asus-wmi: Enable autorepeat for hotkey input device + * [Config] CONFIG_{ASUS,ASUS_NB,EEEPC}_WMI=m + - LP: #805218 + + [ Tim Gardner ] + + * [Config] updateconfigs after rebase to -rc6+ + Rebased against 4dd1b49c6d215dc41ce50c80b4868388b93f31a3 + * Adopt a 3 digit verion, e.g., 3.0.0-x.x + * Revert "UBUNTU: add dependancies for module-init-tools" + This dependency is no longer required for a 3 digit version. + + -- Tim Gardner Tue, 05 Jul 2011 14:03:04 +0100 + +linux (3.0-3.4) oneiric; urgency=low + + [ Keng-Yu Lin ] + + * SAUCE: Revert: "dell-laptop: Toggle the unsupported hardware + killswitch" + - LP: #775281 + + [ Leann Ogasawara ] + + * rebase to v3.0-rc5 + * [Config] updateconfigs after rebase to 3.0-rc5 + + [ Tim Gardner ] + + * [Config] Remove ubuntu/rtl8192se + * [Config] Added armel ABI files + * [Config] Removed armel versatile flavour + * [Config] CONFIG_INTEL_MEI=m + - LP: #716867 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Enable auto-parser as default for Conexant codecs + + [ Upstream Kernel Changes ] + + * rebase to v3.0-rc5 + + -- Leann Ogasawara Thu, 30 Jun 2011 14:27:10 +0100 + +linux (3.0-2.3) oneiric; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update to 0e2bafab74f0d1463383faeb93f9fc5eb8c2c54e + + [ Leann Ogasawara ] + + * rebase to v3.0-rc4 + * [Config] updateconfigs after rebase to 3.0-rc4 + * fix ERROR: __devcgroup_inode_permission undefined + + [ Stefan Bader ] + + * SAUCE: iscsitarget: Remove driver from the kernel + + [ Tim Gardner ] + + * SAUCE: rtl8192se: Force a build for a 2.6/3.0 kernel + * [Config] Add grub-efi as a recommended bootloader for server and + generic + - LP: #800910 + + [ Upstream Kernel Changes ] + + * Fix node_start/end_pfn() definition for mm/page_cgroup.c + + [ Leann Ogasawara ] + + * rebase to v3.0-rc4 + + -- Leann Ogasawara Fri, 24 Jun 2011 11:51:12 -0700 + +linux (3.0-1.2) oneiric; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_CAN_CALC_BITTIMING + + [ Leann Ogasawara ] + + * rebase to v3.0-rc3 + * [Config] updateconfigs after rebase to 3.0-rc3 + + [ Upstream Kernel Changes ] + + * perf: clear out make flags when calling kernel make kernelver + + [ Leann Ogasawara ] + + * rebase to v3.0-rc3 + + -- Leann Ogasawara Tue, 14 Jun 2011 07:25:35 -0700 + +linux (3.0-0.1) oneiric; urgency=low + + [ Andy Whitcroft ] + + * use the packaging version in the kernel + * use the kernels idea of its version for version_signature + * add dependancies for module-init-tools + * update control files to version 3 + * printchanges/insertchanges allow override of prev_release + * correct Vcs-Git: to point to oneiric + + [ Leann Ogasawara ] + + * rebase to v3.0-rc1 + * [Config] updateconfigs after rebase to 3.0-rc1 + * ubuntu: dm-raid4-5 fix up build failure + * [Config] Temporarily Disable CONFIG_GPIO_EXYNOS4 on arm + * [Config] Temporarily Disable CONFIG_GPIO_PLAT_SAMSUNG on arm + * [Config] Temporarily Disable CONFIG_GPIO_S5PC100 on arm + * [Config] Temporarily Disable CONFIG_GPIO_S5PV210 on arm + * [Config] Temporarily disable CONFIG_BRCMSMAC on powerpc + * [Config] Temporarily Disable CONFIG_BRCMSMAC on arm + * [Config] Temporarily Disable CONFIG_RTL8192SE on arm + * [Config] Temporarily Disable CONFIG_RTL8192SE on powerpc + * [Config] Temporarily disable CONFIG_SMC91X on armel-omap + * rebase to v3.0-rc2 + + [ Manoj Iyer ] + + * SAUCE: mmc: Enable MMC card reader for RICOH [1180:e823] + - LP: #790754 + + [ Upstream Kernel Changes ] + + * Revert "x86 idle: EXPORT_SYMBOL(default_idle, pm_idle) only when APM + demands it" + * drm/i915: fix regression after clock gating init split + + [ Major Kernel Changes ] + + * rebase from v2.6.39 to v3.0-rc1 + * rebase from v3.0-rc1 to v3.0-rc2 + + -- Andy Whitcroft Thu, 09 Jun 2011 15:18:33 +0100 + +linux (2.6.39-3.10) oneiric; urgency=low + + [ Colin Ian King ] + + * SAUCE: S3 early resume debug via keyboard LEDs + + [ Ingo Molnar ] + + * ubuntu: nx-emu - i386: NX emulation + * ubuntu: nx-emu - i386: mmap randomization for executable mappings + + [ Leann Ogasawara ] + + * Revert "[Config] Disable CONFIG_FT1000 on powerpc64-smp" + * Revert "[Config] Disable CONFIG_DM_RAID45" + * [Config] enable CONFIG_BRCMFMAC=y + * [Config] enable CONFIG_MDIO_BITBANG=m across all arch's and flavors + * [Config] enable CONFIG_VIDEO_OUTPUT_CONTROL=m on armel-omap + + [ Robert Nelson ] + + * SAUCE: omap3: beagle: detect new xM revision B + - LP: #770679 + * SAUCE: omap3: beagle: detect new xM revision C + - LP: #770679 + * SAUCE: omap3: beagle: if rev unknown, assume xM revision C + - LP: #770679 + + [ Stefan Bader ] + + * SAUCE: Convert dm-raid45 to new block plugging + + -- Leann Ogasawara Mon, 23 May 2011 11:46:43 -0700 + +linux (2.6.39-3.9) oneiric; urgency=low + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_SCSI_LPFC_DEBUG_FS + * rebase to v2.6.39 + * [Config] enable CONFIG_LLC2=m across all arch's and flavours + * [Config] enable CONFIG_INPUT_APANEL=m + + [ Thomas Schlichter ] + + * SAUCE: vesafb: mtrr module parameter is uint, not bool + - LP: #778043 + * SAUCE: vesafb: enable mtrr WC by default + - LP: #778043 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc7 to v2.6.39 + + -- Andy Whitcroft Fri, 20 May 2011 09:52:32 +0100 + +linux (2.6.39-2.8) oneiric; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-37" + * Revert "ubuntu: AUFS -- aufs2-base.patch aufs2.1-37" + * Revert "[Config] Disable CONFIG_AUFS_FS" + * ubuntu: AUFS -- aufs2-base.patch aufs2.1-39 + * ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-39 + * ubuntu: AUFS -- update to c6b76974311efc5bf3eddf921cd015b6aae46935 + * ubuntu: AUFS -- clean up the aufs updater and BOM + * ubuntu: AUFS -- documentation on updating aufs2 + + [ Kees Cook ] + + * ubuntu: Yama - LSM hooks + * ubuntu: Yama - create task_free security callback + * ubuntu: Yama - add ptrace relationship tracking interface + * ubuntu: Yama - unconditionally chain to Yama LSM + + [ Leann Ogasawara ] + + * Revert "SAUCE: Fix drivers/staging/easycap FTBS" + * Revert "[Config] Disable CONFIG_EASYCAP" + * ubuntu: fsam7400 disable driver + * ubuntu: omnibook disable driver + * ubuntu: rfkill disable driver + + [ Tim Gardner ] + + * SAUCE: Fix extra reference in fb_open() + + -- Leann Ogasawara Mon, 16 May 2011 09:23:56 -0700 + +linux (2.6.39-2.7) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc7 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc6 to v2.6.39-rc7 + + -- Leann Ogasawara Tue, 10 May 2011 10:18:28 +0200 + +linux (2.6.39-1.6) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc6 + * SAUCE: [arm] fixup __aeabi_uldivmod undefined build error + + [ Tim Gardner ] + + * [Config] updateconfigs after rebase to 2.6.39-rc6 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc5 to v2.6.39-rc6 + - LP: #740126 + + -- Leann Ogasawara Thu, 05 May 2011 09:46:12 -0700 + +linux (2.6.39-0.5) oneiric; urgency=low + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: Revert "x86, hibernate: Initialize mmu_cr4_features during boot" + - LP: #764758 + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc5 + * [Config] updateconfigs following rebase to v2.6.39-rc5 + + [ Paolo Pisati ] + + * [Config] s/USB_MUSB_TUSB6010/USB_MUSB_OMAP2PLUS/ on omap3 to get musb + - LP: #759913 + + [ Stefan Bader ] + + * Include nls_iso8859-1 for virtual images + - LP: #732046 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc4 to v2.6.39-rc5 + + -- Leann Ogasawara Wed, 27 Apr 2011 06:39:42 -0700 + +linux (2.6.39-0.4) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc4 + * [Config] updateconfigs following rebase to v2.6.39-rc4 + * fixup powerpc implicit declaration of function + 'crash_kexec_wait_realmode' + * [Config] Disable CONFIG_FT1000 on powerpc64-smp + + [ Tim Gardner ] + + * [Config] CONFIG_TRANSPARENT_HUGEPAGE=y + - LP: #769503 + * [Config] Add cachefiles.ko to virtual flavour + - LP: #770430 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc3 to v2.6.39-rc4 + + -- Leann Ogasawara Tue, 19 Apr 2011 06:25:20 -0700 + +linux (2.6.39-0.3) oneiric; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc3 + * crash_kexec_wait_realmode() undefined when !SMP + + [ Tim Gardner ] + + * [Config] CONFIG_PM_ADVANCED_DEBUG=y for i386/amd64 + - LP: #632327 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc2 to v2.6.39-rc3 + + -- Leann Ogasawara Tue, 12 Apr 2011 06:52:24 -0700 + +linux (2.6.39-0.2) oneiric; urgency=low + + [ Gustavo F. Padovan ] + + * SAUCE: Revert "Bluetooth: Add new PID for Atheros 3011" + - LP: #720949 + + [ John Johansen ] + + * AppArmor: Fix masking of capabilities in complain mode + - LP: #748656 + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc2 + * [Config] updateconfigs following rebase to v2.6.39-rc2 + * hv_mouse needs delay.h + * olpc_dcon_xo_1 needs delay.h + * olpc_dcon_xo_1_5 needs delay.h + * Update dropped.txt for Oneiric + + [ Steve Langasek ] + + * [Config] Make linux-libc-dev coinstallable under multiarch + - LP: #750585 + + [ Upstream Kernel Changes ] + + * x86, hibernate: Initialize mmu_cr4_features during boot + - LP: #752870 + + [ Major Kernel Changes ] + + * rebase from v2.6.39-rc1 to v2.6.39-rc2 + + -- Leann Ogasawara Wed, 06 Apr 2011 11:04:15 -0700 + +linux (2.6.39-0.1) oneiric; urgency=low + + [ Brad Figg ] + + * [Config] Set CONFIG_NR_CPUS=256 for amd64 generic + - LP: #737124 + + [ Henrik Rydberg ] + + * SAUCE: HID: hid-ntrig: add support for 1b96:0006 model + * SAUCE: HID: ntrig: fix suspend/resume on recent models + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: (drop after 2.6.39) v4l: make sure drivers supply a zeroed + struct v4l2_subdev + - LP: #745213 + + [ Kees Cook ] + + * [Config] packaging: adjust perms on vmlinuz as well + * SAUCE: nx-emu: further clarify dmesg reporting + - LP: #745181 + + [ Leann Ogasawara ] + + * rebase to v2.6.39-rc1 + * [Config] updateconfigs following rebase to v2.6.39-rc1 + * [Config] Disable CONFIG_DM_RAID45 + * [Config] Disable CONFIG_SCSI_ISCSITARGET + * [Config] Disable CONFIG_EASYCAP + * [Config] Disable CONFIG_AUFS_FS + * update bnx2 firmware files in d-i/firmware/nic-modules + * xhci-pci.c resolve implicit declaration of kzalloc + * [Config] Enable CONFIG_DRM_PSB for only x86 + * [Config] Enable CONFIG_RTS_PSTOR for only x86 + * mfd/asic3: Fix typo, s/irq_data/data/ + + [ Luke Yelavich ] + + * [Config] Disable CONFIG_CRASH_DUMP on 32-bit powerpc kernels + - LP: #745358 + * [Config] Disable CONFIG_DRM_RADEON_KMS on powerpc kernels + * [Config] Build some framebuffer drivers as modules for powerpc kernels. + + [ Manoj Iyer ] + + * SAUCE: thinkpad-acpi: module autoloading for newer Lenovo ThinkPads. + - LP: #745217 + + [ Tim Gardner ] + + * SAUCE: INR_OPEN=4096 + - LP: #663090 + * SAUCE: Increase the default hard limit for open FDs to 4096 + - LP: #663090 + + [ Upstream Kernel Changes ] + + * (drop after 2.6.39-rc1) arm: versatile : Fix typo introduced in irq + namespace cleanup + * (drop after 2.6.39-rc1) [media] staging: altera-jtag needs delay.h + * ALSA: pcm: fix infinite loop in snd_pcm_update_hw_ptr0() + + [ Major Kernel Changes ] + + * rebase from v2.6.38 to v2.6.39-rc1 + + -- Leann Ogasawara Thu, 31 Mar 2011 12:50:10 -0700 + +linux (2.6.39-0.0) oneiric; urgency=low + + [ Leann Ogasawara ] + + * Open Oneiric + + -- Leann Ogasawara Thu, 31 Mar 2011 12:29:23 -0700 + +linux (2.6.38-7.39) natty; urgency=low + + [ Leann Ogasawara ] + + * No change upload. This is just to rebuild with gcc-4.5.2-7ubuntu1. + + -- Leann Ogasawara Thu, 24 Mar 2011 09:27:45 -0700 + +linux (2.6.38-7.38) natty; urgency=low + + [ Leann Ogasawara ] + + * No change upload take 2. 2.6.38-7.37 was accidentally uploaded before + gcc-4.5.2-6ubuntu5 finished building on all arches. + + -- Leann Ogasawara Tue, 22 Mar 2011 06:12:47 -0700 + +linux (2.6.38-7.37) natty; urgency=low + + [ Leann Ogasawara ] + + * No change upload. This is just to rebuild with gcc-4.5.2-6ubuntu5. + + -- Leann Ogasawara Sun, 20 Mar 2011 16:02:48 -0700 + +linux (2.6.38-7.36) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: KLUDGE: work around failed 'shrink-wrap' compiler + optimisation" + * purge last vestiges of maverick + * [Config] switch CONFIG_FB_VESA back to module + + [ Chris Wilson ] + + * SAUCE: drm/i915: Fix pipelined fencing + - LP: #717114 + + [ Loïc Minier ] + + * Include nls_cp437 module in virtual for fat + - LP: #732046 + * Support arch= cross-compilation for any arch + * Fix couple of typos in 0-common-vars.mk + * Enforce DEFAULT_MMAP_MIN_ADDR on armhf + * Add armhf to Debian -> Linux arch map + * Add initial armhf.mk + * Enable common packages for armhf + + [ Upstream Kernel Changes ] + + * Yama: fix default relationship to check thread group + - LP: #737676 + + -- Andy Whitcroft Fri, 18 Mar 2011 18:18:02 +0000 + +linux (2.6.38-7.35) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to 2fbfac4e053861925fa3fffcdc327649b09af54c + * rebase fixes bug #715330 + * [Config] disable CONFIG_SCSI_QLA_ISCSI for powerpc 32bit to fix FTBS + * rebase to v2.6.38 final + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: Apply OPTION_BLACKLIST_SENDSETUP also for ZTE MF626 + - LP: #636091 + + [ Tim Gardner ] + + * [Confg] CONFIG_BOOT_PRINTK_DELAY=y + + [ Upstream Kernel Changes ] + + * Yama: use thread group leader when creating match + - LP: #729839 + * (drop after 2.6.38) ahci: AHCI mode SATA patch for Intel Patsburg SATA + RAID controller + - LP: #735240 + * (drop after v2.6.38) x86, quirk: Fix SB600 revision check + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc8 to v2.6.38 final + - LP: #715330 + + -- Andy Whitcroft Tue, 15 Mar 2011 19:04:19 +0000 + +linux (2.6.38-6.34) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] normalise CONFIG_INTEL_TXT + * SAUCE: KLUDGE: work around failed 'shrink-wrap' compiler optimisation + - LP: #730860 + * rebase to mainline v2.6.38-rc8 + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc7 + fb62c00a6d8942775abc23d1621db1252e2d93d1 + to v2.6.38-rc8 + + -- Andy Whitcroft Tue, 08 Mar 2011 11:54:48 +0000 + +linux (2.6.38-6.33) natty; urgency=low + + [ Andy Whitcroft ] + + * d-i -- enable speakup-modules udeb + - LP: #672699 + * rebase to 493f3358cb289ccf716c5a14fa5bb52ab75943e5 + * [Config] debian PPC64 configuration + * [Config] cleanup powerpc config fixing unexpected inconsistancies + * [Config] resync ppc64 configuration + * SAUCE: match up ENTRY/END naming for 32/64 bit + * rebase to fb62c00a6d8942775abc23d1621db1252e2d93d1 + * [Config] update configs after rebase to + fb62c00a6d8942775abc23d1621db1252e2d93d1 + * [Config] pps_gen_parport no longer built + + [ Corentin Chary ] + + * SAUCE: (drop after 2.6.38) eeepc-wmi: reorder keymap + - LP: #689393 + * SAUCE: (drop after 2.6.38) eeepc-wmi: add wlan key found on 1015P + - LP: #689393 + + [ John Johansen ] + + * SAUCE: Fix aufs calling of security_path_mknod + - LP: #724456 + + [ Kees Cook ] + + * SAUCE: proc: hide kernel addresses via %pK in /proc//stack + + [ Tim Gardner ] + + * rebase to 2.6.38-rc7 + + [ Upstream Kernel Changes ] + + * Revert "drm/i915: fix corruptions on i8xx due to relaxed fencing" + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc6 to v2.6.38-rc7 + + fb62c00a6d8942775abc23d1621db1252e2d93d1 + - LP: #721389 + - LP: #722925 + - LP: #723672 + - LP: #723676 + - LP: #715318 + + -- Andy Whitcroft Mon, 07 Mar 2011 15:33:17 +0000 + +linux (2.6.38-5.32) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to mainline 6f576d57f1fa0d6026b495d8746d56d949989161 + * [Config] updateconfigs following rebase to v2.6.38-rc6 + * [Config] enable CONFIG_DMAR + - LP: #552311 + + [ Upstream Kernel Changes ] + + * drm/i915: skip FDI & PCH enabling for DP_A + - LP: #561802, #600453, #681877 + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc5 to v2.6.38-rc6 + - LP: #718402 + - LP: #719524 + - LP: #721126 + - LP: #719691 + - LP: #722689 + - LP: #722310 + + -- Andy Whitcroft Tue, 22 Feb 2011 13:28:39 +0000 + +linux (2.6.38-4.31) natty; urgency=low + + [ Andy Whitcroft ] + + * add in bugs closed by upstream patches pulled in by rebases + * rebase to 795abaf1e4e188c4171e3cd3dbb11a9fcacaf505 + * [Config] enable CONFIG_VSX to allow use of vector instuctions + * resync with maverick 98defa1c5773a3d7e4c524967eb01d5bae035816 + * rebase to mainline v2.6.38-rc5 + * SAUCE: ecryptfs: read on a directory should return EISDIR if not + supported + - LP: #719691 + + [ Colin Ian King ] + + * SAUCE: Dell All-In-One: Remove need for Dell module alias + + [ Manoj Iyer ] + + * SAUCE: (drop after 2.6.38) add ricoh 0xe823 pci id. + - LP: #717435 + + [ Tim Gardner ] + + * [Config] CONFIG_CRYPTO_CRC32C_INTEL=y + + [ Upstream Kernel Changes ] + + * Quirk to fix suspend/resume on Lenovo Edge 11,13,14,15 + - LP: #702434 + * vfs: fix BUG_ON() in fs/namei.c:1461 + + [ Vladislav P ] + + * SAUCE: Release BTM while sleeping to avoid deadlock. + - LP: #713837 + + [ Major Kernel Changes ] + + * rebase from v2.6.38-rc4 to v2.6.38-rc5 + - LP: #579276 + - LP: #715877 + - LP: #713769 + - LP: #716811 + * resync with Maverick Ubuntu-2.6.35-27.47 + + -- Andy Whitcroft Fri, 11 Feb 2011 17:24:09 +0000 + +linux (2.6.38-3.30) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.38-rc4 + * ppc64 -- add basic architecture + * ubuntu: AUFS -- update to 65835da20b77c98fb538c9114fc31f5de1328230 + + [ Colin Ian King ] + + * SAUCE: Add WMI hotkeys support for Dell All-In-One series + - LP: #676997 + * SAUCE: Add WMI hotkeys support for another Dell All-In-One series + - LP: #701530 + * SAUCE: Dell WMI: Use sparse keymaps and tidy up code. + - LP: #701530 + + [ Dan Rosenberg ] + + * SAUCE: (drop after 2.6.38) Convert net %p usage %pK + + [ Kees Cook ] + + * Revert "SAUCE: kernel: make /proc/kallsyms mode 400 to reduce ease of + attacking" + * SAUCE: (drop after 2.6.38) use %pK for /proc/kallsyms and /proc/modules + + [ Tim Gardner ] + + * [Config] CONFIG_BLK_CGROUP=y + - LP: #706394 + * [Config] CONFIG_DELL_WMI_AIO=m + + [ Upstream Kernel Changes ] + + * drm/i915/lvds: Restore dithering on native modes for gen2/3 + - LP: #711568 + + [ Upstream Kernel Changes ] + + * rebase from v2.6.38-rc3 to v2.6.38-rc4. + - LP: #701271 + - LP: #708521 + - LP: #710371 + + -- Andy Whitcroft Tue, 08 Feb 2011 02:07:18 +0000 + +linux (2.6.38-2.29) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to 1f0324caefd39985e9fe052fac97da31694db31e + * [Config] updateconfigs following rebase to + 1f0324caefd39985e9fe052fac97da31694db31e + * rebase to 70d1f365568e0cdbc9f4ab92428e1830fdb09ab0 + * [Config] reenable HIBERNATE + - LP: #710877 + * rebase to v2.6.38-rc3 + * [Config] reenable CONFIG_CRASH_DUMP + + [ Kamal Mostafa ] + + * SAUCE: rtl8192se: fix source file perms + * SAUCE: rtl8192se: fix source file newline + * SAUCE: omnibook: fix source file newline + + [ Kees Cook ] + + * [Config] packaging: really make System.map mode 0600 + + [ Ricardo Salveti de Araujo ] + + * SAUCE: OMAP3630: PM: don't warn the user with a trace in case of + PM34XX_ERRATUM + + [ Soren Hansen ] + + * SAUCE: nbd: Remove module-level ioctl mutex + + [ Tim Gardner ] + + * SAUCE: Disable building the ACPI debugfs source + + [ Upstream Kernel Changes ] + + * Set physical start and alignment 1M for virtual i386 + - LP: #710754 + + [ Upstream Kernel Changes ] + + * rebase from v2.6.38-rc2 + c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + to v2.6.38-rc3 + - LP: #707902 + + -- Andy Whitcroft Fri, 28 Jan 2011 16:30:32 +0000 + +linux (2.6.38-1.28) natty; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update to b1cee06249dfa0ab30951e7f06490a75c155b620 + + [ Ricardo Salveti de Araujo ] + + * SAUCE: omap3: beaglexm: fix DVI initialization + * [Config] omap: move CONFIG_PANEL_GENERIC_DPI to build in to make + display work at Beagle + + -- Andy Whitcroft Fri, 28 Jan 2011 10:51:57 +0000 + +linux (2.6.38-1.27) natty; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update aufs-update to track new locations of headers + * ubuntu: AUFS -- update to c5021514085a5d96364e096dbd34cadb2251abfd + * SAUCE: ensure root is ready before running usermodehelpers in it + * correct the Vcs linkage to point to natty + * rebase to linux tip e78bf5e6cbe837daa6ab628a5f679548742994d3 + * [Config] update configs following rebase + e78bf5e6cbe837daa6ab628a5f679548742994d3 + * SAUCE: Yama: follow changes to generic_permission + * ubuntu: compcache -- follow changes to bd_claim/bd_release + * ubuntu: iscsitarget -- follow changes to open_bdev_exclusive + * ubuntu: ndiswrapper -- fix interaction between __packed and packed + * ubuntu: AUFS -- update to 806051bcbeec27748aae2b7957726a4e63ff308e + * update package version to match payload version + * rebase to e6f597a1425b5af64917be3448b29e2d5a585ac8 + * rebase to v2.6.38-rc1 + * [Config] updateconfigs following rebase to v2.6.38-rc1 + * SAUCE: x86 fix up jiffies/jiffies_64 handling + * rebase to linus tip 2b1caf6ed7b888c95a1909d343799672731651a5 + * [Config] updateconfigs following rebase to + 2b1caf6ed7b888c95a1909d343799672731651a5 + * [Config] disable CONFIG_TRANSPARENT_HUGEPAGE to fix i386 boot crashes + * ubuntu: AUFS -- suppress benign plink warning messages + - LP: #621195 + * [Config] CONFIG_NR_CPUS=256 for amd64 -server flavour + * rebase to v2.6.38-rc2 + * rebase to mainline d315777b32a4696feb86f2a0c9e9f39c94683649 + * rebase to c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + * [Config] update configs following rebase to + c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + * [Config] disable CONFIG_AD7152 to fix FTBS on armel versatile + * [Config] disable CONFIG_AD7150 to fix FTBS on armel versatile + * [Config] disable CONFIG_RTL8192CE to fix FTBS on armel omap + * [Config] disable CONFIG_MANTIS_CORE to fix FTBS on armel versatile + + [ Kees Cook ] + + * SAUCE: kernel: make /proc/kallsyms mode 400 to reduce ease of attacking + + [ Stefan Bader ] + + * Temporarily disable RODATA for virtual i386 + - LP: #699828 + + [ Tim Gardner ] + + * [Config] CONFIG_NLS_DEFAULT=utf8 + - LP: #683690 + * [Config] CONFIG_HIBERNATION=n + * update bnx2 firmware files in d-i/firmware/nic-modules + + [ Upstream Kernel Changes ] + + * Revert "drm/radeon/bo: add some fallback placements for VRAM only + objects." + * packaging: make System.map mode 0600 + * thinkpad_acpi: Always report scancodes for hotkeys + - LP: #702407 + * sched: tg->se->load should be initialised to tg->shares + * Input: sysrq -- ensure sysrq_enabled and __sysrq_enabled are consistent + * brcm80211: include linux/slab.h for kfree + * pch_dma: add include/slab.h for kfree + * i2c-eg20t: include linux/slab.h for kfree + * gpio/ml_ioh_gpio: include linux/slab.h for kfree + * tty: include linux/slab.h for kfree + * winbond: include linux/delay.h for mdelay et al + + [ Upstream Kernel Changes ] + + * mark the start of v2.6.38 versioning + * rebase v2.6.37 to v2.6.38-rc2 + c723fdab8aa728dc2bf0da6a0de8bb9c3f588d84 + - LP: #689886 + - LP: #702125 + - LP: #608775 + - LP: #215802 + - LP: #686333 + - LP: #677830 + - LP: #677652 + - LP: #696493 + - LP: #697240 + - LP: #689036 + - LP: #705323 + - LP: #686692 + + -- Andy Whitcroft Sun, 09 Jan 2011 13:44:52 +0000 + +linux (2.6.37-12.26) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.37-rc8 + * [Config] armel -- reenable omap flavour + * [Config] disable CONFIG_MACH_OMAP3517EVM to fix FTBS on armel omap + * [Config] disable CONFIG_GPIO_VX855 to fix FTBS on omap armel + * [Config] disable CONFIG_WESTBRIDGE_ASTORIA to fix FTBS on omap armel + * [Config] disable CONFIG_TI_DAVINCI_EMAC to fix FTBS on omap armel + * rebase to mainline 989d873fc5b6a96695b97738dea8d9f02a60f8ab + * [Config] track missing modules + * rebase to v2.6.37 final + + [ Chase Douglas ] + + * SAUCE: (drop after 2.6.37) HID: magicmouse: Don't report REL_{X, Y} for + Magic Trackpad + + [ Stefan Bader ] + + * Revert "SAUCE: blkfront: default to sd devices" + - LP: #684875 + + [ Tim Gardner ] + + * Revert "SAUCE: (no-up) libata: Ignore HPA by default." + - LP: #380138 + * [Config] Added autofs4.ko to -virtual flavour + - LP: #692917 + + [ Upstream Kernel Changes ] + + * Add support for Intellimouse Mode in ALPS touchpad on Dell E2 series + Laptops + - LP: #632884 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc8 + * rebase to mainline 989d873fc5b6a96695b97738dea8d9f02a60f8ab + * rebase to v2.6.37 final + + -- Andy Whitcroft Thu, 23 Dec 2010 18:34:13 +0000 + +linux (2.6.37-11.25) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] d-i -- add hpsa to the list of block devices + - LP: #684304 + * [Config] add vmw-balloon driver to -virtual flavour + - LP: #592039 + * rebase to v2.6.37-rc7 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc7 + + -- Andy Whitcroft Tue, 21 Dec 2010 13:35:28 +0000 + +linux (2.6.37-10.24) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.37-rc6 + * updateconfigs following rebase to v2.6.37-rc6 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc6 + + -- Andy Whitcroft Thu, 16 Dec 2010 12:34:19 +0000 + +linux (2.6.37-9.23) natty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: vt -- fix handoff numbering to 1..n and add range checks + - LP: #689606 + * SAUCE: vt -- fix handoff numbering to 1..n and add range checks (grub) + - LP: #689606 + + [ Kees Cook ] + + * SAUCE: RO/NX protection for loadable kernel, fix ftrace + - LP: #690190 + + -- Andy Whitcroft Wed, 15 Dec 2010 19:29:57 +0000 + +linux (2.6.37-9.22) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.35-rc5 + * [Config] updateconfigs following rebase to v2.6.37-rc5 + * (no-up) add support for installed header files to ubuntu directory + - LP: #684666 + * ubuntu: AUFS -- include the aufs_types.h file in linux-libc-headers + - LP: #684666 + * ubuntu: dm-raid4-5 -- follow changes to bio flags + * ubuntu: dm-raid4-5 -- re-enable + * ubuntu: omnibook -- update BOM + * ubuntu: ndiswrapper -- update BOM to match actual version + * ubuntu: ndiswrapper -- follow removal of the BKL and locked ioctl + * ubuntu: ndiswrapper -- re-enable + * ubuntu: iscsitarget -- re-instate copy_io_context + * ubuntu: iscsitarget -- follow changes to semaphore initialisation + * ubuntu: iscsitarget -- convert NIPQUAD to %pI4 + * ubuntu: iscsitarget -- re-enable + + [ Kees Cook ] + + * [Config] update config for CONFIG_DEBUG_SET_MODULE_RONX + + [ Manoj Iyer ] + + * SAUCE: Enable jack sense for Thinkpad Edge 13 + - LP: #685015 + + [ Tim Gardner ] + + * [Config] CONFIG_9P_FSCACHE=y,CONFIG_9P_FS_POSIX_ACL=y + * [Config] CONFIG_CRYPTO_CRC32C=y + - LP: #681819 + * [Config] CONFIG_9P_FSCACHE=n + * [Config] Add nfsd modules to -virtual flavour + - LP: #688070 + + [ Upstream Kernel Changes ] + + * Revert "Staging: zram: work around oops due to startup ordering snafu" + * NFS: Fix panic after nfs_umount() + - LP: #683938 + * x86: Add NX protection for kernel data + * x86: Add RO/NX protection for loadable kernel modules + * x86: Resume trampoline must be executable + * x86: RO/NX protection for loadable kernel, jump_table fix + + [ Upstream Kernel Changes ] + + * rebase to v2.6.37-rc5 + + -- Andy Whitcroft Thu, 09 Dec 2010 18:15:35 +0000 + +linux (2.6.37-8.21) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- include the aufs_types.h file in + linux-libc-headers" + * Revert "(no-up) add support for installed header files to ubuntu + directory" + + -- Andy Whitcroft Sun, 05 Dec 2010 17:33:28 +0000 + +linux (2.6.37-8.20) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] drivers/serial/mfd.c: Fix ARM compile error" + * Revert "SAUCE: Nouveau: Disable acceleration on MacBook Pros" + * Revert "SAUCE: Nouveau: Add quirk framework to disable acceleration" + * Revert "SAUCE: i915 -- disable powersave by default" + * SAUCE: enable Marvell 9128 PCIe SATA controller + - LP: #658521 + * [Config] evtchn has been renamed + * (no-up) add support for installed header files to ubuntu directory + - LP: #684666 + * ubuntu: AUFS -- include the aufs_types.h file in linux-libc-headers + - LP: #684666 + + [ Tim Gardner ] + + * [Config] MISS: evtchn, NEW : xen-evtchn + * rebase to v2.6.37-rc4 + + [ Upstream Kernel Changes ] + + * drm/i915: Clean conflicting modesetting registers upon init + - LP: #683775 + * rebase to v2.6.37-rc4 + + -- Andy Whitcroft Fri, 03 Dec 2010 18:42:07 +0000 + +linux (2.6.37-7.19) natty; urgency=low + + [ Tim Gardner ] + + * [Config] Add bnx2 firmware to nic-modules udeb + - LP: #676245 + + -- Andy Whitcroft Fri, 26 Nov 2010 17:53:45 +0000 + +linux (2.6.37-7.18) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] USB: option: Remove duplicate AMOI_VENDOR_ID" + * Revert "SAUCE: Add extra headers to linux-libc-dev" + * Revert "SAUCE: Enable speedstep for sonoma processors." + * [Config] enable CONFIG_BT_HCIUART_ATH3K + * [Config] enable CONFIG_IWLWIFI_DEBUGFS + * [Config] standardise CONFIG_MII + * [Config] standardise CONFIG_PRISM2_USB + * [Config] standardise CONFIG_SCSI_QLA_ISCSI + * [Config] build in CONFIG_AGP + * [Config] build in CONFIG_AGP_INTEL + * [Config] build in CONFIG_AGP_AMD + * [Config] build in CONFIG_AGP_AMD64 + * [Config] build in CONFIG_AGP_NVIDIA + * [Config] build in CONFIG_AGP_VIA + * [Config] disable CONFIG_SCSI_QLA_ISCSI for FTBS (arm) + * (no-up): document the new ## scheme + * [Config] harmonise CONFIG_SERIAL_8250_NR_UARTS + * [Config] update CONFIG_SERIAL_8250_RUNTIME_UARTS=32 + - LP: #675453 + + [ Mathieu J. Poirier ] + + * SAUCE: ARM: Adding vdd_sdi regulator supply to OMAP3EVM + + [ Upstream Kernel Changes ] + + * nx-emu: fix inverted report of disable_nx + + -- Andy Whitcroft Tue, 23 Nov 2010 21:00:39 +0000 + +linux (2.6.37-6.17) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- aufs2-standalone.patch + aufs2.1-36-UNRELEASED-20101103" + * Revert "ubuntu: AUFS -- aufs2-base.patch + aufs2.1-36-UNRELEASED-20101103" + * [Config] standardise CONFIG_BT + * [Config] standardise CONFIG_IRDA + * [Config] standardise CONFIG_LAPB + * [Config] standardise CONFIG_RDS + * [Config] standardise CONFIG_RFKILL + * [Config] standardise CONFIG_TIPC + * [Config] standardise CONFIG_X25 + * [Config] standardise CONFIG_INPUT_EVDEV + * [Config] standardise CONFIG_INPUT_JOYDEV + * [Config] standardise CONFIG_INPUT_JOYSTICK + * [Config] standardise CONFIG_INPUT_TOUCHSCREEN + * [Config] CONFIG_INPUT_TOUCHSCREEN=n for FTBS (arm) + * [Config] CONFIG_IRDA=n for FTBS (arm) + * ubuntu: AUFS -- aufs2-base.patch aufs2.1-37 + * ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-37 + * ubuntu: AUFS -- update to 097bf62d6f49619359d34bf17f242df38562489a + + [ Tim Gardner ] + + * SAUCE: Fix drivers/staging/easycap FTBS + * [Config] CONFIG_EASYCAP=m after fixing FTBS + + [ Upstream Kernel Changes ] + + * Revert "x86: Add NX protection for kernel data" + + -- Andy Whitcroft Mon, 22 Nov 2010 18:09:10 +0000 + +linux (2.6.37-6.16) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] update config for CONFIG_DEBUG_SET_MODULE_RONX" + * rebase to v2.6.37-rc3 + + [ Tim Gardner ] + + * [Config] CONFIG_SCHED_AUTOGROUP=y + + [ Upstream Kernel Changes ] + + * Revert "x86: Add RO/NX protection for loadable kernel modules" + * sched: automated per session task groups + * rebase to v2.6.37-rc3 + + -- Andy Whitcroft Mon, 22 Nov 2010 10:11:13 +0000 + +linux (2.6.37-6.15) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] standardise CONFIG_CEPH_FS + * [Config] standardise CONFIG_SCSI_LPFC_DEBUG_FS + * [Config] standardise CONFIG_SCSI_PROC_FS + * [Config] standardise CONFIG_UBIFS_FS + * [Config] standardise CONFIG_USB_GADGET_DEBUG_FS + + [ Kees Cook ] + + * [Config] update config for CONFIG_DEBUG_SET_MODULE_RONX + + [ Manoj Iyer ] + + * SAUCE: Enable jack sense for Thinkpad Edge 11 + - LP: #677210 + * SAUCE: enable rfkill for rtl8192se driver + - LP: #640992 + + [ Tim Gardner ] + + * [Config] CONFIG_EASYCAP=n for FTBS + * Rebase to v2.6.32-rc2+git + + [ Upstream Kernel Changes ] + + * x86: Fix improper large page preservation + * x86: Add NX protection for kernel data + * x86: Add RO/NX protection for loadable kernel modules + + [ Upstream Kernel Changes ] + + * Rebase to Linus 2.6.37-rc2+git + + -- Andy Whitcroft Sat, 20 Nov 2010 11:40:00 +0000 + +linux (2.6.37-5.14) natty; urgency=low + + [ Upstream Kernel Changes ] + + * PCI: fix offset check for sysfs mmapped files + - LP: #676963 + + -- Andy Whitcroft Thu, 18 Nov 2010 18:12:27 +0000 + +linux (2.6.37-5.13) natty; urgency=low + + [ Andy Whitcroft ] + + * rebased to v2.6.37-rc2 + * updateconfigs following rebase to v2.6.37-rc2 + + [ Tim Gardner ] + + * [Config] Added NFS and related modules to virtual flavour + - LP: #659084 + + [ Upstream Kernel Changes ] + + * x86, cpu: Rename verify_cpu_64.S to verify_cpu.S + * x86, cpu: Clear XD_DISABLED flag on Intel to regain NX + * x86, cpu: Call verify_cpu during 32bit CPU startup + * x86, cpu: Only CPU features determine NX capabilities + + [ Upstream Changes ] + + * rebased to v2.67.37-rc2 + + -- Andy Whitcroft Tue, 16 Nov 2010 13:13:29 +0000 + +linux (2.6.37-4.12) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] HID: magicmouse: add param for scroll speed" + * Revert "[Upstream] HID: magicmouse: properly account for scroll + movement in state" + * Revert "[Upstream] HID: magicmouse: disable and add module param for + scroll acceleration" + * Revert "[Upstream] HID: magicmouse: scroll on entire surface, not just + middle of mouse" + + [ Henrik Rydberg ] + + * SAUCE: hid: ntrig: remove sysfs nodes + * SAUCE: hid: ntrig: Setup input filtering manually + * SAUCE: hid: ntrig: New ghost-filtering event logic + + [ Manoj Iyer ] + + * SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + - LP: #348861 + + [ Upstream Kernel Changes ] + + * Revert "mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume" + * Revert "[ARM] implement arch_randomize_brk()" + * Revert "ARM: stack protector: change the canary value per task" + * Revert "ARM: initial stack protector (-fstack-protector) support" + * Revert "ALSA: hda - Handle pin NID 0x1a on ALC259/269" + * Revert "ALSA: hda - Handle missing NID 0x1b on ALC259 codec" + * Revert "perf probe: Add kernel source path option" + * hid: ntrig: Support single-touch devices + * hid: ntrig: Mask pen switch events + * net: rtnetlink.h -- only include linux/netdevice.h when used by the + kernel + - LP: #673073 + * Fix userspace build of linux/fs.h + + -- Andy Whitcroft Mon, 15 Nov 2010 19:31:44 +0000 + +linux (2.6.37-3.11) natty; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- update to + b37c575759dc4535ccc03241c584ad5fe69e3b25" + * Revert "ubuntu: AUFS -- track changes to the arguements to fop fsync()" + * Revert "ubuntu: AUFS -- update to standalone 2.6.35-rcN as at 20100601" + * Revert "ubuntu: AUFS -- update to standalone 2.6.34 as at 20100601" + * Revert "ubuntu: AUFS -- aufs2 base patch for linux-2.6.34" + * [Config] Disable intel_idle for -virtual kernels + - LP: #651370 + * [Config] enforcer -- ensure we never enable CONFIG_IMA + * debian -- pass the correct flavour name when checking configs + * [Config] enforcer -- ensure CONFIG_INTEL_IDLE is off for -virtual + * [Config] ensure CONFIG_IPV6=y for powerpc + * [Config] enforcer -- ensure CONFIG_IPV6=y + * ubuntu: AUFS -- aufs2-base.patch aufs2.1-36-UNRELEASED-20101103 + * ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-36-UNRELEASED-20101103 + * ubuntu: AUFS -- update to aufs2.1-36-UNRELEASED-20101103 + * ubuntu: AUFS -- re-enable + * ubuntu: AUFS -- track changes to work queue initialisation + * ubuntu: AUFS -- track changes to llseek in v2.6.37-rc1 + * SAUCE: fbcon -- fix race between open and removal of framebuffers + * SAUCE: fbcon -- fix OOPs triggered by race prevention fixes + - LP: #614008 + * SAUCE: drm -- stop early access to drm devices + + [ Jeremy Kerr ] + + * [Config] Build-in powermac ZILOG serial driver + - LP: #673346 + + [ Kees Cook ] + + * SAUCE: nx-emu: use upstream ASLR when possible + + [ Tim Gardner ] + + * [Config] Use correct be2iscsi module name in d-i/modules/scsi-modules + - LP: #628776 + + [ Upstream Kernel Changes ] + + * i386: NX emulation + * nx-emu: drop exec-shield sysctl, merge with disable_nx + * nx-emu: standardize boottime message prefix + * mmap randomization for executable mappings on 32-bit + * exec-randomization: brk away from exec rand area + + -- Andy Whitcroft Thu, 11 Nov 2010 23:46:37 +0000 + +linux (2.6.37-2.10) natty; urgency=low + + [ Andy Whitcroft ] + + * reinstate armel config changes: + * [Config] CONFIG_GPIO_PCH=n for armel FTBS + * [Config] CONFIG_GPIO_VX855=n for armel FTBS + + -- Andy Whitcroft Wed, 03 Nov 2010 22:20:35 +0000 + +linux (2.6.37-2.9) natty; urgency=low + + [ Andy Whitcroft ] + + * config -- fix genportsconfig + * [Config] move powerpc over from ports to distro + * bump master version number to match contained kernel + * SAUCE: fix documentation strings for struct input_keymap_entry + * usb: gadget: goku_udc: add registered flag bit + + -- Andy Whitcroft Tue, 02 Nov 2010 15:14:11 +0000 + +linux (2.6.36-2.8) natty; urgency=low + + [ Tim Gardner ] + + * [Config]: fix changed CONFIG_SYSFS_DEPRECATED_V2 enforcement rules + * [Config]: TWL4030_CORE=n for FTBS + * [Config]: CONFIG_ATH6K_LEGACY=n for FTBS + * [Config]: CONFIG_SOLO6X10=n for FTBS + * [Config]: CONFIG_GPIO_PCH=n for armel FTBS + * [Config]: CONFIG_GPIO_VX855=n for armel FTBS + * [Config]: CONFIG_DRM_NOUVEAU=n for armel FTBS + * [Config]: CONFIG_LINE6_USB=n for armel FTBS + * [Config]: CONFIG_SENSORS_AK8975=n for armel FTBS + * [Config]: CONFIG_I2C_I801=n for armel FTBS + * UBUNTU: SAUCE: AppArmor: Fix unpack of network tables. + * AppArmor: compatibility patch for v5 interface + * AppArmor: compatibility patch for v5 network controll + * Dropped (pre-stable): input: Support Clickpad devices in ClickZone mode + * Dropped: UBUNTU: SAUCE: libata: Add ALPM power state accounting to the AHCI driver + * Dropped: UBUNTU: SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + * Dropped: hid: 3m: Convert to MT slots + * Dropped: HID: magicmouse: don't allow hidinput to initialize the device + * Dropped: HID: magicmouse: simplify touch data bit manipulation + * Dropped: HID: magicmouse: simplify touch down logic + * Dropped: HID: magicmouse: enable Magic Trackpad support + * Dropped: UBUNTU: SAUCE: hid: ntrig: remove sysfs nodes + * Dropped: UBUNTU: SAUCE: hid: ntrig: Setup input filtering manually + * Dropped: UBUNTU: SAUCE: hid: ntrig: New ghost-filtering event logic + * Dropped: UBUNTU: SAUCE: hid: ntrig: identify firmware version (wiggled) + * Dropped: UBUNTU: (pre-stable): input: Support Clickpad devices in ClickZone mode + * Dropped: UBUNTU: SAUCE: KMS: cache the EDID information of the LVDS + * Dropped: UBUNTU: SAUCE: fbcon -- fix race between open and removal of framebuffers + * Dropped: UBUNTU: SAUCE: fbcon -- fix OOPs triggered by race prevention fixes + * Dropped: UBUNTU: SAUCE: x86: implement cs-limit nx-emulation for ia32 + * Dropped: UBUNTU: SAUCE: x86: more tightly confine cs-limit nx-emulation to ia32 only + * Dropped: UBUNTU: SAUCE: [um] Don't use nx_enabled under UML + * Dropped: UBUNTU: SAUCE: x86: brk away from exec rand area + + [ Upstream Kernel Changes ] + + * rebased against 2.6.27-rc1 + + -- Tim Gardner Fri, 22 Oct 2010 19:35:05 -0600 + +linux (2.6.36-1.7) natty; urgency=low + + [ Andy Whitcroft ] + + * rebased to v2.6.36 final + * [Config] update configs following rebase to v2.6.36 final + * [Config] update ports configs following rebase to v2.6.36 final + + [ Upstream Kernel Changes ] + + * rebased to v2.6.36 final + + -- Andy Whitcroft Thu, 21 Oct 2010 14:28:57 +0100 + +linux (2.6.36-1.6) natty; urgency=low + + [ Upstream Kernel Changes ] + + * drop broadcom staging driver preview: + * Revert "Staging: Add initial release of brcm80211 - Broadcom 802.11n + wireless LAN driver." + + -- Andy Whitcroft Wed, 20 Oct 2010 10:41:25 +0100 + +linux (2.6.36-1.5) natty; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.36-rc8 + * updateconfigs following rebase to v2.6.36-rc8 + * updateportsconfigs following rebase to v2.6.36-rc8 + * config -- simplify the kernelconfig interface + * config -- add new config mode 'dumpconfigs' + + [ Tim Gardner ] + + * Simplify the use of CROSS_COMPILER + + [ Upstream Kernel Changes ] + + * drop broadcom staging driver preview: + * Revert "staging: brcm80211: Make compiling of brcm80211.ko and + brcmfmac.ko mutually exclusive." + * Revert "staging: brcm80211: Fix compile issue when BRCM80211_PCI is not + set." + * Revert "Staging: brcm80211: remove driver specific -W options" + * Revert "Staging: brcm80211: clean up makefile cflag lines" + * Revert "staging: brcm80211: add fullmac driver" + * Revert "staging: brcm80211: use string native library" + * Revert "staging: brcm80211: use native ctype library" + * Revert "staging: brcm80211: fix remaining checkpatch errors." + * Revert "staging: brcm80211: fix "ERROR: trailing whitespace."" + * Revert "staging: brcm80211: fix "ERROR: spaces required around that + ..."" + * Revert "staging: brcm80211: fix "ERROR: spaces prohibited around that + ':' ..."" + * Revert "staging: brcm80211: fix "ERROR: space required before that + ..."" + * Revert "staging: brcm80211: fix "ERROR: space required after that ..."" + * Revert "staging: brcm80211: fix "ERROR: space required after that close + brace"" + * Revert "staging: brcm80211: fix "ERROR: space prohibited before + ...close square bracket"" + * Revert "staging: brcm80211: fix "ERROR: space prohibited after that + ..."" + * Revert "staging: brcm80211: fix "ERROR: need consistent spacing around + '*'"" + * Revert "staging: brcm80211: fix 'ERROR: "(foo*)" should be "(foo *)"'" + * Revert "staging: brcm80211: fix "ERROR: Macros w/ mult. statements ... + do - while loop"" + * Revert "staging: brcm80211: fix "ERROR: Macros w/ complex values ... + parenthesis"" + * Revert "staging: brcm80211: fix "ERROR: do not initialise statics to 0 + or NULL"" + * Revert "staging: brcm80211: fix "ERROR: do not initialise globals to 0 + or NULL"" + * Revert "staging: brcm80211: fix "ERROR: while should follow close brace + '}'"" + * Revert "staging: brcm80211: fix "ERROR: that open brace { ... prev + line"" + * Revert "staging: brcm80211: fix "ERROR: trailing statements should be + on next line"" + * Revert "staging: brcm80211: fix "ERROR: do not use assignment in if + condition"" + * Revert "staging: brcm80211: fix "ERROR: return is not a function, + paren..."" + * Revert "staging: brcm80211: fix "ERROR: open brace '{' following + function dec..."" + * Revert "staging: brcm80211: fix 'ERROR: "foo * bar" should be "foo + *bar"'" + * Revert "staging: brcm80211: Fix URLs for firmware files." + * Revert "staging: brcm80211: use '%pM' format to print MAC address" + * Revert "staging: brcm80211: Add contact info to TODO list." + * Revert "staging: brcm80211: Fix some initialisation failure paths" + * Export dump_{write,seek} to binary loader modules + * rebase to v2.6.36-rc8. + + -- Andy Whitcroft Tue, 19 Oct 2010 18:58:11 +0100 + +linux (2.6.36-0.4) natty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: perf: increase stack footprint to avoid stack-protector warning + (fixes FTBS on powerpc) + + -- Andy Whitcroft Thu, 14 Oct 2010 13:16:16 +0100 + +linux (2.6.36-0.3) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable CONFIG_SCSI_QLA_ISCSI to fix FTBS on powerpc + + -- Andy Whitcroft Thu, 14 Oct 2010 03:01:30 +0100 + +linux (2.6.36-0.2) natty; urgency=low + + [ Andy Whitcroft ] + + * [Config] updateportsconfigs following rebase to 2.6.36-rc7 + (fix FTBS on powerpc) + + -- Andy Whitcroft Wed, 13 Oct 2010 23:25:12 +0100 + +linux (2.6.36-0.1) natty; urgency=low + + [ Andy Whitcroft ] + + * reduce disk usage during buildd builds + - LP: #645653 + * [Config] enforcer -- ensure CONFIG_INIT_PASS_ALL_PARAMS is y + * [Config] armel -- drop omap flavour + + [ Tim Gardner ] + + * Added dropped patch list + * more dropped patches + * [Config] Disable aufs, dmraid-4.5, ndis-wrapper + * [Config] Add support for cross compiling armel + * [Config] CONFIG_SCSI_QLA_ISCSI=n for armel + * [Upstream] drivers/serial/mfd.c: Fix ARM compile error + * [Config]: updateconfigs after adding brcm80211 + * staging: brcm80211: Fix Makefile syntax error + * rebased to v2.6.36-rc7 + + [ Upstream Kernel Changes ] + + * (upstream) IPS driver: don't toggle CPU turbo on unsupported CPUs + * (upstream) IPS driver: verify BIOS provided limits + * intel_ips: Print MCP limit exceeded values. + * Staging: Add initial release of brcm80211 - Broadcom 802.11n wireless + LAN driver. + * staging: brcm80211: Fix some initialisation failure paths + * staging: brcm80211: Add contact info to TODO list. + * staging: brcm80211: use '%pM' format to print MAC address + * staging: brcm80211: Fix URLs for firmware files. + * staging: brcm80211: fix 'ERROR: "foo * bar" should be "foo *bar"' + * staging: brcm80211: fix "ERROR: open brace '{' following function + dec..." + * staging: brcm80211: fix "ERROR: return is not a function, paren..." + * staging: brcm80211: fix "ERROR: do not use assignment in if condition" + * staging: brcm80211: fix "ERROR: trailing statements should be on next + line" + * staging: brcm80211: fix "ERROR: that open brace { ... prev line" + * staging: brcm80211: fix "ERROR: while should follow close brace '}'" + * staging: brcm80211: fix "ERROR: do not initialise globals to 0 or NULL" + * staging: brcm80211: fix "ERROR: do not initialise statics to 0 or NULL" + * staging: brcm80211: fix "ERROR: Macros w/ complex values ... + parenthesis" + * staging: brcm80211: fix "ERROR: Macros w/ mult. statements ... do - + while loop" + * staging: brcm80211: fix 'ERROR: "(foo*)" should be "(foo *)"' + * staging: brcm80211: fix "ERROR: need consistent spacing around '*'" + * staging: brcm80211: fix "ERROR: space prohibited after that ..." + * staging: brcm80211: fix "ERROR: space prohibited before ...close square + bracket" + * staging: brcm80211: fix "ERROR: space required after that close brace" + * staging: brcm80211: fix "ERROR: space required after that ..." + * staging: brcm80211: fix "ERROR: space required before that ..." + * staging: brcm80211: fix "ERROR: spaces prohibited around that ':' ..." + * staging: brcm80211: fix "ERROR: spaces required around that ..." + * staging: brcm80211: fix "ERROR: trailing whitespace." + * staging: brcm80211: fix remaining checkpatch errors. + * staging: brcm80211: use native ctype library + * staging: brcm80211: use string native library + * staging: brcm80211: add fullmac driver + * Staging: brcm80211: clean up makefile cflag lines + * Staging: brcm80211: remove driver specific -W options + * staging: brcm80211: Fix compile issue when BRCM80211_PCI is not set. + * staging: brcm80211: Make compiling of brcm80211.ko and brcmfmac.ko + mutually exclusive. + + -- Andy Whitcroft Tue, 12 Oct 2010 16:00:27 +0100 + +linux (2.6.35-22.33) maverick; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: Add support for Intellimouse Mode in ALPS touchpad on + Dell E2 series Laptops" + - LP: #641320 + + [ Brian Rogers ] + + * SAUCE: ir-core: Fix null dereferences in the protocols sysfs interface + - LP: #624701 + + [ Christopher James Halse Rogers ] + + * SAUCE: Nouveau: Add quirk framework to disable acceleration + - LP: #544088, #546393 + * SAUCE: Nouveau: Disable acceleration on MacBook Pros + - LP: #546393 + + [ John Johansen ] + + * Revert "SAUCE: AppArmor: allow newer tools to load policy on older + kernels" + * SAUCE: AppArmor: allow newer tools to load policy on older kernels + - LP: #639758 + + [ Mathieu J. Poirier ] + + * SAUCE: Adding vdd_sdi regulator supply to OMAP3EVM + + [ Upstream Kernel Changes ] + + * ALSA: HDA: Enable internal speaker on Dell M101z + - LP: #640254 + + -- Leann Ogasawara Fri, 17 Sep 2010 13:21:28 -0700 + +linux (2.6.35-22.32) maverick; urgency=low + + [ Arjan van de Ven ] + + * SAUCE: libata: Add ALPM power state accounting to the AHCI driver + + [ David Henningsson ] + + * SAUCE: ALSA: HDA: Enable internal mic on Dell E6410 and Dell E6510 + - LP: #605047, #628961 + + [ John Johansen ] + + * [Upstream] AppArmor: Fix splitting an fqname into separate namespace + and profile names + - LP: #615947 + * [Upstream] AppArmor: Fix locking from removal of profile namespace + - LP: #615947 + * SAUCE: AppArmor: allow newer tools to load policy on older kernels + - LP: #639758 + * SAUCE: Improve Amazon EBS performance for EC2 + - LP: #634316 + + [ Leann Ogasawara ] + + * Revert "SAUCE: i915 KMS -- blacklist i855" + * Revert "SAUCE: i915 KMS -- blacklist i845g" + * Revert "SAUCE: i915 KMS -- blacklist i830" + * Revert "SAUCE: i915 KMS -- support disabling KMS for known broken + devices" + * execute module-inclusion within a subshell + - LP: #621175 + + [ Upstream Kernel Changes ] + + * (pre-stable) bounce: call flush_dcache_page() after bounce_copy_vec() + - LP: #633227 + * (pre-stable) drm/i915: don't enable self-refresh on Ironlake + - LP: #629711 + * (pre-stable) mm: Move vma_stack_continue into mm.h + * x86, hwmon: Fix unsafe smp_processor_id() in thermal_throttle_add_dev + - LP: #601073 + * PM / Runtime: Make runtime_status attribute not debug-only (v. 2) + * PM / Runtime: Add runtime PM statistics (v3) + * compat: Make compat_alloc_user_space() incorporate the access_ok() + - CVE-2010-3081 + * x86-64, compat: Test %rax for the syscall number, not %eax + - CVE-2010-3301 + * x86-64, compat: Retruncate rax after ia32 syscall entry tracing + - CVE-2010-3301 + + -- Leann Ogasawara Tue, 14 Sep 2010 08:46:49 -0700 + +linux (2.6.35-21.31) maverick; urgency=low + + [ Andy Whitcroft ] + + * bodge linux-libc-dev package version due to ti-omap4 error + * linux-libc-dev -- ensure we can only build this on debian.master + + -- Leann Ogasawara Mon, 13 Sep 2010 09:54:31 -0700 + +linux (2.6.35-21.30) maverick; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: fbcon -- fix OOPs triggered by race prevention fixes + - LP: #614008 + + [ Daniel Lezcano ] + + * SAUCE: fix compilation warning when CONFIG_SECURITY is not set + + [ Henrik Rydberg ] + + * SAUCE: Input: wacom - add fuzz parameters to features + * SAUCE: Input: wacom - collect device quirks into single function + * SAUCE: Input: wacom - add support for the Bamboo Touch trackpad + * SAUCE: Input: wacom - add a quirk for low resolution Bamboo devices + * SAUCE: hid: ntrig: Remove unused device ids + * SAUCE: hid: ntrig: remove sysfs nodes + * SAUCE: hid: ntrig: Correct logic for quirks + * SAUCE: hid: ntrig: zero-initialize ntrig struct + * SAUCE: hid: ntrig: Setup input filtering manually + * SAUCE: hid: ntrig: New ghost-filtering event logic + + [ Leann Ogasawara ] + + * SAUCE: ndiswrapper: Initialize buffer index and check its value + - LP: #613796 + + [ Manoj Iyer ] + + * SAUCE: Add support for Intellimouse Mode in ALPS touchpad on Dell E2 + series Laptops + - LP: #632884 + + [ Ping Cheng ] + + * SAUCE: Input: wacom - parse the Bamboo device family + + [ Rafi Rubin ] + + * SAUCE: hid: ntrig: identify firmware version (wiggled) + + [ Tim Gardner ] + + * [Config] CONFIG_NL80211_TESTMODE=n + + [ Upstream Kernel Changes ] + + * Revert "input: mt: Add support for the Bamboo Touch trackpad" + * e1000e: initial support for 82579 LOMs + * e1000e: correct MAC-PHY interconnect register offset for 82579 + * (pre-stable) ALSA: hda - Add a new hp-laptop model for Conexant 5066, + tested on HP G60 + - LP: #587388 + * DSS2: Don't power off a panel twice + - LP: #588243 + * mmc: build fix: mmc_pm_notify is only available with CONFIG_PM=y + * Input: i8042 - reset keyboard controller wehen resuming from S2R + - LP: #86820 + * ALSA: hda - Fix beep frequency on IDT 92HD73xx and 92HD71Bxx codecs + - LP: #414795 + * agp/intel: Support the extended physical addressing bits on + Sandybridge. + - LP: #632488 + * drm/i915,intel_agp: Add support for Sandybridge D0 + - LP: #632488 + * (pre-stable) intel_agp,i915: Add more sandybridge graphics device ids + - LP: #632488 + * mmc: omap: fix for bus width which improves SD card's peformance. + + -- Leann Ogasawara Tue, 07 Sep 2010 09:58:52 -0700 + +linux (2.6.35-20.29) maverick; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: i915 KMS -- support disabling KMS for known broken devices + - LP: #563277 + * SAUCE: i915 KMS -- blacklist i830 + - LP: #542208, #563277 + * SAUCE: i915 KMS -- blacklist i845g + - LP: #541492, #563277 + * SAUCE: i915 KMS -- blacklist i855 + - LP: #511001, #541511, #563277 + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_SENSORS_PKGTEMP=m + - LP: #601073 + * ARM: Temporarily disable module check for armel + * rebase to v2.6.35.4 + * [Config] update configs following rebase to v2.6.35.4 + + [ Ricardo Salveti de Araujo ] + + * [Config] Change CONFIG_LEDS_TRIGGER_HEARTBEAT from module to built-in + in Omap + + [ Tim Gardner ] + + * [Config] Added be2net, be2scsi to udebs + - LP: #628776 + + [ Upstream Kernel Changes ] + + * x86, cpu: Package Level Thermal Control, Power Limit Notification + definitions + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: pkgtemp hwmon driver + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: thermal throttling handler + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: power limit + - LP: #601073 + * x86, hwmon: Package Level Thermal/Power: pkgtemp documentation + - LP: #601073 + * hid: 3m: Adjust to sequential MT HID protocol + * hid: 3m: Convert to MT slots + * hid: 3m: Correct touchscreen emulation + * hid: 3m: Adjust major / minor axes to scale + * input: bcm5974: Adjust major / minor to scale + * HID: magicmouse: don't allow hidinput to initialize the device + * HID: magicmouse: simplify multitouch feature request + * HID: magicmouse: simplify touch data bit manipulation + * HID: magicmouse: simplify touch down logic + * HID: magicmouse: remove timestamp logic + * HID: magicmouse: enable Magic Trackpad support + * HID: magicmouse: Adjust major / minor axes to scale + * mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume + - LP: #477106 + * drm/i915: fix VGA plane disable for Ironlake+ + - LP: #602281 + + -- Leann Ogasawara Mon, 30 Aug 2010 08:38:01 -0700 + +linux (2.6.35-19.28) maverick; urgency=low + + [ Leann Ogasawara ] + + * No changes from 2.6.35-19.27. Some armel udebs were accidentally deleted + from the archive and a no-change rebuild was attempted. However, the ABI + did not get bumped and resulted in build failures for 2.6.35-19.27. Fix + up the ABI and re-upload. + + -- Leann Ogasawara Sat, 28 Aug 2010 16:42:27 -0700 + +linux (2.6.35-19.27) maverick; urgency=low + + [ Leann Ogasawara ] + + * No changes from 2.6.35-19.26. Some armel udebs were accidentally deleted + from the archive. + + -- Leann Ogasawara Fri, 27 Aug 2010 08:58:35 -0700 + +linux (2.6.35-19.26) maverick; urgency=low + + [ Upstream Kernel Changes ] + + * ARM: OMAP: Beagle: revision detection + * ARM: OMAP: Beagle: only Cx boards use pin 23 for write protect + * ARM: OMAP: Beagle: no gpio_wp pin connection on xM + + -- Leann Ogasawara Thu, 26 Aug 2010 09:15:09 -0700 + +linux (2.6.35-19.25) maverick; urgency=low + + [ Jarod Wilson ] + + * SAUCE: Bring in staging/lirc from 2.6.36 + - LP: #609234 + * SAUCE: Update ir-core to linuxtv/other which should be merged for + 2.6.36. + - LP: #609234 + * SAUCE: Fix memleaks in imon and mceusb drivers + - LP: #609234 + * SAUCE: Bring in streamzap support from linuxtv/other + - LP: #609234 + + [ Mario Limonciello ] + + * Remove ubuntu/lirc in favor of staging/lirc from 2.6.36 + - LP: #609234 + + [ Mathieu J. Poirier ] + + * SAUCE: ARM: adding i2c eeprom driver to read EDID + - LP: #608279 + + [ Upstream Kernel Changes ] + + * intel_idle: disable module support + - LP: #615265 + * (pre-stable) ALSA: hda - Ensure codec patch files are checked for the + correct codec ID + * (pre-stable) ALSA: hda - Rename iMic to Int Mic on Lenovo NB0763 + - LP: #605101 + * (pre-stable) ALSA: HDA: Use model=auto for LG R510 + - LP: #495134 + * (pre-stable) ALSA: HDA: Add Sony VAIO quirk for ALC269 + - LP: #519066 + * (pre-stable) ALSA: HDA: Fix front mic on Dell Precision M6500 + - LP: #519066 + * input: mt: Initialize slots to unused (rev2) + * input: mt: Add support for the Bamboo Touch trackpad + * hid: Add a hid quirk for input sync override + + -- Leann Ogasawara Mon, 23 Aug 2010 12:42:52 -0700 + +linux (2.6.35-18.24) maverick; urgency=low + + [ Colin Watson ] + + * Pass DEB_MAINT_PARAMS to hook scripts + + [ Leann Ogasawara ] + + * [Config] Add CONFIG_INPUT_UINPUT=y to config enforcer + - LP: #584812 + * rebase to v2.6.35.3 + + [ Upstream Kernel Changes ] + + * (pre-stable) dell-wmi: Add support for eject key on Dell Studio 1555 + - LP: #609234 + * can: add limit for nframes and clean up signed/unsigned variables + - CVE-2010-2959 + * drm: Initialize ioctl struct when no user data is present + - CVE-2010-2803 + * ARM: initial stack protector (-fstack-protector) support + * ARM: stack protector: change the canary value per task + * [ARM] implement arch_randomize_brk() + * [ARM] add address randomization to mmap() + * ARM: fix ASLR of PIE executables + + -- Leann Ogasawara Sun, 22 Aug 2010 19:22:04 -0700 + +linux (2.6.35-17.23) maverick; urgency=low + + [ Jeremy Kerr ] + + * [Config] build-in uinput module + - LP: #584812 + + [ Leann Ogasawara ] + + * Revert "[Config] [FTBS] ia64: Temporarily disable CONFIG_CEPH_FS" + * Revert "[Config] [FTBS] ia64: Temporarily disable gpiolib" + * Revert "[Config] [FTBS] sparc: Temporarily disable + CONFIG_MTD_NAND_DENALI" + * Revert "[Config] [FTBS] sparc: Temporarily disable + CONFIG_MFD_JANZ_CMODIO" + * Revert "[Config] [FTBS] sparc: Temporarily disable + CONFIG_INFINIBAND_QIB" + * [Config] Enable INTEL_IPS + - LP: #601057 + * Remove ia64 support + * [Config] Update portsconfigs after removing ia64 support + * Remove sparc support + * [Config] Update portsconfigs after removing sparc support + + [ Linus Torvalds ] + + * (pre-stable) mm: fix page table unmap for stack guard page properly + + [ Mathieu J. Poirier ] + + * SAUCE: (no-up) ARM: Resetting power_mode to its original value. + - LP: #591941 + + [ Upstream Kernel Changes ] + + * timer: add on-stack deferrable timer interfaces + - LP: #601057 + * x86 platform driver: intelligent power sharing driver + - LP: #601057 + * IPS driver: add GPU busy and turbo checking + - LP: #601057 + * X86: intel_ips, check for kzalloc properly + - LP: #601057 + * ips driver: make it less chatty + - LP: #601057 + + -- Leann Ogasawara Tue, 17 Aug 2010 09:38:08 -0700 + +linux (2.6.35-16.22) maverick; urgency=low + + [ Andy Whitcroft ] + + * debian -- more agressivly clean up after depmod on purge + - LP: #618591 + + [ Henrik Rydberg ] + + * SAUCE: hid: 3m: Simplify touchsreen emulation logic + + [ Leann Ogasawara ] + + * ubuntu: iscsitarget -- version 1.4.20.2 + * ubuntu: rtl8192se -- update to version 0017.0507.2010 + * rebase to v2.6.35.2 + * [Config] update configs following rebase to v2.6.35.2 + * [Config] update ports configs following rebase to v2.6.35.2 + + [ Luke Yelavich ] + + * [Config] Enable new firewire stack on powerpc + + [ Mathieu J. Poirier ] + + * SAUCE: (drop after 2.6.35) ARM: Using gpmc function to init nand flash. + - LP: #608266 + + -- Leann Ogasawara Thu, 12 Aug 2010 09:58:01 -0700 + +linux (2.6.35-15.21) maverick; urgency=low + + [ Luke Yelavich ] + + * [Config] CONFIG_SND_USB_UA101=m for all architectures + + [ Upstream Kernel Changes ] + + * Input: introduce MT event slots + * Input: document the MT event slot protocol + * (pre-stable) sched: Revert nohz_ratelimit() for now + * (pre-stable) drm/radeon/kms: add missing copy from user + - LP: #606081 + + [ Leann Ogasawara ] + + * rebase to v2.6.35.1 + + -- Leann Ogasawara Mon, 09 Aug 2010 09:24:04 -0700 + +linux (2.6.35-14.20) maverick; urgency=low + + [ Andy Whitcroft ] + + * update Vcs-Git to point to maverick repo + * debian -- include the debian packaging in the -source package + - LP: #608674 + * select debian source format 1.0 + * add support for building selected stages of kernel + - LP: #603087 + * cleanup conditional dependancy handling + - LP: #603087 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Handle missing NID 0x1b on ALC259 codec + - LP: #582199, #586418, #588031 + * ALSA: hda - Handle pin NID 0x1a on ALC259/269 + - LP: #582199, #586418, #588031 + * sched: Revert nohz_ratelimit() for now + + -- Leann Ogasawara Tue, 03 Aug 2010 08:46:47 -0700 + +linux (2.6.35-14.19) maverick; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.35 + + -- Leann Ogasawara Sun, 01 Aug 2010 10:35:56 -0700 + +linux (2.6.35-13.18) maverick; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: (no-up) Modularize vesafb -- fix initialisation + * SAUCE: add tracing for user initiated readahead requests + * SAUCE: vt -- maintain bootloader screen mode and content until vt + switch + * SAUCE: vt -- allow grub to request automatic vt_handoff + * SAUCE: fbcon -- fix race between open and removal of framebuffers + * SAUCE: drm -- stop early access to drm devices + + [ Bryan Wu ] + + * CONFIG: compile in OTG driver and Transceiver driver + - LP: #566645 + * remove OTG modules from modules list file + + [ John Johansen ] + + * SAUCE: AppArmor: -- sync to AppArmor mainline 2010-07-27 + - LP: #581525, #599450 + * SAUCE: AppArmor: -- sync to AppArmor mainline 2010-07-29 + * SAUCE: AppArmor 2.4 compatibility patch + * SAUCE: AppArmor: Allow dfa backward compatibility with broken userspace + * SAUCE: fix pv-ops for legacy Xen + * SAUCE: blkfront: default to sd devices + * [Config] Build in drivers required for Xen pv-ops + + [ Leann Ogasawara ] + + * Revert "[Upstream] i915: Use the correct mask to detect i830 aperture + size." + + [ Lee Jones ] + + * SAUCE: ARM: OMAP: Add macros for comparing silicon revision + - LP: #608095 + * SAUCE: OMAP: DSS2: check for both cpu type and revision, rather than + just revision + - LP: #608095 + * SAUCE: OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX + - LP: #608095 + * SAUCE: ARM: OMAP: Beagle: support twl gpio differences on xM + - LP: #608095 + + [ Upstream Kernel Changes ] + + * agp/intel: Use the correct mask to detect i830 aperture size. + - LP: #597075 + + -- Leann Ogasawara Fri, 30 Jul 2010 15:46:59 -0700 + +linux (2.6.35-12.17) maverick; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc6 + * [Config] update configs following rebase to v2.6.35-rc6 + * [Config] update ports configs following rebase to v2.6.35-rc6 + * SAUCE: [FTBS] armel: define KEY_F10 and KEYF11 + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc6 + + -- Leann Ogasawara Fri, 23 Jul 2010 16:16:38 +0200 + +linux (2.6.35-11.16) maverick; urgency=low + + [ Leann Ogasawara ] + + * Bump ABI for new compiler update + + -- Leann Ogasawara Fri, 23 Jul 2010 10:24:58 +0200 + +linux (2.6.35-10.15) maverick; urgency=low + + [ Leann Ogasawara ] + + * Revert "SAUCE: ensure vga16fb loads if no other driver claims the VGA + device" + * [Config] Enable CONFIG_M686=y + - LP: #592495 + + [ Upstream Kernel Changes ] + + * tracing: Add alignment to syscall metadata declarations + + -- Leann Ogasawara Tue, 20 Jul 2010 18:18:49 +0200 + +linux (2.6.35-9.14) maverick; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- add BOM and automated update script + * ubuntu: AUFS -- update to b37c575759dc4535ccc03241c584ad5fe69e3b25 + + [ John Johansen ] + + * [Config] Enable DRBD as a module + + [ Kees Cook ] + + * SAUCE: Yama: verify inode is symlink to avoid bind mounts + - LP: #604407 + + [ Leann Ogasawara ] + + * [Config] Disable CONFIG_DRM_VMWGFX (staging driver) + - LP: #606139 + * [Config] ports: Disable CONFIG_DRM_VMWGFX (staging driver) + - LP: #606139 + * [Config] Enable CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y + * [Config] ports: Enable CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y + + [ Lee Jones ] + + * Stop ARM boards crashing when CUPS is loaded + - LP: #601226 + + [ Upstream Kernel Changes ] + + * perf probe: Support tracing an entry of array + * perf probe: Support static and global variables + + -- Leann Ogasawara Fri, 16 Jul 2010 14:38:17 -0700 + +linux (2.6.35-8.13) maverick; urgency=low + + [ Kees Cook ] + + * SAUCE: Yama: check PTRACE using thread group leader + * SAUCE: Yama: search for PTRACE exceptions via thread group leader + - LP: #603716 + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc5 + * [Config] update configs following rebase to v2.6.35-rc5 + + [ Nicolas Pitre ] + + * SAUCE: make ndiswrapper available on X86 only + + [ Tim Gardner ] + + * [Config] Added ums-cypress to udeb + - LP: #576066 + * SAUCE: fix build error with CONFIG_BLK_DEV_INITRD=n + * [Config] CONFIG_NDISWRAPPER=m across all configs + + [ Upstream Kernel Changes ] + + * HID: magicmouse: report last touch up + * rebase to 2.6.35-rc5 + + -- Leann Ogasawara Tue, 13 Jul 2010 18:57:59 -0700 + +linux (2.6.35-7.12) maverick; urgency=low + + [ Tim Gardner ] + + * [Upstream] i915: Use the correct mask to detect i830 aperture size. + - LP: #597075 + + [ Upstream Kernel Changes ] + + * (drop after 2.6.35) drm/radeon/kms: add ioport register access + (squashed) + + -- Tim Gardner Thu, 08 Jul 2010 09:53:13 -0600 + +linux (2.6.35-7.11) maverick; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_X86_MRST=n + + [ Upstream Kernel Changes ] + + * (drop after 2.6.35-rc5) writeback: remove writeback_inodes_wbc + * (drop after 2.6.35-rc5) writeback: split writeback_inodes_wb + * (drop after 2.6.35-rc5) writeback: simplify the write back thread queue + + -- Tim Gardner Tue, 06 Jul 2010 18:39:08 -0600 + +linux (2.6.35-7.10) maverick; urgency=low + + [ Kees Cook ] + + * SAUCE: security: create task_free security callback + * SAUCE: Yama: add PTRACE exception tracking and interface + * SAUCE: security: unconditionally chain to Yama LSM + * Revert "SAUCE: ptrace: restrict ptrace scope to children" + * Revert "SAUCE: fs: block hardlinks to non-accessible sources" + * Revert "SAUCE: fs: block cross-uid sticky symlinks" + * [Upstream] security: Yama LSM + * [Config] Enable CONFIG_SECURITY_YAMA=y + + [ Tim Gardner ] + + * [Config] updateconfigs/updateportsconfigs after rebase to 2.6.35-rc4 + + [ Upstream Kernel Changes ] + + * rebase to 2.6.35-rc4 + + -- Leann Ogasawara Thu, 01 Jul 2010 08:55:57 -0700 + +linux (2.6.35-6.9) maverick; urgency=low + + [ Tim Gardner ] + + * [Upstream] direct_splice_actor() should not use pos in sd + - LP: #588861 + + -- Leann Ogasawara Mon, 28 Jun 2010 12:35:49 -0700 + +linux (2.6.35-6.8) maverick; urgency=low + + [ Mathieu J. Poirier ] + + * ARM: Adding regulator supply for vdds_sdi. + - LP: #597904 + + -- Leann Ogasawara Sun, 27 Jun 2010 16:34:43 -0700 + +linux (2.6.35-6.7) maverick; urgency=low + + [ Alberto Milone ] + + * [Upstream] Add support for the ATIF ACPI method to the radeon driver + + [ Chase Douglas ] + + * [Upstream] HID: magicmouse: scroll on entire surface, not just middle + of mouse + * [Upstream] HID: magicmouse: disable and add module param for scroll + acceleration + * [Upstream] HID: magicmouse: properly account for scroll movement in + state + * [Upstream] HID: magicmouse: add param for scroll speed + * [Upstream] HID: magicmouse: enable horizontal scrolling + + [ Henrik Rydberg ] + + * [Upstream] Input: evdev - convert to dynamic event buffer + * [Upstream] Input: evdev - use driver hint to compute size of event + buffer + * [Upstream] Input: bcm5974 - set the average number of events per MT + event packet + * [Upstream] Input: hid-input - use a larger event buffer for MT devices + * [Upstream] Input: evdev - never leave the client buffer empty after + write + + [ John Johansen ] + + * SAUCE: AppArmor: -- mainline 2010-06-23 + * SAUCE: AppArmor 2.4 compatibility patch + * SAUCE: fs: block hardlinks to non-accessible sources AppArmor portion + + [ Leann Ogasawara ] + + * [Config] Enable CONFIG_INTR_REMAP=y + - LP: #597091 + * [Config] Enable CONFIG_X86_X2APIC + - LP: #597091 + + [ Mathieu J. Poirier ] + + * [Config] ARM: Turning off CONFIG_CPU_IDLE on omap + - LP: #594382 + + -- Leann Ogasawara Thu, 24 Jun 2010 12:19:48 -0700 + +linux (2.6.35-5.6) maverick; urgency=low + + [ Amit Kucheria ] + + * [Config] update omap flavour description + + [ Andy Whitcroft ] + + * update to ubuntu-debian:508b7aa34b578c0d1e51bfb571f2bfb824dc65ac + - LP: #570500, #576274 + * SAUCE: add option to hand off all kernel parameters to init + - LP: #586386 + * [Config] enable passing all kernel command line to init + - LP: #586386 + * [Config] disable CONFIG_VMI + - LP: #537601 + * [Config] enable CONFIG_IPV6_SIT_6RD + - LP: #591869 + * [Config] enable CONFIG_VMWARE_BALOON as module + - LP: #592039 + + [ Leann Ogasawara ] + + * Revert "SAUCE: pm: Config option to disable handling of console during + suspend/resume" + - LP: #594885 + * [Config] Remove CONFIG_PM_DISABLE_CONSOLE + * [Config] ports: enable passing all kernel command line to init + - LP: #586386 + * [Config] Enable CONFIG_FB_VESA=y for x86 + * [Config] Add CONFIG_FRAMEBUFFER_CONSOLE=y to config enforcer + * [Config] Add CONFIG_FB_VESA=y for x86 to config enforcer + * [Config] Enable CONFIG_TASK_DELAY_ACCT=y + - LP: #493156 + + [ Mathieu Poirier ] + + * ARM: Adding MosChip MCS7830 to nic-usb + - LP: #584920 + + [ Upstream Kernel Changes ] + + * Revert "[Upstream] docbook: need xmldoclinks for all doc types" + * docbook: need xmldoclinks for all doc types + * perf probe: Add kernel source path option + + -- Leann Ogasawara Thu, 17 Jun 2010 08:05:29 -0700 + +linux (2.6.35-4.5) maverick; urgency=low + + [ Leann Ogasawara ] + + * Revert "[Upstream] (evdev) Use driver hint to compute the evdev buffer + size (rev2)" + * Revert "[Upstream] (evdev) Convert to dynamic event buffer (rev4)" + * Revert "[Upstream] (evdev) Use multi-reader buffer to save space + (rev4)" + * Revert "SAUCE: drivers: Remove some duplicate device entries in various + modules" + * [Upstream] USB: option: Remove duplicate AMOI_VENDOR_ID + * [Upstream] Revert "USB: Adding support for HTC Smartphones to ipaq" + * [Upstream] p54usb: Comment out duplicate Medion MD40900 device id + + [ Tim Gardner ] + + * [Config] CONFIG_NFS_FSCACHE=y + - LP: #440522 + * [Config] CONFIG_FSCACHE_STATS=y, CONFIG_FSCACHE_HISTOGRAM=y + - LP: #440522 + + -- Leann Ogasawara Wed, 16 Jun 2010 08:43:07 -0700 + +linux (2.6.35-3.4) maverick; urgency=low + + [ Andy Whitcroft ] + + * debian -- ensure the version number is clean + + [ Henrik Rydberg ] + + * [Upstream] Introduce MT event slots (rev 5) + * [Upstream] Document the MT event slot protocol (rev5) + * [Upstream] (evdev) Use multi-reader buffer to save space (rev4) + * [Upstream] (evdev) Convert to dynamic event buffer (rev4) + * [Upstream] (evdev) Use driver hint to compute the evdev buffer size + (rev2) + + [ Leann Ogasawara ] + + * Revert "SAUCE: Add MODULE_ALIAS for Dell WMI module" + * Revert "SAUCE: hostap: send events on data interface as well as master + interface" + * Revert "Fix webcam having USB ID 0ac8:303b" + * Revert "SAUCE: toshiba_acpi -- pull in current -dev version of driver" + * rebase to v2.6.35-rc3 + + [ Maxim Levitsky ] + + * [Config] Enable new Smartmedia/xD translation layer + - LP: #202490 + + [ Upstream Kernel Changes ] + + * net: fix deliver_no_wcard regression on loopback device + + [ Upstream changes ] + + * rebased to v2.6.35-rc3 + + -- Leann Ogasawara Thu, 10 Jun 2010 16:15:22 -0700 + +linux (2.6.35-2.3) maverick; urgency=low + + [ Bryan Wu ] + + * CONFIG: enforce -- make sure we disable CONFIG_LOCALVERSION_AUTO + + [ Leann Ogasawara ] + + * [Config] armel: Enable CONFIG_BNX2=m + * [Config] ports: Enable CONFIG_BNX2X=m + * SAUCE: armel: define get_dma_ops to fix FTBS + + [ Tim Gardner ] + + * [Upstream] net: Print num_rx_queues imbalance warning only when there + are allocated queues + - LP: #591416 + + -- Leann Ogasawara Wed, 09 Jun 2010 08:27:41 -0700 + +linux (2.6.35-2.2) maverick; urgency=low + + [ Andy Whitcroft ] + + * [Config] d-i: make armel configuration versatile flavour specific + - LP: #588805 + * [Config] d-i: enable .udebs for omap flavour + - LP: #588805 + + [ Kees Cook ] + + * ptrace: limit scope to attach only (allow read) + - LP: #589656 + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc2 + * [Config] update configs following rebase to v2.6.35-rc2 + * [Config] update port configs following rebase to v2.6.35-rc2 + + [ Lee Jones ] + + * Enable perf to be more helpful when perf_ does not exist. + - LP: #570500 + * 'fdr editconfig' modification. Easily skip over unwanted menuconfigs. + + [ Tim Gardner ] + + * [Config] Update bnx2 udeb firmware files + - LP: #589304 + + [ Upstream changes ] + + * rebased to v2.6.35-rc2 + + -- Leann Ogasawara Mon, 07 Jun 2010 09:45:04 -0700 + +linux (2.6.35-1.1) maverick; urgency=low + + [ Andy Whitcroft ] + + * ubuntu: AUFS -- update to standalone 2.6.35-rcN as at 20100601 + - LP: #587888 + * ubuntu: AUFS -- track changes to the arguements to fop fsync() + + [ Leann Ogasawara ] + + * rebase to v2.6.35-rc1 + * [Config] update configs following rebase to v2.6.35-rc1 + * [Config] update port configs following rebase to v2.6.35-rc1 + * SAUCE: lirc: rename usb_buffer_alloc() and usb_buffer_free() + * SAUCE: ndiswrapper: rename usb_buffer_alloc() and usb_buffer_free() + * SAUCE: ndiswrapper: convert multicast list to list_head + * [Config] [FTBS] armel: Temporarily disable CONFIG_GPIO_JANZ_TTL + * [Config] [FTBS] ia64: Temporarily disable gpiolib + * [Config] [FTBS] ia64: Temporarily disable CONFIG_CEPH_FS + * [Config] [FTBS] sparc: Temporarily disable CONFIG_INFINIBAND_QIB + * [Config] [FTBS] sparc: Temporarily disable CONFIG_MFD_JANZ_CMODIO + * [Config] [FTBS] armel: Temporarily disable CONFIG_MFD_JANZ_CMODIO + * [Config] [FTBS] armel: Temporarily disable CONFIG_DT3155 + * [Config] [FTBS] sparc: Temporarily disable CONFIG_MTD_NAND_DENALI + * [Config] [FTBS] armel: Temporarily disable bnx2 + * [Config] [FTBS] armel: Temporarily disable CONFIG_SERIAL_UARTLITE + * SAUCE: [FTBS] armel: Don't include asm/agp.h for ttm + * SAUCE: [FTBS] armel: include linux/dma-mapping.h + * SAUCE: [FTBS] armel: replace omap_set_gpio_debounce with + gpio_set_debounce + + [ Upstream Kernel Changes ] + + * of/usb: fix build error due to of_node pointer move + * n2_crypto: Fix build after of_device/of_platform_driver changes. + * powerpc/fsl-booke: fix the case where we are not in the first page + * powerpc/fsl-booke: Move the entry setup code into a seperate file + * powerpc/kexec: Add support for FSL-BookE + * greth: Fix build after OF device conversions. + + [ Upstream changes ] + + * rebased to v2.6.35-rc1 + + -- Leann Ogasawara Fri, 04 Jun 2010 23:01:52 -0700 + +linux (2.6.35-1.0) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * Null entry. + + -- Leann Ogasawara Wed, 02 Jun 2010 15:17:41 -0700 + +linux (2.6.34-5.14) maverick; urgency=low + + [ Tim Gardner ] + + * [Config] Added module inclusion support + * [Config] Added virtual flavour module inclusion list and d-i package + definitions + + -- Leann Ogasawara Wed, 02 Jun 2010 12:58:14 -0700 + +linux (2.6.34-5.13) maverick; urgency=low + + [ Andy Whitcroft ] + + * Revert "ubuntu: AUFS -- aufs2 20091209" + * Revert "ubuntu: AUFS -- export various core functions + (aufs2-standalone.patch)" + * Revert "ubuntu: AUFS -- export various core functions + (aufs2-base.patch)" + * ubuntu: AUFS -- aufs2 base patch for linux-2.6.34 + - LP: #587888 + * ubuntu: AUFS -- aufs2 standalone patch for linux-2.6.34 + - LP: #587888 + * ubuntu: AUFS -- update to standalone 2.6.34 as at 20100601 + - LP: #587888 + * [Config] AUFS -- enable aufs options + - LP: #587888 + + -- Leann Ogasawara Tue, 01 Jun 2010 08:56:43 -0700 + +linux (2.6.34-5.12) maverick; urgency=low + + [ Andy Whitcroft ] + + * enforce -- ensure SYSFS compatibility is disabled + + [ Chase Douglas ] + + * build with libdw-dev for perf probe symbol support + * maverick ftrace configuration changes + + [ Kees Cook ] + + * Revert "SAUCE: x86: brk away from exec rand area" + * Revert "SAUCE: [um] Don't use nx_enabled under UML" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: x86: implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: x86: more tightly confine cs-limit nx-emulation to ia32 only + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + * SAUCE: ptrace: restrict ptrace scope to children + + [ Leann Ogasawara ] + + * Add new omap flavour to getabis + * [Config] Enable CONFIG_FRAMEBUFFER_CONSOLE=y for all archs + - LP: #585490 + * build/modules: Temorarily add ignore.modules + * ubuntu: iscsitarget -- version 1.4.20.1 + + [ Loïc Minier ] + + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + + -- Leann Ogasawara Fri, 28 May 2010 08:27:17 -0700 + +linux (2.6.34-4.11) maverick; urgency=low + + [ Amit Kucheria ] + + * SAUCE: omap: remove calls to usb_nop_xceiv_register from board files + * [Config] Add support for OMAP-mainline flavour + + [ Andy Whitcroft ] + + * SAUCE: powerpc: fix compile error when ptrace.h is included from + userspace + - LP: #583733 + + [ Chase Douglas ] + + * Revert "SAUCE: Don't register vga16fb framebuffer if other framebuffers + are present" + * Revert "SAUCE: Disable function tracing after hitting __schedule_bug" + * Revert "SAUCE: drm/i915: don't change DRM configuration when releasing + load detect pipe" + + [ Kees Cook ] + + * SAUCE: fs: block cross-uid sticky symlinks + * SAUCE: fs: block hardlinks to non-accessible sources + + [ Koen Kooi ] + + * SAUCE: board-omap3-beagle: add DSS2 support + + [ Leann Ogasawara ] + + * Revert "staging/go7007 -- disable" + * Revert "[Config] staging/winbond -- disable" + * Revert "Disable 4MB page tables for Atom, work around errata AAE44" + * Revert "SAUCE: sync before umount to reduce time taken by ext4 umount" + * Revert "SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit + controller" + * Revert "SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT" + * Revert "SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros" + * Revert "SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps" + * Revert "SAUCE: r8169: disable TSO by default for RTL8111/8168B + chipsets." + * Revert "[Upstream] b43: Declare all possible firmware files." + * Revert "add Breaks: against hardy lvm2" + * Revert "SAUCE: Guest OS does not recognize a lun with non zero target + id on Vmware ESX Server" + * Revert "SAUCE: Catch nonsense keycodes and silently ignore" + * [Config] Enable CONFIG_ECRYPT_FS=y for ports + * [Config] Enable CONFIG_USB=y for armel and sparc + * [Config] Enable CONFIG_SCSI=y for ia64 and sparc + * [Config] Enable CONFIG_RFKILL=y for ports + * [Config] Enable CONFIG_ATH9K_DEBUGFS=y + * [Config] Enable CONFIG_IWMC3200TOP_DEBUGFS=y + * [Config] Enable CONFIG_RCU_FAST_NO_HZ=y + * [Config] Enable CONFIG_IWLWIFI_DEVICE_TRACING=y + * [Config] Enable CONFIG_LIBERTAS_MESH=y + * [Config] Enable CONFIG_MMC_RICOH_MMC=y + * [Config] CONFIG_RT2800USB_UNKNOWN=y + * [Config] Enable CONFIG_VGA_SWITCHEROO=y + * [Config] Enable CONFIG_CEPH_FS=m + * [Config] Enable CONFIG_CRYPTO_PCRYPT=m + * [Config] Enable CONFIG_EEEPC_WMI=m + * [Config] Enable CONFIG_RT2800PCI=m + * [Config] Enable CONFIG_SCSI_HPSA=m + * [Config] Enable CONFIG_VHOST_NET=m + * [Config] Disable CONFIG_SND_HDA_INPUT_BEEP_MODE by default + - LP: #582350 + * [Config] Disable CONFIG_SOUND_OSS* and CONFIG_SND_*OSS + - LP: #579300 + * [Config] Enable CONFIG_PCIEASPM=y + - LP: #333990 + * [Config] updateconfigs for OMAP flavour + + [ Loïc Minier ] + + * Enable perf tools on armel + + [ Tim Gardner ] + + * SAUCE: Updated ndiswrapper to 1.56 + - LP: #582555 + * [Config] Added virtual flavour + * [Config] Remove support for sub-flavours + * [Config] Removed amd64 preempt flavour + * [Config] updateconfigs, updateportsconfigs after flavour munging + + -- Leann Ogasawara Tue, 25 May 2010 09:34:55 -0700 + +linux (2.6.34-3.10) maverick; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34 + + [ Upstream changes ] + + * rebased to v2.6.34 + + -- Leann Ogasawara Tue, 18 May 2010 17:35:35 -0700 + +linux (2.6.34-2.9) maverick; urgency=low + + [ Leann Ogasawara ] + + * [Config] [FTBS] Disable comedi for armel + + -- Leann Ogasawara Thu, 13 May 2010 23:20:55 +0200 + +linux (2.6.34-2.8) maverick; urgency=low + + [ Leann Ogasawara ] + + * Drop lpia + * [Config] [FTBS] disable KVM + * [Config] [FTBS] disable ipr for armel + + -- Leann Ogasawara Thu, 13 May 2010 16:07:52 +0200 + +linux (2.6.34-2.7) maverick; urgency=low + + [ Leann Ogasawara ] + + * [Config] disable CONFIG_SCSI_IPR on powerpc + * [Config] Remove 386 flavour per UDS discussion + + -- Leann Ogasawara Wed, 12 May 2010 18:26:43 +0200 + +linux (2.6.34-1.6) maverick; urgency=low + + [ Chase Douglas ] + + * enforce CONFIG_TMPFS_POSIX_ACL=y + - LP: #575940 + * don't force module dependency checking + - LP: #577029 + + [ Kees Cook ] + + * SAUCE: mmap_min_addr check CAP_SYS_RAWIO only for write + - LP: #568844 + + [ Leann Ogasawara ] + + * Revert "SAUCE: ata: blacklist FUJITSU MHW2160BH PL" + * rebase to v2.6.34-rc7 + * [Config] update configs following rebase to v2.6.34-rc7 + * [Config] update port configs following rebase to v2.6.34-rc7 + * Add btrfs to the udebs + + [ Tim Gardner ] + + * [Config] Add atl1c to nic-modules udeb + - LP: #557130 + + [ Upstream changes ] + + * rebased to v2.6.34-rc7 + + -- Leann Ogasawara Tue, 11 May 2010 11:29:08 +0200 + +linux (2.6.34-1.5) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc6 + * [Config] update configs following rebase to v2.6.34-rc6 + * [Config] update port configs following rebase to v2.6.34-rc6 + + [ Upstream changes ] + + * rebased to v2.6.34-rc6 + + -- Leann Ogasawara Fri, 30 Apr 2010 15:54:05 +0100 + +linux (2.6.34-1.4) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc5 + * [Config] update ports configs following rebase to v2.6.34-rc5 + + [ Upstream changes ] + + * rebased to v2.6.34-rc5 + + -- Leann Ogasawara Thu, 22 Apr 2010 15:36:12 -0700 + +linux (2.6.34-1.3) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc4 + * [Config] update configs following rebase to v2.6.34-rc4 + * [Config] update port configs following rebase to v2.6.34-rc4 + * ubuntu: dm-raid4-5 -- update to compile with 2.6.34-rc4 + + [ Upstream changes ] + + * rebased to v2.6.34-rc4 + + -- Leann Ogasawara Tue, 13 Apr 2010 18:33:44 -0700 + +linux (2.6.34-1.2) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * Temorarily disable building linux-doc + * rebase to v2.6.34-rc3 + * [Config] update configs following rebase to v2.6.34-rc3 + * [Config] update port configs following rebase to v2.6.34-rc3 + + [ Upstream changes ] + + * rebased to v2.6.34-rc3 + + -- Leann Ogasawara Tue, 30 Mar 2010 16:55:44 -0700 + +linux (2.6.34-1.1) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * rebase to v2.6.34-rc2 + * ubuntu: dm-raid4-5 -- update to compile with 2.6.34-rc2 + * [Config] update port configs following rebase to v2.6.34-rc2 + * [Config] update configs following rebase to v2.6.34-rc2 + + [ Upstream changes ] + + * rebased to v2.6.34-rc2 + + -- Leann Ogasawara Wed, 24 Mar 2010 23:00:39 -0700 + +linux (2.6.33-1.1) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * ubuntu: dm-raid4-5 -- update to compile with 2.6.33 + * ubuntu: lirc -- drop explicit include of linux/autoconf.h + * ubuntu: lirc -- pass kfifo to kfifo_alloc and move spinlock + * ubuntu: lirc -- rename kfifo_put and kfifo_get + * ubuntu: iscsitarget -- rename daddr inet_sock field + * rebased to v2.6.33 + * [Config] update configs following rebase to v2.6.33 + * [Config] update ports configs following rebase to v2.6.33 + + [ Upstream changes ] + + * rebased to v2.6.33 + + -- Leann Ogasawara Tue, 23 Mar 2010 03:55:46 -0700 + +linux (2.6.33-0.0) UNRELEASED; urgency=low + + [ Leann Ogasawara ] + + * Null entry. + + -- Leann Ogasawara Wed, 17 Mar 2010 07:48:56 -0700 + +linux (2.6.32-16.25) lucid; urgency=low + + [ Andy Whitcroft ] + + * linux-tools -- move to Suggests: with explicit seeding + - LP: #534635 + + [ Tim Gardner ] + + * [Config] CONFIG_HID=m + + [ Upstream Kernel Changes ] + + * (pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue() + * KVM: introduce kvm_vcpu_on_spin + * KVM: VMX: Add support for Pause-Loop Exiting + + -- Andy Whitcroft Tue, 09 Mar 2010 14:13:51 +0000 + +linux (2.6.32-16.24) lucid; urgency=low + + [ Andy Whitcroft ] + + * armel -- perf userspace does not support arm + * ia64 -- libelf-dev/binutils-dev to not provide necessary libraries + + -- Andy Whitcroft Sat, 06 Mar 2010 11:42:12 +0000 + +linux (2.6.32-16.23) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: PM report driver and device suspend/resume times -- move config + * update to standards version 3.8.4.0 + * printenv -- expose all of the package selectors + * source package -- cleanup source content control + * doc package -- ensure we do build package content on buildd + * lintian -- correct the address in the debian/copyright + * lintian -- update debhelper package version dependancy + * lintian -- fix ghostscript dependancy + * lintian -- add required misc:Depends + * lintian -- move our debhelper compat level to debian/compat + * perf -- build the kernel carried tools + * perf -- add linux-tools carrying the version switches and manuals + * SAUCE: fix up Kconfig for staging drivers + * [Config] enable NOUVEAU etc following drm backport + * update DRM to mainline v2.6.33 + * [Config] Remove AppArmor config options that no longer exist (ports) + * [Config] updateportsconfigs following drm update + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-03-04 + * SAUCE: AppArmor: Reintroduce AppArmor 2.4 compatibility + * SAUCE: AppArmor: replace strim with strstrip for 2.6.32 kernels + * [Config] Remove AppArmor config options that no longer exist + + [ Manoj Iyer ] + + * ubuntu: rtl8192se -- version 2010-0115,0014 + - LP: #530275 + * [Config] added CONFIG_RTL8192SE module. + - LP: #530275 + + [ Tim Gardner ] + + * [Config] Added vmw_pvscsi to d-i/scsi-modules + - LP: #531017 + * [Upstream] netfilter: xt_recent: Add an entry reaper + + [ Upstream Kernel Changes ] + + * Revert "KVM: x86 emulator: Check CPL level during privilege instruction + emulation" + * Revert "KVM: x86 emulator: Fix popf emulation" + * Revert "KVM: x86 emulator: Check IOPL level during io instruction + emulation" + * Revert "KVM: x86 emulator: Add Virtual-8086 mode of emulation" + * Revert "KVM: fix memory access during x86 emulation." + * Add vlan (8021.Q) module package for d-i. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + * [Upstream] docbook: need xmldoclinks for all doc types + * x86: set_personality_ia32() misses force_personality32 + * lib: Introduce generic list_sort function + * drm/nv50: Implement ctxprog/state generation. + * drm/nv50: Remove redundant/incorrect ctxvals initialisation. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + + -- Andy Whitcroft Fri, 05 Mar 2010 15:40:38 +0000 + +linux (2.6.32-15.22) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT" + * Revert "SAUCE: PM report driver and device suspend/resume times." + * [Config] set CONFIG_SR_REPORT_TIME_LIMIT + + [ Manoj Iyer ] + + * SAUCE: PM report driver and device suspend/resume times. + + -- Andy Whitcroft Tue, 02 Mar 2010 01:35:37 +0000 + +linux (2.6.32-15.21) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/i915: Increase fb alignment to 64k" + * Revert "[Config] lenovo-sl-laptop -- enable" + * Revert "ubuntu: lenovo-sl-laptop -- git tip (b19a08f81f)" + * armel -- cramfs module will no longer be built + * d-i -- make all modules optional + * rename the debug packages to match archive standard + - LP: #527837 + * lenovo-sl-laptop is no longer built + + [ Colin Ian King ] + + * Disable 4MB page tables for Atom, work around errata AAE44 + - LP: #523112 + + [ Colin Watson ] + + * ubuntu: dm-raid4-5: Depend on XOR_BLOCKS + * ubuntu: fsam7400: Depend on CHECK_SIGNATURE + + [ Jesse Barnes ] + + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + + [ Loïc Minier ] + + * [Config] armel Update versatile initrd configs + - LP: #524893 + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + + [ Manoj Iyer ] + + * [Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT + + [ Mario Limonciello ] + + * SAUCE: v3 - Add Dell Business Class Netbook LED driver + + [ Rafael J. Wysocki ] + + * SAUCE: PM report driver and device suspend/resume times. + + [ Surbhi Palande ] + + * Revert "[Upstream] e1000e: enhance frame fragment detection" + - CVE-2009-4538 + * Revert "[Upstream] e1000: enhance frame fragment detection" + - CVE-2009-4536 + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_LEDS_DELL_NETBOOKS=m + * SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow + * SAUCE: (pre-stable) netfilter: xt_recent: fix false match + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) eCryptfs: Add getattr function" + * Fix potential crash with sys_move_pages + * futex_lock_pi() key refcnt fix + * futex: Handle user space corruption gracefully + * futex: Handle futex value corruption gracefully + * Fix race in tty_fasync() properly + * hwmon: (w83781d) Request I/O ports individually for probing + * hwmon: (lm78) Request I/O ports individually for probing + * hwmon: (adt7462) Wrong ADT7462_VOLT_COUNT + * ALSA: ctxfi - fix PTP address initialization + * drm/i915: disable hotplug detect before Ironlake CRT detect + * drm/i915: enable self-refresh on 965 + * drm/i915: Disable SR when more than one pipe is enabled + * drm/i915: Fix DDC on some systems by clearing BIOS GMBUS setup. + * drm/i915: Add HP nx9020/SamsungSX20S to ACPI LID quirk list + * drm/i915: Fix the incorrect DMI string for Samsung SX20S laptop + * drm/i915: Add MALATA PC-81005 to ACPI LID quirk list + * usb: r8a66597-hcd: Flush the D-cache for the pipe-in transfer buffers. + * i2c-tiny-usb: Fix on big-endian systems + * drm/i915: handle FBC and self-refresh better + * drm/i915: Increase fb alignment to 64k + * drm/i915: Update write_domains on active list after flush. + * regulator: Fix display of null constraints for regulators + * ALSA: hda-intel: Avoid divide by zero crash + * CPUFREQ: Fix use after free of struct powernow_k8_data + * freeze_bdev: don't deactivate successfully frozen MS_RDONLY sb + * cciss: Make cciss_seq_show handle holes in the h->drv[] array + * ioat: fix infinite timeout checking in ioat2_quiesce + * resource: add helpers for fetching rlimits + * fs/exec.c: restrict initial stack space expansion to rlimit + * cifs: fix length calculation for converted unicode readdir names + * NFS: Fix a reference leak in nfs_wb_cancel_page() + * NFS: Try to commit unstable writes in nfs_release_page() + * NFSv4: Don't allow posix locking against servers that don't support it + * NFSv4: Ensure that the NFSv4 locking can recover from stateid errors + * NFS: Fix an Oops when truncating a file + * NFS: Fix a umount race + * NFS: Fix a bug in nfs_fscache_release_page() + * NFS: Fix the mapping of the NFSERR_SERVERFAULT error + * md: fix 'degraded' calculation when starting a reshape. + * V4L/DVB: dvb-core: fix initialization of feeds list in demux filter + * Export the symbol of getboottime and mmonotonic_to_bootbased + * kvmclock: count total_sleep_time when updating guest clock + * KVM: PIT: control word is write-only + * tpm_infineon: fix suspend/resume handler for pnp_driver + * amd64_edac: Do not falsely trigger kerneloops + * netfilter: nf_conntrack: fix memory corruption with multiple namespaces + * netfilter: nf_conntrack: per netns nf_conntrack_cachep + * netfilter: nf_conntrack: restrict runtime expect hashsize modifications + * netfilter: xtables: compat out of scope fix + * netfilter: nf_conntrack: fix hash resizing with namespaces + * drm/i915: remove full registers dump debug + * drm/i915: add i915_lp_ring_sync helper + * drm/i915: Don't wait interruptible for possible plane buffer flush + * dasd: remove strings from s390dbf + * crypto: padlock-sha - Add import/export support + * wmi: Free the allocated acpi objects through wmi_get_event_data + * dell-wmi, hp-wmi, msi-wmi: check wmi_get_event_data() return value + * /dev/mem: introduce size_inside_page() + * devmem: check vmalloc address on kmem read/write + * devmem: fix kmem write bug on memory holes + * SCSI: mptfusion : mptscsih_abort return value should be SUCCESS instead + of value 0. + * sh: Couple kernel and user write page perm bits for CONFIG_X2TLB + * ALSA: hda - use WARN_ON_ONCE() for zero-division detection + * dst: call cond_resched() in dst_gc_task() + * ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support + * befs: fix leak + * rtc-fm3130: add missing braces + * Call flush_dcache_page after PIO data transfers in libata-sff.c + * ahci: add Acer G725 to broken suspend list + * pktgen: Fix freezing problem + * x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt + * x86/amd-iommu: Fix deassignment of a device from the pt_domain + * x86: Re-get cfg_new in case reuse/move irq_desc + * Staging: fix rtl8187se compilation errors with mac80211 + * ALSA: usb-audio - Avoid Oops after disconnect + * serial: 8250: add serial transmitter fully empty test + * sysfs: sysfs_sd_setattr set iattrs unconditionally + * class: Free the class private data in class_release + * USB: usbfs: only copy the actual data received + * USB: usbfs: properly clean up the as structure on error paths + * rtl8187: Add new device ID + * ACPI: Add NULL pointer check in acpi_bus_start + * ACPI: fix High cpu temperature with 2.6.32 + * drm/radeon/kms: use udelay for short delays + * NFS: Too many GETATTR and ACCESS calls after direct I/O + * eCryptfs: Add getattr function + * b43: Fix throughput regression + * ath9k: Fix sequence numbers for PAE frames + * mac80211: Fix probe request filtering in IBSS mode + * iwlwifi: Fix to set correct ht configuration + * dm stripe: avoid divide by zero with invalid stripe count + * dm log: userspace fix overhead_size calcuations + * Linux 2.6.32.9 + * sfc: Fix SFE4002 initialisation + * sfc: Fix sign of efx_mcdi_poll_reboot() error in efx_mcdi_poll() + * sfc: SFE4002/SFN4112F: Widen temperature and voltage tolerances + * (pre-stable) HID: handle joysticks with large number of buttons + - LP: #492056 + * (pre-stable) HID: extend mask for BUTTON usage page + - LP: #492056 + * PM: Measure device suspend and resume times + * e1000: enhance frame fragment detection + - CVE-2009-4536 + * e1000e: enhance frame fragment detection + - CVE-2009-4538 + * KVM: fix memory access during x86 emulation. + - CVE-2010-0306 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - CVE-2010-0306 + * KVM: x86 emulator: Fix popf emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - CVE-2010-0306 + * Input: wacom - ensure the device is initialized properly upon resume + * Input: wacom - add defines for packet lengths of various devices + * Input: wacom - add support for new LCD tablets + - LP: #516777 + + -- Andy Whitcroft Mon, 01 Mar 2010 22:56:28 +0000 + +linux (2.6.32-14.20) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebuild following the GCC update to match compiler for out of tree modules + * Revert "[Config] drbd -- enable" + * Revert "ubuntu: drbd -- version 8.3.1" + * SAUCE: khubd -- switch USB product/manufacturer/serial handling to RCU + - LP: #510937 + + -- Andy Whitcroft Fri, 19 Feb 2010 18:47:18 +0000 + +linux (2.6.32-14.19) lucid; urgency=low + + [ Andy Whitcroft ] + + * ensure we build the source package contents when enabled + - LP: #522308 + * [Config] enable CONFIG_X86_MCE_XEON75XX + * SAUCE: AppArmor -- add linux/kref.h for struct kref + * [Config] enable CONFIG_HID_ORTEK + * enable udeb generation for arm versatile flavour + - LP: #522515 + + [ John Johansen ] + + * ubuntu: AppArmor -- update to mainline 2010-02-18 + - LP: #439560, #496110, #507069 + + [ Johnathon Harris ] + + * SAUCE: HID: add support for Ortek WKB-2000 + - LP: #405390 + + [ Upstream Kernel Changes ] + + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #490487 + * x86, mce: Xeon75xx specific interface to get corrected memory error + information + * x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll + * x86, mce: Make xeon75xx memory driver dependent on PCI + * drm/edid: Unify detailed block parsing between base and extension + blocks + - LP: #500999 + * (pre-stable) eCryptfs: Add getattr function + - LP: #390833 + + -- Andy Whitcroft Thu, 18 Feb 2010 19:22:02 +0000 + +linux (2.6.32-13.18) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "enforcer -- make the enforcement configuration common" + * Revert "(pre-stable) Input: ALPS - add interleaved protocol support + (Dell E6x00 series)" + * Revert "(pre-stable) driver-core: fix devtmpfs crash on s390" + * Revert "(pre-stable) Driver-Core: devtmpfs - set root directory mode to + 0755" + * Revert "SAUCE: Adds support for COMPAL JHL90 webcam" + * Revert "SAUCE: fix kernel oops in VirtualBox during paravirt patching" + * Revert "SAUCE: make fc transport removal of target configurable" + * enforcer -- make the enforcement configuration common + * getabis -- add preempt flavour to the list + * [Config] enforce DEVTMPFS options + * [Config] armel -- cleanup to-be builtin modules + * [Config] cleanup ports configs + * [Config] enable CRYPTO_GHASH_CLMUL_NI_INTEL + - LP: #485536 + * add printdebian target to find branch target + * distclean -- do not remove debian.env + * [Config] generic-pae switch to M586TSC + - LP: #519448 + * git-ubuntu-log -- commonise duplicated log handling + * git-ubuntu-log -- tighten up Bug: NNNN matching + * git-ubuntu-log -- sort the bug numbers + + [ Chris Wilson ] + + * (pre-stable) drm/i915: Increase fb alignment to 64k + - LP: #404064 + + [ Eric Miao ] + + * arm -- enable ubuntu/ directory + + [ Huang Ying ] + + * SAUCE: crypto: ghash - Add PCLMULQDQ accelerated implementation + * SAUCE: crypto: ghash-intel - Fix building failure on x86_32 + + [ Loïc Minier ] + + * [Config] cleanup preempt configuration + * [Config] versatile: Fix video output + - LP: #517594 + * [Config] armel DEFAULT_MMAP_MIN_ADDR=32768 + * [Config] Large update to armel/versatile + * [Config] versatile: Add RTC support + * [Config] armel: Enable NEON + * [Config] versatile: Builtin MMC support + * [Config] versatile Builtin SCSI controller + * [Config] armel Disable dma_cache_sync callers + * [Config] armel Disable asm/time.h users + * [Config] armel Disable out of range udelay() + * [Config] armel Disable flush_cache_range() users + * [Config] armel -- Enable ubuntu/ drivers + + [ Steve Conklin ] + + * SAUCE: drm/i915: Add display hotplug event on Ironlake + * SAUCE: drm/i915: Add ACPI OpRegion support for Ironlake + + [ Upstream Kernel Changes ] + + * Revert "[Upstream]: oprofile/x86: add Xeon 7500 series support" + * Revert "Revert "[Bluetooth] Eliminate checks for impossible conditions + in IRQ handler"" + * clockevent: Don't remove broadcast device when cpu is dead + * clockevents: Add missing include to pacify sparse + * ACPI: don't cond_resched if irq is disabled + * be2net: Add support for next generation of BladeEngine device. + * be2net: Add the new PCI IDs to PCI_DEVICE_TABLE. + * mpt2sas: New device SAS2208 support is added + * ar9170: Add support for D-Link DWA 160 A2 + * powerpc/fsl: Add PCI device ids for new QoirQ chips + * davinci: dm646x: Add support for 3.x silicon revision + * Input: ALPS - add interleaved protocol support (Dell E6x00 series) + * Driver-Core: devtmpfs - set root directory mode to 0755 + * driver-core: fix devtmpfs crash on s390 + * vfs: get_sb_single() - do not pass options twice + * ALSA: hda - Add PCI IDs for Nvidia G2xx-series + * V4L/DVB (13569): smsusb: add autodetection support for five additional + Hauppauge USB IDs + * USB: mos7840: add device IDs for B&B electronics devices + * USB: ftdi_sio: add USB device ID's for B&B Electronics line + * V4L/DVB (13168): Add support for Asus Europa Hybrid DVB-T card (SAA7134 + SubVendor ID: 0x1043 Device ID: 0x4847) + * iTCO_wdt: Add support for Intel Ibex Peak + * atl1c:use common_task instead of reset_task and link_chg_task + * atl1e:disable NETIF_F_TSO6 for hardware limit + * V4L/DVB (13680a): DocBook/media: copy images after building HTML + * V4L/DVB (13680b): DocBook/media: create links for included sources + * netfilter: xtables: fix conntrack match v1 ipt-save output + * partitions: read whole sector with EFI GPT header + * partitions: use sector size for EFI GPT + * ALSA: ice1724 - Patch for suspend/resume for ESI Juli@ + * sched: Fix isolcpus boot option + * sched: Fix missing sched tunable recalculation on cpu add/remove + * nohz: Prevent clocksource wrapping during idle + * nfsd: Fix sort_pacl in fs/nfsd/nf4acl.c to actually sort groups + * timers, init: Limit the number of per cpu calibration bootup messages + * PCI: Always set prefetchable base/limit upper32 registers + * iscsi class: modify handling of replacement timeout + * NFS: Revert default r/wsize behavior + * HID: fixup quirk for NCR devices + * scsi_devinfo: update Hitachi entries (v2) + * scsi_dh: create sysfs file, dh_state for all SCSI disk devices + * scsi_transport_fc: remove invalid BUG_ON + * lpfc: fix hang on SGI ia64 platform + * libfc: fix typo in retry check on received PRLI + * libfc: fix ddp in fc_fcp for 0 xid + * fcoe: remove redundant checking of netdev->netdev_ops + * libfc: Fix wrong scsi return status under FC_DATA_UNDRUN + * libfc: lport: fix minor documentation errors + * libfc: don't WARN_ON in lport_timeout for RESET state + * fcoe: initialize return value in fcoe_destroy + * libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data + * libfc: fix memory corruption caused by double frees and bad error + handling + * libfc: fix free of fc_rport_priv with timer pending + * libfc: remote port gets stuck in restart state without really + restarting + * fcoe, libfc: fix an libfc issue with queue ramp down in libfc + * fcoe: Fix checking san mac address + * fcoe: Fix getting san mac for VLAN interface + * qlge: Remove explicit setting of PCI Dev CTL reg. + * qlge: Set PCIE max read request size. + * qlge: Don't fail open when port is not initialized. + * qlge: Add handler for DCBX firmware event. + * qlge: Bonding fix for mode 6. + * PCI: AER: fix aer inject result in kernel oops + * DMI: allow omitting ident strings in DMI tables + * Input: i8042 - remove identification strings from DMI tables + * Input: i8042 - add Gigabyte M1022M to the noloop list + * Input: i8042 - add Dritek quirk for Acer Aspire 5610. + * ALSA: hda - select IbexPeak handler for Calpella + * ALSA: hda - Fix quirk for Maxdata obook4-1 + * ALSA: hda - Add missing Line-Out and PCM switches as slave + * iTCO_wdt.c - cleanup chipset documentation + * iTCO_wdt: add PCI ID for the Intel EP80579 (Tolapai) SoC + * iTCO_wdt: Add Intel Cougar Point and PCH DeviceIDs + * ahci: disable SNotification capability for ich8 + * ata_piix: fix MWDMA handling on PIIX3 + * md: fix small irregularity with start_ro module parameter + * V4L/DVB (13826): uvcvideo: Fix controls blacklisting + * cio: fix double free in case of probe failure + * cio: dont panic in non-fatal conditions + * netiucv: displayed TX bytes value much too high + * ipc ns: fix memory leak (idr) + * ALSA: hda - Fix HP T5735 automute + * hwmon: (fschmd) Fix a memleak on multiple opens of /dev/watchdog + * UBI: fix memory leak in update path + * UBI: initialise update marker + * ASoC: fix a memory-leak in wm8903 + * mac80211: check that ieee80211_set_power_mgmt only handles STA + interfaces. + * cfg80211: fix channel setting for wext + * KVM: S390: fix potential array overrun in intercept handling + * KVM: only allow one gsi per fd + * KVM: Fix race between APIC TMR and IRR + * KVM: MMU: bail out pagewalk on kvm_read_guest error + * KVM: x86: Fix host_mapping_level() + * KVM: x86: Fix probable memory leak of vcpu->arch.mce_banks + * KVM: x86: Fix leak of free lapic date in kvm_arch_vcpu_init() + * KVM: fix lock imbalance in kvm_*_irq_source_id() + * KVM: only clear irq_source_id if irqchip is present + * IPoIB: Clear ipoib_neigh.dgid in ipoib_neigh_alloc() + * x86: Reenable TSC sync check at boot, even with NONSTOP_TSC + * ACPI: enable C2 and Turbo-mode on Nehalem notebooks on A/C + - LP: #516325 + * iwlwifi: Fix throughput stall issue in HT mode for 5000 + * fnctl: f_modown should call write_lock_irqsave/restore + * x86, msr/cpuid: Pass the number of minors when unregistering MSR and + CPUID drivers. + * Linux 2.6.32.7 + * scsi_lib: Fix bug in completion of bidi commands + * mptsas: Fix issue with chain pools allocation on katmai + * mm: add new 'read_cache_page_gfp()' helper function + * drm/i915: Selectively enable self-reclaim + * firewire: ohci: fix crashes with TSB43AB23 on 64bit systems + * S390: fix single stepped svcs with TRACE_IRQFLAGS=y + * x86: Set hotpluggable nodes in nodes_possible_map + * x86: Remove "x86 CPU features in debugfs" (CONFIG_X86_CPU_DEBUG) + * libata: retry FS IOs even if it has failed with AC_ERR_INVALID + * zcrypt: Do not remove coprocessor for error 8/72 + * dasd: fix possible NULL pointer errors + * ACPI: Add a generic API for _OSC -v2 + * ACPI: Add platform-wide _OSC support. + * ACPI: fix OSC regression that caused aer and pciehp not to load + * ACPI: Advertise to BIOS in _OSC: _OST on _PPC changes + * UBI: fix volume creation input checking + * e1000/e1000e: don't use small hardware rx buffers + * drm/i915: Reload hangcheck timer too for Ironlake + * Fix a leak in affs_fill_super() + * Fix failure exits in bfs_fill_super() + * fix oops in fs/9p late mount failure + * fix leak in romfs_fill_super() + * Fix remount races with symlink handling in affs + * fix affs parse_options() + * Fix failure exit in ipathfs + * mm: fix migratetype bug which slowed swapping + * FDPIC: Respect PT_GNU_STACK exec protection markings when creating + NOMMU stack + * Split 'flush_old_exec' into two functions + * sparc: TIF_ABI_PENDING bit removal + * x86: get rid of the insane TIF_ABI_PENDING bit + * Input: winbond-cir - remove dmesg spam + * x86: Disable HPET MSI on ATI SB700/SB800 + * iwlwifi: set default aggregation frame count limit to 31 + * drm/i915: only enable hotplug for detected outputs + * firewire: core: add_descriptor size check + * SECURITY: selinux, fix update_rlimit_cpu parameter + * regulator: Specify REGULATOR_CHANGE_STATUS for WM835x LED constraints + * x86: Add Dell OptiPlex 760 reboot quirk + - LP: #488319 + * x86: Add quirk for Intel DG45FC board to avoid low memory corruption + * x86/amd-iommu: Fix possible integer overflow + * clocksource: fix compilation if no GENERIC_TIME + * tcp: update the netstamp_needed counter when cloning sockets + * sky2: Fix oops in sky2_xmit_frame() after TX timeout + * net: restore ip source validation + * af_packet: Don't use skb after dev_queue_xmit() + * ax25: netrom: rose: Fix timer oopses + * KVM: allow userspace to adjust kvmclock offset + * oprofile/x86: add Xeon 7500 series support + * oprofile/x86: fix crash when profiling more than 28 events + * libata: retry link resume if necessary + * mm: percpu-vmap fix RCU list walking + * mm: purge fragmented percpu vmap blocks + * block: fix bio_add_page for non trivial merge_bvec_fn case + * Fix 'flush_old_exec()/setup_new_exec()' split + * random: drop weird m_time/a_time manipulation + * random: Remove unused inode variable + * block: fix bugs in bio-integrity mempool usage + * usb: r8a66597-hdc disable interrupts fix + * connector: Delete buggy notification code. + * be2net: Bug fix to support newer generation of BE ASIC + * be2net: Fix memset() arg ordering. + * mm: flush dcache before writing into page to avoid alias + * mac80211: fix NULL pointer dereference when ftrace is enabled + * imxfb: correct location of callbacks in suspend and resume + * mx3fb: some debug and initialisation fixes + * starfire: clean up properly if firmware loading fails + * kernel/cred.c: use kmem_cache_free + * uartlite: fix crash when using as console + * pktcdvd: removing device does not remove its sysfs dir + * ath9k: fix eeprom INI values override for 2GHz-only cards + * ath9k: fix beacon slot/buffer leak + * powerpc: TIF_ABI_PENDING bit removal + * NET: fix oops at bootime in sysctl code + * Linux 2.6.32.8 + + -- Andy Whitcroft Wed, 10 Feb 2010 18:56:52 +0000 + +linux (2.6.32-12.17) lucid; urgency=low + + [ Andy Whitcroft ] + + * restore linux-image prefix -- master + * enforce -- we require SELINUX enabled -- master + * enforce -- ensure APPARMOR is our default LSM -- master + * make doc package completely optional -- master + * make source package completely optional -- master + * make linux-libc-dev completly optional -- master + * convert package disable to a deps list -- master + * allow common headers to switch from indep to arch -- master + * convert binary package disable to a deps list -- master + * add configuration option for a full source build tree -- master + * add support for uImage kernels in package control scripts + * getabis -- cleanup and parameterise repository list -- master + * getabis -- move configuration to etc/getabi -- master + * kernelconfig -- move configuration to etc -- master + * rules -- make debian/debian.env master for branch name + * set the current branch name -- master + * pull back common debian.master files into debian -- master + * enforcer -- make the enforcement configuration common + * insert-changes -- correctly link to debian/rules in DROOT + + [ Colin Watson ] + + * future-proof ddeb handling against buildd changes + + [ Eric Miao ] + + * SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} depend on + X86 + + [ Loïc Minier ] + + * Add modules.builtin.bin to prerm rm list + - LP: #516584 + + [ Tim Gardner ] + + * [Config] Implement the amd64 preempt flavour + + [ Upstream Kernel Changes ] + + * syslog: distinguish between /proc/kmsg and syscalls + - LP: #515623 + * sfc: Fix polling for slow MCDI operations + * sfc: Fix conditions for MDIO self-test + * sfc: QT202x: Remove unreliable MMD check at initialisation + * sfc: Add workspace for GMAC bug workaround to MCDI MAC_STATS buffer + * sfc: Use fixed-size buffers for MCDI NVRAM requests + + -- Andy Whitcroft Fri, 05 Feb 2010 07:09:31 +0000 + +linux (2.6.32-12.16) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: acpi battery -- delay first lookup of the battery until + first use" + * SAUCE: acpi battery -- move first lookup asynchronous + - LP: #507211 + * [Config] update configs to cleanup generic configs + * [Config] disable CONFIG_X86_CPU_DEBUG for amd64 + * [Config] enable USER_NS + - LP: #480739, #509808 + + [ Heiko Carstens ] + + * (pre-stable) driver-core: fix devtmpfs crash on s390 + - LP: #512370 + + [ John Johansen ] + + * [Config] for server and virtual flavours make CONFIG_SCSI_SYM53C8XX_2=y + - LP: #494565 + * [Config] VIRTIO=y for server/virtual flavours + - LP: #494565 + + [ Kay Sievers ] + + * (pre-stable) Driver-Core: devtmpfs - set root directory mode to 0755 + - LP: #512370 + + [ Kees Cook ] + + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + + [ Leann Ogasawara ] + + * [Upstream] e1000: enhance frame fragment detection + - CVE-2009-4536 + * [Upstream] e1000e: enhance frame fragment detection + - CVE-2009-4538 + + [ Sebastian Kapfer ] + + * (pre-stable) Input: ALPS - add interleaved protocol support (Dell E6x00 + series) + - LP: #296610 + + [ Upstream Kernel Changes ] + + * inotify: do not reuse watch descriptors + - LP: #485556 + * inotify: only warn once for inotify problems + * revert "drivers/video/s3c-fb.c: fix clock setting for Samsung SoC + Framebuffer" + * memcg: ensure list is empty at rmdir + * drm/i915: remove loop in Ironlake interrupt handler + * block: Fix incorrect reporting of partition alignment + * x86, mce: Thermal monitoring depends on APIC being enabled + * futexes: Remove rw parameter from get_futex_key() + * page allocator: update NR_FREE_PAGES only when necessary + * x86, apic: use physical mode for IBM summit platforms + * edac: i5000_edac critical fix panic out of bounds + * x86: SGI UV: Fix mapping of MMIO registers + * mfd: WM835x GPIO direction register is not locked + * mfd: Correct WM835x ISINK ramp time defines + * ALSA: hda - Fix missing capture mixer for ALC861/660 codecs + * V4L/DVB (13868): gspca - sn9c20x: Fix test of unsigned. + * reiserfs: truncate blocks not used by a write + * HID: add device IDs for new model of Apple Wireless Keyboard + * PCI/cardbus: Add a fixup hook and fix powerpc + * Input: pmouse - move Sentelic probe down the list + * asus-laptop: add Lenovo SL hotkey support + * sched: Fix cpu_clock() in NMIs, on !CONFIG_HAVE_UNSTABLE_SCHED_CLOCK + * sparc64: Fix NMI programming when perf events are active. + * sparc64: Fix Niagara2 perf event handling. + * i2c: Do not use device name after device_unregister + * i2c/pca: Don't use *_interruptible + * serial/8250_pnp: add a new Fujitsu Wacom Tablet PC device + * sched: Fix task priority bug + * vfs: Fix vmtruncate() regression + * Linux 2.6.32.5 + * x86, msr/cpuid: Register enough minors for the MSR and CPUID drivers + * V4L/DVB (13900): gspca - sunplus: Fix bridge exchanges. + * Staging: asus_oled: fix oops in 2.6.32.2 + * Staging: hv: fix smp problems in the hyperv core code + * tty: fix race in tty_fasync + * ecryptfs: use after free + * ecryptfs: initialize private persistent file before dereferencing + pointer + * nozomi: quick fix for the close/close bug + * serial: 8250_pnp: use wildcard for serial Wacom tablets + * usb: serial: fix memory leak in generic driver + * USB: fix bitmask merge error + * USB: Don't use GFP_KERNEL while we cannot reset a storage device + * USB: EHCI: fix handling of unusual interrupt intervals + * USB: EHCI & UHCI: fix race between root-hub suspend and port resume + * USB: add missing delay during remote wakeup + * USB: add speed values for USB 3.0 and wireless controllers + * ACPI: EC: Accelerate query execution + * ACPI: EC: Add wait for irq storm + * SCSI: enclosure: fix oops while iterating enclosure_status array + * drm/i915: Read the response after issuing DDC bus switch command + * drm/i915: try another possible DDC bus for the SDVO device with + multiple outputs + * block: bdev_stack_limits wrapper + * DM: Fix device mapper topology stacking + * x86/PCI/PAT: return EINVAL for pci mmap WC request for !pat_enabled + * USB: fix usbstorage for 2770:915d delivers no FAT + * vmalloc: remove BUG_ON due to racy counting of VM_LAZY_FREE + * perf timechart: Use tid not pid for COMM change + * perf events: Dont report side-band events on each cpu for + per-task-per-cpu events + * perf: Honour event state for aux stream data + * Linux 2.6.32.6 + + -- Andy Whitcroft Wed, 27 Jan 2010 16:40:23 +0000 + +linux (2.6.32-11.15) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "(pre-stable) drm/radeon/kms: fix crtc vblank update for r600" + * Revert "(pre-stable) sched: Fix balance vs hotplug race" + * Revert "[Upstream] acerhdf: Limit modalias matching to supported + boards" + * Revert "[Upstream] mmc: prevent dangling block device from accessing + stale queues" + * Revert "SAUCE: Fix nx_enable reporting" + * Revert "SAUCE: [x86] fix report of cs-limit nx-emulation" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: i915 -- disable powersave by default + - LP: #492392 + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Tim Gardner ] + + * [Upstream] b43: Declare all possible firmware files. + - LP: #488636 + * [Config] updateconfigs after adding pvscsi + - LP: #497156 + * [Config] CONFIG_BT=m + + [ Upstream Kernel Changes ] + + * Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu + for pre-Pentium" + * SCSI: ipr: fix EEH recovery + * SCSI: qla2xxx: dpc thread can execute before scsi host has been added + * SCSI: st: fix mdata->page_order handling + * SCSI: fc class: fix fc_transport_init error handling + * sched: Fix task_hot() test order + * x86, cpuid: Add "volatile" to asm in native_cpuid() + * sched: Select_task_rq_fair() must honour SD_LOAD_BALANCE + * clockevents: Prevent clockevent_devices list corruption on cpu hotplug + * pata_hpt3x2n: fix clock turnaround + * pata_cmd64x: fix overclocking of UDMA0-2 modes + * ASoC: wm8974: fix a wrong bit definition + * sound: sgio2audio/pdaudiocf/usb-audio: initialize PCM buffer + * ALSA: hda - Fix missing capsrc_nids for ALC88x + * acerhdf: limit modalias matching to supported + - LP: #435958 + * ACPI: EC: Fix MSI DMI detection + * ACPI: Use the return result of ACPI lid notifier chain correctly + * powerpc: Handle VSX alignment faults correctly in little-endian mode + * ASoC: Do not write to invalid registers on the wm9712. + * drm/radeon: fix build on 64-bit with some compilers. + * USB: emi62: fix crash when trying to load EMI 6|2 firmware + * USB: option: support hi speed for modem Haier CE100 + * USB: Fix a bug on appledisplay.c regarding signedness + * USB: musb: gadget_ep0: avoid SetupEnd interrupt + * Bluetooth: Prevent ill-timed autosuspend in USB driver + * USB: rename usb_configure_device + * USB: fix bugs in usb_(de)authorize_device + * drivers/net/usb: Correct code taking the size of a pointer + * x86: SGI UV: Fix writes to led registers on remote uv hubs + * md: Fix unfortunate interaction with evms + * dma: at_hdmac: correct incompatible type for argument 1 of + 'spin_lock_bh' + * dma-debug: Do not add notifier when dma debugging is disabled. + * dma-debug: Fix bug causing build warning + * cifs: NULL out tcon, pSesInfo, and srvTcp pointers when chasing DFS + referrals + * x86/amd-iommu: Fix initialization failure panic + * ioat3: fix p-disabled q-continuation + * ioat2,3: put channel hardware in known state at init + * KVM: MMU: remove prefault from invlpg handler + * KVM: LAPIC: make sure IRR bitmap is scanned after vm load + * Libertas: fix buffer overflow in lbs_get_essid() + * iwmc3200wifi: fix array out-of-boundary access + * mac80211: fix propagation of failed hardware reconfigurations + * mac80211: fix WMM AP settings application + * mac80211: Fix IBSS merge + * cfg80211: fix race between deauth and assoc response + * ath5k: fix SWI calibration interrupt storm + * ath9k: wake hardware for interface IBSS/AP/Mesh removal + * ath9k: Fix TX queue draining + * ath9k: fix missed error codes in the tx status check + * ath9k: wake hardware during AMPDU TX actions + * ath9k: fix suspend by waking device prior to stop + * ath9k_hw: Fix possible OOB array indexing in gen_timer_index[] on + 64-bit + * ath9k_hw: Fix AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB and its shift value + in 0x4054 + * iwl3945: disable power save + * iwl3945: fix panic in iwl3945 driver + * iwlwifi: fix EEPROM/OTP reading endian annotations and a bug + * iwlwifi: fix more eeprom endian bugs + * iwlwifi: fix 40MHz operation setting on cards that do not allow it + * mac80211: fix race with suspend and dynamic_ps_disable_work + * NOMMU: Optimise away the {dac_,}mmap_min_addr tests + * 'sysctl_max_map_count' should be non-negative + * kernel/sysctl.c: fix the incomplete part of + sysctl_max_map_count-should-be-non-negative.patch + * V4L/DVB (13596): ov511.c typo: lock => unlock + * x86/ptrace: make genregs[32]_get/set more robust + * memcg: avoid oom-killing innocent task in case of use_hierarchy + * e100: Fix broken cbs accounting due to missing memset. + * ipv6: reassembly: use seperate reassembly queues for conntrack and + local delivery + * netfilter: fix crashes in bridge netfilter caused by fragment jumps + * hwmon: (sht15) Off-by-one error in array index + incorrect constants + * b43: avoid PPC fault during resume + * Keys: KEYCTL_SESSION_TO_PARENT needs TIF_NOTIFY_RESUME architecture + support + * sched: Fix balance vs hotplug race + * drm/radeon/kms: fix crtc vblank update for r600 + * drm: disable all the possible outputs/crtcs before entering KMS mode + * S390: dasd: support DIAG access for read-only devices + * xen: fix is_disconnected_device/exists_disconnected_device + * xen: improvement to wait_for_devices() + * xen: wait up to 5 minutes for device connetion + * orinoco: fix GFP_KERNEL in orinoco_set_key with interrupts disabled + * udf: Try harder when looking for VAT inode + * Add unlocked version of inode_add_bytes() function + * quota: decouple fs reserved space from quota reservation + * ext4: Convert to generic reserved quota's space management. + * ext4: fix sleep inside spinlock issue with quota and dealloc (#14739) + * x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus + * cpumask: use modern cpumask style in drivers/edac/amd64_edac.c + * amd64_edac: unify MCGCTL ECC switching + * x86, msr: Add support for non-contiguous cpumasks + * x86, msr: msrs_alloc/free for CONFIG_SMP=n + * amd64_edac: fix driver instance freeing + * amd64_edac: make driver loading more robust + * amd64_edac: fix forcing module load/unload + * sched: Sched_rt_periodic_timer vs cpu hotplug + * ext4: Update documentation to correct the inode_readahead_blks option + name + * lguest: fix bug in setting guest GDT entry + * vmscan: do not evict inactive pages when skipping an active list scan + * ksm: fix mlockfreed to munlocked + * rt2x00: Disable powersaving for rt61pci and rt2800pci. + * generic_permission: MAY_OPEN is not write access + * Linux 2.6.32.3 + * untangle the do_mremap() mess + * fasync: split 'fasync_helper()' into separate add/remove functions + * ASoC: fix params_rate() macro use in several codecs + * modules: Skip empty sections when exporting section notes + * exofs: simple_write_end does not mark_inode_dirty + * nfsd: make sure data is on disk before calling ->fsync + * sunrpc: fix peername failed on closed listener + * SUNRPC: Fix up an error return value in + gss_import_sec_context_kerberos() + * SUNRPC: Fix the return value in gss_import_sec_context() + * sunrpc: on successful gss error pipe write, don't return error + * drm/i915: Update LVDS connector status when receiving ACPI LID event + * drm/i915: fix order of fence release wrt flushing + * drm/i915: Permit pinning whilst the device is 'suspended' + * drm: remove address mask param for drm_pci_alloc() + * drm/i915: Enable/disable the dithering for LVDS based on VBT setting + * drm/i915: Make the BPC in FDI rx/transcoder be consistent with that in + pipeconf on Ironlake + * drm/i915: Select the correct BPC for LVDS on Ironlake + * drm/i915: fix unused var + * rtc_cmos: convert shutdown to new pnp_driver->shutdown + * drivers/cpuidle/governors/menu.c: fix undefined reference to + `__udivdi3' + * cgroups: fix 2.6.32 regression causing BUG_ON() in cgroup_diput() + * lib/rational.c needs module.h + * dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with + DMA_FROM_DEVICE and + * kernel/signal.c: fix kernel information leak with print-fatal-signals=1 + * mmc_block: add dev_t initialization check + * mmc_block: fix probe error cleanup bug + * mmc_block: fix queue cleanup + * ALSA: hda - Fix ALC861-VD capture source mixer + * ALSA: ac97: Add Dell Dimension 2400 to Headphone/Line Jack Sense + blacklist + * ALSA: atiixp: Specify codec for Foxconn RC4107MA-RS2 + - LP: #498863 + * ASoC: Fix WM8350 DSP mode B configuration + * netfilter: ebtables: enforce CAP_NET_ADMIN + * netfilter: nf_ct_ftp: fix out of bounds read in update_nl_seq() + * hwmon: (coretemp) Fix TjMax for Atom N450/D410/D510 CPUs + * hwmon: (adt7462) Fix pin 28 monitoring + * quota: Fix dquot_transfer for filesystems different from ext4 + * xen: fix hang on suspend. + * iwlwifi: fix iwl_queue_used bug when read_ptr == write_ptr + * ath5k: Fix eeprom checksum check for custom sized eeproms + * cfg80211: fix syntax error on user regulatory hints + * iwl: off by one bug + * mac80211: add missing sanity checks for action frames + * drm/i915: remove render reclock support + * libertas: Remove carrier signaling from the scan code + * kernel/sysctl.c: fix stable merge error in NOMMU mmap_min_addr + * mac80211: fix skb buffering issue (and fixes to that) + * fix braindamage in audit_tree.c untag_chunk() + * fix more leaks in audit_tree.c tag_chunk() + * module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y + * ipv6: skb_dst() can be NULL in ipv6_hop_jumbo(). + * agp/intel-agp: Clear entire GTT on startup + * Linux 2.6.32.4 + * ethtool: Add reset operation + * gro: Name the GRO result enumeration type + * gro: Change all receive functions to return GRO result codes + * sfc: 10Xpress: Initialise pause advertising flags + * sfc: 10Xpress: Report support for pause frames + * sfc: Remove redundant header gmii.h + * sfc: Remove redundant hardware initialisation + * sfc: Rename Falcon-specific board code and types + * sfc: Remove boards.h, moving last remaining declaration to falcon.h + * sfc: Remove versioned bitfield macros + * sfc: Move RX data FIFO thresholds out of struct efx_nic_type + * sfc: Update hardware definitions for Siena + * sfc: Rename register I/O header and functions used by both Falcon and + Siena + * sfc: Eliminate indirect lookups of queue size constants + * sfc: Define DMA address mask explicitly in terms of descriptor field + width + * sfc: Move all TX DMA length limiting into tx.c + * sfc: Change order of device removal to reverse of probe order + * sfc: Remove declarations of nonexistent functions + * sfc: Move efx_xmit_done() declaration into correct stanza + * sfc: Move shared members of struct falcon_nic_data into struct efx_nic + * sfc: Maintain interrupt moderation values in ticks, not microseconds + * sfc: Removed kernel-doc for nonexistent member of efx_phy_operations + * sfc: Remove pointless abstraction of memory BAR number + * sfc: Remove incorrect assertion from efx_pci_remove_main() + * sfc: Remove unnecessary tests of efx->membase + * sfc: Move MTD probe after netdev registration and name allocation + * sfc: Remove unused code for non-autoneg speed/duplex switching + * sfc: Rename 'xfp' file and functions to reflect reality + * sfc: Really allow RX checksum offload to be disabled + * sfc: Feed GRO result into RX allocation policy and interrupt moderation + * sfc: Enable heuristic selection between page and skb RX buffers + * sfc: Remove pointless abstraction of memory BAR number (2) + * sfc: Remove redundant gotos from __efx_rx_packet() + * sfc: Remove ridiculously paranoid assertions + * sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro() + * sfc: Record RX queue number on GRO path + * sfc: SFT9001: Reset LED configuration correctly after blinking + * sfc: Use a single blink implementation + * sfc: Rename efx_board::init_leds to init_phy and use for SFN4111T + * sfc: Make board information explicitly Falcon-specific + * sfc: Move definition of struct falcon_nic_data into falcon.h + * sfc: Move struct falcon_board into struct falcon_nic_data + * sfc: Move all I2C stuff into struct falcon_board + * sfc: Gather link state fields in struct efx_nic into new struct + efx_link_state + * sfc: Remove unnecessary casts to struct sk_buff * + * sfc: Remove redundant efx_xmit() function + * sfc: Combine high-level header files + * sfc: Log interrupt and reset type names, not numbers + * sfc: Fix descriptor cache sizes + * sfc: Treat all MAC registers as 128-bit + * sfc: Strengthen EFX_ASSERT_RESET_SERIALISED + * sfc: Comment corrections + * sfc: Remove unused constant + * sfc: Clean up struct falcon_board and struct falcon_board_data + * sfc: Fix bugs in RX queue flushing + * sfc: Remove unused function efx_flush_queues() + * sfc: Only switch Falcon MAC clocks as necessary + * sfc: Hold MAC lock for longer in efx_init_port() + * sfc: Split MAC stats DMA initiation and completion + * sfc: Move Falcon board/PHY/MAC monitoring code to falcon.c + * sfc: Simplify XMAC link polling + * sfc: Change MAC promiscuity and multicast hash at the same time + * sfc: Move inline comment into kernel-doc + * sfc: Do not set net_device::trans_start in self-test + * sfc: Simplify PHY polling + * sfc: QT202x: Reset before reading PHY id + * sfc: Replace MDIO spinlock with mutex + * sfc: Always start Falcon using the XMAC + * sfc: Limit some hardware workarounds to Falcon + * sfc: Remove EFX_WORKAROUND_9141 macro + * sfc: Remove another unused workaround macro + * sfc: Remove some redundant whitespace + * sfc: Decouple NIC revision number from Falcon PCI revision number + * sfc: Move descriptor cache base addresses to struct efx_nic_type + * sfc: Clean up RX event handling + * sfc: Remove redundant writes to INT_ADR_KER + * sfc: Remove duplicate hardware structure definitions + * sfc: Turn pause frame generation on and off at the MAC, not the RX FIFO + * sfc: Move Falcon NIC operations to efx_nic_type + * sfc: Refactor link configuration + * sfc: Generalise link state monitoring + * sfc: Add power-management and wake-on-LAN support + * sfc: Implement ethtool reset operation + * sfc: Add efx_nic_type operation for register self-test + * sfc: Add efx_nic_type operation for NVRAM self-test + * sfc: Add efx_nic_type operation for identity LED control + * sfc: Separate shared NIC code from Falcon-specific and rename + accordingly + * sfc: Fold falcon_probe_nic_variant() into falcon_probe_nic() + * sfc: Extend loopback mode enumeration + * sfc: Remove static PHY data and enumerations + * sfc: Extend MTD driver for use with new NICs + * sfc: Allow for additional checksum offload features + * sfc: Rename falcon.h to nic.h + * sfc: Move shared NIC code from falcon.c to new source file nic.c + * sfc: Add firmware protocol definitions (MCDI) + * sfc: Add support for SFC9000 family (1) + * sfc: Add support for SFC9000 family (2) + * sfc: Implement TSO for TCP/IPv6 + * sfc: Update version, copyright dates, authors + * drivers/net/sfc: Correct code taking the size of a pointer + * sfc: Move PHY software state initialisation from init() into probe() + * sfc: Include XGXS in XMAC link status check except in XGMII loopback + * sfc: Fix DMA mapping cleanup in case of an error in TSO + * sfc: QT2025C: Work around PHY bug + * sfc: QT2025C: Switch into self-configure mode when not in loopback + * sfc: QT2025C: Work around PHY firmware initialisation bug + * sfc: QT2025C: Add error message for suspected bad SFP+ cables + * sfc: Disable TX descriptor prefetch watchdog + * [SCSI] vmw_pvscsi: SCSI driver for VMware's virtual HBA. + - LP: #497156 + + -- Andy Whitcroft Tue, 19 Jan 2010 16:12:47 +0000 + +linux (2.6.32-10.14) lucid; urgency=low + + [ Alex Deucher ] + + * SAUCE: drm/radeon/kms: fix LVDS setup on r4xx + - LP: #493795 + + [ Andy Whitcroft ] + + * Revert "(pre-stable) acpi: Use the ARB_DISABLE for the CPU which model + id is less than 0x0f." + * config-check -- ensure the checks get run at build time + * config-check -- check the processed config during updateconfigs + * config-check -- CONFIG_SECCOMP may not be present + * TUN is now built in ignore + * SAUCE: acpi battery -- delay first lookup of the battery until first + use + * SAUCE: async_populate_rootfs: move rootfs init earlier + * ubuntu: AppArmor -- update to mainline 2010-01-06 + * SAUCE: move RLIMIT_CORE pipe dumper marker to 1 + - LP: #498525 + + [ Dave Airlie ] + + * (pre-stable) drm/radeon/kms: fix crtc vblank update for r600 + + [ Leann Ogasawara ] + + * Add asix to nic-usb-modules file + - LP: #499785 + + [ Peter Zijlstra ] + + * (pre-stable) sched: Fix balance vs hotplug race + + [ Tim Gardner ] + + * [Config] Enable CONFIG_FUNCTION_TRACER + - LP: #497989 + * [Config] Drop lpia from getabis + * [Config] Build in TUN/TAP driver + - LP: #499491 + * [Config] DH_COMPAT=5 + + [ Upstream Kernel Changes ] + + * Revert "(pre-stable) drm/i915: Avoid NULL dereference with + component_only tv_modes" + * Revert "(pre-stable) drm/i915: Fix sync to vblank when VGA output is + turned off" + * USB: usb-storage: fix bug in fill_inquiry + * USB: option: add pid for ZTE + * firewire: ohci: handle receive packets with a data length of zero + * rcu: Prepare for synchronization fixes: clean up for non-NO_HZ handling + of ->completed counter + * rcu: Fix synchronization for rcu_process_gp_end() uses of ->completed + counter + * rcu: Fix note_new_gpnum() uses of ->gpnum + * rcu: Remove inline from forward-referenced functions + * perf_event: Fix invalid type in ioctl definition + * perf_event: Initialize data.period in perf_swevent_hrtimer() + * perf: Don't free perf_mmap_data until work has been done + * PM / Runtime: Fix lockdep warning in __pm_runtime_set_status() + * sched: Check for an idle shared cache in select_task_rq_fair() + * sched: Fix affinity logic in select_task_rq_fair() + * sched: Rate-limit newidle + * sched: Fix and clean up rate-limit newidle code + * x86/amd-iommu: attach devices to pre-allocated domains early + * x86/amd-iommu: un__init iommu_setup_msi + * x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking + up the PCI tree + * x86: Fix iommu=nodac parameter handling + * x86: GART: pci-gart_64.c: Use correct length in strncmp + * x86: ASUS P4S800 reboot=bios quirk + - LP: #366682 + * x86, apic: Enable lapic nmi watchdog on AMD Family 11h + * ssb: Fix range check in sprom write + * ath5k: allow setting txpower to 0 + * ath5k: enable EEPROM checksum check + * hrtimer: Fix /proc/timer_list regression + * ALSA: hrtimer - Fix lock-up + * ALSA: hda - Terradici HDA controllers does not support 64-bit mode + * KVM: x86 emulator: limit instructions to 15 bytes + * KVM: s390: Fix prefix register checking in arch/s390/kvm/sigp.c + * KVM: s390: Make psw available on all exits, not just a subset + * KVM: fix irq_source_id size verification + * KVM: x86: include pvclock MSRs in msrs_to_save + * x86: Prevent GCC 4.4.x (pentium-mmx et al) function prologue wreckage + * x86: Use -maccumulate-outgoing-args for sane mcount prologues + * x86, mce: don't restart timer if disabled + * x86/mce: Set up timer unconditionally + * x86: SGI UV: Fix BAU initialization + * x86: Fix duplicated UV BAU interrupt vector + * x86: Add new Intel CPU cache size descriptors + * x86: Fix typo in Intel CPU cache size descriptor + * pata_hpt{37x|3x2n}: fix timing register masks (take 2) + * s390: clear high-order bits of registers after sam64 + * V4L/DVB: Fix test in copy_reg_bits() + * bsdacct: fix uid/gid misreporting + * UBI: flush wl before clearing update marker + * jbd2: don't wipe the journal on a failed journal checksum + * USB: xhci: Add correct email and files to MAINTAINERS entry. + * USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again + * USB: option.c: add support for D-Link DWM-162-U5 + * USB: usbtmc: repeat usb_bulk_msg until whole message is transfered + * USB: usb-storage: add BAD_SENSE flag + * USB: Close usb_find_interface race v3 + * pxa/em-x270: fix usb hub power up/reset sequence + * hfs: fix a potential buffer overflow + * SUNRPC: IS_ERR/PTR_ERR confusion + * NFS: Fix nfs_migrate_page() + * md/bitmap: protect against bitmap removal while being updated. + * futex: Take mmap_sem for get_user_pages in fault_in_user_writeable + * devpts_get_tty() should validate inode + * debugfs: fix create mutex racy fops and private data + * Driver core: fix race in dev_driver_string + * Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN + * mac80211: Fix bug in computing crc over dynamic IEs in beacon + * mac80211: Fixed bug in mesh portal paths + * mac80211: Revert 'Use correct sign for mesh active path refresh' + * mac80211: fix scan abort sanity checks + * wireless: correctly report signal value for IEEE80211_HW_SIGNAL_UNSPEC + * rtl8187: Fix wrong rfkill switch mask for some models + * x86: Fix bogus warning in apic_noop.apic_write() + * mm: hugetlb: fix hugepage memory leak in mincore() + * mm: hugetlb: fix hugepage memory leak in walk_page_range() + * powerpc/windfarm: Add detection for second cpu pump + * powerpc/therm_adt746x: Record pwm invert bit at module load time] + * powerpc: Fix usage of 64-bit instruction in 32-bit altivec code + * drm/radeon/kms: Add quirk for HIS X1300 board + * drm/radeon/kms: handle vblanks properly with dpms on + * drm/radeon/kms: fix legacy crtc2 dpms + * drm/radeon/kms: fix vram setup on rs600 + * drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size + * drm/ttm: Fix build failure due to missing struct page + * drm/i915: Set the error code after failing to insert new offset into mm + ht. + * drm/i915: Add the missing clonemask for display port on Ironlake + * xen/xenbus: make DEVICE_ATTR()s static + * xen: re-register runstate area earlier on resume. + * xen: restore runstate_info even if !have_vcpu_info_placement + * xen: correctly restore pfn_to_mfn_list_list after resume + * xen: register timer interrupt with IRQF_TIMER + * xen: register runstate on secondary CPUs + * xen: don't call dpm_resume_noirq() with interrupts disabled. + * xen: register runstate info for boot CPU early + * xen: call clock resume notifier on all CPUs + * xen: improve error handling in do_suspend. + * xen: don't leak IRQs over suspend/resume. + * xen: use iret for return from 64b kernel to 32b usermode + * xen: explicitly create/destroy stop_machine workqueues outside + suspend/resume region. + * Xen balloon: fix totalram_pages counting. + * xen: try harder to balloon up under memory pressure. + * dm exception store: free tmp_store on persistent flag error + * dm snapshot: only take lock for statustype info not table + * dm crypt: move private iv fields to structs + * dm crypt: restructure essiv error path + * dm: avoid _hash_lock deadlock + * dm snapshot: cope with chunk size larger than origin + * dm crypt: separate essiv allocation from initialisation + * dm crypt: make wipe message also wipe essiv key + * slc90e66: fix UDMA handling + * tcp: Stalling connections: Fix timeout calculation routine + * ip_fragment: also adjust skb->truesize for packets not owned by a + socket + * b44 WOL setup: one-bit-off stack corruption kernel panic fix + * sparc64: Don't specify IRQF_SHARED for LDC interrupts. + * sparc64: Fix overly strict range type matching for PCI devices. + * sparc64: Fix stack debugging IRQ stack regression. + * sparc: Set UTS_MACHINE correctly. + * b43legacy: avoid PPC fault during resume + * tracing: Fix event format export + * ath9k: Fix TX hang poll routine + * ath9k: fix processing of TX PS null data frames + * ath9k: Fix maximum tx fifo settings for single stream devices + * ath9k: fix tx status reporting + * mac80211: Fix dynamic power save for scanning. + * drm/i915: Fix sync to vblank when VGA output is turned off + * memcg: fix memory.memsw.usage_in_bytes for root cgroup + * thinkpad-acpi: fix default brightness_mode for R50e/R51 + * thinkpad-acpi: preserve rfkill state across suspend/resume + * ipw2100: fix rebooting hang with driver loaded + * matroxfb: fix problems with display stability + * acerhdf: add new BIOS versions + * asus-laptop: change light sens default values. + * vmalloc: conditionalize build of pcpu_get_vm_areas() + * ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f. + * net: Fix userspace RTM_NEWLINK notifications. + * ext3: Fix data / filesystem corruption when write fails to copy data + * V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added. + * bcm63xx_enet: fix compilation failure after get_stats_count removal + * x86: Under BIOS control, restore AP's APIC_LVTTHMR to the BSP value + * drm/i915: Avoid NULL dereference with component_only tv_modes + * drm/i915: PineView only has LVDS and CRT ports + * drm/i915: Fix LVDS stability issue on Ironlake + * mm: sigbus instead of abusing oom + * ipvs: zero usvc and udest + * jffs2: Fix long-standing bug with symlink garbage collection. + * intel-iommu: Detect DMAR in hyperspace at probe time. + * intel-iommu: Apply BIOS sanity checks for interrupt remapping too. + * intel-iommu: Check for an RMRR which ends before it starts. + * intel-iommu: Fix oops with intel_iommu=igfx_off + * intel-iommu: ignore page table validation in pass through mode + * netfilter: xtables: document minimal required version + * perf_event: Fix incorrect range check on cpu number + * implement early_io{re,un}map for ia64 + * Linux 2.6.32.2 + + -- Andy Whitcroft Thu, 07 Jan 2010 15:28:43 +0000 + +linux (2.6.32-9.13) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_B43_PHY_LP + - LP: #493059 + * include modules.builtin in the binary debs + * config-check -- add a configuration enforcer + * config-check -- add a unit-test suite to the checker + * [Config] Enable CONFIG_SYN_COOKIES for versatile + * [Config] Enable CONFIG_SECURITY_SMACK for ports + * [Config] Enable CONFIG_SECURITY_FILE_CAPABILITIES for ports + * [Config] Disable CONFIG_COMPAT_BRK for ports + * getabis -- add armel versatile to the list + + [ Brad Figg ] + + * SAUCE: Increase the default prealloc buffer for HDA audio devices + (non-modem) + + [ Manoj Iyer ] + + * ubuntu: onmibook -- Added missing BOM file + + [ Tim Gardner ] + + * ubuntu: fsam7400 -- Cleanup Makefile + + [ Upstream Kernel Changes ] + + * Revert "ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT" + * signal: Fix alternate signal stack check + * SCSI: scsi_lib_dma: fix bug with dma maps on nested scsi objects + * SCSI: osd_protocol.h: Add missing #include + * SCSI: megaraid_sas: fix 64 bit sense pointer truncation + * ext4: fix potential buffer head leak when add_dirent_to_buf() returns + ENOSPC + * ext4: avoid divide by zero when trying to mount a corrupted file system + * ext4: fix the returned block count if EXT4_IOC_MOVE_EXT fails + * ext4: fix lock order problem in ext4_move_extents() + * ext4: fix possible recursive locking warning in EXT4_IOC_MOVE_EXT + * ext4: plug a buffer_head leak in an error path of ext4_iget() + * ext4: make sure directory and symlink blocks are revoked + * ext4: fix i_flags access in ext4_da_writepages_trans_blocks() + * ext4: journal all modifications in ext4_xattr_set_handle + * ext4: don't update the superblock in ext4_statfs() + * ext4: fix uninit block bitmap initialization when s_meta_first_bg is + non-zero + * ext4: fix block validity checks so they work correctly with meta_bg + * ext4: avoid issuing unnecessary barriers + * ext4: fix error handling in ext4_ind_get_blocks() + * ext4: make trim/discard optional (and off by default) + * ext4: make "norecovery" an alias for "noload" + * ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT + * ext4: initialize moved_len before calling ext4_move_extents() + * ext4: move_extent_per_page() cleanup + * jbd2: Add ENOMEM checking in and for + jbd2_journal_write_metadata_buffer() + * ext4: Return the PTR_ERR of the correct pointer in + setup_new_group_blocks() + * ext4: Avoid data / filesystem corruption when write fails to copy data + * ext4: wait for log to commit when umounting + * ext4: remove blocks from inode prealloc list on failure + * ext4: ext4_get_reserved_space() must return bytes instead of blocks + * ext4: quota macros cleanup + * ext4: fix incorrect block reservation on quota transfer. + * ext4: Wait for proper transaction commit on fsync + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + * ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem) + * Linux 2.6.32.1 + * kbuild: generate modules.builtin + * (pre-stable) drm/i915: Fix sync to vblank when VGA output is turned off + - LP: #494461 + * (pre-stable) drm/i915: Avoid NULL dereference with component_only + tv_modes + - LP: #494045 + + [ Zhao Yakui ] + + * (pre-stable) acpi: Use the ARB_DISABLE for the CPU which model id is + less than 0x0f. + - LP: #481765 + + -- Andy Whitcroft Thu, 17 Dec 2009 15:41:21 +0000 + +linux (2.6.32-8.12) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: AppArmor -- add linux/err.h for ERR_PTR + + -- Andy Whitcroft Sat, 12 Dec 2009 10:56:16 +0000 + +linux (2.6.32-8.11) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches + up" + * Revert "SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition." + * Revert "SAUCE: AppArmor: Fix refcounting bug causing leak of creds" + * Revert "SAUCE: AppArmor: Fix cap audit_caching preemption disabling" + * Revert "SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds" + * Revert "SAUCE: AppArmor: Fix oops after profile removal" + * Revert "SAUCE: AppArmor: AppArmor disallows truncate of deleted files." + * Revert "SAUCE: AppArmor: AppArmor fails to audit change_hat correctly" + * Revert "SAUCE: AppArmor: Policy load and replacement can fail to alloc + mem" + * Revert "SAUCE: AppArmor: AppArmor wrongly reports allow perms as + denied" + * Revert "SAUCE: AppArmor: Fix mediation of "deleted" paths" + * Revert "SAUCE: AppArmor: Fix off by 2 error in getprocattr mem + allocation" + * Revert "SAUCE: AppArmor: Set error code after structure + initialization." + * Revert "AppArmor -- fix pstrace_may_access rename" + * Revert "ubuntu: AppArmor security module" + * Revert "SAUCE: Add config option to set a default LSM" + * Revert "ubuntu: fsam7400 -- sw kill switch driver" + * Revert "[Config] fsam7400 -- enable" + * Revert "[Config] AUFS -- enable" + * Revert "ubuntu: AUFS -- aufs2-30 20090727" + * Revert "ubuntu: AUFS -- export various core functions -- fixes" + * Revert "ubuntu: AUFS -- export various core functions" + * Revert "[Config] ubuntu/iscsitarget -- disable" + * Revert "[Config] iscsitarget -- enable" + * Revert "ubuntu: iscsitarget -- SVN revision r214" + * update Vcs-Git to point to the correct repository + - LP: #493589 + * update build environment overrides to lucid + - LP: #493589 + * [Config] enable CONFIG_DEVTMPFS + * [Config] update all configs following AppArmor 2009-12-08 update + * SAUCE: isapnp_init: make isa PNP scans occur async + * [Config] fsam7400 -- enable + * [Config] omnibook -- enable + * [Config] cleanup CONFIG_AUDIT + * ubuntu: AUFS -- export various core functions (aufs2-base.patch) + * ubuntu: AUFS -- export various core functions (aufs2-standalone.patch) + * ubuntu: AUFS -- aufs2 20091209 + * [Config] AUFS -- enable + * [Config] iscsitarget -- enable + + [ Arjan van de Ven ] + + * SAUCE: KMS: cache the EDID information of the LVDS + + [ Colin Watson ] + + * bnx2: update d-i firmware filenames + - LP: #494052 + * add cdc_ether to nic-usb-modules udeb + - LP: #495060 + + [ John Johansen ] + + * ubuntu: AppArmor -- mainline 2009-10-08 + + [ Manoj Iyer ] + + * ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M 7400 + * ubuntu: omnibook -- support Toshiba (HP) netbooks + * ubuntu: iscsitarget --- version 1.4.19 + - LP: #494693 + + [ Surbhi Palande ] + + * SAUCE: Make populate_rootfs asynchronous + + [ Tim Gardner ] + + * Parallelize flavour builds and packaging + * [Config] Enable CONFIG_KSM + + [ Upstream Kernel Changes ] + + * Config option to set a default LSM + * LSM: Add security_path_chroot(). + * LSM: Add security_path_chroot(). + * LSM: Move security_path_chmod()/security_path_chown() to after + mutex_lock(). + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + + -- Andy Whitcroft Fri, 11 Dec 2009 17:45:19 +0000 + +linux (2.6.32-7.10) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable CONFIG_THUMB2_KERNEL to fix arm FTBFS + + -- Andy Whitcroft Sun, 06 Dec 2009 12:56:48 +0000 + +linux (2.6.32-7.9) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: set /proc/acpi/video/*/DOS to 4 by default + - LP: #458982 + * SAUCE: ensure vga16fb loads if no other driver claims the VGA device + * [Config] update configs following versatile switch to V7 + * rebased to v2.6.32 + * [Config] update configs following rebase to v2.6.32 + * [Config] update ports configs following rebase to v2.6.32 + * SAUCE: default ATI Radeon KMS to off until userspace catches up + + [ Arjan van de Ven ] + + * SAUCE: vfs: Add a trace point in the mark_inode_dirty function + + [ Leann Ogasawara ] + + * [SCSI] megaraid_sas: remove sysfs poll_mode_io world writeable + permissions + - CVE-2009-3939 + + [ Loic Minier ] + + * SAUCE: select a v7 CPU for versatile + + [ Takashi Iwai ] + + * SAUCE: ALSA: hda - Add power on/off counter + + [ Upstream changes ] + + * rebased to v2.6.32 + + -- Andy Whitcroft Fri, 04 Dec 2009 10:44:50 +0000 + +linux (2.6.32-6.8) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] disable SSB devices for armel + + -- Andy Whitcroft Sat, 28 Nov 2009 12:16:40 +0000 + +linux (2.6.32-6.7) lucid; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches up" + * Revert "SAUCE: Dell XPS710 reboot quirk" + * Revert "SAUCE: Link acpi-cpufreq.o first" + * Revert "SAUCE: LPIA Logical reset of USB port on resume" + * Revert "SAUCE: LPIA Reboot fix for Intel Crownbeach development boards" + * Revert "SAUCE: Enable HDMI audio codec on Studio XPS 1340" + * Revert "SAUCE: Dell laptop digital mic does not work, PCI 1028:0271" + * Revert "Add Dell Dimension 9200 reboot quirk" + * Revert "SAUCE: Correctly blacklist Thinkpad r40e in ACPI" + * Revert "SAUCE: tulip: Define ULI PCI ID's" + * Revert "SAUCE: Lower warning level of some PCI messages" + * Revert "mac80211: fix two issues in debugfs" + Drop a number of known redundant commits as identified in the Ubuntu + delta review blueprint. + + * reenable armel versatile flavour + * [Config] disable CONFIG_USB_DEVICEFS + + [ Tim Gardner ] + + * [Config] udeb: Add squashfs to fs-core-modules + - LP: #352615 + * [Config] Create a real squashfs udeb + - LP: #352615 + + + -- Andy Whitcroft Fri, 27 Nov 2009 17:31:16 +0000 + +linux (2.6.32-5.6) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc8 + * update configs following rebase to v2.6.32-rc8 + * update ports configs since rebase to v2.6.32-rc8 + * [Config] enable cgroup options + - LP: #480739 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc8 + + -- Andy Whitcroft Mon, 23 Nov 2009 11:16:14 +0000 + +linux (2.6.32-4.5) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * rebase to v2.6.32-rc7 + * resync with Karmic proposed + + [ John Johansen ] + + * SAUCE: AppArmor: Fix oops after profile removal + - LP: #475619 + * SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds + - LP: #437258 + * SAUCE: AppArmor: Fix cap audit_caching preemption disabling + - LP: #479102 + * SAUCE: AppArmor: Fix refcounting bug causing leak of creds + - LP: #479115 + * SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition. + - LP: #480112 + + [ Ubuntu Changes ] + + * resync with Karmic proposed (ddbc670a86a3dee18541a3734149f250ff307adf) + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc7 + + -- Andy Whitcroft Fri, 13 Nov 2009 11:35:13 +0000 + +linux (2.6.32-3.4) lucid; urgency=low + + [ Andy Whitcroft ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * [Upstream] add local prefix to oss local change_bits + + [ Upstream Kernel Changes ] + + * mtd/maps: gpio-addr-flash: pull in linux/ headers rather than asm/ + * mtd/maps: gpio-addr-flash: depend on GPIO arch support + + -- Andy Whitcroft Wed, 11 Nov 2009 14:47:04 +0000 + +linux (2.6.32-3.3) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc6 + * [Config] update configs following rebase to v2.6.32-rc6 + * [Config] update ports configs following rebase to v2.6.32-rc6 + * resync with Karmic Ubuntu-2.6.31-15.49 + * [Config] add module ignores for broken drivers + + [ John Johansen ] + + * SAUCE: AppArmor: AppArmor wrongly reports allow perms as denied + - LP: #453335 + * SAUCE: AppArmor: Policy load and replacement can fail to alloc mem + - LP: #458299 + * SAUCE: AppArmor: AppArmor fails to audit change_hat correctly + - LP: #462824 + * SAUCE: AppArmor: AppArmor disallows truncate of deleted files. + - LP: #451375 + + [ Kees Cook ] + + * SAUCE: Fix nx_enable reporting + - LP: #454285 + + [ Scott James Remnant ] + + * Revert "SAUCE: trace: add trace_event for the open() syscall" + * SAUCE: trace: add trace events for open(), exec() and uselib() + - LP: #462111 + + [ Stefan Bader ] + + * SAUCE: Fix sub-flavour script to not stop on missing directories + - LP: #453073 + + [ Ubuntu Changes ] + + * resync with Karmic Ubuntu-2.6.31-15.49 + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc6 + - LP: #464552 + + -- Andy Whitcroft Tue, 10 Nov 2009 15:00:57 +0000 + +linux (2.6.32-2.2) lucid; urgency=low + + [ Andy Whitcroft ] + + * install the full changelog with the binary package + * changelog -- explicitly note rebases and clean history + * reinstate armel.mk with no flavours + - LP: #449637 + * [Upstream] block: silently error unsupported empty barriers too + - LP: #420423 + * [Config] udate configs following karmic resync + * [Config] update ports configs following karmic resync + * [Upstream] lirc -- follow removal of .id element + + [ Colin Watson ] + + * Use section 'admin' rather than 'base' + * Add more e100 firmware to nic-modules + - LP: #451872 + * Add qla1280 firmware to scsi-modules + - LP: #381037 + + [ John Johansen ] + + * SAUCE: AppArmor: Set error code after structure initialization. + - LP: #427948 + * SAUCE: AppArmor: Fix off by 2 error in getprocattr mem allocation + - LP: #446595 + * SAUCE: AppArmor: Fix mediation of "deleted" paths + + [ Kees Cook ] + + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + + [ Leann Ogasawara ] + + * SAUCE: (drop after 2.6.31) input: Add support for filtering input + events + - LP: #430809 + * SAUCE: (drop after 2.6.31) dell-laptop: Trigger rfkill updates on wifi + toggle switch press + - LP: #430809 + + [ Luke Yelavich ] + + * SAUCE: Add sr_mod to the scsi-modules udeb for powerpc + * [Config] Add sd_mod to scsi-modules udeb for powerpc + + [ Mario Limonciello ] + + * SAUCE: Update to LIRC 0.8.6 + - LP: #432678 + * SAUCE: dell-laptop: Store the HW switch status internally rather than + requerying every time + - LP: #430809 + * SAUCE: dell-laptop: Blacklist machines not supporting dell-laptop + - LP: #430809 + + [ Stefan Bader ] + + * [Upstream] acerhdf: Limit modalias matching to supported boards + - LP: #435958 + + [ Tim Gardner ] + + * [Upstream] i915: Fix i2c init message + - LP: #409361 + * [Config] Add sym53c8xx.ko to virtual sub-flavour + - LP: #439415 + * [Config] Add d101m_ucode.bin to d-i/firmware/nic-modules + - LP: #439456 + * [Config] Set default I/O scheduler back to CFQ for desktop flavours + - LP: #381300 + * SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros + - LP: #430694 + * SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915 + - LP: #430694 + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT + - LP: #430694 + * SAUCE: Raise the default console 'quiet' level to 2 + * [Config] CONFIG_X86_PAT=y + * [Config] Add armel arch to linux-libc-dev arches. + - LP: #449637 + * [Config] CONFIG_X86_MCE + * [Upstream] (drop after 2.6.31) Input: synaptics - add another Protege + M300 to rate blacklist + - LP: #433801 + + [ Upstream Kernel Changes ] + + * sgi-gru: Fix kernel stack buffer overrun, CVE-2009-2584 + * drm/i915: Fix FDI M/N setting according with correct color depth + - LP: #416792 + + -- Andy Whitcroft Thu, 22 Oct 2009 16:53:33 +0100 + +linux (2.6.32-1.1) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.32-rc3 + * [Config] update configs following rebase to 2.6.32-rc3 + * [Config] update ports configs following rebase to 2.6.32-rc3 + * AppArmor -- fix pstrace_may_access rename + * staging/android -- disable + * ubuntu: dm-raid-45 -- update to compile with 2.6.32 + * ubuntu: drbd -- disable + * staging/comdi -- disable + * staging/go7007 -- disable + * [Config] staging/winbond -- disable + * [Config] ubuntu/iscsitarget -- disable + * [d-i] cbc and ecb are builtin make them optional in udebs + * rebase to v2.6.32-rc5 + * [Config] update configs following rebase to v2.6.32-rc5 + * [Config] update ports configs following rebase to v2.6.31-rc5 + + [ Tim Gardner ] + + * [Config] Add cpio as a build dependency. + + [ Upstream Kernel Changes ] + + * rebase to v2.6.32-rc3 + * rebase to v2.6.32-rc5 + + -- Andy Whitcroft Mon, 05 Oct 2009 15:48:58 +0100 + +linux (2.6.31-11.37) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Increase kernel log buffer to 256K for amd64 flavours + - LP: #424810 + * [Config] Set HZ=100 for amd64 flavours + - LP: #438234 + * [Upstream] e1000e: Emit notice instead of an error when + pci_enable_pcie_error_reporting() fails + - LP: #436370 + + [ Upstream Kernel Changes ] + + * n_tty: honor opost flag for echoes + * n_tty: move echoctl check and clean up logic + - LP: #438310 + + * Revert "[Upstream] drm/i915: Check that the relocation points to within + the target" - Use upstream cherry-pick. + * drm/i915: Check that the relocation points to within the target + - LP: #429241 + + * drm/i915: fix tiling on IGDNG + * drm/i915: add B43 chipset support + * agp/intel: Add B43 chipset support + Intel request from kernel team mailing list. + + * HID: completely remove apple mightymouse from blacklist + - LP: #428111 + + -- Tim Gardner Mon, 28 Sep 2009 11:47:29 -0600 + +linux (2.6.31-11.36) karmic; urgency=low + + [ Brian Rogers ] + + * SAUCE: (drop after 2.6.31) em28xx: ir-kbd-i2c init data needs a + persistent object + * SAUCE: (drop after 2.6.31) saa7134: ir-kbd-i2c init data needs a + persistent object + + [ Takashi Iwai ] + + * [Upstream] ALSA: hda - Add another entry for Nvidia HDMI device + - LP: #416482 + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.31) eCryptfs: Prevent lower dentry from going + negative during unlink + + [ Upstream Kernel Changes ] + + * sg: fix oops in the error path in sg_build_indirect() + * mpt2sas : Rescan topology from Interrupt context instead of work thread + * mpt2sas: Prevent sending command to FW while Host Reset + * mpt2sas: setting SDEV into RUNNING state from Interrupt context + * mpt2sas: Raid 10 Volume is showing as Raid 1E in dmesg + * SCSI: fix oops during scsi scanning + * SCSI: libsrp: fix memory leak in srp_ring_free() + * cfg80211: fix looping soft lockup in find_ie() + * ath5k: write PCU registers on initial reset + * binfmt_elf: fix PT_INTERP bss handling + * TPM: Fixup boot probe timeout for tpm_tis driver + * md: Fix "strchr" [drivers/md/dm-log-userspace.ko] undefined! + * x86/amd-iommu: fix broken check in amd_iommu_flush_all_devices + * fix undefined reference to user_shm_unlock + * perf_counter: Fix buffer overflow in perf_copy_attr() + * perf_counter: Start counting time enabled when group leader gets + enabled + * powerpc/perf_counters: Reduce stack usage of power_check_constraints + * powerpc: Fix bug where perf_counters breaks oprofile + * powerpc/ps3: Workaround for flash memory I/O error + * block: don't assume device has a request list backing in nr_requests + store + * agp/intel: remove restore in resume + * ALSA: cs46xx - Fix minimum period size + * ASoC: Fix WM835x Out4 capture enumeration + * sound: oxygen: work around MCE when changing volume + * mlx4_core: Allocate and map sufficient ICM memory for EQ context + * perf stat: Change noise calculation to use stddev + * x86: Fix x86_model test in es7000_apic_is_cluster() + * x86/i386: Make sure stack-protector segment base is cache aligned + * PCI: apply nv_msi_ht_cap_quirk on resume too + * x86, pat: Fix cacheflush address in change_page_attr_set_clr() + * ARM: 5691/1: fix cache aliasing issues between kmap() and kmap_atomic() + with highmem + * KVM guest: do not batch pte updates from interrupt context + * KVM: Fix coalesced interrupt reporting in IOAPIC + * KVM: VMX: Check cpl before emulating debug register access + * KVM guest: fix bogus wallclock physical address calculation + * KVM: x86: Disallow hypercalls for guest callers in rings > 0 + * KVM: VMX: Fix cr8 exiting control clobbering by EPT + * KVM: x86 emulator: Implement zero-extended immediate decoding + * KVM: MMU: make __kvm_mmu_free_some_pages handle empty list + * KVM: x86 emulator: fix jmp far decoding (opcode 0xea) + * KVM: limit lapic periodic timer frequency + * libata: fix off-by-one error in ata_tf_read_block() + * PCI quirk: update 82576 device ids in SR-IOV quirks list + * PCI: Unhide the SMBus on the Compaq Evo D510 USDT + * powerpc/pseries: Fix to handle slb resize across migration + * Linux 2.6.31.1 + + -- Tim Gardner Thu, 24 Sep 2009 13:04:28 -0600 + +linux (2.6.31-10.35) karmic; urgency=low + + [ Amit Kucheria ] + + * Disable CONFIG_UEVENT_HELPER_PATH + + [ Andy Whitcroft ] + + * [Config] Enable CONFIG_USB_GADGET_DUMMY_HCD + * remove the tlsup driver + * remove lmpcm logitech driver support + + [ Bryan Wu ] + + * Add 3 missing files to prerm remove file list + - LP: #345623, #415832 + + [ Chris Wilson ] + + * [Upstream] drm/i915: Check that the relocation points to within the + target + - LP: #429241 + + [ Luke Yelavich ] + + * [Config] Set CONFIG_EXT4_FS=y on ports architectures + + [ Manoj Iyer ] + + * SAUCE: Added quirk to recognize GE0301 3G modem as an interface. + - LP: #348861 + + [ Tim Gardner ] + + * Revert "[Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) white-list" + * Revert "[Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) white-list" + Upstream suggests that this is not the right approach. + + * [Config] Set default I/O scheduler to DEADLINE + CFQ seems to have some load related problems which are often exacerbated by sreadahead. + - LP: #381300 + + [ ubuntu@tjworld.net ] + + * SAUCE: ipw2200: Enable LED by default + - LP: #21367 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Add support for new AMD HD audio devices + - LP: #430564 + + -- Andy Whitcroft Wed, 16 Sep 2009 15:37:49 +0100 + +linux (2.6.31-10.34) karmic; urgency=low + + [ Ted Tso ] + + * [Upstream] ext3: Don't update superblock write time when filesystem is + read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 16:00:45 -0600 + +linux (2.6.31-10.33) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] dvb-usb: fix tuning with Cinergy T2 + - LP: #421258 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + (really, really fix it this time) + - LP: #423426 + * [Config] Set CONFIG_CACHEFILES=m for all flavours + + [ Upstream Kernel Changes ] + + * ext4: Don't update superblock write time when filesystem is read-only + - LP: #427822 + + -- Tim Gardner Tue, 15 Sep 2009 07:50:21 -0600 + +linux (2.6.31-10.32) karmic; urgency=low + + [ Eric Miao ] + + * [Config] enable module support for memory stick + - LP: #159951 + + [ Tim Gardner ] + + * [Config] Unconditionally copy files from sub-flavours lists. + - LP: #423426 + + -- Tim Gardner Thu, 10 Sep 2009 15:57:55 -0600 + +linux (2.6.31-10.31) karmic; urgency=low + + [ Andy Whitcroft ] + + * rebase to v2.6.31 final + + [ Colin Watson ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + + [ Ike Panhc ] + + * [Upstream] Pull latest update of lenovo-sl-laptop + + [ Peter Feuerer ] + + * [Upstream] (drop after 2.6.31) acerhdf: fix fan control for AOA150 + model + - LP: #426691 + + [ Tim Gardner ] + + * [Config] De-macro some package names. + + [ Upstream Changes ] + + * rebase to 2.6.31 final. + + -- Andy Whitcroft Thu, 10 Sep 2009 09:38:10 +0100 + +linux (2.6.31-10.30) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Enable CONFIG_USB_DEVICEFS + - LP: #417748 + * [Config] Populate the config-update template a bit more + + [ Andy Whitcroft ] + + * rebase to v2.6.31-rc9 + * [Config] update configs following rebase to v2.6.31-rc9 + * [Config] update ports configs following rebase to v2.6.31-rc9 + + [ Colin Ian King ] + + * SAUCE: wireless: hostap, fix oops due to early probing interrupt + - LP: #254837 + + [ Jerone Young ] + + * [Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) + white-list + - LP: #281732 + + [ John Johansen ] + + * SAUCE: AppArmor: Fix profile attachment for regexp based profile names + - LP: #419308 + * SAUCE: AppArmor: Return the correct error codes on profile + addition/removal + - LP: #408473 + * SAUCE: AppArmor: Fix OOPS in profile listing, and display full list + - LP: #408454 + * SAUCE: AppArmor: Fix mapping of pux to new internal permission format + - LP: #419222 + * SAUCE: AppArmor: Fix change_profile failure + - LP: #401931 + * SAUCE: AppArmor: Tell git to ignore generated include files + - LP: #419505 + + [ Stefan Bader ] + + * [Upstream] acpi: video: Loosen strictness of video bus detection code + - LP: #333386 + * SAUCE: Remove ov511 driver from ubuntu subdirectory + + [ Tim Gardner ] + + * [Config] Exclude char-modules from non-x86 udeb creation + * SAUCE: Notify the ACPI call chain of AC events + * [Config] CONFIG_SATA_VIA=m + - LP: #403385 + * [Config] Build in all phylib support modules. + * [Config] Don't fail when sub-flavour files are missing + - LP: #423426 + * [Config] Set CONFIG_LSM_MMAP_MIN_ADDR=0 + - LP: #423513 + + [ Upstream ] + + * Rebased against v2.6.31-rc9 + + -- Andy Whitcroft Mon, 07 Sep 2009 11:33:45 +0100 + +linux (2.6.31-9.29) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] agp/intel: support for new chip variant of IGDNG mobile + - LP: #419993 + * [Config] d-i/modules: Add new char-modules file, initialize with + intel-agp + - LP: #420605 + + [ Upstream ] + + * Rebased against 2.6.31-rc8 plus some inotify regression patches: + up through git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git + adda766193ea1cf3137484a9521972d080d0b7af. + + -- Tim Gardner Fri, 28 Aug 2009 06:31:30 -0600 + +linux (2.6.31-8.28) karmic; urgency=low + + [ Ike Panhc ] + + * [Config] Let nic-shared-modules depends on crypto-modules + - LP: #360966 + + [ Leann Ogasawara ] + + * [Upstream] (drop after 2.6.31) drm/i915: increase default latency + constant + - LP: #412492 + + [ Mario Limonciello ] + + * [Upstream]: (drop after 2.6.31) dell-laptop: don't change softblock + status if HW switch is disabled + - LP: #418721 + * [Upstream]: (drop after 2.6.31) compal-laptop: Add support for known + Compal made Dell laptops + * [Upstream]: (drop after 2.6.31) compal-laptop: Replace sysfs support + with rfkill support + + [ Tim Gardner ] + + * [Config] Add acpiphp to virtual sub-flavour + - LP: #364916 + * Drop KSM patch set for now because of instabilities with encrypted swap. + - LP: #418781 + + -- Tim Gardner Wed, 26 Aug 2009 08:14:26 -0600 + +linux (2.6.31-7.27) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] updateconfigs updateportsconfigs after 2.6.31-rc7 rebase + * SAUCE: (drop after 2.6.31) Added KSM from mmotm-2009-08-20-19-18 + Replaces previous ksm patches from 2.6.31-6.25 + * [Config] KSM=y + + [ Upstream ] + + * Rebased against v2.6.31-rc7 + + -- Tim Gardner Sat, 22 Aug 2009 20:32:11 -0600 + +linux (2.6.31-6.26) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_BR_RAMFS + - LP: #414738 + * split out debian directory ready for abstraction + * add printdebian target to find branch target + * abstracted debian -- debian/files is not abstracted + * abstracted debian -- packages must be built in debian/ + * abstracted debian -- kernel-wedge needs to work in debian/ + * abstracted debian -- ensure we install the copyright file + * abstracted-debian -- drop the debian directories from headers + * abstracted-debian -- drop the debian directories from headers part 2 + * SAUCE: ubuntu-insert-changes -- follow abstracted debian + * [Upstream] aoe: ensure we initialise the request_queue correctly V2 + - LP: #410198 + + [ Luke Yelavich ] + + * [Config] Ports: Disable CONFIG_CPU_FREQ_DEBUG on powerpc-smp + * [Config] Ports: Re-enable windfarm modules on powerpc64-smp + - LP: #413150 + * [Config] Ports: Build all cpu frequency scaling governors into ports + kernels + * [Config] Ports: Build ext2 and ext3 modules into ports kernels + * [Config] Ports: CONFIG_PACKET=y for all ports kernels + * [Config] Ports: Enable PS3 network driver + + [ Stefan Bader ] + + * abstracted debian -- call $(DEBIAN)/rules using make + + [ Tim Gardner ] + + * [Config] Abstract the debian directory + * SAUCE: Improve error reporting in postinst + - LP: #358564 + + -- Tim Gardner Sun, 16 Aug 2009 20:33:28 -0600 + +linux (2.6.31-6.25) karmic; urgency=low + + [ Andy Whitcroft ] + + * script to generate Ubuntu changes from changelog + * [Config] standardise ANDROID options + * [Config] standardise CONFIG_ATM as module + * [Config] standardise CONFIG_LIB80211 as module + * [Config] disable CONFIG_PRINT_QUOTA_WARNING + * [Config] set CONFIG_CRAMFS as module + * [Config] enable CONFIG_DAB and modules + * [Config] set CONFIG_MAC80211_HWSIM as module + * [Config] set CONFIG_NET_CLS_FLOW as module + * [Config] set CONFIG_NF_CONNTRACK_SANE as module + * [Config] set CONFIG_NF_CT_PROTO_DCCP as module + * [Config] set CONFIG_RTC_DRV_DS1511 as module + * [Config] set CONFIG_RTC_DRV_R9701 as module + * [Config] set CONFIG_RTC_DRV_S35390A as module + * [Config] set CONFIG_TOIM3232_DONGLE as module + * [Config] standardise CONFIG_USB_MIDI_GADGET as module + * [Config] standardise CONFIG_USB_G_PRINTER as module + * [Config] standardise CONFIG_USB_SERIAL_IR as module + * [Config] set CONFIG_USB_SERIAL_IUU as module + * [Config] standardise CONFIG_USB_STORAGE_CYPRESS_ATACB as module + * [Config] standardise CONFIG_USB_STORAGE_ONETOUCH as module + * cleanup remains of dm-loop + * drop thinkpad ec and smapi support + * drop appleir + * [Config] update configs following rebase to v2.6.31-rc6 + * rebase to v2.6.31-rc6 + + [ Hugh Dickins ] + + * SAUCE: ksm patch 1, drop after 2.6.31 + * SAUCE: ksm patch 2, drop after 2.6.31 + * SAUCE: ksm patch 3, drop after 2.6.31 + * SAUCE: ksm patch 4, drop after 2.6.31 + * SAUCE: ksm patch 5, drop after 2.6.31 + * SAUCE: ksm patch 7, drop after 2.6.31 + + [ Izik Eidus ] + + * SAUCE: ksm patch 0, drop after 2.6.31 + * SAUCE: ksm patch 6, drop after 2.6.31 + * SAUCE: ksm patch 8, drop after 2.6.31 + * SAUCE: ksm patch 9, drop after 2.6.31 + + [ Luke Yelavich ] + + * [Config] Ports: Re-add PS3 modules to udebs + + [ Michael Casadevall ] + + * [Config] Update SPARC config and d-i files to reflect what can be built + + [ Tim Gardner ] + + * [Config] Removed armel package support + * [Config] Enabled CONFIG_KSM=y + + [ Upstream Kernel Changes ] + + * Rebased against v2.6.31-rc6 + * ARM: Cleanup: Revert "ARM: Add more cache memory types macros" + * ARM: Cleanup: Revert "Do not use OOB with MLC NAND" + * ARM: Cleanup: Revert "ARM: Make ARM arch aware of ubuntu/ drivers" + * ARM: Cleanup: Revert "ARM: IMX51: Make video capture drivers compile" + * ARM: Cleanup: Revert "ARM: IMX51: Fix isl29003 HWMON driver for i2c + changes" + * ARM: Cleanup: Revert "ARM: IMX51: IPU irq handler deadlock fix" + * ARM: Cleanup: Revert "ARM: IMX51: Babbage 2.5 needs a different system + revision" + * ARM: Cleanup: Revert "ARM: IMX51: Compile-in the IMX51 cpufreq driver + by default" + * ARM: Cleanup: Revert "ARM: IMX51: Enable ZONE_DMA for ARCH_MXC" + * ARM: Cleanup: Revert "ARM: IMX51: Make ARCH_MXC auto-enable + ARCH_MXC_CANONICAL" + * ARM: Cleanup: Revert "ARM: IMX51: Unconditionally disable + CONFIG_GPIOLIB" + * ARM: Cleanup: Revert "ARM: IMX51: Minimal changes for USB to work on + 2.6.31" + * ARM: Cleanup: Revert "ARM: IMX51: Fix plat-mxc/timer.c to handle imx51" + * ARM: Cleanup: Revert "ARM: IMX51: Make it compile." + * ARM: Cleanup: Revert "ARM: IMX51: Clean-up the craziness of including + mxc_uart.h _everywhere_" + * ARM: Cleanup: Revert "ARM: IMX51: Move board-mx51* header files to the + correct location" + * ARM: Cleanup: Revert "ARM: IMX51: Changed from snd_card_new to + snd_card_create" + * ARM: Cleanup: Revert "ARM: IMX51: Fix up merge error in Kconfig" + * ARM: Cleanup: Revert "ARM: IMX51: mxc_timer_init prototype" + * ARM: Cleanup: Revert "ARM: IMX51: Removed the mxc_gpio_port structure." + * ARM: Cleanup: Revert "ARM: IMX51: Added external declaration for + mxc_map_io." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: snd_soc_machine structure replaced + with snd_soc_card." + * ARM: Cleanup: Revert "ARM: IMX51: codec structure was moved to the card + structure" + * ARM: Cleanup: Revert "ARM: IMX51: Hack to add defines for + DMA_MODE_READ/WRITE/MASK" + * ARM: Cleanup: Revert "ARM: IMX51: Add SoC and board support for + Freescale mx51 platform" + * Driver core: add new device to bus's list before probing + * [Upstream] (drop after 2.6.31) ALSA: hda - Reduce click noise at + power-saving + - LP: #381693, #399750, #380892 + + -- Andy Whitcroft Fri, 14 Aug 2009 11:32:23 +0100 + +linux (2.6.31-5.24) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Make video capture drivers compile + * [Config] IMX51: Config updates + + [ Andy Whitcroft ] + + * remove leftovers of dm-bbr + + [ Leann Ogasawara ] + + * Add pata_cs5535 to pata-modules + - LP: #318805 + + [ Luke Yelavich ] + + * [Config] CONFIG_PPC64=y for powerpc64-smp + * [Config] Set the maximum number of CPUs to 1024 for powerpc64-smp + * [Config] CONFIG_PPC_PS3=y for powerpc64-smp + * [Config] CONFIG_PPC_MAPLE=y on powerpc64-smp + * [Config] CONFIG_PPC_PASEMI=y on powerpc64-smp + * [Config] CONFIG_CPU_FREQ_PMAC64=y on powerpc64-smp + * [Config] Enable all PS3 drivers in powerpc64-smp + + [ Mario Limonciello ] + + * LIRC -- fix lirc-i2c 2.6.31 compilation + + [ Matthew Garrett ] + + * [Upstream] dell-laptop: Fix rfkill state queries + + [ Tim Gardner ] + + * [Config] Ignore armel ABI and module changes + * [Config] Update configs after rebase against 2.6.31-rc5 + + [ Upstream ] + + * Rebased to 2.6.31-rc5 + + -- Andy Whitcroft Tue, 28 Jul 2009 10:10:09 +0100 + +linux (2.6.31-4.23) karmic; urgency=low + + [ Andy Whitcroft ] + + * AUFS -- update to aufs2-30 20090727 + * [Config] enable AUFS FUSE support + + [ Luke Yelavich ] + + * [Config] CONFIG_JFS_FS=m on sparc + + [ Tim Gardner ] + + * [Upstream] dell-laptop: Fix rfkill state setting. + + -- Andy Whitcroft Mon, 27 Jul 2009 11:11:47 +0100 + +linux (2.6.31-4.22) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Add SoC and board support for Freescale mx51 platform + * ARM: IMX51: Move board-mx51* header files to the correct location + * ARM: IMX51: Clean-up the craziness of including mxc_uart.h _everywhere_ + * ARM: IMX51: Make it compile. + * ARM: IMX51: Unconditionally disable CONFIG_GPIOLIB + * ARM: IMX51: Make ARCH_MXC auto-enable ARCH_MXC_CANONICAL + * ARM: IMX51: Enable ZONE_DMA for ARCH_MXC + * ARM: IMX51: Compile-in the IMX51 cpufreq driver by default + * ARM: IMX51: Fix isl29003 HWMON driver for i2c changes + * ARM: USB: musb: Refer to musb_otg_timer_func under correct #ifdef + * ARM: staging: udlfb: Add vmalloc.h include + * UBUNTU [Config]: Bring imx51 config upto date with other flavours + + [ Brad Figg ] + + * ARM: IMX51: Hack to add defines for DMA_MODE_READ/WRITE/MASK + * ARM: IMX51: codec structure was moved to the card structure + * ARM: IMX51: snd_soc_machine structure replaced with snd_soc_card. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Added external declaration for mxc_map_io. + * ARM: IMX51: Removed the mxc_gpio_port structure. + * ARM: IMX51: mxc_timer_init prototype + * ARM: IMX51: Fix up merge error in Kconfig + * ARM: IMX51: Changed from snd_card_new to snd_card_create + + [ Dinh Nguyen ] + + * ARM: IMX51: Fix plat-mxc/timer.c to handle imx51 + * ARM: IMX51: Minimal changes for USB to work on 2.6.31 + * ARM: IMX51: Babbage 2.5 needs a different system revision + * ARM: IMX51: IPU irq handler deadlock fix + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_CAN=m + - LP: #327243 + * [Config] Enabled CONFIG_SERIAL=m + - LP: #397189 + + -- Tim Gardner Fri, 24 Jul 2009 06:19:10 -0600 + +linux (2.6.31-4.21) karmic; urgency=low + + [ Amit Kucheria ] + + * dm-raid-4-5: Add missing brackets around test_bit() + + [ John Johansen ] + + * AppArmor: Fix change_profile failing lpn401931 + * AppArmor: Fix determination of forced AUDIT messages. + * AppArmor: Fix oops in auditing of the policy interface offset + + -- Andy Whitcroft Thu, 23 Jul 2009 19:18:30 +0100 + +linux (2.6.31-4.20) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: iscsitarget -- update to SVN revision r214 + * SAUCE: iscsitarget -- renable driver + * [Config] consolidate lpia/lpia and i386/generic configs + * [Config] enable CRYPTO modules for all architectures + * [Config] enable cryptoloop + * [Config] enable various filesystems for armel + * [Config] sync i386 generic and generic-pae + * [Config] add the 386 (486 processors and above) flavour + * [Config] re-set DEFAULT_MMAP_MIN_ADDR + - LP: #399914 + * add genconfigs/genportsconfigs to extract the built configs + * updateconfigs -- alter concatenation order allow easier updates + * intelfb -- INTELFB now conflicts with DRM_I915 + * printchanges -- rebase tree does not have stable tags use changelog + * AppArmor: fix argument size missmatch on 64 bit builds + + [ Ike Panhc ] + + * Ship bnx2x firmware in nic-modules udeb + - LP: #360966 + + [ Jeff Mahoney ] + + * AppArmor: fix build failure on ia64 + + [ John Johansen ] + + * AppArmour: ensure apparmor enabled parmater is off if AppArmor fails to + initialize. + * AppArmour: fix auditing of domain transitions to include target profile + information + * AppArmor: fix C99 violation + * AppArmor: revert reporting of create to write permission. + * SAUCE: Add config option to set a default LSM + * [Config] enable AppArmor by default + * AppArmor: Fix NULL pointer dereference oops in profile attachment. + + [ Keith Packard ] + + * SAUCE: drm/i915: Allow frame buffers up to 4096x4096 on 915/945 class + hardware + - LP: #351756 + + [ Luke Yelavich ] + + * [Config] add .o files found in arch/powerpc/lib to all powerpc kernel + header packages + - LP: #355344 + + [ Michael Casadevall ] + + * [Config] update SPARC config files to allow success build + + [ Scott James Remnant ] + + * SAUCE: trace: add trace_event for the open() syscall + + [ Stefan Bader ] + + * SAUCE: jfs: Fix early release of acl in jfs_get_acl + - LP: #396780 + + [ Tim Gardner ] + + * [Upstream] Fix Soltech TA12 volume hotkeys not sending key release + - LP: #397499 + * [Upstream] USB Option driver - Add USB ID for Novatel MC727/U727/USB727 + refresh + - LP: #365291 + * [Config] SSB/B44 are common across all arches/flavours. + + [ Upstream ] + + * Rebased to 2.6.31-rc4 + + -- Andy Whitcroft Thu, 23 Jul 2009 08:41:39 +0100 + +linux (2.6.31-3.19) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] Disabled NDISWRAPPER" + * ndiswrapper -- fix i386 compilation failures on cmpxchg8b + * AUFS -- export various core functions + * AUFS -- export various core functions -- fixes + * AUFS -- core filesystem + * AUFS -- track changes in v2.6.31 + * [Config] Enable AUFS + * droppped 'iwl3945: do not send scan command if channel count zero' as it + is already upstream but failed to auto-drop on rebase. + + [ Eric Paris ] + + * SAUCE: fsnotify: use def_bool in kconfig instead of letting the user + choose + * SAUCE: inotify: check filename before dropping repeat events + * SAUCE: fsnotify: fix inotify tail drop check with path entries + + -- Andy Whitcroft Tue, 14 Jul 2009 12:52:55 +0100 + +linux (2.6.31-3.18) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "Add splice-2.6.23.patch from AUFS to export a symbol needed by + AUFS" + * Revert "Add put_filp.patch from AUFS to export a symbol needed by AUFS" + * Revert "Add sec_perm-2.6.24.patch from AUFS - export + security_inode_permission" + * clear out left over AUFS files and modifications + + [ Luke Yelavich ] + + * [Config] Enable CONFIG_USB_ISP116X_HCD on sparc + * SAUCE: Explicitly include header files to allow apparmor to build on + powerpc + * [Config] Enable CONFIG_BLK_DEV_IDECD on powerpc + + [ Tim Gardner ] + + * [Config] Dropped ubuntu/misc/wireless/acx + * [Config] Disabled NDISWRAPPER until the compile issues are fixed. + + [ Upstream ] + + * Rebased to 2.6.31-rc3 + + -- Andy Whitcroft Fri, 10 Jul 2009 18:59:33 +0100 + +linux (2.6.31-2.17) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_BLK_DEV_CRYPTOLOOP=m for sparc + * compcache -- remove redundant Kconfig entries part 2 + * compcache -- clean up CCFLAGS declarations + * [Config] enable AppArmor + * AppArmor: fix operator precidence issue in as_path_link + + [ John Johansen ] + + * AppArmor security module + * AppArmor: Correct mapping of file permissions. + * AppArmor: Turn auditing of ptrace on + + [ Luke Yelavich ] + + * [Config] disable CONFIG_DM_RAID45 on powerpc + + -- Andy Whitcroft Fri, 10 Jul 2009 15:02:05 +0100 + +linux (2.6.31-2.16) karmic; urgency=low + + [ Andy Whitcroft ] + + * compcache -- remove redundant Kconfig entries + added ignore and ignore.modules for all arches since the compcache update + changes the modules names as well as some compcache ABI values. + + [ Manoj Iyer ] + + * SAUCE: updated dm-raid45 module version to 2009.04.24 (2.6.30-rc3) + * SAUCE: update compcache version to 0.5.3 + + [ Tim Gardner ] + + * [Config]: Fix sparc FTBS by adding ignore.modules + + -- Tim Gardner Mon, 06 Jul 2009 13:35:29 -0600 + +linux (2.6.31-2.15) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: default ATI Radeon KMS to off until userspace catches up + * [Config] Update configs following rebase to 2.6.31-rc2 + * [Config] update ports configs following update to 2.6.31-rc2 + + [ Luke Yelavich ] + + * [Config] powerpc - Disable CONFIG_RDS + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + [ Upstream Kernel Changes ] + + * rebased to mainline 2.6.31-rc2 + + -- Andy Whitcroft Sat, 04 Jul 2009 17:39:13 +0100 + +linux (2.6.31-1.14) karmic; urgency=low + + [ Andy Whitcroft ] + + * update ndiswrapper to 1.55 + * remove leftovers of gfs + * [Config] powerpc: enable CONFIG_PPC_DISABLE_WERROR + + [ Luke Yelavich ] + + * [Config] re-enable and build the ide-pmac driver into powerpc kernels + * [Config] Build the ServerWorks Frodo / Apple K2 SATA driver into the + kernel + + [ Manoj Iyer ] + + * Remove snd-bt-sco ubuntu driver + + [ Michael Casadevall ] + + * [Config] updates ia64 config and d-i folders to allow succesful build + * [Config] Update powerpc and sparc for 2.6.31 + + [ Upstream Kernel Changes ] + + * intel-iommu: fix Identity Mapping to be arch independent + - LP: #384695 + * ACPI: video: prevent NULL deref in acpi_get_pci_dev() + + -- Andy Whitcroft Tue, 30 Jun 2009 17:47:32 +0100 + +linux (2.6.31-1.13) karmic; urgency=low + + [ Andy Whitcroft ] + + * REBASE: rebased to mainline 2.6.31-rc1 + - "UBUNTU: SAUCE: UHCI USB quirk for resume" + no longer applies, using deprecated interfaces, LPIA only, dropped + - "UBUNTU: SAUCE: Mask off garbage in Dell WMI scan code data" + changes now upstream, dropped + * [Config] Update configs following rebase to 2.6.31-rc1 + * [Config] update ports configs following update to 2.6.31-rc1 + + * [Config] disable broken staging driver CONFIG_STLC45XX + * SAUCE: fix compcache to use updates accessors + * [Config] disable staging driver CONFIG_VT6655 + * SAUCE: fix DRDB to use updates accessors + * [Disable] ndiswrapper needs update + * [Disable] LIRC I2C needs update + * [Disable] CONFIG_LENOVO_SL_LAPTOP needs update + * [Config] disable I2C_DESIGNWARE does not compile + * [Config] disable CONFIG_TLSUP for lpia + * [Config] disable CONFIG_FB_UDL for arm + * SAUCE: disable adding scsi headers to linux-libc-dev + + [ Mario Limonciello ] + + * SAUCE: Add LIRC drivers + + -- Andy Whitcroft Thu, 25 Jun 2009 12:06:22 +0100 + +linux (2.6.30-10.12) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] split out the ports configs into their own family + * [Config] update configs following introduction of ports family + + [ Upstream Kernel Changes ] + + * Revert "Rename linux-doc-PKGVER to linux-doc and clean up its + description". Fixes linux-doc package name conflicts for now. + - LP: #382115 + + -- Tim Gardner Mon, 22 Jun 2009 09:17:14 -0600 + +linux (2.6.30-10.11) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Comment splitconfig.pl and misc cleanup + * [Config] Rename all configs to the new naming scheme + * [Config] Splitconfig rework + * [Config] Rename scripts/misc/oldconfig to kernelconfig + * [Config] Fix build system for new config split + * [Config] Run updateconfigs after the splitconfig rework + + [ Andy Whitcroft ] + + * Revert "SAUCE: Default to i915.modeset=0 if CONFIG_DRM_I915_KMS=y" + * [Config] standardise CONFIG_STAGING=y + * [Config] standardise CONFIG_RD_LZMA=y + * [Config] CONFIG_PCI_IOV=y + * [Config] CONFIG_PCI_STUB=m + * [Config] merge kernel configs more agressively + + [ Colin Watson ] + + * [Config] Run kernel-wedge in $(builddir) rather than at the top level + * [Config] Add support for including firmware in udebs + * [Config] Ship bnx2 firmware in nic-modules udeb + - LP: #384861 + + [ Luke Yelavich ] + + * [Config] ports - Import of ports architectures into kernel packaging + infrastructure + * [Config] ports - Do not update ports kernel configurations by default + * [Config] ports - Disable ABI checking for ports architectures + * [Config] ports - Build drivers in ubuntu sub-directory on powerpc + * [Config] ports - Add control.d/vars.* files for ports architectures + * [Config] ports - Add ports architectures for linux-libc-dev + * [Config] ports - Create powerpc specific message-modules and + block-modules udebs + * [Config] ports - Add configuration files for ports architectures + + [ Manoj Iyer ] + + * [Config] Enable CONFIG_BLK_DEV_AEC62XX=m for amd64 and i386 + - LP: #329864 + + [ Michael Casadevall ] + + * [Config] ports - Fix compression of kernels + + [ Stefan Bader ] + + * [Upstream] mmc: prevent dangling block device from accessing stale + queues + - LP: #383668 + + [ Tim Gardner ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + * [Config] Implement i386 generic and generic-pae flavours + * [Config] ports - Add control info after integrating ports arches + * [Config] Removed auto-generated files from git + * [Config] Added netxen_nic to nic-modules + - LP: #389603 + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + -- Tim Gardner Mon, 15 Jun 2009 14:38:26 -0600 + +linux (2.6.30-9.10) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_SECURITY_TOMOYO=y (amd64, i386, lpia) + * [Config] CONFIG_KEXEC_JUMP=y (amd64, lpia) + * [Config] CONFIG_LENOVO_SL_LAPTOP=m (amd64, lpia) + * [Config] CONFIG_POHMELFS_CRYPTO=y (i386, amd64) + * [Config] CONFIG_SERIAL_MAX3100=m (i386, amd64, lpia) + * [Config] CONFIG_VIDEO_GO7007=m (amd64, i386) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30 final + + -- Andy Whitcroft Fri, 05 Jun 2009 11:42:53 +0100 + +linux (2.6.30-8.9) karmic; urgency=low + + [ Andy Whitcroft ] + + * Config update removed the following options: + CONFIG_EDAC_AMD8111=m + CONFIG_EDAC_AMD8131=m + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc8 + + -- Andy Whitcroft Wed, 03 Jun 2009 09:21:13 +0100 + +linux (2.6.30-7.8) karmic; urgency=low + + [ Andy Whitcroft ] + + * Enabled NEW configration options: + Paravirtualization layer for spinlocks (PARAVIRT_SPINLOCKS) [N/y/?] Y + Cisco FNIC Driver (FCOE_FNIC) [N/m/y/?] M + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc7 + + -- Andy Whitcroft Sat, 23 May 2009 23:47:24 +0100 + +linux (2.6.30-6.7) karmic; urgency=low + + [ Andy Whitcroft ] + + * Dropped: UBUNTU: SAUCE: input: Blacklist digitizers from joydev.c (now + upstream) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc6 + + -- Andy Whitcroft Mon, 18 May 2009 18:05:54 +0100 + +linux (2.6.30-5.6) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enable Keyspan USB serial device firmware in kernel module + - LP: #334285 + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc5 + + -- Tim Gardner Mon, 11 May 2009 12:02:16 -0600 + +linux (2.6.30-4.5) karmic; urgency=low + + [ Colin Watson ] + + * Build-Conflict with findutils (= 4.4.1-1ubuntu1), to avoid + /usr/include/asm/* going missing + - LP: #373214 + + -- Stefan Bader Fri, 08 May 2009 11:09:08 +0200 + +linux (2.6.30-3.4) karmic; urgency=low + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + + [ Stefan Bader ] + + * SAUCE: input: Blacklist digitizers from joydev.c + - LP: #300143 + + -- Tim Gardner Fri, 01 May 2009 14:00:42 -0600 + +linux (2.6.30-2.3) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enabled CC_STACKPROTECTOR=y for all x86en + - LP: #369152 + * SAUCE: Default to i915_modeset=0 if CONFIG_DRM_I915_KMS=y + * [Config] CONFIG_DRM_I915_KMS=y + * [Config] Set CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR to appropriate ARCH + minimums + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc4 + + -- Tim Gardner Thu, 30 Apr 2009 09:17:05 -0600 + +linux (2.6.30-1.2) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] armel: disable staging drivers, fixes FTBS + * [Config] armel imx51: Disable CONFIG_MTD_NAND_MXC, fixes FTBS + + [ Upstream Kernel Changes ] + + * mpt2sas: Change reset_type enum to avoid namespace collision. + Submitted upstream. + + -- Tim Gardner Tue, 28 Apr 2009 16:54:41 -0600 + +linux (2.6.30-1.1) karmic; urgency=low + + * Initial release after rebasing against v2.6.30-rc3 + + -- Tim Gardner Thu, 12 Mar 2009 19:16:07 -0600 --- linux-lts-raring-3.8.0.orig/debian.master/NOTES +++ linux-lts-raring-3.8.0/debian.master/NOTES @@ -0,0 +1,4 @@ +eSCO patch removed. Replaced upstream with a disable_esco module parm. +airprime: Module gone, use option driver instead +AppArmor: Patch is all there and ported. Ooops when enabled, so default + off (still can be enabled apparmor=1) --- linux-lts-raring-3.8.0.orig/debian.master/etc/getabis +++ linux-lts-raring-3.8.0/debian.master/etc/getabis @@ -0,0 +1,15 @@ +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 amd64 generic +getall i386 generic + +# Ports arches and flavours. --- linux-lts-raring-3.8.0.orig/debian.master/etc/kernelconfig +++ linux-lts-raring-3.8.0/debian.master/etc/kernelconfig @@ -0,0 +1,7 @@ +if [ "$variant" = "ports" ]; then + archs="" + family='ports' +else + archs="amd64 i386 armhf" + family='ubuntu' +fi --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/abiname +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/abiname @@ -0,0 +1 @@ +32 --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/fwinfo +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/fwinfo @@ -0,0 +1,622 @@ +firmware: 3826.arm +firmware: 3com/typhoon.bin +firmware: 6fire/dmx6fireap.ihx +firmware: 6fire/dmx6firecf.bin +firmware: 6fire/dmx6firel2.ihx +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: 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: ath3k-1.fw +firmware: ath6k/AR6003/hw2.0/athwlan.bin.z77 +firmware: ath6k/AR6003/hw2.0/bdata.bin +firmware: ath6k/AR6003/hw2.0/bdata.SD31.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.bin +firmware: ath6k/AR6003/hw2.1.1/bdata.SD31.bin +firmware: ath6k/AR6003/hw2.1.1/data.patch.bin +firmware: ath6k/AR6003/hw2.1.1/otp.bin +firmware: ath6k/AR6004/hw1.0/bdata.bin +firmware: ath6k/AR6004/hw1.0/bdata.DB132.bin +firmware: ath6k/AR6004/hw1.0/fw.ram.bin +firmware: ath6k/AR6004/hw1.1/bdata.bin +firmware: ath6k/AR6004/hw1.1/bdata.DB132.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: atmel_at76c502_3com.bin +firmware: atmel_at76c502_3com-wpa.bin +firmware: atmel_at76c502.bin +firmware: atmel_at76c502d.bin +firmware: atmel_at76c502d-wpa.bin +firmware: atmel_at76c502e.bin +firmware: atmel_at76c502e-wpa.bin +firmware: atmel_at76c502-wpa.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_2958.bin +firmware: atmel_at76c504_2958-wpa.bin +firmware: atmel_at76c504a_2958.bin +firmware: atmel_at76c504a_2958-wpa.bin +firmware: atmel_at76c504.bin +firmware: atmel_at76c504-wpa.bin +firmware: atmel_at76c505amx-rfmd.bin +firmware: atmel_at76c505a-rfmd2958.bin +firmware: atmel_at76c505-rfmd2958.bin +firmware: atmel_at76c505-rfmd.bin +firmware: atmel_at76c506.bin +firmware: atmel_at76c506-wpa.bin +firmware: atmsar11.fw +firmware: av7110/bootcode.bin +firmware: b43legacy/ucode2.fw +firmware: b43legacy/ucode4.fw +firmware: b43/ucode11.fw +firmware: b43/ucode13.fw +firmware: b43/ucode14.fw +firmware: b43/ucode15.fw +firmware: b43/ucode16_mimo.fw +firmware: b43/ucode5.fw +firmware: b43/ucode9.fw +firmware: BCM2033-FW.bin +firmware: BCM2033-MD.hex +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.8.2.0.fw +firmware: bnx2x/bnx2x-e1h-7.8.2.0.fw +firmware: bnx2x/bnx2x-e2-7.8.2.0.fw +firmware: brcm/bcm43xx-0.fw +firmware: brcm/bcm43xx_hdr-0.fw +firmware: brcm/brcmfmac43143.bin +firmware: brcm/brcmfmac43236b.bin +firmware: brcm/brcmfmac43242a.bin +firmware: brcm/brcmfmac-sdio.bin +firmware: brcm/brcmfmac-sdio.txt +firmware: BT3CPCC.bin +firmware: c218tunx.cod +firmware: c320tunx.cod +firmware: carl9170-1.fw +firmware: cbfw-3.1.0.0.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: comedi/jr3pci.idm +firmware: cp204unx.cod +firmware: cpia2/stv0672_vp4.bin +firmware: ct2fw-3.1.0.0.bin +firmware: ctfw-3.1.0.0.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: cyzfirm.bin +firmware: daqboard2000_firmware.bin +firmware: digiface_firmware.bin +firmware: digiface_firmware_rev11.bin +firmware: dvb-cx18-mpc718-mt352.fw +firmware: dvb-fe-af9013.fw +firmware: dvb-fe-ds3000.fw +firmware: dvb-fe-tda10071.fw +firmware: dvb-fe-xc5000-1.6.114.fw +firmware: dvb-fe-xc5000c-4.1.30.7.fw +firmware: dvb-usb-af9015.fw +firmware: dvb-usb-af9035-02.fw +firmware: dvb-usb-dib0700-1.20.fw +firmware: dvb-usb-ec168.fw +firmware: dvb-usb-it9135-01.fw +firmware: dvb-usb-it9135-02.fw +firmware: dvb-usb-it9137-01.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-lme2510-lg.fw +firmware: dvb-usb-lme2510-s0194.fw +firmware: dvb-usb-terratec-h7-az6007.fw +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/boot2.fw +firmware: edgeport/boot.fw +firmware: edgeport/down2.fw +firmware: edgeport/down3.bin +firmware: edgeport/down.fw +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/emu1010b.fw +firmware: emu/emu1010_notebook.fw +firmware: emu/hana.fw +firmware: emu/micro_dock.fw +firmware: ene-ub6250/ms_init.bin +firmware: ene-ub6250/msp_rdwr.bin +firmware: ene-ub6250/ms_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: fw.ram.bin +firmware: go7007fw.bin +firmware: go7007tv.bin +firmware: htc_7010.fw +firmware: htc_9271.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: ipw2100-1.3.fw +firmware: ipw2100-1.3-i.fw +firmware: ipw2100-1.3-p.fw +firmware: ipw2200-bss.fw +firmware: ipw2200-ibss.fw +firmware: ipw2200-sniffer.fw +firmware: isci/isci_firmware.bin +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-1000-5.ucode +firmware: iwlwifi-100-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-6.ucode +firmware: iwlwifi-3945-2.ucode +firmware: iwlwifi-4965-2.ucode +firmware: iwlwifi-5000-5.ucode +firmware: iwlwifi-5150-2.ucode +firmware: iwlwifi-6000-4.ucode +firmware: iwlwifi-6000g2a-5.ucode +firmware: iwlwifi-6000g2b-6.ucode +firmware: iwlwifi-6050-5.ucode +firmware: iwlwifi-7260-6.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_pda/keyspan_pda.fw +firmware: keyspan_pda/xircom_pgs.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/usa28xa.fw +firmware: keyspan/usa28xb.fw +firmware: keyspan/usa28x.fw +firmware: keyspan/usa49w.fw +firmware: keyspan/usa49wlc.fw +firmware: korg/k1212.dsp +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_cs.fw +firmware: libertas_cs_helper.fw +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: matrox/g200_warp.fw +firmware: matrox/g400_warp.fw +firmware: me2600_firmware.bin +firmware: mixart/miXart8AES.xlx +firmware: mixart/miXart8.elf +firmware: mixart/miXart8.xlx +firmware: mrvl/pcie8766_uapsta.bin +firmware: mrvl/sd8786_uapsta.bin +firmware: mrvl/sd8787_uapsta.bin +firmware: mrvl/sd8797_uapsta.bin +firmware: mrvl/usb8797_uapsta.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_ap-2.fw +firmware: mwl8k/fmimage_8366.fw +firmware: mwl8k/fmimage_8687.fw +firmware: mwl8k/helper_8363.fw +firmware: mwl8k/helper_8366.fw +firmware: mwl8k/helper_8687.fw +firmware: myri10ge_ethp_z8e.dat +firmware: myri10ge_eth_z8e.dat +firmware: myri10ge_rss_ethp_z8e.dat +firmware: myri10ge_rss_eth_z8e.dat +firmware: ni6534a.bin +firmware: niscrb01.bin +firmware: niscrb02.bin +firmware: orinoco_ezusb_fw +firmware: ositech/Xilinx7OD.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: 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: r128/r128_cce.bin +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/BTC_rlc.bin +firmware: radeon/CAICOS_mc.bin +firmware: radeon/CAICOS_me.bin +firmware: radeon/CAICOS_pfp.bin +firmware: radeon/CAYMAN_mc.bin +firmware: radeon/CAYMAN_me.bin +firmware: radeon/CAYMAN_pfp.bin +firmware: radeon/CAYMAN_rlc.bin +firmware: radeon/CEDAR_me.bin +firmware: radeon/CEDAR_pfp.bin +firmware: radeon/CEDAR_rlc.bin +firmware: radeon/CYPRESS_me.bin +firmware: radeon/CYPRESS_pfp.bin +firmware: radeon/CYPRESS_rlc.bin +firmware: radeon/JUNIPER_me.bin +firmware: radeon/JUNIPER_pfp.bin +firmware: radeon/JUNIPER_rlc.bin +firmware: radeon/PALM_me.bin +firmware: radeon/PALM_pfp.bin +firmware: radeon/PITCAIRN_ce.bin +firmware: radeon/PITCAIRN_mc.bin +firmware: radeon/PITCAIRN_me.bin +firmware: radeon/PITCAIRN_pfp.bin +firmware: radeon/PITCAIRN_rlc.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/R700_rlc.bin +firmware: radeon/REDWOOD_me.bin +firmware: radeon/REDWOOD_pfp.bin +firmware: radeon/REDWOOD_rlc.bin +firmware: radeon/RS600_cp.bin +firmware: radeon/RS690_cp.bin +firmware: radeon/RS780_me.bin +firmware: radeon/RS780_pfp.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/RV730_me.bin +firmware: radeon/RV730_pfp.bin +firmware: radeon/RV770_me.bin +firmware: radeon/RV770_pfp.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/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/TURKS_mc.bin +firmware: radeon/TURKS_me.bin +firmware: radeon/TURKS_pfp.bin +firmware: radeon/VERDE_ce.bin +firmware: radeon/VERDE_mc.bin +firmware: radeon/VERDE_me.bin +firmware: radeon/VERDE_pfp.bin +firmware: radeon/VERDE_rlc.bin +firmware: riptide.hex +firmware: rpm_firmware.bin +firmware: rt2561.bin +firmware: rt2561s.bin +firmware: rt2661.bin +firmware: rt2860.bin +firmware: rt2870.bin +firmware: rt73.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: rtl_nic/rtl8105e-1.fw +firmware: rtl_nic/rtl8106e-1.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-1.fw +firmware: rtl_nic/rtl8402-1.fw +firmware: rtl_nic/rtl8411-1.fw +firmware: rtlwifi/rtl8192cfw.bin +firmware: rtlwifi/rtl8192cfwU_B.bin +firmware: rtlwifi/rtl8192cfwU.bin +firmware: rtlwifi/rtl8192cufw.bin +firmware: rtlwifi/rtl8192defw.bin +firmware: rtlwifi/rtl8192sefw.bin +firmware: rtlwifi/rtl8712u.bin +firmware: rtlwifi/rtl8723fw_B.bin +firmware: rtlwifi/rtl8723fw.bin +firmware: s2250.fw +firmware: s2250_loader.fw +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: sndscape.co0 +firmware: sndscape.co1 +firmware: sndscape.co2 +firmware: sndscape.co3 +firmware: sndscape.co4 +firmware: softing-4.6/bcard2.bin +firmware: softing-4.6/bcard.bin +firmware: softing-4.6/cancard.bin +firmware: softing-4.6/cancrd2.bin +firmware: softing-4.6/cansja.bin +firmware: softing-4.6/ldcard2.bin +firmware: softing-4.6/ldcard.bin +firmware: solos-db-FPGA.bin +firmware: solos-Firmware.bin +firmware: solos-FPGA.bin +firmware: sun/cassini.bin +firmware: symbol_sp24t_prim_fw +firmware: symbol_sp24t_sec_fw +firmware: tehuti/bdx.bin +firmware: ti_3410.fw +firmware: ti_5052.fw +firmware: ti-connectivity/wl1271-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.bin +firmware: tigon/tg3.bin +firmware: tigon/tg3_tso5.bin +firmware: tigon/tg3_tso.bin +firmware: tlg2300_firmware.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/adi930.fw +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/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: usbduxfast_firmware.bin +firmware: usbdux_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: vx/bd56002.boot +firmware: vx/bd563s3.boot +firmware: vx/bd563v2.boot +firmware: vx/bx_1_vp4.b56 +firmware: vx/bx_1_vxp.b56 +firmware: vxge/X3fw.ncf +firmware: vxge/X3fw-pxe.ncf +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: wavefront.os +firmware: whiteheat.fw +firmware: whiteheat_loader.fw +firmware: wl1251-fw.bin +firmware: xc3028L-v36.fw +firmware: xc3028-v27.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/zd1211b_ub +firmware: zd1211/zd1211b_uphr +firmware: zd1211/zd1211b_ur +firmware: zd1211/zd1211_ub +firmware: zd1211/zd1211_uphr +firmware: zd1211/zd1211_ur --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/armhf/generic.modules +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/armhf/generic.modules @@ -0,0 +1,2626 @@ +6lowpan +6pack +8021q +8250_dw +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +88pm860x-ts +9p +9pnet +9pnet_virtio +a3d +a8293 +aat2870_bl +aat2870-regulator +ab3100 +ab3100-otp +ac97_bus +acecad +act200l-sir +act_csum +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5624r_spi +ad5686 +ad5755 +ad5764 +ad5791 +ad5930 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7746 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad799x +ad8366 +ad9523 +ad9832 +ad9834 +ad9850 +ad9852 +ad9910 +ad9951 +adcxx +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16204 +adis16209 +adis16220 +adis16240 +adis16260 +adis16400 +adis16480 +adis_lib +adjd_s311 +adm1021 +adm1025 +adm1026 +adm1029 +adm1031 +adm1275 +adm9240 +adp5520_bl +adp5520-keys +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +ads1015 +ads7828 +ads7846 +ads7871 +ad_sigma_delta +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adummy +adutux +adv7180 +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-arm +af_802154 +af9013 +af9033 +af_alg +affs +af_key +af_packet_diag +af-rxrpc +afs +ah4 +ah6 +ahci_platform +aiptek +aircable +ak8975 +alauda +algif_hash +algif_skcipher +alphatrack +altera_jtaguart +altera_ps2 +altera-stapl +altera_uart +ambakmi +amba-pl010 +amc6821 +ams369fg06 +analog +anatop-regulator +ansi_cprng +anubis +aoe +apds9802als +apds990x +appledisplay +appletalk +appletouch +ar5523 +ar7part +arc4 +arc_ps2 +arc_uart +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arptable_filter +arp_tables +arpt_mangle +as3711-regulator +as5011 +asc7621 +asix +asus_oled +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at86rf230 +at91_ether +atbm8830 +aten +ath +ath3k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atm +atmel_mxt_ts +atmel_pwm +atmel-pwm-bl +atmtcp +atxp1 +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo_k1900fb +auo_k1901fb +auo_k190x +auo-pixcir-ts +authenc +authencesn +auth_rpcgss +autofs4 +ax25 +ax88796 +b2c2-flexcop +b2c2-flexcop-usb +b43 +b43legacy +b44 +bas_gigaset +batman-adv +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bcm203x +bcm3510 +bcm5974 +bcma +bcm_wimax +befs +belkin_sa +bfs +bfusb +bh1770glc +bh1780gli +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluetooth +bma150 +bmp085-i2c +bmp085-spi +bnep +bonding +bpa10x +bpck +bpck6 +bpqether +bq2415x_charger +bq27x00_battery +br2684 +brcmfmac +brcmsmac +brcmutil +bridge +broadsheetfb +bsd_comp +btmrvl +btmrvl_sdio +btrfs +btsdio +btusb +btwilink +bu21013_ts +bw-qcam +c67x00 +cachefiles +caif +caif_hsi +caif_serial +caif_socket +caif_usb +camellia_generic +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +carl9170 +cast5_generic +cast6_generic +cast_common +catc +cc770 +cc770_isa +cc770_platform +c_can +c_can_platform +ccm +cdc-acm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc-phonet +cdc_subset +cdc-wdm +cedusb +ceph +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +chnl_net +cifs +clearpad_tm1217 +clip +clk-max77686 +clk-twl6040 +clk-wm831x +cls_basic +cls_cgroup +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cma3000_d0x +cma3000_d0x_i2c +cmtp +cobra +coda +comm +configfs +cordic +core +cp210x +cpia2 +cpu-notifier-error-inject +c-qcam +cramfs +crc7 +crc8 +crc-ccitt +crc-itu-t +cryptd +cryptoloop +crypto_null +crypto_user +cs53l32a +cs89x0 +csr_helper +csr_wifi +ctr +cts +cuse +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx24113 +cx24116 +cx24123 +cx25840 +cx82310_eth +cxacru +cxd2820r +cy8ctmg110_ts +cyberjack +cypress_cy7c63 +cypress_m8 +cytherm +cyttsp_core +cyttsp_i2c +cyttsp_spi +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052_bl +da9052-hwmon +da9052_onkey +da9052-regulator +da9052_tsi +da9052_wdt +da9055-hwmon +da9055_onkey +da9055-regulator +da9055_wdt +davinci_cpdma +davinci_emac +davinci_mdio +db9 +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +de600 +de620 +decnet +deflate +denali +denali_dt +des_generic +designware_i2s +dgrp +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +dlci +dlm +dm644x_ccdc +dm9000 +dm9601 +dm-bio-prison +dm-bufio +dm-crypt +dm-delay +dme1737 +dm-flakey +dm-log +dm-log-userspace +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-thin-pool +dm-verity +dm-zero +dnet +dn_rtmsg +doc2001plus +docecc +docg3 +docg4 +docprobe +drbd +drm +drm_kms_helper +drm_usb +drxd +drxk +ds1621 +ds1682 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds620 +dsa_core +dsbr100 +dss1_divert +dstr +dummy +dvb-as102 +dvb-core +dvb-pll +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_cypress_firmware +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-it913x +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_v2 +dvb-usb-vp702x +dvb-usb-vp7045 +dwc3 +dwc3-exynos +dwc3-omap +dw_dmac +dw_mmc +dw_mmc-exynos +dw_mmc-pltfm +dw_wdt +dynapro +e4000 +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +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 +ec100 +echo +edt-ft5x06 +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efs +egalax_ts +elo +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +emc1403 +emc2103 +emc6w201 +em_canid +em_cmp +emi26 +emi62 +emif +em_ipset +em_meta +em_nbyte +empeg +ems_usb +em_text +em_u32 +enc28j60 +enclosure +epat +epia +eql +esd_usb2 +esi-sir +esp4 +esp6 +ethoc +evbug +exofs +ext2 +extcon-adc-jack +extcon-arizona +extcon-gpio +extcon-max77693 +extcon-max8997 +exynos-rng +ezusb +f2fs +f71805f +f71882fg +f75375s +f81232 +fakelb +fan53555 +faulty +fb_sys_fops +fc0011 +fc0012 +fc0013 +fc2580 +fcrypt +ff-memless +fit2 +fit3 +flexcan +fm_drv +freevxfs +friq +frpw +fsa9480 +fscache +ft1000 +ftdi-elan +ftdi_sio +ftgmac100 +ftl +ftmac100 +fujitsu_ts +funsoft +fusb300_udc +g760a +g_acm_ms +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +g_dbgp +gdmwm +generic +generic-adc-battery +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_ffs +gfs2 +ghash-generic +g_hid +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +g_mass_storage +g_midi +g_multi +g_ncm +g_nokia +gp2ap002a00f +gpio +gpio-74x164 +gpio-addr-flash +gpio-adnp +gpio-adp5520 +gpio-adp5588 +gpio-arizona +gpio-charger +gpio-da9052 +gpio-da9055 +gpio-fan +gpio-ir-recv +gpio_keys +gpio_keys_polled +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mc33880 +gpio-mcp23s08 +gpio_mouse +gpio-pca953x +gpio-pcf857x +gpio-regulator +gpio_tilt_polled +gpio-tps65912 +gpio-ts5500 +gpio-twl6040 +gpio_vbus +gpio-viperboard +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +g_printer +grcan +gre +grip +grip_mp +g_serial +gspca_benq +gspca_conex +gspca_cpia1 +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_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +guillemot +gunze +g_webcam +g_zero +hampshire +hanwang +hci +hci_uart +hci_vhci +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +hfc4s8s_l1 +hfcsusb +hfc_usb +hfs +hfsplus +hid +hid-a4tech +hid-apple +hid-aureal +hid-axff +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-dr +hid-elecom +hid-emsff +hid-ezkey +hid-gaff +hid-generic +hid-gyration +hid-holtekff +hid-holtek-kbd +hid-icade +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-lenovo-tpkbd +hid-logitech +hid-logitech-dj +hid-magicmouse +hid-microsoft +hid-monterey +hid-multitouch +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-picolcd +hid-pl +hid-primax +hid-prodikeys +hid-ps3remote +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-iio-common +hid-sensor-magn-3d +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-wacom +hid-waltop +hid-wiimote +hid-zpff +hid-zydacron +hih6130 +hisax +hisax_st5481 +hmc5843 +hmc6352 +hostap +hp4x +hpfs +hsi +hsi_char +hso +htc-pasic3 +hwmon-vid +i2400m +i2400m-usb +i2c-algo-bit +i2c-algo-pca +i2c-cbus-gpio +i2c-designware-core +i2c-designware-platform +i2c-dev +i2c-diolan-u2c +i2c-gpio +i2c-hid +i2c-mux +i2c-mux-gpio +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-mux-pinctrl +i2c-nomadik +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-simtec +i2c-smbus +i2c-stub +i2c-taos-evm +i2c-tiny-usb +i2c-versatile +i2c-viperboard +i2c-xiic +ibmaem +ibmpex +ics932s401 +idmouse +ieee802154 +ifb +iforce +iguanair +iio_dummy +iio_hwmon +iio-trig-gpio +iio-trig-periodic-rtc +iio-trig-sysfs +ili210x +ili9320 +imm +imon +impa7 +imx074 +imxdrm +imx-fbdev +imx-ipu-v3 +imx_keypad +ina2xx +industrialio +industrialio-triggered-buffer +inet_diag +inexio +inftl +input-polldev +int51x1 +interact +interval_tree_test +io_edgeport +io_ti +iowarrior +ip6_gre +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_MASQUERADE +ip6t_mh +ip6t_NPT +ip6t_REJECT +ip6t_rpfilter +ip6t_rt +ip6_tunnel +ipack +ipaq +ipcomp +ipcomp6 +ipddp +ip_gre +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ipoctal +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netport +ip_set_list_set +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_ah +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_rpfilter +ipt_ULOG +ipuv3-crtc +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipw +ipx +ircomm +ircomm-tty +irda +irda-usb +ir-jvc-decoder +ir-kbd-i2c +irlan +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +irnet +ir-rc5-decoder +ir-rc5-sz-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sony-decoder +irtty-sir +ir-usb +iscsi_boot_sysfs +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl6271a-regulator +isl6421 +isl6423 +isofs +isp116x-hcd +isp1301 +isp1362-hcd +isp1704_charger +isp1760 +it87 +it913x-fe +itd1000 +iuu_phoenix +ix2505v +jc42 +jedec_probe +jffs2 +jfs +joydev +joydump +kafs +kalmia +kaweth +kbic +kbtab +kernelcapi +keucr +keyspan +keyspan_pda +keyspan_remote +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kobil_sct +ks0108 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ktti +kvaser_usb +kxsd9 +kxtj9 +l1oip +l2tp_core +l2tp_debugfs +l2tp_ppp +l4f00242t03 +lapb +lapbether +latch-addr-flash +lcd +ld9040 +ldusb +lec +leds-88pm860x +leds-adp5520 +leds-atmel-pwm +leds-bd2802 +leds-blinkm +leds-da903x +leds-da9052 +leds-dac124s085 +leds-gpio +leds-lm3530 +leds-lm3533 +leds-lm355x +leds-lm3642 +leds-lp3944 +leds-lp5521 +leds-lp5523 +leds-lp8788 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-ot200 +leds-pca9532 +leds-pca955x +leds-pca9633 +leds-regulator +leds-tca6507 +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +legousbtower +lg2160 +lgdt3305 +lgdt330x +lgs8gxx +lg-vl600 +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libceph +libcomposite +libcrc32c +libertas +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libiscsi +libiscsi_tcp +libore +libosd +libsas +lightning +line6usb +lineage-pem +linear +lirc_dev +lirc_igorplugusb +lirc_imon +lirc_parallel +lirc_sasem +lirc_serial +lirc_sir +lirc_zilog +lis3lv02d +lis3lv02d_i2c +lis3lv02d_spi +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533_bl +lm3533-core +lm3533-ctrlbank +lm3630_bl +lm3639_bl +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lm95245 +lms283gf05 +lnbp21 +lnbp22 +lockd +logger +lp +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp8788-charger +lpddr_cmds +lru_cache +lrw +ltc2978 +ltc4151 +ltc4215 +ltc4245 +ltc4261 +ltv350qv +m25p80 +m2m-deinterlace +m88rs2000 +ma600-sir +mac80211 +mac80211_hwsim +mac802154 +macb +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac-iceland +mac-inuit +mac-roman +mac-romanian +mac-turkish +macvlan +macvtap +magellan +map_absent +map_ram +map_rom +matrix-keymap +matrix_keypad +max1111 +max11801_ts +max1363 +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max197 +max2165 +max3100 +max34440 +max517 +max63xx_wdt +max6639 +max6642 +max6650 +max6875 +max7359_keypad +max77686 +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925_bl +max8925_onkey +max8925_power +max8925-regulator +max8952 +max8973-regulator +max8997 +max8997_charger +max8998 +max8998_charger +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc44s803 +mceusb +mcp2120-sir +mcp251x +mcp3021 +mcp4725 +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md4 +mdc800 +mem2mem_testdev +memstick +metronomefb +metro-usb +mg_disk +michael_mic +microtek +minix +mip6 +mISDN_core +mISDN_dsp +mk712 +mkiss +mma8450 +mms114 +mos7720 +mos7840 +moto_modem +mpcore_wdt +mpoa +mpr121_touchkey +mpu3050 +mrf24j40 +msdos +msp3400 +mspro_block +mt2060 +mt2063 +mt20xx +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd_dataflash +mtdoops +mtdram +mtdswap +mtouch +multipath +musb_hdrc +mv88e6060 +mv88e6xxx_drv +mvmdio +mv_udc +mwifiex +mwifiex_sdio +mwifiex_usb +mxc_nand +mxc_w1 +mxl111sf-demod +mxl111sf-tuner +mxl5005s +mxl5007t +nandsim +navman +nbd +nci +ncpfs +net1080 +net2272 +netconsole +netprio_cgroup +netrom +newtonkbd +nfc +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_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nfcwilink +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nfs_layout_nfsv41_files +nfsv2 +nfsv3 +nfsv4 +nftl +nf_tproxy_core +n_hdlc +nilfs2 +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 +n_r3964 +ns558 +ntc_thermistor +ntfs +n_tracerouter +n_tracesink +nvram +nxt200x +nxt6000 +objlayoutdriver +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +of_serial +old_belkin-sir +omap +omap2 +omap2430 +omap4-keypad +omap-aes +omap_hdq +omap-ocp2scp +omap-sham +omap-vout +omap_wdt +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opticon +option +osd +osdblk +osst +oti6858 +output +ov2640 +ov5642 +ov6650 +ov772x +ov9640 +ov9740 +overlayfs +oxu210hp-hcd +ozwpan +p54common +p54spi +p54usb +p8022 +p8023 +palmas-regulator +pandora_bl +panel +panel-acx565akm +panel-lgphilips-lb035q02 +panel-nec-nl8048hl11-01b +panel-picodlp +parallel-display +paride +parkbd +parport +parport_ax88796 +parport_pc +pata_arasan_cf +pata_of_platform +pata_platform +pc87360 +pc87427 +pcbc +pcd +pcf50633 +pcf50633-adc +pcf50633-backlight +pcf50633-charger +pcf50633-gpio +pcf50633-input +pcf50633-regulator +pcf8574_keypad +pcf8591 +pcrypt +pcwd_usb +pd +pda_power +peak_usb +pegasus +penmount +pf +pg +phonet +phram +physmap +physmap_of +pinctrl-single +pixcir_i2c_ts +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pmbus +pmbus_core +pm-notifier-error-inject +pn533 +pn544_i2c +pn_pep +poseidon +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppox +ppp_synctty +pps_core +pps-gpio +pps-ldisc +pps_parport +pptp +prism2_usb +ps2mult +psmouse +psnap +pt +ptp +ptp_pch +pvrusb2 +pwc +pwm-beeper +pwm_bl +pwm-imx +pwm-tiecap +pwm-tiehrpwm +pwm-twl +pwm-twl-led +qcaux +qcserial +qinfo_probe +qmi_wwan +qnx4 +qnx6 +qt1010 +qt1070 +qt2160 +quatech2 +quota_tree +quota_v1 +quota_v2 +r8712u +r8a66597-hcd +r8a66597-udc +radio-i2c-si470x +radio-keene +radio-mr800 +radio-shark +radio-si4713 +radio-tea5764 +radio-usb-si470x +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramoops +raw +rbd +rbtree_test +rc5t583-regulator +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rcar-phy +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-cinergy +rc-cinergy-1400 +rc-core +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-em-terratec +rc-encore-enltv +rc-encore-enltv2 +rc-encore-enltv-fm53 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +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-lirc +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-snapstream-firefly +rc-streamzap +rc-tbs-nec +rc-technisat-usb2 +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-trekstor +rc-tt-1500 +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rds +rds_tcp +redboot +redrat3 +reed_solomon +reiserfs +remoteproc +renesas_usbhs +retu-mfd +retu-pwrbutton +rfcomm +rfd_ftl +rfkill-gpio +rfkill-regulator +ring_sw +rio500 +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rt2500usb +rt2800lib +rt2800usb +rt2x00lib +rt2x00usb +rt73usb +rtc-88pm80x +rtc-88pm860x +rtc-ab3100 +rtc-bq32k +rtc-bq4802 +rtc-cmos +rtc-da9052 +rtc-da9055 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-ds3234 +rtc-em3027 +rtc-fm3130 +rtc-isl12022 +rtc-isl1208 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max8907 +rtc-max8925 +rtc-max8998 +rtc-mc13xxx +rtc-msm6242 +rtc-omap +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8523 +rtc-pcf8563 +rtc-pcf8583 +rtc-pl030 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-snvs +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtl2830 +rtl2832 +rtl8150 +rtl8187 +rtl8192c-common +rtl8192cu +rtlwifi +rts5139 +rx51_battery +rxkad +s1d13xxxfb +s2255drv +s2mps11 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s6e63m0 +s921 +saa7115 +saa7706h +safe_serial +salsa20_generic +samsung-keypad +sata_mv +sbs-battery +sca3000 +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq_codel +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_spi +scsi_transport_srp +sctp +sctp_probe +sdhci-pxav2 +sdhci-pxav3 +sdio_uart +seed +seeq8005 +seqiv +ser_gigaset +serio_raw +sermouse +serpent_generic +serport +serqt_usb2 +ses +sha1-arm +shark2 +sh_mobile_ceu_camera +sh_mobile_csi2 +sht15 +sht21 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sierra_net +sil164 +sir-dev +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_of_platform +sja1000_platform +sl811-hcd +slcan +slip +slram +sm501 +sm501fb +smb347-charger +smc911x +smc91x +sm_ftl +smm665 +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc911x +smsc95xx +smscufx +smsdvb +smsmdtv +smssdio +smsusb +snd-aaci +snd-ac97-codec +snd-aloop +snd-dummy +snd-hrtimer +snd-hwdep +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-portman2x4 +snd-rawmidi +snd-seq +snd-seq-device +snd-seq-dummy +snd-seq-midi +snd-seq-midi-event +snd-seq-virmidi +snd-serial-u16550 +snd-soc-88pm860x +snd-soc-ab8500-codec +snd-soc-ad1836 +snd-soc-ad193x +snd-soc-ad73311 +snd-soc-adau1373 +snd-soc-adav80x +snd-soc-ads117x +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4641 +snd-soc-ak4642 +snd-soc-ak4671 +snd-soc-alc5623 +snd-soc-alc5632 +snd-soc-arizona +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs42l51 +snd-soc-cs42l52 +snd-soc-cs42l73 +snd-soc-cx20442 +snd-soc-da7210 +snd-soc-da732x +snd-soc-da9055 +snd-soc-dfbmcs320 +snd-soc-imx-mc13783 +snd-soc-imx-ssi +snd-soc-isabelle +snd-soc-jz4740-codec +snd-soc-l3 +snd-soc-lm4857 +snd-soc-lm49453 +snd-soc-max9768 +snd-soc-max98088 +snd-soc-max98090 +snd-soc-max98095 +snd-soc-max9850 +snd-soc-max9877 +snd-soc-mc13783 +snd-soc-ml26124 +snd-soc-omap3pandora +snd-soc-pcm3008 +snd-soc-rt5631 +snd-soc-sdp3430 +snd-soc-simple-card +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-sta32x +snd-soc-sta529 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic32x4 +snd-soc-tlv320aic3x +snd-soc-tlv320dac33 +snd-soc-tpa6130a2 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wl1273 +snd-soc-wm0010 +snd-soc-wm1250-ev1 +snd-soc-wm2000 +snd-soc-wm2200 +snd-soc-wm5100 +snd-soc-wm5102 +snd-soc-wm5110 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8727 +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-wm8782 +snd-soc-wm8804 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8904 +snd-soc-wm8940 +snd-soc-wm8955 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8962 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8983 +snd-soc-wm8985 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8991 +snd-soc-wm8993 +snd-soc-wm8994 +snd-soc-wm8995 +snd-soc-wm8996 +snd-soc-wm9081 +snd-soc-wm9090 +snd-soc-wm-adsp +snd-soc-wm-hubs +snd-soc-zoom2 +snd-tea575x-tuner +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usbmidi-lib +snd-virmidi +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +sp805_wdt +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 +speedtch +spi-altera +spi-bitbang +spi-butterfly +spidev +spi-dw +spi-dw-mmio +spi-gpio +spi-imx +spi_ks8995 +spi-lm70llp +spi-oc-tiny +spi-omap2-mcspi +spi-pl022 +spi-sc18is602 +spi-tle62x0 +spi-xcomm +squashfs +ssb +ssd1307fb +ssfdc +sst25l +ssu100 +st +st1232 +stb0899 +stb6000 +stb6100 +st_drv +ste_modem_rproc +stinger +stir4200 +stk1160 +stkwebcam +stmmac +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stv0288 +stv0297 +stv0299 +stv0900 +stv090x +stv6110 +stv6110x +sunkbd +sunrpc +symbolserial +synaptics_i2c +synaptics_i2c_rmi4 +synaptics_usb +sysv +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +tc3589x-keypad +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_usb_gadget +tcp_bic +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda826x +tda827x +tda8290 +tda9887 +tdo24m +tea +tea5761 +tea5767 +tef6862 +tekram-sir +test-kprobes +test-kstrtox +test_power +tgr192 +thmc50 +ti-adc081c +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_dac7512 +ti_hecc +timb_dma +timblogiw +timbuart +timed_gpio +timeriomem-rng +tipc +ti_usb_3410_5052 +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmiofb +tmio_mmc +tmio_mmc_core +tmio_nand +tmp102 +tmp401 +tmp421 +toim3232-sir +touchit213 +touchright +touchwin +tpm_i2c_infineon +tpm-rng +tps51632-regulator +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65090-regulator +tps65217 +tps65217_bl +tps65217-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps80031-regulator +trancevibrator +tranzport +ts_bm +tsc2005 +tsc2007 +tsc40 +ts_fsm +ts_kmp +tsl2550 +tsl2563 +tsl2583 +tsl2x7x_core +ttpci-eeprom +ttusbir +tua9001 +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030_charger +twl4030_keypad +twl4030-madc +twl4030-madc-hwmon +twl4030-pwrbutton +twl4030-usb +twl4030-vibra +twl4030_wdt +twl6030-usb +twl6040-vibra +twofish_common +twofish_generic +u132-hcd +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +udf +udl +udlfb +udp_diag +ueagle-atm +ufs +uhid +uio +uio_dmem_genirq +uio_pdrv +uio_pdrv_genirq +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 +usb8xxx +usbatm +usb_debug +usb_gigaset +usbhid +usbip-core +usbip-host +usbkbd +usblcd +usbled +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvision +usb_wwan +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +v4l2-common +v4l2-int-device +v4l2-mem2mem +vcan +vcnl4000 +veth +vexpress +vfio +vgg2432a4 +vhci-hcd +videobuf2-core +videobuf2-dma-contig +videobuf2-memops +videobuf2-vmalloc +videobuf-core +videobuf-dma-contig +videobuf-dvb +videobuf-vmalloc +videodev +viperboard +viperboard_adc +virtio +virtio_console +virtio_ring +virtio-rng +virtio_scsi +virtual +visor +vivi +vivopay-serial +vmac +vpfe_capture +vpss +vsxxxaa +vt1211 +vt6656_stage +vub300 +vxlan +w1_bq27000 +w1_ds2408 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds28e04 +w1-gpio +w1_smem +w1_therm +w35und +w5100 +w5300 +w83627ehf +w83627hf +w83781d +w83791d +w83792d +w83793 +w83795 +w83l785ts +w83l786ng +w90p910_ts +w9966 +wacom +wacom_i2c +wacom_w8001 +walkera0701 +warrior +whiteheat +wimax +wire +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wlcore +wlcore_sdio +wlcore_spi +wm831x_backup +wm831x_bl +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x-ts +wm831x_wdt +wm8350-hwmon +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-regulator +wm8775 +wm8994-regulator +wm97xx-ts +wp512 +x25 +x25_asy +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xenfs +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-privcmd +xen_wdt +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_uartps +xor +xpad +x_tables +xt_addrtype +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNSECMARK +xt_conntrack +xt_cpu +xt_CT +xt_dccp +xt_devgroup +xt_dscp +xt_DSCP +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_HMARK +xt_IDLETIMER +xt_iprange +xt_ipvs +xtkbd +xt_LED +xt_length +xt_limit +xt_LOG +xt_mac +xt_mark +xt_multiport +xt_nat +xt_NETMAP +xt_nfacct +xt_NFLOG +xt_NFQUEUE +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xt_REDIRECT +xts +xt_sctp +xt_SECMARK +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_TCPOPTSTRIP +xt_tcpudp +xt_TEE +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xz_dec_test +yam +yealink +yurex +zaurus +zd1201 +zd1211rw +zhenhua +zio +zl10039 +zl10353 +zl6100 +zlib +zlib_deflate +zr364xx +zram +zte_ev --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/armhf/generic +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/armhf/generic @@ -0,0 +1,11633 @@ +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/bcma/bcma 0x8e86be05 bcma_core_dma_translation +EXPORT_SYMBOL drivers/block/drbd/drbd 0x35131b36 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x7730f22d drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0xaf27bebf drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0xd2943484 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x031c3f7d pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0x141a7289 pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x28b85813 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x5cdf42bd pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x6647d8b7 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xbaa310ad pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xc00e2550 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xc6a670a7 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0xd61a6797 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0xe0f18dda paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xe646aeb7 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xe9f43e9b pi_release +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1348760d ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x16dcec76 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1a10c898 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1aba5db8 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x238474ea ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x2c82a7a9 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x423b776a ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4c971bec ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x524f6f51 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5e80f37c ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5fcdcc05 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x67cb9784 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x78fd36e7 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8220fbc1 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8c8ee770 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x96cbcc81 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa28a2ace ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa2a98b91 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xcad692bb ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe0fa83f2 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe1a43dfc ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe6ab72a6 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf2576cb9 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfcb77cfd ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/dma/dw_dmac 0x0a5a50cb dw_dma_cyclic_stop +EXPORT_SYMBOL drivers/dma/dw_dmac 0x2657a108 dw_dma_get_src_addr +EXPORT_SYMBOL drivers/dma/dw_dmac 0x475468d6 dw_dma_cyclic_prep +EXPORT_SYMBOL drivers/dma/dw_dmac 0x69f18757 dw_dma_cyclic_free +EXPORT_SYMBOL drivers/dma/dw_dmac 0x7e17f74f dw_dma_generic_filter +EXPORT_SYMBOL drivers/dma/dw_dmac 0x8f6cac3a dw_dma_get_dst_addr +EXPORT_SYMBOL drivers/dma/dw_dmac 0xa5f0fbe1 dw_dma_cyclic_start +EXPORT_SYMBOL drivers/gpu/drm/drm 0x00141c66 drm_get_minor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x01db86b5 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x02e6e099 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x032c0cc3 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x03563a5f drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x041e7ba7 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x04e2699b drm_prime_remove_buf_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05300fa6 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0611a637 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x07aaeb0a drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x08982129 drm_put_minor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x09393516 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x09a82698 drm_select_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ae4b94c drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0c5057ea drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0d67d7f9 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0e4465aa drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0fccafb1 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x10d9ff48 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x11065515 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x12c6276a drm_buffer_read_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x131c2ab7 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1347e672 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14090e02 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x142b8b35 drm_buffer_copy_from_user +EXPORT_SYMBOL drivers/gpu/drm/drm 0x152d2f1b drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x153d3af5 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x167fd723 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x16aee17c drm_platform_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x194eadaa drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x19621a52 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a0c730f drm_get_platform_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a770ac3 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a7b75b2 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a8f0448 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1c0ae7d7 drm_mm_init_scan +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1cfaabed drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1ddd770d drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1e837252 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x234a5abb drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23aaed15 drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23b53d06 drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2826e06d drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x288bb63a drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x299653f6 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2bd79af4 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c8c249e drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2da9f494 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2eb98639 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2fb0bcd6 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x306b23a8 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x31a7f1c2 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x346127a7 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x36199f57 drm_prime_init_file_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x371e0695 drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38a4f7ae drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3ac1fef9 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b9d009a drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3dc565d9 drm_mm_insert_node_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3dd2964a drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3eb37b9d drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3f1788ad drm_platform_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3fd5bf6f drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43384bd9 drm_buffer_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44a0c113 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44e49dfe drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x46468f37 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x47a069d2 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x48cf2ce2 drm_framebuffer_unreference +EXPORT_SYMBOL drivers/gpu/drm/drm 0x498dcb5e drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x49f43ba7 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c511235 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4d088d1f drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4ea1f5a2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x50b64342 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x511ecb60 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x528f9719 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0x54a58d50 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x575d7fc6 drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x581ed292 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5b5f04be drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5eafb8e9 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x606ae2bc drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60aa826a drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x622bc027 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x629a21a3 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x65e3fa0b drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x685a19d9 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x69466a69 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6962324e drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b14bccc drm_mode_cea_vic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b6d2565 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b6d7375 drm_timestamp_precision +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6cee2e42 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6dad1ff5 drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6e60f663 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x71b09651 drm_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x71d4e09e drm_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7458a25d drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x74cf9c85 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x74fbf451 drm_mm_init_scan_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x76b7ec6e drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x798a78fa drm_prime_lookup_buf_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a4e7297 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a7066a1 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b42b5d4 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b7f4a08 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b85f6f8 drm_mm_insert_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7cc260e9 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7cdcfd49 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e2a1f09 drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8107d897 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8bbed098 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c09cf89 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c510862 drm_find_cea_extension +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8d23aa0d drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8de13715 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8dfb019d drm_buffer_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8e19c348 drm_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8eff9111 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8f7df3a7 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x93d220d8 drm_global_mutex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x948e00e0 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x955d725c drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9738fb6e drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9745d638 drm_err +EXPORT_SYMBOL drivers/gpu/drm/drm 0x993712b6 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c34dd4c drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9d347c2c drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9da85330 drm_prime_destroy_file_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9dd34b62 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9e220b07 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa14d8176 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1fb703c drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa255e45c drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa362b17e drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa60fe7e5 drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa810fd10 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xab4e561f drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0xac8d76fa drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb28f3fec drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb3e1e2f1 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb414da44 drm_framebuffer_reference +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4c1c306 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb56d0916 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb95beb55 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb9df68e2 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba11c9e0 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba2d0719 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba4e8279 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe001c53 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc13fda4a drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc25a61ec drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc2bcf0a4 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc2db63df drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc414c422 drm_vblank_offdelay +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc4775396 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc4c6dbba drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc8287e26 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xca45efbc drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0xca83bc88 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcb03cb85 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcb1beab5 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcb6b2f1e drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcb881322 drm_connector_unplug_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd0fc417 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd272f71 drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcda91c46 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcf7b391e drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd0452139 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd0dcdd90 drm_mm_insert_node_in_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd0e09c1d drm_unplug_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd16e9d2a drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd1bb5eee drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd2335101 drm_fb_get_bpp_depth +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd23b3308 drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd30fa590 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd63f85d5 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd8fe5b35 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd90bc8f8 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdbb5a9f5 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd5a7acc drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xde0b2e8b drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdece0261 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdf413eda drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdfcb235d drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe10a472d drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe16838c2 drm_mm_search_free_in_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe20d0890 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6b05061 drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6f46e6e drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7197773 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe735223b drm_get_last_vbltimestamp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe81c9444 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe8438ed1 drm_fill_in_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeb3f3b54 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0xec8380ce drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee4260d6 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0xee5c3c93 drm_mode_group_init_legacy_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf4a8a3f8 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf4b2e991 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf582ea2d drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf7c89398 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf92c66be drm_mm_search_free_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf9fb1dc8 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfb8a84a4 drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfc4864b0 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xff83253b drm_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xffc6c87a drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x1795c712 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x203c7c09 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x227c1a38 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x279776ba drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2c897158 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2d7a787f drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3c133849 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x45e833df drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4951633c drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x54da2b1a drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x54f2d386 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x55148926 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x561b57c8 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x610944e7 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x61ffbbaa drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x62b56267 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x70528ab8 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x711a004a drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7def9f98 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7ea27715 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8269b295 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x89d6864a drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x89fab378 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8c6def91 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x92617a94 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x92ee5f09 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x92fdb232 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x974a39d6 drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa8d6809d drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb2cd85be drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb37a0603 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb6b6f704 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xba537a2c drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc7fd39bb drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd02c73c7 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd47c257d drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd5d8b6b8 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xdcf89d40 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe7ecb6e2 drm_fb_helper_restore_fbdev_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xed50d7d8 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfee43a69 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0x14237ced drm_usb_exit +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0x98918ff3 drm_usb_init +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0xfca2f8ef drm_get_usb_dev +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x0e2a6864 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x0f5877d4 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x34257f35 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xa5f27a35 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xe5022f95 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xed1d2a08 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x23536b9e i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x931a4767 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xa4f798bf i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x61444c88 i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x926c6632 i2c_pca_add_bus +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x1e901082 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x4182b9e2 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x8ba71c71 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xb92469b6 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xf54592d2 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x1d774a28 hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x99a1953b hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x9c055c48 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0xae071747 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/industrialio 0x032fee24 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0x046c5c84 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x05c5fe7e iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x0623272a iio_sw_buffer_preenable +EXPORT_SYMBOL drivers/iio/industrialio 0x0d336121 iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x100dcf5e iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x2332c88c iio_buffer_store_enable +EXPORT_SYMBOL drivers/iio/industrialio 0x2a6ab1de iio_buffer_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x2d6bcdcb iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x37241810 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x39552871 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0x6ecdb758 iio_buffer_show_enable +EXPORT_SYMBOL drivers/iio/industrialio 0x6f6d89c2 iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0x6fa5b3a8 iio_buffer_read_length +EXPORT_SYMBOL drivers/iio/industrialio 0xa107ec0c iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0xb836fdf0 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0xbd9e5209 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0xc2fc691b iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0xd6b5a293 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0xd9260eaa iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0xdf76bbeb iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0xe37f1435 iio_buffer_write_length +EXPORT_SYMBOL drivers/iio/industrialio 0xf38ee437 iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0xf5084ad5 iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0xf8efa14a iio_buffer_register +EXPORT_SYMBOL drivers/iio/industrialio 0xfe8d69d8 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio-triggered-buffer 0x10dde3e7 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-buffer 0x3e77a71d iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/kfifo_buf 0x07b991fc iio_kfifo_free +EXPORT_SYMBOL drivers/iio/kfifo_buf 0x75751266 iio_kfifo_allocate +EXPORT_SYMBOL drivers/input/gameport/gameport 0x1bd7bdef gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x4bed4b74 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x4dcf125a __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x4eca7860 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x5567c56c __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x5c70e036 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xbbc91e07 gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc28cf18e gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc4f4aa04 gameport_unregister_port +EXPORT_SYMBOL drivers/input/input-polldev 0x2e195daa input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xbed503f6 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xc0887dc0 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xd816e53f input_register_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0x67d5781e matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x180f6d49 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/ad714x 0x46d82ea5 ad714x_disable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x5fa12a94 ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0x7fe3613c ad714x_remove +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x5ee64793 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x892d76b2 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x89d9444e cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0xca3f100a cma3000_suspend +EXPORT_SYMBOL drivers/input/sparse-keymap 0x188655db sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x255cfa4c sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x40b8f99e sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0xb43559e0 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/sparse-keymap 0xeb3c8140 sparse_keymap_free +EXPORT_SYMBOL drivers/input/sparse-keymap 0xf5159333 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x2a780211 ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x97f83edf ad7879_remove +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0xe2d48e90 ad7879_probe +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04f1264b capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x1f959cc2 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x3185b36c capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x815c9a6d detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9140e782 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa7c4fd6c capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb33f65c8 capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xbe99c549 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc10fe128 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe1a947a6 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe89a9c8f attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe8ad9bd1 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xff81cf75 capi20_put_message +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x33fbd7df hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x7f29ce36 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xe227344e FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xff2db2cf FsmDelTimer +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x55428402 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x8c7c38be isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xf219d4a4 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x150b2809 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1b66f468 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1bca3a0e recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x1f702430 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x22cf9c79 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2a0db289 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x33db01ab recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x39a4c4fe mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x54451388 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x56aa4faa mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x588886a6 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x614ede30 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x62b2f58a mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x63d800fe get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6a78a81b mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6ac4485c mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8268b6c2 mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8a4e99fb mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8e29b4aa bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8e9cc99e mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x90606568 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x92a6af92 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x96309324 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc399b0dc bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc9bfdac4 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe87943cf mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xec030095 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xed178167 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xed1e9fb1 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/dm-log 0x637d6528 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-log 0x78adeade dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0x975b2500 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0xcc652396 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0x129ff8db dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x3656a238 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x43b3c457 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0x950c0204 dm_snap_origin +EXPORT_SYMBOL drivers/md/dm-snapshot 0xe029781c dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0xed455302 dm_exception_store_create +EXPORT_SYMBOL drivers/md/raid456 0x62fb1c9d raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x04145246 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x30bd4c63 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x38228c6e flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x3addc3c8 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x3ee551c4 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x581f07cf flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x587242a7 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x6a68cba6 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x7591480d flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xb8b7f350 flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xcd890106 flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xdec92c66 flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xff793e4e flexcop_dump_reg +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x0a5c6d7c dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x0af852f1 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x0cfac5ea dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x17523ce7 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x27cb08a6 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x2b65be4d dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x300e90ff dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x32234886 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x344908d4 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x3656cb10 dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x3e9d6c32 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x3f87b862 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x47edbb35 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x57426ab2 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x5d15c395 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x5f122734 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x629f9d31 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x64e396a6 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x661e14a2 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x6d84fbe7 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x6ea7668f dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x72180695 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x78a505f6 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x8633f37b dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x92e2bcdb dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x9c19040b dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xa48ccb2c dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xb8bd92b1 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xbea9bec3 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xc7b71bc6 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xd68a099e timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xdab268b5 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xdb0b07a5 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xdb1a8bd4 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xdc094c39 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe7427a86 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe92f4df1 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xeda06883 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf48116c6 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb-frontends/a8293 0x1dd52944 a8293_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x10b1f6bd af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/af9033 0x89778c94 af9033_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x47a429a2 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x04933b80 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x097527da au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x3a8370ef au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x54e69b10 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x8015d644 au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x9f91900e au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xae528306 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xb28e326f au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xd3d254a4 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x780f3a4e au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0xe5777fb0 bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0xe3d0495a cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0xd9929e4d cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0xe0a7bdca cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0xaa1c7c53 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x0ea26820 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0xd656e63f cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x58b11679 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x3dfe51de dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x4bc13069 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0xa5ed3467 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0xc3d86729 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0xeb090136 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x1693454b dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x38bd6880 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x3c7ef363 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x4eb11b51 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x7a88b756 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x7c6e7798 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x7fd3f470 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x99fd045d dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x9a3200d9 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x9e573fb9 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xb31ed06e dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xd0313508 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xe3de9c46 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xe65d1974 dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xeea9bfb9 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0xae823597 dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x061f0cea dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x507fccc7 dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x5f4c3336 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x71f9d3d7 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0xd3edb674 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0xdceeaad3 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x33aebc6d dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x53f5f655 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0xb72775b8 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0xf3fa7ce2 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x19c29a88 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x1cff94c4 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x1f62bf15 dib7000p_update_pll +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x1fab4860 dib7000p_get_agc_values +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x21dd24a4 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x2bdecb66 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x551be33d dib7090_tuner_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x6757d198 dib7000p_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x67bd1257 dib7090_slave_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x8a27bd5a dib7000p_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xbca38cd2 dib7000p_ctrl_timf +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xd11883dc dib7090_get_adc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xdc1686a6 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xea1be816 dib7090_get_i2c_tuner +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xf3244d1d dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x085232a3 dib8000_remove_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x139d32e8 dib8090p_get_dc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x15e29550 dib8000_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x2bee8422 dib8000_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x36fc9f59 dib8000_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x3a8516d6 dib8000_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x4b3151d0 dib8000_get_adc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x8a180083 dib8096p_tuner_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x8cdcfff2 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x9907de76 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x9df9d6a4 dib8000_update_pll +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xa8ddd82f dib8096p_get_i2c_tuner +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xb236493a dib8000_ctrl_timf +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xbbd9aead dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xbcd96116 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xbe1b0052 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xc16cbf88 dib8000_set_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xe39aac9d dib8000_get_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xf62e7316 dib8000_pwm_agc_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x2f0cb0d2 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x4d398bd1 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xad3ad91c systime +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xb867a559 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xde6df6ed dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xe487b569 dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x7b707455 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0xd5f2a9df drxd_config_i2c +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0x2ca394e3 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x757e570c ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x16bb5ea6 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0xf0ad54a2 ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0x0b5b07f9 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x8000f220 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/it913x-fe 0x7dc067a2 it913x_fe_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x9db2a575 itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x6c632694 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x2f539d54 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x5e591444 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x3eb8b48f lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x3ed08f3f lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x087ecbac lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x5f82c115 lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0xbf2f7d60 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x3cb105c9 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x9364ca26 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x0badff86 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x99bcf69d mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x0f055ef9 nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0x5f6e5f30 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2830 0x2b0021a9 rtl2830_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2830 0xef503d0f rtl2830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2832 0xae571c78 rtl2832_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x89369dc8 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0xc294e61a s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x1c20db1e s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x24ea11d1 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x21a26b5d s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0xc12548e2 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x105c85ef stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x38efc2dd stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x7a99f73a stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0x23626bef stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0xd8ce82f0 stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x6a1d7bfa stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0xe24412e5 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x6440727c stv090x_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0xefa89431 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x19be1c6e stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x62cc1743 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x259ab076 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x1bb36e18 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x45bfe70d tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x7314bdf7 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10071 0x3296e3af tda10071_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0xe85eeb21 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x0b93aab3 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x4079668b zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x2ef3eb53 zl10353_attach +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x3db8be82 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xa73bac08 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xb0eeb136 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xc184ec1e cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xc57d8950 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xc8c66f11 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/i2c/tveeprom 0x79ca310d tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/i2c/tveeprom 0xf87d1ef1 tveeprom_read +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x41d93a98 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0xc3e4c127 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/platform/davinci/vpfe_capture 0x2068f8d0 vpfe_unregister_ccdc_device +EXPORT_SYMBOL drivers/media/platform/davinci/vpfe_capture 0xd4afd7b9 vpfe_register_ccdc_device +EXPORT_SYMBOL drivers/media/platform/davinci/vpss 0x088ccec9 vpss_select_ccdc_source +EXPORT_SYMBOL drivers/media/platform/davinci/vpss 0x319709a6 vpss_clear_wbl_overflow +EXPORT_SYMBOL drivers/media/platform/davinci/vpss 0x54146824 dm365_vpss_set_sync_pol +EXPORT_SYMBOL drivers/media/platform/davinci/vpss 0x6e5b5413 vpss_enable_clock +EXPORT_SYMBOL drivers/media/platform/davinci/vpss 0x749bf2c9 dm365_vpss_set_pg_frame_size +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x0831c6fa soc_camera_unlock +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x3c6006a7 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x3e15d542 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x3ec6a4f6 soc_camera_lock +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x72bc3636 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x8ae93d35 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0xb7a657a8 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0xdcb4f583 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x2fc57265 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x31477397 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x61871f65 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x7371455d soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0xc8b28da5 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0xde30e6b9 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x08fa8386 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x59d23afb lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x61d89bef lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x68183bd5 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x6c583551 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xa40337b5 lirc_register_driver +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xd6bb7088 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xf69dc340 lirc_dev_fop_write +EXPORT_SYMBOL drivers/media/rc/rc-core 0x82e65a29 ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/rc/rc-core 0xdc227a27 ir_raw_handler_register +EXPORT_SYMBOL drivers/media/tuners/e4000 0xa9bd872e e4000_attach +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x95e86e10 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x73590c7e fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x3ffb30b8 fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x92e10b0f fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0xfc831225 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/fc2580 0x5fb2c924 fc2580_attach +EXPORT_SYMBOL drivers/media/tuners/max2165 0x0d56422a max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x32416619 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x18e9879b mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x69813f3f mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0xce7952bc mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x95241abf qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18212 0x882283e0 tda18212_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0x98163b8e tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tua9001 0xfd4b2a58 tua9001_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0xe23c46d9 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0xc076e5cb xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x8e3ba049 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x34e60cb1 cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x7af2c165 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_cypress_firmware 0x255b1035 dvb_usbv2_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_cypress_firmware 0xa4f4521f usbv2_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x5122fd7f dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x5c15bf52 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x66aabdbb dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x86a79406 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x895f9ea9 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xc9f97f14 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xd9d46413 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x058cdbb1 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x0a607fd7 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x591bc2f0 dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x693bb07b usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xa31e53ac dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xcfae56f2 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xe1b9435d dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x13e247e0 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x4950c28a af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0xd4e288db rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x2a474eb0 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x36a8be6d dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x3b9562df dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x902ded54 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x9312337b dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xb47559e0 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xc2869e71 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xd9c25172 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xefc301a8 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xf99381ec dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xfa2c2751 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xfe2c9187 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x1c7e35f8 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x6ce8b4d9 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x2ebe6560 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x3b8f9c7d gspca_suspend +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x6bf980d6 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x7c32b352 gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x81610074 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x8c960eac gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x926b54eb gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xe6780ac2 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x4f3ca065 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x5f6240c2 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x8d7f5b20 tm6000_register_extension +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x230a09b9 v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4adaf0f3 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x53c9394f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x5f96a661 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0xabe27502 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0xb6816fc7 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x1371e39e v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x459e133f v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x71fe544b v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0xe87d9000 v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x45fa2da6 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x4d113508 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x780eb213 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x959ca716 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0xaf8d4b81 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0xb269c9d2 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x1c3a6ec7 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x0181b170 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x06b9b9b5 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x07437c7c v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x08cd1cfa v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x0aa77fc9 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x16244fe5 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x169c5aa0 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2342f1ae v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x236a2317 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2bd84f35 v4l2_ctrl_add_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2c13e55c v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2cb7e585 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2eef39e6 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x35630d66 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3bdd0f94 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x4222870e video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x4b18a301 v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x588d288c v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x5a023acf v4l2_subdev_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x5d79f863 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x64472040 v4l2_ctrl_handler_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x6680abba v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x66a251fe v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x683359ee __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x6fb08cbb v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x709f8a6b v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x719be667 video_usercopy +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x7a3cd015 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x7fb9468c v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x8106095a v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x81e1fc87 v4l2_subdev_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x8678660b v4l2_subdev_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x87a777d9 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x89bb7ac2 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x8dfa8b24 v4l2_subdev_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x90297033 v4l2_subdev_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x932474ea v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x948526d9 v4l2_subdev_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xab01f013 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xab4b30dc v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb5cc5802 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb77b0159 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb9c7a0cb v4l2_subdev_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbac4a225 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbc5671dc v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbc731b42 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc12cf8f8 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc13ea367 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc4651aa9 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc7ffcf9f v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xcda04a5b v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xd71f0270 v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xdb78297d video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe44a60a6 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe6fce6f2 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xed6448a9 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfc01eb94 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfd5f1b0b video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfdffe5f8 video_devdata +EXPORT_SYMBOL drivers/memstick/core/memstick 0x0b0eba43 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x10516d4a memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x1b7c50bd memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x4bbc5bdd memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5c31f61c memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d92e90b memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x63a80a90 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0x68c59593 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x6bad9301 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa8b1575d memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xbc0ef5e1 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xbf19bb49 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xeeb30386 memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xf0bb3f87 memstick_free_host +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x447d51c1 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xbcba2e98 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x2b2bee5b mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x32986e64 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x345c7cc7 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xac8dc1ed mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xbcbe0943 mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xc24e26b0 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xc331e7b5 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xc3515593 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xcc00d278 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xced0f5bf mc13xxx_irq_request_nounmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xd64143e6 mc13xxx_irq_ack +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xe2cbd9bc mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xeac180a3 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/tps6105x 0x206e32cc tps6105x_mask_and_set +EXPORT_SYMBOL drivers/mfd/tps6105x 0xee79a9a2 tps6105x_get +EXPORT_SYMBOL drivers/mfd/tps6105x 0xf6d0bc53 tps6105x_set +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x0c6ad2cf tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0xb54a6c72 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0xdabdf3fb ad_dpot_probe +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x8a05ed90 altera_init +EXPORT_SYMBOL drivers/misc/atmel_pwm 0x0e9755b9 pwm_channel_free +EXPORT_SYMBOL drivers/misc/atmel_pwm 0x5a8b82f9 pwm_channel_handler +EXPORT_SYMBOL drivers/misc/atmel_pwm 0x5d5c2951 pwm_clk_free +EXPORT_SYMBOL drivers/misc/atmel_pwm 0x6a5e1f70 pwm_channel_alloc +EXPORT_SYMBOL drivers/misc/atmel_pwm 0x73330c97 pwm_clk_alloc +EXPORT_SYMBOL drivers/misc/atmel_pwm 0xeb7f2c6f __pwm_channel_onoff +EXPORT_SYMBOL drivers/misc/c2port/core 0x2d53407c c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0x6a78208f c2port_device_unregister +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0x348dba6b dw_mci_resume +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0xcd46e13a dw_mci_suspend +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0xf2bdd376 dw_mci_probe +EXPORT_SYMBOL drivers/mmc/host/dw_mmc 0xf5918822 dw_mci_remove +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x2daf0154 tmio_mmc_host_probe +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x378f2335 tmio_mmc_irq +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x4f7f10af tmio_mmc_host_remove +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x6d3deee9 tmio_mmc_sdcard_irq +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x7a6fd700 tmio_mmc_sdio_irq +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x7e5d7c48 tmio_mmc_host_runtime_resume +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0x80cbbe57 tmio_mmc_host_suspend +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0xbe1301e7 tmio_mmc_host_runtime_suspend +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0xc89517af tmio_mmc_host_resume +EXPORT_SYMBOL drivers/mmc/host/tmio_mmc_core 0xf02062dd tmio_mmc_card_detect_irq +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x7101c9e4 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xc4496b8a cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xe4c11211 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xdcd36b92 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x5cb1f388 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/nand/denali 0x417707ee denali_remove +EXPORT_SYMBOL drivers/mtd/nand/denali 0xc882187f denali_init +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x1f0013b7 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x7ced2843 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xae4b30ee flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xd45b877e onenand_default_bbt +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x281895a3 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x3c0c0869 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xe4d6ef5f hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xe5f1578a hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xe883b0a4 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x0e2d75aa sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x3256dd79 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x367dc58b sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x421df21b irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x5313b055 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xa6a52b6b sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xb68a2038 sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xc34c7034 sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd48ba1fd sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xf5fe5b9f sirdev_get_instance +EXPORT_SYMBOL drivers/net/ppp/pppox 0x8d550692 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0xdc4623b5 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0xed42f3bd pppox_unbind_sock +EXPORT_SYMBOL drivers/net/usb/usbnet 0xe8126ccd usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0xe9b6d11e usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/hdlc 0x22824016 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0x2cdfbf95 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x46b2c443 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x589ec72b hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0x58decee0 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x5f292ccc alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x9e509616 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x9fd4fd77 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa5216657 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xbd976b8c hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0xbf44961c register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x5cb17492 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x09762564 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x12c17db3 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x319c6026 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4181525e ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4b4f0307 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4e2481d5 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x53358ce3 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x5b669f11 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x84dac405 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x8ae39832 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xbc2a276e ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xf5c5f366 ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xfad41e18 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x15f39797 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x20ec1c11 ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x27ac5743 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x4e1380ee ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x5cc1ca24 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x87a8c5e8 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x91cfb84a ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x9b7b9550 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xa1d80a27 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xaa2c3fa4 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xaaf2f3f3 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xe575c3bf ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x26897772 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x91fc76f5 ath9k_hw_wow_event_to_string +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x9b7c5acf ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0xede98b00 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x29ebd130 ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x4bf21931 ath9k_cmn_get_curchannel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x59275983 ath9k_cmn_update_ichannel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x60cf2878 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xd2981357 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xea8635a7 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xf59eadf3 ath9k_cmn_padpos +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x007e1f68 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00ba407c ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x00d39baa ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x04b5551a ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x07c0135e ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x0c9c84d6 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x0dbb3aff ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1253ba5e ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x126ed542 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1484637e ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x16a32c34 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x18a8059b ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x18ad0e33 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x193fae53 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1a767f2c ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1a869e04 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1d3e7a0a ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1fe5d03a ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x217999f6 ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x237e996c ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x24e2b7db ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x25edef73 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x27bf3cd6 ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2a00e7d9 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2d88942c ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2dc38153 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2f663eef ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2ff1e2bf ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x355924f7 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3a3b0387 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3b76739f ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3d12e072 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3eb1982f ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x46929029 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x47174d9d ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x481cdf3d ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x4f25156c ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x559cebcd ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x566c2e4f ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x575bd720 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x606c7622 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x60867761 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x6696a244 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x6ad463c9 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x714fcfca ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x741dd44c ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x77f57644 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x78a0e175 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x78c074fc ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x7b75640f ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x7c120c84 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x7c3c74a0 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x81b9ace5 ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x81ffe655 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x82978b07 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x84a7c910 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x85ade02c ath9k_hw_cfg_output +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x87acffaa ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8c27c6f7 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8f39ffc2 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x91e28a68 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x91fe025d ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x921b3ed6 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x94ac5f44 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x94e7f64f ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x95d366f8 ath9k_hw_cfg_gpio_input +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9638def1 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9b1b5490 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa4ed65c0 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xaa6c68da ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb41a3adc ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb906cffd ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbbfeb8e8 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc0a4d050 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc32d4a2e ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc7a15ad0 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc92f7d89 ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xcc6d0332 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd34000af ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd45c9440 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd48b2d98 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd6c2db50 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd736df84 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd7791179 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xdc796681 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xdf3316eb ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xe17b9245 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xe4cb3f31 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xe656d0a7 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xe90d2731 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xed6a25ef ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xee8a9b8f ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf3e5acd2 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf57cb95b ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfd4e06ff ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfd7e98bb ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xff73cc6c ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmfmac/brcmfmac 0x1ce52c6f brcmf_sdio_remove +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmfmac/brcmfmac 0x356e7ab5 brcmf_sdio_probe +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x01e97115 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x0a26fb6b brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x0c03abd9 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x137a21cc brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x18b89e85 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x358f8c99 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x3f188ebd brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x5407bab2 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x7cd7809e brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xa299fb56 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xf97693a1 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xfdee6776 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x06ec654d prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0ad69602 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x46cf038e hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x59f5bfb5 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x66f6cf75 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6b175409 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6f34f342 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x73d905a4 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x7649b01a hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x767b235f hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x792f69be hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x8b874821 hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x9ad392c2 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa681c74f hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xbe1736e8 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc3932a53 hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd1964e89 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd30a9bcd hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd52d3a76 hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xe181bfa3 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xea262f8f hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf49d7464 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf6ac8eb5 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xf8c7ea9c hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfa06337f hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xfad9f4b4 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x0157d00e rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x05dc1e02 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x084a0073 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x0bae4af0 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x19feb73f _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x22864af9 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x293b121d rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x381e1a8c rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x41a16df7 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x44ced639 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x48367551 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x4ca26de6 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x5e97b0bc rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x67b4abd7 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x695cdb5e rtl92c_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x721475d7 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x8180ad86 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x8806391f rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x8a932df7 _rtl92c_phy_dbm_to_txpwr_Idx +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x98bfe6bf rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x9ca438eb rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xa3d8ecc0 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xa93e4e16 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xad428c4f rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xaf8a34e4 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xb3314d48 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xb5f024a4 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xb766953f rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xba2f443d _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xc1aac80c _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xc4ef2c21 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xcffeab02 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xd67fb219 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xd861d881 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xda1b16a7 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xde01eab0 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe0db2447 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe3a2facd _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe8927994 rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xeb256ccb rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf36d248c _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf76da846 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xff90cb16 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x132ae8a1 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x15b2e77a efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x180dd6b6 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x207fbb70 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x449aaa42 rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x47e68cea rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x5d0d8453 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x619ff393 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x6ab333c5 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x6cd0ffa4 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x79188a02 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x7cf62e40 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x855af89c rtl_ps_set_rf_state +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x8d556fd3 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x9334eed7 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x94193925 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x96766a7e rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xa3a6f599 rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xb7521c68 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xb87a5403 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xbfc3d108 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xcddc8aad rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xdcd019ff rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xdf5088c5 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x0a674579 wlcore_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x850c7c18 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x912ffcee wl1271_free_tx_id +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0xaa2a82eb wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/parport/parport 0x01b29bd6 parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x0741f04f parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x350ea72f parport_write +EXPORT_SYMBOL drivers/parport/parport 0x386d4b58 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x3d31f263 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x3ded2beb parport_read +EXPORT_SYMBOL drivers/parport/parport 0x3f9a6aec parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x42313375 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x4863a41c parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x548fb71f parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0x5577b4b5 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x577e7b61 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x5e3a3912 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x63a7aff3 parport_release +EXPORT_SYMBOL drivers/parport/parport 0x64a0b446 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x659b7df6 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x690b0feb parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x8edd2396 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0x90656d55 parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x9a765569 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x9ae40da8 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xa0748382 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0xa55a4543 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0xb3704172 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xc6889422 parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xca4d3c15 parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0xce5422ce parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0xd680da5a parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0xe078cd62 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0xe5e12475 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xf0e92969 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport_pc 0xa34088fd parport_pc_unregister_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xdbe70ff9 parport_pc_probe_port +EXPORT_SYMBOL drivers/pps/pps_core 0x2640d649 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x2815249a pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0x47e4c568 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0x5e8fb801 pps_lookup_dev +EXPORT_SYMBOL drivers/ptp/ptp 0x1b7d8ddf ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x336519ab ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x8ee6ed3e ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0xbb6627a5 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x0178ba9a pch_ch_event_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x040d83ed pch_set_station_address +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x4ebc499b pch_ch_control_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x6cd9ff70 pch_rx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x81e8792d pch_ch_control_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xb126a051 pch_src_uuid_lo_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xc6af2f78 pch_ch_event_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xcdb2f9ae pch_tx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xe7ee43d6 pch_src_uuid_hi_read +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x2c53c186 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x3e12a76f rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x421f3caf rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x4334be1c rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x4d8f818f rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x872fc237 rproc_vq_interrupt +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xb2d3ba44 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xd5b06a1a rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xddd719d3 rproc_boot +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x13e066b6 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x282abc37 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x3d8eb925 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x52c27c11 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x5e6260c6 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x6c835813 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x869f4f73 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xb2b06814 fcoe_ctlr_get_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xcfad7378 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xdaa78ecc fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xe79d495d fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x02fb9772 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x03b2dced fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x061c0560 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x082a899a fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0f12dc09 fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1921c901 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1b466f28 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x22b90986 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2c7a94a2 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3057db35 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x43a877ad fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4af2b7b7 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4b288d8f fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x511af063 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x533fc149 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5d50104b fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x674b4e99 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x67868483 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x679d2228 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x691b50f1 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x74b0c0ea libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7567549a fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x794b682f fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7cd4a0f6 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x98d34c49 fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa218d05b fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa333ddd8 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa5ec5135 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa60703ae fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xac11e4b0 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xad7c60c6 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb589abb2 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb600b696 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb8c30123 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc9d70644 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd1539dfc _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd211a4fa fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd315a89c fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe41dedde fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe4dcb4d6 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xee9a9a5b fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xefae1574 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xefc82be6 fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf299afc7 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf2b3b9f3 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf47cf48c fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf52db210 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf9552a33 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfabd56a7 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfd298d55 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfd7bb80f fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfece7af4 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x6b0e11ab sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x758ca9ed sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x8a87e724 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0xc39fee32 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0xdb0eb0ea sas_wait_eh +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x05897731 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0d33ac07 osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1ee8db9f osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x21b44630 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2cc155de osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2f831e78 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3100aa43 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x38b64f92 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3fd55a92 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4225132d osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x42d4ff3f osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4c45d124 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4f1711f9 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5421f2e7 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5a2c794a osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x653c17f0 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x814e0625 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x81e2396d osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x828f7f87 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x840e3466 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x84c957e7 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x858262fc osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9de814e0 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa07de7ef osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xae013df0 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb77e285c osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd23801a2 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd49b7cce osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd811524d osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdb9cbc8d osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdf6484ce osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe5979fa1 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xeb704955 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf5eb61e8 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf74d3da7 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf9cf40df osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/osd 0x1c6398fe osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5bae4deb osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6b4b8e8d osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x8f6c9343 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0xc373d4c3 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0xfecf23b0 osduld_register_test +EXPORT_SYMBOL drivers/scsi/raid_class 0x94022461 raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0xa42e71e1 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0xa5cdf42f raid_class_attach +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x0ad2acff fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x1d05d60c fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x2f962d18 scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x3349d91e fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x491db9aa fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x4e646e5e fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5b5a35b0 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x5ff7c872 fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6a5e817f scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7cd3abae fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x85591756 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x9a21b592 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x9eefe6db fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0007f80b sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x001cd14f sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x0630720d sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x13f9232c sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1db1ce4a sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2597924b sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2bd62b1c sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x36dd4671 sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3bac1b8d sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x440656ad sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4750f228 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4c5db5c1 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4e90aa26 sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4f29675c scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x613777e8 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x70fe5a1d sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7125e28c sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8693e178 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8b3b6fc1 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8d4e2aae scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa8408755 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xadf474cf sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc601c405 sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc97ae059 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd94a6b14 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdaa76465 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe2e8dcd0 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe8d0bae8 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x09a58845 spi_display_xfer_agreement +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x0ec9dc49 spi_schedule_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x2f251baf spi_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x3686ea09 spi_print_msg +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0x52c7d98e spi_dv_device +EXPORT_SYMBOL drivers/scsi/scsi_transport_spi 0xb07e400a spi_release_transport +EXPORT_SYMBOL drivers/ssb/ssb 0x0027591c ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0x07bf7f5b ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x10bb5a76 ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x16c7984e ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x20e67f06 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x27a4c68d __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x38d2c30e ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x4ec56b5c ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x5fccf121 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x64673f7a ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x6fa572d1 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x992fb0a3 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0x9e5cddee ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xa6bb94a7 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0xb5b4467e ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc84d8c3d ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0xccaeaf7c ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xd525e962 ssb_dma_translation +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x900ed542 adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0xf9412c5d adt7316_remove +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x15a4d094 ade7854_remove +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x9663c9f8 ade7854_probe +EXPORT_SYMBOL drivers/staging/iio/ring_sw 0x3540ff53 iio_sw_rb_free +EXPORT_SYMBOL drivers/staging/iio/ring_sw 0x7cb6c92a iio_sw_rb_allocate +EXPORT_SYMBOL drivers/target/target_core_mod 0x0018c92b transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x00741c20 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x02d011f3 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x02de3b18 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x03c7de58 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x06fa7dd0 __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x0a2c41e2 sas_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x0c07307f transport_wait_for_tasks +EXPORT_SYMBOL drivers/target/target_core_mod 0x11eaf150 target_fabric_configfs_init +EXPORT_SYMBOL drivers/target/target_core_mod 0x12d7744f fc_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x18002a5d transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x1e3e38af iscsi_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0x1f7b44b7 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x2a7e9e89 sas_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x2df6fba3 iscsi_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x301f2024 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x310fdf76 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x35d72595 core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x36f9ca9f sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x3cc4d9d1 spc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0x3fe6b3fe target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x42be5881 transport_subsystem_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x431af2ea transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x47e8b7f2 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x548c0e95 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x56f1cd47 core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x59ca0f8f transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x5c86f9ab sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x5f705d15 sas_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0x609c0527 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x6308a391 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x70748f5a transport_subsystem_release +EXPORT_SYMBOL drivers/target/target_core_mod 0x71c3e777 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x73ddc591 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x76b1bf04 target_fabric_configfs_free +EXPORT_SYMBOL drivers/target/target_core_mod 0x784612f2 iscsi_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x796caf76 sas_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x79a237d1 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x7a8e8771 core_tpg_del_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x7adfc0ce transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x7b8ad9b8 target_put_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x7dbada9d transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x85aa880c transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x867839ab fc_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x878f5d16 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x8d89f1cb target_fabric_configfs_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x90c869a1 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x92f5225d target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x9a34ac22 transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x9b1df218 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x9fb6fec0 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0xa0182b6c target_get_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xa3139605 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0xa862cb98 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0xabcbdbaa target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0xae8dfdbe target_fabric_configfs_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0xb63952a2 iscsi_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0xce29a5de spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0xd9bc993a fc_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0xe01d3619 fc_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0xe7c9a625 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xed4aeeff core_tpg_add_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0xee11d9ef transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xef60b673 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0xf01621c7 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xf45512a4 core_tpg_clear_object_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0xfccc2a12 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0xb1505d10 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0x6c860197 sl811h_driver +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x0c913f87 usb_wwan_set_termios +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x212bbb28 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x3732e350 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x38ad7f8a usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x7207b3df usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x85848c54 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x9e0b33c0 usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xaa024802 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xd526130e usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xde1907d1 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xf2819e2f usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xf33bb984 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xfe6ca31b usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xd383d447 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xf2164b93 usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0x366d19ef genericbl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x2c14f056 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x2f1adc7d lcd_device_unregister +EXPORT_SYMBOL drivers/video/output 0x0336bdd7 video_output_register +EXPORT_SYMBOL drivers/video/output 0x6ec1ea86 video_output_unregister +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x2d284cb0 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x7e44ce55 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xa00f3024 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xa9bd8135 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x350c0439 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0xdb7e0efa w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x4cc9dec7 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0xb503095c w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/wire 0x0b008dea w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0x507ef327 w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0x8b06cf29 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0xca0dafac w1_unregister_family +EXPORT_SYMBOL fs/btrfs/btrfs 0x02897198 ulist_add +EXPORT_SYMBOL fs/btrfs/btrfs 0x09dceb4d ulist_free +EXPORT_SYMBOL fs/btrfs/btrfs 0x09fa4bcc ulist_init +EXPORT_SYMBOL fs/btrfs/btrfs 0x34b9e4c4 ulist_fini +EXPORT_SYMBOL fs/btrfs/btrfs 0x35490e9d ulist_next +EXPORT_SYMBOL fs/btrfs/btrfs 0xe4423912 ulist_alloc +EXPORT_SYMBOL fs/btrfs/btrfs 0xedf03da5 ulist_reinit +EXPORT_SYMBOL fs/configfs/configfs 0x1a7ee5a2 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x306822e0 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x34f54a4d configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0x4e89da5e configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x6127cef7 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x71eadb8f config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x88cc541c configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x9a6b1425 config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0xa7e52242 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0xc04c6787 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xcf66f3c8 config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0xda7e5577 configfs_register_subsystem +EXPORT_SYMBOL fs/exofs/libore 0x011500ad ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x19da7061 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x1eb1dc5f ore_create +EXPORT_SYMBOL fs/exofs/libore 0x28806871 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x326b2c36 ore_read +EXPORT_SYMBOL fs/exofs/libore 0x34776ebd ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x4ec8e2e7 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x83476856 extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x888073d1 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x88d444c9 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0xa2e56ebf ore_write +EXPORT_SYMBOL fs/exofs/libore 0xa3d2a634 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0xd16c8bd2 ore_get_io_state +EXPORT_SYMBOL fs/fscache/fscache 0x0498657e fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x10f5a47f __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x1ded7a28 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x2051bcf8 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x25631afd fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x34abc070 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x58d02e47 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x5bcabd5c fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x5ec92775 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x6b13f971 __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x74530ecd fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x7a8dfb85 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x7c82f758 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x7e16804b fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x7f8336db __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x87a87de8 fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x8a89639e __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x903db10f __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xa5807656 __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0xa7a86f2f fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0xaa8c7f75 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0xb7a4d9d1 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0xbe23d8e9 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0xd45fa72e fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0xde4fc950 fscache_object_work_func +EXPORT_SYMBOL fs/fscache/fscache 0xdee9c70d fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0xe0509c49 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xe52bf2d6 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0xee3f801c __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0xf81e5530 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0xf85c9f22 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0xf9e53d0b __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xfa2bcecf fscache_op_complete +EXPORT_SYMBOL fs/nfsd/nfsd 0x13d93eda nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x83585203 nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0xbfd7d7a2 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x02a18407 qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x06a4efca qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x113c5b90 qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xaf1cdb3b qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0xf490fc73 qtree_delete_dquot +EXPORT_SYMBOL lib/cordic 0x434bfd07 cordic_calc_iq +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/crc8 0x41248eaf crc8 +EXPORT_SYMBOL lib/crc8 0xab9ad613 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0xd4534d80 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/lru_cache 0x01fee6cc lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x04d1dc01 lc_create +EXPORT_SYMBOL lib/lru_cache 0x237cf92a lc_index_of +EXPORT_SYMBOL lib/lru_cache 0x33a23991 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x3c859f74 lc_find +EXPORT_SYMBOL lib/lru_cache 0x3fb8b26f lc_committed +EXPORT_SYMBOL lib/lru_cache 0x5f6e63d8 lc_reset +EXPORT_SYMBOL lib/lru_cache 0x8a4aca44 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0x9804e883 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0xac53a693 lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0xac605f52 lc_get +EXPORT_SYMBOL lib/lru_cache 0xba0f762e lc_put +EXPORT_SYMBOL lib/lru_cache 0xe039fe99 lc_set +EXPORT_SYMBOL lib/lru_cache 0xe1ebe371 lc_try_get +EXPORT_SYMBOL lib/lru_cache 0xe301a257 lc_del +EXPORT_SYMBOL lib/lru_cache 0xff41c5be lc_try_lock +EXPORT_SYMBOL lib/raid6/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0xd9e91f83 raid6_vgfmul +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xe9f7149c zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8022 0x5066aefc register_8022_client +EXPORT_SYMBOL net/802/p8022 0xcfd7cd22 unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x851bda19 destroy_8023_client +EXPORT_SYMBOL net/802/p8023 0xb6b8bcee make_8023_client +EXPORT_SYMBOL net/802/psnap 0x9b90d753 register_snap_client +EXPORT_SYMBOL net/802/psnap 0xa82f94d9 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x04ce8f40 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x1a37c7e9 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x1fc00af0 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x251832e1 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x26ef73d4 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x29c0ca59 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x31506918 p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0x35d1e27e p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x385bf1d8 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x407a5979 p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x41ad2a83 p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x5680bdea p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x593c6707 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x5ed4a661 p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x6067807d p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x60e6f4a4 v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x6bfacd42 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0x6e700077 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x71d6b08d p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x7406d0d6 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x7cec8817 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x8140f494 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x8391a6ac p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0x856696c2 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0x8a216d51 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x90b5c343 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x94c5d1cf p9_payload_gup +EXPORT_SYMBOL net/9p/9pnet 0x977a0030 p9_nr_pages +EXPORT_SYMBOL net/9p/9pnet 0x9877115f p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9cc85291 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x9e2830b3 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0xa3a652c5 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0xa74a1df1 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0xaca5007d p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xbaa6cf0c p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0xc4726e37 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0xc47695aa p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0xc5db54a9 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xcb9fd898 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0xcc300ab5 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0xce23ae32 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xd8d213f1 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0xe08482dd p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xea3c186b p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0xea97ce5b p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0xf0abdc90 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xf4a111d8 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xf84f2022 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0xfd40c79d p9_idpool_check +EXPORT_SYMBOL net/appletalk/appletalk 0x0204775a alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0x60a49a9e atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x94abb0f2 aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0xd3b75e9e atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x0784738a vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x196b477e atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x29d82487 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x3788698b atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0x37e7f87d vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x502feed9 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0x8002896b atm_charge +EXPORT_SYMBOL net/atm/atm 0x9feaf287 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0xa9628f98 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xaa024146 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xab84879d atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xbdfb9270 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xcb72aac7 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0xd06f9ec3 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0xdb1f9193 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xfac5ae25 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0xfeda8d8d vcc_release_async +EXPORT_SYMBOL net/ax25/ax25 0x026c1368 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x13e0d5e8 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x1996789f ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x42256f8d ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x6385c07f ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0x87cb20f4 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x9113127b ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x9efe3079 ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xa023b9ae ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0xbc817fa0 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xf6128b88 ax25_hard_header +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0717c31d hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x09b4f19e hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0b7d0ab6 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0efcbc23 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1540f016 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x15637441 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1af679ad bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1b5d2011 bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x224b1ca1 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x416f8123 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x428cddac hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4b0a676b hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x51cb2c15 bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x68002240 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7c640527 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7f510608 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x84365c75 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x8af7db3f bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x91c9a325 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9d0c6a65 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa542e9a0 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb11e399b hci_send_cmd +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb25e82c0 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb4918b6f bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb61a0c3b bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0xba29f21c hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0xbc5735eb bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0xbd315a06 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd1dc7871 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd427853b hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd5dcd505 hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe1d596cc bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0xea2ea5ef bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf30c7ef1 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xff04b692 hci_recv_stream_fragment +EXPORT_SYMBOL net/bridge/bridge 0x8be4fb93 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x101232e7 ebt_do_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x34b5d921 ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xc9c896a7 ebt_unregister_table +EXPORT_SYMBOL net/caif/caif 0x11bacad8 get_cfcnfg +EXPORT_SYMBOL net/caif/caif 0x1446b60a caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x2a09f713 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x329dbd06 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x38701a7c cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x4a237e57 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x6433ed43 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x6a44fc70 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x839ddb7b cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x8c0ec6e1 caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0x966d7de2 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x9d9b9a02 caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x9e3e305d cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0xb7b6874e caif_free_client +EXPORT_SYMBOL net/caif/caif 0xc1dad5a3 caif_connect_client +EXPORT_SYMBOL net/can/can 0x1f1e8756 can_rx_unregister +EXPORT_SYMBOL net/can/can 0x3e5844fc can_rx_register +EXPORT_SYMBOL net/can/can 0x410d315e can_proto_register +EXPORT_SYMBOL net/can/can 0x87538f9a can_proto_unregister +EXPORT_SYMBOL net/can/can 0x8bd320ec can_send +EXPORT_SYMBOL net/can/can 0xbd4a844d can_ioctl +EXPORT_SYMBOL net/ceph/libceph 0x060429e7 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0x09290ab3 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x0bd5dcf4 ceph_calc_pg_primary +EXPORT_SYMBOL net/ceph/libceph 0x0cb33872 ceph_osdc_cancel_event +EXPORT_SYMBOL net/ceph/libceph 0x105779d6 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x10940306 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x12ea8400 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x17965e1b ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x197effcb ceph_osdc_release_request +EXPORT_SYMBOL net/ceph/libceph 0x26744373 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x27c1d216 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x283e1143 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x29633084 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x2b3ab88d ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x2dd048b4 ceph_osdc_create_event +EXPORT_SYMBOL net/ceph/libceph 0x3158173e ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x3abec91f ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x3cd0be87 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0x3f3ec085 ceph_copy_page_vector_to_user +EXPORT_SYMBOL net/ceph/libceph 0x3ff459bd ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x4205ffd7 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x43c8d341 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x43e458f6 ceph_file_part +EXPORT_SYMBOL net/ceph/libceph 0x44be48f3 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x4deab868 ceph_monc_create_snapid +EXPORT_SYMBOL net/ceph/libceph 0x500ff63e ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x50c29f3b ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x5379cea3 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x57baf885 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x59b1e263 ceph_osdc_unregister_linger_request +EXPORT_SYMBOL net/ceph/libceph 0x5fe4b2fa ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x61a49ee9 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x62bad980 ceph_calc_raw_layout +EXPORT_SYMBOL net/ceph/libceph 0x63758856 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x6d2d06a1 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x6ed41be2 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x73b5d161 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x756f8bb7 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x77692acb ceph_msg_last_put +EXPORT_SYMBOL net/ceph/libceph 0x7a2dd5a7 ceph_client_id +EXPORT_SYMBOL net/ceph/libceph 0x7bb2728d ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x801e9a3b __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x81cbb997 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x82278353 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x83dfb2f7 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x87b33327 ceph_calc_object_layout +EXPORT_SYMBOL net/ceph/libceph 0x893a905f ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x8c5d3662 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x9583b927 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x99c21bbc ceph_osdc_stop +EXPORT_SYMBOL net/ceph/libceph 0x9f534f4d ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0xa2a1caf0 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0xa40bd703 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0xa7bfd328 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0xa8abc089 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0xafb8a407 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0xafb9af06 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xb3749857 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0xb54676fa ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0xb6081d6d ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0xc0a16895 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0xc4a80955 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0xc55de604 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0xc6492c4a ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xc9de69e1 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xc9f82b38 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0xcb50a624 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0xcbacc896 ceph_monc_got_mdsmap +EXPORT_SYMBOL net/ceph/libceph 0xd1526f29 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0xd2c107bb ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0xd2e3675c ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0xd4757e9a ceph_osdc_build_request +EXPORT_SYMBOL net/ceph/libceph 0xd76e4d99 ceph_osdc_set_request_linger +EXPORT_SYMBOL net/ceph/libceph 0xdf530b0b ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0xe484b2b2 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xe927a692 ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0xe9a36419 ceph_osdc_wait_event +EXPORT_SYMBOL net/ceph/libceph 0xeeec1d55 ceph_osdc_put_event +EXPORT_SYMBOL net/ceph/libceph 0xf24611af ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0xf3d27065 ceph_osdc_init +EXPORT_SYMBOL net/ceph/libceph 0xf512ae72 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0xf7845a09 ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0xfdb0262c ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0xff678124 ceph_messenger_init +EXPORT_SYMBOL net/dccp/dccp_ipv4 0xa4c94308 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x12a17fd2 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0x24aea30a ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x27060a2e wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x320a90dc ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x37fdf049 wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/ieee802154 0x62308d89 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x77db66c8 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x81e7b696 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x856386b9 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x960a87bb ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xb9ba9d6f wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0xcb009f36 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xfb814b01 wpan_phy_unregister +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x2e715300 arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x2fe91ae8 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xe0c2043a arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x27d05e85 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x2c16985b ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xeb5db10d ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x6840046f xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv4/tunnel4 0x8728c3d8 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x7d5c59f7 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0xbb5521a3 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x42a5c89a ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x76e252b3 ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x880ef60f ip6t_do_table +EXPORT_SYMBOL net/ipv6/tunnel6 0xc1e36295 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/tunnel6 0xf25af219 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x17472e47 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x54232b64 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x012c45cf ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x2d710763 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x48761424 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x6cad8654 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8feaa46e ircomm_connect_response +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb078635d ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xcd7875b8 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xd6ce3547 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07969622 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x07c9eac2 irlap_open +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x0dc20b92 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x1011aad1 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x17a491c5 irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x196338ac irlap_close +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x2f13b4bc irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x36cad55b hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x370ac358 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x37791344 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0x427debfb irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x45beeb0c async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x4a605051 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x4bb90e4a iriap_open +EXPORT_SYMBOL net/irda/irda 0x5209243e irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x5231df8f alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x625c808f irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x6492e28c hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6b76aa70 hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x731cec71 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x768c1f55 irda_notify_init +EXPORT_SYMBOL net/irda/irda 0x7952271b irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7e67ca6e irias_new_object +EXPORT_SYMBOL net/irda/irda 0x8022edf4 iriap_close +EXPORT_SYMBOL net/irda/irda 0x819a8695 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x8982c8d9 irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x89ce5637 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0x8a44dd5e hashbin_new +EXPORT_SYMBOL net/irda/irda 0x90ddb6bd hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x9695f0ff proc_irda +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9fd94b68 irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x9ffda243 irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0xafafb739 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0xb3c13d7f irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xbf7dd554 hashbin_find +EXPORT_SYMBOL net/irda/irda 0xbfa7c08d hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0xc477368d irias_find_object +EXPORT_SYMBOL net/irda/irda 0xcd12df8d irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0xced4d741 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0xcfc36636 irttp_dup +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xecab9585 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf199cba4 irias_insert_object +EXPORT_SYMBOL net/l2tp/l2tp_core 0xaaca3459 l2tp_recv_common +EXPORT_SYMBOL net/lapb/lapb 0x142fa07a lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x454d1be6 lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0x4ca41da8 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x4fe4af9e lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0xaf013278 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0xb0869029 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0xc6487a39 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0xce2339c6 lapb_data_received +EXPORT_SYMBOL net/llc/llc 0x1e9e99fd llc_sap_list_lock +EXPORT_SYMBOL net/llc/llc 0x2b5aa099 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x2d00aabb llc_set_station_handler +EXPORT_SYMBOL net/llc/llc 0x2d6083fb llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x38b92846 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x62cd3934 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0xa0a7b21b llc_add_pack +EXPORT_SYMBOL net/llc/llc 0xb80b5a12 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0xdc20ab12 llc_sap_open +EXPORT_SYMBOL net/mac80211/mac80211 0x023db301 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x04565528 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x0d664738 ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x0f22313e ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x176ff745 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x19374dba ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x22f320cc ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x2664c4b3 ieee80211_napi_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x2834d21f ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x30c908e1 ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x33a4ead7 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x3686d6f8 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x39e6166c ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x3ccf6950 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x3cd3a951 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x415440c7 ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x432c3f86 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x445fb09b ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x45a46abc ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x484f8b81 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x48ca19d6 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x4c00684f ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x50366f62 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x5c28cca5 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x5f41088f ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x64afbe5c ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x65326d70 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x658b4647 ieee80211_sta_eosp_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x6c021b0f ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x6cc49450 ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x6dd76b2b ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x6f4a3ca6 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x70bb079f ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x72380e85 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x7344e354 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x75a5e551 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x771a6c13 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x81a197c7 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x8314061c ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x84a99a1a wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x8d3669c4 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x909da5ef ieee80211_disable_dyn_ps +EXPORT_SYMBOL net/mac80211/mac80211 0x91eeb9ea ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x9318856f __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x9d40cc2e ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xa4c76995 ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0xa6e9aebb ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0xaa157485 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0xb024ad55 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0xb46ff663 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xbf0d7ae3 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xc075381d __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0xc6af00e8 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xc7e9782e ieee80211_get_key_tx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0xc86be829 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0xc9d3503a ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xd0962bb0 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xd19f5c60 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xd760c97e ieee80211_napi_schedule +EXPORT_SYMBOL net/mac80211/mac80211 0xdbeb28f0 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xddae8f18 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xddb47d52 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0xdfcdd9ee ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0xe496a842 __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xe799e1b5 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0xef0af0be ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0xf395de03 ieee80211_aes_cmac_calculate_k1_k2 +EXPORT_SYMBOL net/mac80211/mac80211 0xf66af6a8 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xfb5e80d6 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xfb984075 ieee80211_enable_dyn_ps +EXPORT_SYMBOL net/mac802154/mac802154 0x19567f6f ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0x5e775013 ieee802154_register_device +EXPORT_SYMBOL net/mac802154/mac802154 0x871c53f6 ieee802154_unregister_device +EXPORT_SYMBOL net/mac802154/mac802154 0xbad29594 ieee802154_alloc_device +EXPORT_SYMBOL net/mac802154/mac802154 0xc42d99fc ieee802154_free_device +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x00bcbc55 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1821feda register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1da86aa1 ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x2167e56e unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x72f1a406 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x8957ecf9 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9329cbc3 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xbdbf0b30 ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xbf0b372f ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xc9b7985b ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd5ec759f unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd79024cf ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd831a1a2 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xee7a5cab ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xf916037b ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x4e501d10 __nf_ct_ext_add_length +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xba3d3363 nf_conntrack_untracked +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xf3e10433 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x2bd51019 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/nf_nat 0x6b09006e nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nf_nat 0x8e7e06d1 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0xa092562a nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0xcc826b7d nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0xdad5bf06 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0xf825ea23 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/x_tables 0x08c473b7 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x09476df4 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x3c365dcf xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0x630bbe15 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x6f878c4a xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x91718592 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0xb28f5ef1 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xc7229a86 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xcde0210c xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xd50d221f xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xdc55b24d xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xdd5800ba xt_register_match +EXPORT_SYMBOL net/nfc/hci/hci 0x18d91a5f nfc_hci_send_response +EXPORT_SYMBOL net/nfc/hci/hci 0x1f109703 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x20b20ff6 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0x2a52091f nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x43028a27 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x4e53dff5 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x5950bce1 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x64a0c70b nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x6faf7d24 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x732ee77f nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x8d374249 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0xaa45377d nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0xafb29cef nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0xbca0b4fd nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0xcc8a0ea0 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0xd82763bc nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0xe625792c nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0xe746399e nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0xf5fb908c nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0xf87c32aa nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/nci/nci 0x3107dc39 nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x35ef4fdd nci_unregister_device +EXPORT_SYMBOL net/nfc/nci/nci 0x89f49192 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0x9f4cbf63 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0xba490602 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0xf2d12bf1 nci_free_device +EXPORT_SYMBOL net/nfc/nfc 0x1f75bd12 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x38c124fd nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x3c3bc982 nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x55b2fc43 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x5d742b76 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x5dd20918 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0x5ed5d7f7 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0x6c4c7903 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0xa6bc5f6e nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0xb0e99cbf nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0xc4e7aecc nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0xd6582c73 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0xd837d285 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0xd8dcc2c5 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0xe7bbe4a4 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0xfca0cf45 nfc_dep_link_is_up +EXPORT_SYMBOL net/phonet/phonet 0x13d974aa pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x4331d5b2 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0x7f23daa2 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x8e50316f phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xa38b1531 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0xa487df7d phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xd23658a0 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xe70faafa pn_sock_hash +EXPORT_SYMBOL net/rds/rds 0x5031b8c5 rds_str_array +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0cad83af rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2505899f rxrpc_kernel_end_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2507d9d5 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2c440dd6 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2c8d1ee9 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x3b9e3b6e rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4c3aea51 rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x52183a77 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x7ff76107 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x8e81b9fd rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xaef08eaf rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xbf347534 rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe92b7530 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xed2c2d56 rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xf03fc3a0 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/sctp/sctp 0xebeca6d9 sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/sunrpc 0xdba17b5f svc_pool_stats_open +EXPORT_SYMBOL net/wimax/wimax 0x9b7af8ec wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xbaa26d49 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0badc3f5 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x0e232fe6 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x14c45b41 wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0x1586ac56 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x17f75d7d cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x18dd2845 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x19e03378 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x1c5f6f97 __cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x1c7c5f0f ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x1fec2eb6 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0x213c0b26 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0x25f3af63 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x27d63a65 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x28d0ac5b cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x2b4cf577 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x2dd3fc1b cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0x2e1c7a19 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x3964440b cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x3c2217de cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x4a0fafbc cfg80211_del_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x524311d1 ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x55894f90 wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0x57afd4c7 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x58799438 cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x590268cb ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x597e8b7d regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x5cc88516 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x6001ee33 cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x621d5399 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x63710211 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x68f2b97c wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6cfe6c92 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0x6f349836 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x6facb116 cfg80211_send_unprot_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x7292f6f0 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x73ab6899 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x7962aa03 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x7ce94b9a cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x7e5eb9f9 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x7ef39823 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x7f02abf7 cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x7fe1a403 cfg80211_find_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x809ff482 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x81404b48 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x8c028a39 cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x8c8a8c57 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x8ca5e8c2 cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x8e01d9c6 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x8facfe70 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x91150711 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x92595616 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0x9471bd67 __cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x982e6b6d ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x993e3dd3 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xa1425906 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xa197b1ff ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0xa7eeb5d9 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0xaec488fb wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0xb32db450 cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0xb519cea1 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xbc4918f5 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0xc1579076 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xc5e9d827 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xc63f1b81 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xcf618a57 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0xd039aa7a cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0xd489a63c cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xd4ae6424 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0xd782984d cfg80211_send_unprot_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xd9c31b80 cfg80211_roamed_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xda4d72d1 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0xdb2e0c81 cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0xdf5a9ab5 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0xdfa374e1 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xea16e3f2 cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xeb870bce cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0xecc03957 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xf1562d15 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0xfa01f1b4 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xfa7d87f9 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xfe696ae8 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0xfed4d591 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x43c3a5c4 lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x65763d4c lib80211_crypt_delayed_deinit +EXPORT_SYMBOL net/wireless/lib80211 0x69deca5f lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x70c6a204 lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xbe3472fc lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0xee023d6e lib80211_crypt_info_init +EXPORT_SYMBOL sound/ac97_bus 0xb6124e29 ac97_bus_type +EXPORT_SYMBOL sound/core/seq/snd-seq 0x0e6bec3d snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3061c52d snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x79d4a25d snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7a410e9a snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xca6259ef snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x33f887ea snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x95d4ab22 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x127b30fb snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x1cdc0812 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x59eb74ae snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x8102ed2f snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb11ba32d snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb2c7f684 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xea0e5748 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xed42580b snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0xd617e5b0 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd-hwdep 0x3c04f1fb snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1676024b snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2d14e231 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x42ab041a snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0x4b50d38f snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x51160489 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x7b5ff406 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8a55abc3 snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x8b61a18a snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x9300c51f snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0xaf604c90 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb2aa3ca7 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbc516d2d snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbd056ebb snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcac36b7e snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe29af4c0 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf3d1b785 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf6aced10 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x6c63a16d snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x6d629c59 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc0fec227 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x0be5c6ff snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xd2db9d3a snd_tea575x_set_freq +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xdeabe952 snd_tea575x_init +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x06184a73 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0676af49 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0bc0a6bd snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x0f4ea291 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1e0b1072 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1f5da032 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1ff3d4e7 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x215127c5 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x267a282d snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4fbf294e snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6f5751ea snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x7609465c snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa94eedf4 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xbe890c9c snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xcaa68aa7 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xe35baf3a snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xef86fae0 snd_ac97_write +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0xd4effc20 snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL vmlinux 0x00000000 softirq_work_list +EXPORT_SYMBOL vmlinux 0x00002194 send_sig_info +EXPORT_SYMBOL vmlinux 0x001ee95a imx_ssi_fiq_base +EXPORT_SYMBOL vmlinux 0x003801fa empty_zero_page +EXPORT_SYMBOL vmlinux 0x0064ea30 d_instantiate +EXPORT_SYMBOL vmlinux 0x006818a5 kobject_put +EXPORT_SYMBOL vmlinux 0x00750a36 skb_put +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x0084e86d unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00a1c176 snd_timer_global_new +EXPORT_SYMBOL vmlinux 0x00a80a08 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x00f176c8 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x01055f83 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x0118a146 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x011cce8b scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x01424f59 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x014ec516 block_commit_write +EXPORT_SYMBOL vmlinux 0x0153fb42 twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x015a1d70 wake_up_process +EXPORT_SYMBOL vmlinux 0x0186e2de smp_call_function_many +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x019779f6 flush_old_exec +EXPORT_SYMBOL vmlinux 0x01a3d310 omap_set_dma_channel_mode +EXPORT_SYMBOL vmlinux 0x01a809a3 tc_classify +EXPORT_SYMBOL vmlinux 0x01b57b77 blk_init_tags +EXPORT_SYMBOL vmlinux 0x01b7fd59 dispc_read_irqstatus +EXPORT_SYMBOL vmlinux 0x01c77540 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x01c9c4da mmc_remove_host +EXPORT_SYMBOL vmlinux 0x01cee115 net_dma_find_channel +EXPORT_SYMBOL vmlinux 0x01d98be6 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x01ea132e dispc_runtime_put +EXPORT_SYMBOL vmlinux 0x01f6c715 dev_remove_pack +EXPORT_SYMBOL vmlinux 0x01fc933b rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x0206dc1e sk_common_release +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x02196324 __aeabi_idiv +EXPORT_SYMBOL vmlinux 0x021b7a84 seq_printf +EXPORT_SYMBOL vmlinux 0x022078e9 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x0235096c tty_unregister_device +EXPORT_SYMBOL vmlinux 0x024bf88f omap_modify_dma_chain_params +EXPORT_SYMBOL vmlinux 0x02573b36 omap_disable_dma_irq +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0274dc2b netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x02781073 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL vmlinux 0x029f6db5 notify_thermal_framework +EXPORT_SYMBOL vmlinux 0x02a18c74 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02ba510f clear_nlink +EXPORT_SYMBOL vmlinux 0x02c4d309 genl_register_family +EXPORT_SYMBOL vmlinux 0x02dd9fce jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x02ef742b percpu_counter_set +EXPORT_SYMBOL vmlinux 0x03026722 mempool_alloc +EXPORT_SYMBOL vmlinux 0x030bad14 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x032c3884 cont_write_begin +EXPORT_SYMBOL vmlinux 0x0334795d icst307_s2div +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x03402be6 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x03592ea0 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x03649813 vfs_rmdir +EXPORT_SYMBOL vmlinux 0x0364983f gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x0366307a console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x03757c9b of_get_named_gpio_flags +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x038aacd4 xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x038b14a6 generic_setxattr +EXPORT_SYMBOL vmlinux 0x039499d9 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x03ba39b0 v7_flush_user_cache_all +EXPORT_SYMBOL vmlinux 0x03bd889d param_get_ulong +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03c7b1b6 omap_dss_start_device +EXPORT_SYMBOL vmlinux 0x03c90c5c of_n_size_cells +EXPORT_SYMBOL vmlinux 0x03dd21d1 __napi_complete +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x04046340 tty_free_termios +EXPORT_SYMBOL vmlinux 0x04087d15 security_path_truncate +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x04482cdb __refrigerator +EXPORT_SYMBOL vmlinux 0x04617530 generic_listxattr +EXPORT_SYMBOL vmlinux 0x04659b12 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x046c1f16 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x04bd91ec serio_interrupt +EXPORT_SYMBOL vmlinux 0x04c7429e __break_lease +EXPORT_SYMBOL vmlinux 0x04cc24b5 __frontswap_load +EXPORT_SYMBOL vmlinux 0x04cda566 snd_interval_refine +EXPORT_SYMBOL vmlinux 0x04ea56f9 _kstrtol +EXPORT_SYMBOL vmlinux 0x04ead6d4 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x04f4ecc5 register_console +EXPORT_SYMBOL vmlinux 0x04faae61 d_validate +EXPORT_SYMBOL vmlinux 0x0504f073 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x051a564f rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x054434d6 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x056ee730 ipv6_hash_secret +EXPORT_SYMBOL vmlinux 0x05742066 scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x0593a99b init_timer_key +EXPORT_SYMBOL vmlinux 0x05bd2852 ps2_command +EXPORT_SYMBOL vmlinux 0x05d9e38f pid_task +EXPORT_SYMBOL vmlinux 0x05fa98c0 seq_read +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x0634100a bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x06607f92 dss_feat_get_supported_outputs +EXPORT_SYMBOL vmlinux 0x066c72ae truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x0674eb4a mii_ethtool_gset +EXPORT_SYMBOL vmlinux 0x067a560c scsi_scan_target +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x0694134f fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0x06ae95b4 input_register_handle +EXPORT_SYMBOL vmlinux 0x06cd9117 snd_ctl_new1 +EXPORT_SYMBOL vmlinux 0x06e6a8b0 path_put +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x071b7eea irq_stat +EXPORT_SYMBOL vmlinux 0x0743e0cd tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x074cfc35 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x076863f6 snd_add_device_sysfs_file +EXPORT_SYMBOL vmlinux 0x07816675 inet_sendpage +EXPORT_SYMBOL vmlinux 0x0786e534 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x0792a2b7 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x07a2d9d6 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x07a6f006 netif_device_detach +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07b14d2f writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07cf9099 wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x07d42407 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x07f1d55c inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x0800f2d1 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x0809afd7 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x081f3afb complete_all +EXPORT_SYMBOL vmlinux 0x081fdca2 tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x08216276 kobject_get +EXPORT_SYMBOL vmlinux 0x083eb21c rfkill_unregister +EXPORT_SYMBOL vmlinux 0x0868765c input_release_device +EXPORT_SYMBOL vmlinux 0x0869029e rfkill_alloc +EXPORT_SYMBOL vmlinux 0x0877904d cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x087a293f security_d_instantiate +EXPORT_SYMBOL vmlinux 0x087cd0de dquot_quota_off +EXPORT_SYMBOL vmlinux 0x0899cc47 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x08a1b9a1 omap_dss_get_next_device +EXPORT_SYMBOL vmlinux 0x08b58eef omapdss_dpi_display_enable +EXPORT_SYMBOL vmlinux 0x091e602d kill_bdev +EXPORT_SYMBOL vmlinux 0x093ee58d __scm_send +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x09596613 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x0966628a wireless_spy_update +EXPORT_SYMBOL vmlinux 0x096e30b9 of_get_mac_address +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x099002f7 abort_creds +EXPORT_SYMBOL vmlinux 0x099cacf2 blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x09aba5f0 bio_sector_offset +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09cf1b46 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09dd4cc0 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x09ea3a70 __frontswap_init +EXPORT_SYMBOL vmlinux 0x0a0786de udplite_table +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a24e632 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x0a252854 search_binary_handler +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a4544a5 bio_phys_segments +EXPORT_SYMBOL vmlinux 0x0a469d23 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x0a7cdc32 scm_fp_dup +EXPORT_SYMBOL vmlinux 0x0a87129b register_key_type +EXPORT_SYMBOL vmlinux 0x0a958ed4 down_write +EXPORT_SYMBOL vmlinux 0x0aa13d05 __raw_readsw +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0ad95490 skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x0add28d6 padata_free +EXPORT_SYMBOL vmlinux 0x0adfab73 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x0afab625 sock_recvmsg +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b2c3599 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x0b3ac878 rename_lock +EXPORT_SYMBOL vmlinux 0x0b48677a __kfifo_init +EXPORT_SYMBOL vmlinux 0x0b4bb759 ppp_register_channel +EXPORT_SYMBOL vmlinux 0x0b52cf17 md_integrity_register +EXPORT_SYMBOL vmlinux 0x0b5df5c3 simple_open +EXPORT_SYMBOL vmlinux 0x0b600ed0 proto_unregister +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0ba26a76 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0x0ba2abf5 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0x0ba81e45 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0x0bb387ff keyring_alloc +EXPORT_SYMBOL vmlinux 0x0bc477a2 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x0bc597d7 xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x0bcf99cc scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x0bd97de1 of_find_compatible_node +EXPORT_SYMBOL vmlinux 0x0bed814c irq_set_chip +EXPORT_SYMBOL vmlinux 0x0c2019a8 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x0c58a8cd netdev_increment_features +EXPORT_SYMBOL vmlinux 0x0c5b626e skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x0c62651a vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0ca0c882 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x0ca385ef key_task_permission +EXPORT_SYMBOL vmlinux 0x0ca54fee _test_and_set_bit +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb295d6 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x0cb40672 neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x0cbe778c get_write_access +EXPORT_SYMBOL vmlinux 0x0cccc5a3 fget_light +EXPORT_SYMBOL vmlinux 0x0cdd158d sg_alloc_table +EXPORT_SYMBOL vmlinux 0x0ce50dcb dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0x0cfefe1e percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x0d05b9cc vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x0d0761d1 tcp_connect +EXPORT_SYMBOL vmlinux 0x0d0a8d91 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0x0d10efb6 key_revoke +EXPORT_SYMBOL vmlinux 0x0d15d9c8 kill_fasync +EXPORT_SYMBOL vmlinux 0x0d1d6cea inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x0d3f57a2 _find_next_bit_le +EXPORT_SYMBOL vmlinux 0x0d4d7a32 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d8ced08 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0dcc2c40 finish_no_open +EXPORT_SYMBOL vmlinux 0x0e0f2780 phy_device_free +EXPORT_SYMBOL vmlinux 0x0e1f0733 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0x0e2760f6 fb_set_var +EXPORT_SYMBOL vmlinux 0x0e299240 of_gpio_simple_xlate +EXPORT_SYMBOL vmlinux 0x0e300bf7 schedule_work +EXPORT_SYMBOL vmlinux 0x0e5b9a5b sock_get_timestamp +EXPORT_SYMBOL vmlinux 0x0e5e193d xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x0e6da44a set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x0e716e7c serio_reconnect +EXPORT_SYMBOL vmlinux 0x0ed5dbaf dev_crit +EXPORT_SYMBOL vmlinux 0x0eea33ff neigh_compat_output +EXPORT_SYMBOL vmlinux 0x0eeed58c n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x0f4298cd fib_default_rule_pref +EXPORT_SYMBOL vmlinux 0x0f4c91ed ns_to_timespec +EXPORT_SYMBOL vmlinux 0x0f4fbfb2 of_find_property +EXPORT_SYMBOL vmlinux 0x0f5602a5 pagevec_lookup +EXPORT_SYMBOL vmlinux 0x0f66c53a block_invalidatepage +EXPORT_SYMBOL vmlinux 0x0f7fb4f2 mem_cgroup_subsys +EXPORT_SYMBOL vmlinux 0x0fa2a45e __memzero +EXPORT_SYMBOL vmlinux 0x0faef0ed __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x0fe148b3 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x0ff0a310 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x0ff178f6 __aeabi_idivmod +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x1021e6df dmam_pool_create +EXPORT_SYMBOL vmlinux 0x104398c8 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x105138ba __dquot_free_space +EXPORT_SYMBOL vmlinux 0x105dc3d3 mfd_add_devices +EXPORT_SYMBOL vmlinux 0x105e9ebd amba_find_device +EXPORT_SYMBOL vmlinux 0x106c99e9 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x1090ddb9 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x109820bf ip6_frag_init +EXPORT_SYMBOL vmlinux 0x1098a956 cdrom_release +EXPORT_SYMBOL vmlinux 0x10a7bbac napi_complete +EXPORT_SYMBOL vmlinux 0x10e7272a sock_sendmsg +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10fcabe0 dcache_dir_open +EXPORT_SYMBOL vmlinux 0x11089ac7 _ctype +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x112748bd omap_vrfb_adjust_size +EXPORT_SYMBOL vmlinux 0x112d7a37 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x113429a0 clk_add_alias +EXPORT_SYMBOL vmlinux 0x11614aa9 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x116c50df thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x116f84c7 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x119b50e7 elf_check_arch +EXPORT_SYMBOL vmlinux 0x11a65485 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x11be8e10 _dev_info +EXPORT_SYMBOL vmlinux 0x11c9185c of_iomap +EXPORT_SYMBOL vmlinux 0x11e2ec12 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x11f7ed4c hex_to_bin +EXPORT_SYMBOL vmlinux 0x1203c2fe generic_mii_ioctl +EXPORT_SYMBOL vmlinux 0x120b336a __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x123f723e find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x12417a73 sock_register +EXPORT_SYMBOL vmlinux 0x126c3475 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x126c8105 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x126c9951 sk_reset_txq +EXPORT_SYMBOL vmlinux 0x129afacc padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x12a38747 usleep_range +EXPORT_SYMBOL vmlinux 0x12b15116 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0x12cee8d6 generic_readlink +EXPORT_SYMBOL vmlinux 0x12d7c3ac simple_transaction_read +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12dd6e5d insert_inode_locked +EXPORT_SYMBOL vmlinux 0x12e33791 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0x12f99022 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x1320835d of_get_child_by_name +EXPORT_SYMBOL vmlinux 0x13307fde vsscanf +EXPORT_SYMBOL vmlinux 0x13557c8f nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x1371c3fc rtnl_create_link +EXPORT_SYMBOL vmlinux 0x1373e305 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x137f8e84 cdev_del +EXPORT_SYMBOL vmlinux 0x13c0eca6 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0x13d0adf7 __kfifo_out +EXPORT_SYMBOL vmlinux 0x13f02d43 inode_get_bytes +EXPORT_SYMBOL vmlinux 0x140edef6 simple_empty +EXPORT_SYMBOL vmlinux 0x1420b379 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x14216acb end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x1421ad4d __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x1428c75f ip_defrag +EXPORT_SYMBOL vmlinux 0x14295ebb lock_sock_fast +EXPORT_SYMBOL vmlinux 0x14647b5d xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x148c19c4 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x1490243a xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x149b26fb pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x14b53ab1 write_cache_pages +EXPORT_SYMBOL vmlinux 0x14bd707b devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x14c1be93 d_obtain_alias +EXPORT_SYMBOL vmlinux 0x14cd3b05 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x14d4a9c5 _change_bit +EXPORT_SYMBOL vmlinux 0x14fcf1db genphy_resume +EXPORT_SYMBOL vmlinux 0x150cc54c of_parse_phandle_with_args +EXPORT_SYMBOL vmlinux 0x15419f54 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0x1545cdfd __dst_free +EXPORT_SYMBOL vmlinux 0x154c6338 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x154cd6c8 snd_device_new +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x15692c87 param_ops_int +EXPORT_SYMBOL vmlinux 0x1569d95f generic_pipe_buf_map +EXPORT_SYMBOL vmlinux 0x157f3141 end_page_writeback +EXPORT_SYMBOL vmlinux 0x15875eb0 dev_get_stats +EXPORT_SYMBOL vmlinux 0x1593c0a1 create_syslog_header +EXPORT_SYMBOL vmlinux 0x15a3cf6f skb_split +EXPORT_SYMBOL vmlinux 0x15b0309c tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x15b77ebe dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x15e78bdf tty_port_open +EXPORT_SYMBOL vmlinux 0x15e9478d simple_lookup +EXPORT_SYMBOL vmlinux 0x15f571ec blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x161fde82 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL vmlinux 0x16212b52 skb_copy_bits +EXPORT_SYMBOL vmlinux 0x1626f7b2 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x1627ed72 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x162ccc0c lg_local_lock +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x1637cbb5 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x1672fdc9 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x16751d4e input_unregister_handler +EXPORT_SYMBOL vmlinux 0x16989c31 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0x16b0ba0d bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x16f45a46 tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x172a0a64 imx_irq_set_priority +EXPORT_SYMBOL vmlinux 0x1750d5cb jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x17681f11 mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x1787e50f of_find_node_by_type +EXPORT_SYMBOL vmlinux 0x17a142df __copy_from_user +EXPORT_SYMBOL vmlinux 0x17c05796 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x180c9506 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x180cd4b5 snd_ctl_boolean_mono_info +EXPORT_SYMBOL vmlinux 0x1820f7b7 __bread +EXPORT_SYMBOL vmlinux 0x1826f089 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x184e6c85 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x188a3dfb timespec_trunc +EXPORT_SYMBOL vmlinux 0x189868d7 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x189880a6 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x189a0fd9 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x18a6b560 locks_free_lock +EXPORT_SYMBOL vmlinux 0x18bd76a4 _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x18c2227f cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x18da15db __i2c_transfer +EXPORT_SYMBOL vmlinux 0x18eda448 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x18f3ba97 vc_resize +EXPORT_SYMBOL vmlinux 0x18ff3319 submit_bio +EXPORT_SYMBOL vmlinux 0x190379f1 vfs_statfs +EXPORT_SYMBOL vmlinux 0x193227c7 d_delete +EXPORT_SYMBOL vmlinux 0x194c4e60 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x19610e1f cpu_all_bits +EXPORT_SYMBOL vmlinux 0x1974a09a console_stop +EXPORT_SYMBOL vmlinux 0x1976aa06 param_ops_bool +EXPORT_SYMBOL vmlinux 0x197dc3b3 omap_set_dma_src_burst_mode +EXPORT_SYMBOL vmlinux 0x198ec08c mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19a096e8 kernel_connect +EXPORT_SYMBOL vmlinux 0x19bd383b security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x19bfdc88 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x19d47687 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x19de79bf vfs_writev +EXPORT_SYMBOL vmlinux 0x19f5809b dm_ratelimit_state +EXPORT_SYMBOL vmlinux 0x1a20c540 omap_vrfb_supported +EXPORT_SYMBOL vmlinux 0x1a44b25d check_disk_change +EXPORT_SYMBOL vmlinux 0x1a5ef0c6 ps2_init +EXPORT_SYMBOL vmlinux 0x1a625b26 omap_dss_put_device +EXPORT_SYMBOL vmlinux 0x1a65f4ad __arm_ioremap_pfn +EXPORT_SYMBOL vmlinux 0x1a708a22 misc_register +EXPORT_SYMBOL vmlinux 0x1a7b3291 netdev_crit +EXPORT_SYMBOL vmlinux 0x1a800efa snd_card_free +EXPORT_SYMBOL vmlinux 0x1aa304dc bio_integrity_clone +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad1f2e7 _memcpy_fromio +EXPORT_SYMBOL vmlinux 0x1adad01e twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x1aed8ebf buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b05d86a blk_start_queue +EXPORT_SYMBOL vmlinux 0x1b0ac272 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x1b0d5983 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x1b53edd2 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x1b5af531 __mutex_init +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b68aba6 pin_config_set +EXPORT_SYMBOL vmlinux 0x1b7a5822 dquot_quotactl_ops +EXPORT_SYMBOL vmlinux 0x1b82fefa md_unplug +EXPORT_SYMBOL vmlinux 0x1b888a4d sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1bc1c507 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0x1bd815ac tcp_syn_flood_action +EXPORT_SYMBOL vmlinux 0x1bfd6c09 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x1c199beb scsi_device_resume +EXPORT_SYMBOL vmlinux 0x1c562ee6 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x1c5e3878 icst525_idx2s +EXPORT_SYMBOL vmlinux 0x1c94281b mmc_can_reset +EXPORT_SYMBOL vmlinux 0x1cc50271 udp_sendmsg +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1cd1d9ce tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x1ce36d08 netif_napi_add +EXPORT_SYMBOL vmlinux 0x1cf4e2c3 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x1cfb04fa finish_wait +EXPORT_SYMBOL vmlinux 0x1cfce844 bmap +EXPORT_SYMBOL vmlinux 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL vmlinux 0x1d0c7bec udp_ioctl +EXPORT_SYMBOL vmlinux 0x1d8caeee idr_get_new +EXPORT_SYMBOL vmlinux 0x1da9bcc4 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x1daf2369 get_user_pages +EXPORT_SYMBOL vmlinux 0x1db7dc40 pgprot_kernel +EXPORT_SYMBOL vmlinux 0x1db9644e omap_dss_stop_device +EXPORT_SYMBOL vmlinux 0x1db9b309 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1e047854 warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x1e0e624e cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x1e1225f9 __d_drop +EXPORT_SYMBOL vmlinux 0x1e26be3b get_anon_bdev +EXPORT_SYMBOL vmlinux 0x1e2ffa49 snd_dma_free_pages +EXPORT_SYMBOL vmlinux 0x1e618c72 snd_pcm_open_substream +EXPORT_SYMBOL vmlinux 0x1e62d55b generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e84c546 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x1e85486a inet_listen +EXPORT_SYMBOL vmlinux 0x1e8cc7d9 dss_mgr_set_timings +EXPORT_SYMBOL vmlinux 0x1e955239 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x1e9a5d3c dev_get_by_index +EXPORT_SYMBOL vmlinux 0x1e9edfb7 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x1ea06663 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x1ec4eb34 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x1ee23d65 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x1ee41633 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x1ee4ed9b d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x1eeb848e __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0x1eef3a31 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x1ef2fd60 thaw_bdev +EXPORT_SYMBOL vmlinux 0x1f046973 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x1f30c757 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x1f362a3c abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x1f38cde0 neigh_table_init +EXPORT_SYMBOL vmlinux 0x1f58c17b sock_no_bind +EXPORT_SYMBOL vmlinux 0x1f5dd478 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x1f6ce114 snd_ctl_register_ioctl +EXPORT_SYMBOL vmlinux 0x1f7e807f kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x1f917d69 of_platform_device_create +EXPORT_SYMBOL vmlinux 0x1f956d70 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x1fab5905 wait_for_completion +EXPORT_SYMBOL vmlinux 0x1fbd16da ip_tos2prio +EXPORT_SYMBOL vmlinux 0x1fcf4d4b _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0x1fd07fff kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x1fe912f1 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x20056746 ifla_policy +EXPORT_SYMBOL vmlinux 0x20104a01 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x20228bc5 dma_pool_create +EXPORT_SYMBOL vmlinux 0x20421305 on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x205ec8de omap_dispc_register_isr +EXPORT_SYMBOL vmlinux 0x2072ee9b request_threaded_irq +EXPORT_SYMBOL vmlinux 0x20974c3c mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x20a789ac irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x20b7b64c jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x20bfe805 elv_rb_find +EXPORT_SYMBOL vmlinux 0x20c55ae0 sscanf +EXPORT_SYMBOL vmlinux 0x20d13d0d of_get_parent +EXPORT_SYMBOL vmlinux 0x21010218 journal_dirty_data +EXPORT_SYMBOL vmlinux 0x211331fa __divsi3 +EXPORT_SYMBOL vmlinux 0x212c2d32 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0x21315700 param_get_bool +EXPORT_SYMBOL vmlinux 0x214133f2 dma_supported +EXPORT_SYMBOL vmlinux 0x2143191e nonseekable_open +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x216beb93 dss_mgr_start_update +EXPORT_SYMBOL vmlinux 0x217118dc scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x217dda13 flex_array_get +EXPORT_SYMBOL vmlinux 0x218b32bd journal_wipe +EXPORT_SYMBOL vmlinux 0x21acf826 fget_raw +EXPORT_SYMBOL vmlinux 0x21ee558c skb_free_datagram +EXPORT_SYMBOL vmlinux 0x21f678b9 clocksource_unregister +EXPORT_SYMBOL vmlinux 0x21fdc02d mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0x220c1205 vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x220ef386 fb_set_cmap +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x222fa684 lg_global_lock +EXPORT_SYMBOL vmlinux 0x2232a8a5 mempool_free +EXPORT_SYMBOL vmlinux 0x223cc898 omap_vrfb_max_height +EXPORT_SYMBOL vmlinux 0x2249c4a4 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x2250e792 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x225ef0b1 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x2266ef10 dev_activate +EXPORT_SYMBOL vmlinux 0x226b4879 udp_seq_open +EXPORT_SYMBOL vmlinux 0x227440f8 blk_stop_queue +EXPORT_SYMBOL vmlinux 0x2276db98 kstrtoint +EXPORT_SYMBOL vmlinux 0x22847e87 journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x2286c8d1 dss_mgr_set_lcd_config +EXPORT_SYMBOL vmlinux 0x228748cb nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x2293b00c load_nls_default +EXPORT_SYMBOL vmlinux 0x22948866 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x22b1349b tty_name +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22e1ae6f up_read +EXPORT_SYMBOL vmlinux 0x231d4001 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x23293ba6 security_path_symlink +EXPORT_SYMBOL vmlinux 0x2346dcda input_inject_event +EXPORT_SYMBOL vmlinux 0x2347845f ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0x23488375 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL vmlinux 0x23532c4d ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x235676cb abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x237db25a splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x23837029 init_buffer +EXPORT_SYMBOL vmlinux 0x239d350e check_disk_size_change +EXPORT_SYMBOL vmlinux 0x23a574fd security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x23ad3dc2 blk_run_queue +EXPORT_SYMBOL vmlinux 0x23b813e9 dm_put_device +EXPORT_SYMBOL vmlinux 0x23b9d6e2 mangle_path +EXPORT_SYMBOL vmlinux 0x23ba67d9 ida_remove +EXPORT_SYMBOL vmlinux 0x23bf5233 unregister_md_personality +EXPORT_SYMBOL vmlinux 0x23c08068 idr_destroy +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23d1d107 phy_init_eee +EXPORT_SYMBOL vmlinux 0x23d6969c netdev_set_master +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x240cd4a5 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0x24212d86 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x2422a0fe nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x24234754 __vlan_find_dev_deep +EXPORT_SYMBOL vmlinux 0x2427e261 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x242af9ff ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0x242e1b9e input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x24693e8d request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x247baa18 jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x2482e688 vsprintf +EXPORT_SYMBOL vmlinux 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL vmlinux 0x24b0f90c of_clk_get_by_name +EXPORT_SYMBOL vmlinux 0x24c55f5e journal_restart +EXPORT_SYMBOL vmlinux 0x24f0aaff of_get_next_available_child +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x24ffab1c simple_fill_super +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x25017b36 snd_pcm_lib_write +EXPORT_SYMBOL vmlinux 0x25024a34 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x250df8f0 neigh_event_ns +EXPORT_SYMBOL vmlinux 0x252218c8 journal_check_used_features +EXPORT_SYMBOL vmlinux 0x25277497 rfkill_register +EXPORT_SYMBOL vmlinux 0x252f88a4 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x2531ec6c scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x253219aa phy_disconnect +EXPORT_SYMBOL vmlinux 0x253bdb78 param_get_int +EXPORT_SYMBOL vmlinux 0x25540332 inode_sb_list_lock +EXPORT_SYMBOL vmlinux 0x25751123 ida_init +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x259498e6 submit_bh +EXPORT_SYMBOL vmlinux 0x25a51ff7 mtd_concat_create +EXPORT_SYMBOL vmlinux 0x25bd6a4e napi_gro_receive +EXPORT_SYMBOL vmlinux 0x25c677c4 mac_pton +EXPORT_SYMBOL vmlinux 0x25d47e72 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x25d54c78 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x25e802d4 give_up_console +EXPORT_SYMBOL vmlinux 0x25f234d7 generic_file_remap_pages +EXPORT_SYMBOL vmlinux 0x25fc4f9e __brelse +EXPORT_SYMBOL vmlinux 0x263beb75 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x2650d835 sysctl_ip_early_demux +EXPORT_SYMBOL vmlinux 0x266b4074 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x266f57c9 of_device_register +EXPORT_SYMBOL vmlinux 0x26a49a88 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x26b48152 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0x26bb950b __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x26e686f0 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26efdef0 vfs_create +EXPORT_SYMBOL vmlinux 0x26f0453a blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x26f064b6 fail_migrate_page +EXPORT_SYMBOL vmlinux 0x273068f6 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x273e4e04 inet_frags_fini +EXPORT_SYMBOL vmlinux 0x274b3c58 scsi_execute_req +EXPORT_SYMBOL vmlinux 0x274b5315 __block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x274d88dd scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x275ef902 __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x27752c36 journal_flush +EXPORT_SYMBOL vmlinux 0x278347b1 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x27a53396 snd_card_file_remove +EXPORT_SYMBOL vmlinux 0x27bba6ba snd_component_add +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c2197f param_set_short +EXPORT_SYMBOL vmlinux 0x27c3e296 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x27c84da0 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x27e1a049 printk +EXPORT_SYMBOL vmlinux 0x27f28beb bio_copy_user +EXPORT_SYMBOL vmlinux 0x27fb3691 bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x280f5472 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x28118cb6 __get_user_1 +EXPORT_SYMBOL vmlinux 0x28135262 d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x281823c5 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x281b5341 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x281d6580 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x28331466 mmc_start_req +EXPORT_SYMBOL vmlinux 0x2877e7c1 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x28839e66 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x288c3349 mount_bdev +EXPORT_SYMBOL vmlinux 0x2894670d jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x28955c3f ab3100_event_register +EXPORT_SYMBOL vmlinux 0x2897dea5 input_grab_device +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28c759f8 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x28d6861d __vmalloc +EXPORT_SYMBOL vmlinux 0x28dd6d81 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x28e711ee kmap_atomic +EXPORT_SYMBOL vmlinux 0x293a47fd clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x294a0566 xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x2956d410 inode_permission +EXPORT_SYMBOL vmlinux 0x2963cd30 eth_change_mtu +EXPORT_SYMBOL vmlinux 0x29a4f0f1 devm_request_and_ioremap +EXPORT_SYMBOL vmlinux 0x29af6a80 iterate_mounts +EXPORT_SYMBOL vmlinux 0x29cc5f48 blk_sync_queue +EXPORT_SYMBOL vmlinux 0x29e8bb02 snd_info_free_entry +EXPORT_SYMBOL vmlinux 0x29fdda53 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x2a20696a dpi_check_timings +EXPORT_SYMBOL vmlinux 0x2a2bbc3c __devm_release_region +EXPORT_SYMBOL vmlinux 0x2a3aa678 _test_and_clear_bit +EXPORT_SYMBOL vmlinux 0x2a3b1799 netdev_emerg +EXPORT_SYMBOL vmlinux 0x2a3f4332 elv_rb_add +EXPORT_SYMBOL vmlinux 0x2a451d08 arm_dma_ops +EXPORT_SYMBOL vmlinux 0x2a4ad728 tcp_child_process +EXPORT_SYMBOL vmlinux 0x2a50ecfa blk_integrity_register +EXPORT_SYMBOL vmlinux 0x2a5fbaf9 noop_qdisc +EXPORT_SYMBOL vmlinux 0x2a79ac13 clkdev_add +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2aa1ad41 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x2ac0f95c snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL vmlinux 0x2ac6193b __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x2ae27f08 fsnotify_put_group +EXPORT_SYMBOL vmlinux 0x2b0382cc tcp_make_synack +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b0f8219 simple_readpage +EXPORT_SYMBOL vmlinux 0x2b12925d cpumask_next_and +EXPORT_SYMBOL vmlinux 0x2b1c694b fb_pan_display +EXPORT_SYMBOL vmlinux 0x2b256fe5 nla_reserve +EXPORT_SYMBOL vmlinux 0x2b2ce78b kstrtos8 +EXPORT_SYMBOL vmlinux 0x2b3ae01f skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x2b493e5f uart_register_driver +EXPORT_SYMBOL vmlinux 0x2b4e956e mempool_create +EXPORT_SYMBOL vmlinux 0x2b781ca5 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x2b875215 blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0x2b9752a3 dss_feat_get_supported_displays +EXPORT_SYMBOL vmlinux 0x2b9da7a4 genl_lock +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bc0ff57 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x2bcf9b9d key_invalidate +EXPORT_SYMBOL vmlinux 0x2bd387b0 dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x2bd5fe4f input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x2bd9e716 release_pages +EXPORT_SYMBOL vmlinux 0x2be0f12d dql_completed +EXPORT_SYMBOL vmlinux 0x2be5b34b tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x2bf9d06a ata_dev_printk +EXPORT_SYMBOL vmlinux 0x2c12d63d vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0x2c137cdd sock_kmalloc +EXPORT_SYMBOL vmlinux 0x2c14323a kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x2c256e1f input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x2c50c19a netdev_set_bond_master +EXPORT_SYMBOL vmlinux 0x2c67b834 mutex_trylock +EXPORT_SYMBOL vmlinux 0x2c81ec75 __irq_regs +EXPORT_SYMBOL vmlinux 0x2c8425e2 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x2c84577a xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x2c968a5f neigh_destroy +EXPORT_SYMBOL vmlinux 0x2c988955 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0x2cb65a36 omapdss_dpi_set_data_lines +EXPORT_SYMBOL vmlinux 0x2cc152b4 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x2cc3c2e2 inode_init_always +EXPORT_SYMBOL vmlinux 0x2cd67371 file_ns_capable +EXPORT_SYMBOL vmlinux 0x2ce47ef4 devm_clk_get +EXPORT_SYMBOL vmlinux 0x2ceee66d sync_inode +EXPORT_SYMBOL vmlinux 0x2d140a58 genl_unlock +EXPORT_SYMBOL vmlinux 0x2d32473f tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x2d423611 pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x2d439d07 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x2d4c2450 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x2d4cf8c6 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x2d6507b5 _find_next_zero_bit_le +EXPORT_SYMBOL vmlinux 0x2d770676 dispc_mgr_go +EXPORT_SYMBOL vmlinux 0x2d874b35 vfsmount_lock +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2d968817 fsnotify_put_mark +EXPORT_SYMBOL vmlinux 0x2da36341 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x2db66e8c i2c_clients_command +EXPORT_SYMBOL vmlinux 0x2dc17ce2 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x2dc3acdf phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x2dccc64b dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x2de02145 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x2deda4a1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x2e17f8d5 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x2e1ca751 clk_put +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e454c8d sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x2e5810c6 __aeabi_unwind_cpp_pr1 +EXPORT_SYMBOL vmlinux 0x2e7be112 _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x2ea1b985 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x2eb1b2fe i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x2ebcf302 inet_release +EXPORT_SYMBOL vmlinux 0x2ec524ad __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x2ee90bb7 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0x2eeceb42 sk_chk_filter +EXPORT_SYMBOL vmlinux 0x2ef17ab9 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x2ef63ad6 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x2f03fc4b security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x2f1dea51 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x2f3857e2 _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x2f5b87fd i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x2f7f249a netdev_warn +EXPORT_SYMBOL vmlinux 0x2f802e57 sock_wake_async +EXPORT_SYMBOL vmlinux 0x2f852137 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x2fab3354 dss_mgr_unregister_framedone_handler +EXPORT_SYMBOL vmlinux 0x2fb6de5d add_device_randomness +EXPORT_SYMBOL vmlinux 0x2fff2322 twl6040_power +EXPORT_SYMBOL vmlinux 0x3007ac93 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x301f74cc try_to_release_page +EXPORT_SYMBOL vmlinux 0x304d124f mdiobus_read +EXPORT_SYMBOL vmlinux 0x304ec72b _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x3055f5f6 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x30575fa8 kernel_accept +EXPORT_SYMBOL vmlinux 0x307c2fd0 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x3082a0b3 dss_feat_get_supported_color_modes +EXPORT_SYMBOL vmlinux 0x308aad56 omap_vrfb_min_phys_size +EXPORT_SYMBOL vmlinux 0x3093108c blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x30a80826 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x30cada8f radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x30cc24c4 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x30cdccbf inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x3102d70b frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x3110fe6b ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x3132a903 kmap_to_page +EXPORT_SYMBOL vmlinux 0x3132ee65 __nand_calculate_ecc +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x318cadb1 reciprocal_value +EXPORT_SYMBOL vmlinux 0x318d9823 dst_discard +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x31932c25 tcp_poll +EXPORT_SYMBOL vmlinux 0x31982c91 unregister_netdev +EXPORT_SYMBOL vmlinux 0x31a21eb7 xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31cef011 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x31d30c2a mddev_congested +EXPORT_SYMBOL vmlinux 0x31d87ee8 bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x31f0bb78 __kmap_atomic_idx +EXPORT_SYMBOL vmlinux 0x31f57911 vfs_fsync +EXPORT_SYMBOL vmlinux 0x320d75f2 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x32104ed3 fput +EXPORT_SYMBOL vmlinux 0x3237bbd3 kthread_stop +EXPORT_SYMBOL vmlinux 0x323ee2e6 log_wait_commit +EXPORT_SYMBOL vmlinux 0x324155d7 genl_register_ops +EXPORT_SYMBOL vmlinux 0x325f2fab snd_card_proc_new +EXPORT_SYMBOL vmlinux 0x3261bb20 register_md_personality +EXPORT_SYMBOL vmlinux 0x32789546 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x327bf883 of_can_translate_address +EXPORT_SYMBOL vmlinux 0x327c3953 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x328a05f1 strncpy +EXPORT_SYMBOL vmlinux 0x32905856 sock_i_ino +EXPORT_SYMBOL vmlinux 0x3293e8c1 genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x32bb04c8 from_kqid +EXPORT_SYMBOL vmlinux 0x32c3c378 dev_uc_del +EXPORT_SYMBOL vmlinux 0x32e28a67 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x32e2d241 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0x32e49392 kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x3316dd62 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x331d0c46 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x3328ffb6 __sock_create +EXPORT_SYMBOL vmlinux 0x332decd5 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x333f2b06 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x335e9110 vm_event_states +EXPORT_SYMBOL vmlinux 0x3376d88d jbd2_journal_load +EXPORT_SYMBOL vmlinux 0x337cce46 put_cmsg +EXPORT_SYMBOL vmlinux 0x337cf2b8 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x338772f4 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x339aaf8a skb_copy_expand +EXPORT_SYMBOL vmlinux 0x33b5a1ed bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x33bb906d snd_ctl_boolean_stereo_info +EXPORT_SYMBOL vmlinux 0x33c8e5d5 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x33cd3393 devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x33d24fab generic_permission +EXPORT_SYMBOL vmlinux 0x33d3c104 migrate_page +EXPORT_SYMBOL vmlinux 0x33dbfd93 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x33e39fcd would_dump +EXPORT_SYMBOL vmlinux 0x33f0768c cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x34184afe current_kernel_time +EXPORT_SYMBOL vmlinux 0x341dbfa3 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x34673cd6 bio_map_user +EXPORT_SYMBOL vmlinux 0x346e861b free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x347013de nla_validate +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x3496bc6b mii_link_ok +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34a19cfe eth_validate_addr +EXPORT_SYMBOL vmlinux 0x34afd134 keyring_search +EXPORT_SYMBOL vmlinux 0x34ea2ef5 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x34f3484e security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x34f4901c tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x34f605b0 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x3507a132 _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x350f8855 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0x351ba94d blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0x353e3fa5 __get_user_4 +EXPORT_SYMBOL vmlinux 0x35450604 dev_remove_offload +EXPORT_SYMBOL vmlinux 0x3582e852 __quota_error +EXPORT_SYMBOL vmlinux 0x35942ab6 omap_dss_unregister_driver +EXPORT_SYMBOL vmlinux 0x35953df5 nand_correct_data +EXPORT_SYMBOL vmlinux 0x35afa426 snd_card_file_add +EXPORT_SYMBOL vmlinux 0x35b12e3b done_path_create +EXPORT_SYMBOL vmlinux 0x35b6b772 param_ops_charp +EXPORT_SYMBOL vmlinux 0x35bdffc6 send_sig +EXPORT_SYMBOL vmlinux 0x35ca8cfa dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x35d3a9e9 mark_page_accessed +EXPORT_SYMBOL vmlinux 0x35ea3b6e tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x3612c10f tmio_core_mmc_enable +EXPORT_SYMBOL vmlinux 0x361e8cb3 page_follow_link_light +EXPORT_SYMBOL vmlinux 0x361f13d2 scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x362cdfbe inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x3648b7ab bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x366b04ef mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x36bdfd88 dev_uc_flush +EXPORT_SYMBOL vmlinux 0x36ce6b01 netdev_err +EXPORT_SYMBOL vmlinux 0x36d67784 dquot_commit +EXPORT_SYMBOL vmlinux 0x36e360e3 __hw_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x36ee4f05 skb_queue_tail +EXPORT_SYMBOL vmlinux 0x36f9cd94 rcu_is_cpu_idle +EXPORT_SYMBOL vmlinux 0x373698a2 security_inode_readlink +EXPORT_SYMBOL vmlinux 0x3739de62 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0x373a0959 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x375b245c sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x375c17b0 aio_complete +EXPORT_SYMBOL vmlinux 0x3764dbaf simple_rmdir +EXPORT_SYMBOL vmlinux 0x37723252 neigh_seq_start +EXPORT_SYMBOL vmlinux 0x3774d5a5 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x3780f7ea tcp_close +EXPORT_SYMBOL vmlinux 0x3790648e generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL vmlinux 0x37b777df param_set_copystring +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37c31890 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x37d65791 sk_prot_clear_portaddr_nulls +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x37ee74f4 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x37f614b7 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x381144a9 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x38118357 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x381a798a setup_max_cpus +EXPORT_SYMBOL vmlinux 0x381e39e3 tcp_recvmsg +EXPORT_SYMBOL vmlinux 0x382541a3 usb_put_phy +EXPORT_SYMBOL vmlinux 0x382a9775 dquot_enable +EXPORT_SYMBOL vmlinux 0x382b0e69 vfs_link +EXPORT_SYMBOL vmlinux 0x3870be08 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x38869d88 kstat +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x38a1265b tty_check_change +EXPORT_SYMBOL vmlinux 0x38a84920 set_security_override +EXPORT_SYMBOL vmlinux 0x38a9b71a sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x38b15760 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x38c5dfa6 dquot_quota_on +EXPORT_SYMBOL vmlinux 0x38c6d41a tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x390cfa2f __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x3924dd56 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0x39350e7c phy_driver_register +EXPORT_SYMBOL vmlinux 0x3939f8f0 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x3957b28b __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL vmlinux 0x397534c2 snd_timer_stop +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x399c3279 ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x399d61cc vfs_getattr +EXPORT_SYMBOL vmlinux 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL vmlinux 0x39c19e56 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x39e38f83 follow_pfn +EXPORT_SYMBOL vmlinux 0x39f69989 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0x39f931d7 vfs_readlink +EXPORT_SYMBOL vmlinux 0x3a031b38 kmap_high +EXPORT_SYMBOL vmlinux 0x3a318637 snd_card_register +EXPORT_SYMBOL vmlinux 0x3a510fa3 snd_register_device_for_dev +EXPORT_SYMBOL vmlinux 0x3a529d81 __lru_cache_add +EXPORT_SYMBOL vmlinux 0x3a6fb99a omap_device_get_by_hwmod_name +EXPORT_SYMBOL vmlinux 0x3a72d2e5 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x3a8788df __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x3a98ca10 sg_miter_start +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3a9e6491 genphy_update_link +EXPORT_SYMBOL vmlinux 0x3aa09011 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x3aa278f4 poll_initwait +EXPORT_SYMBOL vmlinux 0x3aa9b4a3 path_is_under +EXPORT_SYMBOL vmlinux 0x3ac64d95 amba_release_regions +EXPORT_SYMBOL vmlinux 0x3ad136ff invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x3ad6462e ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x3adce0f8 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x3add634c bdi_register +EXPORT_SYMBOL vmlinux 0x3afae1a4 vfs_rename +EXPORT_SYMBOL vmlinux 0x3b086a2d iterate_supers_type +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b3e8f73 empty_aops +EXPORT_SYMBOL vmlinux 0x3b578d00 of_i2c_register_devices +EXPORT_SYMBOL vmlinux 0x3b5cf30f jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x3b71d6d3 vfs_write +EXPORT_SYMBOL vmlinux 0x3b75f306 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x3b8b59bb uart_resume_port +EXPORT_SYMBOL vmlinux 0x3b91f3af snd_free_pages +EXPORT_SYMBOL vmlinux 0x3b93c852 mmc_card_awake +EXPORT_SYMBOL vmlinux 0x3bbf46ea vga_base +EXPORT_SYMBOL vmlinux 0x3bd04a33 idr_remove +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bd226ae blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x3be8e938 scsi_put_command +EXPORT_SYMBOL vmlinux 0x3bebcf1d unregister_nls +EXPORT_SYMBOL vmlinux 0x3bef03b9 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0x3bf0a128 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x3bf14272 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x3c056bed netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x3c1a3692 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x3c2115fa generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x3c2aa15e security_path_link +EXPORT_SYMBOL vmlinux 0x3c3e984d ihold +EXPORT_SYMBOL vmlinux 0x3c50bcd0 dev_open +EXPORT_SYMBOL vmlinux 0x3c80c06c kstrtoull +EXPORT_SYMBOL vmlinux 0x3c84fea6 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x3c9ae813 scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cc21e1b inet_register_protosw +EXPORT_SYMBOL vmlinux 0x3cc53fee skb_make_writable +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3d01f1cf dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x3d085165 simple_write_begin +EXPORT_SYMBOL vmlinux 0x3d156f5b address_space_init_once +EXPORT_SYMBOL vmlinux 0x3d3c540f elf_hwcap +EXPORT_SYMBOL vmlinux 0x3d544fd3 release_firmware +EXPORT_SYMBOL vmlinux 0x3d5cd403 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x3d60e70c vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x3d637ed2 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x3d810dbf skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x3d99546f blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x3da33d0b blkdev_put +EXPORT_SYMBOL vmlinux 0x3da4188b udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x3da67931 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x3dbfec94 set_anon_super +EXPORT_SYMBOL vmlinux 0x3dcb88a0 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x3dfc897c seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x3e040e13 blk_end_request +EXPORT_SYMBOL vmlinux 0x3e293326 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x3e3151ee snd_dma_alloc_pages_fallback +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e56a6f0 of_allnodes +EXPORT_SYMBOL vmlinux 0x3e790f6b mnt_set_expiry +EXPORT_SYMBOL vmlinux 0x3e884f4b vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x3e9110fa __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x3eae292f param_set_byte +EXPORT_SYMBOL vmlinux 0x3eaf291d param_get_string +EXPORT_SYMBOL vmlinux 0x3eaf7d42 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x3ec16c3b in_group_p +EXPORT_SYMBOL vmlinux 0x3ed2ca82 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3edbce94 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x3ee11218 snd_timer_new +EXPORT_SYMBOL vmlinux 0x3ee691cb inet6_bind +EXPORT_SYMBOL vmlinux 0x3eebaffa amba_device_unregister +EXPORT_SYMBOL vmlinux 0x3ef89f51 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x3f01ec5c bdi_register_dev +EXPORT_SYMBOL vmlinux 0x3f33169c generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x3f4080c8 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x3f42ccf2 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f5b67d5 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x3f6f933f posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x3f8b4752 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x3f94a782 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x3fab3ca9 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x3fbaea53 snd_pcm_hw_rule_add +EXPORT_SYMBOL vmlinux 0x3fd8b3ab netdev_info +EXPORT_SYMBOL vmlinux 0x3fee7fdf jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x40277529 thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0x402b1c20 lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x402b8281 __request_module +EXPORT_SYMBOL vmlinux 0x4037375d __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x403c8b14 get_phy_device +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x407136b1 __put_user_8 +EXPORT_SYMBOL vmlinux 0x407a3275 omap_start_dma +EXPORT_SYMBOL vmlinux 0x40822749 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x40973662 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x409d1813 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x409e40dc free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40a2d1dd dm_table_get_size +EXPORT_SYMBOL vmlinux 0x40a6f522 __arm_ioremap +EXPORT_SYMBOL vmlinux 0x40a9b349 vzalloc +EXPORT_SYMBOL vmlinux 0x40c7247c si_meminfo +EXPORT_SYMBOL vmlinux 0x40ce485b mempool_resize +EXPORT_SYMBOL vmlinux 0x40d04664 console_trylock +EXPORT_SYMBOL vmlinux 0x40e29e02 cpufreq_cooling_unregister +EXPORT_SYMBOL vmlinux 0x40e3cb19 dispc_ovl_check +EXPORT_SYMBOL vmlinux 0x40ed5397 textsearch_register +EXPORT_SYMBOL vmlinux 0x40f07981 __ashldi3 +EXPORT_SYMBOL vmlinux 0x411ef63a dquot_file_open +EXPORT_SYMBOL vmlinux 0x412e9ae3 kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x416a3785 alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x419134c7 of_platform_bus_probe +EXPORT_SYMBOL vmlinux 0x4191b570 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x41a01a01 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x41cf42a6 find_lock_page +EXPORT_SYMBOL vmlinux 0x41d9e009 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x421bb7ee jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x4224cb90 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL vmlinux 0x4225bf31 udp_proc_register +EXPORT_SYMBOL vmlinux 0x42317492 touch_atime +EXPORT_SYMBOL vmlinux 0x4257b905 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x42609466 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x426cb478 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x427217cc ppp_input +EXPORT_SYMBOL vmlinux 0x428f24f9 posix_acl_create +EXPORT_SYMBOL vmlinux 0x42977ad4 __hw_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x4298b775 v7_flush_kern_cache_all +EXPORT_SYMBOL vmlinux 0x42c1d184 eth_header_parse +EXPORT_SYMBOL vmlinux 0x42dc4f33 generic_pipe_buf_unmap +EXPORT_SYMBOL vmlinux 0x42eb9363 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x42f75ca0 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x43205ab5 block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x432537be input_set_keycode +EXPORT_SYMBOL vmlinux 0x434b4faf snd_info_create_module_entry +EXPORT_SYMBOL vmlinux 0x4351577a fb_parse_edid +EXPORT_SYMBOL vmlinux 0x435aa43f md_check_recovery +EXPORT_SYMBOL vmlinux 0x435e30c2 netif_device_attach +EXPORT_SYMBOL vmlinux 0x436586b7 dm_get_device +EXPORT_SYMBOL vmlinux 0x438610bd security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x43a0458b blk_start_plug +EXPORT_SYMBOL vmlinux 0x43ce91bf scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x43df7106 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x43ec8a75 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x43f23311 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x4411c503 prandom_seed +EXPORT_SYMBOL vmlinux 0x441ed159 omap_get_dma_src_pos +EXPORT_SYMBOL vmlinux 0x4422ec0c __elv_add_request +EXPORT_SYMBOL vmlinux 0x442495c9 tmio_core_mmc_resume +EXPORT_SYMBOL vmlinux 0x44366cfc simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x443fb83b scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x44438b96 hex2bin +EXPORT_SYMBOL vmlinux 0x44643b93 __aeabi_lmul +EXPORT_SYMBOL vmlinux 0x4465c7bb genphy_read_status +EXPORT_SYMBOL vmlinux 0x4470a79b param_ops_long +EXPORT_SYMBOL vmlinux 0x4484a065 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x44da5d0f __csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x44dd3d8d completion_done +EXPORT_SYMBOL vmlinux 0x44dd7e1f netlink_broadcast +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44ee9241 noop_fsync +EXPORT_SYMBOL vmlinux 0x452e86f4 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x45362e30 mpage_writepages +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x455293f6 down_read +EXPORT_SYMBOL vmlinux 0x455ca320 mmc_erase +EXPORT_SYMBOL vmlinux 0x456ed84a security_inode_init_security +EXPORT_SYMBOL vmlinux 0x4578f528 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x45928e94 ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x45977c0e dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0x45bd9b4e mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x45bd9efd dm_table_put +EXPORT_SYMBOL vmlinux 0x45bda0d5 system_serial_low +EXPORT_SYMBOL vmlinux 0x45cb003d neigh_connected_output +EXPORT_SYMBOL vmlinux 0x45d216b9 tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x45dd5b08 tty_port_put +EXPORT_SYMBOL vmlinux 0x45f0e7a0 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x45f1fbdd of_parse_phandle +EXPORT_SYMBOL vmlinux 0x460826a2 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x4612f66b ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x4613d8d0 dquot_disable +EXPORT_SYMBOL vmlinux 0x461deec1 bdev_read_only +EXPORT_SYMBOL vmlinux 0x46269413 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x46490e4c mntget +EXPORT_SYMBOL vmlinux 0x465757c3 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x4657d282 register_netdev +EXPORT_SYMBOL vmlinux 0x465cab34 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x46608fa0 getnstimeofday +EXPORT_SYMBOL vmlinux 0x467c2d6c pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x46a40de2 sk_free +EXPORT_SYMBOL vmlinux 0x46bb90e9 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x46c82e6d snd_power_wait +EXPORT_SYMBOL vmlinux 0x46d3b28c __div0 +EXPORT_SYMBOL vmlinux 0x46eb5258 fb_blank +EXPORT_SYMBOL vmlinux 0x46feb099 dm_read_arg +EXPORT_SYMBOL vmlinux 0x471a8838 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x47416e14 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475a00f9 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x476e7625 mutex_unlock +EXPORT_SYMBOL vmlinux 0x47939e0d __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x47b3f862 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x47b546a0 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x47b6a10f ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x47c8678a nlmsg_notify +EXPORT_SYMBOL vmlinux 0x47dc1937 snd_timer_global_free +EXPORT_SYMBOL vmlinux 0x47e70229 v7_flush_user_cache_range +EXPORT_SYMBOL vmlinux 0x47f757de elf_platform +EXPORT_SYMBOL vmlinux 0x481ce6ce cpu_active_mask +EXPORT_SYMBOL vmlinux 0x481f5908 blk_integrity_is_initialized +EXPORT_SYMBOL vmlinux 0x482b1212 sock_no_accept +EXPORT_SYMBOL vmlinux 0x48310d99 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x483987b7 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x4845c423 param_array_ops +EXPORT_SYMBOL vmlinux 0x484c6369 put_page +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x485a6bf5 invalidate_bdev +EXPORT_SYMBOL vmlinux 0x487d9343 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x488882e7 downgrade_write +EXPORT_SYMBOL vmlinux 0x488d29a6 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x4899a49f scsi_finish_command +EXPORT_SYMBOL vmlinux 0x48a5b067 __machine_arch_type +EXPORT_SYMBOL vmlinux 0x48a67c67 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0x49045426 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x4922f008 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x4927d360 key_alloc +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x496a824d dev_deactivate +EXPORT_SYMBOL vmlinux 0x499cb58c prepare_to_wait +EXPORT_SYMBOL vmlinux 0x49b07aec tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x49c61ba6 of_find_node_with_property +EXPORT_SYMBOL vmlinux 0x49cbf152 d_set_d_op +EXPORT_SYMBOL vmlinux 0x49ebacbd _clear_bit +EXPORT_SYMBOL vmlinux 0x49efdf51 lookup_bdev +EXPORT_SYMBOL vmlinux 0x4a27c64a dst_destroy +EXPORT_SYMBOL vmlinux 0x4a2ca619 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x4a2e82fe napi_gro_flush +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a39e5a1 omap_set_dma_src_params +EXPORT_SYMBOL vmlinux 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL vmlinux 0x4a5247ee flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0x4a750195 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x4a7fb243 percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x4abbe3c2 vm_brk +EXPORT_SYMBOL vmlinux 0x4ad915ee cpufreq_cooling_register +EXPORT_SYMBOL vmlinux 0x4af433ba nand_bch_init +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b015768 snd_iprintf +EXPORT_SYMBOL vmlinux 0x4b1140a3 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x4b1ec3e2 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x4b27e60a read_cache_page +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b359bea key_validate +EXPORT_SYMBOL vmlinux 0x4b4075c4 of_device_unregister +EXPORT_SYMBOL vmlinux 0x4b5d6569 scsi_device_get +EXPORT_SYMBOL vmlinux 0x4b5fd49e dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x4b7e73f2 tty_kref_put +EXPORT_SYMBOL vmlinux 0x4b8aa336 freeze_bdev +EXPORT_SYMBOL vmlinux 0x4b8e839a cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x4bb2be4b of_device_alloc +EXPORT_SYMBOL vmlinux 0x4bc179b3 lock_may_write +EXPORT_SYMBOL vmlinux 0x4bc4458d md_done_sync +EXPORT_SYMBOL vmlinux 0x4be7fb63 up +EXPORT_SYMBOL vmlinux 0x4be85a03 memweight +EXPORT_SYMBOL vmlinux 0x4c072655 blk_get_queue +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c2ae700 strnstr +EXPORT_SYMBOL vmlinux 0x4c2e685a ilookup5 +EXPORT_SYMBOL vmlinux 0x4c33081d omapdss_compat_uninit +EXPORT_SYMBOL vmlinux 0x4c428510 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0x4c450030 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x4c86184b remove_wait_queue +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cbe2079 snd_seq_root +EXPORT_SYMBOL vmlinux 0x4cdb3178 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x4cdc9f43 omapdss_default_get_timings +EXPORT_SYMBOL vmlinux 0x4ce3ae76 frontswap_enabled +EXPORT_SYMBOL vmlinux 0x4cff7365 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0x4d00fddb seq_write +EXPORT_SYMBOL vmlinux 0x4d0d163d copy_page +EXPORT_SYMBOL vmlinux 0x4d2fc44d dev_mc_add +EXPORT_SYMBOL vmlinux 0x4d30cd52 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x4d333ff5 bd_set_size +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4d405db8 param_ops_string +EXPORT_SYMBOL vmlinux 0x4d45d89e udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x4d4b946b journal_start +EXPORT_SYMBOL vmlinux 0x4d84dcdd snd_ctl_unregister_ioctl +EXPORT_SYMBOL vmlinux 0x4d8952e8 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x4d974b9c register_sysrq_key +EXPORT_SYMBOL vmlinux 0x4d9b652b rb_erase +EXPORT_SYMBOL vmlinux 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dce6cae bioset_free +EXPORT_SYMBOL vmlinux 0x4de34a07 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x4de6d315 dev_uc_sync +EXPORT_SYMBOL vmlinux 0x4dec6038 memscan +EXPORT_SYMBOL vmlinux 0x4defce1f iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4df3110f follow_down_one +EXPORT_SYMBOL vmlinux 0x4e044a29 blk_requeue_request +EXPORT_SYMBOL vmlinux 0x4e099bec phy_device_register +EXPORT_SYMBOL vmlinux 0x4e213447 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x4e2d6765 tcp_prot +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e4011cd get_gendisk +EXPORT_SYMBOL vmlinux 0x4e506013 omap_dma_link_lch +EXPORT_SYMBOL vmlinux 0x4e5cb002 tty_vhangup +EXPORT_SYMBOL vmlinux 0x4e63cbce ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e77d1cb remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x4e799530 set_user_nice +EXPORT_SYMBOL vmlinux 0x4e7c31f4 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e86bda8 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x4e93f775 omapdss_output_unset_device +EXPORT_SYMBOL vmlinux 0x4eb1fc0f blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x4ebc34b2 do_sync_read +EXPORT_SYMBOL vmlinux 0x4ebe65d8 arp_send +EXPORT_SYMBOL vmlinux 0x4ec47ba6 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0x4eca4bf6 do_truncate +EXPORT_SYMBOL vmlinux 0x4edae81c i2c_register_driver +EXPORT_SYMBOL vmlinux 0x4eeb1b71 dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x4eee5ab4 build_skb +EXPORT_SYMBOL vmlinux 0x4f0c2dae iunique +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f270fc7 phy_detach +EXPORT_SYMBOL vmlinux 0x4f2e63a5 key_put +EXPORT_SYMBOL vmlinux 0x4f391d0e nla_parse +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f5624dc security_path_chown +EXPORT_SYMBOL vmlinux 0x4f63a9e9 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x4f68e5c9 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL vmlinux 0x4f89c9de gpmc_cs_free +EXPORT_SYMBOL vmlinux 0x4f8a9394 blk_rq_init +EXPORT_SYMBOL vmlinux 0x4fc54825 mmc_hw_reset_check +EXPORT_SYMBOL vmlinux 0x4fcd8166 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x4fce3c95 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x4ff0cf5a page_symlink +EXPORT_SYMBOL vmlinux 0x4ffe82e2 snd_ctl_find_id +EXPORT_SYMBOL vmlinux 0x5000133c __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x50097088 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x504dc00c ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x5050b60a sock_no_getname +EXPORT_SYMBOL vmlinux 0x50892e07 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x509817cf vprintk_emit +EXPORT_SYMBOL vmlinux 0x50ccff03 omap_dma_set_prio_lch +EXPORT_SYMBOL vmlinux 0x50d5612e dispc_mgr_get_sync_lost_irq +EXPORT_SYMBOL vmlinux 0x51055980 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x511746c1 dump_fpu +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x512c5f6a nf_afinfo +EXPORT_SYMBOL vmlinux 0x513a1621 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x513f95f3 bdget_disk +EXPORT_SYMBOL vmlinux 0x5143c678 param_get_invbool +EXPORT_SYMBOL vmlinux 0x5162b91f blk_delay_queue +EXPORT_SYMBOL vmlinux 0x5169161d omap_free_dma_chain +EXPORT_SYMBOL vmlinux 0x51749fc8 _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0x5177882d mount_ns +EXPORT_SYMBOL vmlinux 0x517c5c14 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x518440f9 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x51908eb8 __raw_writesl +EXPORT_SYMBOL vmlinux 0x51a60b92 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x51b7eedd tty_mutex +EXPORT_SYMBOL vmlinux 0x51b84cbe d_make_root +EXPORT_SYMBOL vmlinux 0x51c78900 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x51d559d1 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51e77c97 pfn_valid +EXPORT_SYMBOL vmlinux 0x51ec2fa8 nand_default_bbt +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x51fe1c03 tty_port_close +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x521add6a fd_install +EXPORT_SYMBOL vmlinux 0x5230592f pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x523cf7dd devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x52428cc8 parent_mem_cgroup +EXPORT_SYMBOL vmlinux 0x5266c1c9 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x527b11e4 quota_send_warning +EXPORT_SYMBOL vmlinux 0x52891079 add_disk +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x52bee5ad inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x52d42c95 set_current_groups +EXPORT_SYMBOL vmlinux 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL vmlinux 0x52efd766 __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x52f81229 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x53038468 journal_load +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x5376b69b dma_release_from_coherent +EXPORT_SYMBOL vmlinux 0x537a3062 blk_complete_request +EXPORT_SYMBOL vmlinux 0x537c5fa3 dst_alloc +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x53b77dda posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x53c29fa2 bh_submit_read +EXPORT_SYMBOL vmlinux 0x53c5e941 tty_devnum +EXPORT_SYMBOL vmlinux 0x53f5c352 amba_driver_register +EXPORT_SYMBOL vmlinux 0x5401b8f9 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x5409775b free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x5435875b mod_zone_page_state +EXPORT_SYMBOL vmlinux 0x543ef284 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x547077ec __wake_up_bit +EXPORT_SYMBOL vmlinux 0x547ce898 dispc_read_irqenable +EXPORT_SYMBOL vmlinux 0x5496336f netif_skb_features +EXPORT_SYMBOL vmlinux 0x54a9db5f _kstrtoul +EXPORT_SYMBOL vmlinux 0x54be194f snd_pcm_new +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54e8f920 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x54f6830a omapdss_get_default_display_name +EXPORT_SYMBOL vmlinux 0x55041118 file_remove_suid +EXPORT_SYMBOL vmlinux 0x551bd071 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x55216a44 arp_create +EXPORT_SYMBOL vmlinux 0x55268116 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x55392f40 scsi_device_put +EXPORT_SYMBOL vmlinux 0x5541ea93 on_each_cpu +EXPORT_SYMBOL vmlinux 0x5566202f scsi_register +EXPORT_SYMBOL vmlinux 0x5567c227 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x55683d96 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x55801321 inet_ioctl +EXPORT_SYMBOL vmlinux 0x5580914a alloc_disk +EXPORT_SYMBOL vmlinux 0x559299c5 md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x559e598a create_empty_buffers +EXPORT_SYMBOL vmlinux 0x55be890e rtnl_notify +EXPORT_SYMBOL vmlinux 0x55ce9663 notify_change +EXPORT_SYMBOL vmlinux 0x55fe394f kthread_bind +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x561a2574 register_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0x5620c75e lock_rename +EXPORT_SYMBOL vmlinux 0x562ddf7d tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x563cb972 htc_egpio_get_wakeup_irq +EXPORT_SYMBOL vmlinux 0x5642793a radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x5657ffdc padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x56735e14 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x567604cb fs_bio_set +EXPORT_SYMBOL vmlinux 0x56789ac5 omap_set_dma_color_mode +EXPORT_SYMBOL vmlinux 0x5689afe7 dispc_ovl_enable +EXPORT_SYMBOL vmlinux 0x569469c3 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x56bc2f15 dispc_ovl_set_channel_out +EXPORT_SYMBOL vmlinux 0x56bc9de8 proc_create_data +EXPORT_SYMBOL vmlinux 0x56c5d3c4 tcf_register_action +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d990f5 mdiobus_free +EXPORT_SYMBOL vmlinux 0x56f171cb get_disk +EXPORT_SYMBOL vmlinux 0x5728f481 snd_ctl_remove_id +EXPORT_SYMBOL vmlinux 0x572d0104 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x5736a2d0 mpage_readpage +EXPORT_SYMBOL vmlinux 0x5745994d sk_filter +EXPORT_SYMBOL vmlinux 0x574785d2 bio_unmap_user +EXPORT_SYMBOL vmlinux 0x574954b2 dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0x574f91fe bio_integrity_trim +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x5757d3d5 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x57656423 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x57674fd7 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x577b6ab2 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x57814ea8 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x57823c01 snd_unregister_device +EXPORT_SYMBOL vmlinux 0x57c44f2b copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x57f1ff34 of_phy_connect +EXPORT_SYMBOL vmlinux 0x581bf3e0 kill_pid +EXPORT_SYMBOL vmlinux 0x58292d7c tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x582c8243 snd_jack_report +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x58516557 omap_set_dma_src_data_pack +EXPORT_SYMBOL vmlinux 0x585af671 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x5888676a elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x588c130c vexpress_config_func_put +EXPORT_SYMBOL vmlinux 0x58958dc2 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0x58a33b39 udp_prot +EXPORT_SYMBOL vmlinux 0x58a7e7c7 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x58bc129f locks_mandatory_area +EXPORT_SYMBOL vmlinux 0x58bebd62 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x58d1070a of_get_address +EXPORT_SYMBOL vmlinux 0x58de9fbd __skb_get_rxhash +EXPORT_SYMBOL vmlinux 0x590972d0 scsi_free_command +EXPORT_SYMBOL vmlinux 0x591b0c12 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0x59206c34 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x5926ca99 secpath_dup +EXPORT_SYMBOL vmlinux 0x59285e21 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x594e1317 __modsi3 +EXPORT_SYMBOL vmlinux 0x59539800 md_flush_request +EXPORT_SYMBOL vmlinux 0x59613bf3 nf_log_unregister +EXPORT_SYMBOL vmlinux 0x59802fac rtnl_unicast +EXPORT_SYMBOL vmlinux 0x598542b2 _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x598cd828 udp_table +EXPORT_SYMBOL vmlinux 0x59d102fb proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x59d29dab v7_flush_kern_dcache_area +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59d8223a ioport_resource +EXPORT_SYMBOL vmlinux 0x59da63d9 snd_pcm_hw_constraint_step +EXPORT_SYMBOL vmlinux 0x59dd8508 jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x59e5070d __do_div64 +EXPORT_SYMBOL vmlinux 0x59e70f93 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0x5a140a23 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x5a32c3c4 mmc_request_done +EXPORT_SYMBOL vmlinux 0x5a499d85 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x5a633a98 stop_tty +EXPORT_SYMBOL vmlinux 0x5a69e841 __blk_end_request +EXPORT_SYMBOL vmlinux 0x5a74a8ff of_match_node +EXPORT_SYMBOL vmlinux 0x5a9927a7 bdget +EXPORT_SYMBOL vmlinux 0x5ad39898 mmc_interrupt_hpi +EXPORT_SYMBOL vmlinux 0x5ad87659 __mem_cgroup_count_vm_event +EXPORT_SYMBOL vmlinux 0x5addfed9 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x5adf0ff8 release_sock +EXPORT_SYMBOL vmlinux 0x5ae5be44 lg_lock_init +EXPORT_SYMBOL vmlinux 0x5aeea42d kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x5b0be989 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x5b151aad security_file_permission +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b2bb811 update_time +EXPORT_SYMBOL vmlinux 0x5b586422 input_reset_device +EXPORT_SYMBOL vmlinux 0x5b5bcfaf jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x5b6b6ba0 update_region +EXPORT_SYMBOL vmlinux 0x5b7fd982 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x5b97479f vfs_mkdir +EXPORT_SYMBOL vmlinux 0x5ba53020 vfs_fstat +EXPORT_SYMBOL vmlinux 0x5bbbfd7c snd_pcm_hw_rule_noresample +EXPORT_SYMBOL vmlinux 0x5bec62bd tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x5beda3a6 iterate_fd +EXPORT_SYMBOL vmlinux 0x5bf4a1eb sg_last +EXPORT_SYMBOL vmlinux 0x5bf746a2 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x5bf9077d cdev_alloc +EXPORT_SYMBOL vmlinux 0x5c24f1fc bio_put +EXPORT_SYMBOL vmlinux 0x5c2a8947 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x5c3a2e20 seq_release_private +EXPORT_SYMBOL vmlinux 0x5c72f89f scsi_host_get +EXPORT_SYMBOL vmlinux 0x5c8b2d57 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0x5c9125bb jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x5c9284a0 processor_id +EXPORT_SYMBOL vmlinux 0x5ca4eee7 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x5caf4a3c tcp_check_req +EXPORT_SYMBOL vmlinux 0x5cd10dd5 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x5cd18d4e sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x5cd6ea1f journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x5cdcc1b9 sock_release +EXPORT_SYMBOL vmlinux 0x5cf53ce2 input_free_minor +EXPORT_SYMBOL vmlinux 0x5d0b1892 param_set_invbool +EXPORT_SYMBOL vmlinux 0x5d151ec5 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x5d3771c8 snd_ctl_remove +EXPORT_SYMBOL vmlinux 0x5d5b5a16 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x5d6753d6 neigh_for_each +EXPORT_SYMBOL vmlinux 0x5d9d6626 prepare_binprm +EXPORT_SYMBOL vmlinux 0x5da939d6 __scsi_add_device +EXPORT_SYMBOL vmlinux 0x5dbf3adb fb_get_mode +EXPORT_SYMBOL vmlinux 0x5dddb74b ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x5e02ff0c netlink_set_err +EXPORT_SYMBOL vmlinux 0x5e137fcf input_open_device +EXPORT_SYMBOL vmlinux 0x5e1430ce bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x5e175a9a dget_parent +EXPORT_SYMBOL vmlinux 0x5e2645cb netif_napi_del +EXPORT_SYMBOL vmlinux 0x5e26e472 dquot_get_dqinfo +EXPORT_SYMBOL vmlinux 0x5e4576a0 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL vmlinux 0x5e60eb27 omap_dma_unlink_lch +EXPORT_SYMBOL vmlinux 0x5e6947f7 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x5e6e7f76 ip_fragment +EXPORT_SYMBOL vmlinux 0x5e6f332e block_read_full_page +EXPORT_SYMBOL vmlinux 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL vmlinux 0x5e7fdf32 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0x5e89f668 user_path_create +EXPORT_SYMBOL vmlinux 0x5e8a52c8 sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x5e93dae3 omapdss_default_get_recommended_bpp +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5ea841f2 xfrm_state_update +EXPORT_SYMBOL vmlinux 0x5eb00234 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x5eb24829 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ee2e275 drop_super +EXPORT_SYMBOL vmlinux 0x5ee51af2 vlan_vid_del +EXPORT_SYMBOL vmlinux 0x5ee82bb0 bio_init +EXPORT_SYMBOL vmlinux 0x5ef3615c bio_copy_kern +EXPORT_SYMBOL vmlinux 0x5efb0091 ida_get_new +EXPORT_SYMBOL vmlinux 0x5f005368 kstrtou8 +EXPORT_SYMBOL vmlinux 0x5f012b43 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x5f0cdc7c block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x5f33870c snd_pcm_hw_constraint_integer +EXPORT_SYMBOL vmlinux 0x5f3c8f5c mmc_assume_removable +EXPORT_SYMBOL vmlinux 0x5f3f92d3 dcache_readdir +EXPORT_SYMBOL vmlinux 0x5f4e2be7 nf_log_packet +EXPORT_SYMBOL vmlinux 0x5f58f676 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x5f64dd14 get_fs_type +EXPORT_SYMBOL vmlinux 0x5f6de840 register_netdevice +EXPORT_SYMBOL vmlinux 0x5f754e5a memset +EXPORT_SYMBOL vmlinux 0x5f7927a3 generic_removexattr +EXPORT_SYMBOL vmlinux 0x5f93f426 tcp_splice_read +EXPORT_SYMBOL vmlinux 0x5fb0341c skb_seq_read +EXPORT_SYMBOL vmlinux 0x5fb4de2f set_device_ro +EXPORT_SYMBOL vmlinux 0x5fc19454 register_con_driver +EXPORT_SYMBOL vmlinux 0x5fde5eeb unlock_rename +EXPORT_SYMBOL vmlinux 0x5ff411f3 simple_write_end +EXPORT_SYMBOL vmlinux 0x60055baa dispc_mgr_get_vsync_irq +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x601f665f dm_io_client_create +EXPORT_SYMBOL vmlinux 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL vmlinux 0x602e8e92 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x60523196 dquot_initialize +EXPORT_SYMBOL vmlinux 0x606d0b09 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60afe24d security_path_unlink +EXPORT_SYMBOL vmlinux 0x60d77eeb phy_find_first +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x6128b5fc __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x6132e446 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x61379d91 crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x616bdf4c __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x617643a2 param_set_long +EXPORT_SYMBOL vmlinux 0x617a218d __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x617d005b input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x6180899b page_address +EXPORT_SYMBOL vmlinux 0x618097c2 mmc_free_host +EXPORT_SYMBOL vmlinux 0x61846eb2 arp_xmit +EXPORT_SYMBOL vmlinux 0x618ba501 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x6195ede6 __nla_put +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61bf4691 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x61c175e5 __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x61d71e5c inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x62076eb7 uart_match_port +EXPORT_SYMBOL vmlinux 0x620f0fff phy_register_fixup +EXPORT_SYMBOL vmlinux 0x6225637e md5_transform +EXPORT_SYMBOL vmlinux 0x6228c21f smp_call_function_single +EXPORT_SYMBOL vmlinux 0x6259ec1f generic_ro_fops +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62792e60 tcp_proc_register +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62849ac7 dev_valid_name +EXPORT_SYMBOL vmlinux 0x62b33d46 force_sig +EXPORT_SYMBOL vmlinux 0x62b8d90d bdi_destroy +EXPORT_SYMBOL vmlinux 0x62bb503b udplite_prot +EXPORT_SYMBOL vmlinux 0x62bdc143 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x62d34ec2 kobject_del +EXPORT_SYMBOL vmlinux 0x62db108e padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x62fd6207 param_set_charp +EXPORT_SYMBOL vmlinux 0x63092b3b skb_dequeue +EXPORT_SYMBOL vmlinux 0x6332cc1a audit_log_start +EXPORT_SYMBOL vmlinux 0x633a8214 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x63580cc1 nand_unlock +EXPORT_SYMBOL vmlinux 0x635f90d8 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x636b3461 omap_dss_get_num_overlays +EXPORT_SYMBOL vmlinux 0x638c05aa sock_i_uid +EXPORT_SYMBOL vmlinux 0x63922bbd vfs_stat +EXPORT_SYMBOL vmlinux 0x639b7ca9 neigh_seq_next +EXPORT_SYMBOL vmlinux 0x63b0c064 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0x63eb9355 panic_blink +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63fc232f strlen_user +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x647de8a9 sock_create_kern +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64a22ff0 dispc_mgr_set_lcd_config +EXPORT_SYMBOL vmlinux 0x64b6dce6 pm860x_page_reg_read +EXPORT_SYMBOL vmlinux 0x64c66530 omapdss_sdi_display_disable +EXPORT_SYMBOL vmlinux 0x64c6a58a dev_addr_add +EXPORT_SYMBOL vmlinux 0x64d233c8 ioremap_page +EXPORT_SYMBOL vmlinux 0x64deb3fc pm860x_reg_write +EXPORT_SYMBOL vmlinux 0x64e62627 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x64f5a48d inet6_del_offload +EXPORT_SYMBOL vmlinux 0x64f632ef tcp_valid_rtt_meas +EXPORT_SYMBOL vmlinux 0x650509b2 dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x650a6767 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL vmlinux 0x6513a3fa fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x6540073e register_exec_domain +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65440c5c journal_release_buffer +EXPORT_SYMBOL vmlinux 0x65466939 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x65614bc0 lock_fb_info +EXPORT_SYMBOL vmlinux 0x6579b385 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x6585e310 alloc_pages_exact_nid +EXPORT_SYMBOL vmlinux 0x658c0ecb mmc_cleanup_queue +EXPORT_SYMBOL vmlinux 0x65baa813 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x65bd59ea bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x65d19d99 tty_hangup +EXPORT_SYMBOL vmlinux 0x65d827f0 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x65dccf13 xz_dec_end +EXPORT_SYMBOL vmlinux 0x65f3ad9a fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x6603cf22 __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x6605f97f flex_array_clear +EXPORT_SYMBOL vmlinux 0x660608d9 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x660b95de journal_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x661363d6 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x66395b1e xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x664afc2c blk_recount_segments +EXPORT_SYMBOL vmlinux 0x6676c04b iget5_locked +EXPORT_SYMBOL vmlinux 0x6682b63b dquot_resume +EXPORT_SYMBOL vmlinux 0x6685a0ec do_splice_direct +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x669e5283 inc_nlink +EXPORT_SYMBOL vmlinux 0x66a54e61 snd_pcm_stop +EXPORT_SYMBOL vmlinux 0x66a67dab flex_array_shrink +EXPORT_SYMBOL vmlinux 0x66c9d71a dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x6723dddb __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x67413224 of_mdio_find_bus +EXPORT_SYMBOL vmlinux 0x67573e1c generic_file_fsync +EXPORT_SYMBOL vmlinux 0x676bbc0f _set_bit +EXPORT_SYMBOL vmlinux 0x677f4c7b tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x67886e85 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x6789b21d unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67b78eb3 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x67f23306 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x67f2f539 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x6818f682 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x68312d23 omapdss_sdi_display_enable +EXPORT_SYMBOL vmlinux 0x68319f9c unlock_new_inode +EXPORT_SYMBOL vmlinux 0x6869b05e request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x687b6a16 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x6883669d vfs_open +EXPORT_SYMBOL vmlinux 0x6891922d security_inode_permission +EXPORT_SYMBOL vmlinux 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL vmlinux 0x68a3e4ad dump_seek +EXPORT_SYMBOL vmlinux 0x68b6162f inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x68c6b1a0 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x68da984d mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x68e05d57 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x68fb581a icst307_idx2s +EXPORT_SYMBOL vmlinux 0x6915eb38 down_interruptible +EXPORT_SYMBOL vmlinux 0x69317269 generic_setlease +EXPORT_SYMBOL vmlinux 0x696bb4e8 tcp_init_sock +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x698b1064 snd_pcm_new_stream +EXPORT_SYMBOL vmlinux 0x699ada47 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x69a53fd9 mpage_readpages +EXPORT_SYMBOL vmlinux 0x69a6d2d6 simple_rename +EXPORT_SYMBOL vmlinux 0x69a7df11 create_proc_entry +EXPORT_SYMBOL vmlinux 0x69ad2f20 kstrtouint +EXPORT_SYMBOL vmlinux 0x69b6f8d9 omap_set_dma_transfer_params +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a109ba9 snd_info_create_card_entry +EXPORT_SYMBOL vmlinux 0x6a201704 ndo_dflt_bridge_getlink +EXPORT_SYMBOL vmlinux 0x6a27de99 i2c_use_client +EXPORT_SYMBOL vmlinux 0x6a36edd7 mii_ethtool_sset +EXPORT_SYMBOL vmlinux 0x6a417ef4 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x6a4acd8b set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x6a64510e __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x6a69da4d devm_iounmap +EXPORT_SYMBOL vmlinux 0x6a71fe57 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a8ce061 inet_accept +EXPORT_SYMBOL vmlinux 0x6aab3797 dev_addr_del +EXPORT_SYMBOL vmlinux 0x6aae877a log_start_commit +EXPORT_SYMBOL vmlinux 0x6ab86722 blk_init_queue +EXPORT_SYMBOL vmlinux 0x6ad1eb58 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x6b06fdce delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b25cbf8 complete_request_key +EXPORT_SYMBOL vmlinux 0x6b2db8ae vfs_lstat +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b432ecd mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x6b689815 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x6b7589f4 param_set_bool +EXPORT_SYMBOL vmlinux 0x6b83295e devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x6b836242 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x6b863667 i2c_transfer +EXPORT_SYMBOL vmlinux 0x6bb50de4 dev_uc_init +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc488be __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x6bc75636 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0x6bc7f9a2 tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6c02a27f jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x6c0908eb bio_map_kern +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c2efad0 of_n_addr_cells +EXPORT_SYMBOL vmlinux 0x6c387e4d __inode_permission +EXPORT_SYMBOL vmlinux 0x6c38a363 fb_find_mode +EXPORT_SYMBOL vmlinux 0x6c3a12ed tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c6cdd4d wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x6c6fd277 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c758c7d blk_put_request +EXPORT_SYMBOL vmlinux 0x6c8b834c netdev_update_features +EXPORT_SYMBOL vmlinux 0x6c8e142b ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x6ccf7bd7 __pv_phys_offset +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6ce5813d get_super +EXPORT_SYMBOL vmlinux 0x6d044c26 param_ops_uint +EXPORT_SYMBOL vmlinux 0x6d0f1f89 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d346792 pin_config_group_get +EXPORT_SYMBOL vmlinux 0x6d3736ef mmc_resume_host +EXPORT_SYMBOL vmlinux 0x6d519750 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x6d662533 _find_first_bit_le +EXPORT_SYMBOL vmlinux 0x6d67169e __ip_select_ident +EXPORT_SYMBOL vmlinux 0x6d9d568e may_umount +EXPORT_SYMBOL vmlinux 0x6dc3a39c journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x6dcb5eb1 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x6dd926e6 file_open_root +EXPORT_SYMBOL vmlinux 0x6ddec5ac devm_gpio_request +EXPORT_SYMBOL vmlinux 0x6dea9d59 rt6_lookup +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6df0fb69 unload_nls +EXPORT_SYMBOL vmlinux 0x6dff7a69 free_buffer_head +EXPORT_SYMBOL vmlinux 0x6e156304 dquot_transfer +EXPORT_SYMBOL vmlinux 0x6e1e2b6b mount_subtree +EXPORT_SYMBOL vmlinux 0x6e29d570 nf_register_hooks +EXPORT_SYMBOL vmlinux 0x6e373f59 dss_mgr_enable +EXPORT_SYMBOL vmlinux 0x6e3b003d bio_reset +EXPORT_SYMBOL vmlinux 0x6e6c0c39 commit_creds +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e88e56f snd_pcm_link_rwlock +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eaff940 do_splice_to +EXPORT_SYMBOL vmlinux 0x6ec432a5 cpu_tlb +EXPORT_SYMBOL vmlinux 0x6ed9c254 mmc_gpio_free_ro +EXPORT_SYMBOL vmlinux 0x6edc90ba tc_classify_compat +EXPORT_SYMBOL vmlinux 0x6ede8c32 __bio_clone +EXPORT_SYMBOL vmlinux 0x6ef36cac bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL vmlinux 0x6f073e7e dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x6f0f1860 input_set_abs_params +EXPORT_SYMBOL vmlinux 0x6f20960a full_name_hash +EXPORT_SYMBOL vmlinux 0x6f36395e snd_card_disconnect +EXPORT_SYMBOL vmlinux 0x6f655d00 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x6f7b79af prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0x6f962d26 unregister_key_type +EXPORT_SYMBOL vmlinux 0x6fa8814d read_cache_page_async +EXPORT_SYMBOL vmlinux 0x6fc5a6d9 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fcf2556 ping_prot +EXPORT_SYMBOL vmlinux 0x6fee2d8d netpoll_cleanup +EXPORT_SYMBOL vmlinux 0x700385a9 phy_start +EXPORT_SYMBOL vmlinux 0x70097aa0 nand_bch_free +EXPORT_SYMBOL vmlinux 0x700ffd9a __alloc_skb +EXPORT_SYMBOL vmlinux 0x7015e68a neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x703105aa deactivate_super +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x705a0389 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x705b6f56 unregister_con_driver +EXPORT_SYMBOL vmlinux 0x70601e04 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x706fd1d7 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x7074b591 keyring_clear +EXPORT_SYMBOL vmlinux 0x70879d45 amba_request_regions +EXPORT_SYMBOL vmlinux 0x70886c82 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x70af7cc1 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70cf4ec0 vfs_readdir +EXPORT_SYMBOL vmlinux 0x70d053fd try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x70dd1a12 gpmc_cs_configure +EXPORT_SYMBOL vmlinux 0x70e39dae dss_uninstall_mgr_ops +EXPORT_SYMBOL vmlinux 0x70e91dc5 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x70f32c09 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0x710e2b07 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x71658a05 dispc_ovl_setup +EXPORT_SYMBOL vmlinux 0x716b270b skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x716b8ee0 inet_frag_find +EXPORT_SYMBOL vmlinux 0x716be4cd generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x717cd467 dev_driver_string +EXPORT_SYMBOL vmlinux 0x718252d3 snd_dma_get_reserved_buf +EXPORT_SYMBOL vmlinux 0x71987be1 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0x71a31742 journal_clear_err +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71a672ef dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x71ac1104 textsearch_destroy +EXPORT_SYMBOL vmlinux 0x71c90087 memcmp +EXPORT_SYMBOL vmlinux 0x71f20aac journal_forget +EXPORT_SYMBOL vmlinux 0x72081e4b f_setown +EXPORT_SYMBOL vmlinux 0x7234eafb otg_state_string +EXPORT_SYMBOL vmlinux 0x72350130 ___ratelimit +EXPORT_SYMBOL vmlinux 0x723dd9c9 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x72488a45 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x72588bd3 qdisc_list_del +EXPORT_SYMBOL vmlinux 0x729af9bb omap_dss_register_driver +EXPORT_SYMBOL vmlinux 0x72c2a06c revert_creds +EXPORT_SYMBOL vmlinux 0x72cfc1c2 arm_coherent_dma_ops +EXPORT_SYMBOL vmlinux 0x72d58de9 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72efc70e tty_port_close_start +EXPORT_SYMBOL vmlinux 0x72f3604a tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x73015875 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x7315a4e9 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x731b81f1 __wait_on_bit +EXPORT_SYMBOL vmlinux 0x731ff712 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x733c3b54 kasprintf +EXPORT_SYMBOL vmlinux 0x733e5dda bdevname +EXPORT_SYMBOL vmlinux 0x73413c86 blk_put_queue +EXPORT_SYMBOL vmlinux 0x73416856 md_finish_reshape +EXPORT_SYMBOL vmlinux 0x7349fb9c __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x735b36d3 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x735fe63e scsi_add_device +EXPORT_SYMBOL vmlinux 0x736310fc scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0x737de5e9 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x738270d0 netif_carrier_on +EXPORT_SYMBOL vmlinux 0x73896931 snd_timer_close +EXPORT_SYMBOL vmlinux 0x73d071de vm_insert_page +EXPORT_SYMBOL vmlinux 0x73d444c3 fsl_asoc_get_dma_channel +EXPORT_SYMBOL vmlinux 0x73d8ae9e seq_vprintf +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x73fd5eff __seq_open_private +EXPORT_SYMBOL vmlinux 0x74038fa4 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x74429f3b redraw_screen +EXPORT_SYMBOL vmlinux 0x7469fcfe radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x747b624b __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74aa49f8 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x74b53286 journal_destroy +EXPORT_SYMBOL vmlinux 0x74bfa529 genlmsg_put +EXPORT_SYMBOL vmlinux 0x74c134b9 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74e46dac imx_ssi_fiq_tx_buffer +EXPORT_SYMBOL vmlinux 0x74e5ff1a udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x74f6b53b udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x7500cc71 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x75057c31 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x7505bdef memchr_inv +EXPORT_SYMBOL vmlinux 0x750715a2 input_register_handler +EXPORT_SYMBOL vmlinux 0x751a078b mii_check_link +EXPORT_SYMBOL vmlinux 0x7527e37c inet_stream_connect +EXPORT_SYMBOL vmlinux 0x752b4490 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x752e7b41 sys_fillrect +EXPORT_SYMBOL vmlinux 0x754148d9 mmc_read_bkops_status +EXPORT_SYMBOL vmlinux 0x7548595b nf_register_hook +EXPORT_SYMBOL vmlinux 0x754dac78 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x7575d76b jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x7593d385 div64_s64 +EXPORT_SYMBOL vmlinux 0x7594bd93 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x75b1e748 bioset_create +EXPORT_SYMBOL vmlinux 0x75bda77a seq_hlist_next +EXPORT_SYMBOL vmlinux 0x75c9114e map_destroy +EXPORT_SYMBOL vmlinux 0x75c965db snd_timer_continue +EXPORT_SYMBOL vmlinux 0x75e3d0ca snd_timer_notify +EXPORT_SYMBOL vmlinux 0x75fee7fd __raw_writesb +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x76226192 snd_pcm_new_internal +EXPORT_SYMBOL vmlinux 0x762ac05c skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x7647726c handle_sysrq +EXPORT_SYMBOL vmlinux 0x765e1bb3 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x76663bce generic_show_options +EXPORT_SYMBOL vmlinux 0x76892094 dcb_setapp +EXPORT_SYMBOL vmlinux 0x769c241f inet_del_protocol +EXPORT_SYMBOL vmlinux 0x76a203af dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76c30611 generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x76cf47f6 __aeabi_llsl +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76d988d1 generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x76de458d textsearch_unregister +EXPORT_SYMBOL vmlinux 0x770577bd dev_set_group +EXPORT_SYMBOL vmlinux 0x77361245 sock_no_connect +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x7758ce65 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x7763b835 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x7768d259 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x7778539a get_unmapped_area +EXPORT_SYMBOL vmlinux 0x7778bc14 xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x778504b7 start_tty +EXPORT_SYMBOL vmlinux 0x7791193f icst525_s2div +EXPORT_SYMBOL vmlinux 0x779a18af kstrtoll +EXPORT_SYMBOL vmlinux 0x779ac69c tty_port_hangup +EXPORT_SYMBOL vmlinux 0x77bc13a0 strim +EXPORT_SYMBOL vmlinux 0x77ce93b3 qid_lt +EXPORT_SYMBOL vmlinux 0x77d5b4a5 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x77df0847 __set_personality +EXPORT_SYMBOL vmlinux 0x77e9ba26 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77fae4ef invalidate_partition +EXPORT_SYMBOL vmlinux 0x77fe4cb2 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x781a08c7 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x7823e4fe cfb_fillrect +EXPORT_SYMBOL vmlinux 0x7880c781 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x788fe103 iomem_resource +EXPORT_SYMBOL vmlinux 0x789affb1 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x789b4ac5 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x78ba6155 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x78e4f85e tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x78e821ee of_get_next_child +EXPORT_SYMBOL vmlinux 0x7929c4e7 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x792b286a ata_link_printk +EXPORT_SYMBOL vmlinux 0x793387fe mii_check_media +EXPORT_SYMBOL vmlinux 0x79384fd1 skb_store_bits +EXPORT_SYMBOL vmlinux 0x793c7c7c unregister_framebuffer +EXPORT_SYMBOL vmlinux 0x794487ee disable_hlt +EXPORT_SYMBOL vmlinux 0x795123ad dev_load +EXPORT_SYMBOL vmlinux 0x7965fd98 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x797e9802 input_unregister_device +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79c8651c scsi_ioctl +EXPORT_SYMBOL vmlinux 0x79fa1deb imx_ssi_fiq_rx_buffer +EXPORT_SYMBOL vmlinux 0x79fb0b96 pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x7a103f01 nand_lock +EXPORT_SYMBOL vmlinux 0x7a145658 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x7a188791 prandom_bytes +EXPORT_SYMBOL vmlinux 0x7a201fdd blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x7a2256de brioctl_set +EXPORT_SYMBOL vmlinux 0x7a27c184 ewma_init +EXPORT_SYMBOL vmlinux 0x7a2bc42d simple_link +EXPORT_SYMBOL vmlinux 0x7a3e53f4 d_lookup +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a6123db dma_find_channel +EXPORT_SYMBOL vmlinux 0x7a6a7c09 block_truncate_page +EXPORT_SYMBOL vmlinux 0x7a6f767e sk_alloc +EXPORT_SYMBOL vmlinux 0x7a91726b clkdev_alloc +EXPORT_SYMBOL vmlinux 0x7aaae141 __ethtool_get_settings +EXPORT_SYMBOL vmlinux 0x7ab88a45 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x7ac253f2 register_nls +EXPORT_SYMBOL vmlinux 0x7ad1e773 omap_dss_get_device +EXPORT_SYMBOL vmlinux 0x7ad41bf9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x7ada077b mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x7ae21e9a unregister_cdrom +EXPORT_SYMBOL vmlinux 0x7af41f3a skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x7af79a5b netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x7afa89fc vsnprintf +EXPORT_SYMBOL vmlinux 0x7afa9e6a bio_split +EXPORT_SYMBOL vmlinux 0x7b03848a verify_mem_not_deleted +EXPORT_SYMBOL vmlinux 0x7b10be34 scsi_block_requests +EXPORT_SYMBOL vmlinux 0x7b121b0e dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x7b1fd349 account_page_writeback +EXPORT_SYMBOL vmlinux 0x7b415c3f blk_register_region +EXPORT_SYMBOL vmlinux 0x7b5c8440 vm_munmap +EXPORT_SYMBOL vmlinux 0x7b6646bb _raw_read_lock +EXPORT_SYMBOL vmlinux 0x7b789d4d usb_add_phy +EXPORT_SYMBOL vmlinux 0x7b93fd2f dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x7bc34b2b d_genocide +EXPORT_SYMBOL vmlinux 0x7bf6b469 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0x7c1372e8 panic +EXPORT_SYMBOL vmlinux 0x7c2d95dc scsi_remove_host +EXPORT_SYMBOL vmlinux 0x7c40425d generic_getxattr +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c5172b2 tcp_shutdown +EXPORT_SYMBOL vmlinux 0x7c57cce1 cdrom_open +EXPORT_SYMBOL vmlinux 0x7c590624 __breadahead +EXPORT_SYMBOL vmlinux 0x7c61e708 tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x7c708dca scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x7c840d19 vm_mmap +EXPORT_SYMBOL vmlinux 0x7c85396e snd_pcm_limit_hw_rates +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c98845d twl_i2c_read +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cbe8095 dispc_mgr_set_timings +EXPORT_SYMBOL vmlinux 0x7cc035a7 __ucmpdi2 +EXPORT_SYMBOL vmlinux 0x7cea0a25 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0x7cedac2e inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x7cfdcf54 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x7d0db45c jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d1c953c udp_disconnect +EXPORT_SYMBOL vmlinux 0x7d25a3dc unregister_qdisc +EXPORT_SYMBOL vmlinux 0x7d3648ee revalidate_disk +EXPORT_SYMBOL vmlinux 0x7d4e2276 __init_rwsem +EXPORT_SYMBOL vmlinux 0x7d5fe4b6 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0x7d7846da write_one_page +EXPORT_SYMBOL vmlinux 0x7d84c8fd __lock_page +EXPORT_SYMBOL vmlinux 0x7d861e82 xfrm_lookup +EXPORT_SYMBOL vmlinux 0x7d88bc36 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x7da482d5 bio_endio +EXPORT_SYMBOL vmlinux 0x7db6a220 do_sync_write +EXPORT_SYMBOL vmlinux 0x7dccc294 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x7dd6f351 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x7de44a24 kernel_bind +EXPORT_SYMBOL vmlinux 0x7deff673 dm_consume_args +EXPORT_SYMBOL vmlinux 0x7e07acb8 misc_deregister +EXPORT_SYMBOL vmlinux 0x7e123918 dev_get_flags +EXPORT_SYMBOL vmlinux 0x7e2fdf97 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x7e394c4e sysctl_local_reserved_ports +EXPORT_SYMBOL vmlinux 0x7e6dc2c9 scsi_get_command +EXPORT_SYMBOL vmlinux 0x7e71a3a5 of_find_i2c_adapter_by_node +EXPORT_SYMBOL vmlinux 0x7e74cb0f dqget +EXPORT_SYMBOL vmlinux 0x7e824e41 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x7e87407e devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x7e98d318 vexpress_config_read +EXPORT_SYMBOL vmlinux 0x7e9dd6ad snd_jack_set_parent +EXPORT_SYMBOL vmlinux 0x7e9efe8e complete_and_exit +EXPORT_SYMBOL vmlinux 0x7ee73c0c memcg_socket_limit_enabled +EXPORT_SYMBOL vmlinux 0x7ef2f6b9 block_write_full_page +EXPORT_SYMBOL vmlinux 0x7f054ab2 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f33a63b omap_get_dma_chain_dst_pos +EXPORT_SYMBOL vmlinux 0x7f3a8b4b tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x7f46b729 scsi_scan_host +EXPORT_SYMBOL vmlinux 0x7f63b31e _memcpy_toio +EXPORT_SYMBOL vmlinux 0x7f8bdb65 dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x7fa64cca omap_dss_pal_timings +EXPORT_SYMBOL vmlinux 0x7fb6876b sock_wfree +EXPORT_SYMBOL vmlinux 0x7fc30403 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x7fe32873 rb_replace_node +EXPORT_SYMBOL vmlinux 0x7fe5cbc0 abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x800e4ffa __muldi3 +EXPORT_SYMBOL vmlinux 0x801992ed kernel_read +EXPORT_SYMBOL vmlinux 0x803a1fb1 proc_symlink +EXPORT_SYMBOL vmlinux 0x80a6ccce seq_open +EXPORT_SYMBOL vmlinux 0x80a7defc skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x80ca5026 _bin2bcd +EXPORT_SYMBOL vmlinux 0x80d1b265 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x80d81308 omap_vrfb_release_ctx +EXPORT_SYMBOL vmlinux 0x80ec09db __serio_register_driver +EXPORT_SYMBOL vmlinux 0x80fb7a74 tty_port_destroy +EXPORT_SYMBOL vmlinux 0x81003ee2 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x8129c427 security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0x8148583a bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x814e7730 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x816194fc skb_pull +EXPORT_SYMBOL vmlinux 0x817a5b67 do_map_probe +EXPORT_SYMBOL vmlinux 0x8181042e rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x818e92c4 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x81b69e41 snd_ctl_enum_info +EXPORT_SYMBOL vmlinux 0x81c16e1c registered_fb +EXPORT_SYMBOL vmlinux 0x81d10f5f trace_seq_putc +EXPORT_SYMBOL vmlinux 0x81db6ebb xz_dec_reset +EXPORT_SYMBOL vmlinux 0x81dd7707 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x81ded5d5 alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x81ea7872 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x82066141 jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x82072614 tasklet_kill +EXPORT_SYMBOL vmlinux 0x82092565 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x8234feff bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x824a4367 tmio_core_mmc_pwr +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8260686f bitmap_find_next_zero_area +EXPORT_SYMBOL vmlinux 0x8261e883 mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x82710844 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x827b7917 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x83160cd7 skb_trim +EXPORT_SYMBOL vmlinux 0x8320bea8 __umodsi3 +EXPORT_SYMBOL vmlinux 0x83211609 up_write +EXPORT_SYMBOL vmlinux 0x83233850 eth_header +EXPORT_SYMBOL vmlinux 0x832c243f lro_receive_frags +EXPORT_SYMBOL vmlinux 0x835230c5 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x83552ff8 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL vmlinux 0x8371daff sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x838e7d8f jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x838f70b0 twl_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83bbaad8 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x83c8a355 param_set_int +EXPORT_SYMBOL vmlinux 0x83e36bbd sk_run_filter +EXPORT_SYMBOL vmlinux 0x83e9e31e dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x83ed5dd1 noop_llseek +EXPORT_SYMBOL vmlinux 0x84060081 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x8409790a i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x8410d1b3 tty_set_operations +EXPORT_SYMBOL vmlinux 0x8413cde5 nand_scan_bbt +EXPORT_SYMBOL vmlinux 0x84145e10 writeback_in_progress +EXPORT_SYMBOL vmlinux 0x84253319 generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x846bcc01 dm_table_get +EXPORT_SYMBOL vmlinux 0x847e76f3 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x84b183ae strncmp +EXPORT_SYMBOL vmlinux 0x84cb9871 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x84e66565 aio_put_req +EXPORT_SYMBOL vmlinux 0x85061b76 _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x8554239f blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x856dcbd2 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x85765fee omap_enable_dma_irq +EXPORT_SYMBOL vmlinux 0x8599a45d qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0x85a9712a con_copy_unimap +EXPORT_SYMBOL vmlinux 0x85acca25 wireless_send_event +EXPORT_SYMBOL vmlinux 0x85b31985 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x85b5e625 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x85b73301 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x8605c9cb unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x8627e48d unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x86287717 ip_options_compile +EXPORT_SYMBOL vmlinux 0x865029ac __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x865af2d9 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x86850dac security_path_chmod +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x869a820f blk_end_request_all +EXPORT_SYMBOL vmlinux 0x86a4889a kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x86af5833 __serio_register_port +EXPORT_SYMBOL vmlinux 0x86cd7337 register_cdrom +EXPORT_SYMBOL vmlinux 0x86e2a980 files_lglock +EXPORT_SYMBOL vmlinux 0x86f0bade xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x86f0f55a scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x86f7df7e sound_class +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x8709387e blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x870bf928 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x872c2d4a filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x872ffb75 nf_log_register +EXPORT_SYMBOL vmlinux 0x87472bc0 inode_init_owner +EXPORT_SYMBOL vmlinux 0x874d786c blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x877be4f9 dev_get_by_flags_rcu +EXPORT_SYMBOL vmlinux 0x8786618d iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87966b9b omapdss_get_version +EXPORT_SYMBOL vmlinux 0x8798e453 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x879a284e kernel_sendpage +EXPORT_SYMBOL vmlinux 0x87bb00e7 dquot_operations +EXPORT_SYMBOL vmlinux 0x87bf4453 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x88222073 skb_find_text +EXPORT_SYMBOL vmlinux 0x882676b2 mnt_pin +EXPORT_SYMBOL vmlinux 0x882b69a6 consume_skb +EXPORT_SYMBOL vmlinux 0x8834396c mod_timer +EXPORT_SYMBOL vmlinux 0x885fb09c snd_timer_pause +EXPORT_SYMBOL vmlinux 0x8866e204 datagram_poll +EXPORT_SYMBOL vmlinux 0x88768d9d generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x88bdeed2 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x88ce6dbd filp_open +EXPORT_SYMBOL vmlinux 0x8905a5aa vexpress_config_bridge_register +EXPORT_SYMBOL vmlinux 0x89073aa2 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL vmlinux 0x8953f8ff __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x89681208 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x8979c060 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x897cb18f set_disk_ro +EXPORT_SYMBOL vmlinux 0x89885a5a tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x89a3c4f4 omap_get_dma_chain_index +EXPORT_SYMBOL vmlinux 0x89d145ed pin_config_get +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89ddda9d ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0x8a09d51f omapdss_dpi_set_timings +EXPORT_SYMBOL vmlinux 0x8a1ab4ee timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8a490c90 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x8a4fa83b __aeabi_llsr +EXPORT_SYMBOL vmlinux 0x8a60e1ca framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x8a731f8f gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a84ad42 default_llseek +EXPORT_SYMBOL vmlinux 0x8a90f2ed scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8ace8ca3 groups_alloc +EXPORT_SYMBOL vmlinux 0x8ad6dc9e do_SAK +EXPORT_SYMBOL vmlinux 0x8adcfaa7 ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x8ae45987 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x8af154e5 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x8b2801ed ip6_frag_match +EXPORT_SYMBOL vmlinux 0x8b45e768 ppp_input_error +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b7b9041 __vexpress_config_func_get +EXPORT_SYMBOL vmlinux 0x8b830c0a arp_invalidate +EXPORT_SYMBOL vmlinux 0x8b8a4077 netpoll_print_options +EXPORT_SYMBOL vmlinux 0x8b8dd5b1 padata_do_serial +EXPORT_SYMBOL vmlinux 0x8b91804e udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x8b9579ec sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x8ba6e1ab __invalidate_device +EXPORT_SYMBOL vmlinux 0x8bbbd212 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x8bbeb393 mii_check_gmii_support +EXPORT_SYMBOL vmlinux 0x8bd0a3fd _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x8bf3ecfc neigh_update +EXPORT_SYMBOL vmlinux 0x8bfe8c57 param_set_uint +EXPORT_SYMBOL vmlinux 0x8c4161bc replace_mount_options +EXPORT_SYMBOL vmlinux 0x8c4d6523 omap_dma_chain_a_transfer +EXPORT_SYMBOL vmlinux 0x8c5dc349 request_key +EXPORT_SYMBOL vmlinux 0x8c5f320b elevator_exit +EXPORT_SYMBOL vmlinux 0x8c637d43 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x8c8f806a sock_create +EXPORT_SYMBOL vmlinux 0x8c9db107 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x8cb17c7b disk_stack_limits +EXPORT_SYMBOL vmlinux 0x8cb58fcb scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x8cba19d3 fsnotify_destroy_mark +EXPORT_SYMBOL vmlinux 0x8cd8c339 omap_free_dma +EXPORT_SYMBOL vmlinux 0x8cda8029 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x8d02a306 sock_init_data +EXPORT_SYMBOL vmlinux 0x8d04cd4e security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x8d0580cd posix_test_lock +EXPORT_SYMBOL vmlinux 0x8d075254 snd_card_unref +EXPORT_SYMBOL vmlinux 0x8d0b20a3 md_error +EXPORT_SYMBOL vmlinux 0x8d255425 unregister_console +EXPORT_SYMBOL vmlinux 0x8d348d4c mii_nway_restart +EXPORT_SYMBOL vmlinux 0x8d48181c sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x8d4b83ac backlight_force_update +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d65cb92 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0x8d6ad63b panic_notifier_list +EXPORT_SYMBOL vmlinux 0x8d6c9bb4 dquot_drop +EXPORT_SYMBOL vmlinux 0x8d6f81b4 __div64_32 +EXPORT_SYMBOL vmlinux 0x8d78af0a pm860x_page_set_bits +EXPORT_SYMBOL vmlinux 0x8d8b6353 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x8d920309 security_mmap_file +EXPORT_SYMBOL vmlinux 0x8d98a8c8 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x8da224bb seq_puts +EXPORT_SYMBOL vmlinux 0x8dbfd699 register_filesystem +EXPORT_SYMBOL vmlinux 0x8dc856af dm_register_target +EXPORT_SYMBOL vmlinux 0x8dd7bc84 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x8e0d66f4 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x8e112b57 file_update_time +EXPORT_SYMBOL vmlinux 0x8e17031f wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x8e27ec61 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x8e28cd42 in_egroup_p +EXPORT_SYMBOL vmlinux 0x8e2ba039 d_path +EXPORT_SYMBOL vmlinux 0x8e4b87eb __neigh_create +EXPORT_SYMBOL vmlinux 0x8e54ce73 simple_unlink +EXPORT_SYMBOL vmlinux 0x8e77d5ea tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x8ea3df24 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x8eb7f2e1 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0x8eb92fb5 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x8ee3ce6f __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x8ee5f17d d_splice_alias +EXPORT_SYMBOL vmlinux 0x8f13abcd devfreq_add_device +EXPORT_SYMBOL vmlinux 0x8f212c68 thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x8f2217b9 follow_up +EXPORT_SYMBOL vmlinux 0x8f4a7c3c mmc_cache_ctrl +EXPORT_SYMBOL vmlinux 0x8f595b11 snd_major +EXPORT_SYMBOL vmlinux 0x8f672b09 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x8f678b07 __stack_chk_guard +EXPORT_SYMBOL vmlinux 0x8f7014a1 param_set_ulong +EXPORT_SYMBOL vmlinux 0x8fa4130a omap_set_dma_callback +EXPORT_SYMBOL vmlinux 0x8faa4598 of_translate_address +EXPORT_SYMBOL vmlinux 0x8fc3d3b6 __ps2_command +EXPORT_SYMBOL vmlinux 0x8fc8ff7b account_page_dirtied +EXPORT_SYMBOL vmlinux 0x8fc96b20 snd_ctl_free_one +EXPORT_SYMBOL vmlinux 0x8fcb876e mdiobus_scan +EXPORT_SYMBOL vmlinux 0x8fdaec19 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x902996f1 of_dev_put +EXPORT_SYMBOL vmlinux 0x90337654 xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x90392d18 neigh_lookup +EXPORT_SYMBOL vmlinux 0x904b099d snd_dma_reserve_buf +EXPORT_SYMBOL vmlinux 0x90509be6 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x9053d505 take_over_console +EXPORT_SYMBOL vmlinux 0x905a55cf shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x906a0caa page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0x906b575e __lock_buffer +EXPORT_SYMBOL vmlinux 0x907b1671 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x909788af __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0x90ac3102 dev_base_lock +EXPORT_SYMBOL vmlinux 0x90b68754 tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x90c5e819 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x90d44245 skb_pad +EXPORT_SYMBOL vmlinux 0x90ee5051 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x90f06403 generic_writepages +EXPORT_SYMBOL vmlinux 0x9112a5fc snd_info_register +EXPORT_SYMBOL vmlinux 0x911475b7 journal_errno +EXPORT_SYMBOL vmlinux 0x913607c7 skb_unlink +EXPORT_SYMBOL vmlinux 0x91463b1d kstrtos16 +EXPORT_SYMBOL vmlinux 0x91621d6a allocate_resource +EXPORT_SYMBOL vmlinux 0x91715312 sprintf +EXPORT_SYMBOL vmlinux 0x9172d803 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x9185f8e1 seq_release +EXPORT_SYMBOL vmlinux 0x919029aa __readwrite_bug +EXPORT_SYMBOL vmlinux 0x91aec064 down_read_trylock +EXPORT_SYMBOL vmlinux 0x91c0980e icst_hz +EXPORT_SYMBOL vmlinux 0x91f48c20 phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x91f510df grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0x920eb90c interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x921d1861 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x9235df00 softnet_data +EXPORT_SYMBOL vmlinux 0x9239fa7c ida_destroy +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x9242b05b kern_path_create +EXPORT_SYMBOL vmlinux 0x924f537e tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x9268417c __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0x92a993ca dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x92a9c60c time_to_tm +EXPORT_SYMBOL vmlinux 0x92b53536 elevator_init +EXPORT_SYMBOL vmlinux 0x92b73467 led_blink_set +EXPORT_SYMBOL vmlinux 0x92e324a6 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x92e7a584 input_close_device +EXPORT_SYMBOL vmlinux 0x92ec5d1b dispc_mgr_enable +EXPORT_SYMBOL vmlinux 0x92f784dc schedule_work_on +EXPORT_SYMBOL vmlinux 0x93012e62 iget_failed +EXPORT_SYMBOL vmlinux 0x93043f04 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x931817e4 unlock_buffer +EXPORT_SYMBOL vmlinux 0x93215e1d __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x935aac91 skb_queue_head +EXPORT_SYMBOL vmlinux 0x935f86d8 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x93658895 __register_binfmt +EXPORT_SYMBOL vmlinux 0x9386414a generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x93963a85 dss_feat_get_num_mgrs +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93abbdee sync_inodes_sb +EXPORT_SYMBOL vmlinux 0x93c0d74f tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x93efa226 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x94098ff8 snd_interval_list +EXPORT_SYMBOL vmlinux 0x9417d022 idr_find +EXPORT_SYMBOL vmlinux 0x943bd78c tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x943d28f3 simple_transaction_set +EXPORT_SYMBOL vmlinux 0x9443d8d5 input_free_device +EXPORT_SYMBOL vmlinux 0x944a2839 key_unlink +EXPORT_SYMBOL vmlinux 0x946970df register_framebuffer +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a6c0dd page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x94bcd130 __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x94d3da68 rtc_lock +EXPORT_SYMBOL vmlinux 0x94e8e4f6 of_find_node_by_name +EXPORT_SYMBOL vmlinux 0x94fddc70 simple_setattr +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x9545af6d tasklet_init +EXPORT_SYMBOL vmlinux 0x95622f41 down_timeout +EXPORT_SYMBOL vmlinux 0x95625a51 bio_integrity_free +EXPORT_SYMBOL vmlinux 0x9569d35d dump_write +EXPORT_SYMBOL vmlinux 0x95a5e07f pskb_expand_head +EXPORT_SYMBOL vmlinux 0x95bca5c8 blk_fetch_request +EXPORT_SYMBOL vmlinux 0x95c47471 is_bad_inode +EXPORT_SYMBOL vmlinux 0x95c9e812 inet6_protos +EXPORT_SYMBOL vmlinux 0x95d75c55 dquot_destroy +EXPORT_SYMBOL vmlinux 0x95dbe078 __get_user_2 +EXPORT_SYMBOL vmlinux 0x95e6e500 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x9608761f input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0x964bf3fb blk_queue_io_min +EXPORT_SYMBOL vmlinux 0x964c5bb7 kill_pgrp +EXPORT_SYMBOL vmlinux 0x96573b80 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x96748e03 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x96b39b6e omap_start_dma_chain_transfers +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96d41973 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x96e14be9 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x96f6ae73 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x97255bdf strlen +EXPORT_SYMBOL vmlinux 0x97278fa1 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL vmlinux 0x9743243d scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x9745d8d7 sock_no_listen +EXPORT_SYMBOL vmlinux 0x97542918 dst_release +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x97687302 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x976e2104 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0x976e700f down_trylock +EXPORT_SYMBOL vmlinux 0x97738d51 sk_wait_data +EXPORT_SYMBOL vmlinux 0x97828bc1 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x9793c93a dispc_mgr_setup +EXPORT_SYMBOL vmlinux 0x97999817 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x979f9feb xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x97ace45f ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x97b4500c __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x97b666c7 call_usermodehelper_fns +EXPORT_SYMBOL vmlinux 0x97c0ce31 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x97ce8743 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x97e09161 tty_lock_pair +EXPORT_SYMBOL vmlinux 0x97f04139 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x97fc80c5 save_mount_options +EXPORT_SYMBOL vmlinux 0x98082893 __copy_to_user +EXPORT_SYMBOL vmlinux 0x981c2219 find_or_create_page +EXPORT_SYMBOL vmlinux 0x9820b644 warn_slowpath_fmt_taint +EXPORT_SYMBOL vmlinux 0x984b1eeb inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x984d1878 snd_card_set_id +EXPORT_SYMBOL vmlinux 0x984e764d bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x986f445d netif_rx +EXPORT_SYMBOL vmlinux 0x98725f0a skb_dst_set_noref +EXPORT_SYMBOL vmlinux 0x98864d3d __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x988f09b3 inet_shutdown +EXPORT_SYMBOL vmlinux 0x989e8b53 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0x98a23fb5 journal_ack_err +EXPORT_SYMBOL vmlinux 0x98b29244 mtd_concat_destroy +EXPORT_SYMBOL vmlinux 0x98d883d6 snd_jack_new +EXPORT_SYMBOL vmlinux 0x98ee7bfe blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x98fa21b0 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x99187aa3 eth_type_trans +EXPORT_SYMBOL vmlinux 0x9933a0c6 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x993aefbe xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x99517682 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x99591a7a ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x995c0224 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x996537e7 snd_timer_resolution +EXPORT_SYMBOL vmlinux 0x996c4d30 proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x9987bb36 kill_anon_super +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999aa90e devm_usb_get_phy +EXPORT_SYMBOL vmlinux 0x999c3148 __raw_readsb +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99ba44bd blk_start_request +EXPORT_SYMBOL vmlinux 0x99bb8806 memmove +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99d5f525 posix_lock_file +EXPORT_SYMBOL vmlinux 0x99d76885 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x99e21ae9 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0x99f58330 lg_local_lock_cpu +EXPORT_SYMBOL vmlinux 0x9a100e55 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x9a1b5c8b padata_set_cpumasks +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a1fc4b4 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x9a4094e8 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x9a6eb1e8 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x9a7b59fa kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x9a8318ef v7_coherent_kern_range +EXPORT_SYMBOL vmlinux 0x9aef55bc scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x9af762fe blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x9b08282e filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x9b11494e scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b7a7768 make_bad_inode +EXPORT_SYMBOL vmlinux 0x9b898e42 __module_get +EXPORT_SYMBOL vmlinux 0x9b9868d9 d_alloc +EXPORT_SYMBOL vmlinux 0x9b9e05f9 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x9b9e39b7 ps2_end_command +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bac9166 __block_write_begin +EXPORT_SYMBOL vmlinux 0x9bb53caf invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0x9bce482f __release_region +EXPORT_SYMBOL vmlinux 0x9be7bde4 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x9c0bd51f _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x9c141d57 writeback_inodes_sb_nr_if_idle +EXPORT_SYMBOL vmlinux 0x9c15aeea dev_mc_init +EXPORT_SYMBOL vmlinux 0x9c3737fc __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x9c4b7418 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0x9c632473 dma_mmap_from_coherent +EXPORT_SYMBOL vmlinux 0x9c7077bd enable_hlt +EXPORT_SYMBOL vmlinux 0x9c820a33 inet_add_offload +EXPORT_SYMBOL vmlinux 0x9c9ec2a0 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0x9cab34a6 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9cd60539 sg_free_table +EXPORT_SYMBOL vmlinux 0x9cdb19fa mmc_register_driver +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9ceec5ec input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d0673fd snd_ctl_find_numid +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d534ae3 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x9d555779 snd_pcm_mmap_data +EXPORT_SYMBOL vmlinux 0x9d669763 memcpy +EXPORT_SYMBOL vmlinux 0x9d7012a5 module_refcount +EXPORT_SYMBOL vmlinux 0x9d79570a tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x9d7b1006 read_dev_sector +EXPORT_SYMBOL vmlinux 0x9d845102 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x9da01691 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x9da4b41a netdev_features_change +EXPORT_SYMBOL vmlinux 0x9db0238c __kfree_skb +EXPORT_SYMBOL vmlinux 0x9dd90734 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x9e0c711d vzalloc_node +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e2409d8 neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x9e25435c phy_connect +EXPORT_SYMBOL vmlinux 0x9e30efbc unregister_exec_domain +EXPORT_SYMBOL vmlinux 0x9e37c1e9 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x9e4eaaf2 user_path_at +EXPORT_SYMBOL vmlinux 0x9e4faeef dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x9e607910 audit_log +EXPORT_SYMBOL vmlinux 0x9e61bb05 set_freezable +EXPORT_SYMBOL vmlinux 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL vmlinux 0x9e7a179c ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x9e8955b6 tcp_seq_open +EXPORT_SYMBOL vmlinux 0x9e980bdf phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9eba5e8c blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x9ec53b5e d_add_ci +EXPORT_SYMBOL vmlinux 0x9ecbd0e2 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x9ecbda52 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x9ecc6a7a interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9ede2d71 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x9ede93f4 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x9ee5acd4 free_netdev +EXPORT_SYMBOL vmlinux 0x9eeef436 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x9f09f5d1 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x9f0fc394 kfree_skb +EXPORT_SYMBOL vmlinux 0x9f12ce8d blkdev_get +EXPORT_SYMBOL vmlinux 0x9f1cc171 eth_header_cache +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f46ced8 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x9f491e5d ftrace_print_symbols_seq_u64 +EXPORT_SYMBOL vmlinux 0x9f496eea dev_disable_lro +EXPORT_SYMBOL vmlinux 0x9f4c293a inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x9f66a311 udp_poll +EXPORT_SYMBOL vmlinux 0x9f823cea dispc_mgr_is_enabled +EXPORT_SYMBOL vmlinux 0x9f905c9a snd_pcm_hw_param_first +EXPORT_SYMBOL vmlinux 0x9f95e75c mdio_bus_type +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fc7f7ce jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x9fd177d0 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x9fd85797 __napi_schedule +EXPORT_SYMBOL vmlinux 0x9fdecc31 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x9fe76c13 __sb_start_write +EXPORT_SYMBOL vmlinux 0x9ff62dd2 __dev_remove_offload +EXPORT_SYMBOL vmlinux 0x9ffa3a75 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0x9ffc7545 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xa01318f8 sys_copyarea +EXPORT_SYMBOL vmlinux 0xa03a34a0 tcp_release_cb +EXPORT_SYMBOL vmlinux 0xa03ed1ee pneigh_enqueue +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa06df9e1 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0xa07ed110 xz_dec_init +EXPORT_SYMBOL vmlinux 0xa0aae687 imx_ssi_fiq_end +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b6db5c kernel_listen +EXPORT_SYMBOL vmlinux 0xa0c7fc01 del_gendisk +EXPORT_SYMBOL vmlinux 0xa0cb11f7 jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d5d426 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0xa0f76a47 ps2_drain +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa10d4262 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xa11d0681 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa12643cf i2c_release_client +EXPORT_SYMBOL vmlinux 0xa132a8fc netdev_printk +EXPORT_SYMBOL vmlinux 0xa13b3445 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xa1415618 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0xa1479ca1 page_put_link +EXPORT_SYMBOL vmlinux 0xa14f3d8c ewma_add +EXPORT_SYMBOL vmlinux 0xa15dc9e8 genphy_suspend +EXPORT_SYMBOL vmlinux 0xa19ffe41 snd_timer_interrupt +EXPORT_SYMBOL vmlinux 0xa1a7ad21 register_gifconf +EXPORT_SYMBOL vmlinux 0xa1aaf37e xfrm4_rcv +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c5a3b3 cleancache_enabled +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1d55e90 _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0xa1f0ebea bit_waitqueue +EXPORT_SYMBOL vmlinux 0xa1f4ebcd dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0xa1f7722b snd_jack_set_key +EXPORT_SYMBOL vmlinux 0xa1fb90a6 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xa20584af of_match_device +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa21ee2a1 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xa235a0f8 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0xa24581cf xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0xa250c838 param_get_charp +EXPORT_SYMBOL vmlinux 0xa25f4e21 zero_fill_bio +EXPORT_SYMBOL vmlinux 0xa278324e udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xa2848c50 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0xa2892512 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xa28f17db netdev_notify_peers +EXPORT_SYMBOL vmlinux 0xa2a5879a input_flush_device +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2d10a20 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xa2ef34d7 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0xa3259688 simple_statfs +EXPORT_SYMBOL vmlinux 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL vmlinux 0xa33f29b7 nf_getsockopt +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa35444e4 dispc_write_irqenable +EXPORT_SYMBOL vmlinux 0xa358538a snd_pcm_suspend +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3811707 kmem_cache_create +EXPORT_SYMBOL vmlinux 0xa381944f dql_reset +EXPORT_SYMBOL vmlinux 0xa3c254e7 nf_reinject +EXPORT_SYMBOL vmlinux 0xa3cffef3 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xa3d46906 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0xa3e7a261 __sk_dst_check +EXPORT_SYMBOL vmlinux 0xa3efc743 vfs_mknod +EXPORT_SYMBOL vmlinux 0xa3f01361 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0xa3f35bf5 rwsem_is_locked +EXPORT_SYMBOL vmlinux 0xa3f799bf bio_integrity_split +EXPORT_SYMBOL vmlinux 0xa41178a8 idr_pre_get +EXPORT_SYMBOL vmlinux 0xa414882d add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0xa41d7c76 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xa429b3a0 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0xa43b1297 vscnprintf +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa45432fb blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0xa4610bc6 omap_rev +EXPORT_SYMBOL vmlinux 0xa46e44f6 setup_new_exec +EXPORT_SYMBOL vmlinux 0xa4701e9e timekeeping_inject_offset +EXPORT_SYMBOL vmlinux 0xa48f5b09 omap_dma_set_global_params +EXPORT_SYMBOL vmlinux 0xa4ab20f7 journal_force_commit +EXPORT_SYMBOL vmlinux 0xa4b42c55 omap_set_dma_priority +EXPORT_SYMBOL vmlinux 0xa4c0cbef tty_lock +EXPORT_SYMBOL vmlinux 0xa50e7c4e mmc_stop_bkops +EXPORT_SYMBOL vmlinux 0xa5180a5e dcache_dir_close +EXPORT_SYMBOL vmlinux 0xa52e20fa user_revoke +EXPORT_SYMBOL vmlinux 0xa53959e6 journal_extend +EXPORT_SYMBOL vmlinux 0xa5526619 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa577a850 param_get_short +EXPORT_SYMBOL vmlinux 0xa57b989c tcp_sendmsg +EXPORT_SYMBOL vmlinux 0xa58dde42 devm_usb_put_phy +EXPORT_SYMBOL vmlinux 0xa58fea9d mempool_destroy +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5a71ba0 tcf_em_register +EXPORT_SYMBOL vmlinux 0xa5c3519d key_payload_reserve +EXPORT_SYMBOL vmlinux 0xa5c5a39e __register_chrdev +EXPORT_SYMBOL vmlinux 0xa5cdb057 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xa5cef8ad release_resource +EXPORT_SYMBOL vmlinux 0xa5d4e7ec inet6_getname +EXPORT_SYMBOL vmlinux 0xa5dd45f3 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0xa5f5cae3 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0xa5fdda94 icmp_send +EXPORT_SYMBOL vmlinux 0xa60697ed inet_addr_type +EXPORT_SYMBOL vmlinux 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL vmlinux 0xa61e4362 omap_request_dma +EXPORT_SYMBOL vmlinux 0xa63c3a8c eth_rebuild_header +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL vmlinux 0xa66b76ab jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0xa66c6a17 __scsi_put_command +EXPORT_SYMBOL vmlinux 0xa6715115 do_settimeofday +EXPORT_SYMBOL vmlinux 0xa675804c utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0xa67d7307 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0xa6813318 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa693c281 netpoll_setup +EXPORT_SYMBOL vmlinux 0xa6970398 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0xa69e36c3 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0xa6bab23d dqstats +EXPORT_SYMBOL vmlinux 0xa6c7eddc xfrm_init_state +EXPORT_SYMBOL vmlinux 0xa734a3e9 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0xa735db59 prandom_u32 +EXPORT_SYMBOL vmlinux 0xa74f87f6 seq_bitmap +EXPORT_SYMBOL vmlinux 0xa750d034 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0xa75ae7bf __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0xa75f92c9 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0xa77fbb5c pipe_unlock +EXPORT_SYMBOL vmlinux 0xa7d5249a get_tz_trend +EXPORT_SYMBOL vmlinux 0xa8057484 scsi_register_interface +EXPORT_SYMBOL vmlinux 0xa807e33e __ip_dev_find +EXPORT_SYMBOL vmlinux 0xa808bcb8 vexpress_config_wait +EXPORT_SYMBOL vmlinux 0xa8106126 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0xa81e1af7 of_phy_connect_fixed_link +EXPORT_SYMBOL vmlinux 0xa8232c78 strtobool +EXPORT_SYMBOL vmlinux 0xa843805a get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0xa8721b97 system_state +EXPORT_SYMBOL vmlinux 0xa882e794 filemap_fault +EXPORT_SYMBOL vmlinux 0xa890df17 snd_ctl_add +EXPORT_SYMBOL vmlinux 0xa89920d2 find_inode_number +EXPORT_SYMBOL vmlinux 0xa8a612b2 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0xa8b5177c tty_port_init +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa9041860 of_dev_get +EXPORT_SYMBOL vmlinux 0xa908953a md_register_thread +EXPORT_SYMBOL vmlinux 0xa9147a5c seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0xa94014d9 no_llseek +EXPORT_SYMBOL vmlinux 0xa9537312 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0xa964dd13 gpmc_cs_request +EXPORT_SYMBOL vmlinux 0xa98f22f4 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xa9973faf tty_register_device +EXPORT_SYMBOL vmlinux 0xa997bfc2 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0xa9a0a7d8 seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xa9a0b96c proto_register +EXPORT_SYMBOL vmlinux 0xa9a730c7 names_cachep +EXPORT_SYMBOL vmlinux 0xa9b9c99e ip_mc_rejoin_groups +EXPORT_SYMBOL vmlinux 0xa9d6f2c6 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL vmlinux 0xa9da12dd __devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0xa9effda5 __first_cpu +EXPORT_SYMBOL vmlinux 0xa9fb3658 dev_alloc_name +EXPORT_SYMBOL vmlinux 0xaa0d39b0 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xaa5622c9 block_write_begin +EXPORT_SYMBOL vmlinux 0xaa5927f9 scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0xaa5b6152 kill_block_super +EXPORT_SYMBOL vmlinux 0xaa6901ac __kfifo_out_r +EXPORT_SYMBOL vmlinux 0xaa6f23ad rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0xaa9ff38d cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0xaabef4a5 simple_release_fs +EXPORT_SYMBOL vmlinux 0xaad6d92f rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0xaae4e108 new_inode +EXPORT_SYMBOL vmlinux 0xaaf1bde3 in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab1d6cc1 param_get_long +EXPORT_SYMBOL vmlinux 0xab340665 pipe_to_file +EXPORT_SYMBOL vmlinux 0xab3ed4f9 nand_scan_tail +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab61a64f __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xab6430af dss_install_mgr_ops +EXPORT_SYMBOL vmlinux 0xab6765bc input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0xab694444 bsearch +EXPORT_SYMBOL vmlinux 0xab6bde28 sysctl_max_syn_backlog +EXPORT_SYMBOL vmlinux 0xab75f646 dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0xab7603e7 imx_ssi_fiq_start +EXPORT_SYMBOL vmlinux 0xabaa71a3 journal_update_format +EXPORT_SYMBOL vmlinux 0xabcaa577 free_anon_bdev +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabd8a560 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0xabef2ab3 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xac0ab74f __f_setown +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac0fe99b i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xac4f3477 __scm_destroy +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac756562 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xac8f37b2 outer_cache +EXPORT_SYMBOL vmlinux 0xaca9f6fb bio_clone_bioset +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacd0a79a of_gpio_named_count +EXPORT_SYMBOL vmlinux 0xacde6340 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0xacecebae cad_pid +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacf751ea bdgrab +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad1e8747 cfb_copyarea +EXPORT_SYMBOL vmlinux 0xad21263b blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xad25eebf ll_rw_block +EXPORT_SYMBOL vmlinux 0xad2f33a2 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0xad4ceb12 snd_dma_alloc_pages +EXPORT_SYMBOL vmlinux 0xad84bef8 dm_table_event +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadb2504e neigh_direct_output +EXPORT_SYMBOL vmlinux 0xadb5559d param_ops_byte +EXPORT_SYMBOL vmlinux 0xadb63137 locks_remove_posix +EXPORT_SYMBOL vmlinux 0xadc79a82 read_cache_pages +EXPORT_SYMBOL vmlinux 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL vmlinux 0xadee3558 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xadf42bd5 __request_region +EXPORT_SYMBOL vmlinux 0xae42881e pipe_lock +EXPORT_SYMBOL vmlinux 0xae532cd9 skb_push +EXPORT_SYMBOL vmlinux 0xae5a5a19 set_groups +EXPORT_SYMBOL vmlinux 0xae729e59 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0xae8a9160 iput +EXPORT_SYMBOL vmlinux 0xae9fb911 snd_device_register +EXPORT_SYMBOL vmlinux 0xaeb703c6 km_new_mapping +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaee2765c qdisc_reset +EXPORT_SYMBOL vmlinux 0xaeefbeed kset_unregister +EXPORT_SYMBOL vmlinux 0xaf3dd74b elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf50e76d elf_set_personality +EXPORT_SYMBOL vmlinux 0xaf5f7994 remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0xaf8124bf napi_gro_frags +EXPORT_SYMBOL vmlinux 0xaf851a5f put_io_context +EXPORT_SYMBOL vmlinux 0xaf8aa518 system_rev +EXPORT_SYMBOL vmlinux 0xaf91d89f __kernel_param_lock +EXPORT_SYMBOL vmlinux 0xafc2bd75 skb_tx_error +EXPORT_SYMBOL vmlinux 0xafe60d01 register_quota_format +EXPORT_SYMBOL vmlinux 0xb02c25ee i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xb04053ba vmap +EXPORT_SYMBOL vmlinux 0xb04bd87d journal_get_create_access +EXPORT_SYMBOL vmlinux 0xb04cf0fe lg_local_unlock +EXPORT_SYMBOL vmlinux 0xb05fc310 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0xb09c80c6 dentry_unhash +EXPORT_SYMBOL vmlinux 0xb0a0da0c rational_best_approximation +EXPORT_SYMBOL vmlinux 0xb0a49cb6 vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xb0b3823e sock_update_classid +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0e6bdb9 blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0xb0e84bd5 phy_stop +EXPORT_SYMBOL vmlinux 0xb0f8fb64 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0xb0ffda2f blk_limits_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb129243f jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0xb1492c7b snd_pcm_release_substream +EXPORT_SYMBOL vmlinux 0xb14c4f6b sk_dst_check +EXPORT_SYMBOL vmlinux 0xb177d14e inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0xb1951930 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb19d7e97 omap_dss_get_overlay_manager +EXPORT_SYMBOL vmlinux 0xb1ad28e0 __gnu_mcount_nc +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cf44df fb_find_best_mode +EXPORT_SYMBOL vmlinux 0xb1d62106 snd_pcm_set_sync +EXPORT_SYMBOL vmlinux 0xb1d9aabd lg_local_unlock_cpu +EXPORT_SYMBOL vmlinux 0xb1ed7baa security_path_rmdir +EXPORT_SYMBOL vmlinux 0xb20af3f1 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xb21e0145 __pskb_copy +EXPORT_SYMBOL vmlinux 0xb236438d dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0xb2416e70 netdev_state_change +EXPORT_SYMBOL vmlinux 0xb255ab71 kill_litter_super +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb27befe1 ppp_channel_index +EXPORT_SYMBOL vmlinux 0xb2902156 ip6_route_output +EXPORT_SYMBOL vmlinux 0xb2995378 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xb2a3f7b9 abx500_register_ops +EXPORT_SYMBOL vmlinux 0xb2a896bc __getblk +EXPORT_SYMBOL vmlinux 0xb2af8c62 mount_single +EXPORT_SYMBOL vmlinux 0xb2b94674 __crc32c_le +EXPORT_SYMBOL vmlinux 0xb2be6e92 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0xb2d307de param_ops_short +EXPORT_SYMBOL vmlinux 0xb2df873b dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL vmlinux 0xb2e94e73 igrab +EXPORT_SYMBOL vmlinux 0xb2ed0268 flush_signals +EXPORT_SYMBOL vmlinux 0xb30d42d5 set_create_files_as +EXPORT_SYMBOL vmlinux 0xb3305d52 send_remote_softirq +EXPORT_SYMBOL vmlinux 0xb34c8390 __get_user_pages +EXPORT_SYMBOL vmlinux 0xb367c984 mxc_set_irq_fiq +EXPORT_SYMBOL vmlinux 0xb36f001b bdi_setup_and_register +EXPORT_SYMBOL vmlinux 0xb3789f5c nand_bch_calculate_ecc +EXPORT_SYMBOL vmlinux 0xb38d7b9c scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xb3c5368e ether_setup +EXPORT_SYMBOL vmlinux 0xb3d8666b try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xb3ed2c01 fasync_helper +EXPORT_SYMBOL vmlinux 0xb3f7646e kthread_should_stop +EXPORT_SYMBOL vmlinux 0xb41e38e8 security_task_getsecid +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb43995e9 mmc_add_host +EXPORT_SYMBOL vmlinux 0xb45d8da5 drop_nlink +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4857967 omapdss_sdi_set_timings +EXPORT_SYMBOL vmlinux 0xb4967869 sk_stop_timer +EXPORT_SYMBOL vmlinux 0xb4a07985 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xb4a2f863 ip_check_defrag +EXPORT_SYMBOL vmlinux 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL vmlinux 0xb4c8f38a omap_dma_chain_status +EXPORT_SYMBOL vmlinux 0xb4cfac61 path_get +EXPORT_SYMBOL vmlinux 0xb4d0a231 elv_register_queue +EXPORT_SYMBOL vmlinux 0xb4d9748a sg_miter_stop +EXPORT_SYMBOL vmlinux 0xb4de48fc filp_close +EXPORT_SYMBOL vmlinux 0xb4e556d3 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0xb50d4656 irq_to_desc +EXPORT_SYMBOL vmlinux 0xb50d6b00 sock_rfree +EXPORT_SYMBOL vmlinux 0xb5329c06 mount_pseudo +EXPORT_SYMBOL vmlinux 0xb537da53 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xb54027f0 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0xb54088a3 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb55273d6 scsi_unregister +EXPORT_SYMBOL vmlinux 0xb5567f1a mmc_hw_reset +EXPORT_SYMBOL vmlinux 0xb5595d37 bio_flush_dcache_pages +EXPORT_SYMBOL vmlinux 0xb57343c2 frontswap_shrink +EXPORT_SYMBOL vmlinux 0xb58705e3 snd_pcm_lib_free_pages +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5aa7165 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xb5ab2684 input_set_capability +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5cd1691 vexpress_config_complete +EXPORT_SYMBOL vmlinux 0xb5d9454c printk_emit +EXPORT_SYMBOL vmlinux 0xb5e57eb8 lro_flush_all +EXPORT_SYMBOL vmlinux 0xb5f029fe locks_copy_lock +EXPORT_SYMBOL vmlinux 0xb62fbd75 kern_unmount +EXPORT_SYMBOL vmlinux 0xb63e19c9 register_qdisc +EXPORT_SYMBOL vmlinux 0xb65274e9 find_vma +EXPORT_SYMBOL vmlinux 0xb65a2a3d blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6822a33 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb6896671 crc_t10dif +EXPORT_SYMBOL vmlinux 0xb689e373 thermal_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xb6936ffe _bcd2bin +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b467cc nla_put +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6e3bffc max8998_read_reg +EXPORT_SYMBOL vmlinux 0xb6ef16b6 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0xb6fc765b vfs_path_lookup +EXPORT_SYMBOL vmlinux 0xb704383d sock_edemux +EXPORT_SYMBOL vmlinux 0xb71a92fe blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0xb71fb74f _raw_read_trylock +EXPORT_SYMBOL vmlinux 0xb75c8b8c __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0xb76a0fef inode_init_once +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7ba76c7 __aeabi_unwind_cpp_pr2 +EXPORT_SYMBOL vmlinux 0xb7d410b3 snd_pcm_lib_readv +EXPORT_SYMBOL vmlinux 0xb7f00584 snd_pcm_notify +EXPORT_SYMBOL vmlinux 0xb80df12b set_page_dirty +EXPORT_SYMBOL vmlinux 0xb81960ca snprintf +EXPORT_SYMBOL vmlinux 0xb825e8f2 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0xb834c54c kernel_recvmsg +EXPORT_SYMBOL vmlinux 0xb835b3e4 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0xb84c946a arp_find +EXPORT_SYMBOL vmlinux 0xb85114da lease_get_mtime +EXPORT_SYMBOL vmlinux 0xb85e7476 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0xb863af9d d_invalidate +EXPORT_SYMBOL vmlinux 0xb8718115 snd_pcm_hw_constraint_list +EXPORT_SYMBOL vmlinux 0xb8aa2342 __check_region +EXPORT_SYMBOL vmlinux 0xb8aca0e8 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0xb8ad02ec blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xb8ad3bf7 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0xb8bb25eb jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0xb8c8907a mmc_gpio_free_cd +EXPORT_SYMBOL vmlinux 0xb8cd1776 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0xb8d9f451 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xb8e877e7 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0xb94fe908 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xb95f98d6 _memset_io +EXPORT_SYMBOL vmlinux 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL vmlinux 0xb96d9fbe mmc_release_host +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9a8f03b omap_stop_dma +EXPORT_SYMBOL vmlinux 0xb9acd3d9 __put_user_2 +EXPORT_SYMBOL vmlinux 0xb9b41dac xfrm_input +EXPORT_SYMBOL vmlinux 0xb9c4d348 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0xb9c8ce2c da9052_i2c_fix +EXPORT_SYMBOL vmlinux 0xb9cbf12b bio_pair_release +EXPORT_SYMBOL vmlinux 0xb9e417ff dquot_scan_active +EXPORT_SYMBOL vmlinux 0xba14e190 setattr_copy +EXPORT_SYMBOL vmlinux 0xba164b34 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0xba1c7a74 tc6393xb_lcd_mode +EXPORT_SYMBOL vmlinux 0xba1f850e km_query +EXPORT_SYMBOL vmlinux 0xba213dc4 con_is_bound +EXPORT_SYMBOL vmlinux 0xba2918ee cap_mmap_file +EXPORT_SYMBOL vmlinux 0xba393b4b fb_class +EXPORT_SYMBOL vmlinux 0xba3f7412 unregister_mtd_chip_driver +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba592e63 snd_pcm_lib_read +EXPORT_SYMBOL vmlinux 0xba59e456 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0xba7d870a __mxc_cpu_type +EXPORT_SYMBOL vmlinux 0xba8760b2 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0xba910acf pwmss_submodule_state_change +EXPORT_SYMBOL vmlinux 0xbaac427c get_mem_type +EXPORT_SYMBOL vmlinux 0xbac98d4b kernel_getpeername +EXPORT_SYMBOL vmlinux 0xbae00ed3 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0xbaeffa05 qid_eq +EXPORT_SYMBOL vmlinux 0xbafeee36 dispc_runtime_get +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1a53bd uart_get_divisor +EXPORT_SYMBOL vmlinux 0xbb227a43 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xbb26ae2b account_page_redirty +EXPORT_SYMBOL vmlinux 0xbb2cc4f6 i2c_verify_client +EXPORT_SYMBOL vmlinux 0xbb38767b tcp_ioctl +EXPORT_SYMBOL vmlinux 0xbb3fc078 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xbb4b2704 ata_print_version +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb672c54 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL vmlinux 0xbb69ff81 max8998_write_reg +EXPORT_SYMBOL vmlinux 0xbb713e6d sk_filter_release_rcu +EXPORT_SYMBOL vmlinux 0xbb72d4fe __put_user_1 +EXPORT_SYMBOL vmlinux 0xbb824f99 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xbb86f5e0 __destroy_inode +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbb9fc0a4 phy_connect_direct +EXPORT_SYMBOL vmlinux 0xbbf4b243 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0xbc10dd97 __put_user_4 +EXPORT_SYMBOL vmlinux 0xbc11db30 clk_get +EXPORT_SYMBOL vmlinux 0xbc4a91aa padata_add_cpu +EXPORT_SYMBOL vmlinux 0xbc518a00 tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0xbc65df37 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xbc67bc51 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0xbc9403f8 vfs_unlink +EXPORT_SYMBOL vmlinux 0xbc9a879b inode_dio_done +EXPORT_SYMBOL vmlinux 0xbcc1e5d2 devm_clk_put +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbcc91995 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0xbce0abc5 truncate_setsize +EXPORT_SYMBOL vmlinux 0xbcefc7ae tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xbcf2ff76 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0xbcfe8675 mb_cache_create +EXPORT_SYMBOL vmlinux 0xbd186b9f dm_io +EXPORT_SYMBOL vmlinux 0xbd2dbb09 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0xbd3fa8b4 twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0xbd4ab2ad jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0xbd555759 page_readlink +EXPORT_SYMBOL vmlinux 0xbd569769 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0xbd705d1d unmap_mapping_range +EXPORT_SYMBOL vmlinux 0xbd7a443f twl6040_set_bits +EXPORT_SYMBOL vmlinux 0xbd96c85a vexpress_config_write +EXPORT_SYMBOL vmlinux 0xbdb5beca inet_bind +EXPORT_SYMBOL vmlinux 0xbdb5fa56 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xbdbe7378 cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xbde0bb75 follow_down +EXPORT_SYMBOL vmlinux 0xbdf2580d __raw_readsl +EXPORT_SYMBOL vmlinux 0xbdffa0ba single_release +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe254e92 param_set_ushort +EXPORT_SYMBOL vmlinux 0xbe2c0274 add_timer +EXPORT_SYMBOL vmlinux 0xbe349d89 sock_setsockopt +EXPORT_SYMBOL vmlinux 0xbe5a8ea1 dev_uc_add +EXPORT_SYMBOL vmlinux 0xbe63ee40 request_resource +EXPORT_SYMBOL vmlinux 0xbe8860a8 dispc_mgr_go_busy +EXPORT_SYMBOL vmlinux 0xbe8fb90c dispc_mgr_get_framedone_irq +EXPORT_SYMBOL vmlinux 0xbe97743f bdi_init +EXPORT_SYMBOL vmlinux 0xbe9fa1e7 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0xbeb7644b max8925_set_bits +EXPORT_SYMBOL vmlinux 0xbec28d7c __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xbedb36dd ns_capable +EXPORT_SYMBOL vmlinux 0xbee90f2f __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbeff23fd ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xbf10cd06 max8998_update_reg +EXPORT_SYMBOL vmlinux 0xbf23222c pm860x_page_bulk_write +EXPORT_SYMBOL vmlinux 0xbf2a75e6 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0xbf346196 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xbf50a139 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0xbf559836 bio_add_page +EXPORT_SYMBOL vmlinux 0xbf7a25ea tty_unlock_pair +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8ba54a vprintk +EXPORT_SYMBOL vmlinux 0xbf99b63a splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbf9f00f2 ip6_xmit +EXPORT_SYMBOL vmlinux 0xbfa0256f sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0xbfa1a9cb omapdss_sdi_set_datapairs +EXPORT_SYMBOL vmlinux 0xbfc407b4 param_ops_bint +EXPORT_SYMBOL vmlinux 0xbfcbc0d2 stmp_reset_block +EXPORT_SYMBOL vmlinux 0xbfdfb54f kset_register +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xbff9b89f textsearch_prepare +EXPORT_SYMBOL vmlinux 0xc003ca2f seq_lseek +EXPORT_SYMBOL vmlinux 0xc009682f mmc_suspend_host +EXPORT_SYMBOL vmlinux 0xc02cf69b clkdev_drop +EXPORT_SYMBOL vmlinux 0xc03ba8a1 jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xc046af35 freeze_super +EXPORT_SYMBOL vmlinux 0xc05c6558 sk_reset_timer +EXPORT_SYMBOL vmlinux 0xc05d6b90 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0xc068440e __kfifo_alloc +EXPORT_SYMBOL vmlinux 0xc0763484 rfkill_blocked +EXPORT_SYMBOL vmlinux 0xc07bba07 inet_recvmsg +EXPORT_SYMBOL vmlinux 0xc0823e4c twl_i2c_write +EXPORT_SYMBOL vmlinux 0xc090ae3b xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xc0a6a8c5 omap_set_dma_dest_burst_mode +EXPORT_SYMBOL vmlinux 0xc0a98385 profile_pc +EXPORT_SYMBOL vmlinux 0xc0cf95f9 omap_vrfb_request_ctx +EXPORT_SYMBOL vmlinux 0xc0d51f27 inode_dio_wait +EXPORT_SYMBOL vmlinux 0xc0ed5706 I_BDEV +EXPORT_SYMBOL vmlinux 0xc1099c58 dqput +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc12ec3a6 dns_query +EXPORT_SYMBOL vmlinux 0xc13b3917 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0xc19fdb93 fsnotify_alloc_group +EXPORT_SYMBOL vmlinux 0xc1b20154 tty_unlock +EXPORT_SYMBOL vmlinux 0xc1b68994 dev_mc_del +EXPORT_SYMBOL vmlinux 0xc1c2dd09 __hw_addr_flush +EXPORT_SYMBOL vmlinux 0xc1f1953c omap_dss_get_overlay +EXPORT_SYMBOL vmlinux 0xc2165d85 __arm_iounmap +EXPORT_SYMBOL vmlinux 0xc22709c5 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0xc22b50ad param_set_bint +EXPORT_SYMBOL vmlinux 0xc250cef0 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc2a3c828 dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0xc2aea31b generic_fillattr +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2ee411f __bforget +EXPORT_SYMBOL vmlinux 0xc2f035d1 journal_stop +EXPORT_SYMBOL vmlinux 0xc2f9c045 timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xc30756be blk_peek_request +EXPORT_SYMBOL vmlinux 0xc317cb4d kdb_current_task +EXPORT_SYMBOL vmlinux 0xc34185bf usb_remove_phy +EXPORT_SYMBOL vmlinux 0xc34ff0bb clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xc359fb65 abort +EXPORT_SYMBOL vmlinux 0xc391cc20 unregister_binfmt +EXPORT_SYMBOL vmlinux 0xc3b1f2cf task_nice +EXPORT_SYMBOL vmlinux 0xc3dda06d dquot_alloc +EXPORT_SYMBOL vmlinux 0xc3ebbacf sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xc3ef4e1c directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0xc3ef74f7 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0xc3f9bd3a genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0xc3fdb06e snd_card_free_when_closed +EXPORT_SYMBOL vmlinux 0xc41f0516 node_states +EXPORT_SYMBOL vmlinux 0xc4336b9a alloc_disk_node +EXPORT_SYMBOL vmlinux 0xc438fe3e cdev_init +EXPORT_SYMBOL vmlinux 0xc474f6a5 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xc497a7a2 dquot_acquire +EXPORT_SYMBOL vmlinux 0xc4993e6e dcb_getapp +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc4b2381a journal_start_commit +EXPORT_SYMBOL vmlinux 0xc4c30b4c find_get_page +EXPORT_SYMBOL vmlinux 0xc4f462a9 request_key_async +EXPORT_SYMBOL vmlinux 0xc520096e dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xc5234660 inode_add_bytes +EXPORT_SYMBOL vmlinux 0xc525820c journal_revoke +EXPORT_SYMBOL vmlinux 0xc52da066 omap_set_dma_dest_params +EXPORT_SYMBOL vmlinux 0xc54f2e1e blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0xc558232d jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0xc560a3a8 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0xc563e92e bio_integrity_endio +EXPORT_SYMBOL vmlinux 0xc578fd5d splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xc590b36e snd_pcm_kernel_ioctl +EXPORT_SYMBOL vmlinux 0xc5a3545c current_fs_time +EXPORT_SYMBOL vmlinux 0xc5c4e36d uart_update_timeout +EXPORT_SYMBOL vmlinux 0xc5cc136b generic_write_sync +EXPORT_SYMBOL vmlinux 0xc5e8b24f skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xc631580a console_unlock +EXPORT_SYMBOL vmlinux 0xc6580c86 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0xc6601b8a elevator_change +EXPORT_SYMBOL vmlinux 0xc6cbbc89 capable +EXPORT_SYMBOL vmlinux 0xc6cf60b9 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0xc6edb0c6 scsi_print_result +EXPORT_SYMBOL vmlinux 0xc6eed99c __put_cred +EXPORT_SYMBOL vmlinux 0xc6fc6321 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0xc702156b param_get_ushort +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc7278d34 omapdss_output_set_device +EXPORT_SYMBOL vmlinux 0xc768b666 scsi_prep_return +EXPORT_SYMBOL vmlinux 0xc773f7cb init_task +EXPORT_SYMBOL vmlinux 0xc781bd9f rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xc78f7efd ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0xc79a3e70 alloc_file +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a2d6ef bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7b62668 tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xc7bcbc8d add_wait_queue +EXPORT_SYMBOL vmlinux 0xc7c1dfde mfd_cell_enable +EXPORT_SYMBOL vmlinux 0xc7c95bcb inet_csk_accept +EXPORT_SYMBOL vmlinux 0xc7cbd70e key_reject_and_link +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc7ee2b9c padata_start +EXPORT_SYMBOL vmlinux 0xc7f1e501 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0xc7fc0428 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0xc80bb7c4 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xc8276a79 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0xc82a0084 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0xc8300925 blk_make_request +EXPORT_SYMBOL vmlinux 0xc84a0a7e seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0xc87823bf twl_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xc89b715b of_mdiobus_register +EXPORT_SYMBOL vmlinux 0xc89bc4a9 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xc8b26157 snd_pcm_set_ops +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8d8e31b sys_imageblit +EXPORT_SYMBOL vmlinux 0xc8f36b20 kobject_init +EXPORT_SYMBOL vmlinux 0xc905ca9e inet_stream_ops +EXPORT_SYMBOL vmlinux 0xc90a74f7 led_blink_set_oneshot +EXPORT_SYMBOL vmlinux 0xc92279a4 genl_unregister_family +EXPORT_SYMBOL vmlinux 0xc95de05b default_file_splice_read +EXPORT_SYMBOL vmlinux 0xc971e3de neigh_seq_stop +EXPORT_SYMBOL vmlinux 0xc9818562 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0xc984dcf5 blk_bio_map_sg +EXPORT_SYMBOL vmlinux 0xc98ee2c5 vfs_read +EXPORT_SYMBOL vmlinux 0xc9903046 snd_ctl_make_virtual_master +EXPORT_SYMBOL vmlinux 0xc996d097 del_timer +EXPORT_SYMBOL vmlinux 0xc99e2a55 twl_rev +EXPORT_SYMBOL vmlinux 0xc9e8e940 dentry_path_raw +EXPORT_SYMBOL vmlinux 0xca5967e3 vm_stat +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca6ce8ba omap_dss_ntsc_timings +EXPORT_SYMBOL vmlinux 0xca9360b5 rb_next +EXPORT_SYMBOL vmlinux 0xcad72d54 security_path_rename +EXPORT_SYMBOL vmlinux 0xcb0288ea ledtrig_cpu +EXPORT_SYMBOL vmlinux 0xcb07e4af tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xcb2557ea kobject_add +EXPORT_SYMBOL vmlinux 0xcb30b6c0 dev_trans_start +EXPORT_SYMBOL vmlinux 0xcb466063 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0xcb472f95 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xcb686340 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb92b149 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL vmlinux 0xcbaf9bba kunmap +EXPORT_SYMBOL vmlinux 0xcbb03aec dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0xcbc9557f unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xcbdfa83e get_io_context +EXPORT_SYMBOL vmlinux 0xcbed1209 cpu_user +EXPORT_SYMBOL vmlinux 0xcbed4eb6 get_thermal_instance +EXPORT_SYMBOL vmlinux 0xcbfb4972 dev_notice +EXPORT_SYMBOL vmlinux 0xcc1ad8a9 devm_ioremap +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc34626c generic_file_aio_read +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc37f55c blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xcc3819d2 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0xcc4abe1a md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc57c8b1 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xcc653c39 vc_cons +EXPORT_SYMBOL vmlinux 0xcc71dcb3 journal_set_features +EXPORT_SYMBOL vmlinux 0xcc7767dc kmap +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcca52a69 skb_append +EXPORT_SYMBOL vmlinux 0xccc21f5e input_get_new_minor +EXPORT_SYMBOL vmlinux 0xccc7dc76 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0xccf76664 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0xcd098ec4 phy_drivers_register +EXPORT_SYMBOL vmlinux 0xcd09d724 scsi_register_driver +EXPORT_SYMBOL vmlinux 0xcd279169 nla_find +EXPORT_SYMBOL vmlinux 0xcd2bdd66 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0xcd30b95a tmio_core_mmc_clk_div +EXPORT_SYMBOL vmlinux 0xcd3f2b25 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xcd4d600f dss_mgr_register_framedone_handler +EXPORT_SYMBOL vmlinux 0xcd63c845 __aeabi_lasr +EXPORT_SYMBOL vmlinux 0xcd78f82b tcp_sendpage +EXPORT_SYMBOL vmlinux 0xcd7a7b5e lookup_one_len +EXPORT_SYMBOL vmlinux 0xcd9a322c ida_pre_get +EXPORT_SYMBOL vmlinux 0xcd9df07e dev_err +EXPORT_SYMBOL vmlinux 0xcdb81866 d_move +EXPORT_SYMBOL vmlinux 0xcdb91dea blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0xcdd09729 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0xcdd3bde4 free_task +EXPORT_SYMBOL vmlinux 0xcde172ac radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0xcde3044d genl_notify +EXPORT_SYMBOL vmlinux 0xcdf17ab7 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0xce0e8f40 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce2840e7 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0xce2e82b1 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xce3acecc simple_dir_operations +EXPORT_SYMBOL vmlinux 0xce3b0e80 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL vmlinux 0xce575e2a jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce7048fd override_creds +EXPORT_SYMBOL vmlinux 0xce7b4498 fsync_bdev +EXPORT_SYMBOL vmlinux 0xcea3ad91 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xcee702d2 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0xcee8dbfc journal_init_inode +EXPORT_SYMBOL vmlinux 0xcef51982 kstrtou16 +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcefd71ef serio_open +EXPORT_SYMBOL vmlinux 0xcf2352bc have_submounts +EXPORT_SYMBOL vmlinux 0xcf3a4b94 install_exec_creds +EXPORT_SYMBOL vmlinux 0xcf3cb730 fb_firmware_edid +EXPORT_SYMBOL vmlinux 0xcf44de53 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0xcf522f80 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0xcf88625f mempool_create_node +EXPORT_SYMBOL vmlinux 0xcf928730 sync_blockdev +EXPORT_SYMBOL vmlinux 0xcfa1c924 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0xcfb08b44 mnt_unpin +EXPORT_SYMBOL vmlinux 0xcfb839ca of_find_device_by_node +EXPORT_SYMBOL vmlinux 0xcff6b676 _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0xcffe969c snd_card_create +EXPORT_SYMBOL vmlinux 0xd002d0f5 dev_alert +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd024635b input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0xd036e423 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0xd0575e35 inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xd059e02d __free_pages +EXPORT_SYMBOL vmlinux 0xd05d5f77 block_write_end +EXPORT_SYMBOL vmlinux 0xd05e509a unlock_page +EXPORT_SYMBOL vmlinux 0xd0666518 vlan_vid_add +EXPORT_SYMBOL vmlinux 0xd0720a17 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0xd0786dde nobh_write_begin +EXPORT_SYMBOL vmlinux 0xd08ffe57 inode_change_ok +EXPORT_SYMBOL vmlinux 0xd09a522c km_report +EXPORT_SYMBOL vmlinux 0xd0a681fa __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xd0a8f4a4 idr_remove_all +EXPORT_SYMBOL vmlinux 0xd0a91bab skip_spaces +EXPORT_SYMBOL vmlinux 0xd0cdb9f1 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0xd0d42c42 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xd0d565ff md_set_array_sectors +EXPORT_SYMBOL vmlinux 0xd0e1b33f file_sb_list_del +EXPORT_SYMBOL vmlinux 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0f36f0d audit_log_format +EXPORT_SYMBOL vmlinux 0xd0fb7cd4 __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xd0fdf83c rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0xd1067ba7 dispc_ovl_enabled +EXPORT_SYMBOL vmlinux 0xd10a255b seq_path +EXPORT_SYMBOL vmlinux 0xd10d3fe3 ida_simple_get +EXPORT_SYMBOL vmlinux 0xd1157735 release_and_free_resource +EXPORT_SYMBOL vmlinux 0xd11c0dc1 __kernel_param_unlock +EXPORT_SYMBOL vmlinux 0xd1816f32 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0xd196c9be kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0xd1a3ac16 scsi_remove_device +EXPORT_SYMBOL vmlinux 0xd1c435d7 dev_printk +EXPORT_SYMBOL vmlinux 0xd1dd1db3 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xd1e33ddb get_super_thawed +EXPORT_SYMBOL vmlinux 0xd1e3463a ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xd1f2702c dev_mc_flush +EXPORT_SYMBOL vmlinux 0xd21658d7 try_module_get +EXPORT_SYMBOL vmlinux 0xd217c124 linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0xd220cf8a jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25870f5 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd27b25dd blk_check_plugged +EXPORT_SYMBOL vmlinux 0xd2999988 mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0xd29a9be1 console_start +EXPORT_SYMBOL vmlinux 0xd2acb45f set_blocksize +EXPORT_SYMBOL vmlinux 0xd2d41a7e generic_make_request +EXPORT_SYMBOL vmlinux 0xd2e65048 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xd2e790ec udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0xd2eb77a6 of_find_node_by_phandle +EXPORT_SYMBOL vmlinux 0xd319ab06 idr_replace +EXPORT_SYMBOL vmlinux 0xd31ccb06 of_machine_is_compatible +EXPORT_SYMBOL vmlinux 0xd32a1bb1 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0xd32a7415 set_binfmt +EXPORT_SYMBOL vmlinux 0xd32e1c8f ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xd347e62c blk_queue_make_request +EXPORT_SYMBOL vmlinux 0xd3491237 input_unregister_handle +EXPORT_SYMBOL vmlinux 0xd34d206f d_find_any_alias +EXPORT_SYMBOL vmlinux 0xd3515dec wait_iff_congested +EXPORT_SYMBOL vmlinux 0xd3543f70 soft_cursor +EXPORT_SYMBOL vmlinux 0xd37b486f locks_delete_block +EXPORT_SYMBOL vmlinux 0xd3c9313e mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0xd3d3a477 posix_acl_init +EXPORT_SYMBOL vmlinux 0xd3dbfbc4 _find_first_zero_bit_le +EXPORT_SYMBOL vmlinux 0xd3dcab0b flex_array_alloc +EXPORT_SYMBOL vmlinux 0xd3e6f60d cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xd3ec3b4f omap_dss_find_device +EXPORT_SYMBOL vmlinux 0xd3f8a3c7 prepare_creds +EXPORT_SYMBOL vmlinux 0xd418e1c0 adjust_resource +EXPORT_SYMBOL vmlinux 0xd41fe818 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xd43f408c backlight_device_register +EXPORT_SYMBOL vmlinux 0xd440ed80 blk_free_tags +EXPORT_SYMBOL vmlinux 0xd454eabb tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0xd456425d kobject_set_name +EXPORT_SYMBOL vmlinux 0xd4669fad complete +EXPORT_SYMBOL vmlinux 0xd4a21d7f seq_escape +EXPORT_SYMBOL vmlinux 0xd4f3a704 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0xd5152710 sg_next +EXPORT_SYMBOL vmlinux 0xd54a70a2 from_kqid_munged +EXPORT_SYMBOL vmlinux 0xd55f4dea __devm_request_region +EXPORT_SYMBOL vmlinux 0xd56e9485 omap_set_dma_dest_index +EXPORT_SYMBOL vmlinux 0xd576a5ca dev_emerg +EXPORT_SYMBOL vmlinux 0xd591fce0 km_state_expired +EXPORT_SYMBOL vmlinux 0xd59984e7 ps2_begin_command +EXPORT_SYMBOL vmlinux 0xd5a4f567 xfrm_state_add +EXPORT_SYMBOL vmlinux 0xd5a9c855 mem_map +EXPORT_SYMBOL vmlinux 0xd5b1376d register_shrinker +EXPORT_SYMBOL vmlinux 0xd5d6ec05 __find_get_block +EXPORT_SYMBOL vmlinux 0xd5f08ad2 clear_inode +EXPORT_SYMBOL vmlinux 0xd5f14d0a md_write_start +EXPORT_SYMBOL vmlinux 0xd5f2172f del_timer_sync +EXPORT_SYMBOL vmlinux 0xd5f7c9be nand_calculate_ecc +EXPORT_SYMBOL vmlinux 0xd601dbeb generic_file_open +EXPORT_SYMBOL vmlinux 0xd6117d48 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0xd6118571 poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0xd61347c6 register_sysctl +EXPORT_SYMBOL vmlinux 0xd616683a ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0xd61e5d16 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0xd6207995 dm_unregister_target +EXPORT_SYMBOL vmlinux 0xd627480b strncat +EXPORT_SYMBOL vmlinux 0xd628a1ae tty_write_room +EXPORT_SYMBOL vmlinux 0xd628d206 sock_create_lite +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd632f824 input_event +EXPORT_SYMBOL vmlinux 0xd63db9df of_get_property +EXPORT_SYMBOL vmlinux 0xd648e564 fb_match_mode +EXPORT_SYMBOL vmlinux 0xd64ab927 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0xd66a76b9 bdput +EXPORT_SYMBOL vmlinux 0xd66d3c5d dev_close +EXPORT_SYMBOL vmlinux 0xd6762edf blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0xd67ab14b xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xd68f6ed8 of_find_all_nodes +EXPORT_SYMBOL vmlinux 0xd6a448e3 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xd6c95122 phy_get_eee_err +EXPORT_SYMBOL vmlinux 0xd6db7e1f jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xd6df3808 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd7264264 may_umount_tree +EXPORT_SYMBOL vmlinux 0xd7417649 phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0xd74289f9 __percpu_counter_add +EXPORT_SYMBOL vmlinux 0xd75c79df smp_call_function +EXPORT_SYMBOL vmlinux 0xd7674e13 sk_stream_error +EXPORT_SYMBOL vmlinux 0xd76dbafe scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7ae2361 vexpress_config_bridge_unregister +EXPORT_SYMBOL vmlinux 0xd7e56a4e simple_strtoll +EXPORT_SYMBOL vmlinux 0xd7ea7094 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xd7fcdcf3 input_get_keycode +EXPORT_SYMBOL vmlinux 0xd8093340 loop_register_transfer +EXPORT_SYMBOL vmlinux 0xd830dac6 request_firmware +EXPORT_SYMBOL vmlinux 0xd8453971 inet_put_port +EXPORT_SYMBOL vmlinux 0xd84cd700 snd_ctl_rename_id +EXPORT_SYMBOL vmlinux 0xd85cd67e __wake_up +EXPORT_SYMBOL vmlinux 0xd88ebbee tcf_exts_change +EXPORT_SYMBOL vmlinux 0xd89fe2a6 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0xd8c31a6e tcp_hashinfo +EXPORT_SYMBOL vmlinux 0xd8ce7e67 clocksource_register +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd90c49c8 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0xd90d836c scsi_init_io +EXPORT_SYMBOL vmlinux 0xd9150fce sb_set_blocksize +EXPORT_SYMBOL vmlinux 0xd92afabe bitmap_clear +EXPORT_SYMBOL vmlinux 0xd955d2b7 omap_set_dma_dest_data_pack +EXPORT_SYMBOL vmlinux 0xd958efd1 security_path_mknod +EXPORT_SYMBOL vmlinux 0xd96d28dd phys_mem_access_prot +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd9a6cc8f of_device_is_available +EXPORT_SYMBOL vmlinux 0xd9a9bb30 getname +EXPORT_SYMBOL vmlinux 0xd9bbf227 tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0xd9c46595 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0xd9ccfe70 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xd9ce8f0c strnlen +EXPORT_SYMBOL vmlinux 0xd9e61fcb qid_valid +EXPORT_SYMBOL vmlinux 0xda074166 tcp_read_sock +EXPORT_SYMBOL vmlinux 0xda1dbd46 sock_from_file +EXPORT_SYMBOL vmlinux 0xda32f2e8 kmalloc_caches +EXPORT_SYMBOL vmlinux 0xda3d10a8 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0xda7aefed snd_pcm_hw_param_last +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda87c8aa __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda9e6c30 serio_close +EXPORT_SYMBOL vmlinux 0xdaa16b82 of_clk_get +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdaafc807 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0xdab0f29e skb_copy +EXPORT_SYMBOL vmlinux 0xdac092e0 scm_detach_fds +EXPORT_SYMBOL vmlinux 0xdacde937 serio_rescan +EXPORT_SYMBOL vmlinux 0xdade322f fb_show_logo +EXPORT_SYMBOL vmlinux 0xdaeb9b0d do_splice_from +EXPORT_SYMBOL vmlinux 0xdafe53aa elv_rb_former_request +EXPORT_SYMBOL vmlinux 0xdb0db93f skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xdb2178c7 __sg_free_table +EXPORT_SYMBOL vmlinux 0xdb271ee6 mmc_detect_change +EXPORT_SYMBOL vmlinux 0xdb328133 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0xdb4292e4 omap_set_dma_params +EXPORT_SYMBOL vmlinux 0xdb686abc mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0xdb68bbad rfkill_destroy +EXPORT_SYMBOL vmlinux 0xdb6e6a5a free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0xdb760f52 __kfifo_free +EXPORT_SYMBOL vmlinux 0xdb80dc8d generic_write_end +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdb93b838 dispc_free_irq +EXPORT_SYMBOL vmlinux 0xdb96df7f alloc_buffer_head +EXPORT_SYMBOL vmlinux 0xdb9fad86 seq_putc +EXPORT_SYMBOL vmlinux 0xdbc32619 abx500_remove_ops +EXPORT_SYMBOL vmlinux 0xdbc6aac2 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0xdbc8d58d dev_mc_add_global +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc12f521 tcf_hash_check +EXPORT_SYMBOL vmlinux 0xdc185df1 dma_sync_wait +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc3fcbc9 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0xdc4358b3 load_nls +EXPORT_SYMBOL vmlinux 0xdc4732e9 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0xdc4c7810 ip_ct_attach +EXPORT_SYMBOL vmlinux 0xdc6a9675 input_register_device +EXPORT_SYMBOL vmlinux 0xdc6d41cf vfs_fstatat +EXPORT_SYMBOL vmlinux 0xdc8098f0 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0xdc901834 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0xdc9fa106 kernel_getsockname +EXPORT_SYMBOL vmlinux 0xdca0a023 finish_open +EXPORT_SYMBOL vmlinux 0xdca32291 blk_get_request +EXPORT_SYMBOL vmlinux 0xdcaf3d0f remap_pfn_range +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcc402a8 __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0xdcc9d776 proc_mkdir +EXPORT_SYMBOL vmlinux 0xdcf6daf3 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd13f711 abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0xdd1c65f6 blk_finish_plug +EXPORT_SYMBOL vmlinux 0xdd27fa87 memchr +EXPORT_SYMBOL vmlinux 0xdd3916ac _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0xdd3c5dfa contig_page_data +EXPORT_SYMBOL vmlinux 0xdd4a5569 param_get_byte +EXPORT_SYMBOL vmlinux 0xdd645ae8 snd_pcm_suspend_all +EXPORT_SYMBOL vmlinux 0xdd715fc3 vfs_symlink +EXPORT_SYMBOL vmlinux 0xdd78d060 nla_append +EXPORT_SYMBOL vmlinux 0xdd912398 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0xde15c042 omap_set_dma_src_index +EXPORT_SYMBOL vmlinux 0xde1e3cf4 lease_modify +EXPORT_SYMBOL vmlinux 0xde567951 padata_alloc +EXPORT_SYMBOL vmlinux 0xde692d94 omap_get_dma_chain_src_pos +EXPORT_SYMBOL vmlinux 0xde84194b d_drop +EXPORT_SYMBOL vmlinux 0xde8c763d cpu_v7_set_pte_ext +EXPORT_SYMBOL vmlinux 0xde91284e inet_del_offload +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xdea51bcd devm_free_irq +EXPORT_SYMBOL vmlinux 0xdebd7288 single_open +EXPORT_SYMBOL vmlinux 0xdebf7ddf tty_unthrottle +EXPORT_SYMBOL vmlinux 0xdef913b2 vm_map_ram +EXPORT_SYMBOL vmlinux 0xdf18c23a kern_path +EXPORT_SYMBOL vmlinux 0xdf2c2742 rb_last +EXPORT_SYMBOL vmlinux 0xdf36d355 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0xdf48a0eb flex_array_put +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf69a121 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0xdf74b813 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf95440a vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0xdfb01a80 cpu_v7_dcache_clean_area +EXPORT_SYMBOL vmlinux 0xdfb34f06 sg_miter_next +EXPORT_SYMBOL vmlinux 0xdfb3704b dev_add_offload +EXPORT_SYMBOL vmlinux 0xdfb4e96b devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0xdfb5713f dss_mgr_disable +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfca75f6 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0xdfd91ce9 omap_type +EXPORT_SYMBOL vmlinux 0xe04888d2 init_special_inode +EXPORT_SYMBOL vmlinux 0xe04a56ea mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xe04f7caa dm_read_arg_group +EXPORT_SYMBOL vmlinux 0xe05b3fe2 netdev_change_features +EXPORT_SYMBOL vmlinux 0xe05c656b elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0xe06141e9 security_sk_clone +EXPORT_SYMBOL vmlinux 0xe0645d8c netdev_alert +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe0794f92 genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0xe09ca5d4 __pagevec_release +EXPORT_SYMBOL vmlinux 0xe0a1a2c3 km_policy_notify +EXPORT_SYMBOL vmlinux 0xe0aa8e43 simple_transaction_get +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0bef318 icst_hz_to_vco +EXPORT_SYMBOL vmlinux 0xe0f0664e mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0xe0f594b4 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xe0fae48a devm_gpio_free +EXPORT_SYMBOL vmlinux 0xe106abe4 dev_addr_init +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe11f3cbc _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0xe1260fac dquot_release +EXPORT_SYMBOL vmlinux 0xe127fb18 down_killable +EXPORT_SYMBOL vmlinux 0xe12a21ed vfs_follow_link +EXPORT_SYMBOL vmlinux 0xe13fa84a snd_ctl_notify +EXPORT_SYMBOL vmlinux 0xe15e39c2 dput +EXPORT_SYMBOL vmlinux 0xe1692f00 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0xe16b9398 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0xe16f51c8 nf_setsockopt +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe1c567eb md_write_end +EXPORT_SYMBOL vmlinux 0xe1f695ef max8925_bulk_read +EXPORT_SYMBOL vmlinux 0xe200d2d5 param_get_uint +EXPORT_SYMBOL vmlinux 0xe200f872 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0xe2094a14 mdiobus_write +EXPORT_SYMBOL vmlinux 0xe20ac825 skb_checksum_help +EXPORT_SYMBOL vmlinux 0xe2392953 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe24eb706 amba_device_register +EXPORT_SYMBOL vmlinux 0xe2662d46 of_get_min_tck +EXPORT_SYMBOL vmlinux 0xe28c62cc lro_receive_skb +EXPORT_SYMBOL vmlinux 0xe29b06fa nand_scan +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e0c0ac mount_nodev +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2f21cbc cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0xe2f9d855 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe32e1019 kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0xe36a383f twl6040_set_pll +EXPORT_SYMBOL vmlinux 0xe37d10ae omap_dispc_unregister_isr +EXPORT_SYMBOL vmlinux 0xe37ffdd1 module_layout +EXPORT_SYMBOL vmlinux 0xe3a5364a jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0xe3ab02d7 set_bh_page +EXPORT_SYMBOL vmlinux 0xe3d4198d __nla_reserve +EXPORT_SYMBOL vmlinux 0xe3d6f284 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0xe3e3fc76 of_phy_find_device +EXPORT_SYMBOL vmlinux 0xe3f625ca padata_stop +EXPORT_SYMBOL vmlinux 0xe4029de3 xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xe407f7f4 __inet6_hash +EXPORT_SYMBOL vmlinux 0xe40ab6de snd_pcm_lib_writev +EXPORT_SYMBOL vmlinux 0xe40bd9c9 poll_freewait +EXPORT_SYMBOL vmlinux 0xe428cb3c of_get_ddr_timings +EXPORT_SYMBOL vmlinux 0xe43274bc proc_dointvec +EXPORT_SYMBOL vmlinux 0xe45cba69 journal_create +EXPORT_SYMBOL vmlinux 0xe471be3a i2c_master_send +EXPORT_SYMBOL vmlinux 0xe471e883 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0xe4a557cd __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0xe4aff94f dev_set_mtu +EXPORT_SYMBOL vmlinux 0xe4c80097 cacheid +EXPORT_SYMBOL vmlinux 0xe4e38519 tcf_hash_release +EXPORT_SYMBOL vmlinux 0xe4e3e710 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0xe4eefd82 inetdev_by_index +EXPORT_SYMBOL vmlinux 0xe4f144a0 of_find_matching_node_and_match +EXPORT_SYMBOL vmlinux 0xe5122890 flow_cache_genid +EXPORT_SYMBOL vmlinux 0xe51d8f84 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe528ef46 mutex_lock +EXPORT_SYMBOL vmlinux 0xe53d1faa of_translate_dma_address +EXPORT_SYMBOL vmlinux 0xe5445af6 omap_get_dma_dst_pos +EXPORT_SYMBOL vmlinux 0xe56a866b scsi_host_put +EXPORT_SYMBOL vmlinux 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe58440b7 padata_do_parallel +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe59cc984 __page_symlink +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5c84894 scsi_remove_target +EXPORT_SYMBOL vmlinux 0xe5d95985 param_ops_ulong +EXPORT_SYMBOL vmlinux 0xe5e0f1d4 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0xe5e123d8 sock_kfree_s +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5f5c08f xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0xe640bd06 ata_port_printk +EXPORT_SYMBOL vmlinux 0xe66452ab dql_init +EXPORT_SYMBOL vmlinux 0xe671f084 thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0xe6744a89 omap_clear_dma +EXPORT_SYMBOL vmlinux 0xe6772a80 inet_confirm_addr +EXPORT_SYMBOL vmlinux 0xe6925ff5 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6c3ebb0 __raw_writesw +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe707d823 __aeabi_uidiv +EXPORT_SYMBOL vmlinux 0xe718ea8a __frontswap_store +EXPORT_SYMBOL vmlinux 0xe71d8281 dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0xe720e915 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xe726828f set_nlink +EXPORT_SYMBOL vmlinux 0xe72f11cc scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0xe7648f9d elv_add_request +EXPORT_SYMBOL vmlinux 0xe7722171 flex_array_free +EXPORT_SYMBOL vmlinux 0xe7786476 update_devfreq +EXPORT_SYMBOL vmlinux 0xe790c483 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0xe7a664c4 nf_hooks +EXPORT_SYMBOL vmlinux 0xe7a81967 audit_log_secctx +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7e15910 dispc_clear_irqstatus +EXPORT_SYMBOL vmlinux 0xe7e453fe fget +EXPORT_SYMBOL vmlinux 0xe7f532e2 of_device_is_compatible +EXPORT_SYMBOL vmlinux 0xe7fae36d dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0xe803ee0a nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe8942282 __sb_end_write +EXPORT_SYMBOL vmlinux 0xe8b53ecc down_write_trylock +EXPORT_SYMBOL vmlinux 0xe8b63ace radix_tree_range_tag_if_tagged +EXPORT_SYMBOL vmlinux 0xe8b7ccbc nand_scan_ident +EXPORT_SYMBOL vmlinux 0xe8bea3bc qdisc_put_stab +EXPORT_SYMBOL vmlinux 0xe8ee1738 idr_for_each +EXPORT_SYMBOL vmlinux 0xe8f6c0fb gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0xe912da6b unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe930ea77 scsi_print_sense +EXPORT_SYMBOL vmlinux 0xe953b21f get_next_ino +EXPORT_SYMBOL vmlinux 0xe9573869 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0xe9596c27 of_find_i2c_device_by_node +EXPORT_SYMBOL vmlinux 0xe986186e dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0xe99a3c5f open_exec +EXPORT_SYMBOL vmlinux 0xe99dfa68 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xe9aeb5c8 generic_read_dir +EXPORT_SYMBOL vmlinux 0xe9b48ba3 phy_print_status +EXPORT_SYMBOL vmlinux 0xe9d05ff9 kunmap_high +EXPORT_SYMBOL vmlinux 0xe9dfe440 locks_init_lock +EXPORT_SYMBOL vmlinux 0xe9e1e283 snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL vmlinux 0xe9ee3807 inet_frags_init +EXPORT_SYMBOL vmlinux 0xe9f2f504 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xe9f3fc32 dev_addr_flush +EXPORT_SYMBOL vmlinux 0xea00ad02 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea24be37 inode_needs_sync +EXPORT_SYMBOL vmlinux 0xea2f76e9 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0xea34a397 journal_abort +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea813d6e km_policy_expired +EXPORT_SYMBOL vmlinux 0xea9691c9 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0xead12b25 ipv4_specific +EXPORT_SYMBOL vmlinux 0xeadd4b46 usb_get_phy +EXPORT_SYMBOL vmlinux 0xeb039a22 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0xeb0aff97 snd_device_free +EXPORT_SYMBOL vmlinux 0xeb1b120e omap_set_dma_write_mode +EXPORT_SYMBOL vmlinux 0xeb244334 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xeb314878 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0xeb37101c audit_log_end +EXPORT_SYMBOL vmlinux 0xeb3eb50b xfrm_register_mode +EXPORT_SYMBOL vmlinux 0xeb4fa3b9 snd_ctl_replace +EXPORT_SYMBOL vmlinux 0xeb55a931 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0xeb5f6bb5 neigh_parms_release +EXPORT_SYMBOL vmlinux 0xeb728fd3 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0xeb7f55f6 generic_block_bmap +EXPORT_SYMBOL vmlinux 0xeb8c7106 seq_open_private +EXPORT_SYMBOL vmlinux 0xeb95357c ppp_register_compressor +EXPORT_SYMBOL vmlinux 0xebbb549c scsi_reset_provider +EXPORT_SYMBOL vmlinux 0xebdbe48c radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0xebe999b8 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0xebfdcbdf system_serial_high +EXPORT_SYMBOL vmlinux 0xec08752e snd_pcm_hw_refine +EXPORT_SYMBOL vmlinux 0xec100651 fsnotify_init_mark +EXPORT_SYMBOL vmlinux 0xec15f00a tcp_cookie_generator +EXPORT_SYMBOL vmlinux 0xec1a4cc9 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0xec4cae53 dev_warn +EXPORT_SYMBOL vmlinux 0xec4d9e3a clk_get_sys +EXPORT_SYMBOL vmlinux 0xec6932c1 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xecb291b5 tcp_parse_options +EXPORT_SYMBOL vmlinux 0xecd67cec schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0xecda5bbb key_link +EXPORT_SYMBOL vmlinux 0xece784c2 rb_first +EXPORT_SYMBOL vmlinux 0xecfe3e0c dquot_commit_info +EXPORT_SYMBOL vmlinux 0xecfeff30 journal_init_dev +EXPORT_SYMBOL vmlinux 0xed0a3d7a get_task_io_context +EXPORT_SYMBOL vmlinux 0xed2dcf41 skb_checksum +EXPORT_SYMBOL vmlinux 0xed4c274c put_tty_driver +EXPORT_SYMBOL vmlinux 0xed5873f9 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xed854dac omap_stop_dma_chain_transfers +EXPORT_SYMBOL vmlinux 0xed93f29e __kunmap_atomic +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedbf532f simple_map_init +EXPORT_SYMBOL vmlinux 0xedc70333 init_net +EXPORT_SYMBOL vmlinux 0xedc7f4ec dq_data_lock +EXPORT_SYMBOL vmlinux 0xedd765dc d_find_alias +EXPORT_SYMBOL vmlinux 0xedd9106d __ashrdi3 +EXPORT_SYMBOL vmlinux 0xeddf6d53 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0xede31be3 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0xeded6685 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0xee0cebf7 dentry_open +EXPORT_SYMBOL vmlinux 0xee108f30 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0xee1a458b tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3496c3 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0xee3d2f3e dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0xee559268 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0xee5924d0 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0xee6bc3be tcf_hash_search +EXPORT_SYMBOL vmlinux 0xee715ef8 lg_global_unlock +EXPORT_SYMBOL vmlinux 0xee95a2ed posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0xee974b9b should_remove_suid +EXPORT_SYMBOL vmlinux 0xeea8dbe1 elv_rb_del +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeead096a mmc_can_trim +EXPORT_SYMBOL vmlinux 0xeec6fd62 ps2_handle_response +EXPORT_SYMBOL vmlinux 0xeed3635b proc_dostring +EXPORT_SYMBOL vmlinux 0xeed9e94a scsi_release_buffers +EXPORT_SYMBOL vmlinux 0xeedd1e16 sock_wmalloc +EXPORT_SYMBOL vmlinux 0xeedf226c qdisc_destroy +EXPORT_SYMBOL vmlinux 0xeeedf66f nand_bch_correct_data +EXPORT_SYMBOL vmlinux 0xeefdd573 blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xef5638bf sock_no_poll +EXPORT_SYMBOL vmlinux 0xef7b4a3a rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0xefb66a95 omap_request_dma_chain +EXPORT_SYMBOL vmlinux 0xefd6cf06 __aeabi_unwind_cpp_pr0 +EXPORT_SYMBOL vmlinux 0xefdd2345 sg_init_one +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefec312f omap_get_dma_active_status +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf01184c0 flush_dcache_page +EXPORT_SYMBOL vmlinux 0xf04a289a mpage_writepage +EXPORT_SYMBOL vmlinux 0xf04c39ee eth_mac_addr +EXPORT_SYMBOL vmlinux 0xf05ffa15 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xf0ab3d0c write_inode_now +EXPORT_SYMBOL vmlinux 0xf0baa5c3 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xf0d68ed6 clk_register_clkdevs +EXPORT_SYMBOL vmlinux 0xf0de0e49 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf13feb57 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0xf141bf26 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0xf14bc8e0 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xf16f5b61 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0xf191637a scsi_mode_sense +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf19e9355 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xf1af273a ipv6_select_ident +EXPORT_SYMBOL vmlinux 0xf1b02b5e vfs_llseek +EXPORT_SYMBOL vmlinux 0xf1cd4929 mapping_tagged +EXPORT_SYMBOL vmlinux 0xf1d8eac5 __netif_schedule +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf202c5cb radix_tree_insert +EXPORT_SYMBOL vmlinux 0xf20d8270 snd_timer_open +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf22e446b idr_get_new_above +EXPORT_SYMBOL vmlinux 0xf237c5b7 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0xf23d0ddc wl12xx_get_platform_data +EXPORT_SYMBOL vmlinux 0xf23fcb99 __kfifo_in +EXPORT_SYMBOL vmlinux 0xf253b32e arp_tbl +EXPORT_SYMBOL vmlinux 0xf26ad55c d_rehash +EXPORT_SYMBOL vmlinux 0xf282c689 simple_getattr +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2b4bbf4 vsc824x_add_skew +EXPORT_SYMBOL vmlinux 0xf2cb964d fb_set_suspend +EXPORT_SYMBOL vmlinux 0xf2d9a510 __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xf2e29e8e dev_add_pack +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf35bbab8 phy_attach +EXPORT_SYMBOL vmlinux 0xf368c945 inet_select_addr +EXPORT_SYMBOL vmlinux 0xf36ffbaf phy_device_create +EXPORT_SYMBOL vmlinux 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL vmlinux 0xf379a62d bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0xf389fe60 __hw_addr_init +EXPORT_SYMBOL vmlinux 0xf3916987 global_cursor_default +EXPORT_SYMBOL vmlinux 0xf396cd21 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0xf3b83b65 iget_locked +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3dea1fe led_set_brightness +EXPORT_SYMBOL vmlinux 0xf4169c9b vfs_readv +EXPORT_SYMBOL vmlinux 0xf4592306 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0xf45a4e52 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0xf45f2f78 snd_pcm_period_elapsed +EXPORT_SYMBOL vmlinux 0xf45fa467 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0xf461f2eb snd_pcm_lib_ioctl +EXPORT_SYMBOL vmlinux 0xf473ffaf down +EXPORT_SYMBOL vmlinux 0xf4a0533e splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0xf4a78e9b mmc_fixup_device +EXPORT_SYMBOL vmlinux 0xf4a7fc6d omapdss_compat_init +EXPORT_SYMBOL vmlinux 0xf4ad33d6 snd_cards +EXPORT_SYMBOL vmlinux 0xf4bc3eb4 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xf4bdbeb9 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0xf4da077a bdi_unregister +EXPORT_SYMBOL vmlinux 0xf4dbd9ce generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf52e35d5 lock_sock_nested +EXPORT_SYMBOL vmlinux 0xf536b0e1 d_alloc_name +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf53d8915 arm_delay_ops +EXPORT_SYMBOL vmlinux 0xf5469f50 remove_proc_entry +EXPORT_SYMBOL vmlinux 0xf54c51a2 dma_pool_free +EXPORT_SYMBOL vmlinux 0xf559906b udp_proc_unregister +EXPORT_SYMBOL vmlinux 0xf564412a __aeabi_ulcmp +EXPORT_SYMBOL vmlinux 0xf5863ec0 dev_change_flags +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c095d3 kmem_cache_free +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f83641 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xf6388c56 sysctl_ip_default_ttl +EXPORT_SYMBOL vmlinux 0xf64c8f41 tc6393xb_lcd_set_power +EXPORT_SYMBOL vmlinux 0xf6674499 __nlmsg_put +EXPORT_SYMBOL vmlinux 0xf6746f08 omapdss_dpi_display_disable +EXPORT_SYMBOL vmlinux 0xf67f2b6c scsi_execute +EXPORT_SYMBOL vmlinux 0xf6851d5f register_sysctl_paths +EXPORT_SYMBOL vmlinux 0xf68f94bb scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xf6a97617 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0xf6b0d39e omapdss_default_get_resolution +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6d0c74a skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0xf6d418dc tty_register_driver +EXPORT_SYMBOL vmlinux 0xf6d4a267 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf6ee190a jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0xf6f3cef6 omap_vrfb_setup +EXPORT_SYMBOL vmlinux 0xf72594ee ip_getsockopt +EXPORT_SYMBOL vmlinux 0xf73b8f12 uart_add_one_port +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf75f22ab dma_alloc_from_coherent +EXPORT_SYMBOL vmlinux 0xf767a296 tty_throttle +EXPORT_SYMBOL vmlinux 0xf7753ce2 ilookup +EXPORT_SYMBOL vmlinux 0xf7802486 __aeabi_uidivmod +EXPORT_SYMBOL vmlinux 0xf785b1d3 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79450a0 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0xf7b12aee __next_cpu +EXPORT_SYMBOL vmlinux 0xf7be15f9 skb_clone +EXPORT_SYMBOL vmlinux 0xf7cb261d __insert_inode_hash +EXPORT_SYMBOL vmlinux 0xf7e28d7e da903x_query_status +EXPORT_SYMBOL vmlinux 0xf803fe39 bitmap_set +EXPORT_SYMBOL vmlinux 0xf80ca5d8 tty_hung_up_p +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf82992b2 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0xf82a1863 pin_config_group_set +EXPORT_SYMBOL vmlinux 0xf82ec573 rb_prev +EXPORT_SYMBOL vmlinux 0xf850a56d cdev_add +EXPORT_SYMBOL vmlinux 0xf853bbca omap_vrfb_map_angle +EXPORT_SYMBOL vmlinux 0xf878d3ce napi_get_frags +EXPORT_SYMBOL vmlinux 0xf88c3301 sg_init_table +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8fbb4f0 __bad_xchg +EXPORT_SYMBOL vmlinux 0xf9348cbc xz_dec_run +EXPORT_SYMBOL vmlinux 0xf93953de skb_gso_segment +EXPORT_SYMBOL vmlinux 0xf941cd95 edac_mc_find +EXPORT_SYMBOL vmlinux 0xf9427374 dispc_request_irq +EXPORT_SYMBOL vmlinux 0xf953024b xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0xf95dcb4c tcf_hash_create +EXPORT_SYMBOL vmlinux 0xf97ea84a netlink_unicast +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9ab42e1 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0xf9b35913 dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0xf9e73082 scnprintf +EXPORT_SYMBOL vmlinux 0xfa3522d8 security_path_mkdir +EXPORT_SYMBOL vmlinux 0xfa41a797 mntput +EXPORT_SYMBOL vmlinux 0xfa594c0b mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0xfa5a5f7c key_type_keyring +EXPORT_SYMBOL vmlinux 0xfa6714b5 km_state_notify +EXPORT_SYMBOL vmlinux 0xfa6abe2e nobh_write_end +EXPORT_SYMBOL vmlinux 0xfa9f7ee8 _snd_ctl_add_slave +EXPORT_SYMBOL vmlinux 0xfac68eba arm_elf_read_implies_exec +EXPORT_SYMBOL vmlinux 0xfac77353 scsi_print_command +EXPORT_SYMBOL vmlinux 0xfac8865f sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0xfacd2e14 pgprot_user +EXPORT_SYMBOL vmlinux 0xfae67b1f cap_mmap_addr +EXPORT_SYMBOL vmlinux 0xfae9d79e nobh_writepage +EXPORT_SYMBOL vmlinux 0xfaf1dcfe tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfaf9995e sleep_on +EXPORT_SYMBOL vmlinux 0xfb04d300 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0xfb1cf4cc lock_may_read +EXPORT_SYMBOL vmlinux 0xfb391360 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0xfb399ea4 input_allocate_device +EXPORT_SYMBOL vmlinux 0xfb5e16ca udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xfb6152fd pm860x_reg_read +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb7d9c45 __udivsi3 +EXPORT_SYMBOL vmlinux 0xfb8b731e fsnotify_add_mark +EXPORT_SYMBOL vmlinux 0xfbaaf01e console_lock +EXPORT_SYMBOL vmlinux 0xfbafe31b sget +EXPORT_SYMBOL vmlinux 0xfbc51fd5 inet_getname +EXPORT_SYMBOL vmlinux 0xfbc6ec99 amba_driver_unregister +EXPORT_SYMBOL vmlinux 0xfbee3d65 __get_page_tail +EXPORT_SYMBOL vmlinux 0xfbfb179d idr_init +EXPORT_SYMBOL vmlinux 0xfc01108f kick_iocb +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc65459a kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0xfc6c4260 phy_start_aneg +EXPORT_SYMBOL vmlinux 0xfc6e653f of_find_backlight_by_node +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcb3cd4f blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcca3c50 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0xfce766ab idr_get_next +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcf3df2d snd_timer_start +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd0df243 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0xfd305341 walk_stackframe +EXPORT_SYMBOL vmlinux 0xfd33ac3d jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xfd3cd2e3 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0xfd5683b9 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0xfd6170ba of_mm_gpiochip_add +EXPORT_SYMBOL vmlinux 0xfd61cada mark_info_dirty +EXPORT_SYMBOL vmlinux 0xfd627d59 icmpv6_send +EXPORT_SYMBOL vmlinux 0xfd6293c2 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfd81571a pagecache_write_end +EXPORT_SYMBOL vmlinux 0xfd888c95 inet6_release +EXPORT_SYMBOL vmlinux 0xfd993ba2 xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0xfda0dbe8 ftrace_print_hex_seq +EXPORT_SYMBOL vmlinux 0xfdcbc17c framebuffer_release +EXPORT_SYMBOL vmlinux 0xfdcc8342 thaw_super +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe17ea20 put_disk +EXPORT_SYMBOL vmlinux 0xfe3087cb snd_timer_global_register +EXPORT_SYMBOL vmlinux 0xfe33c6c3 sg_nents +EXPORT_SYMBOL vmlinux 0xfe40bf95 dss_feat_get_num_ovls +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe7f126f blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0xfe895266 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0xfee04831 mdiobus_register +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xfefb83ee of_find_node_by_path +EXPORT_SYMBOL vmlinux 0xff1a327b module_put +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff2d89b6 generic_write_checks +EXPORT_SYMBOL vmlinux 0xff2f274d netlink_ack +EXPORT_SYMBOL vmlinux 0xff3124e3 netdev_notice +EXPORT_SYMBOL vmlinux 0xff58c0dd dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xff6104d0 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL vmlinux 0xff65d3a8 filemap_flush +EXPORT_SYMBOL vmlinux 0xff67b37f __lshrdi3 +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffb18ec9 flush_kernel_dcache_page +EXPORT_SYMBOL vmlinux 0xffb94ef0 _test_and_change_bit +EXPORT_SYMBOL vmlinux 0xffcc9631 gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0xffd2cf99 omap_dss_get_num_overlay_managers +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffe5095d groups_free +EXPORT_SYMBOL vmlinux 0xffe9ff82 thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xfff022de skb_insert +EXPORT_SYMBOL vmlinux 0xfffb33eb setup_arg_pages +EXPORT_SYMBOL_GPL crypto/af_alg 0x1c0fb5e9 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x2fe3059a af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x3d923332 af_alg_complete +EXPORT_SYMBOL_GPL crypto/af_alg 0x5b930cbd af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x75d0b103 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x8b2a0665 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x93957c0c af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0xd954ef95 af_alg_wait_for_completion +EXPORT_SYMBOL_GPL crypto/af_alg 0xdf8b88e4 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x5a7b598a async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x3c06a1c4 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xb67fcf41 async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x0454980e async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xe0b55e21 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x22501b87 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x6685ba20 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xdf3c9f3f async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xf392a2fe async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x57935b41 async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xb50b4b97 async_xor +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x0dd96b3d blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x27278ca9 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x4a2a3ca6 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x8fc5be26 cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x1291971c __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x1e2c961f __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x371eb830 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x8f04034a __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast_common 0x08aa6fb7 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x0c5fbf8a cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0xe39dd4b4 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0xee83a4f3 cast_s4 +EXPORT_SYMBOL_GPL crypto/cryptd 0x2cd961f4 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x349bb8f5 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x40143cda cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x46f282bc cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x4d2eb8a1 cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x6a49cfcf cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x7c95832b cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x90f06189 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0xb1aab480 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xfbce412a cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/lrw 0x3864eb66 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0xcd074900 lrw_init_table +EXPORT_SYMBOL_GPL crypto/lrw 0xe63869d1 lrw_crypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x5ddb33e9 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x77b39cb4 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x8a1a99ad __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0xb1d0db6b serpent_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x6c3229bb __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x7d661fe3 twofish_setkey +EXPORT_SYMBOL_GPL crypto/xts 0x19b180e6 xts_crypt +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x7f12e0de __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x020e2332 bcma_core_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x1681fe91 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x3b493d60 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x46e9a87e bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x48c928f9 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x4dd2978d bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x579a76ae bcma_find_core +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x679127c3 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x6ab0d077 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x72389813 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x86a01ac0 bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x8f3e402c bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xded7d106 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xea9fcc50 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xf69b58df bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xf9b98d0f __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xfcbcbd61 bcma_core_pci_extend_L1timer +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x1c1db954 btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x284a544c btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x5ad2eb08 btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x7154e7f0 btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x8b52ad03 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x8dae4098 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xabec6e54 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb1c847c9 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xd912c37d btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xdc6f2a81 btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x192611d9 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0xd9a93706 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x0e07ee6c drm_gem_cma_free_object +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x30ae24ee drm_gem_cma_vm_ops +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x4fb0db46 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x584790f7 drm_gem_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x5f16b976 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x67a390ef drm_gem_cma_dumb_destroy +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x6b9eaa97 drm_gem_cma_mmap +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x7d766611 drm_gem_cma_dumb_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x8feebc65 drm_gem_cma_dumb_map_offset +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x1148b623 drm_fbdev_cma_fini +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x274f9e30 drm_fbdev_cma_init +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0x679f1980 drm_fb_cma_create +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0xb2c912af drm_fbdev_cma_hotplug_event +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0xcc337fd5 drm_fbdev_cma_restore_mode +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm_kms_helper 0xf2bc0039 drm_fb_cma_get_gem_obj +EXPORT_SYMBOL_GPL drivers/hid/hid 0x013a032d hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x11a46b5d hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x13ab4686 hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1b1f09a5 hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1f54d3fb hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x2106aba9 hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x21ecf8f5 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x30ce1e6e hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x34827f5d hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x379ad196 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4142fb38 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4906a967 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5b44025e hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5bd043b3 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6188a445 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x71a09bd2 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x75213d41 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x76f92b70 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x77bfd189 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x80df9848 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x81c17784 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x88099d7c hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x8a594368 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x929d0e3a hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc4f1d1da hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc8515a9c hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd2f17283 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd370b620 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf4b6f6b2 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfa8ebb07 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfb0d2331 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0xfbd12b37 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x2f622ea1 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x41133575 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x8c4181ec roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x1b1c6d04 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x222a1f11 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x616333ec roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x2736a8f7 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x4af6f6b0 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x82027149 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xe527c1d9 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xf5458685 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xf6e38979 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x14137e73 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x40d005c9 usbhid_wait_io +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x630598e1 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xa4978540 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x0a344492 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x2d5eb630 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x3bcf5552 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x56aba515 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x6b39c13e hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x7c075aaf hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x8245754c hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xbc3f26e4 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xde5ccfa5 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xe1c85bc9 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xe9839a91 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xf39c4ae7 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xff490110 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x161daa83 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x3cc8ef6a pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x5c7bf19b pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x60766e16 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x8a30226d pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x98873f0a pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xb3e22472 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xd49e66d6 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xe088c9f8 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xeca24edb pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xef4ab2ea pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x2fb01713 i2c_dw_is_enabled +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x3870d914 i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x3acdf6e7 i2c_dw_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x3fac00d9 i2c_dw_xfer +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x47052570 i2c_dw_init +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x54b683fc i2c_dw_disable_int +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x5bb1170b i2c_dw_isr +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x5d2b9789 i2c_dw_disable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xc430eb35 i2c_dw_clear_int +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xc8150143 i2c_dw_func +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x55fd8134 i2c_del_mux_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0xde849d15 i2c_add_mux_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x273f1d97 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0xcede3070 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x0bf8857b ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x0dcd3a26 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x290cc10a ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x2d13d4cf ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x48b8ec8c ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x81c212db ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x963cc1f5 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xf1e608b2 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xf6f376e7 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x114b4970 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x226e48f8 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x3dbea339 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x4451e7fa adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x6be110d7 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x6de6cfb9 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x765bc836 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xa0faa3fd adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xbdb58482 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xd8725b08 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xe26b7f44 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xeddbcd96 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x0534b957 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x06b1798a iio_update_demux +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x143de812 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x171afd19 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x21d309e6 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x267c0508 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x26f6b499 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x2a1fab3c iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x2bb2a87b iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x327c7288 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x372b20c8 iio_scan_mask_set +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x48fef967 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x5bfc5220 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x61a62e22 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x66ac6bac iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x6fdcd454 iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x766251ac iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x7a711aef iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x873385f5 iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x87fb5a2e iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xa313010d iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xa66bb30f iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xb7af6909 iio_scan_mask_query +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xc170f6cf iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xccff12bb iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xd2b403cd iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xd87eabba iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xde0c296b iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x3bb25157 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x49a4fcbd adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x66535a18 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0xe4586827 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0xef11727d adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x1361de9e cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0xc3de335b cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0xfd509db9 cyttsp_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00fdf759 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x059ff6b7 wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x08cd8616 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1344aef8 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1d43ea03 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x3f98e8f0 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x5aaf4c30 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xa697d963 wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xcf0340e9 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xd1e9ea9d wm9713_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe4bce847 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xe76856f3 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x019d7046 ipack_device_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x07014f19 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x09934691 ipack_device_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x0a014498 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x5004caff ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0xf2153ce9 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x4de7b2d0 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0xb17b7c77 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x23443c5f gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x2b419fe8 gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x38df2116 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x475789b1 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4d344bbd gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e566661 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x4e7e6331 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x5c5a1345 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6b3f5416 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x79d9a791 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x8eff32df gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xab54716f gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb39750f3 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc780390b gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xd841bf70 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xdbdbbebb gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe49999fd gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xfa9a60cf gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x17dd39d6 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x2eb01e04 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x6791a44e dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x78c7f0ae dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb6d5c65d dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb70b342a dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb7596e48 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xc8300cfa dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xca2e3a88 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xcfa01a18 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xebd06eaf dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x0ad0dc4f dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x22163b69 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x3909d3a8 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x594952bd dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x62a23587 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x6d3f57bd dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x74dcd98c dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x7c381a76 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x8b35eebb dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x9b2b253a dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xa82b2066 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xc9a3422d dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xd4bddf5c dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xdc69e37a dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xe004ee92 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xe6024e59 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xebcc64a4 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xeca7949e dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x6dffec5b dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x8f4e2529 dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x01d2f9ac dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x09472122 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x0c6cf0aa dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x38efaf5a dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3a18389a dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5082db66 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x60387ba3 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7774620f dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d053fc5 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x974c7e4a dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa53387c7 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa83588eb dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa8813ad6 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xb17bde0f dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xbe38a431 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc66ce277 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xcab63c3d dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd8aa4284 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf37a3cfe dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfa89997e dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfd93482e dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x0054f69d dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x03ced457 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x08a936ca dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x11eab9fe dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x1e3f728d dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x2c112836 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x2e730a21 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x40f7bd91 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x63b2ff62 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x67521436 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x688d422d dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x72289260 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7ade1071 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7b047bd9 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7dc38fc6 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x80c89b3d dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x9b4b5b29 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x9e798e22 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xa2507774 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xa6aae3ea dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb7bad799 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb967690a dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb9a6ecf8 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xbaa513b0 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xbc5fe7c1 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xbcfdc290 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xc3f03209 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xd163cade dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xdb562135 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xead1e727 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xf99dc2cf dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/raid1 0x29cd15b9 md_raid1_congested +EXPORT_SYMBOL_GPL drivers/md/raid10 0x9f84fbb6 md_raid10_congested +EXPORT_SYMBOL_GPL drivers/md/raid456 0xc006682a md_raid5_congested +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x66c0289a b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x004fa190 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x1be364bf sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x1c000794 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x2f29c8b9 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x386e7274 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x4a310974 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x614170d9 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x63222b29 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x66f9363c smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x76222253 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x77cfe25c smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x86bda448 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x945521e2 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xa8012de3 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xb6799a8b smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xbbdb5c42 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xc99529fc sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xed950d2e sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xf074af7d smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xf0d83c95 smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x303991fc tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x090b7ab2 omap_vout_default_crop +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x3f08714d omap_vout_try_window +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0x87006df4 omap_vout_new_window +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0xd5aa61c6 omap_vout_new_format +EXPORT_SYMBOL_GPL drivers/media/platform/omap/omap-vout 0xe168e379 omap_vout_new_crop +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0xa4bc506e radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0xa4c38817 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x22aa8c35 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x3672d65f rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x3f46e114 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x469adfb6 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x4f6471c9 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x553efb91 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x75cf314d rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x7e3a31ed ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x88c29ad4 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x935011da rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x94dc2d74 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x9d376238 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xa79b41f0 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xbce6c38b ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xd87d34a5 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xdc445697 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xe8d77787 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xec753482 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0xf25af83f mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x50627fb5 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x40dc6f04 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0xd680dc40 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x911ec55c tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x6e95d151 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0xfc6525d8 tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x011668ba tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x66762d8b tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0xcef4832d tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x378b7d8a tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0xf85d4f03 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x12a7046f simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x0d521c92 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x1053a1d3 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x155b9f42 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x21e0a9fd is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x2235bc20 cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x419ed66a cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x58f7a190 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x7e456ae1 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x7f77da56 cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x851ad3b5 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x87b60324 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x88dd5574 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x99845106 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x9ae2d3b8 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xa77d88ab cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xba45d3bc cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xe385a267 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xf1e7507f cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xf933b6e8 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0xfa6ff640 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0x6f2a14d5 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x0e929190 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x10aef7c5 em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x2dd2acc8 em28xx_alloc_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x5a1d0158 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x6ca68af7 em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x77ac1168 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x7900af03 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x907c3aee em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x98adb77a em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xb820ff2d em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xd0f19c64 em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xd1c0343e em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xf5cd76ad em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xf9d04a90 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x2309a6d6 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x4294b281 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x89b611dd tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x9596ebc7 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xb025b7f6 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xdff8e89d tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xe4ddf955 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x0e96656d v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x25ecb28f v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x348601a9 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x4e51255e v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x51e95af1 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x53105839 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x5d9d3491 v4l_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x6f344bb9 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x7eaf8e7a v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x813f3de4 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x94632f90 v4l_fill_dv_preset_info +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xdeb8b34c v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x3c15395d v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x4efefa65 v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x6da6b724 v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x8188432b v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x35c85472 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x5112a7c1 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x599c973e v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x5b116236 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x5e5088c7 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x6b5cdedd v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x941ae2db v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xade26e1c v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xbadda090 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xbe594a67 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xc6fca5ad v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xd4867046 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xe010fd00 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xeba200cd v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xfc7e9414 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x012c6129 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x09f21204 videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x0d5277be videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x0e2b67fb videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x14c112cf videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x15aae65c videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x247523a3 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x3b28b760 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x501682c9 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x513a7e4e videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x546c168b videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x607583ad videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x617d272a videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x775b6f6c __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x79afbe16 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x83df03f8 videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x8489c14b videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x9ad206cc videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xb0317ab6 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xbb71469b videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xc04a207a videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xd23df0f5 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xe361c5c1 videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xea1203bf videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x0e851ee8 videobuf_dma_contig_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x3f7ed87a videobuf_queue_dma_contig_init_cached +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0xcd9f90bc videobuf_to_dma_contig +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0xddde2c5b videobuf_queue_dma_contig_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x367c5037 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x52efdded videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0xece93681 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x01f4ae77 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x03cb8cba vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x0be70ecc vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x13072cd5 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x16219831 vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x36b75f6d vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x37495774 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x3f2188e6 vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x544b3a7d vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x5523f98e vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x56aef845 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x5deed836 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x5e78bcdb vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x61bb3714 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x6448f7ef vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x7740fdf6 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x87525968 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x9c608859 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa08a4d3c vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa3037e9f vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa90d3cb9 vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xab00877c vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xbd90c078 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xc1d4bcaf vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xc6206714 vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd2888fcc vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd581f676 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd9045e8a vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd91cf194 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xec544a97 vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xf1705d90 vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xf23b6b7b vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xf935fae6 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xfa2d7c31 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xb5300ceb vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xe57f0426 vb2_dma_contig_cleanup_ctx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xeaaf7aea vb2_dma_contig_init_ctx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x09057ae1 vb2_get_vma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x6f9969ee vb2_get_contig_userptr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x90b9b676 vb2_put_vma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x9b25ad46 vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0xaac5e65a vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x0312f41f v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x0e0e3c05 v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x22fadadb v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x2984f3a9 v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x2a5cb60f v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x3dc9622e v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x53eb235b v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x5f9a9aef v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x63d51ee5 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x8d2116fc v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x97351962 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x992489f1 v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xa0eafbc2 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xa95adea3 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xcc74e75d v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xcda090b5 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xd14afa66 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xd51283a3 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xd61abf7d v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xeba32173 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xf8db3750 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xfe302b4e v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x4142f818 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x7a449d63 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0xcbb90555 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0xd91110e7 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x179bf0c0 lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x192eb46a lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x75ba64e4 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x130a4565 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x1bd1f34a lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x49a641fb lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x5ec1b46f lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x8ca844be lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xc1abed2a lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xff889154 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x09961a97 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x6c52e9da mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0xa5bf263e mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0xb7b0d356 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0xe9830809 mc13xxx_common_cleanup +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0xf70a9876 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x02aa2f52 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x03fc33bf pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x29d69d7a pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x30b91500 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x3efc1a1d pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x5acf8603 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x6f133eca pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x95453dbd pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xc05a2e19 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xeb0c6e20 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xf6bc5f87 pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x06635978 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xad338868 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x0488e569 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x886a3470 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x8c77593e pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xe33befd4 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xf6158243 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x01a33234 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x4fca3918 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x0146e461 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xa3971cf0 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xc39af3f1 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xd91c3459 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xfc31af4b sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x5f66c900 tps65217_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0xa9ec7eba tps65217_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0xee7244b5 tps65217_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0xf8aa50d2 tps65217_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/twl4030-madc 0x08b8dd2e twl4030_madc_conversion +EXPORT_SYMBOL_GPL drivers/mfd/twl4030-madc 0x4362dc66 twl4030_get_madc_conversion +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x41aeb122 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x27cb133b eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d2ff63 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x822222db eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x98bb5a22 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0abbee1c enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0dd1e3fb enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x3495cba2 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xa2853df8 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xb8489d11 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xcd4638af enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xd933689f enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x14a143c8 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x4af85bcc lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x7fbd85f5 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xa508ed4e lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xb7dcf503 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xbce4b8ec lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xcb06ae3e lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xd1357a6b lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x1b94c3f0 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x9de77120 st_register +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x541350cd dw_mci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x800ccfc9 dw_mci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/dw_mmc-pltfm 0x843c3288 dw_mci_pltfm_remove +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x3daedbc8 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x9b34a9d1 cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xc4d0b364 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x069a3d1e cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xb9520874 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xe9955065 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xe22a84b2 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x7c44d7b3 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x9397c5c9 cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x96644070 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xa35fc3f3 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x2580c6ec onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x8d45f511 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x327690e5 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x38e10c1d ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4878b193 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4c8c2d6a ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4d6911fd ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5cfdd22d ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x688e5b40 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7b4cff27 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8e2ba004 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x926f5eda ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x9604377e ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xc0158caa ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xe534f92c ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xeabe5474 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xed0e29b7 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x15e84ace free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x435e967f register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x47e593ad c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x73476bff unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0xf0aee0a8 alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0xfb7c33ba c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1230c038 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x13fa0328 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1b9a7c65 can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x222c295a can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x26e16ae9 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2e0e101d open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2fc2cb6f alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x4c4965f9 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x50d9e371 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x540a94d7 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x6b03b6b8 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb346573b can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xd1bfe340 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xfadf9c4d can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x42f7d7d9 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0xebed2c03 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0xeef5be36 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0xf54bca06 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x0d099768 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x1ce589a9 alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x49ebd0d2 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x5cb13873 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xb139a2ae register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x0022da32 macb_set_rx_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x136e379b macb_get_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x1e2dc205 macb_mii_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x3c3ed9f6 macb_ethtool_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xc1bab21b macb_ioctl +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xc81e9d17 macb_set_hwaddr +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xcb03be81 macb_get_hwaddr +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x018edcce cpdma_ctlr_dump +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x4a6bea03 cpdma_chan_submit +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x5c2fe4a5 cpdma_chan_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x68e47b2c cpdma_ctlr_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x764928a2 cpdma_chan_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x949334db cpdma_ctlr_start +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0x9cdc9867 cpdma_ctlr_stop +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0xc5d5513e cpdma_chan_process +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0xe4c22565 cpdma_chan_destroy +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0xe56fd578 cpdma_ctlr_create +EXPORT_SYMBOL_GPL drivers/net/ethernet/ti/davinci_cpdma 0xee8d7539 cpdma_chan_start +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x07e1d9ee macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xab6382da macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xb9a621bc macvlan_start_xmit +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xea4a9afc macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xebe52520 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/macvtap 0x07b70c71 macvtap_get_socket +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x2c37054a usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x811746ad usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xce88e5c6 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xefae6de0 usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x1ebf3606 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x59648767 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x6698cbeb cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x7b3d31b4 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xae3abcfc cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xbb4d51d8 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x10e07a27 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x21a5153d rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x4cba47f5 rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x6cec1f22 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x767c061f rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xe929e509 generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0554c0d5 usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0cf26b83 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x11125d29 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1188c47a usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x18d7a855 usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1bbdb0cf usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x22586c3c usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x28b50866 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2a86a9d3 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x366924aa usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x3d72d23d usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4647a71b usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5792d52d usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x59fca78e usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5d967364 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7ede40f7 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x80ee5493 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x8526887d usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x901d5a99 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x92a7537d usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9593c208 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9940dafd usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9a1e4ba8 usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa3775144 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xaa1fd364 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb8a39a30 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd93afba0 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfa7bafaf usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfcd30683 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x0406ef75 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x1e3602aa i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x30f8cef9 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3eeb3cd5 i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x41b64ae9 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x44620798 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x47d59d1f i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x75c42d21 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x7cbdfe8e i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8d9eb05b i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x95bac261 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb07e50c3 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc66c418a i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe8adeda7 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xf300a21d i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xfcb5ef4f i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x0ee95533 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1007d2cb lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1e1f5a19 lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1f6d51ab lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x202a1e51 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x51f829b3 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5242635f lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x581fa950 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5fdf38b8 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6cfdc78c lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa96c49d4 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa9d32f31 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xac3fba8c lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb8332000 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xcfa237c6 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xe1601201 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xfb8bbf23 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x038c3176 lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x23b23155 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x34be8f0c lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x938618d8 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xa5ca6dbc lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xac360e0b lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xb2e942f9 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc85e6899 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xe5b0e237 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x5db7015d if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xe240a2b5 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x01cfe12b mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x120670f3 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x1a7a1933 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x1ba27102 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x1c2f2ef2 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x1ec38f82 mwifiex_deauthenticate +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x258815dc mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x2aafdd4e mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x619efe31 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x67beed50 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x83eac8b5 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xb72fbb6a mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xde8f675a mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xe3ba302c mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x09847adf p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x0ebe62fb p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x25964572 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x3d01e20a p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x42ef71ae p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x643821b7 p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x74b5fed4 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x98ed4684 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xf47b8373 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x03038dd7 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x05c57e02 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x069f1b20 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x0dfe184c rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x16a2a27b rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x1d4b0e24 rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x2c2f85bd rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x2d26eb1f rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x3298fe07 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x336dd11c rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x3ea0a711 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x42a0d28e rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x45e5406c rt2800_get_tkip_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x4a5c3acf rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x4db3069c rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x4df4b8e9 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x54c55724 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x7a6c0b9a rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x7c61a566 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x8b8bf958 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x9095e75f rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x9eca3a81 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xa118ba44 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xa5910fc7 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xadec94ce rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xae8ab7c7 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xbe5d68da rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xc5c14f8b rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xc8604b52 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd4f9a347 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd963b0f9 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xe30b7a91 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xe606048b rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xeb85d007 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xeed1643c rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xf2c3c538 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xf44f9641 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x00ca1c12 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0265df6f rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x04007190 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0a15993a rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1075a849 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x148c9319 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x212381d2 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x21872952 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x22129780 rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x298ef23c rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2e1aab3c rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2faf34e0 rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x374454d6 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3c0bcbe6 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3f697833 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x45c074a4 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x472046c3 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6408fbc2 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6e9b771c rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x70b9e4b4 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7273218d rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x78bb492a rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x81a82f5b rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x85b63c62 rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8a36d78f rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8cfd8fcd rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x94943290 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x992d97f0 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9a7bb1e4 rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9b115627 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa7cd1908 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaa0a126e rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaba9f877 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb3e638a1 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb56e92e9 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb8af1192 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc5aaf8d0 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcc8bde4d rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xcf2b6a3a rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd62ca89b rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xddad79f8 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdee2237c rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe1a5859a rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xeb87da88 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf6df7642 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf859b22f rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0e763dd4 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x101b36c3 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x2b3c5e8e rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x36839819 rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x4a531fcc rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x4daaff5c rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x5453895f rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x675f1fe2 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7010f48b rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x83c44ed0 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x8db45b29 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9898dda1 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xa0147e8c rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xb65245cc rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc89f7638 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xd1ce93f0 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x13fb9d06 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x512af15b wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0xf26c7bc2 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x05294fba wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x1d18c5c5 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x236dd418 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x2be25564 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x2dcbcca5 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x2e3c167b wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x375f0594 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x40b55704 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x4f1b0444 wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x53dff67d wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x54d09d87 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x554463d6 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x73bf77b1 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x8a9c6438 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x92c9a218 wlcore_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x94c704ce wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x9a3825a8 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x9d3a1a51 wlcore_wake_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xaf0bbd6a wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xaf5a8646 wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xb13232e1 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xbde1f083 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xc658af0b wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xe5b1088e wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xeb9931e5 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xfa22ecef wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xffb67396 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x1b886011 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x46976dbd pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x88395172 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x0969309c mc13xxx_get_num_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x3d9195df mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x65186ab4 mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x7b3fe730 mc13xxx_parse_regulators_dt +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0xc57c0ed5 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x6963df68 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd062bfe8 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd8333eea wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xd89c50bf wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xee0dfc62 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xf1181538 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0xc510bac7 wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x52c85a77 scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x7065470d scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x7c27431c scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x8f5dca6b scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x96635c1f scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x9c385b5e scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xe14425f4 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x0fb51275 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x2e6a8a4b fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x4f403b1c fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x534d30cc fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x567c0a64 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x5ed64644 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x64c9f668 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x7597020a fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x7e558ced fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x846f7407 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x84b3d915 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xa3fff03a fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xbd798a8f fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xc9ef9ca6 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xe8325e48 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x032fb243 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x329ad5e6 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x6c3ebd79 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x7c3ea232 iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x9631489d iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x9c4e132d iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x00be1906 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x14269975 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1aa89957 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x21bf924f iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x252dcae5 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2b8e3954 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2eb88f8b iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3653cdba iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3cc33578 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3cfa9ec6 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3d70cf39 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x49cf8837 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4a4e3520 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4c082dd4 iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x58644ffe iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x599b01ac iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6b58d83e iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76d48cc5 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7d032e17 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7e4e2c26 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8175441b __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8383783b iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8755cdba iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x87fb28c1 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8cb248a7 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9a002b89 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa3e219ab iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa4832cf0 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa4fa68ca iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa6365bfb iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa9eec7a1 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xbd027408 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc0cb02f4 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc44ada27 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc626c49f iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc76e2af1 iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc986ee3f iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xccddfdef iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd018a18a iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd6246628 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xda5d5358 iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe3216fc9 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe9f8fc8b iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf1444d4e iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf89471ae iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfaeadfcd iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x1099d6a5 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3acdea6e iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4b7c66f8 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5066f958 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x8b2b328d iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x91e0a2c7 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x9ea2c1bc iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x9ef87e0d iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa583e421 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc3bb47af iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xcabcdc43 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xd0397b37 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xda9efd77 iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xe0a75fc7 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xeaa118b5 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf67d6ac1 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xfff9e234 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x00a076d4 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x013e6eb1 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x02400fd6 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x054a458b sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0c506d52 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x12b77d66 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x12f13bda sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2c622f59 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x58f3399e sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5f0e2bed sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x653e9031 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x70b7179d sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x728c906a sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x74523253 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7dcb708c sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x86762c40 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9018729f sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x942c783d sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa3d6cde6 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa696aaad sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc1fac182 sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xec47a005 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf147867e sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf513227e sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf724e673 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x5c4f8fd1 scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x5d2c6383 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x68ad9d3c scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x6d374057 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x89479d94 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xc1ec839c scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xd0401b16 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf0f8c5d1 scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf9254527 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0353bf30 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x05777af5 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x080306fd iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0f139126 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x100bd151 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x18dce89a iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x1a61b880 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x1c9a2a13 iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x1d76ae93 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2234e4d4 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x2d381216 iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x337a1fcb iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x3e76cd74 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4007fc31 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4516d132 iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x460b1671 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x4c1bd7d2 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x66810682 iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6d09d57a iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6f8adb7d iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x856f8bbb iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8a850c29 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8e226917 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x989a0f72 iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xab4412ec iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb4f646a2 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xce59af88 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd2a3b4f4 iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xec6de778 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xef1ba16b iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf16e0cec iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf46affd2 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x263f462f sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x67b2f959 sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0xa541fba7 sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0xab8b76bb sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_spi 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x24405e38 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x26694852 srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x538946d4 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x82a8b4e8 srp_rport_del +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xf98dc6a1 srp_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x046837fc spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x180132a8 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x458d1c92 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x7beaf3c4 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xb5559f6e spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xb642e0c0 spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x0a40f650 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x255aa69b dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x36570dcb dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x7aa17ef7 dw_spi_xfer_done +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xa9d29d95 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x2125c535 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x043993b8 CsrUint32Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x063ce8fd CsrMemCpySer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x1a2f4153 CsrUint16Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x1b112e5a CsrUint32Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x20ed5d24 CsrMemCpyDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x25d71627 CsrWifiEventCsrUint16Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x2e32b4fa CsrWifiEventCsrUint16CsrUint8Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x35ee09da CsrWifiEventSizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x4a44d987 CsrCharStringSer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x4b702d3b CsrWifiEventCsrUint16CsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x5bef3871 CsrCharStringDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x71d701be CsrThreadSleep +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x7b2ce3fd CsrWifiEventCsrUint8Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x80cc6f40 CsrTimeGet +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x83653836 CsrWifiEventCsrUint16Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x92b87e22 CsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x99c3117b CsrWifiEventCsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xa914520b CsrMsgConvFindEntry +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xad2a353d CsrWifiEventCsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xb39bdd0a CsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc47d071c CsrMsgConvInsert +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc79e2f1d CsrWifiEventSer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc9691b01 CsrMsgConvInit +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xde3f2c0f CsrWifiEventCsrUint16Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xdf5f5f67 CsrUint16Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xe258383d CsrWifiEventCsrUint32Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xe2e90b5d CsrMsgConvCustomLookupRegister +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xe90cfd08 CsrWifiEventCsrUint32Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xeb229892 CsrWifiEventDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xfd995761 CsrWifiEventCsrUint32Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xfe9f5512 CsrWifiEventCsrUint16CsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x12e6177b oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x14523351 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x14c4b6b0 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x3c6ec396 oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xca667daa oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xeb94de18 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xeec034fb oslec_free +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0xceee3079 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x182d4a32 imx_drm_device_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x1cfe024a imx_drm_crtc_vblank_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x2633f37c imx_drm_remove_connector +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x3ce501a7 imx_drm_add_crtc +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x419b08de imx_drm_handle_vblank +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x5a892a90 imx_drm_device_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x5f056ff0 imx_drm_crtc_vblank_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x6ac7ae1f imx_drm_remove_encoder +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x7977dea1 imx_drm_encoder_add_possible_crtcs +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0x8d51edf4 imx_drm_crtc_panel_format +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0xc2a50ddb imx_drm_add_encoder +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0xd652b5a4 imx_drm_remove_crtc +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0xdab48b4e imx_drm_add_connector +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/imxdrm 0xdbb82f0f imx_drm_fb_helper_set +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x04fbb542 ipu_cpmem_set_high_priority +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x0ea5f413 ipu_idmac_set_double_buffer +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x13952dfe ipu_dmfc_enable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x15ec2ba5 ipu_di_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x199bd5c8 ipu_dp_disable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x1ba497eb ipu_pixelformat_to_colorspace +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x21a98c8d ipu_cpmem_set_yuv_planar +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x21ec04b0 ipu_srm_dp_sync_update +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x25aaf41a ipu_ch_param_read_field +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x26e769cb ipu_get_cpmem +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x2de111c1 ipu_dp_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x3166aec7 ipu_dmfc_disable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x32d1b28a ipu_cpmem_set_yuv_planar_full +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x33a2a6fe ipu_cpmem_set_image +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x3e86ea72 ipu_di_get_num +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x40e9212b ipu_dmfc_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x43f35303 ipu_idmac_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x4575b0dd ipu_dc_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x4c179b49 ipu_dp_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x51475e87 ipu_dmfc_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x52ebe4ef ipu_idmac_disable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x53de277c ipu_di_enable +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x5c82a61c ipu_di_get +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x69cae0f2 ipu_idmac_enable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x6ce1d2e2 ipu_cpmem_set_fmt +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x7068e939 ipu_dc_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x7666bda8 ipu_cpmem_set_yuv_interleaved +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x920d4538 ipu_ch_param_write_field +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x94c092a3 ipu_cpmem_set_format_passthrough +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0x9f38e177 ipu_dp_enable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xa4b0cabd ipu_dc_disable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xa6aae344 ipu_idmac_channel_irq +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xa75de3a7 ipu_idmac_put +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xb228bf1e ipu_dp_set_global_alpha +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xb94ca95a ipu_dmfc_init_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xbfaef745 ipu_cpmem_set_format_rgb +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xc848c5d7 ipu_dmfc_free_bandwidth +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xc921446a ipu_di_init_sync_panel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xc97e7a0f ipu_di_disable +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xcb6d484e ipu_module_disable +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xd2f1a2a6 ipu_module_enable +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xd5055dd9 ipu_dmfc_alloc_bandwidth +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xd9acb0dc ipu_idmac_select_buffer +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xe300a959 ipu_dp_setup_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xe6243c52 ipu_dc_enable_channel +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xf7d99d69 ipu_dc_init_sync +EXPORT_SYMBOL_GPL drivers/staging/imx-drm/ipu-v3/imx-ipu-v3 0xf9ed222e ipu_dp_set_window_pos +EXPORT_SYMBOL_GPL drivers/staging/rts5139/rts5139 0xbd5a0e51 rts5139_usb_ids +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x0294216b synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x0e81c76d spk_serial_out +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x115c5b09 serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x14f06fe7 spk_serial_in_nowait +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x41a160e5 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x4449e1dd synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x470b0611 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x475e158a synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x48b9635e synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x4a8c0fd8 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x5a1d58f8 spk_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x640ecc0f spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x86442336 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x8e146195 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x917a1270 spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x93cad4c0 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x9a888082 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xaf5d671c spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb2978dbc speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb48956f8 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb73a5748 get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xbbd15a51 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xc766ae09 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe7cd4558 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe7e810f8 spk_serial_in +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x0b44d688 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x19008b87 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x4219cd60 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x49bdd07e usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x6fbc3331 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x79e6aa51 sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x7be2624f usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xa05365b0 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xab69a444 usbip_recv +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xb91d75eb usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xc6ccbb32 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xdcc7763c usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xeedb25fd usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x585ebaac n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x30c56b6b uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x5391e74e __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0x53c9a6b6 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x8dea9d2f usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xd3ea9f18 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x021edf54 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x066a59f4 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2e09263f usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x3ce8d5c9 usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x404005f5 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x5434b749 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x58877d69 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x5d3b423a usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x5f987aaa usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x6312d60d usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x692bcad8 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x79506599 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x7a4fc65b usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x89330948 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x94d7075a usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x9e47f402 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xaec4833e config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xb1cce28f usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xc2f97825 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xd209385c usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xd2ea2134 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xf474a207 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x3279cf7c ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x87630c0d ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x0d43d9d0 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x136c33fc usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x46a222c2 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4b9b8f08 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x8522d2de usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa195de8d usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xbf484779 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xcaa99253 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf2676d0a usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x58b241e3 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0xb85b20d6 musb_dma_completion +EXPORT_SYMBOL_GPL drivers/usb/musb/omap2430 0x6fb55e1f omap_musb_mailbox +EXPORT_SYMBOL_GPL drivers/usb/phy/isp1301 0x14d37d80 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0x812a4f71 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x177658f1 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x188c0ba7 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4bc0048d usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5ef41404 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x713bf442 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7dae2668 usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x83bb561c usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x9a467008 usb_serial_generic_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa7712fd4 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xaf5e1536 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb1225918 usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xb6f78a24 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xccbc6d8a usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd6f2cad8 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xdfed94a7 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xed3191a8 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xef073c72 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf91dbae9 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x04fe9242 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x103e8237 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1839a281 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x19f8dd94 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1b4f7e7e usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x366e3ff4 usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x430a02a7 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5bb2de33 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x67dd2725 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x70f60b25 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x738a639d usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7f4ac785 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x985947ac usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa7de10e6 usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xaaf794e5 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb787881b usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc956e72c usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdb594be5 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xedd230c7 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf2516698 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf63a5100 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xf69eb8be usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x18cb903c vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x1c0c10e6 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x51b07066 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0xdcbc4d71 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x02bce789 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x157b2d30 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x1b0ae8e4 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x1e7424f6 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x54303dbc auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x559dfdd5 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x845f43a4 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x94775360 auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x97601da5 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xd15fcde7 auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x0df8b4cc ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x101db1ce ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x3dfd3045 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x5034268f ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x588729fd ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xddc3127c ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xde06489b ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x797f4fdd fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xc220429f fb_sys_read +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x02620888 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x2abbacdf register_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x6790bdfc unregister_virtio_driver +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x6e59379a unregister_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio 0x87b95b1e register_virtio_device +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x0b9740f0 vring_del_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x2006a779 virtqueue_kick +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x200b0c32 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x25ecd695 vring_new_virtqueue +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x2fa65c70 virtqueue_get_buf +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x44b2f81d virtqueue_enable_cb +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x60707c97 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x71965f8b virtqueue_kick_prepare +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0x8e550887 virtqueue_add_buf +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xb2adc903 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xe1f4572b virtqueue_disable_cb +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xea5ec4f4 virtqueue_notify +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xeab1a162 vring_transport_features +EXPORT_SYMBOL_GPL drivers/virtio/virtio_ring 0xff05fa13 vring_interrupt +EXPORT_SYMBOL_GPL drivers/w1/wire 0x2d84e1eb w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x623568b6 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x786318ea w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x8522d718 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x87d0a2f0 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xc27f991d w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0xd7d4afe4 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0xea8fa289 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0xf3376904 w1_touch_block +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0xd3b36843 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x024c970d dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x21f13615 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x38eff230 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xc6dc8c2f dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x092cf98e fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x1286ad5a nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x16cc8785 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x213df6f4 locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x22c556aa nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x6da87956 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x77e35ccc nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa999beef nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xcb549ae2 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xf2b2294d lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xfb2fcd55 lockd_down +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x05592e84 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x058190a8 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0602b580 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x092bd23a nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x09df73d2 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0adb8a5d nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0b312b0f nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0fb25b8b nfs_sb_deactive_async +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0ff48450 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x10abb923 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x11b8653a nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x12d181a6 nfs_generic_flush +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x143fa0ef register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1a4c2547 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1c7daf5c nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1e9dff73 nfs_writedata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1eab4c92 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2278f59f nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x26069e3d nfs_initiate_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x262dc66d nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x26884ff7 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x271b5066 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2b645959 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2c12b067 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x30cd3a3c nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x328cfc81 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x34af6f25 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x35beab97 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x35dc676f nfs_writehdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x35f73707 nfs_pageio_add_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x37fb379f nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x38d55a5b nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x39e05ac3 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3c2d014b nfs_generic_pagein +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3ca31f35 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3ceb13a6 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3d4b3048 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3dce20d2 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3f2690f2 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x42f2c81f nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4302803d nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x45c32cfc nfs_pageio_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x468eb0f7 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x46f4f114 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4778f4a1 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x498bb42c nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4cff1a4e nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4ea85e9f nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x51892d61 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x54b718f7 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x54c0a229 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5902e82c nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5d0789c9 nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5d8464c0 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5e1d863a nfs_sockaddr_match_ipaddr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x63bb288e nfs_file_splice_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x65d247b5 nfs_readdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x69a3a8b2 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6ac8302f nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6e573e17 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6f360a41 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x736dc79b nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x746858bc nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x789d8f22 nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x78c55892 nfs_dns_resolve_name +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7e4ffec7 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7e9fb01c nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7f235e90 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x805f1017 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x807d8239 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x85090292 nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x855361ee nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x880a2a07 nfs_file_splice_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x89223d9c nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8992dc12 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x89bc5a64 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8a043ef1 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8b05219c nfs_file_fsync_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8b59b8be nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8e5f1bfa nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x90a5530f nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x91d1fe52 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9338250f nfs_put_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x944e6d34 nfs_pageio_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x95478d4c nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x96d21cdd nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x98c05ffc nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x98e047ba nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9c1dce31 nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9d374ab2 nfs_file_flush +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9e0bd18e nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9fef442c nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa0dbbd42 nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa2488c40 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa46e1b59 nfs_fscache_set_inode_cookie +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa5be6989 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa68d9808 nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa6e0d607 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa6f33376 nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa79a2276 nfs_initiate_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa8d2d1ce nfs_callback_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa8e9e1ae send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xaaa14361 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xab37b720 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xaba0448f nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xace94d40 nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb07f00eb nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb207d624 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb7c08c3a nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbcd74268 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbf350d8a nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbf941764 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbf9ddb21 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc2bccd57 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc5ef47d5 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc7fe964c nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc8b67de6 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcaae067f nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xccf6fba7 nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xceb133b3 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcfb282f6 nfs_readhdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd145d87a nfs_writehdr_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd61c759d nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd9a5762a nfs_setlease +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xda21e620 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xda23a799 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdae9b5d7 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdd8f7598 nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdfab0b79 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe15ae1db nfs_readhdr_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe469f732 nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe696ea75 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xeb07cd9e nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xece0874d nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xef2079be nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xef3959e9 nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xefce8de0 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf022fbe2 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf045dd2c alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf18ffbe5 nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf471e453 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf7208ffe nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x02856711 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x0e6657cb pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x0e80317b pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x0ff9a02c pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x128fa8d8 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x20012f05 nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x239c0329 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x36d38598 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x3fee5bb2 _pnfs_return_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x4002da71 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x40395c62 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x40861d3d pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x4205519d nfs41_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x6d8f1777 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x7bf6eabf nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x7c3ea6c9 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x7e20e768 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x821c4dfe nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x84df9a01 nfs4_insert_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x8f1743e3 pnfs_writehdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x9f449002 pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xa19d19e3 nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xa1cc83a5 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb1c9f9ec pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb43cbde8 nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb6cd5a3d pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xc313f17f pnfs_readhdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xc39cdb9f pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xc6330c75 pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xcbf38f84 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xd9f90c23 nfs4_proc_getdevicelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xea674bbd pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xed15fb41 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xf4d76420 nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xf52af784 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xfb8af70f nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x3b41cdfa nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x4332310e nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x3700d603 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x399f880a o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x82a9c211 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x8fdea471 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xab081e4b o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae8e6777 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xc3679d7b o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd859ac8c o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xfb738283 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x1c4a7aac dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x6ad52df6 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x8ee6afc8 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x9e6c9099 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xa7cbd969 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xe0ebf57d dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x025e2d69 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0f13ca9b ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x16b2e575 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4145d92a ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x5469ce31 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x7083dbd5 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x88687b78 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x89502fe7 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xb4bd060c ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdc823ea4 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe2bd47db ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe40cffce ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe417d940 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x5cd651c8 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0xfeaefed4 notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x021957e1 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x0f8a2742 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x201d8ea3 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x29fa419f decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x027ebe12 garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0x44904618 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0xd9ecd48e garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0xda8d1b22 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xe15b3028 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0xe2bf7d65 garp_request_leave +EXPORT_SYMBOL_GPL net/802/stp 0x2a3eaabe stp_proto_unregister +EXPORT_SYMBOL_GPL net/802/stp 0xabe2b190 stp_proto_register +EXPORT_SYMBOL_GPL net/9p/9pnet 0x586e90c4 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0xbeb48bb9 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x50754510 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0xe2c6bb26 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x10faa1d8 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x947117ee bt_debugfs +EXPORT_SYMBOL_GPL net/dccp/dccp 0x02ef21d2 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x09a123b7 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x22af130e dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x243f6934 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2a012ddc dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0x2e27df26 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3658b6da dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3b61504f dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3bed242c dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x47007cfd dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4a036fa5 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4a8b6785 dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4e7cb09a dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4e86e099 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ec35231 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ee77e7a dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x557d9ef7 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x59047ef2 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x681b17c5 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x751efbbc dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7ae135f4 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7bfed30b dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7d8f2e46 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x860b5c96 dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x87541de1 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x90c71192 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9598d24d dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9665ccfd dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9e088991 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbd2854f2 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc425e540 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe1acabeb dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe3699f4f dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf2bd45f4 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf2dda616 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf3017e21 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf5fd163a dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf7974f35 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x20e7cff2 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x2c58feb3 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xa655fdc9 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xb8fe3680 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xbeb02163 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xf332bc85 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x68d7ef27 unregister_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0xd9059405 register_switch_driver +EXPORT_SYMBOL_GPL net/ipv4/gre 0x2b3da39b gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0xe9ca9599 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x07cf4ba3 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x187ad684 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xc0327636 inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xc732614a inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xcdfb9674 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xea75f2ea inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0xfdedbf7d arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x793923cc ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x2e5dc619 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x13e520e6 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x7522cdfc tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcbf08593 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcdc6c845 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xe3a42ef9 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/xfrm4_mode_tunnel 0x5cde8b4c xfrm4_mode_tunnel_input_register +EXPORT_SYMBOL_GPL net/ipv4/xfrm4_mode_tunnel 0x6280114c xfrm4_mode_tunnel_input_deregister +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x2237a8d4 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x4393250c ip6_tnl_dst_reset +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x5ed652c5 ip6_tnl_dst_check +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x8fc07ee8 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0xa488a604 ip6_tnl_dst_store +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0x58187a02 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x6eb85693 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x86b2ef1d nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x111c6159 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x24e74726 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x40becdff l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x6e9a2376 l2tp_session_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x740dc749 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x8436feeb l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x9d153c92 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xb0150792 l2tp_tunnel_sock_lookup +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xb1d84517 l2tp_session_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xb82b60df l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xc2789c98 l2tp_session_find_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xce231c14 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xd9f1363d l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xe32131e0 l2tp_tunnel_sock_put +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x2a74d5d3 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x2fe582d4 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x4186f0b8 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x49fab4cc ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x6eb3453d ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x79c8da0e ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x8670c653 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xb07857c9 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xbdfd75b4 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xc4c6a985 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x397f6231 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x6344eaf6 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7762965e ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7924b6de ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x80ee118c ip_set_nfnl_get +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x81fff2d1 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x883d6572 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x8a9150d5 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x8b6efa3e ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x8c91b069 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x9e98722b ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa293f8a6 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa2d623f3 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xba2e31c8 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xc3b062db ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xd5f8da03 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xd9eb1084 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xf5ff43d2 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xf835a237 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xfa77a3d9 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xfda3ec7a ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x05084853 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x0770352b register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xa2e4df7e ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xeabbd82d ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x001c53ec nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0b640814 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0c6ee9cb nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x127e14ad nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x12c831c7 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x16520b28 nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2048762f nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2060d5b5 nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x22eaadaf __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2810dcdd nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x289c3714 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x29cf2732 nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2c0414ff nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2c4c945f nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x36f01b5d nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37386cac nf_conntrack_hash_rnd +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3bbafff4 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f79c020 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x40708a70 nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x40ba9c59 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x45b396b9 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x496d435e nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4b0239de nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4fbb16ff nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5932e9dc nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5d0bcc30 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5e00a85c nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x640c387b nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x693c3961 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6a7ebe74 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6b1c9262 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6feeaed5 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x74bfcb74 nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78d034a4 nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78d4182f nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x805adc78 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x88345e11 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x89262b68 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x901bbb7b nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90b54fc5 nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x95af874b nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x975261bc nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa564033e nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa5d19ca5 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa76d09a6 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xab3d1f95 nf_ct_untracked_status_or +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xac8470a7 nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaceecdef nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xad1bb027 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb22b53e7 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb23f3373 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb52c0153 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb7c17e7d nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb8848f40 nf_ct_dying_timeout +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbb6a6919 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc0240dd4 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc0a15a1a __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc1c3fe1a nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc40f284c nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc535b420 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc66ec36c __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc830e3b9 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xca7c4037 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcafab73f __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd26553ce nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd6fc271e nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe3d6c042 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe64113eb nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xea387741 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xee501bdc nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf50e6386 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf664a4bb nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfc8e4bbf nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfdcf2e7d nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x01175699 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0xbe742158 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0xaa5a0713 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x14d27834 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x48abbc22 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x78159510 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x8bb2de7f nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xa2817213 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xb6473256 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xb7e36c1b get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xb8f6ae88 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xdc2c8292 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe3a309e4 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xd588ba40 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x1e3e969c nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xc127519b nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xf6578ba8 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xf81502ea nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x4e26e077 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xc39d7484 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x13643ef4 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x243c6989 nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2db30353 nf_nat_sip_seq_adjust_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x2e2d4b24 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x32bc11c7 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x3873e3b4 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x5def6ad3 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x60b93ff3 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x703274e2 nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x9446e36b nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xa5b7d857 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xcca2b5a8 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xfdac634a nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x3ea831ed nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x12dcfec0 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x0095a0ca nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x0d9bae4b nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x131f636c nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x1c8d93d8 nf_nat_set_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x1fe26158 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x383929b2 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x5498bc75 nf_nat_tcp_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x7e9df202 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x8c0076e2 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x8c4362b3 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xc2a8fd8a nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xfe6081f5 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x13817e01 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x18a33d75 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x4ac08259 nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x850a0d43 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xd342397a nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xd8f5a219 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x21f6bba6 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0xa2ffb2e1 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0xbecf5d14 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0xd6ec3db4 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0e4fc187 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x24443f78 xt_hook_unlink +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x298e4cbb xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x4e83e665 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x50ceb061 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x54586c46 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x65193492 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7c55a483 xt_hook_link +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x807d2b2c xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x8cf79ab7 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xac45a1fe xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xc0abb3e8 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xfc86ae38 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xfee3d9bd xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xc48ebdb2 xt_rateest_put +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xe88640e3 xt_rateest_lookup +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x0262450f rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x039dcc0c rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x0eaac038 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x11053958 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x13841b73 rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3092d1ac rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3d253488 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x4499a754 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x50cbe7b3 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x56136779 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0x56b4760c rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x707ea86b rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x791a5f2e rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x8f1751ab rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0x93a64777 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x94f9195d rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x96bc6b0f rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x96fafe85 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x98b6ea65 rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0xc2dab779 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xc642cc2c rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0xd6c25da6 rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0xe11bd4dc rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0xeffc0112 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0xf468530e rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xf722973b rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0xfcaf8511 rds_message_put +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xeb19ab4e rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0xfcba4ef5 rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x1285df19 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x137f90fd gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x3281a1ca gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x3eff1bb9 gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x4af6ad45 gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x86d42d83 gss_mech_get_by_OID +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8b56a642 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xd3ffac5c gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xe84b8c33 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf37d304f gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xfce70562 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x008f22a0 rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02971fa0 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02ec0743 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x032d0027 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x06a9fd30 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0df1af70 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12c586c5 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x13393713 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x141bdefe rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14241519 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1535c9c9 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x17048778 rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x181f0b9f rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1cb447f3 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f6d1069 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f82427f rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x220af4ce cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x22b10be6 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x230b7ff8 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x246cc34a rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x25b5a75d xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2750ed01 rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x292d522b xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x295104b7 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x29f14215 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f24296e svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f8ebbe0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x30a5eea0 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x33311e66 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3479d6e0 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x34b81a12 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3610b26e rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3645ae59 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37231b0d xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37ae3525 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x380f4da9 svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x38db6b42 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x39f02872 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3a0df865 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3a8952cb rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3bd0718a svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3eb9f86c svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x41ea7f2f xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x45d12165 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x48025a45 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x48490f7d xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4ae889d1 sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4bd05c5b auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4c892ccf xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d3d7c07 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5128e159 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53c794dd rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53cf1c17 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5402914e rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x544a4566 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x59685a8a rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ab00f7a csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b0a2945 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5d2c0957 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5f1ba3d6 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ff067e9 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x605a461f rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x613420df svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x620d5aa0 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x630386ed xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x644ad9f3 xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6470dfd3 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x64e9d1f3 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65af1fdb xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65e4a4c4 rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6629b1d3 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6834971d rpc_task_reset_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x692a87fd svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x69c1d052 rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6cb025f3 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6e44ce54 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7111ffc8 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7123c72c rpc_queue_empty +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73007879 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x733a48e4 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x73a63e47 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x75415e79 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x757dc73c svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x77272a22 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7d008fd3 xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7d928104 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7e7507fa rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7faef41e svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80a8fb9a rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80f744af rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x816710bf rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x818ee05e svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x841070de svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x855123a1 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8598701c xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x89078ab2 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b3bc73f rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c5b0745 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8d4d6e9b svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e588a6d svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x92c1131e rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x943185aa rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x94709df6 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96f07b6e svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x98b75d64 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x98bad59c rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x99103981 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x991e1db2 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ab3d29e rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9e4d3d78 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ee7f8c3 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa0052ea4 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa2710e00 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa2fa11a2 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa7a85624 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa8944283 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa92edcf5 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xadc54620 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafde2969 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb02cddf1 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb25823c6 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb303ffef rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb4d94854 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb4f242ba xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb5acfce7 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb5cd9b93 svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbaa9ba44 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbc11f0c7 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbca707c4 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdf8b1f5 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbeec43d0 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc145d169 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3194b4c sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3b18efc svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc490084d rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc85d9d01 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8701e06 svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc87758bc rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8f87590 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9168be3 xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9335773 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcb9bc95f svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcdcb0545 xs_swapper +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcf5b3f9b svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd0cdb8e3 rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3fb9084 xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5df592f rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd8fba596 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd9feca42 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdb94b2a6 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc0384e9 sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdea87bc5 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe0c4fded xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe16545cc rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1ac2bb8 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe2475d76 xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe3fa19e2 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe488a358 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5c19b74 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5e2c58e rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe91ecc1b write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe98d40ae xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe9f9f727 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xecef23d1 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedd7c155 cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xee000848 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xef0bc5e7 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xef28f39c svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf1f614e4 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf3df6400 rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf55d6608 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf7545f66 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf78799dd rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfafc4316 sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfb434220 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfb683422 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfbb011d3 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfeaa956c xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xffe0fe27 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/wimax/wimax 0x0992d910 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x29af871d wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x2af33bda wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x4c6eff1a wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x53644c42 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x635758f9 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0x8cb036d2 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x97488119 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb1b98c22 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb5819814 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xc02a5db6 wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe27e6e44 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe589c2e7 wimax_dev_add +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0043c740 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x4b198699 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5cb74cce cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x99c8234e cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa06974b0 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa12900f3 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xa7627f85 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb5c55aa9 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xed3350b0 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf2e38f96 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf7d095ff cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x3108ea46 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x4d4fd5f1 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x55ea62f1 pskb_put +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xaeea3073 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xd05dc2a3 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x2d2369b4 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x7f33cf09 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x8be9971a ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xfde07a17 ipcomp_input +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-88pm860x 0x3ad58b42 pm860x_hs_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-88pm860x 0xfc03685d pm860x_mic_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ab8500-codec 0xa65d7fba ab8500_audio_setup_mics +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ab8500-codec 0xef6769a6 ab8500_audio_set_ear_cmv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x1f8ea94a arizona_out_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x2bb78b95 arizona_init_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x336ddc5d arizona_init_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x4254257b arizona_in_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x5a6681c4 arizona_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x5e8e6067 arizona_mixer_texts +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x73f9f1d5 arizona_lhpf3_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x78355a2b arizona_mixer_values +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x7e59c88a arizona_out_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x93ed4d8b arizona_in_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x9f17ed65 arizona_out_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xa11edaf0 arizona_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xb65ecf5b arizona_lhpf4_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xc0505198 arizona_set_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xc9c29637 arizona_mixer_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xd58efa61 arizona_lhpf2_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xe466e0fc arizona_lhpf1_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xf23a2c4b arizona_in_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cx20442 0xeb7400c2 v253_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98095 0x2c013edc max98095_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x4511665c max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tpa6130a2 0xb0ca0162 tpa6130a2_stereo_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tpa6130a2 0xd18c454c tpa6130a2_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wl1273 0x2e5c2873 wl1273_get_format +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x787849f8 wm_adsp2_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0xaec7ed27 wm_adsp2_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0xb5103afd wm_adsp1_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x1302df76 wm_hubs_set_bias_level +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x460a39ff wm_hubs_hpl_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x5cd7eb9b wm_hubs_dcs_done +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x621305d1 wm_hubs_update_class_w +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x6f2a387c wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x7fd65a14 wm_hubs_hpr_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xd2e35ca9 wm_hubs_vmid_ena +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xe6ba5467 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xffb2c4ce wm_hubs_handle_analogue_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x46c05c3a wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x676dd1f8 wm8350_mic_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x4f9e0d71 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0xbd66e546 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x173b7fba wm8958_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0xb0457141 wm8994_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8996 0x49e1055a wm8996_detect +EXPORT_SYMBOL_GPL sound/soc/fsl/snd-soc-imx-ssi 0x23424495 soc_ac97_ops +EXPORT_SYMBOL_GPL vmlinux 0x002ff930 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x00521085 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x0058d8a7 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0x00632780 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00c1b8fe ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00d48f33 omap_usb2_set_comparator +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00febca5 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x010039c5 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x01010c6d klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x01158b4a tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL vmlinux 0x011cf028 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x0120dc15 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL vmlinux 0x01377011 vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x0148adb6 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x0152cd90 opp_find_freq_ceil +EXPORT_SYMBOL_GPL vmlinux 0x0169eff4 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x01a134d0 clk_round_rate +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01bf1c11 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x01c6cb0c cpu_cluster_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x01dcab2b synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x01fd3ae3 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0x020b12d9 omap_uninstall_iommu_arch +EXPORT_SYMBOL_GPL vmlinux 0x021d8543 of_property_read_u8_array +EXPORT_SYMBOL_GPL vmlinux 0x023d6281 of_clk_add_provider +EXPORT_SYMBOL_GPL vmlinux 0x024f58fa ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x0279c86f dapm_reg_event +EXPORT_SYMBOL_GPL vmlinux 0x02c8c6d9 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0x02ce0d6d sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x03318107 devm_pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x0363ffae tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x038b3a66 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x03ab63c9 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x03d1688f regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x03efa5d4 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x03f3dba1 snd_soc_jack_report +EXPORT_SYMBOL_GPL vmlinux 0x04222124 blk_queue_bio +EXPORT_SYMBOL_GPL vmlinux 0x04455000 omap_dm_timer_get_fclk +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x045652b0 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x0465a073 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x04841b2e imx_pcm_new +EXPORT_SYMBOL_GPL vmlinux 0x048b5f8d twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x04a79848 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04c4f603 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x04c5a04d sec_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x04e1b99f snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL vmlinux 0x0503eaf4 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x05336df8 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x053c6ba7 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05571cde vchan_tx_submit +EXPORT_SYMBOL_GPL vmlinux 0x056323f4 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0x0584ced4 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x058b582a vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x058e567f raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x059a831f mtd_get_unmapped_area +EXPORT_SYMBOL_GPL vmlinux 0x05ae262e regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x05cc49c1 ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x05d08627 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x05fd6824 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x0626b4a4 mtd_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x062fc169 xen_hvm_resume_frames +EXPORT_SYMBOL_GPL vmlinux 0x06438115 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x0656d256 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x0665ddbb crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x06863eba pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x069a8322 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x06d549e6 pinctrl_free_gpio +EXPORT_SYMBOL_GPL vmlinux 0x06f22ca2 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x0718e143 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL vmlinux 0x073ee740 blk_queue_flush +EXPORT_SYMBOL_GPL vmlinux 0x0762403c edac_put_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x0770d119 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x079a668e spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x07b21f85 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x07b291d1 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07d44a0d dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x07f9d3ea edac_mc_add_mc +EXPORT_SYMBOL_GPL vmlinux 0x082ba8a7 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x085b9cd8 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x08680dc4 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL vmlinux 0x086f1c78 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x089ac2aa dm_disk +EXPORT_SYMBOL_GPL vmlinux 0x08a4c490 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x08affb3c get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x08b72dfa clk_register +EXPORT_SYMBOL_GPL vmlinux 0x08cb21ba dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x08e71e33 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x0903100e __init_kthread_worker +EXPORT_SYMBOL_GPL vmlinux 0x090864c2 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x091b61c6 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x09240cf7 cgroup_next_descendant_post +EXPORT_SYMBOL_GPL vmlinux 0x092c2a7a irq_domain_add_tree +EXPORT_SYMBOL_GPL vmlinux 0x093a66f4 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x09469482 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x096760dc kill_mtd_super +EXPORT_SYMBOL_GPL vmlinux 0x096fabd2 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x09c21e10 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x09e913c1 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL vmlinux 0x09fd156c platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0a34ba93 irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x0a37ff4b ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x0a55b516 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x0a5bad0d zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x0a5e1ecd rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x0a6a7a11 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x0a74a7e0 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x0a7ea14e inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x0aca9b8c sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x0acd6e2b snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL vmlinux 0x0ae1f772 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x0af4b7ac gpiochip_remove_pin_ranges +EXPORT_SYMBOL_GPL vmlinux 0x0afd4610 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b0c1b2d hwspin_lock_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x0b4085a2 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x0b59390b __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x0b79702c ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0x0b799df2 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x0b88db5d skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x0b9eecab attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x0bae62b1 ktime_get_monotonic_offset +EXPORT_SYMBOL_GPL vmlinux 0x0bbae511 return_address +EXPORT_SYMBOL_GPL vmlinux 0x0bd93482 bio_clone_mddev +EXPORT_SYMBOL_GPL vmlinux 0x0be29462 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x0bfa3a19 rcu_idle_exit +EXPORT_SYMBOL_GPL vmlinux 0x0c0c015e ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c638453 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x0c71a3a3 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x0c7cf43a srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x0c8338d5 omap_dm_timer_set_prescaler +EXPORT_SYMBOL_GPL vmlinux 0x0c90cfb5 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x0c9feab0 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x0cc84a70 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x0ccc49c1 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x0cfd4a90 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x0d5d9ed4 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x0d8a21fb regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0x0d8f1f03 security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x0dfc5c38 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL vmlinux 0x0e011107 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x0e1a319c ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x0e27e7a0 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x0e34cda4 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL vmlinux 0x0e41ae74 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x0ebf431b rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x0ec83a5b bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x0ee3eb35 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x0eeb97db ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x0f150a48 omap_dm_timer_start +EXPORT_SYMBOL_GPL vmlinux 0x0f3c3a86 __hwspin_lock_timeout +EXPORT_SYMBOL_GPL vmlinux 0x0f5296ba md_stop +EXPORT_SYMBOL_GPL vmlinux 0x0f751aea input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x0f79804f sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x0f8479b7 omap_dm_timer_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x0faf3e34 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x0fb0165f ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x0fb5a8ba dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x0fc01e9f static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x0fc4c2d5 __rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0fd28728 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0x0fd4cf2c led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x0fd889ed watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x0ff3e891 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x10189fd3 clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x101a646a get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x10291853 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x102c45c2 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x1053e7ab mdio_mux_init +EXPORT_SYMBOL_GPL vmlinux 0x1061e8c1 sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x10b762e2 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x10c9d678 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x10f16a59 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x110010a7 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x111f3697 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0x1122d727 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x11301f88 sk_unattached_filter_create +EXPORT_SYMBOL_GPL vmlinux 0x11333e5f omap_dma_filter_fn +EXPORT_SYMBOL_GPL vmlinux 0x113c6ae1 proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x1172ce54 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x117811de class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x11965721 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x11d39687 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x11df75d7 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x11e65371 sdhci_get_of_property +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x11fd778f __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x121ed3f3 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x12223b19 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x122e97e3 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x1231221e relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1258d9d9 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x129846e9 omap_dm_timer_write_counter +EXPORT_SYMBOL_GPL vmlinux 0x12c439b8 tpm_store_cancel +EXPORT_SYMBOL_GPL vmlinux 0x131a5ed7 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x131db64a system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x13291e69 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x136a9696 snd_soc_limit_volume +EXPORT_SYMBOL_GPL vmlinux 0x1382479e usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x138aff76 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x13aac7a8 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13b89dee pinctrl_request_gpio +EXPORT_SYMBOL_GPL vmlinux 0x13d17da0 device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x142a8be4 of_clk_get_parent_name +EXPORT_SYMBOL_GPL vmlinux 0x143672b8 get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x145333fe sec_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x145c3460 exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x145d9875 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x1469556f lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x14804d49 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x14c224f2 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x14ccc660 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1525f36d __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x1545f4de register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x154ac889 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x154c65ed del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x1561f4b5 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x15799047 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15b9d4c8 bmp085_remove +EXPORT_SYMBOL_GPL vmlinux 0x15bceb17 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x15da9b5a extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x15f8c22f ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x16000a3c dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x1647e17e elv_register +EXPORT_SYMBOL_GPL vmlinux 0x1650bf27 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x1666b3cc blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x1674f388 of_property_read_string +EXPORT_SYMBOL_GPL vmlinux 0x167ce545 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x16837680 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x16e2ce94 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x17046f5e omap_mcpdm_configure_dn_offsets +EXPORT_SYMBOL_GPL vmlinux 0x170cca75 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x172cba85 ahci_stop_engine +EXPORT_SYMBOL_GPL vmlinux 0x1752f32a shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x1774adee invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x177c338d twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x178d12a8 ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0x17a651e2 device_add +EXPORT_SYMBOL_GPL vmlinux 0x17c60f87 __mtd_next_device +EXPORT_SYMBOL_GPL vmlinux 0x17cd6508 of_property_read_u16_array +EXPORT_SYMBOL_GPL vmlinux 0x17de6e19 pwm_disable +EXPORT_SYMBOL_GPL vmlinux 0x17e4f699 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0x18199d28 snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL vmlinux 0x183ed13f unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x1866cec2 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x1882e2a6 tpm_read +EXPORT_SYMBOL_GPL vmlinux 0x189ae5ff regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x18db97a3 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0x18e2c347 dev_pm_qos_remove_global_notifier +EXPORT_SYMBOL_GPL vmlinux 0x18e3b942 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x18ea72e0 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x191e5716 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x193d48e0 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x1966324f dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x1982d315 class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x1982eb1a debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19f16f91 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0x19f8f5b3 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x19fc7f60 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x19fddee0 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x1a046187 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0x1a082d69 max77693_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x1a08f13e hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x1a15ae0d snd_soc_default_writable_register +EXPORT_SYMBOL_GPL vmlinux 0x1a1d2dbe crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0x1a2f8217 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a449714 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x1a4f908e kick_process +EXPORT_SYMBOL_GPL vmlinux 0x1a5b41e1 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x1a65920b omap_iommu_arch_version +EXPORT_SYMBOL_GPL vmlinux 0x1a661b19 ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x1a9989e3 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x1ac3d2fc __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x1aceb9bd deregister_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x1ad83009 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x1ae0e135 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x1ae520b3 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x1af6f670 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x1b2df6f3 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x1b3261e0 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x1b34da1c dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x1b438301 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x1b52db1c probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x1b53aecf iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1b5837ce cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x1b6f96b5 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x1b78028c xenbus_dev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x1b8822d8 pinctrl_gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0x1b8f1ffb omap_dm_timer_request +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1b9d853b event_storage_mutex +EXPORT_SYMBOL_GPL vmlinux 0x1bbd504f dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x1bc5eebe pinctrl_gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x1bcf7d1e regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x1bfe9c6f ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x1c24dcf3 inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x1c41b986 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x1c5a04e0 irq_domain_generate_simple +EXPORT_SYMBOL_GPL vmlinux 0x1c5b1f28 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x1c62d07c thermal_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x1c825eb8 dapm_regulator_event +EXPORT_SYMBOL_GPL vmlinux 0x1c82db32 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c894694 ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x1cd37c4d kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x1ceb46b2 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x1cffc4df RSA_public_key_algorithm +EXPORT_SYMBOL_GPL vmlinux 0x1d1182ca vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x1d149fa2 fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x1d158d50 snd_soc_dapm_get_enum_virt +EXPORT_SYMBOL_GPL vmlinux 0x1d174d11 snd_dmaengine_pcm_pointer_no_residue +EXPORT_SYMBOL_GPL vmlinux 0x1d29119c ci13xxx_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x1d58ae14 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x1d739e1c xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x1d77b0f8 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x1d7deb5d regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x1dbcb393 omap_iopgtable_store_entry +EXPORT_SYMBOL_GPL vmlinux 0x1ddf6291 omap_dm_timer_set_int_enable +EXPORT_SYMBOL_GPL vmlinux 0x1de054d5 of_clk_del_provider +EXPORT_SYMBOL_GPL vmlinux 0x1df44606 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x1e314b21 regulator_use_dummy_regulator +EXPORT_SYMBOL_GPL vmlinux 0x1e3a88fb trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x1e69bf62 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e83fee6 HYPERVISOR_physdev_op +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ec11edf snd_soc_platform_trigger +EXPORT_SYMBOL_GPL vmlinux 0x1f156e71 iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x1f32844b crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x1f37286e register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x1f49b331 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x1f4a3fca md_ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x1f5e20d8 thread_notify_head +EXPORT_SYMBOL_GPL vmlinux 0x1f69b92c mtd_writev +EXPORT_SYMBOL_GPL vmlinux 0x1f70580e regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x1f7ade6d evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x1f8544b8 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x1f8db7f9 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1f990c60 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x1fafbd43 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fed46b9 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x1ff306a1 sdhci_pltfm_init +EXPORT_SYMBOL_GPL vmlinux 0x2033c5e8 snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL vmlinux 0x20412c6b tpm_show_pubek +EXPORT_SYMBOL_GPL vmlinux 0x204e2c81 wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x208c2be7 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x20a08e15 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20c21caa cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x20c33369 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x21090512 mount_mtd +EXPORT_SYMBOL_GPL vmlinux 0x211974e8 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x21257ff6 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0x21709133 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x21943467 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x219cec1c xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x21c35962 snd_soc_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x21d412a2 relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x220de71a get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x22141194 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0x22216fed crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0x2244a4ae tpm_show_active +EXPORT_SYMBOL_GPL vmlinux 0x224bb46b __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x224c740d fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x2263b7b2 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x226cc0ac trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22c4811c snd_soc_get_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x22cc11eb ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x22f207e8 omap_dm_timer_write_status +EXPORT_SYMBOL_GPL vmlinux 0x230e0698 __clocksource_updatefreq_scale +EXPORT_SYMBOL_GPL vmlinux 0x231d70fc encode_bch +EXPORT_SYMBOL_GPL vmlinux 0x233dcae5 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x23553c27 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x236410d7 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x237b6336 posix_timers_register_clock +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x238be721 extcon_set_cable_state_ +EXPORT_SYMBOL_GPL vmlinux 0x23911ece fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x23c523fd unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0x23ccd04d register_mtd_blktrans +EXPORT_SYMBOL_GPL vmlinux 0x23f3e068 snd_soc_suspend +EXPORT_SYMBOL_GPL vmlinux 0x23f8d7d2 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x240580a9 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x24223977 nfq_ct_nat_hook +EXPORT_SYMBOL_GPL vmlinux 0x2424ea12 crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x242d6b2b uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x244c2350 twl6040_hs_jack_detect +EXPORT_SYMBOL_GPL vmlinux 0x246d18c3 of_regulator_match +EXPORT_SYMBOL_GPL vmlinux 0x247ef831 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x249b4fab clk_fixed_factor_ops +EXPORT_SYMBOL_GPL vmlinux 0x24a5b97b __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x24ad635e blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24d1e86d snd_soc_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x24e74fef cgroup_next_descendant_pre +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x24efc42a blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x24f84d9c snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL vmlinux 0x24fc46b6 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x25161b31 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x2541a979 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x25630348 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x257399e0 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0x2579a85d add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x2583d125 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x25b6021e rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x261d7e3b ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x26256b69 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x262c6470 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL vmlinux 0x262d8b3a regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x262f20a8 local_clock +EXPORT_SYMBOL_GPL vmlinux 0x26520970 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x265b8f71 devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x265d6d8a twl6040_get_hs_step_size +EXPORT_SYMBOL_GPL vmlinux 0x2664afb1 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x26b4ef27 ahci_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x26b71fb4 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26d002fa tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x26f8eb33 pwm_enable +EXPORT_SYMBOL_GPL vmlinux 0x270a9c60 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x270be830 inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x275843ef clk_fixed_rate_ops +EXPORT_SYMBOL_GPL vmlinux 0x275dc49b dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x27c2d6ef devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x27dbbe45 cred_to_ucred +EXPORT_SYMBOL_GPL vmlinux 0x27dfde63 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x27e7b8fb led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x27f4f029 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x27f5077e cpufreq_governor_dbs +EXPORT_SYMBOL_GPL vmlinux 0x28109712 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x28411f77 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x286468a4 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x2869ebaf regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x28a82da4 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0x28a903c8 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x28b3e88e power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x28bcdd2d invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x28c19ed3 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL vmlinux 0x28d2936a fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x28d4ae97 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x28f71964 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x29047f1a __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0x292326dc devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x2937db08 twl6040_get_clk_id +EXPORT_SYMBOL_GPL vmlinux 0x294a7dd2 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x294be737 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x2953f327 snd_soc_default_volatile_register +EXPORT_SYMBOL_GPL vmlinux 0x29724f57 crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x2979edb9 register_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0x2981f1ba xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x298bc4bd register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x29a25dad spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x29ecd1d0 cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x29edeeda iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x29ef6cdf usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x2a27c1ba crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0x2a382e3a hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x2a39edb4 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x2a3fb812 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x2a42b034 page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x2a4e47ae put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x2a5748c9 cpu_pm_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a813de0 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x2a9b189e perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x2aa9e21d clk_set_rate +EXPORT_SYMBOL_GPL vmlinux 0x2ac134ca mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x2ad1ece4 zs_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x2adfdf03 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x2b103cfa crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x2b2da26c ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x2b37897a perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x2b4c90bc shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x2b5a8e95 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0x2b5f3b75 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x2b7a6de8 syscon_regmap_lookup_by_phandle +EXPORT_SYMBOL_GPL vmlinux 0x2b84a4e8 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x2b87f715 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x2b8ffa37 ci13xxx_add_device +EXPORT_SYMBOL_GPL vmlinux 0x2babe81f __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x2bc36ddc snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL vmlinux 0x2bcf30d8 of_alias_get_id +EXPORT_SYMBOL_GPL vmlinux 0x2bdf8a24 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL vmlinux 0x2bed5ee5 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0x2bf99d0d mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0x2c020edd inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c316ac3 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x2c72db84 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x2c796ef3 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x2c7d9c64 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x2c7db649 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x2ca4ebcd regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x2cc20d1a ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2cea32ee unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x2d17a0e1 cgroup_taskset_size +EXPORT_SYMBOL_GPL vmlinux 0x2d1b02d2 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x2d3385d3 system_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d43a815 wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x2d583eab sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0x2d59c954 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x2d7040fb device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x2d84449c ahci_kick_engine +EXPORT_SYMBOL_GPL vmlinux 0x2da22a15 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x2dd9f8f8 amba_apb_device_add +EXPORT_SYMBOL_GPL vmlinux 0x2de33dee css_lookup +EXPORT_SYMBOL_GPL vmlinux 0x2e2360b1 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x2e2f1740 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2e3f4fdb snd_soc_bulk_write_raw +EXPORT_SYMBOL_GPL vmlinux 0x2e45e488 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x2e584001 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x2e75419a edac_device_handle_ce +EXPORT_SYMBOL_GPL vmlinux 0x2e9670c0 pl320_ipc_transmit +EXPORT_SYMBOL_GPL vmlinux 0x2e9f7d18 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x2ebb0c34 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x2ebe0ead sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x2ebe3135 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x2ec8092c tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0x2eebb4c3 ahci_set_em_messages +EXPORT_SYMBOL_GPL vmlinux 0x2ef6b5bf smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x2f1a6cb3 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x2f4113a2 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f4a9f00 find_mci_by_dev +EXPORT_SYMBOL_GPL vmlinux 0x2f4e9b72 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x2f72b3db sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x2f85080b scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x2fa63a09 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x304bbcd5 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x3068af32 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0x30693bb7 imx_audmux_v1_configure_port +EXPORT_SYMBOL_GPL vmlinux 0x308b733a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x30a4ad83 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30bf1e9b __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x3109b751 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0x3114fd14 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x31266931 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x313011fc fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x31709ca5 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x317b5e90 opp_disable +EXPORT_SYMBOL_GPL vmlinux 0x3193bfd3 snd_soc_bytes_put +EXPORT_SYMBOL_GPL vmlinux 0x31a820ed register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x31c0c2d1 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x31d7500a tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x3210e046 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x323ab44a atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x32553aa9 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x326d9556 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x327e481b sdhci_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x329bbbde timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x32b31a8c ktime_get_boottime +EXPORT_SYMBOL_GPL vmlinux 0x32c3cb4e class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x32c3cfef init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x32ca4962 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0x32d37080 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL vmlinux 0x32dde8aa tps65912_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x32e87603 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x32fbba7e usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x32fd447a monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0x3323c490 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x3335d7ec inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x334e7b29 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x336154ca rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x3386d53f da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x33a84421 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x33c99590 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0x341643ba omap_dm_timer_modify_idlect_mask +EXPORT_SYMBOL_GPL vmlinux 0x3431ca52 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x34367925 opp_init_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x34490d2a skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x347bd28c br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x347d16e7 __bus_register +EXPORT_SYMBOL_GPL vmlinux 0x347fd4b3 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x34a88e0a pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x34beffb8 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL vmlinux 0x352650ee gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x352afa61 inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x352b9938 skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x354cd123 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x3560bfbd jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x35783a61 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x358ff60f twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x35a5336c pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x35af1f5b omap_dm_timer_request_by_cap +EXPORT_SYMBOL_GPL vmlinux 0x35c9c46b __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x35d8a984 edac_subsys +EXPORT_SYMBOL_GPL vmlinux 0x35dfdcf3 snd_soc_bytes_info +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x36959c7b snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL vmlinux 0x3699f5b0 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x36a1a9ce pinctrl_find_gpio_range_from_pin +EXPORT_SYMBOL_GPL vmlinux 0x36abd308 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x36b4b8ab unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x36be8859 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x36c0e7b4 pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x3700154c pkey_hash_algo +EXPORT_SYMBOL_GPL vmlinux 0x37078605 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x37293061 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x37425690 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x374bf80f snd_dmaengine_pcm_set_data +EXPORT_SYMBOL_GPL vmlinux 0x375661b5 clk_prepare +EXPORT_SYMBOL_GPL vmlinux 0x375d9924 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0x378ba621 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x37a7480b ahci_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x37a9aa46 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x37c4c29d wm8994_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x37f2ecff single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x3820aa21 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x382ddef8 get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x38304edb usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x383c52d6 public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x38620e38 gnttab_grant_foreign_access_trans_ref +EXPORT_SYMBOL_GPL vmlinux 0x3863db49 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x388dda2f blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x388f6983 edac_device_handle_ue +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38aede2f queue_kthread_work +EXPORT_SYMBOL_GPL vmlinux 0x38c44639 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0x38e1a551 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x38e56b11 do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x399dafa9 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0x39a55799 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x39b84f0f omap_dm_timer_read_counter +EXPORT_SYMBOL_GPL vmlinux 0x39c97b1e snd_soc_get_strobe +EXPORT_SYMBOL_GPL vmlinux 0x39eb33a3 snd_soc_register_dais +EXPORT_SYMBOL_GPL vmlinux 0x39ed2352 spi_master_resume +EXPORT_SYMBOL_GPL vmlinux 0x39fe5afd usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x3a26ed11 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x3a4c6000 of_irq_to_resource +EXPORT_SYMBOL_GPL vmlinux 0x3a4f6a32 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x3a5182af usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x3a536bd7 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x3a5ff77d shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x3a81993a irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x3aa67681 inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x3ac75973 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x3acdf325 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x3ae7afb5 amba_device_add +EXPORT_SYMBOL_GPL vmlinux 0x3b1c1034 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x3b1fbe42 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x3b3f2e7f skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x3b5a01eb clk_get_parent +EXPORT_SYMBOL_GPL vmlinux 0x3b7a45d9 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x3b99694a ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x3bad56ea debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x3bb20ce7 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x3bde3d51 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x3bdeb8b7 __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c1c9a32 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x3c39d194 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x3c40e310 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x3c4e6c2b do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x3c831441 arm_check_condition +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3cac21b9 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x3caf0254 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3ce90d2f ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x3ceb9df3 key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x3cf4ec0a clk_get_rate +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d2a50ba devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x3d30dfe4 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3d93a9af scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x3db91586 scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x3dbe8ff7 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3de9cae1 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x3df6a97c regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x3e21c555 ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0x3e3f263f wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x3e483a8f trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0x3e7080cb mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x3e8f9b82 inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0x3ea2da48 inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x3ea468e3 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x3ecb4c40 extcon_get_cable_state_ +EXPORT_SYMBOL_GPL vmlinux 0x3eeab670 fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f620a84 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x3f69c73a unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3f8bea9c of_clk_src_onecell_get +EXPORT_SYMBOL_GPL vmlinux 0x3fa5cb93 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x3fb1715b sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x3fb646be gpiochip_add_pin_range +EXPORT_SYMBOL_GPL vmlinux 0x3fc1c6ef usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x40228b84 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x402b2daf snd_dmaengine_pcm_pointer +EXPORT_SYMBOL_GPL vmlinux 0x4031ff61 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x403c71a5 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0x403f9529 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x4096f9c1 mtd_table_mutex +EXPORT_SYMBOL_GPL vmlinux 0x4096fcb3 nand_update_bbt +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40b6a677 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0x40ca6b02 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x412873db snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL vmlinux 0x41694053 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0x416a102f md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0x416c6297 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x41814cb8 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x418972d6 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x41937689 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x41ca4002 md_trim_bio +EXPORT_SYMBOL_GPL vmlinux 0x41ccb4b1 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4205ad24 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x420e377f ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x420f360f platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0x42160169 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x42561cc2 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0x425a4259 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x426faea4 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x42825ce2 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x429725c8 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x42f36621 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x42fa63ff iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x430d6076 irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x431ecc1e crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x4359d101 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x435fcbc6 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x436d9558 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x438f8838 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x4396b273 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x43a53735 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x43cf8b98 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x43dde1c9 irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x43f04f44 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x43fea81c snd_imx_pcm_mmap +EXPORT_SYMBOL_GPL vmlinux 0x44404f11 kdb_register_repeat +EXPORT_SYMBOL_GPL vmlinux 0x4455e1b3 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x446c83c4 register_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x4492e344 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x44a0eb11 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL vmlinux 0x44a793ab HYPERVISOR_grant_table_op +EXPORT_SYMBOL_GPL vmlinux 0x44d61303 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x44d90643 snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL vmlinux 0x44dedfc6 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0x44eea6fe __module_address +EXPORT_SYMBOL_GPL vmlinux 0x45315461 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45f4473b cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x46066e5b perf_pmu_name +EXPORT_SYMBOL_GPL vmlinux 0x46074c17 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x46099f3b blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x460f7531 wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x4619e544 omap_dm_timer_stop +EXPORT_SYMBOL_GPL vmlinux 0x463e2524 fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x466dea8c crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46eb5bd5 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x4720606c da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x47241698 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x4773b788 device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x47b5cb18 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0x47ff399f regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x4862bd8e tpm_show_caps +EXPORT_SYMBOL_GPL vmlinux 0x486dc23b sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x487bbfa9 tpm_show_pcrs +EXPORT_SYMBOL_GPL vmlinux 0x489c08c6 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x48a3e942 wm8400_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x48a488a0 sysctl_tcp_cookie_size +EXPORT_SYMBOL_GPL vmlinux 0x48ab5da7 pkey_algo +EXPORT_SYMBOL_GPL vmlinux 0x48c8b4fd sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL vmlinux 0x48e67021 sysfs_rename_link +EXPORT_SYMBOL_GPL vmlinux 0x48ff580c __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x4946da71 omap_iotlb_cr_to_e +EXPORT_SYMBOL_GPL vmlinux 0x496fa379 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x4982a57f probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x4985e3e2 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL vmlinux 0x498d293a trace_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49e6fb30 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x49eb432c crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x4a0a427c class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4a5d5ad1 extcon_set_cable_state +EXPORT_SYMBOL_GPL vmlinux 0x4a86b3cb sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x4a9027ad fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x4a9a34f9 tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0x4aadeb9a ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x4ad0025c eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x4aec64ae pinctrl_add_gpio_ranges +EXPORT_SYMBOL_GPL vmlinux 0x4b076147 uncache_firmware +EXPORT_SYMBOL_GPL vmlinux 0x4b5c7820 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x4b7360bf blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x4b93df89 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x4bac7ef8 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x4bc62a81 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x4bcaca24 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x4be3c073 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x4c05a7a9 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x4c3d5a97 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x4c47ec15 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x4c614705 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x4c680062 cgroup_add_cftypes +EXPORT_SYMBOL_GPL vmlinux 0x4c68c8bf tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x4c742c14 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4c8913db relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x4c9b969d crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x4cbd6f42 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x4ccca258 class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x4ce49c1b debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x4ceae888 pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0x4d0075b2 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x4d04248d spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x4d275c14 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x4d7ea741 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x4da5639c platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x4db9c792 tpm_register_hardware +EXPORT_SYMBOL_GPL vmlinux 0x4dd658f9 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x4e109192 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x4e242f5f pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x4e4a4e60 snd_compress_register +EXPORT_SYMBOL_GPL vmlinux 0x4e773e21 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x4e7874ea dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x4e958cf4 inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x4ed07d49 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x4edc1b2b edac_mc_free +EXPORT_SYMBOL_GPL vmlinux 0x4ef5bcf4 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x4f0000b9 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x4f1ccf7d dev_pm_qos_add_global_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4f4f9b93 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x4f5cbcd5 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x4f60c227 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x4f7fa4a5 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x4f89d54e vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x4f8f37ab locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x4fc0410c of_platform_populate +EXPORT_SYMBOL_GPL vmlinux 0x4fc8b083 blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0x4fd4e89d ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x5026585c xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x50282ba1 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x503aa6b9 ftrace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0x5046ebcd snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL vmlinux 0x504bac23 amba_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x5053e2a6 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x506691f1 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x506cc085 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x5091b823 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x50948df5 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x50c82fc3 wm8994_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x50c89f23 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x510cc139 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0x512cf16c wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x5169ef7b pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5183ac8d xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x519318a1 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x51b28af1 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x5210a5bf hsi_board_list +EXPORT_SYMBOL_GPL vmlinux 0x52212010 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x5224e098 i2c_unlock_adapter +EXPORT_SYMBOL_GPL vmlinux 0x522b7ec5 pinctrl_put +EXPORT_SYMBOL_GPL vmlinux 0x522cfd00 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x523ecd7e crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x52458aff usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x52574d42 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL vmlinux 0x52878ba8 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0x528d3838 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x52c1553d dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x52c36357 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x531e48ab __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0x53213a70 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5332f497 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x5334a088 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x5341c403 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x535338d6 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x5358bc09 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x5358fc36 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x5374b662 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53a3e486 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x53bfd78b mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x53d70fb4 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x53e735fa cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x541bd60a irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x544aab61 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x545218e1 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0x54526e46 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x5460f155 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54d4bf3d sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x54ed8c2a ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x54fa3217 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x5518914c snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x551c7afe of_init_opp_table +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x55641dd8 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x55784228 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x55b6115a dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x55b6b9aa snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL vmlinux 0x55eb4246 pl320_ipc_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x55f04c21 trace_buffer_unlock_commit_regs +EXPORT_SYMBOL_GPL vmlinux 0x55f8c64a __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x561e4b77 irq_of_parse_and_map +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x563bf6d3 snd_soc_platform_read +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x564f1dca klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x565b6892 uuid_le_gen +EXPORT_SYMBOL_GPL vmlinux 0x5673ce78 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x567d3fd4 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x568a7fbd __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x568bde7e ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x56a129f3 __blkg_release +EXPORT_SYMBOL_GPL vmlinux 0x56b306b2 put_device +EXPORT_SYMBOL_GPL vmlinux 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x56c852b0 snd_soc_unregister_card +EXPORT_SYMBOL_GPL vmlinux 0x56d697ce cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x56e75d47 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x56e9103b cpu_pm_enter +EXPORT_SYMBOL_GPL vmlinux 0x57231f45 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x573eda77 usb_del_gadget_udc +EXPORT_SYMBOL_GPL vmlinux 0x574093af shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x5742f6cd __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x575321e6 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x575540ed dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x576e226f xen_remap_domain_mfn_range +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x578fe4dd cpu_pm_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x57915cc3 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57e266a5 sec_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x57eaa494 pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x5819c8aa usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x58413099 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x5847ad57 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x58484df1 tpm_release +EXPORT_SYMBOL_GPL vmlinux 0x585e8daf srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x58631dab imx_audmux_v2_configure_port +EXPORT_SYMBOL_GPL vmlinux 0x58780d62 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x588bf09a ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0x58925bc1 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x58c89709 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x58d608e9 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0x58e14f15 HYPERVISOR_event_channel_op +EXPORT_SYMBOL_GPL vmlinux 0x5903c75c otg_ulpi_create +EXPORT_SYMBOL_GPL vmlinux 0x59087fd1 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x591b35e3 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL vmlinux 0x5930bea0 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x593ebec7 dapm_mark_io_dirty +EXPORT_SYMBOL_GPL vmlinux 0x5947abbe max77693_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x596ec2f0 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x598f7dd1 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x599d0cb6 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0x59daa4d9 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0x59e2743e call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x59eae699 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a2f2a69 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x5a30a56f pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x5a31af70 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5a380d3d __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x5a3c2afd kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x5a48534a regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x5a6f611c snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5aa607ef ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL vmlinux 0x5aeac89e tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5af9113f ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x5afb47fc of_irq_to_resource_table +EXPORT_SYMBOL_GPL vmlinux 0x5b27ff15 of_property_read_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x5b35debb ahci_reset_em +EXPORT_SYMBOL_GPL vmlinux 0x5b49a993 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x5b4b2da6 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x5b4e379c of_prop_next_u32 +EXPORT_SYMBOL_GPL vmlinux 0x5b6c2edd set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x5b78ab58 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x5b7af0c1 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x5b7e3032 snd_dmaengine_pcm_get_chan +EXPORT_SYMBOL_GPL vmlinux 0x5bdb9369 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c0548f7 mtd_block_isbad +EXPORT_SYMBOL_GPL vmlinux 0x5c0a2f75 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x5c361062 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x5c55312b snd_soc_default_readable_register +EXPORT_SYMBOL_GPL vmlinux 0x5c7516dc ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x5c76b264 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x5c8fc2cf cgroup_taskset_cur_cgroup +EXPORT_SYMBOL_GPL vmlinux 0x5c907e16 edac_device_add_device +EXPORT_SYMBOL_GPL vmlinux 0x5ca4cf9c sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x5cb43441 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x5cc43f70 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x5cce6718 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x5ce2aa48 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x5ce6398e fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x5ce9fb7f usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x5d1098c6 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0x5d12e48f input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x5d349ddd relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d382316 pinctrl_dev_get_name +EXPORT_SYMBOL_GPL vmlinux 0x5d5ea92f regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d8d802b clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x5d8e43ae __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x5db5fae6 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x5dbb3223 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5dd18380 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x5dd575be spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5dec4b32 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x5dfb951c snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL vmlinux 0x5e137855 omap_dm_timer_request_specific +EXPORT_SYMBOL_GPL vmlinux 0x5e4c2935 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x5e599ae4 bmp085_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x5e5d9de1 snd_soc_register_platform +EXPORT_SYMBOL_GPL vmlinux 0x5e77ac1c crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x5ea3e523 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5eacba1f ahci_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x5ec97470 devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0x5ee278a9 opp_find_freq_floor +EXPORT_SYMBOL_GPL vmlinux 0x5ef44bbe xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x5f001d5f tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x5f248f72 set_timer_slack +EXPORT_SYMBOL_GPL vmlinux 0x5f65f521 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL vmlinux 0x5f886904 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0x5f9db4b8 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x5fd45e06 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x6007d938 simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x60506751 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60a79578 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x60b4c171 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x60c70502 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x60e8edf2 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL vmlinux 0x60ef6be9 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0x6114d8a4 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x613f47a0 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x61634f05 lock_flocks +EXPORT_SYMBOL_GPL vmlinux 0x618d023f blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0x618dd92b ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x619a5904 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x61c47bff led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x61ec6bbd opp_get_opp_count +EXPORT_SYMBOL_GPL vmlinux 0x61f323e4 __netpoll_free_rcu +EXPORT_SYMBOL_GPL vmlinux 0x624a6406 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x626920fa xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x629d26d0 platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0x62a92c58 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x62cae0f9 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x62cc4629 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x62cceeb1 extcon_find_cable_index +EXPORT_SYMBOL_GPL vmlinux 0x62d72e49 regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x63093faf sock_update_netprioidx +EXPORT_SYMBOL_GPL vmlinux 0x630b3e64 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x6316d5ea get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x6318757f mdio_mux_uninit +EXPORT_SYMBOL_GPL vmlinux 0x63205de1 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x6357cf9f __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x636b9ac3 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x638342f8 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x63ad733b devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x63d0b960 vchan_init +EXPORT_SYMBOL_GPL vmlinux 0x63e4e5ed __rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x6433beab usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x64a3edb9 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x64c5fb0e xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x64e7bdac pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x650d7f95 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0x652493ea usb_string +EXPORT_SYMBOL_GPL vmlinux 0x652f4b9f led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x65415ff3 unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x6551cfbb wm8994_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x655c6efd wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x65705149 tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x65aa7809 hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x65b83310 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d60489 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65d7026e led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x65de4296 mtd_block_markbad +EXPORT_SYMBOL_GPL vmlinux 0x65e727fb relay_close +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x6638a04c tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x663c16d6 gnttab_grant_foreign_access_subpage_ref +EXPORT_SYMBOL_GPL vmlinux 0x663c6990 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0x6657a038 snd_soc_info_volsw +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66929f57 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL vmlinux 0x669b3189 stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x66a84504 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66b87f9b bmp085_detect +EXPORT_SYMBOL_GPL vmlinux 0x66c78bd2 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x66cd06ed max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x66d0b1da ahci_reset_controller +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66e71c71 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL vmlinux 0x671377d2 sdhci_pltfm_register +EXPORT_SYMBOL_GPL vmlinux 0x672d7ee2 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x6739a503 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x673a1ede crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x674e13e1 public_key_destroy +EXPORT_SYMBOL_GPL vmlinux 0x67586b65 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67993f7f da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x67ad5b4d wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x67b743a6 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x67b95f8f cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x67e37aba ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x6812cf8d __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x68336775 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x6835b86d tpm_show_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x68590f70 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x6879cadc of_property_read_u64 +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68941fd7 omap_tll_enable +EXPORT_SYMBOL_GPL vmlinux 0x68956406 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x68965d51 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x68d036d9 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL vmlinux 0x68eb61a4 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x6923ce63 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x69259f22 edac_mem_types +EXPORT_SYMBOL_GPL vmlinux 0x693facbb vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x6942da63 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x69447467 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x6945725e mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x6946c241 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x694be42a usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x69670fdb get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x69804802 xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0x698a899f ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x698be398 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x69dcae1c __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x69fc6a7c pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x6a218baf omap_iommu_save_ctx +EXPORT_SYMBOL_GPL vmlinux 0x6a22fd14 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x6a2d6505 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x6a4cd3d1 snd_soc_cache_write +EXPORT_SYMBOL_GPL vmlinux 0x6a5fb566 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x6a70c5e2 fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x6a790acc usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x6aadda38 ahci_ops +EXPORT_SYMBOL_GPL vmlinux 0x6ab922b2 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6aba167a regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x6acf475c get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x6afacab7 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x6b0e62b2 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0x6b264960 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x6b29a1fa ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x6b368158 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0x6b770f49 decode_bch +EXPORT_SYMBOL_GPL vmlinux 0x6ba30bd8 crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x6bdbb733 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x6bef72cf dbs_check_cpu +EXPORT_SYMBOL_GPL vmlinux 0x6bff2fbd sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x6c153887 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c4bc2d6 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x6c55be55 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x6c6fa7ab sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x6c749afe __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c977e55 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0x6cc78c5c set_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d31e93b tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x6d451beb skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x6de693a4 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x6e185b3c sdhci_add_host +EXPORT_SYMBOL_GPL vmlinux 0x6e1ebc8a fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x6e3b3176 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL vmlinux 0x6e47f9f3 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e7943ec iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x6e89a560 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x6ea62d18 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x6eb0f963 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL vmlinux 0x6eb17497 inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0x6ec4efbe usbmisc_get_init_data +EXPORT_SYMBOL_GPL vmlinux 0x6ec71f44 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x6edd8e04 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x6ee7a268 mtd_read_oob +EXPORT_SYMBOL_GPL vmlinux 0x6f1ee69e kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x6f30164f debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x6f4da64a debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x6f6ac78c dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x6f873aeb platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0x6f895a5f fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x6f898954 pinctrl_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x6fa19569 driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x6fa8424e inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x6fc43fa6 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL vmlinux 0x6fc5e7e3 hwspin_lock_free +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6fe850f8 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x6ff1cc2d fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x703189d7 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x70357999 __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x706b7feb da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x708bd95d irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x70bb651d __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x70bd9c39 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x70cf032f usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x70d27f28 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x70d486ce opp_enable +EXPORT_SYMBOL_GPL vmlinux 0x70df00ba mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x70e2858f __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x70feb0db dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x711a42ed crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x71351ca3 __css_put +EXPORT_SYMBOL_GPL vmlinux 0x715dc4fd dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x716a6a80 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x718fb775 cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x7193bef6 omap_dm_timer_set_pwm +EXPORT_SYMBOL_GPL vmlinux 0x71ad0b59 perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x71af8f8e snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL vmlinux 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x720a36bd snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x72515f17 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x7267adcb fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0x7267db00 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x728742bf __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x728e8228 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x72a75e0e pwm_set_polarity +EXPORT_SYMBOL_GPL vmlinux 0x72b212ff regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x72c2d429 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x73013896 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x730bd0c7 asic3_write_register +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x733a1ae8 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x7371f9a6 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x737ecf25 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x7385c53f lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0x7389afdf hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x738f0711 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x739d426b usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x73a2fa1f usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73a80ddc inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x73a8d124 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x73b6f76d vchan_dma_desc_free_list +EXPORT_SYMBOL_GPL vmlinux 0x73c2f570 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x73cefece pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x73d69364 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x73dd7093 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x74392999 mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x74621a1b serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x74625c58 snd_soc_register_dai +EXPORT_SYMBOL_GPL vmlinux 0x747b3d5f tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x748092f6 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7483daac led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x74930737 flush_kthread_work +EXPORT_SYMBOL_GPL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x74a8157d dapm_clock_event +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74ba2a02 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74cceee0 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x74d44b71 ahci_start_engine +EXPORT_SYMBOL_GPL vmlinux 0x7507dc0a wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x7522f3ba irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x755124a6 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x75608956 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x7560d09c yield_to +EXPORT_SYMBOL_GPL vmlinux 0x7566ea98 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x75b3037f tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x75c07e43 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL vmlinux 0x75c2b9f1 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x75c8a11c inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x75cd6006 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x75d0de19 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7644fa26 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x7655af6b srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x7693961a ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x76ae4e2e fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x76aff3e3 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x76c6bc7d crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x76d28b29 unregister_mtd_user +EXPORT_SYMBOL_GPL vmlinux 0x770cf981 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x77214cea sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x774fa699 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0x775a2916 regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x7772a141 devm_pinctrl_get +EXPORT_SYMBOL_GPL vmlinux 0x77b54712 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x77e78218 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x77ea6624 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x782b8a0b snd_soc_write +EXPORT_SYMBOL_GPL vmlinux 0x7832271f xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x7854c928 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x78712203 mtd_unlock +EXPORT_SYMBOL_GPL vmlinux 0x78a466fb tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x78cf4589 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x78ebb90f relay_open +EXPORT_SYMBOL_GPL vmlinux 0x78f143c4 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x79027aad ref_module +EXPORT_SYMBOL_GPL vmlinux 0x7903f50b snd_ctl_activate_id +EXPORT_SYMBOL_GPL vmlinux 0x7904b7d2 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x7912060c da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x7915719c vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x791ed105 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7938081f dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79485c8e mtd_panic_write +EXPORT_SYMBOL_GPL vmlinux 0x795f2be1 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x796c2d48 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x79b515cf __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x79c4ef9b inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0x79cec06f each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0x79d959b7 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x7a13dc53 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x7a360ed8 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x7a44d5da skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x7a6bb502 get_device +EXPORT_SYMBOL_GPL vmlinux 0x7a71781c skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7a752951 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x7a944007 rcu_idle_enter +EXPORT_SYMBOL_GPL vmlinux 0x7aa899aa clk_unprepare +EXPORT_SYMBOL_GPL vmlinux 0x7aaa66d2 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x7aaf3ac9 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x7ab3ca18 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x7ab6c28d da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x7ab6de2d crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x7ac26d12 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0x7ac6b9da platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b0f1ab3 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b562e53 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x7b90d1a9 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x7bec17a9 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x7c0b2c09 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x7c15ad77 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL vmlinux 0x7c18bdea fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x7c4a5c6d raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x7c59610d crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7c5c0501 usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x7c6a49ce unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x7c9ad2eb usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x7c9ef5e8 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x7cb757af mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x7cc1b7fd max77693_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x7cd7629b crypto_lookup_aead +EXPORT_SYMBOL_GPL vmlinux 0x7ce2ff3e tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x7ceaf0d5 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x7cf87c69 of_property_count_strings +EXPORT_SYMBOL_GPL vmlinux 0x7cfd9056 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7d1ed6ca omap_dm_timer_set_load_start +EXPORT_SYMBOL_GPL vmlinux 0x7d59dd46 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x7da07246 pwm_config +EXPORT_SYMBOL_GPL vmlinux 0x7da7c18a usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dc6e4c1 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x7dda54e1 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x7deb4066 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x7df19e12 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x7e0ef97c regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e2185b5 __get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0x7e3514cc init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x7e42520e snd_soc_cnew +EXPORT_SYMBOL_GPL vmlinux 0x7e4b5cef sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x7e5141fb regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x7e5afae7 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0x7e5e68a4 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0x7e606130 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7ea29da1 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL vmlinux 0x7eb7b3f8 of_get_dma_window +EXPORT_SYMBOL_GPL vmlinux 0x7ed68941 asic3_read_register +EXPORT_SYMBOL_GPL vmlinux 0x7efd32fa fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x7efe732c sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x7f1b0ad5 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x7f1bfb46 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x7f2b33c1 iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0x7f569c2a adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x7f5d8b95 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x7f60e837 __pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x7f7cb3f1 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x7fab5350 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7fad27cf netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7fd790ad clk_set_parent +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ff60262 usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x7ffc8718 gpio_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x80255c9e map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x8043eb8c firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x8045b5f6 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x8064ed79 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0x807007f4 cgroup_taskset_first +EXPORT_SYMBOL_GPL vmlinux 0x8077309c tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80cde745 clk_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x80d5e57a mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x80f3268f __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x814f7f17 class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x819ef117 setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x81a6066a tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x81d18f2f dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x820ba0d3 edac_mc_del_mc +EXPORT_SYMBOL_GPL vmlinux 0x821a5ec2 ahci_save_initial_config +EXPORT_SYMBOL_GPL vmlinux 0x8220458d regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x822d1f98 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x8233d1de stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0x828f259a usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82de6640 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x834f0e35 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x837b521e spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x838b13e7 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x83a5ae2e __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x83b2049e root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x83c35e4e put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x83d66be0 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x83e980bc iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x83f1c046 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x84114422 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x84317d9d snd_soc_cache_read +EXPORT_SYMBOL_GPL vmlinux 0x8480aceb usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x84843c84 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x8484a5c3 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0x84b9943c tpm_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x85050965 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x852e568d of_get_nand_ecc_mode +EXPORT_SYMBOL_GPL vmlinux 0x852f3e32 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x85380207 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x856629e7 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x8574ca6c gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x8583b5d9 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x859dacdd i2c_lock_adapter +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85c7f674 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x85e5e560 free_css_id +EXPORT_SYMBOL_GPL vmlinux 0x862b9816 cpu_topology +EXPORT_SYMBOL_GPL vmlinux 0x86319429 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x863c552c cache_firmware +EXPORT_SYMBOL_GPL vmlinux 0x864ff7c4 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL vmlinux 0x8651b59e class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x86540195 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x865f093d nfq_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x8681bb1e mtd_device_parse_register +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86ad07a0 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x86b8263a smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x86e0d647 dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x86f2bcc9 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x8704eb06 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x870a1986 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x870e16b7 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x871bcaa4 irq_find_host +EXPORT_SYMBOL_GPL vmlinux 0x871d338f user_read +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87571fa1 pl320_ipc_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x87707498 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87984b16 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x87a2812a sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x87afd866 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x87c99a2f pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x87ca21fa da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x87e1089d input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x880350cb sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x8814c16e crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x882c53d6 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x88335d01 mtd_is_partition +EXPORT_SYMBOL_GPL vmlinux 0x88458080 mtd_read +EXPORT_SYMBOL_GPL vmlinux 0x884f9bfa device_move +EXPORT_SYMBOL_GPL vmlinux 0x885bb10e sdhci_pltfm_free +EXPORT_SYMBOL_GPL vmlinux 0x885d13e6 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x887340e4 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x8897ed25 __mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x88ab6fe3 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x88c39ff9 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x88cdfd31 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x891a5a7f gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x8924eb1e rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x892b5c11 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL vmlinux 0x893905d9 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x89485687 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x89502f0c gnttab_subpage_grants_available +EXPORT_SYMBOL_GPL vmlinux 0x89720a85 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x898992d1 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x899428e2 spi_master_suspend +EXPORT_SYMBOL_GPL vmlinux 0x899456fe snd_compress_new +EXPORT_SYMBOL_GPL vmlinux 0x89ab863e ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x89c4868e snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL vmlinux 0x89cacda6 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0x8a04b9fe tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x8a0bbf07 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL vmlinux 0x8a2122c8 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x8a2b5aaa ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x8a43d0a9 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x8a5ab7fa devm_regmap_init_mmio +EXPORT_SYMBOL_GPL vmlinux 0x8a5c7a80 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x8a6e866f snd_soc_read +EXPORT_SYMBOL_GPL vmlinux 0x8a77b56e xen_dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8a82c0ae __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x8a92de3d omap_dm_timer_enable +EXPORT_SYMBOL_GPL vmlinux 0x8abacc47 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x8ae08d45 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x8ae152b5 of_get_nand_bus_width +EXPORT_SYMBOL_GPL vmlinux 0x8ae84fdf sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x8af3ab4f bsg_request_fn +EXPORT_SYMBOL_GPL vmlinux 0x8afbf7b1 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x8b04668e bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x8b66f9e0 xen_platform_pci_unplug +EXPORT_SYMBOL_GPL vmlinux 0x8b69a4e3 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b775d3a __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x8b99fd7f pinctrl_dev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x8ba5afe9 HYPERVISOR_memory_op +EXPORT_SYMBOL_GPL vmlinux 0x8bac309a power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x8bb5b6f5 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x8bbc7949 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x8bf15fe9 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x8bf47aee ahci_do_softreset +EXPORT_SYMBOL_GPL vmlinux 0x8c03d20c destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c5f1895 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x8c66448e lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x8c8e750f unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x8c94eb36 sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x8c9ba649 clk_disable +EXPORT_SYMBOL_GPL vmlinux 0x8cc18359 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x8cde25b1 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x8d05c83d ahci_print_info +EXPORT_SYMBOL_GPL vmlinux 0x8d114048 fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x8d22bb58 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8d2e1def ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0x8d538f95 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x8d5d2d7f class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x8d65d70c wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x8d7531d9 tpm_show_enabled +EXPORT_SYMBOL_GPL vmlinux 0x8d97cfb9 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0x8dbf7aaa privcmd_call +EXPORT_SYMBOL_GPL vmlinux 0x8de7a062 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0x8dfe6979 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x8e16ddd4 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x8e374445 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x8e79e67a blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x8e80a81b blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x8e982f52 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x8eb0a9e6 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x8eb591cb tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x8eca4d54 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x8ee61859 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x8eeedd7c wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x8f074091 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8f0a6c01 amba_apb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0x8f0b8cb7 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x8f12669a irq_linear_revmap +EXPORT_SYMBOL_GPL vmlinux 0x8f1ac90e inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x8f355905 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x8f3e1df4 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL vmlinux 0x8f5525fc opp_get_freq +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8fba3922 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x8ffdc474 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x90258053 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x90519508 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x9062c322 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x90705b7f syscon_node_to_regmap +EXPORT_SYMBOL_GPL vmlinux 0x9082d068 kprobe_decode_arm_table +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90b763f1 HYPERVISOR_console_io +EXPORT_SYMBOL_GPL vmlinux 0x90d0526b regmap_write +EXPORT_SYMBOL_GPL vmlinux 0x90e66d47 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x91275ef3 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x912fd25b debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x913f96c9 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x91486555 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x915f3faa ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x9172f8b2 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x918ad429 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x91a7cb91 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL vmlinux 0x91b73315 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x91bccc4c ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x91c1d99c pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x91dda801 scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0x91de8f2c omap_dm_timer_free +EXPORT_SYMBOL_GPL vmlinux 0x924c46f8 zs_unmap_object +EXPORT_SYMBOL_GPL vmlinux 0x9257b009 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL vmlinux 0x92806cc1 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x92877cfa ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x929db423 snd_ctl_sync_vmaster_hook +EXPORT_SYMBOL_GPL vmlinux 0x92a006fa dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x92b2d1a9 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x92b57248 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x92c90e22 queue_work +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92ee33da __clk_get_name +EXPORT_SYMBOL_GPL vmlinux 0x9312d80e evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x93226faa irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x932b3b22 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x933b2f84 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x93952ddc __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x93bf75ab bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x93c54864 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x940e0985 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x940f9293 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x9415a8a6 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x941f2aaa eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x94454358 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x94618053 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x9463ff71 init_bch +EXPORT_SYMBOL_GPL vmlinux 0x946e7f67 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x94805450 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94abb745 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x94d408d8 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0x94dff13e snd_soc_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x950350f8 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x9507424b xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x95327535 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x95568222 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x955b0e2e kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x95689acd disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x958df3ac zs_free +EXPORT_SYMBOL_GPL vmlinux 0x95973cc3 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x95a21b86 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x95af140e tps65912_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x95bc69fd sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x95c578a0 ioremap_page_range +EXPORT_SYMBOL_GPL vmlinux 0x95d71d0b ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x95f6ee15 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x96080b5a pinctrl_find_and_add_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0x9621849f ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x9636a441 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x964add15 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x96806f83 __hwspin_trylock +EXPORT_SYMBOL_GPL vmlinux 0x96a22790 vmcore_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x96b7db5c pin_is_valid +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96ebfc5e usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x96f9a23b ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0x971d2730 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x973c4715 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x9745c52a of_fixed_clk_setup +EXPORT_SYMBOL_GPL vmlinux 0x974b5535 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x97503b15 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x97a07cce __css_tryget +EXPORT_SYMBOL_GPL vmlinux 0x97b13dad __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x97c3be13 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x97da04d8 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x97fe8423 xen_unmap_domain_mfn_range +EXPORT_SYMBOL_GPL vmlinux 0x980ab703 devm_clk_unregister +EXPORT_SYMBOL_GPL vmlinux 0x980f3ac0 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x98224d64 mtd_write +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x983c7a72 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0x98503a63 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x986467c3 hwspin_lock_get_id +EXPORT_SYMBOL_GPL vmlinux 0x98b5a77d usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0x98c9f584 klist_init +EXPORT_SYMBOL_GPL vmlinux 0x98cc564a regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x98da95c4 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x990a8328 timed_output_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x991b44fc snd_hwparams_to_dma_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x991db014 tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x993470e3 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x993bb0cd i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x998016ff wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0x998d3a3c vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x999d0120 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x99a941c0 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x99b23be6 platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x99fdd622 sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a64448c __put_net +EXPORT_SYMBOL_GPL vmlinux 0x9a89dbf7 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x9a8bba4f hwspin_lock_register +EXPORT_SYMBOL_GPL vmlinux 0x9aa2f02b debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x9aa47ee3 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x9ab26521 smpboot_register_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x9ac11b74 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x9aca444b get_monotonic_boottime +EXPORT_SYMBOL_GPL vmlinux 0x9ad6df3b blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x9ad952f9 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x9aeacb87 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x9aef4bc4 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x9af3571b xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x9b083c35 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x9b2964cc device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x9b51b7bf attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x9b6ecd91 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9ba2255b ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x9ba29478 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0x9ba6a4ae gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x9bb58159 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x9bece81b mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x9c116221 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x9c1b756b transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x9c345a98 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x9c413e2e devm_clk_register +EXPORT_SYMBOL_GPL vmlinux 0x9c6ddbd8 tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x9c746a4f iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x9c86ede0 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0x9ca0611b nand_release +EXPORT_SYMBOL_GPL vmlinux 0x9cac2ef0 snd_soc_get_volsw +EXPORT_SYMBOL_GPL vmlinux 0x9cb05796 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x9cb957b3 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x9ccb1788 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x9ce33d36 snd_soc_dapm_put_enum_virt +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d0dbc0e unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x9d161ad2 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x9d36f23d ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0x9d37d7b8 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d5aa06f raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x9d8331c0 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x9d843bde ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x9db0b874 devres_release +EXPORT_SYMBOL_GPL vmlinux 0x9ddd0d51 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x9de1612d usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x9decfce5 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x9df699d9 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x9dfdf722 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x9e19d2b1 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x9e3860ab mtd_get_device_size +EXPORT_SYMBOL_GPL vmlinux 0x9e56f83b __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x9e905974 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0x9e9506d7 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9e9f8bcd adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9e9fcbcb sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x9eb10efc regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x9ec137b3 crypto_lookup_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x9f103052 bmp085_probe +EXPORT_SYMBOL_GPL vmlinux 0x9f3aee8b __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x9f3f98e1 of_get_nand_on_flash_bbt +EXPORT_SYMBOL_GPL vmlinux 0x9f517986 HYPERVISOR_hvm_op +EXPORT_SYMBOL_GPL vmlinux 0x9f75b0e6 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x9f8fca3f hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x9fa0042c pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x9fa35add omap_dm_timer_set_load +EXPORT_SYMBOL_GPL vmlinux 0x9fad079c noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x9fbfb7fa device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fe939e1 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0xa012b52a usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0xa01e4514 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xa0265294 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0xa03abcfb srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0xa064f393 ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0xa0888880 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0xa0b709d2 css_depth +EXPORT_SYMBOL_GPL vmlinux 0xa11b2913 sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0xa12641a7 gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0xa1415ec1 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0xa14cb599 of_clk_src_simple_get +EXPORT_SYMBOL_GPL vmlinux 0xa1acaf1f devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0xa1bd7822 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0xa1cbc983 snd_soc_platform_write +EXPORT_SYMBOL_GPL vmlinux 0xa1d0112e wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xa1fac5cb ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0xa21b86db max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL vmlinux 0xa287af84 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0xa28ab584 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL vmlinux 0xa2a5977c usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0xa3188687 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xa31ba58c ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa38602cd drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xa396a93c ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xa3c6e727 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xa3ce7064 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0xa3e7c113 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xa40c98f9 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0xa442f0f9 pstore_register +EXPORT_SYMBOL_GPL vmlinux 0xa452f2a4 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0xa45d698f tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0xa463e471 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL vmlinux 0xa479345c rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0xa48091b0 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0xa48196c8 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0xa491ef6b debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xa4d8fb07 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xa4edcd72 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0xa4faf64d da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xa574d3f4 ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0xa57d2798 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa5863d73 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0xa5dd6fae arm_pm_restart +EXPORT_SYMBOL_GPL vmlinux 0xa5e0cda8 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa5f2b829 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0xa5ff226e debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0xa604fe34 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xa61b1477 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0xa625110d kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0xa62999d2 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0xa630f500 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0xa63b8472 ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0xa6a0a273 max77693_write_reg +EXPORT_SYMBOL_GPL vmlinux 0xa6a70f68 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0xa6b21ef2 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0xa6c4ea6a tcp_fetch_timewait_stamp +EXPORT_SYMBOL_GPL vmlinux 0xa6c84c6c crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xa6d825d8 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xa6db5166 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0xa6e1a69d kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0xa6f8357d __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0xa724257f init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0xa72aa72a securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xa7394698 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa75312bc call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0xa75f4f68 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0xa78484d7 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xa7b37d81 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0xa7e92c97 omap_dm_timer_set_match +EXPORT_SYMBOL_GPL vmlinux 0xa7f92105 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xa808d223 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0xa8226b15 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0xa87157a3 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0xa88e6772 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0xa8d9955a crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0xa8e91fdf of_property_match_string +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa92e32e8 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0xa9326ede cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0xa96c6631 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0xa97b1482 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xa9a82042 gnttab_trans_grants_available +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9c6c47c mtd_point +EXPORT_SYMBOL_GPL vmlinux 0xa9c931da ata_sas_port_async_resume +EXPORT_SYMBOL_GPL vmlinux 0xa9c9d19e snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL vmlinux 0xa9ec57ea sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0xa9fc3f54 gnttab_grant_foreign_access_trans +EXPORT_SYMBOL_GPL vmlinux 0xaa1f7336 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa2c08a7 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xaa346a40 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0xaa547e26 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0xaa702b67 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0xaa74bc2c add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0xaa7dfea6 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xaa852c93 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa9fb002 mtd_del_partition +EXPORT_SYMBOL_GPL vmlinux 0xaaa918c9 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0xaaf76885 __clk_register +EXPORT_SYMBOL_GPL vmlinux 0xaafd642c extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab18e6bd scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0xab4f0e91 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xab6babaf pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0xab7e3362 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0xab8ceced gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0xabd6f19b kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0xac139eaf __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0xac342fc6 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0xac789867 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0xac7b35ef snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL vmlinux 0xacd13ee6 iommu_map +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xacfd81f6 work_cpu +EXPORT_SYMBOL_GPL vmlinux 0xad7f36d4 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0xad83e65c tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0xada38534 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xada4a163 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xada65f9f ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0xadad0c48 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xadc68a8d anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xadc785ec kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0xadd747d9 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae169a90 omap_dm_timer_trigger +EXPORT_SYMBOL_GPL vmlinux 0xae179ef4 ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0xae28318d crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xae3bcf67 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0xae465301 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0xae69b1c1 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xae6b3fe2 thermal_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xae6f56ac extcon_update_state +EXPORT_SYMBOL_GPL vmlinux 0xae7c231d mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0xaeb4086d exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0xaebb921d regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0xaf212703 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0xaf348da7 cpu_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0xaf426340 ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xaf53459b transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0xafc6c382 omap_dm_timer_set_int_disable +EXPORT_SYMBOL_GPL vmlinux 0xafe23386 usbmisc_set_ops +EXPORT_SYMBOL_GPL vmlinux 0xb018674e pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0xb01e0bd5 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0xb0272c8c deregister_mtd_parser +EXPORT_SYMBOL_GPL vmlinux 0xb0a7a565 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0xb0b85f47 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xb0ba357c ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xb0cd18aa blkio_subsys +EXPORT_SYMBOL_GPL vmlinux 0xb0f0ec5b input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0xb0f5725f fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb1388cd0 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0xb14008c3 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0xb140d14c ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xb1425b32 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xb154c4cf ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0xb157f919 dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0xb1672384 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xb18071ee xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb19c2815 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xb1abba2a raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1bed25d dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0xb1d97f5f usb_gadget_map_request +EXPORT_SYMBOL_GPL vmlinux 0xb1dbff0c regmap_init_mmio +EXPORT_SYMBOL_GPL vmlinux 0xb1ec63e9 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0xb2154d42 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xb2544261 tpm_show_owned +EXPORT_SYMBOL_GPL vmlinux 0xb2a16c98 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xb2a707f9 regmap_update_bits +EXPORT_SYMBOL_GPL vmlinux 0xb2bb6648 blk_add_request_payload +EXPORT_SYMBOL_GPL vmlinux 0xb2d48a2e queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb2d7f2d9 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0xb2daa450 snd_soc_resume +EXPORT_SYMBOL_GPL vmlinux 0xb2e764e8 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0xb3014342 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL vmlinux 0xb312dc73 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0xb316a101 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0xb31757da i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0xb31c0453 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL vmlinux 0xb31ea188 clk_gate_ops +EXPORT_SYMBOL_GPL vmlinux 0xb3307eb7 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0xb33eb048 pinctrl_register +EXPORT_SYMBOL_GPL vmlinux 0xb34f103d cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0xb3d457cf snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL vmlinux 0xb3faa165 snd_soc_jack_new +EXPORT_SYMBOL_GPL vmlinux 0xb41726bb __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb42b0e44 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0xb4425cd7 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0xb44b1989 xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0xb46e76aa skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0xb4ac085e rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0xb4b473ed hwspin_lock_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb50b7925 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb526e5e6 omap_dm_timer_set_source +EXPORT_SYMBOL_GPL vmlinux 0xb528d409 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0xb57b9654 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb58f8792 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0xb593711c regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0xb5a0e11e lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0xb5a307a2 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb5cb8145 hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xb5e1b515 mtd_add_partition +EXPORT_SYMBOL_GPL vmlinux 0xb5e896fb tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0xb5f17edf perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xb5fa87d2 snd_dmaengine_pcm_trigger +EXPORT_SYMBOL_GPL vmlinux 0xb605ad1f crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xb606e996 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0xb61ac1a1 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb67b2219 cm_suspend_again +EXPORT_SYMBOL_GPL vmlinux 0xb67c64fd __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0xb6a161fc led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6b2638c usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xb6d0c67b edac_device_del_device +EXPORT_SYMBOL_GPL vmlinux 0xb6e55ef9 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0xb6e76ad2 snd_soc_codec_readable_register +EXPORT_SYMBOL_GPL vmlinux 0xb6eb3049 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0xb6f2c398 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0xb70e1cac rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0xb7154b95 anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb7765446 snd_dmaengine_pcm_get_data +EXPORT_SYMBOL_GPL vmlinux 0xb7c77d47 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0xb7f77027 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0xb7fb61f9 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xb827bca1 __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0xb836b5fb dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0xb8480395 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL vmlinux 0xb851ef41 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0xb8565988 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0xb89f5de9 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0xb8a77707 get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0xb8cae167 devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0xb8cb460f da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xb8e52d00 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xb8e9b86d devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0xb90df9b0 tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0xb9176155 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0xb918cded disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xb94f3524 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9ac19ad sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0xb9ac5754 tpm_remove_hardware +EXPORT_SYMBOL_GPL vmlinux 0xb9adbb36 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0xb9c425de register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0xb9d025c9 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0xb9d8af3c sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0xb9da2997 snmp_fold_field64 +EXPORT_SYMBOL_GPL vmlinux 0xb9fc708b queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xba1a1bf5 sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xba23608e usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0xba27a8fd ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL vmlinux 0xba43fa70 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0xbaa42bd1 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0xbaaec87c devres_find +EXPORT_SYMBOL_GPL vmlinux 0xbacfa798 devres_get +EXPORT_SYMBOL_GPL vmlinux 0xbade32c7 clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0xbb038ce4 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xbb0ab47b debug_locks +EXPORT_SYMBOL_GPL vmlinux 0xbb11cfba klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xbb8faa69 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0xbb9e1aad crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0xbbfaac93 ahci_shost_attrs +EXPORT_SYMBOL_GPL vmlinux 0xbc1136e6 xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0xbc355518 adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xbc4e85a0 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0xbc6f931b workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0xbcaf13eb regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0xbcaf3971 crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0xbcb5af53 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0xbcb9699a flush_kthread_worker +EXPORT_SYMBOL_GPL vmlinux 0xbcbaa80a __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0xbcbf2ebc regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0xbccfd4d8 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0xbcdd5b99 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0xbcecb638 mtd_lock +EXPORT_SYMBOL_GPL vmlinux 0xbcecd817 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0xbcf1bcce snd_soc_add_card_controls +EXPORT_SYMBOL_GPL vmlinux 0xbcf89ab6 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0xbd16e716 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xbd1b9d6a fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xbd1f8831 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0xbd3b551f ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0xbd54655e tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0xbd5cb8b9 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0xbd691fd7 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0xbd7e76f3 tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdd2f42a rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0xbdd6429f wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0xbdf512de free_bch +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe7aa520 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL vmlinux 0xbe7f2fa6 snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL vmlinux 0xbe94a1ea xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xbebd82b3 pinctrl_lookup_state +EXPORT_SYMBOL_GPL vmlinux 0xbec1c4c1 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0xbee7f413 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xbef95ec5 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0xbf06a10f get_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0xbf15227d sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0xbf1d0256 hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0xbf238c7a ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xbf258b5e dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0xbf2ecb87 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL vmlinux 0xbf8e793c pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0xbf9df122 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0xbfad3f73 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0xbfb1f7cc transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xbfd72700 tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xbfdbf731 shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0xbfe17c7a dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0xbff16a17 crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0xc00c706a devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0xc03f07d4 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0xc064ddd7 tpm_gen_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xc07f69bb shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xc08647ff ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc08a58b4 ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xc096d80a blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0xc0d26387 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc0dcb59e edac_layer_name +EXPORT_SYMBOL_GPL vmlinux 0xc0fbfebe dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0xc10f2b8e cgroup_unlock +EXPORT_SYMBOL_GPL vmlinux 0xc113252e iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0xc1196662 inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0xc11b4470 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0xc11bd00f tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc144f11a snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL vmlinux 0xc164642e xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0xc16a4fa6 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0xc17320a2 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc18578ed process_srcu +EXPORT_SYMBOL_GPL vmlinux 0xc20120c7 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0xc2134602 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0xc2247522 cgroup_taskset_next +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc2405454 dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0xc245af65 mtd_erase_callback +EXPORT_SYMBOL_GPL vmlinux 0xc2474116 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc280fb46 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0xc298af11 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0xc3149b11 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0xc33677b5 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0xc341ae6d zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc356c5df da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0xc385cb58 perf_num_counters +EXPORT_SYMBOL_GPL vmlinux 0xc38dbd96 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0xc3b7b2ff xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xc3b93bba klist_next +EXPORT_SYMBOL_GPL vmlinux 0xc3d1dc64 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc454fc7b twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0xc4558ef0 opp_free_cpufreq_table +EXPORT_SYMBOL_GPL vmlinux 0xc471c67a twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0xc486dd6b tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc49ab840 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0xc4d8241c ahci_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0xc4db79f7 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0xc4e8cbc7 irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0xc4f28ae8 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc57c39a3 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0xc57c9ef0 clk_enable +EXPORT_SYMBOL_GPL vmlinux 0xc5810ceb wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xc5e7b9de tcp_peer_is_proven +EXPORT_SYMBOL_GPL vmlinux 0xc5f47640 mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc6274fc4 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0xc6379c42 find_module +EXPORT_SYMBOL_GPL vmlinux 0xc638dfbd snd_dmaengine_pcm_open +EXPORT_SYMBOL_GPL vmlinux 0xc6531cd4 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0xc65d3eed ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc66b77b1 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0xc66ea4b9 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xc678bfda power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0xc687385b lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0xc69b7ee5 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0xc6c05b0b xen_dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0xc6d703bf blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0xc6f2d558 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0xc7002ac4 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0xc70df38d crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0xc72e1233 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0xc745a3dc fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xc75c9e34 ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0xc769b61a opp_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0xc78d86fd tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0xc7992c74 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0xc7a1840e llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0xc7c6391c mpi_set_buffer +EXPORT_SYMBOL_GPL vmlinux 0xc7cc1f45 pinctrl_select_state +EXPORT_SYMBOL_GPL vmlinux 0xc7e10a64 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0xc7e39bca ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc7f61620 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xc8169730 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xc8269f94 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL vmlinux 0xc82c92db vchan_find_desc +EXPORT_SYMBOL_GPL vmlinux 0xc8648705 ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc88e24f4 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0xc89e91fb irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0xc8add232 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xc8f65b15 ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xc8f92c03 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL vmlinux 0xc91277a1 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xc92940b9 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0xc92e0d7e arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc95d2131 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xc96c4c45 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL vmlinux 0xc98040b9 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xc988bd39 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xc99be12b snd_soc_dapm_free +EXPORT_SYMBOL_GPL vmlinux 0xc99d4eee sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca0e6357 blkg_lookup_create +EXPORT_SYMBOL_GPL vmlinux 0xca0fa407 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xca63b85f dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xca6f702e perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0xca7d8764 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca85d920 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0xca88ab0b tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0xca937594 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0xcaa603df inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcae18ba3 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xcaf89638 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0xcb2d5eb0 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0xcb36411a uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0xcb785bf1 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xcb9a5dc6 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0xcbee20b2 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0xcbf19235 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xcc155671 ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc2749d3 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0xcc2b02f5 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcc3a05eb dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0xcc5e5932 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0xcc628e25 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcc8ef545 regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xcc8f0451 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xcca849a0 mtd_erase +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xcd004d3f pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0xcd012f66 imx_pcm_free +EXPORT_SYMBOL_GPL vmlinux 0xcd1cc053 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0xcd33d61a crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xcd587a5e snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL vmlinux 0xcd8dfff5 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0xcd91b127 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0xcdbab59b attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdd15087 of_irq_map_one +EXPORT_SYMBOL_GPL vmlinux 0xcdd3854a fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0xcdf4fe28 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0xcdf9f994 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0xce03a43b xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0xce0b0a4c snd_soc_unregister_platform +EXPORT_SYMBOL_GPL vmlinux 0xce0b9b59 max77693_read_reg +EXPORT_SYMBOL_GPL vmlinux 0xce15fa21 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xce3a0a52 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0xce46e140 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xce497a5b cgroup_lock_live_group +EXPORT_SYMBOL_GPL vmlinux 0xce6a9d9a trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xce715c51 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xce7349ef max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0xce76cd63 dapm_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0xcee1641c kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0xcef0cbfe __put_mtd_device +EXPORT_SYMBOL_GPL vmlinux 0xcf1cacb7 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0xcf743c58 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xcfb05fd9 of_get_regulator_init_data +EXPORT_SYMBOL_GPL vmlinux 0xcfb5871c irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0xcfbf32e3 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfde45c8 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0xcff2af4a usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xcff31ad9 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL vmlinux 0xcff75b23 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0xd00676cc stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0xd0087033 amba_ahb_device_add +EXPORT_SYMBOL_GPL vmlinux 0xd0119a11 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xd01aae9e debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0xd02a10d8 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd03d7359 timed_output_dev_register +EXPORT_SYMBOL_GPL vmlinux 0xd0458ccb xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0xd0468cb1 scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xd04bd633 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL vmlinux 0xd0671e9b debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0xd093f48f tpm_open +EXPORT_SYMBOL_GPL vmlinux 0xd0a0943c ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0xd0af0166 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0f20353 user_update +EXPORT_SYMBOL_GPL vmlinux 0xd0fd793f device_create +EXPORT_SYMBOL_GPL vmlinux 0xd14bc4d9 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1739339 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xd188ecbf device_del +EXPORT_SYMBOL_GPL vmlinux 0xd19f932f usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xd1b2db37 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0xd1c5d880 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0xd1d446f6 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0xd1f10cb9 of_property_read_string_index +EXPORT_SYMBOL_GPL vmlinux 0xd20bf6ba dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd20ebf45 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0xd217e9e6 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0xd242112f da903x_write +EXPORT_SYMBOL_GPL vmlinux 0xd259d0b8 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd290a6d2 md_is_badblock +EXPORT_SYMBOL_GPL vmlinux 0xd298654e rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2aaeb4e kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0xd2b96c22 blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xd2d4cf44 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xd2e20576 sdhci_alloc_host +EXPORT_SYMBOL_GPL vmlinux 0xd2eede13 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xd3019812 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xd30b1576 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0xd32c905b platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xd32fe193 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xd378c07d gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0xd37e13b4 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0xd39ae1bd crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0xd3a1b874 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0xd3b9a4d5 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xd3cfd796 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0xd4034828 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0xd44a5eac kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0xd483e1ba relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0xd48fc09f inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xd4c14632 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0xd4d36146 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0xd4dcfac1 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0xd4f96702 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL vmlinux 0xd4fe6e0b uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0xd5163177 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xd53da4e3 omap_dm_timers_active +EXPORT_SYMBOL_GPL vmlinux 0xd5526473 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd552b352 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0xd55ad93b iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0xd5649d17 amba_device_put +EXPORT_SYMBOL_GPL vmlinux 0xd59668e6 unlock_flocks +EXPORT_SYMBOL_GPL vmlinux 0xd5b8a649 snd_soc_cache_sync +EXPORT_SYMBOL_GPL vmlinux 0xd5bd7dac ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd611765b da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0xd6147770 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0xd63cb41c led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0xd6598343 snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL vmlinux 0xd65e8bef iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0xd66baf1f mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0xd673072b opp_find_freq_exact +EXPORT_SYMBOL_GPL vmlinux 0xd67364f7 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0xd68909fc tps65912_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0xd6939caf hwspin_lock_request +EXPORT_SYMBOL_GPL vmlinux 0xd6bc9ca2 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL vmlinux 0xd6c2e04b __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd7228103 regmap_update_bits_check +EXPORT_SYMBOL_GPL vmlinux 0xd72feba2 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xd7374ade gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd77c0bc8 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0xd77dfc91 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xd782f0d0 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0xd788742d perf_trace_buf_prepare +EXPORT_SYMBOL_GPL vmlinux 0xd7ad5dd6 clk_mux_ops +EXPORT_SYMBOL_GPL vmlinux 0xd7c861a4 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0xd7d17531 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0xd7d52b00 bgpio_remove +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd7dd5952 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0xd7f3fb41 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xd81de62c ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0xd81ffcd3 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0xd820c283 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xd831af99 spi_async +EXPORT_SYMBOL_GPL vmlinux 0xd8525ea7 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0xd85ac634 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xd85d3d2a usb_gadget_probe_driver +EXPORT_SYMBOL_GPL vmlinux 0xd85fa397 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xd868169a rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0xd87601cc ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xd88c40e1 pinctrl_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd8901104 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0xd892cf6e transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0xd898cd9c enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xd8b507ce aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xd8c0f66f crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0xd8fdb5f1 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0xd9038c39 sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xd9341e5c iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd942d353 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0xd9a300b7 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0xd9d7f623 pkey_id_type +EXPORT_SYMBOL_GPL vmlinux 0xd9e2c2fb fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0xd9e2cc08 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0xd9ecb670 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xd9ee38aa ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0xda02b72f ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0xda050109 irq_domain_add_nomap +EXPORT_SYMBOL_GPL vmlinux 0xda06d481 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0xda291224 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0xda3a7ca9 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xda44cb37 setup_charger_manager +EXPORT_SYMBOL_GPL vmlinux 0xda4f5673 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xda57686e user_match +EXPORT_SYMBOL_GPL vmlinux 0xda99ff74 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0xdabdd85c key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0xdac508a6 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL vmlinux 0xdac79a79 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xdacd26c5 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xdae3f0de scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb01c01c usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0xdb04cacc tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0xdb29c0ea snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL vmlinux 0xdb37fb8c wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0xdb61d495 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0xdb8a1b3f usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdb964c74 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0xdb9f510c sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0xdba80fc1 of_fdt_unflatten_tree +EXPORT_SYMBOL_GPL vmlinux 0xdbb692ff devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xdbf5611d dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0xdbf7cb70 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0xdc01d64c usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0xdc0e3a83 ahci_check_ready +EXPORT_SYMBOL_GPL vmlinux 0xdc13d95c usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0xdc14a211 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0xdc1b5da6 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0xdc314f5e driver_register +EXPORT_SYMBOL_GPL vmlinux 0xdc461430 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0xdc4b8a41 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0xdc5a1fe9 clk_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xdc97af2e syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0xdcb83c11 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0xdd2efc0f ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xddd58dc0 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xddf0f3c3 omap_dm_timer_read_status +EXPORT_SYMBOL_GPL vmlinux 0xde1604d2 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0xde743203 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0xdeabf663 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xdeb464d9 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xded063c7 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0xded14beb class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xdf098154 ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0xdf0b69f7 of_modalias_node +EXPORT_SYMBOL_GPL vmlinux 0xdf0f75c6 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0xdf10c529 subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0xdf3bf3ac generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0xdf62b05d snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL vmlinux 0xdf6e4cb1 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xdf79ea07 mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0xdf7f350d snd_soc_put_volsw +EXPORT_SYMBOL_GPL vmlinux 0xdf8473f0 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL vmlinux 0xdfb9ef5c sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0xdfc12fd2 __class_register +EXPORT_SYMBOL_GPL vmlinux 0xe007de41 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0xe00e4710 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0xe02b16c4 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0xe02eb6d0 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe03525ac of_irq_map_raw +EXPORT_SYMBOL_GPL vmlinux 0xe07ca631 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0xe09a0969 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0xe0c8c0bd bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0xe0ca3d3d ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xe0e3147c HYPERVISOR_sched_op +EXPORT_SYMBOL_GPL vmlinux 0xe0fd13eb led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0xe102164f devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xe11b7d46 get_mtd_device_nm +EXPORT_SYMBOL_GPL vmlinux 0xe139d016 sk_unattached_filter_destroy +EXPORT_SYMBOL_GPL vmlinux 0xe16591ab stop_machine +EXPORT_SYMBOL_GPL vmlinux 0xe175eab9 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0xe1853a06 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0xe1c1d7c0 inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0xe1cbd2ab regmap_init +EXPORT_SYMBOL_GPL vmlinux 0xe1d0d25c pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0xe1df8402 pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0xe214cae7 wm8994_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0xe23a4a6a bgpio_init +EXPORT_SYMBOL_GPL vmlinux 0xe284b69e balloon_devinfo_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe2a920cf con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0xe2dd67e5 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xe3043ff9 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0xe3225791 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0xe33134ac class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xe33b8313 sdhci_free_host +EXPORT_SYMBOL_GPL vmlinux 0xe345d5ec ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0xe35c1e4f __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0xe384a102 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0xe38cae6d snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe3926bdd wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0xe3b5bb1e usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xe3d0ee69 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0xe41534ce bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xe4232a4b arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0xe42e1f70 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0xe4309905 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0xe439a017 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0xe4943a2d get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0xe4c3e1c5 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0xe4c9efcd tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0xe4dfac3a sec_reg_update +EXPORT_SYMBOL_GPL vmlinux 0xe4e4084b nand_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0xe4f67252 snd_soc_bytes_get +EXPORT_SYMBOL_GPL vmlinux 0xe4f799eb twl6040_get_trim_value +EXPORT_SYMBOL_GPL vmlinux 0xe50cf487 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe517cf56 ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0xe51805ec ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xe5524eab of_address_to_resource +EXPORT_SYMBOL_GPL vmlinux 0xe57dc60f serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0xe5883bd9 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe5a5971d bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0xe5c6f471 cgroup_unload_subsys +EXPORT_SYMBOL_GPL vmlinux 0xe61b7552 rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xe62b0c28 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0xe640b1b4 usb_add_gadget_udc +EXPORT_SYMBOL_GPL vmlinux 0xe640f936 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe6507d85 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0xe65176a6 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe665b0b8 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL vmlinux 0xe6aa8bce sdhci_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0xe6cd1cf5 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0xe6de54fb cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xe6e1c5fe uuid_be_gen +EXPORT_SYMBOL_GPL vmlinux 0xe7033858 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL vmlinux 0xe70b4e98 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xe74249f2 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0xe747fbcc usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0xe75b0d32 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0xe769232e sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0xe76e2b39 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0xe780dd1a pinctrl_remove_gpio_range +EXPORT_SYMBOL_GPL vmlinux 0xe7b13d1a mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe818b32b ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xe81be22a scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xe81f64b0 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0xe85a9fd3 cpu_cluster_pm_exit +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe8650b41 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xe8a2c2dc sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0xe8babea0 pm_generic_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xe8be1f7e usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xe8d0c0f4 tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL vmlinux 0xe8dc7f76 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xe8e2cab1 ata_sas_port_async_suspend +EXPORT_SYMBOL_GPL vmlinux 0xe8ef5c94 css_id +EXPORT_SYMBOL_GPL vmlinux 0xe8f83f47 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xe9049400 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9536002 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9601105 input_class +EXPORT_SYMBOL_GPL vmlinux 0xe96403a7 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL vmlinux 0xe98649eb static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0xe9dde125 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0xe9e5cada fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0xe9ef78fc xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea340a60 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea46e49a pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0xea50dad3 ahci_ignore_sss +EXPORT_SYMBOL_GPL vmlinux 0xea87aa3e snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL vmlinux 0xea944e9a scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0xeaafdef2 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0xeacb7be1 snd_soc_test_bits +EXPORT_SYMBOL_GPL vmlinux 0xeb1c3628 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0xeb1e7925 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0xeb20bbe4 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0xeb2b161d tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0xeb6730f7 crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0xeb6f1de4 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xeb711ae7 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL vmlinux 0xeb7f883b crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0xeb9abbee ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0xebc7d875 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xebec57c4 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0xec000059 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec25f967 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xec48a9d8 omap_iommu_restore_ctx +EXPORT_SYMBOL_GPL vmlinux 0xec55ad9e of_get_phy_mode +EXPORT_SYMBOL_GPL vmlinux 0xec60130e hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xec82a2b2 amba_ahb_device_add_res +EXPORT_SYMBOL_GPL vmlinux 0xec9a245a device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0xeca679d5 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xecc2d04c __hwspin_unlock +EXPORT_SYMBOL_GPL vmlinux 0xeceb14bb dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0xeceb5788 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0xed06b916 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0xed6593e6 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xed66e5ac da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0xed695a2d unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xed741604 snd_soc_register_codec +EXPORT_SYMBOL_GPL vmlinux 0xed912736 regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0xed9af5c5 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0xeda63db3 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedcd6683 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0xeddfab90 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL vmlinux 0xedf89ef8 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0xee07d046 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL vmlinux 0xee1ef29e device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xee3fa0f8 edac_mc_handle_error +EXPORT_SYMBOL_GPL vmlinux 0xee4f3181 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0xee686686 mtd_unpoint +EXPORT_SYMBOL_GPL vmlinux 0xee6b71c4 syscon_regmap_lookup_by_compatible +EXPORT_SYMBOL_GPL vmlinux 0xee8aef3a crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xee96e845 omap_mcbsp_st_add_controls +EXPORT_SYMBOL_GPL vmlinux 0xeeae90df snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL vmlinux 0xeec91068 mmput +EXPORT_SYMBOL_GPL vmlinux 0xeefa4d06 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0xef037f16 extcon_get_cable_state +EXPORT_SYMBOL_GPL vmlinux 0xef3c6a63 clk_divider_ops +EXPORT_SYMBOL_GPL vmlinux 0xef409b74 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef77546b gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0xef782b88 gnttab_grant_foreign_access_subpage +EXPORT_SYMBOL_GPL vmlinux 0xef84b4c7 md_run +EXPORT_SYMBOL_GPL vmlinux 0xef9569a9 ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0xefb6c664 usbmisc_unset_ops +EXPORT_SYMBOL_GPL vmlinux 0xefc91531 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0xefde8226 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0xeff9764b atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xf001dc80 irq_domain_add_linear +EXPORT_SYMBOL_GPL vmlinux 0xf02e2f4a simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0xf06053cb device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xf08307fc skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xf0898080 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0xf0ae55c3 tpm_show_durations +EXPORT_SYMBOL_GPL vmlinux 0xf0b681e4 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0xf0b9fdad nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xf0ed4857 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xf0f5dbc2 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0xf0f965a2 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xf1089976 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xf115dbba twl6040_get_dl1_gain +EXPORT_SYMBOL_GPL vmlinux 0xf11d45ca cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xf1800659 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1b31314 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0xf1cb698c d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xf1e5d80f async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0xf1faca80 omap_dm_timer_disable +EXPORT_SYMBOL_GPL vmlinux 0xf20739ca usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0xf222f80f usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xf2264b4b device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0xf23188c0 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0xf25566f7 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf273e8a9 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0xf293fd86 sdhci_remove_host +EXPORT_SYMBOL_GPL vmlinux 0xf2bcd222 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL vmlinux 0xf2fa8cff gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0xf2fc7f6e __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf3025f6b regmap_read +EXPORT_SYMBOL_GPL vmlinux 0xf303c74d __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xf30cb7ef platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0xf30d5ca0 ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0xf31b3fd1 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0xf387747e snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL vmlinux 0xf39fd874 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xf3ac93e0 ahci_init_controller +EXPORT_SYMBOL_GPL vmlinux 0xf3b394cf debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xf3b451ca kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0xf3b93a97 cgroup_lock_is_held +EXPORT_SYMBOL_GPL vmlinux 0xf3d9c1de sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xf3dd036d regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0xf3e7ec7e clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0xf4733d0b omap_install_iommu_arch +EXPORT_SYMBOL_GPL vmlinux 0xf47d4b9b sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL vmlinux 0xf48e9a1d sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4bdfe69 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0xf4cd150d device_register +EXPORT_SYMBOL_GPL vmlinux 0xf4fc2d6c __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf521d865 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL vmlinux 0xf5285a10 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0xf52ba622 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf54f4354 __class_create +EXPORT_SYMBOL_GPL vmlinux 0xf552437d task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf5785b42 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0xf5788ac1 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf59b6b8c xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5f2e05d find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xf5fad072 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0xf6091b44 da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xf60d1625 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xf634693b __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xf638b4b3 snd_soc_update_bits_locked +EXPORT_SYMBOL_GPL vmlinux 0xf64164c6 snd_compress_deregister +EXPORT_SYMBOL_GPL vmlinux 0xf6464980 ahci_em_messages +EXPORT_SYMBOL_GPL vmlinux 0xf650464a modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xf65fd087 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0xf67075df snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL vmlinux 0xf69097c8 subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xf6950e22 omap_tll_disable +EXPORT_SYMBOL_GPL vmlinux 0xf6ae25cd __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf6bb1227 subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xf6bb8bf1 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0xf6bc6625 edac_mc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf6c5d823 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xf6c89b16 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xf6da6d29 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0xf6e04730 event_storage +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf6f30a51 snd_soc_codec_writable_register +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf71dce9f usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xf739fa5d device_find_child +EXPORT_SYMBOL_GPL vmlinux 0xf74656ab regulator_can_change_voltage +EXPORT_SYMBOL_GPL vmlinux 0xf75da527 bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0xf769772f dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0xf76b0a59 read_current_timer +EXPORT_SYMBOL_GPL vmlinux 0xf7791a56 blkg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf78a0d33 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xf7aa9399 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0xf7b9c9c6 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0xf7bbda93 bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0xf7c88a44 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0xf7d7a239 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0xf7da7f3c bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xf7e19dbc register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xf7e44086 blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0xf7ef1aec rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0xf82f16b3 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf83536e2 regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0xf8396ee3 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0xf846506f irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0xf879da72 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8bc54d7 cgroup_load_subsys +EXPORT_SYMBOL_GPL vmlinux 0xf8c35944 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf8f3f6ce devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xf8f7880c sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0xf8fe3d0b kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0xf90a2732 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xf928f6a6 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xf92ce956 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0xf967422b HYPERVISOR_xen_version +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9d9264e xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0xf9db0e2d unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0xf9de08d9 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0xf9ef5661 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0xf9f8a34d snd_dmaengine_pcm_close +EXPORT_SYMBOL_GPL vmlinux 0xf9f9bfe9 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0xfa012fe7 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xfa1eb910 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0xfa6c77e1 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0xfa8626a4 snd_soc_put_strobe +EXPORT_SYMBOL_GPL vmlinux 0xfb019496 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0xfb020c3a regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0xfb05c9b4 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0xfb22c630 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xfb32b30f ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0xfb4a5899 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xfb6eedf9 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0xfb75427a spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0xfb78aafa securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xfbb9ef76 mtd_is_locked +EXPORT_SYMBOL_GPL vmlinux 0xfbbedefd of_prop_next_string +EXPORT_SYMBOL_GPL vmlinux 0xfbc311ba debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0xfbf27168 led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xfbf82b51 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0xfbf87c60 usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc375b4a snd_soc_register_card +EXPORT_SYMBOL_GPL vmlinux 0xfc76186e default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xfc8370d2 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0xfcbc5228 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0xfcc2d2eb ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0xfcd7bc0b ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xfcdb4034 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0xfd01041e single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xfd1cba7b __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd58c74b extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0xfd614943 tps65912_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xfd8afe92 class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0xfd99be44 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0xfda09b13 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0xfdc90d6b wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xfdef398a md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0xfdf0e606 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0xfdf8f912 sec_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0xfdf9dfe1 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL vmlinux 0xfe3138bc alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xfe3f53c1 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL vmlinux 0xfe8287dc tpm_write +EXPORT_SYMBOL_GPL vmlinux 0xfe8f256c inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfeb121b5 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfed6a41f __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfeda4e1c look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0xfee6c0f6 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xfef8a166 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0xff410883 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0xff4e4cc1 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff5cda7c wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0xff6b89d1 rq_flush_dcache_pages +EXPORT_SYMBOL_GPL vmlinux 0xff9188d7 crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0xff9c1b06 spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0xffa4c4ec cgroup_lock +EXPORT_SYMBOL_GPL vmlinux 0xffb16714 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0xffb7c7a9 bus_get_kset --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/armhf/generic.compiler +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/armhf/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/i386/generic.modules +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/i386/generic.modules @@ -0,0 +1,3916 @@ +3c501 +3c503 +3c505 +3c507 +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_st16c554 +8250_fourport +8250_hub6 +8255 +8255_pci +82596 +8390 +8390p +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +88pm860x-ts +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +a8293 +aacraid +aat2870_bl +aat2870-regulator +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +ac3200 +ac97_bus +acard-ahci +acecad +acenic +acerhdf +acer-wmi +acl7225b +acpi_ipmi +acpi_pad +acpiphp +acpiphp_ibm +acpi_power_meter +acquirewdt +act2000 +act200l-sir +act_csum +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5624r_spi +ad5686 +ad5755 +ad5764 +ad5791 +ad5930 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7746 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad799x +ad8366 +ad9523 +ad9832 +ad9834 +ad9850 +ad9852 +ad9910 +ad9951 +adcxx +addi_apci_035 +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 +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16204 +adis16209 +adis16220 +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_bl +adp5520-keys +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +adq12b +ads1015 +ads7828 +ads7846 +ads7871 +ad_sigma_delta +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adummy +adutux +adv7170 +adv7175 +adv7180 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aes-i586 +aesni-intel +af_802154 +af9013 +af9033 +af_alg +affs +af_key +af_packet_diag +af-rxrpc +ah4 +ah6 +aha152x +aha152x_cs +aha1542 +aha1740 +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aio_aio12_8 +aio_iiro_16 +aiptek +aircable +airo +airo_cs +ak8975 +alauda +algif_hash +algif_skcipher +ali-agp +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altera-ci +altera_jtaguart +altera_ps2 +altera-stapl +altera_uart +alx +ambassador +amc6821 +amd5536udc +amd76x_edac +amd76xrom +amd8111e +amd-rng +amilo-rfkill +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +ams369fg06 +analog +ansi_cprng +anubis +aoe +apanel +apds9802als +apds990x +apm +apple_bl +appledisplay +apple-gmux +applesmc +appletalk +appletouch +applicom +ar5523 +ar7part +arc4 +arcfb +arcmsr +arcnet +arc_ps2 +arc-rawmode +arc-rimi +arc_uart +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +as3711-regulator +as5011 +asb100 +asc7621 +asix +ast +asus_atk0110 +asus-laptop +asus-nb-wmi +asus_oled +asus-wmi +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at1700 +at24 +at25 +at76c50x-usb +at86rf230 +at91_ether +atbm8830 +aten +ath +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_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo_k1900fb +auo_k1901fb +auo_k190x +auo-pixcir-ts +authenc +authencesn +auth_rpcgss +autofs4 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1isa +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +bas_gigaset +batman-adv +baycom_epp +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bch +bcm203x +bcm3510 +bcm5974 +bcma +bcma-hcd +bcm_wimax +be2iscsi +be2net +befs +belkin_sa +bfa +bfs +bfusb +bh1770glc +bh1780gli +binfmt_aout +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +bluecard_cs +bluetooth +bma150 +bmp085-i2c +bmp085-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bonding +bpa10x +bpck +bpck6 +bpctl_mod +bpqether +bq2415x_charger +bq27x00_battery +br2684 +brcmfmac +brcmsmac +brcmutil +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +bypass +c101 +c2port-duramar2150 +c4 +c67x00 +c6xdigio +cachefiles +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +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 +cc770 +cc770_isa +cc770_platform +c_can +c_can_pci +c_can_platform +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc-phonet +cdc_subset +cdc-wdm +cedusb +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +chipreg +chnl_net +ci13xxx_msm +ci13xxx_pci +cifs +ci_hdrc +cirrus +cirrusfb +ck804xrom +classmate-laptop +clearpad_tm1217 +clip +cls_basic +cls_cgroup +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-isa +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +cops +cordic +core +coretemp +cosa +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpqarray +cpqphp +cpu5wdt +cpuid +cpu-notifier-error-inject +c-qcam +cramfs +cr_bllcd +crc7 +crc8 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +crypto_user +crystalhd +cs5345 +cs53l32a +cs5535-mfd +cs553x_nand +cs89x0 +csiostor +csr_helper +csr_wifi +ct82c710 +ctr +cts +cuse +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxd2099 +cxd2820r +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxt1e1 +cy8ctmg110_ts +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +cyttsp_core +cyttsp_i2c +cyttsp_spi +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052_bl +da9052-hwmon +da9052_onkey +da9052-regulator +da9052_tsi +da9052_wdt +da9055-hwmon +da9055_onkey +da9055-regulator +da9055_wdt +DAC960 +daqboard2000 +das08 +das08_cs +das16 +das16m1 +das1800 +das6402 +das800 +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +dell-wmi-aio +denali +denali_pci +depca +des_generic +dgrp +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +divacapi +divadidd +diva_idi +diva_mnt +divas +dl2k +dlci +dlm +dm1105 +dm9601 +dm-bio-prison +dm-bufio +dm-crypt +dm-delay +dme1737 +dmfe +dm-flakey +dmi-sysfs +dm-log +dm-log-userspace +dmm32at +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-raid45 +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-thin-pool +dm-verity +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2001plus +docecc +docg3 +docg4 +docprobe +donauboe +dpt_i2o +drbd +drm +drm_kms_helper +drm_usb +drxd +drxk +ds1621 +ds1682 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt2801 +dt2811 +dt2814 +dt2815 +dt2817 +dt282x +dt3000 +dt3155v4l +dt9812 +dtc +dtl1_cs +dtlk +dummy +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_cypress_firmware +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-it913x +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_v2 +dvb-usb-vp702x +dvb-usb-vp7045 +dwc3 +dwc3-exynos +dwc3-omap +dwc3-pci +dw_dmac +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e2100 +e4000 +e752x_edac +e7xxx_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +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 +ec100 +echo +ec_sys +edac_core +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eepro +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +eexpress +efficeon-agp +efs +einj +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +emc1403 +emc2103 +emc6w201 +em_canid +em_cmp +emi26 +emi62 +em_ipset +em_meta +em_nbyte +empeg +ems_pci +ems_pcmcia +ems_usb +em_text +emu10k1-gp +em_u32 +enc28j60 +enclosure +ene_ir +eni +enic +epat +epia +epic100 +eql +es3210 +esb2rom +esd_usb2 +esi-sir +esp4 +esp6 +et131x +eth16i +ethoc +eurotechwdt +evbug +ewrk3 +exofs +ext2 +extcon-adc-jack +extcon-arizona +extcon-gpio +extcon-max77693 +extcon-max8997 +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_ddc +fb_sys_fops +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +fl512 +floppy +fm801-gp +fm_drv +fmvj18x_cs +fnic +forcedeth +fore_200e +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +ft1000 +ft1000_pcmcia +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +funsoft +g450_pll +g760a +g_acm_ms +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +g_dbgp +gdmwm +gdth +generic +generic-adc-battery +generic_bl +gen_probe +geode-aes +geode-rng +g_ether +gf128mul +gf2k +g_ffs +gfs2 +ghash-generic +g_hid +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +glue_helper +gma500_gfx +g_mass_storage +g_midi +g_ncm +g_NCR5380 +g_NCR5380_mmio +g_nokia +go7007 +go7007-usb +goku_udc +gp2ap002a00f +gpio-74x164 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-arizona +gpio-charger +gpio-cs5535 +gpio-da9052 +gpio-da9055 +gpio-fan +gpio-generic +gpio-ich +gpio-ir-recv +gpio-it8761e +gpio-janz-ttl +gpio_keys +gpio_keys_polled +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mc33880 +gpio-mcp23s08 +gpio-ml-ioh +gpio_mouse +gpio-pca953x +gpio-pcf857x +gpio-pch +gpio-rdc321x +gpio-regulator +gpio-sch +gpio_tilt_polled +gpio-tps65912 +gpio-ts5500 +gpio-twl4030 +gpio-twl6040 +gpio_vbus +gpio-viperboard +gpio-vx855 +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +g_printer +gre +grip +grip_mp +gsc_hpdi +g_serial +gspca_benq +gspca_conex +gspca_cpia1 +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_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +guillemot +gunze +g_webcam +gx1fb +gxfb +gx-suspmod +g_zero +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-a4tech +hid-apple +hid-aureal +hid-axff +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-dr +hid-elecom +hid-emsff +hid-ezkey +hid-gaff +hid-generic +hid-gyration +hid-holtekff +hid-holtek-kbd +hid-hyperv +hid-icade +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-lenovo-tpkbd +hid-logitech +hid-logitech-dj +hid-magicmouse +hid-microsoft +hid-monterey +hid-multitouch +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-picolcd +hid-pl +hid-primax +hid-prodikeys +hid-ps3remote +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-iio-common +hid-sensor-magn-3d +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-wacom +hid-waltop +hid-wiimote +hid-zpff +hid-zydacron +hih6130 +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843 +hmc6352 +hopper +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hostess_sv11 +hp +hp100 +hp4x +hp_accel +hpfs +hpilo +hp-plus +hpsa +hptiop +hpwdt +hp-wmi +hsi +hsi_char +hso +htc-pasic3 +htcpen +hv_balloon +hv_netvsc +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +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-designware-core +i2c-designware-pci +i2c-dev +i2c-diolan-u2c +i2c-eg20t +i2c-gpio +i2c-hid +i2c-i801 +i2c-intel-mid +i2c-isch +i2c-ismt +i2c-matroxfb +i2c-mux +i2c-mux-gpio +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-isa +i2c-pca-platform +i2c-piix4 +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 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i7300_edac +i740fb +i7core_edac +i810 +i810fb +i82092 +i82365 +i82860_edac +i82875p_edac +i82975x_edac +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmpex +ibmphp +ibm_rtl +ib_mthca +ib_sa +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ichxrom +icn +icp_multi +ics932s401 +ideapad-laptop +idmouse +idt77252 +ie6xx_wdt +ieee802154 +ifb +iforce +igb +igbvf +iguanair +iio_dummy +iio_hwmon +iio-trig-gpio +iio-trig-periodic-rtc +iio-trig-sysfs +ii_pci20kc +ili210x +ili9320 +imm +imon +imx074 +in2000 +ina2xx +industrialio +industrialio-triggered-buffer +inet_diag +inexio +inftl +initio +input-polldev +int51x1 +intelfb +intel_ips +intel_menlow +intel_mid_battery +intel_mid_dma +intel_mid_powerbtn +intel_mid_thermal +intel-mid-touch +intel_oaktrail +intel-rng +intel_scu_ipcutil +intel_vr_nor +interact +interval_tree_test +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip6_gre +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_MASQUERADE +ip6t_mh +ip6t_NPT +ip6t_REJECT +ip6t_rpfilter +ip6t_rt +ip6_tunnel +ipack +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ipoctal +ipr +ips +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netport +ip_set_list_set +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_ah +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_rpfilter +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ircomm-tty +irda +irda-usb +iris +ir-jvc-decoder +ir-kbd-i2c +irlan +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +irnet +ir-rc5-decoder +ir-rc5-sz-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sony-decoder +irtty-sir +ir-usb +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isofs +isp116x-hcd +isp1301 +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x-fe +iTCO_vendor_support +iTCO_wdt +itd1000 +ite-cir +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iw_cxgb4 +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlwifi +iw_nes +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keucr +keyspan +keyspan_pda +keyspan_remote +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kobil_sct +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksz884x +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kxsd9 +kxtj9 +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lanai +lance +lapb +lapbether +latch-addr-flash +lcd +ld9040 +ldusb +lec +leds-88pm860x +leds-adp5520 +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-lp5521 +leds-lp5523 +leds-lp8788 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-net48xx +leds-ot200 +leds-pca9532 +leds-pca955x +leds-pca9633 +leds-regulator +leds-ss4200 +leds-tca6507 +leds-wm831x-status +leds-wm8350 +leds-wrap +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +legousbtower +lg2160 +lgdt3305 +lgdt330x +lgs8gxx +lg-vl600 +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libceph +libcomposite +libcrc32c +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +libsrp +lightning +line6usb +lineage-pem +linear +lirc_bt829 +lirc_dev +lirc_igorplugusb +lirc_imon +lirc_parallel +lirc_sasem +lirc_serial +lirc_sir +lirc_zilog +lis3l02dq +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533_bl +lm3533-core +lm3533-ctrlbank +lm3630_bl +lm3639_bl +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lm95245 +lmc +lms283gf05 +lnbp21 +lnbp22 +lne390 +lockd +logger +logibm +longhaul +longrun +lp +lp3971 +lp3972 +lp486e +lp855x_bl +lp8727_charger +lp8788-charger +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2978 +ltc4151 +ltc4215 +ltc4245 +ltc4261 +ltpc +ltv350qv +lxfb +m25p80 +m2m-deinterlace +m52790 +m88rs2000 +ma600-sir +mac80211 +mac80211_hwsim +mac802154 +macb +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac_hid +machzwd +mac-iceland +mac-inuit +macmodes +mac-roman +mac-romanian +mac-turkish +macvlan +macvtap +magellan +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +matrix-keymap +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max11801_ts +max1363 +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max197 +max2165 +max3100 +max34440 +max517 +max6639 +max6642 +max6650 +max6875 +max7359_keypad +max77686 +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925_bl +max8925_onkey +max8925_power +max8925-regulator +max8952 +max8973-regulator +max8997 +max8997_charger +max8998 +max8998_charger +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc44s803 +mce_amd_inj +mce-inject +mceusb +mcp2120-sir +mcp251x +mcp3021 +mcp4725 +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md4 +mdacon +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mem2mem_testdev +memstick +metronomefb +metro-usb +meye +mfd +mga +michael_mic +microcode +microtek +minix +mip6 +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mixcomwd +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mma8450 +mmc_block +mms114 +mos7720 +mos7840 +moto_modem +moxa +mpc624 +mpoa +mpr121_touchkey +mpt2sas +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mrf24j40 +mrst_max3110 +msdos +msi-laptop +msi-wmi +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtd_dataflash +mtdoops +mtdram +mtdswap +mtip32xx +mtouch +multipath +multiq3 +musb_hdrc +mv88e6060 +mv88e6xxx_drv +mvmdio +mvsas +mv_udc +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxl111sf-demod +mxl111sf-tuner +mxl5005s +mxl5007t +mxm-wmi +mxser +myri10ge +n2 +n411 +nand +nand_bch +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +nci +ncpfs +NCR53c406a +ne +ne2k-pci +ne3210 +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netprio_cgroup +netrom +netsc520 +nettel +netxen_nic +newtonkbd +nfc +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_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nfcwilink +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nfs_layout_nfsv41_files +nfsv2 +nfsv3 +nfsv4 +nftl +nf_tproxy_core +ngene +n_hdlc +ni52 +ni65 +ni_6527 +ni_65xx +ni_660x +ni_670x +ni_at_a2150 +ni_at_ao +ni_atmio +ni_atmio16d +nicstar +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +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 +nop-usb-xceiv +nosy +notifier-error-inject +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc_gpio +nsc-ircc +nsp32 +nsp_cs +ntc_thermistor +ntfs +n_tracerouter +n_tracesink +nuvoton-cir +nvidiafb +nvme +nvram +nv_tco +nxt200x +nxt6000 +objlayoutdriver +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ocrdma +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osd +osdblk +osst +oti6858 +output +ov2640 +ov5642 +ov6650 +ov7670 +ov772x +ov9640 +ov9740 +overlayfs +oxu210hp-hcd +ozwpan +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +padlock-aes +padlock-sha +palmas-regulator +panasonic-laptop +pandora_bl +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pas16 +pata_acpi +pata_ali +pata_amd +pata_arasan_cf +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 +pc110pad +pc300too +pc87360 +pc8736x_gpio +pc87413_wdt +pc87427 +pcap_keys +pcap-regulator +pcap_ts +pcbc +pcbit +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 +pci200syn +pcips2 +pci_slot +pci-stub +pcl711 +pcl724 +pcl725 +pcl726 +pcl730 +pcl812 +pcl816 +pcl818 +pcm3724 +pcm3730 +pcmad +pcmcia +pcmcia_core +pcmciamtd +pcmcia_rsrc +pcm_common +pcmda12 +pcmmio +pcmuio +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pcmcia +peak_usb +pegasus +penmount +pf +pg +phantom +phison +phonet +phram +physmap +pixcir_i2c_ts +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +plx_pci +pm2fb +pm3fb +pm8001 +pmbus +pmbus_core +pmc551 +pmcraid +pm-notifier-error-inject +pms +pn533 +pn544_i2c +pn_pep +poc +poseidon +powermate +powernow-k6 +powernow-k7 +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppox +ppp_synctty +pps_core +pps-gpio +pps-ldisc +pps_parport +pptp +prism2_usb +ps2mult +psmouse +psnap +pt +pti +ptp +ptp_pch +pvrusb2 +pwc +pwm-beeper +pwm_bl +pwm-twl +pwm-twl-led +qcaux +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas +qlogicfas408 +qmi_wwan +qnx4 +qnx6 +qt1010 +qt1070 +qt2160 +quatech2 +quatech_daqp_cs +quickstart +quota_tree +quota_v1 +quota_v2 +r128 +r592 +r6040 +r8169 +r8187se +r8192e_pci +r8192u_usb +r82600_edac +r852 +r8712u +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-aimslab +radio-aztech +radio-cadet +radio-gemtek +radio-i2c-si470x +radio-isa +radio-keene +radio-maxiradio +radio-miropcm20 +radio-mr800 +radio-rtrack2 +radio-sf16fmi +radio-sf16fmr2 +radio-shark +radio-si4713 +radio-tea5764 +radio-terratec +radio-timb +radio-trust +radio-typhoon +radio-usb-si470x +radio-wl1273 +radio-zoltrix +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramoops +raw +ray_cs +rbd +rbtree_test +rc5t583-regulator +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rcar-phy +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-cinergy +rc-cinergy-1400 +rc-core +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-em-terratec +rc-encore-enltv +rc-encore-enltv2 +rc-encore-enltv-fm53 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +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-lirc +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-snapstream-firefly +rc-streamzap +rc-tbs-nec +rc-technisat-usb2 +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-trekstor +rc-tt-1500 +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rdc321x-southbridge +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +redrat3 +reed_solomon +regmap-mmio +reiserfs +remoteproc +renesas_usbhs +retu-mfd +retu-pwrbutton +rfc1051 +rfc1201 +rfcomm +rfd_ftl +rfkill-regulator +ring_sw +rio500 +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800pci +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-88pm80x +rtc-88pm860x +rtc-ab3100 +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-ds3234 +rtc-em3027 +rtc-fm3130 +rtc-isl12022 +rtc-isl1208 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max8907 +rtc-max8925 +rtc-max8998 +rtc-mc13xxx +rtc-mrst +rtc-msm6242 +rtc-pcap +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8523 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-twl +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rti800 +rti802 +rtl2830 +rtl2832 +rtl8150 +rtl8180 +rtl8187 +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192se +rtl8723ae +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5139 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rx51_battery +rxkad +s1d13xxxfb +s2250 +s2250-loader +s2255drv +s2io +s2mps11 +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20_generic +salsa20-i586 +samsung-laptop +samsung-q10 +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 +savage +savagefb +sb1000 +sb105x +sbc60xxwdt +sbc7240_wdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbe-2t3e3 +sbni +sbp_target +sbs +sbs-battery +sbshc +sc +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +sca3000 +scb2_flash +scc +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq_codel +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_srp +sctp +sctp_probe +scx200 +scx200_acb +scx200_docflash +scx200_gpio +scx200_hrt +scx200_wdt +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdio_uart +sdla +sdricoh_cs +sealevel +sedlbauer_cs +seed +seeq8005 +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent_generic +serpent-sse2-i586 +serport +serqt_usb2 +ses +sfc +shark2 +shpchp +sht15 +sht21 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sierra_net +sil164 +sim710 +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skel +skfp +skge +sky2 +sl811_cs +sl811-hcd +slcan +slicoss +slip +slram +sm501 +sm501fb +sm7xxfb +smb347-charger +smc9194 +smc91c92_cs +sm_common +smc-ultra +smc-ultra32 +sm_ftl +smm665 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc9420 +smsc95xx +smsc-ircc2 +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-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-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-firewire-lib +snd-firewire-speakers +snd-fm801 +snd-gina20 +snd-gina24 +snd-gusclassic +snd-gusextreme +snd-gus-lib +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-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +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-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-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-opl3sa2 +snd-opl3-synth +snd-opl4-lib +snd-opl4-synth +snd-opti92x-ad1848 +snd-opti92x-cs4231 +snd-opti93x +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16 +snd-sb16-csp +snd-sb16-dsp +snd-sb8 +snd-sb8-dsp +snd-sbawe +snd-sb-common +snd-sc6000 +snd-scs1x +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-soc-88pm860x +snd-soc-ab8500-codec +snd-soc-ad1836 +snd-soc-ad193x +snd-soc-ad73311 +snd-soc-adau1373 +snd-soc-adav80x +snd-soc-ads117x +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4641 +snd-soc-ak4642 +snd-soc-ak4671 +snd-soc-alc5623 +snd-soc-alc5632 +snd-soc-arizona +snd-soc-core +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs42l51 +snd-soc-cs42l52 +snd-soc-cs42l73 +snd-soc-cx20442 +snd-soc-da7210 +snd-soc-da732x +snd-soc-da9055 +snd-soc-dfbmcs320 +snd-soc-isabelle +snd-soc-jz4740-codec +snd-soc-l3 +snd-soc-lm4857 +snd-soc-lm49453 +snd-soc-max9768 +snd-soc-max98088 +snd-soc-max98090 +snd-soc-max98095 +snd-soc-max9850 +snd-soc-max9877 +snd-soc-mc13783 +snd-soc-mfld-machine +snd-soc-ml26124 +snd-soc-pcm3008 +snd-soc-rt5631 +snd-soc-sgtl5000 +snd-soc-simple-card +snd-soc-sn95031 +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-sst-platform +snd-soc-sta32x +snd-soc-sta529 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic32x4 +snd-soc-tlv320aic3x +snd-soc-tlv320dac33 +snd-soc-tpa6130a2 +snd-soc-twl4030 +snd-soc-twl6040 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wl1273 +snd-soc-wm0010 +snd-soc-wm1250-ev1 +snd-soc-wm2000 +snd-soc-wm2200 +snd-soc-wm5100 +snd-soc-wm5102 +snd-soc-wm5110 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8727 +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-wm8782 +snd-soc-wm8804 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8904 +snd-soc-wm8940 +snd-soc-wm8955 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8962 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8983 +snd-soc-wm8985 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8991 +snd-soc-wm8993 +snd-soc-wm8994 +snd-soc-wm8995 +snd-soc-wm8996 +snd-soc-wm9081 +snd-soc-wm9090 +snd-soc-wm-adsp +snd-soc-wm-hubs +snd-sonicvibes +snd-sscape +snd-tea575x-tuner +snd-tea6330t +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usbmidi-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-wavefront +snd-wss-lib +snd-ymfpci +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-laptop +sonypi +soundcore +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-bitbang +spi-butterfly +spidev +spi-dw +spi-dw-midpci +spi-gpio +spi_ks8995 +spi-lm70llp +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-tle62x0 +spi-topcliff-pch +spi-xcomm +squashfs +ssb +ssb-hcd +ssfdc +sst25l +sstfb +ssu100 +ssv_dnp +st +st1232 +starfire +stb0899 +stb6000 +stb6100 +st_drv +ste_modem_rproc +stex +stinger +stir4200 +stk1160 +stkwebcam +stmmac +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv6110 +stv6110x +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sworks-agp +sx8 +sym53c416 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_i2c_rmi4 +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t128 +t1isa +t1pci +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +tc1100-wmi +tc3589x-keypad +tca6416-keypad +tca8418_keypad +tcic +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcm_vhost +tcp_bic +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tef6862 +tehuti +tekram-sir +teles_cs +test-kstrtox +test_power +tg3 +tgr192 +thinkpad_acpi +thmc50 +ti-adc081c +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_dac7512 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timb_dma +timberdale +timblogiw +timbuart +timed_gpio +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmiofb +tmp102 +tmp401 +tmp421 +tmscsim +toim3232-sir +topstar-laptop +toshiba_acpi +toshiba_bluetooth +touchit213 +touchright +touchwin +tpci200 +tpm_atmel +tpm_i2c_infineon +tpm_infineon +tpm_nsc +tpm-rng +tpm_tis +tps51632-regulator +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65090-regulator +tps65217 +tps65217_bl +tps65217-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps80031-regulator +trancevibrator +tranzport +tridentfb +ts5500_flash +ts_bm +tsc2005 +tsc2007 +tsc40 +tscan1 +ts_fsm +ts_kmp +tsl2550 +tsl2563 +tsl2583 +tsl2x7x_core +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tusb6010 +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030_charger +twl4030_keypad +twl4030-madc +twl4030-madc-hwmon +twl4030-pwrbutton +twl4030-vibra +twl4030_wdt +twl6040-vibra +twofish_common +twofish_generic +twofish-i586 +typhoon +u132-hcd +u14-34f +uartlite +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +udc-core +udf +udl +udlfb +udp_diag +ueagle-atm +ufs +ufshcd +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_netx +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uli526x +ultrastor +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 +unioxx5 +unix_diag +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usbduxsigma +usb_gigaset +usbhid +usbip-core +usbip-host +usbkbd +usblcd +usbled +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvision +usb_wwan +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-int-device +v4l2-mem2mem +vcan +vcnl4000 +ves1820 +ves1x93 +vesafb +veth +vfio +vfio_iommu_type1 +vfio-pci +vga16fb +vgastate +vgg2432a4 +vhci-hcd +vhost_net +via +via686a +via-camera +via-cputemp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via_wdt +video +videobuf2-core +videobuf2-dma-contig +videobuf2-memops +videobuf2-vmalloc +videobuf-core +videobuf-dma-contig +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +viperboard +viperboard_adc +virtio_balloon +virtio_console +virtio_mmio +virtio-rng +virtio_scsi +virtual +visor +vivi +vivopay-serial +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_pio2 +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmwgfx +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxge +vxlan +w1_bq27000 +w1_ds2408 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds28e04 +w1-gpio +w1_smem +w1_therm +w35und +w5100 +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +wacom +wacom_i2c +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wbsd +wd +wd7000 +wdt +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wil6210 +wimax +winbond-840 +winbond-cir +wire +wis-ov7640 +wis-saa7113 +wis-saa7115 +wis-sony-tuner +wistron_btns +wis-tw2804 +wis-tw9903 +wis-uda1342 +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlags49_h25_cs +wlags49_h2_cs +wlcore +wlcore_sdio +wlcore_spi +wm831x_backup +wm831x_bl +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x-ts +wm831x_wdt +wm8350-hwmon +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994-regulator +wm97xx-ts +wmi +wp512 +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xenfs +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen_wdt +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 +xirc2ps_cs +xircom_cb +xo15-ebook +xor +xpad +xprtrdma +x_tables +xt_addrtype +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNSECMARK +xt_conntrack +xt_cpu +xt_CT +xt_dccp +xt_devgroup +xt_dscp +xt_DSCP +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_HMARK +xt_IDLETIMER +xt_iprange +xt_ipvs +xtkbd +xt_LED +xt_length +xt_limit +xt_LOG +xt_mac +xt_mark +xt_multiport +xt_nat +xt_NETMAP +xt_nfacct +xt_NFLOG +xt_NFQUEUE +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xt_REDIRECT +xts +xt_sctp +xt_SECMARK +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_TCPOPTSTRIP +xt_tcpudp +xt_TEE +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +z85230 +zatm +zaurus +zd1201 +zd1211rw +zhenhua +zio +zl10036 +zl10039 +zl10353 +zl6100 +zlib +zlib_deflate +znet +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zte_ev --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/i386/generic +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/i386/generic @@ -0,0 +1,14492 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x7e60d0cb kvm_cpu_has_pending_timer +EXPORT_SYMBOL arch/x86/kvm/kvm 0xb402fd92 kvm_read_guest_atomic +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x254e5667 scx200_gpio_base +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x35a3c008 scx200_gpio_configure +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x8cfa375c scx200_gpio_shadow +EXPORT_SYMBOL arch/x86/platform/scx200/scx200 0x907665bd scx200_cb_base +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x43390b95 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0xeb1efde5 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x5f2c4ace uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x5afce36a bcma_core_dma_translation +EXPORT_SYMBOL drivers/block/drbd/drbd 0x35131b36 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x7730f22d drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0xaf27bebf drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0xd2943484 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x0f79965a pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x29562bbb pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x5abbd96f pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x5bbdb52b pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x73d3bc57 pi_read_block +EXPORT_SYMBOL drivers/block/paride/paride 0x7f99d71c paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x9244fbd6 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0xbb7c40ef pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0xcc15f0ed paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0xd7faf65f pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xd8887a4b pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xe4738bc5 pi_connect +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1348760d ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x16dcec76 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1a10c898 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1aba5db8 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x423b776a ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4c971bec ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x524f6f51 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5e80f37c ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5fcdcc05 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x67cb9784 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x78fd36e7 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8c8ee770 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x96cbcc81 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9cbdef2c ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x9ff22bf9 ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa28a2ace ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa2a98b91 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa2cef738 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa9ccb030 ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe0fa83f2 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe6ab72a6 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf2576cb9 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf94143b7 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfcb77cfd ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/nsc_gpio 0xa0c551eb nsc_gpio_read +EXPORT_SYMBOL drivers/char/nsc_gpio 0xd2564e0b nsc_gpio_write +EXPORT_SYMBOL drivers/char/nsc_gpio 0xf7c5e5a9 nsc_gpio_dump +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/dma/dw_dmac 0x056e71ff dw_dma_cyclic_prep +EXPORT_SYMBOL drivers/dma/dw_dmac 0x16a53b41 dw_dma_get_src_addr +EXPORT_SYMBOL drivers/dma/dw_dmac 0x3d790c84 dw_dma_generic_filter +EXPORT_SYMBOL drivers/dma/dw_dmac 0x90d1e88a dw_dma_cyclic_start +EXPORT_SYMBOL drivers/dma/dw_dmac 0xc8e3b8a5 dw_dma_get_dst_addr +EXPORT_SYMBOL drivers/dma/dw_dmac 0xd480b73e dw_dma_cyclic_free +EXPORT_SYMBOL drivers/dma/dw_dmac 0xe615cb3d dw_dma_cyclic_stop +EXPORT_SYMBOL drivers/edac/edac_core 0x65b87556 edac_mc_find +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04dd92ce fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x0dc2caa0 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x1012ecc5 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x16e91e21 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x279326cb fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0x2885fec5 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x31a9f19f fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x33e83993 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x38c1f63e fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x3ab5c4db fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0x3c56ef91 fw_workqueue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x47e9be95 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firewire/firewire-core 0x49013840 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4a9df868 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d5d4eca fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d75f35f fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4d8077a1 fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x57e89657 fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x5beb43f5 fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x65c9438b fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x68181920 fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x74f3f4b3 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x77f7afc0 fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0x7a37d4fc fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x7e431b14 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x86468d44 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8a97bfd6 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0x929dd7f7 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb9029cf8 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0xbea156c5 fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0xcf9f5307 fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe157e10e fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe34418d4 fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe7860882 fw_iso_context_create +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0027326e drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0x02e6e099 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x040d0a6f drm_platform_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x05247afe drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0538c414 drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x053ebc56 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0a636119 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ae4b94c drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0bca79c5 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ca81641 drm_mm_init_scan +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0fccafb1 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0fda8a76 drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x10d9670e drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x11065515 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x11a8161a drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x12c6276a drm_buffer_read_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x12ea1c75 drm_mm_insert_node_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x13a31f7e drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x142b8b35 drm_buffer_copy_from_user +EXPORT_SYMBOL drivers/gpu/drm/drm 0x143267c3 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1473f1f0 drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1514b2b4 drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x194eadaa drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x19621a52 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1998b1e8 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a051210 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a770ac3 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b2d25b5 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1c295c8e drm_get_last_vbltimestamp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1ca1c936 drm_prime_remove_buf_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1e266ec7 drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1e321934 drm_prime_destroy_file_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1eba81ff drm_mm_search_free_in_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x21880fe5 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x222eaa74 drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24004831 drm_select_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x242a44b8 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0x25e07a64 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x27188459 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0x27866bbc drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x285fd5c1 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2af164f7 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2b4328eb drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2dc18f8c drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2f8f4c7b drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x32a42fdf drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x33022635 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x33c79d6d drm_framebuffer_unreference +EXPORT_SYMBOL drivers/gpu/drm/drm 0x33fbceab drm_put_minor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x341f98d9 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x346127a7 drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x35a22a14 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x371ecd6f drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38041ef9 drm_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38a4f7ae drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x39e87834 drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3ac1fef9 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b9d009a drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3bd8706a drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3befa01a drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c5dd832 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3c83cc1d drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3d925f28 drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3de564f0 drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3eb37b9d drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3fdc7825 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x41ee6760 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42c5d4c8 drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42cb6d59 drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x42edbeb6 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43384bd9 drm_buffer_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43f7f549 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44a0c113 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x45bb87f8 drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x476f25d7 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x498dcb5e drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4a579348 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c511235 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4cb85321 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4d648c0a drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4ea1f5a2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x544a4058 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55eede51 drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x572647c1 drm_connector_unplug_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0x574943d6 drm_unplug_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x574aa079 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x57fc23e9 drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x58da0bc4 drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5ae051af drm_mm_insert_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5b12d697 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5d587ec7 drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e152e4e drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5eafb8e9 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5f9d060e drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6033e39d drm_prime_lookup_buf_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x60a2ec5e drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x617cf89a drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x61981fe3 drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6229da7e drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6270e0cb drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6278c899 drm_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x629c05e1 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6456c6e9 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0x65234d37 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0x65287ba8 drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0x662da820 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x664bb3de drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x66b1259b drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x675255c0 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x67cbfb90 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b14bccc drm_mode_cea_vic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b6d7375 drm_timestamp_precision +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6cee2e42 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6d012612 drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6e89c5f3 drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ee3e89c drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ee961a4 drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6eec167c drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6f090540 drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7468ec2d drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x756f6724 drm_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0x76a6bc8f drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x76b4446f drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x77ab793e drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x79a6e966 drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a4e7297 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a5d6a3c drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b42b5d4 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b9df00e drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e514ad2 drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x816099b6 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8401ea97 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8775d99b drm_mm_search_free_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c510862 drm_find_cea_extension +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8d9455e2 drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8de13715 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8dfb019d drm_buffer_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8ebef5f0 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8eff9111 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8f7df3a7 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x905db200 drm_global_mutex +EXPORT_SYMBOL drivers/gpu/drm/drm 0x910aa140 drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0x919e5b5b drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x96cd66d4 drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9745d638 drm_err +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9bdac185 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c1512a1 drm_mode_group_init_legacy_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c8e75b1 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9df22806 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9e9ca7c7 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9f64c152 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa0edc3e8 drm_get_platform_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa2f8280a drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa34de583 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa89f09a5 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xabf418a8 drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xad9be582 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0xae9d9709 drm_get_minor +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb2ead560 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb92b2cdd drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb95beb55 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba2d0719 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe001c53 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf8dd3f3 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbfa69a78 drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc063bdf1 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc25a61ec drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc35f2695 drm_mm_init_scan_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc414c422 drm_vblank_offdelay +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc45296a0 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc4b3c9bf drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc54c82e0 drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc64a1b30 drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc6f7d579 drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc7e4ee13 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc80c236b drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc9b4a9ec drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc9c001d0 drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xca45efbc drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcaebfde2 drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcb1beab5 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcc4d11e4 drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd0fc417 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcda91c46 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xce866b4f drm_fill_in_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd00f38ed drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd2335101 drm_fb_get_bpp_depth +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd28a491a drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd6334e6c drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd684bab9 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd6e0601a drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd84e1c53 drm_mm_insert_node_in_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd90c026e drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdb7b118f drm_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdbb5a9f5 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdedbe9d9 drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe06d1c8c drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe0ebefac drm_platform_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1a20fa9 drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe3798c17 drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe460624c drm_framebuffer_reference +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5326cc4 drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5ad4aab drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe5f3be7a drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6f46e6e drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7197773 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9c6a648 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0xea363236 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeb25e668 drm_prime_init_file_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeb55859d drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeb6274e9 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0xecdfcbde drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xedf08177 drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeee772ad drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf0ce20e2 drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf2f0a165 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf4771977 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf5586596 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf55c1f03 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf6555f69 drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf7ba4632 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfbbe430c drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfe13808b drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xffc6c87a drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0365d65c drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0a7e0a3b drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x15d89993 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x19f7d6a7 drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2d7a787f drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2f514670 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3bd63df9 drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3c81093a drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x45ceb4b4 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4973bd91 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4aeda5c8 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4cf29d66 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4e0b011c drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x56bb058c drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5b0430dd drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x711a004a drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x79f355ab drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x7b1247da drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x81387301 drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x8ba5042c drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x92a3d360 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9358d734 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x987cf722 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9b3cbb6e drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa0371686 drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa8d6809d drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xaec18ab2 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb37a0603 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbb5ad897 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc6380984 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc7fd39bb drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xcadba230 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd02c73c7 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd3981317 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd495c82b drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd4f9268b i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd5d8b6b8 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe0b1f763 drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xe7816c58 drm_fb_helper_restore_fbdev_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf7d1b974 drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfee43a69 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0x2ea008f3 drm_usb_init +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0xc7373e06 drm_get_usb_dev +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0xf5109917 drm_usb_exit +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x028a942e ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0295ffda ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0d1180f3 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0ee50ded ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x132b05be ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17d67f3d ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17e48a1d ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x19db1305 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1a189651 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x20f86c5f ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x266d8a60 ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x27110ab5 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2b54aa9a ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2d3dc3e8 ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3183d519 ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x31cddedd ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3be5ec33 ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3d6a779b ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x48ae6c95 ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4d1eea63 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x52adb467 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x547acb2b ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x562d1cec ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5cf59609 ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x617df638 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x63eb4b43 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x67b1d568 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x69558cd7 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6bd5c873 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x71c4b72d ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7586fb3a ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x786de09c ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x80d86f0e ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x844daf0c ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x84e72cff ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x854fe967 ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x85714056 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x861fcd22 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8a1f7532 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x8ca37389 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x998e45c0 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa36f8e76 ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa58e0969 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa591c06a ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa69dcdc8 ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa738ecac ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa822b180 ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa95a4711 ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaac08a4e ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xaf8bd2e5 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb4621466 ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb7902d7f ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb88fb64d ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xba872533 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbd51692c ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc1fae5e4 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc2f7a143 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcab74871 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcc16f448 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd69e0ab6 ttm_bo_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xdbf32d07 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xeb832514 ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xebbe101b ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xec77e82a ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xee4a19bf ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xef7df47e ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf3fccf95 ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf5113253 ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf8a26846 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfbc2c5ec ttm_object_file_release +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x83f24dcc vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0xc57af178 vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x0e2a6864 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x0f5877d4 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x34257f35 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xe5022f95 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xe6fdafa8 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xed1d2a08 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x055980df i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x3cc58118 i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xf6fd6873 i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x10d32f8c i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x928ae860 i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x2dfcb84f amd756_smbus +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x53e2b5e8 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xa573f1a8 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xbaa1805a hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xce1e4ab0 hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xcf88b5e3 hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0x86f663ee hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0xe5268d64 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x2448599e adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0xd27f89d0 adis_enable_irq +EXPORT_SYMBOL drivers/iio/industrialio 0x076aa354 iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x1f0b53a6 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x2d6bcdcb iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x303c18a1 iio_buffer_store_enable +EXPORT_SYMBOL drivers/iio/industrialio 0x3fb707a6 iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x45929dba iio_buffer_register +EXPORT_SYMBOL drivers/iio/industrialio 0x5785b30c iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x5cdae2ee iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x6785ac02 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0x6c71c694 iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x6dbadc88 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x6f350fb8 iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0x70af0cd2 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x7f8facbe iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x93f6f039 iio_buffer_read_length +EXPORT_SYMBOL drivers/iio/industrialio 0x957c7c66 iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x96a768fb iio_buffer_write_length +EXPORT_SYMBOL drivers/iio/industrialio 0xa259142a iio_buffer_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0xb0806541 iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0xb69a4e65 iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0xb8028c73 iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0xdf76bbeb iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0xf0ef9e82 iio_sw_buffer_preenable +EXPORT_SYMBOL drivers/iio/industrialio 0xf219d36e iio_buffer_show_enable +EXPORT_SYMBOL drivers/iio/industrialio 0xf6890eab iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0xffe45de9 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio-triggered-buffer 0x29211c17 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-buffer 0xc200f5c5 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/kfifo_buf 0x769af67e iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/kfifo_buf 0xed044748 iio_kfifo_free +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x37838b44 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x5f05098b rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8ed679ff rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x9d1f522d rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xb93baf0d rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xc0bf4edc rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x0e88e6b1 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1285dd85 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x1a08b450 ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x2840f1d5 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x29af7434 ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3598cd6c ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x3777a774 ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x4159a443 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x495bab8a cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5f6a5a0d ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x71ce04ad ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x73ade465 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x9dfac9db ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc47235b4 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd53fe57a ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xec55b869 ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xfd83430d ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x00be11c8 ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x01ffe8bf ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0487410b ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0635581f ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06c82fcf mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x09e7fdb3 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0c1b9ac1 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0d21672d ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0fa9e4b8 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x10c9ef33 ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x12c68fc4 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x14f84918 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x16bd5f75 ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x171f99f1 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1a700658 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1c4c4b8e ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1ef9bebc ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1f4f19da ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2049a2ec ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x20d6c18e ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x22b82d8c ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x298cb36f ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2ed6e386 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x373ac396 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3757be48 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x422bf826 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4a6b0e4d ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4d94e561 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x50dbc447 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x520b2638 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x525ee48f ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5a8bb3eb ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5ba13726 ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5d23733d ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x63215722 ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x68410903 ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x70ca6175 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x71e15558 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x72b1ef4c ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x77dd82b9 ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7be2b97a ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7edd8ad3 ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x80663532 rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x846ebfb9 ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x84763e0b ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x85dd13de ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x871f560a ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8cdb3f0d ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8d6f52ff ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8efaf126 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x903d73fb ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9a4eb371 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9ea16503 ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa10b7aeb ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa19896a5 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa1d352b1 ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa49f11c5 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa511a631 ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa970e1e6 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xaeb780ab ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb0ff062c ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb1a312e1 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb273c5ef ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb40fe947 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb8a69ecd ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc03c69a8 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc32073fc ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc32b59ff ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc48a63d7 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc67f14a5 ibnl_remove_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc92ba12a ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xce38dd79 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd109bc08 ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd1c028fd ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd2c5bf01 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd3feaba8 ibnl_add_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xddd7bce2 ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xea2cf1bd ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xed44e48b ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xedb5b549 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xedeca95a ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf0031d8a ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf725b07e ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf8731070 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfc150956 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x040a000f ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x04a16f16 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x28228e8a ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x57f3451d ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x682f762a ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x74656fa7 ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7c1b83a4 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x946d5d27 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb03eb857 ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xb56d0da6 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xba6f8d93 ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc5cbf1e0 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xdfbaaa20 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x22e186a7 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5dbf401b ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x5dd75d8a ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x61393368 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x6d3267b5 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x6e44fd9f ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7b4b87c1 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x8001438f ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xda0d50ec ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf6b6444b ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xff9339fe ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x013c6361 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x1e57691e iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x208b0bd1 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x41a2d89d iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x66e7deba iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x680dafb1 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xca9e71e2 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xdec62b7f iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x05e3ae6f rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0b595899 rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x0daffbfc rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x226a7588 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5e4f6dc4 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x70c6a843 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x7754d056 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x79a98eea rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x866129b4 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8dfd1772 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x94691f1f rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x96a8475e rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9f0dc84c rdma_notify +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9f58b221 rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9fb47748 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc35223e3 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xdd24b8e0 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xddb4a91a rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xf2c4715f rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfe0b61e6 rdma_resolve_addr +EXPORT_SYMBOL drivers/input/gameport/gameport 0x050e3423 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x586e2b65 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x64443fa1 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x6d73ee98 gameport_close +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8280cf75 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x85436520 gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x857b8967 __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0xc2d5947f gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0xda8a854e gameport_unregister_driver +EXPORT_SYMBOL drivers/input/input-polldev 0x4824869b input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0x6bee7172 input_allocate_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xbdf131b4 input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xe2fde61b input_register_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0xf3f3e782 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x72cb254c ad714x_remove +EXPORT_SYMBOL drivers/input/misc/ad714x 0x8b42b4d9 ad714x_probe +EXPORT_SYMBOL drivers/input/misc/ad714x 0xebbef72d ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0xfc08cf8b ad714x_disable +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x18a9fddb cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x892d76b2 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x89d9444e cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0xca3f100a cma3000_suspend +EXPORT_SYMBOL drivers/input/sparse-keymap 0x316bf522 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/sparse-keymap 0x4033e361 sparse_keymap_setup +EXPORT_SYMBOL drivers/input/sparse-keymap 0x5681840d sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0x5af38412 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x5bcd5f66 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0xf21b482d sparse_keymap_free +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x031ca0be ad7879_pm_ops +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x481dd703 ad7879_probe +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x97f83edf ad7879_remove +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x3ba9787c attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x40af52c5 capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x4a2819ed detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x792f7012 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7fcbbcaf capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa1de7fd4 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa7c4fd6c capi_message2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb7f7f706 capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc10fe128 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xc4b56106 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe15ac80d capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe5edc014 capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe8ad9bd1 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x0285fdeb b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x11a26420 avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x2b9c7217 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x2fa3061e b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x30f4b254 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x3b16c1a3 b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x43fd7117 b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x6e02c741 b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x70fc1f79 avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x785089f4 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x891b7462 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xbff7ae48 b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd6228ab6 b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd77d0157 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xfa10fee4 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xfc4a1b93 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x2ebd3dc7 b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x548e064d b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x6afb7fd5 b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x72f42a07 b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x8be9083d t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x912e69be b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x9ed18bd3 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xbaf7ef1c b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xd6f9f1ea b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xdf09824f b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x1bf3e088 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x0d64791a mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x1c0dc6fb mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x5d1b86f3 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xe8221730 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x50a7b5a8 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xa8e33bdd mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x71e51a82 hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x7f29ce36 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xe227344e FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xff2db2cf FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x0a9526aa isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x16ba61f3 isacsx_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x51fb937d isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x7bb2ff4a isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xf873d14b isac_setup +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x25762f79 isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x6886d131 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xf04f3f6e isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x063d6f81 recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x22468c64 bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2c2612ff mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x3a4112ed dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x54451388 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x588886a6 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x614ede30 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x69042862 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6ca0ed62 get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6f73095f mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x701b7fef mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x7ad7462d mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x7f0da3ad recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8759a4b1 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8a4e99fb mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x91f34785 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x96309324 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x971f0d8d mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x9c6fa246 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa89739e5 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xaadd25db recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xb728e88e mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc20cd3f9 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xcfbbbcf8 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdb0770a8 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe0186ee2 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe87943cf mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf217aa99 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xfebf741e mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/dm-log 0x270da75f dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0x650423ff dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0xb60d56a9 dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0xcbc668fe dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x0ea20730 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x195ca53b dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0x506094bb dm_snap_origin +EXPORT_SYMBOL drivers/md/dm-snapshot 0x50c8ca9d dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0xb79e1f3f dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0xea9e95fb dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/raid456 0x58c1231e raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x24a888e2 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x29b1ffab flexcop_device_exit +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x2cd45d55 flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x435de62c flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x658282a1 flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x7d82c312 flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x844cf88a flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x923c34b5 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xab32240b flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xbdb57f89 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xc8ad6a64 flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xe66670a0 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xf050340f flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x090d5c96 dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x101a29b8 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x17523ce7 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x196f1ac1 dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x237f7910 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x2483a166 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x286a560f dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x28cac563 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x293961b4 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x300f2abb dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x30aafa86 dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x45044e64 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x49b8e7ae dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x4c70c35a dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x5304cab8 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x5555358d dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x5904851f dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x60d1ff5e dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x636002a3 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x7136483c dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x86cbd363 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x8c6ab0de dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x95ef6d1b dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x9727e060 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x987dcfde dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xa989e8fb dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xae7de632 dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xb72b5fa0 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xbfd0bb0d dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xc4f60d80 dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xc5133ab9 dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xd3ee7530 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xd5bbf913 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xd68a099e timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xebf3261f dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf3aa6e52 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf3c91c96 dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf67d741d dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xfcc0ed9c dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-frontends/a8293 0x770d6f57 a8293_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x0d783162 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/af9033 0xa52123d5 af9033_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0x31d0c6bd atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x0415bd06 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x11a3705a au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x3a20e949 au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x4cfb447b au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x74f610c4 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xb1137bfe au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xd7eea9e4 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xeee86b81 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xf5e609a2 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0x30dad0e6 au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0xbd86c71f bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0x29b3087f cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x1d8086b5 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0x661c65e1 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x060ea05f cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x46edc3f7 cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0xb21a7c1c cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x56d41f0a cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0xcbe59c9f cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0xe33a6e8b cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x2a658974 dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x33769d00 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x35a4da3c dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x37e7cb6a dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x9e19b5bd dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x0d619b6f dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x0f9714cf dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x276f4149 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x40281045 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x422b5f69 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x43228add dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x541ed16b dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x61893ab8 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x633f4356 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x71d64fc8 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x7706e351 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xa3be9f30 dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xb1608e01 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xbbd28f55 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xbde35c9a dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0xbc88e74d dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x3e5bd1aa dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x55bea54e dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x67d45ea3 dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x7a3cd139 dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0xb019dd06 dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0xbda35d31 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x27e31732 dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x511eb914 dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x5ddbc775 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0xd281a078 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x03e8ac46 dib7090_slave_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x09128143 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x12acdb9c dib7000p_ctrl_timf +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x2d8e1e40 dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x394c7fd2 dib7000p_get_agc_values +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x538a59b4 dib7000p_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x5cfdc716 dib7090_get_adc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x684f24d9 dib7090_tuner_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x77b7e190 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x83feb0cf dib7000p_update_pll +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xa1da5156 dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xaf88ff22 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xc9c021e6 dib7090_get_i2c_tuner +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xd2efd4d4 dib7000p_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xe557d33f dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x1543f1fa dib8096p_get_i2c_tuner +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x16599695 dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x1e999f13 dib8090p_get_dc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x3304f4ff dib8000_ctrl_timf +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x37708371 dib8000_get_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x3778029d dib8000_set_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x4d9cd75b dib8096p_tuner_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x4ebf389c dib8000_remove_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x6d414468 dib8000_get_adc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x6d7924fc dib8000_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x6fce893a dib8000_pwm_agc_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x79bd37db dib8000_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x92a10065 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x9ed6d1f2 dib8000_update_pll +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xbb0853e1 dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xcefd5bc7 dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xddc5d11d dib8000_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xebf6479e dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xf0bed6fd dib8000_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x0382d9a0 dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xaba2a8ee dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xad3ad91c systime +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xaff9355e dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xd134bb3d dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xde378c6d dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x151d886d drxd_config_i2c +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0xc5f44733 drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0xdb580525 drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0xfb023e80 ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x40cb2627 dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0xefedca4f ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x3c2f1caa isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0xca926868 isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0x25d90468 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/it913x-fe 0x66dd349d it913x_fe_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0x19663ced itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x9bb957aa ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0xfadb2d0e l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0x5da30140 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x9ae88e34 lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0x0de12511 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x78ea0d67 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0x273ec413 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0xf7f0fb2b lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x518b9155 lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0x3f1196c3 m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x8a8c70be mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0x41590474 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x63f42fdd mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x59531f57 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0x85eaa55d nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0xc4416154 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x19ad20c8 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x15d13644 or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2830 0x73765683 rtl2830_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2830 0xeaf3329c rtl2830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2832 0x2a34bfaa rtl2832_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x94ff5a17 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x42d5b6ad s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x73c5da80 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x7c9c66fb s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0x83920edc s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x3f75870d si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0xb9a2b1e6 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x21950b04 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0xb78fa345 stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x10359c8c stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x82e4240e stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0xa96634bd stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0x52fccaeb stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0xb9d8858d stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x5c4a0275 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0xc6809a5a stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x2e9da3f2 stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x9a2cabcb stv090x_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0xdf74274b stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x4e3feb75 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x979345b0 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0x18513d85 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0xa07584f1 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0xbb232a7c tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x83795682 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0xb5d20c78 tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10071 0x5a1ab945 tda10071_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x1f849a1f tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x17ee30b2 tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0xa64bb53b tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0xe358e9eb tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0x34d54eee tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x58f98d49 tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0xc8c0db9a ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0xc358a65d ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0xf2d25727 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x989fa9b3 zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0xdbed731f zl10353_attach +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0x347d6b12 btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0x7111fa08 btcx_riscmem_free +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x32b87372 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x3db8be82 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xc184ec1e cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcd6112cb cx2341x_handler_init +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xf94517f9 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xf9f14941 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/i2c/tveeprom 0x5211a8c9 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/i2c/tveeprom 0xdabca84d tveeprom_read +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x0b325ed1 flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x143db8b1 flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x5b6c5912 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x5db04b63 flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x9e6cb3e0 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0xab258282 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0xc3d79c78 flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x803d8015 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0xa92ca39d bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0xbd4570ed bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0xff5f0ea0 bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x4074f338 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0xc64133b0 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0xfac163b5 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x027a0c71 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x1946bb0c write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x2e540819 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x45fcacb2 dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x77fd9f7d read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xb161b5ff rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xd3176680 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xdca6781b dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xe7057522 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0x1e38bc33 dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x4c2412bd cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x5ad5d433 cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x99a22c0d cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0xa2ec99f1 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0xb9527edf cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x121d2f47 altera_hw_filt_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x6ff7510d altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x9247b72f altera_hw_filt_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x987cf112 altera_pid_feed_control +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0xdb3faf38 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0xe66b9812 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0xf0e2debf altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x2afeb5ce cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x35b606ee cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x4f9f3059 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x60c64770 cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x6e9d2426 cx25821_devlist_mutex +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x94d89d48 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0xbdc4faaf cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0xc4363bad cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0xcdab661a cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x6ba63e10 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x86ebd83e vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x33dd577e cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x3e0999d2 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x4f410636 cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x5781332e cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x2085d779 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x452552ac cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x493ab903 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x4b48d9fe cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0xe52a526e cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0xf9c5026a cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x1aa7d1c0 cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x2ed2d10e cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x4112f8f5 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x4216fc84 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x46bfe63e cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x4890d7a8 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x59b01305 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x5cc8e459 cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6026871e cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x61384a2f cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6156a3d2 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6242d6e1 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6abaeddf cx88_free_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6ffa500b cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x7642ed3c cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x7674f4aa cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x82f19b9c cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x938f5405 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xa01ddc52 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xa6de61ab cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xbecebf1b cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xc4b94898 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xca86b42f cx88_risc_stopper +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xdec6040c cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x0871e00f ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x2ae376b7 ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x3fec3cba ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x431ed686 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x479c7672 ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x485da080 ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x5194ccf6 ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x63c56d89 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x6c331754 ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x6e15fb4f ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x818e82a5 ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x82d9ada4 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x969b2597 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xac5d663a ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xbc7f74f8 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xcaeacb79 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xee07a819 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x0f52c0a9 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x146ae7d2 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x1a5314a2 saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x3b49005e saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x3c7d0418 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x3cc44a6f saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x4ed9ab95 saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x520fba3e saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x652e543d saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x9392a2e4 saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xa1b4f06f saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xd26377ac saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0x7d881b05 ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0xc3e4c127 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x22696884 videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x33c7cac7 videocodec_unregister +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x54ed4b61 videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x77357882 videocodec_attach +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x0a6e58d2 soc_camera_unlock +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x21777129 soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x4ac6e857 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x4bd0682c soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x5e3f06c0 soc_camera_lock +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x66128763 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x78f75fef soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x9a901cb2 soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x2fc57265 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x31477397 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x61871f65 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x7371455d soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0xc8b28da5 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0xde30e6b9 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x05955338 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x0bd8b399 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x1ab0ba3c lirc_dev_fop_write +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x58dc126f lirc_register_driver +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x81cd59f1 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x8cb589de lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xd9966492 lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xe894fb1d lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/rc-core 0x597bdd3d ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0xae7e823f ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/e4000 0x694daf09 e4000_attach +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x105f6306 fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x935dd4e8 fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x42491be6 fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x86d780c5 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc0013 0xdfffe82e fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc2580 0xb0c2134b fc2580_attach +EXPORT_SYMBOL drivers/media/tuners/max2165 0xe2269845 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0xb622c5cb mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0xeb8f6aed mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0xcdab55ab mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x01e7de2e mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0xd7d6043d mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0xfd42fbae qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18212 0x5ee99372 tda18212_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0xcf97cc95 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tua9001 0x4619c38a tua9001_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0xd41b1dc4 xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x4037b57c xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0xa1146b49 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x1387b7b1 cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0xd639508c cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_cypress_firmware 0x6719bc9b dvb_usbv2_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_cypress_firmware 0xa93ddfa7 usbv2_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x063437f3 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x06d8d0b9 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x13871d5c dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x947ff880 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xb81c0fe4 dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xc785eaff dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xff4e1b8e dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x1763ea50 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x4477606e dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x7ef4c8ee dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x8d09b70b dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xb679239e usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xf2635f38 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xf32fd6bb dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x13e247e0 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0xb06f1e02 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0xd4e288db rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x3326dc6e dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x4333b9d9 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x84bdc26a dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x922d4171 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x93f8f463 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xb448f118 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xb47559e0 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xb76d17bd dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xcb58b456 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xd7badf18 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xf794b0de dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xfcfb1888 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x520cbef4 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0xc227f749 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x0e8b45c4 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x363cc038 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x5009cbbe gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x6b0c706a gspca_suspend +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x82565844 gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xde8892d6 gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xdfe847c7 gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xf70a5c7e gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x6cb9e677 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0xf3fc62a0 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0xf54accbd tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0xcc5f4186 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0xe798404c ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x1e4491dc v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4adaf0f3 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x53c9394f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x5f96a661 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x87606b98 v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0xabe27502 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x459e133f v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0xa720b59d v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0xdbb6d0e0 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0xdd24e19f v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x2f3d92a4 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x3000f3b6 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x35a52e18 videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x384c5ce8 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x4f1d9b95 videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x5a6eed69 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0x58214f2d vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x01889d37 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x040f6246 v4l2_subdev_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x05660d9a v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x16244fe5 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x1dd6f5d0 v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x23018542 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2342f1ae v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x23c124f5 v4l2_ctrl_add_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x25515a6d v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2940b854 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2a0d79c2 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3aa0d65b v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3bdd0f94 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3d1ea162 video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x45dcf5f4 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x49fad6b9 v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x4c2c5fb1 v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x55813aad video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x58a1c4fd v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x6a2fc80a v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x6a95f83d v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x6f7e4788 v4l2_subdev_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x730bc1b1 v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x7a3cd015 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x7c2e1d1b v4l2_subdev_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x7fc7f050 v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x8106095a v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x825d8f37 video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x87bdec66 v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x89256176 v4l2_subdev_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x93063a8b v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x95a4be11 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xa3225274 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xaa8945af v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xaee1eb08 v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb1eef649 v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb20d2e26 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb36c7374 v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb5ea6812 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb77b0159 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbac4a225 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbc5671dc v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbc969192 v4l2_subdev_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbd8e3dd0 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc12cf8f8 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc1beaa11 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc5a8c125 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xcda04a5b v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xd3867ffd v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xd4b19e37 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xd90b73ce v4l2_ctrl_handler_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe61a07b5 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe6bf997c v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe6fce6f2 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe8eb6a76 v4l2_subdev_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf0d30235 video_usercopy +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf4caa01a video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfaeda5b2 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfb77a93e v4l2_subdev_querymenu +EXPORT_SYMBOL drivers/memstick/core/memstick 0x13354363 memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x23401bd2 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x28bc4591 memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x427cf763 memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d820a02 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5e79bbfa memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x9e840ae5 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0xa5987a36 memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xb1b6818c memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xbb60c0b2 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xc29dcf12 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0xce68aacc memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xcf5ca632 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0xe45c4b1d memstick_remove_host +EXPORT_SYMBOL drivers/memstick/host/r592 0x52f1b23b memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x1bbe4f02 mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2f8fb1fa mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x2fa47e98 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x3d58d397 mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x451d8259 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x46653216 mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4fd9dc64 mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5466b973 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5e5f3dd4 mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5f34ef78 mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x5f506aab mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x66f09e92 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x673729b0 mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x812acae8 mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x842b29ec mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xa4b50226 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb1ee9c62 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb4c59205 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb8e47456 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc5cd8305 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd00c7eda mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd2ca462c mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd5ee493a mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a84910 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xe8cc832b mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xeae90fb6 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfbe03e2e mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfd8d5d0c mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfefccbd2 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x05ce6027 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x061b3c6c mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x09b9c181 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x17c50377 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x18422f2e mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1a2a5a47 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x227ef1c1 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2490f684 mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2995f74c mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2ae5e977 mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2c894d55 mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x384cf230 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x3f7c9c2c mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x55c6dd2c mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x62a2bdf7 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x6eedb8b2 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x75af6040 mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x8da5eea2 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x94adc9e1 mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xaf3bffd3 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb41779a7 mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb6d0af15 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xcb9da116 mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf439de87 mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf5c41d90 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfa3eeaf2 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xfe87f731 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1550a3fc i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x1875f0a9 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x29a0ed89 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2b9100d9 i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2f9242ad i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x37318e9a i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x6f85e2c0 i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x80ce292f i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x8b0d2f95 i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x90e9207d i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x99144573 i2o_parm_issue +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x99b533b2 i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9e7c58c5 i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xac3e9bec i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xdf41bfb1 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xe9063d58 i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf2b63a63 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xf73d8370 i2o_driver_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x09feb98e pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0x2e543456 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x058a1c49 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x18bded78 mc13xxx_irq_request_nounmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x23b4cf39 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x2cf1310d mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x38fd7cf5 mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x5ffb8661 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x7e76858d mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x82e4b4a8 mc13xxx_irq_ack +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x8a384a88 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xa49dfb64 mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xa6fbdf2f mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xbe32173a mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xc63cf174 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/tps6105x 0x3c3d0df7 tps6105x_mask_and_set +EXPORT_SYMBOL drivers/mfd/tps6105x 0xe99133c1 tps6105x_get +EXPORT_SYMBOL drivers/mfd/tps6105x 0xffc8f591 tps6105x_set +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x0c6ad2cf tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x4c134b8c ad_dpot_remove +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0xd7a6d206 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x8a05ed90 altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0xa79cd231 c2port_device_unregister +EXPORT_SYMBOL drivers/misc/c2port/core 0xa812888e c2port_device_register +EXPORT_SYMBOL drivers/misc/ioc4 0x52e8cb01 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xbd460aee ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x1363d5e2 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x1c1ca3bb tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x32633ded tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x39f86aa1 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0x417b1d3e tifm_map_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x45864701 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x47f8c4a7 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0x562d740e tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0x61581f75 tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xa5963d74 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xb46c4578 tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0xf241c19b tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xffd30797 tifm_free_adapter +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0xf8b6dde6 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x07c905ec cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x1901ea55 cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0xeeb35588 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x068517d9 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x2244bc2b do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x31102e58 register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xf53f266d map_destroy +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xeb92f1b6 mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0x1f0d4175 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0x3f9e3615 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x43be03a0 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/mtd 0x84c2f054 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/nand/denali 0x9f16705f denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0xfa272c7d denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x0da61c0c nand_unlock +EXPORT_SYMBOL drivers/mtd/nand/nand 0x1846b74a nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0x870ca4eb nand_lock +EXPORT_SYMBOL drivers/mtd/nand/nand 0xb51058e9 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xb6fd3a35 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0xf4964314 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand 0xf4e853dc nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x70097aa0 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x905d5cc6 nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0xeb46a1ae nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0xf6c5f711 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x3132ee65 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x4ae01976 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xd139b8d3 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x17ffa878 onenand_scan_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x730eca6b onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x9a0d6a9a onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xaa8fe080 flexonenand_region +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x0cc2465e arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x22310639 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x3b5333e6 arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x4b8d3000 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x7f35ef75 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x8b6676b8 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x985f7f7f arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xca3a5cf5 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xdde9aedc arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xecb730b0 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xfae2278c alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x2eff3f75 com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x8fd8a371 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0x9bbf1493 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x049df45e NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x05ccf3d7 __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x119721ac ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x7865683d ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x832ebfba ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x92ece3c1 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xa0caf47a ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xa48208a6 ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xe4788750 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xe5e97119 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xf113ce97 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x1ee0ed92 eip_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x31583bdf eip_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x35421f24 eip_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x48857aa9 eip_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0x99c03fd7 eip_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0xa766d464 eip_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0xb60e357d eip_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0xb7d8653b eip_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0xdbfd7aa7 __alloc_eip_netdev +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0xeb8b51d1 NS8390p_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390p 0xec252856 eip_poll +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0xf88f5a03 cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x010d1904 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x023715ce t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x0a491084 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x10b76092 t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x3877096f cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x534c28d9 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x53abef8a cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x5eaa6cf7 cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x6ee320e3 cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x7c4bdbb8 t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x99452cb2 cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xca2e4894 cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xcd6da8df cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xd94e2030 dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xe8e131d6 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xf6df1764 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x336a5b7c cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x37dfe39a cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x3b4aaf35 cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x3fc554d7 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x4634f8a4 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x49a93717 cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x4b937cb6 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x4cbdbefa cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x4f60ff72 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x5354aa30 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x6b134fc6 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x7d9be9d8 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x8dbe6bbc cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x919dcf33 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xb11abbef cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xccbff173 cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xcd848c58 cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xcf0869fe cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xd00e5a36 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xd4c4fd1f cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xd69a0294 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xea30d858 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xeb0d93dd cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xebeba5c7 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xf27b01e9 cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x34e54f9e be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x8d484148 be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0xbab62e22 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x0383a755 mlx4_test_interrupts +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x1445f65f mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x2c87505d mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x2ebcace9 mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x39f2eb52 mlx4_set_stats_bitmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4a2f5871 mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4d860aec set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4edf51ea mlx4_release_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x5f36de01 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x6c35ec46 mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9de7715b mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9fcec3b6 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa0db4594 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb59f3a0e mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbf8b7f69 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xd6a52599 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xdcaafb31 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xdd007311 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xdeba8047 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe4fd20dc mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf5724e72 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x5653d694 hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x66bacfdb hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x969841ee hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xda3623bb hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xedc2b912 hdlcdrv_register +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1a894fef sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x261d7475 irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x5d3463b9 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x804f6346 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x9b49489b sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xa0042786 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xd49aa755 sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xde54ccec sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xdf0ba385 sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xdffe3a0d sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0xddc98749 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/ppp/pppox 0x20af84a7 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x4bba42c8 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0x74664ea6 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x84447292 sungem_phy_probe +EXPORT_SYMBOL drivers/net/usb/usbnet 0x652462ab usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/usb/usbnet 0xbb9cd293 usbnet_manage_power +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x0993de9a unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0x1d339d73 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x585bc7ec hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x7821cea4 hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x8232a14e alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0xa7885faf hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wan/hdlc 0xad2f9f96 unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0xbf656912 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xc6d06084 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe25ec9d3 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xf0cb1a67 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/z85230 0x10c78988 z8530_dead_port +EXPORT_SYMBOL drivers/net/wan/z85230 0x16b4a4cc z8530_sync_dma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x3861e2d4 z8530_sync_open +EXPORT_SYMBOL drivers/net/wan/z85230 0x3a869535 z8530_sync +EXPORT_SYMBOL drivers/net/wan/z85230 0x5cd24d29 z8530_hdlc_kilostream +EXPORT_SYMBOL drivers/net/wan/z85230 0x98d0ebba z8530_sync_close +EXPORT_SYMBOL drivers/net/wan/z85230 0x9f1f290f z8530_channel_load +EXPORT_SYMBOL drivers/net/wan/z85230 0x9f587ce4 z8530_sync_txdma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0xb7880d67 z8530_queue_xmit +EXPORT_SYMBOL drivers/net/wan/z85230 0xbde2f412 z8530_nop +EXPORT_SYMBOL drivers/net/wan/z85230 0xbeaee288 z8530_sync_txdma_close +EXPORT_SYMBOL drivers/net/wan/z85230 0xd0941f88 z8530_shutdown +EXPORT_SYMBOL drivers/net/wan/z85230 0xd4ffebf0 z8530_interrupt +EXPORT_SYMBOL drivers/net/wan/z85230 0xe2c16d49 z8530_sync_dma_open +EXPORT_SYMBOL drivers/net/wan/z85230 0xe3d80064 z8530_hdlc_kilostream_85230 +EXPORT_SYMBOL drivers/net/wan/z85230 0xe7b42b68 z8530_describe +EXPORT_SYMBOL drivers/net/wan/z85230 0xe834c809 z8530_null_rx +EXPORT_SYMBOL drivers/net/wan/z85230 0xfdc2cbfd z8530_init +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0xe3a22a34 i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/airo 0xa3ad8879 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xd271fdc3 init_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xed8cb2ab reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x319c6026 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4e2481d5 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4fdf009b ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x53358ce3 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x635987c0 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x78a1f107 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x808a18ad ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x8994c3bf ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x998e1d88 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xa263a2ae ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xcce72537 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xe300a55a ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xfb191ff1 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x4e1380ee ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x542ffc3c ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x6588cada ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x6c40adc9 ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x9098954b ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x91cfb84a ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x9aa2aca7 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xa968a852 ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xd08deda5 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xee06fb28 ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xf8759e77 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xff05862e ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x4330ceb3 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x6a60b9e3 ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x91fc76f5 ath9k_hw_wow_event_to_string +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0xd407c80d ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x531b637d ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x55c51fe7 ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x59275983 ath9k_cmn_update_ichannel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xca6fb38e ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xd2981357 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xf59eadf3 ath9k_cmn_padpos +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xfa5f280c ath9k_cmn_get_curchannel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x03c3d9b2 ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x0a5491fa ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x11c40252 ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1315d57f ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1386ab82 ath9k_hw_cfg_gpio_input +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x14ee4a80 ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x164b3d2b ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x17215eeb ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1a6d8b01 ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1a9af4c0 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1cb23371 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1fe68278 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2087f88f ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x22910d55 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x23099db2 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x24139e20 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2761f061 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x289a6578 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x28dd4fd2 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2bd6a047 ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2c9e2248 ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2cf6879e ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2d1a3ba1 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2d2def4b ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3144c6f4 ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x357d3a0d ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x36e18272 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x385f7004 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3b051e6f ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3b312772 ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3c374199 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3f1e2eac ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x428fb519 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x45bfe5ef ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x4d8c0b86 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x4e43f27f ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x505580d8 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x533146a3 ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x55ce31ff ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x564e3e24 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x635f8710 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x6c6f8291 ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x6dc238e8 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x721acd49 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x77163bb0 ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x81306c1d ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x89f79a2f ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8d4d58d2 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8d57cb8f ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8e7013c3 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8ee56bf7 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9209907d ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x945b7ea2 ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x94bd752b ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9567ea7a ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9570e932 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x996b1305 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9b6fe24d ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9c3c047b ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9d63a458 ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9d9c2c44 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9f4e5aba ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa17768f0 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa2ca9eff ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa5c5d1c6 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa6d59328 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa7e018a9 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa9b51175 ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa9c67dec ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xae9be0cb ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xaecfb119 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb35bd4eb ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb43fc398 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb605a4f5 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb8290160 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb9aeaaa1 ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbb05c004 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbb227909 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbb7774e4 ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbc37880e ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbc503527 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbe31df3c ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbeaddda0 ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc4844007 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc6041155 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xcf3b62e6 ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd7862299 ath9k_hw_cfg_output +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd8febfd7 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xdb3a2436 ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xdb9dec83 ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xe954e125 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xea11dd15 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xeae0a0fc ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf9410911 ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf9ee457d ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfbdccb72 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfc095a73 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/atmel 0x36bf7644 stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xa942ea0a atmel_open +EXPORT_SYMBOL drivers/net/wireless/atmel 0xf1d42a81 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmfmac/brcmfmac 0x39524c7a brcmf_sdio_remove +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmfmac/brcmfmac 0x9bc04bac brcmf_sdio_probe +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x09e35ceb brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x27a14fe3 brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x5732297f brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x6168adc8 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x6d194670 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x70fe12c0 brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x72689bfa brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x7e2f3a48 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xa0fbc0f0 brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xc6362799 brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xf5e0a32c brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xf655e888 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x01b10789 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0ad69602 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0e0fac0b hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0f401841 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1bca2dcf hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1cd96eab hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x251c0ff6 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x37fe3ceb hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x3bc4612f hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4b17dec8 hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x58895550 hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x58af81ca hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x5fdb8b54 hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x63113d19 hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x68c2c95e hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x760a9b43 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x79638281 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x86a88fa2 hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa23c21a8 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa3353910 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb0bb30fd hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb3ed3f3e hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb63aff0d hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc39526bd hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc4e4967d hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xca624a38 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0d6ccf30 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x0dc67d58 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x14672a55 libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x2191e2fc libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x22b65611 libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x2414d9e8 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x4a371d0b libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5041e9d4 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x8ef4b686 libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x95c343bb libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa8c95e19 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xa9489e13 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd7113c3c libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xde9aa42d free_libipw +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe0dc2d9b libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xee7e8b89 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf04a6238 libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf3bc927f libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf5cc502a libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf736372b libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xf9ee020e alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x00c092db il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x105e12bf il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x13984181 il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x14a2a5f3 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x182b7481 il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x1aeb81b6 il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x1bde4eaf il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2286ead1 il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x258daf4a il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x26e780c4 il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x27c9a5ba il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x27ffe295 il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2867ea7e il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2c367674 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2df83282 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x31070283 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x316f332d il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x347b4dd7 il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x34b1c21e il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x34f52def il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x376cba57 il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x393dd413 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x3afa97f4 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x409f2ebf il_set_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x474d7014 il_apm_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x49397634 il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4a2c8972 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4aa39103 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4ab62b11 il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4acc8257 il_force_reset +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4cb0701d il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x55f16b2a il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x564c6740 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x5bb769ae il_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x5bb8c5c4 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x5fed89a2 il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6121372c il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6600fb7e il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x68eb0067 il_update_stats +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x69bfd27a il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6dce98a2 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6f980cc8 il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x71da2f08 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x7453cc8f il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x77f5a626 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x7e2d028d il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x7f6b9313 il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x80305df7 il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x82621eef il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x84165c2b il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x84a27a95 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x8da16353 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9703b889 il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9bc4aeaa il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9f8945cc il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9fb56119 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9fe3b798 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9ffb8799 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa1bb3c71 il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa1bd5c60 il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa1d007af il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa54c93a1 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa64a4d6a il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa697d999 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa886dcf7 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xadc00286 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xafd816dc il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb4a14dd6 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb7210677 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb73b45c6 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb7bd33ff il_isr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xba249e7d il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xbb74aae6 il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc1e2ad23 il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc2a7e85f il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc39cf12c il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc4bfd8b9 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc5ee079b il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc5fabb13 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc9b95fc8 il_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xcb959890 _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xcc1446b2 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xce78144d il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd14349db il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd2303965 il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd614e701 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd6ddb4c1 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd8824fb8 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xdbbf71ee il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xdfab54dc il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe154aeb7 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe3ea8bd1 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe4027603 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe435493a il_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe4b12212 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe584b5cf il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe7227687 il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xeb95ee5a il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf2e6d92f il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf31d3d0d il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf501278b il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfb013e1a il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfdf8423f il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x08ee1e7d __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x0d9eb5ff __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x0e7bc05f __tracepoint_iwlwifi_warn +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x201337b4 __tracepoint_iwlwifi_dev_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x249e4b06 __tracepoint_iwlwifi_dev_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x36dcef55 __tracepoint_iwlwifi_dev_iowrite32 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x4919d1a5 __tracepoint_iwlwifi_dbg +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x67381a2a __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x79e9bf26 __tracepoint_iwlwifi_crit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x7edec07d __tracepoint_iwlwifi_dev_ioread32 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x8bfcc307 __tracepoint_iwlwifi_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x9a12c9c5 __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0xc0827b2f __tracepoint_iwlwifi_dev_iowrite8 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0xda36f3a4 __tracepoint_iwlwifi_err +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x1239f904 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x22e8ef89 orinoco_get_stats +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x34739ebe orinoco_open +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x3f40d0d7 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x51b4350c orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x75aafe8a orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x84fc65cc free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x8cfe7a5e orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x9d0b87b4 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x9df8d63e orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa399228e orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xaa931b36 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xb6e11afd __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xceeb0261 __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd464dc9a orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xde18705e alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf3799628 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xffe27bca orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x02100f74 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x06068226 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x0b125ea9 rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x13ebb2dd rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x16efbb41 rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x28591962 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x33c7be2a rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x34ef2c0a _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x3bb76b14 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x3cdd2732 rtl92c_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x3d217dc0 rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x3f8dcb40 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x4a3bd754 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x4c4a19aa rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x591a81a1 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x5b0fdb70 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x62da07dc rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x6ece7aee rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x6f067462 rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x6ff13342 _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x81e7ea27 rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x865206d0 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x8964d7d4 rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x91907d4c rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x92241ed5 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x9ad10f10 _rtl92c_phy_dbm_to_txpwr_Idx +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x9b838c5c rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xa4c29e07 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xb3314d48 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xb9b86cf8 rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xbb8ea95a rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xc55cd2f1 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xd1b35824 rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xd51d159f rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xd72efccb rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xd8984790 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xdad1d366 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xdc6d040c _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xdf2161e6 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe24ad168 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe7d3f3db rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf0183273 rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf9423d84 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x039c2b7a rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x03f1ae71 rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x0b756132 rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x168a8f26 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x1a8a7c30 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x207fbb70 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x24648837 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x2bec5dc3 rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x3a17ffb9 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x57a6e229 rtl_ps_set_rf_state +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x682b91a2 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x79188a02 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x7bbde41d rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x7caf4746 rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x7f5a43ad rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x82b1daf4 rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x96c06534 rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x9af5b22b rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xaa875e26 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xacacbb1a rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xaf29fbaf rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xaf51bb87 rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xbf58c90a rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xd4923609 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xd6fa5368 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xdfd79e6a rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xe7b84156 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xf329f5e1 efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x08243bf7 wlcore_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x5b7e3886 wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x6ca97154 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0xc16a2a8d wl1271_free_tx_id +EXPORT_SYMBOL drivers/parport/parport 0x20818217 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x2afc1411 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x35d13c35 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x41d9cc22 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0x457fd8da parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x52228abe parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0x52ff4fcf parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x58b54e10 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0x599d016f parport_write +EXPORT_SYMBOL drivers/parport/parport 0x5a6abd5b parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x5e3a3912 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x62bb4f6d parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x6669e850 parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x6f2a4181 parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport 0x784b101c parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0x952f141c parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0xa17683f6 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0xa27d5ee7 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xafddbf35 parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xb39b1879 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0xb7329ac3 parport_release +EXPORT_SYMBOL drivers/parport/parport 0xbe5f12ee parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0xbf458a0c parport_read +EXPORT_SYMBOL drivers/parport/parport 0xc99577f7 parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0xd4967fb8 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0xef5efe8c parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0xf0416554 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0xf10dedbb parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0xf1a88cd4 parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xfe1fab5e parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0xffa6d178 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport_pc 0x71b03f2b parport_pc_unregister_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xb945cbc8 parport_pc_probe_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x049a9d10 pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x08db5fcf pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x1b20bd26 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x271bed2b pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2d416891 pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x36d09515 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x3918a1fb pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4109a0a5 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5c682695 pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x742f5665 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x78da429f pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x806a8679 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8d748f9b pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xa0a9d9fc pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xb870c98a pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xbd629ad1 pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc71fb0e7 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd4f2b95c pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd6b0d859 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd7cd2aea pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x0ea3a3b5 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x241d529d pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x53a5e399 pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x54723276 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6411e55f pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x6cd5e3d2 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x74a39eca pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xaa2a8638 pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xb0cca5ec pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xebf54fc5 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xf35b6b40 pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x3b3dc872 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0xdccd556e pccard_static_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x22487d4d pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x8aa7a913 pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0xbc8fe1c5 pps_register_source +EXPORT_SYMBOL drivers/pps/pps_core 0xf8a6b3a7 pps_unregister_source +EXPORT_SYMBOL drivers/ptp/ptp 0x374b3b91 ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp 0x47612171 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x4b8a267c ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0xbdbfb312 ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x0ece489f pch_src_uuid_lo_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x1f1027d2 pch_rx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x4966688a pch_ch_control_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x618d855b pch_ch_event_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x7a632347 pch_ch_control_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xb5941c5f pch_ch_event_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xc4ee9367 pch_src_uuid_hi_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xd8433526 pch_set_station_address +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xef938023 pch_tx_snap_read +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x5c2a9230 rproc_put +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x6b7f409b rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x72e44e5d rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x8257d284 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x92c36f8e rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x964c7740 rproc_vq_interrupt +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xa04c65d7 rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xa40cdfe2 rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xea059e6b rproc_report_crash +EXPORT_SYMBOL drivers/scsi/53c700 0x33c651a0 NCR_700_release +EXPORT_SYMBOL drivers/scsi/53c700 0x3d9cece0 NCR_700_intr +EXPORT_SYMBOL drivers/scsi/53c700 0x49f008ee NCR_700_detect +EXPORT_SYMBOL drivers/scsi/bnx2fc/bnx2fc 0xf2f8484d bnx2fc_ctlr_get_lesb +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x19b7dd6a fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x3548cec6 fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x3b622b44 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x4cccb5a6 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x6b941567 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x8cc8346c fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x94da7094 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9d59dfcf fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xb3595206 fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xcd15e85d fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xde4b6e23 fcoe_ctlr_get_fip_mode +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x01b0b932 fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x03635fa9 fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x03b2dced fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x065891ea fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0a9708e6 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0e87504b fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x16d616be fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x180cd7f9 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1bcd6dd3 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1bee34d4 fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1e8f6b15 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1f22d058 fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x22b90986 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x268fe0b3 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x29b59c22 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3d0eef5c fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x42fca91b fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x465941c7 fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4af2b7b7 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x58d90cc5 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5c2c4106 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x5ec9b776 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x674b4e99 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6df3f919 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7567549a fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x76ea80db fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7cb68d9d fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7e3e00a0 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x86f0fb46 fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x88d5cba3 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8f380610 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x924f88b9 fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9578f3ff fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x958087f0 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9dce4a8b fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa65287de fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa79298aa fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xadb23b08 libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb15ab33f fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xbb433179 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd002cea0 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd1287278 fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd1539dfc _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xd7bed3af fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xda910ec2 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe538dd58 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xeb51aebe fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xecdc2c86 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf29a4f04 fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf534d715 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfabd56a7 fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfece7af4 fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x7fd35599 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x8a87e724 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0xc74dd31e sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0xe596bb19 sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0xf20b7a76 sas_resume_ha +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x4a4ed089 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x067886a4 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c3be3aa osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0f43238c osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x101e8f4d osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1246247d osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x150c4207 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x17abc35c osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x20618d1d osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x22146d3e osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x24f293db osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2cdf7a68 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x346963ab osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3c0f13fa osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x51c17d54 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x56c481b3 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x58af8152 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5f4cb34d osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x83747503 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x84ccefd7 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x95940a73 osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x963152b0 osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9b251fab osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa75a52ca osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xba8a8bfa osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc1e26388 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc2498779 osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc9d88ff8 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd2a70ff1 osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xe71d9bfc osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xed97ae26 osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf0834668 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf2ddeed9 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf399eaa5 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf76f00a5 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xf935a6bc osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xff7672db osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/osd 0x0170b8a3 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x268b5902 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x56a2d9e0 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x60a9ab25 osduld_register_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x9384eac5 osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0xd37b9e65 osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x182dfbc3 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x2548552a qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x291a258a qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x3901f0fd qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x64594891 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x646430b4 qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x6e82701f qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x8744229e qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x93f9d325 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xb5f77770 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xd1643e6e qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x1f55cd70 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3c8aebb0 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x40f7a137 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x42610d24 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x49a13482 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x7c58d85c qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xeaf0053e qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0x04f52111 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0xd96a6b3a raid_class_release +EXPORT_SYMBOL drivers/scsi/raid_class 0xf14b41d0 raid_component_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x3abae490 fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x45dcfa2d scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x6032017f fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x87a1b4c0 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x8d94baa2 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa5d10d3d fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xb305b1cb fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xc17257e8 fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xde68df51 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe7fe2ef2 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xe9ae0a46 scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf6ae9216 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xfe23cac5 fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x07c44467 sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x07f5a265 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1260ad5c sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x178c440a sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x199cfdb8 scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1babf8e6 scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1e85fdd4 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x23f93276 sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2c9dfa13 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4f2f1575 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5ee57066 sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x62ed8879 sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x6e9739f4 sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x737b93b8 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x7f624919 sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x88a47900 sas_remove_children +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x902c9513 sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9f9409ee sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9fa8bd8e sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xa1d96a11 sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc75edff1 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xcfd94b60 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd24178f1 sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdbc5e53e sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe8abc4d6 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf049347c sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xf2ae6a7b sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xfb918152 sas_rphy_delete +EXPORT_SYMBOL drivers/ssb/ssb 0x1947777e ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x27c40e30 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0x2b5bf0dc ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0x2f47180b ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x3ff8b2d1 ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x44367eee __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x49c961b0 ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x6130e4d8 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0x67b63585 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x67e08eab ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0x7e453603 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x818d69ca ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0x979fb1de ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0xad045eb4 ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0xaec0bbb8 ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xb9c7c37f ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0xbcbba40d ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0xbd5ab6dc ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc9d88039 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0xcdf5799e ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xe71e899a ssb_commit_settings +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x24f1c274 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x45049a16 comedi_check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8429529b comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x84ddfa72 comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x95e5fd4f comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x9a9e9d7d comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x9f1210d1 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xae1ace73 comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xaf81808f comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbe67cb6a comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xc4dd3ae6 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xccd16823 comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xe6810398 comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xefea0066 comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xfd263a51 comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x560f5861 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb01ad952 subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xb9ca2999 subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0xcd39604d subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x5ff07d18 cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xaaf5d712 cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0xdc036029 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x287faa9d mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x4059562b mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x42a377f0 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x457a7ccc mite_alloc +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x52580d52 mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x66e37103 mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x6fda4e5a mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x70050eb9 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x91a38dc3 mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x9722b3ed mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x9de5012b mite_alloc_ring +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x9f8c5018 mite_free_ring +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xa101b94d mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xad412073 mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xb56dcfa3 mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xb73d52f8 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xce8fef97 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd568947f mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe54a1ed5 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe656f559 mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xeae4c4b4 mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xef144d0b mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0x43ea5f70 comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x2d5e7e2d comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x3730a1da comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x441b4ca8 comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x57f30668 comedi_close +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x68abcbf0 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc13b92f3 comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/fwserial/firewire-serial 0x28bd52c4 fwtty_port_get +EXPORT_SYMBOL drivers/staging/fwserial/firewire-serial 0x8da4e278 fwtty_port_put +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x58a9df00 adt7316_remove +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x61c06b9d adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x64beaf92 ade7854_remove +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x7cede226 ade7854_probe +EXPORT_SYMBOL drivers/staging/iio/ring_sw 0x9c4d86dd iio_sw_rb_free +EXPORT_SYMBOL drivers/staging/iio/ring_sw 0xfb7e4751 iio_sw_rb_allocate +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x9dd482fd cxd2099_attach +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x0a477616 go7007_parse_video_stream +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x0b6a041e go7007_snd_remove +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x1b7c0b1f go7007_boot_encoder +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x312d7b6a go7007_read_interrupt +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x7a82df1a go7007_register_encoder +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x894ed788 go7007_remove +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x993930d1 go7007_alloc +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0xaafe2864 go7007_snd_init +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0xc0d070e2 go7007_read_addr +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x01947397 free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x056e1716 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x0af20cca rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x110fe7a0 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1179eebb rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1ba167c3 rtllib_wpa_supplicant_ioctl +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1cf257dc rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1de1cf01 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x2e81b438 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x3ba15a7f rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x3bd411de rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x47b087a3 rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x49469e83 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x54dd9ffd rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x584c358f rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x68b392b8 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x68eb7b91 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x6f337694 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x8264190c rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x8316d66b HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x84e3d016 rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x85311553 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x9b7fe7aa rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x9e30fa78 rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xa0117ddf notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xa1b59af4 Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xa5777598 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xb014f9b5 rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xb0f9fd8b rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xb1d218cf rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xbad0072d rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xbe1420f2 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xbfe8487a rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc48c90df rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc8029782 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc8387429 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xcc16208c rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd085b8b7 rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd2f90b80 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd32bcec5 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd39b6bfc rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd7b53f59 rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd8b34de4 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xda097def rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xdf78f620 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xe731e358 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xe82056a9 rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xe981d1f1 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf56d89ef rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf7181de3 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf80a5350 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xfd3a9b83 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x013611cb DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x04ca30b2 ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x05951a7c ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x0f7520f7 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x0fdc8856 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x11e44fc9 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x15e23938 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x190f29d5 ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x24efcb4d ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x27973453 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x2f875e92 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x3136555b ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x388d7ad8 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x39cc4ff8 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x3a09e764 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x3cbb989d ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x4599b88f ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x468e0f97 ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x4ae66f88 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x4dbab9c5 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x5897b201 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x58b4b4a2 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x5b553ded ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x5e0bbfac Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x6c32c8b5 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x6dd1b6ea ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x7533d007 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x78bfe27d Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x7d4c2646 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x857c9e23 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8a3ffa63 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8a7c9949 ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8f1e948b ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x9328faa1 ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x96e666d8 ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x987bc854 ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x9a6db8e3 HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x9cd81f52 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x9ef4760e ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xa2b31db4 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xa48440ed ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xa5479c15 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xa58d4964 ieee80211_send_probe_requests_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xabb388ee ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xb02e3410 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xc370a43e ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xcd4fdbeb ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xd6f036cc notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xd9768531 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xdddd6895 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xdef52cf2 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xe7b85029 ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xebb97bdd ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xef7e7089 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xf296ab79 ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xf2a50ee3 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xf366d21b ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x0017f35f set_bp_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x00ea0cde set_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x06d6f244 get_bp_dis_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x09df8f3e set_tap_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x0a8d32c3 get_bypass_slave_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x1936264c set_dis_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x1d2eb8ca get_tap_change_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x203af1f7 reset_bypass_wd_timer_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2070f14a set_bypass_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x27b990ef get_bypass_info_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2ba7cd35 get_wd_autoreset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2c3f1c17 get_tx_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2f59e636 get_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2fdb893a get_tap_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x361cf40a get_dis_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x45ca99c3 set_wd_autoreset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x550a188c set_bypass_wd_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x5cb59e92 get_bypass_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x66b60122 set_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x675208c0 set_tx_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x692623f2 get_std_nic_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x75131ec6 set_bypass_pwoff_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x76c0b7d0 set_tpl_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x7e872825 get_wd_exp_mode_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x7e8d701e get_wd_expire_time_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x86388b07 get_bp_disc_change_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x93ae4648 get_wd_set_caps_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x95e42b0d is_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x9df5f807 set_dis_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x9e21f42e set_std_nic_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xa689a214 get_bypass_wd_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xae117788 get_bp_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xc368d30d get_dis_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xccab5de0 get_bypass_caps_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xd3e034b3 get_bypass_pwoff_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xd9c1ccfc get_bp_disc_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xd9d38d97 set_wd_exp_mode_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xe640f06e set_bp_disc_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xecdaa456 set_bp_hw_reset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xedcd3c1b get_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf06d67bf set_bp_dis_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf57c1671 get_bp_hw_reset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf693c3a1 bp_if_scan_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf8237882 get_bypass_change_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xfa59240d get_tpl_sd +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x05af3c4c set_wd_exp_mode +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x05b08a42 set_bp_hw_reset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x0b0d5ce0 get_tap_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x0fc2e83c reset_bypass_wd_timer +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x123a8133 get_tx +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x157ec89c get_bp_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2440f05a get_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2b01d1d4 set_bp_dis_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2c27a2f0 set_dis_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2da97f4b is_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2e86c67b get_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x37416370 get_bp_hw_reset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x37bdab27 get_wd_autoreset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x3da96a18 get_bypass_caps +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x4025805e get_bypass_change +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x4940a0cc get_bypass_info +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x4d21ff51 get_bypass_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x5147360c get_bp_disc_change +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x515d4df1 get_bypass_slave +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x5560267e set_wd_autoreset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x5be44d44 set_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x6653590c get_wd_exp_mode +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x6bda14ec get_bp_dis_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x72c618ae set_bypass_wd +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x76d47e6f set_bp_disc_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x794e3815 set_tap_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x7c6cbc16 get_tpl +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x84a263dc set_tx +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x8a16f22c set_tpl +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x946ff795 get_wd_set_caps +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x94f6aff2 get_bypass_wd +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x9d1ecf73 set_bypass_pwoff +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xb1385629 set_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xbff68c45 set_bypass_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xc871c561 get_dis_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xcee528df set_std_nic +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xd202dd85 get_bypass_pwoff +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xd787f151 get_wd_expire_time +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xdb6a39d2 get_dis_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xebd25ae5 get_std_nic +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf1e9f8c1 set_bp_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf224abd9 get_tap_change +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf5a591b2 set_dis_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf643fd4c get_bp_disc_pwup +EXPORT_SYMBOL drivers/target/target_core_mod 0x02de3b18 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x075a5595 fc_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x16b7dc0a sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x1c5d0a59 iscsi_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x222c1d19 iscsi_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x24f6689a core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x266c5602 core_tpg_add_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x2acf251e target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x2bdeff7b transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x2fbf6f69 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x30ae4257 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x4c68bb93 transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x4dd0d748 target_fabric_configfs_init +EXPORT_SYMBOL drivers/target/target_core_mod 0x500ef443 core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0x5055152f target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x50f6d2b0 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0x51309c34 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x5465242d target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x5640be95 iscsi_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x57bb4b59 iscsi_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0x580db57d transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x5da2949f target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x651ccb5c transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0x65c4b4a5 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x6c84adcc spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x6e2464b0 transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x6fb2834f fc_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x749b13f1 transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0x76aa30b2 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x7dbada9d transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x85aa880c transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x88387025 target_get_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x8940b94c spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0x8c8dec9f transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0x8e403e3d transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x8ea29404 transport_wait_for_tasks +EXPORT_SYMBOL drivers/target/target_core_mod 0x905eccf5 transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x91e77a5d target_put_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x92577592 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x99c2be3c target_fabric_configfs_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0x9b91fe56 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0xa13611d7 target_fabric_configfs_free +EXPORT_SYMBOL drivers/target/target_core_mod 0xa3366ae0 transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xa4e4621f fc_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xa505387f core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0xa6d54113 transport_subsystem_release +EXPORT_SYMBOL drivers/target/target_core_mod 0xa9880bef target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0xb8a15c52 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0xbd1fbb9a sas_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xbf9d22dc sas_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0xca5e9232 sas_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0xd0762a4a target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xd2aedfa0 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0xe6f531a6 target_fabric_configfs_register +EXPORT_SYMBOL drivers/target/target_core_mod 0xed5465e5 transport_subsystem_register +EXPORT_SYMBOL drivers/target/target_core_mod 0xed8b672c core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0xeec78af1 fc_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0xeeea01ee transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xf01621c7 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xf0c3de0f __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xf7162dee core_tpg_clear_object_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0xf7889d0f core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0xf793bf87 spc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0xf811679a sas_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xfc8b767e core_tpg_del_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0xfdc15a5e transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xfffe25af core_tpg_register +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0xe5fa4833 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0xa5fe1e77 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x1ac782d8 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x21458557 usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x2ccce527 usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x3a81400c usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x3bf5b5d4 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x66fb2d29 usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x76d436ea usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x940213b0 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xb6ca7030 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xb91f937f usb_wwan_set_termios +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xe74f97f0 usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xfc866fe4 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xfcfe5630 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xdd16aad1 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0xf06d544a usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0x366d19ef genericbl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x3f26f305 lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0xc9508436 lcd_device_unregister +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x279efcf1 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x534b6f18 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xb39f68d1 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/macmodes 0x233917d1 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0x7bd80c28 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x3acb3762 g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x79cd8ed8 matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xabd4c3e7 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x298cb17e DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x64c73895 matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x71396188 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xdca75af5 matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x77e88c47 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x9f8058e6 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x5b46f444 matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xbba219af matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xc2b3fe8c matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xf4b01b13 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x40eeb0a7 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0xa5aa8043 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x14405d1e matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x4f103003 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x66ca17d8 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x95ce5b27 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xbdbe2a9c matroxfb_read_pins +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xcdc90c64 matroxfb_var2my +EXPORT_SYMBOL drivers/video/mb862xx/mb862xxfb 0x7f7980ca mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/output 0x5a08b78f video_output_register +EXPORT_SYMBOL drivers/video/output 0x5e091089 video_output_unregister +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x17f3f471 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x1be6dc30 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x219251cc svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x3d264cc2 svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x4ab38ef2 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x513ebb9e svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0x523ca710 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x59f6af5a svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0x6d47c02e svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0x6e4adb1e svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x80f24d95 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x8de63fb4 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0xd1429fca svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0xd22ca511 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xd7278c57 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xe28d2a49 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/svgalib 0xf2db5956 svga_match_format +EXPORT_SYMBOL drivers/video/syscopyarea 0x4f43774e sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xaf69c0fe sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0x60a861dc sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/vme/vme 0x04ebe4d8 vme_unregister_bridge +EXPORT_SYMBOL drivers/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/vme/vme 0x092bfa15 vme_dma_request +EXPORT_SYMBOL drivers/vme/vme 0x0c9f9007 vme_irq_request +EXPORT_SYMBOL drivers/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/vme/vme 0x20df5a3d vme_dma_pci_attribute +EXPORT_SYMBOL drivers/vme/vme 0x35ffbc81 vme_irq_generate +EXPORT_SYMBOL drivers/vme/vme 0x3b770d64 vme_irq_free +EXPORT_SYMBOL drivers/vme/vme 0x3e95083c vme_slave_get +EXPORT_SYMBOL drivers/vme/vme 0x40470f85 vme_dma_list_free +EXPORT_SYMBOL drivers/vme/vme 0x41862ad4 vme_alloc_consistent +EXPORT_SYMBOL drivers/vme/vme 0x46649cd1 vme_lm_set +EXPORT_SYMBOL drivers/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/vme/vme 0x4baf35a7 vme_master_get +EXPORT_SYMBOL drivers/vme/vme 0x535c8308 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/vme/vme 0x5aff4177 vme_lm_get +EXPORT_SYMBOL drivers/vme/vme 0x5e559729 vme_register_driver +EXPORT_SYMBOL drivers/vme/vme 0x73fc6b83 vme_master_request +EXPORT_SYMBOL drivers/vme/vme 0x758d09f2 vme_register_bridge +EXPORT_SYMBOL drivers/vme/vme 0x75bfc044 vme_slot_get +EXPORT_SYMBOL drivers/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/vme/vme 0x7fde2edb vme_master_read +EXPORT_SYMBOL drivers/vme/vme 0x898ffd19 vme_new_dma_list +EXPORT_SYMBOL drivers/vme/vme 0x90695906 vme_free_consistent +EXPORT_SYMBOL drivers/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/vme/vme 0x9d89325b vme_unregister_driver +EXPORT_SYMBOL drivers/vme/vme 0xa31bdf07 vme_master_set +EXPORT_SYMBOL drivers/vme/vme 0xc2bf8646 vme_dma_list_exec +EXPORT_SYMBOL drivers/vme/vme 0xc31b9e3e vme_irq_handler +EXPORT_SYMBOL drivers/vme/vme 0xca152a2b vme_lm_request +EXPORT_SYMBOL drivers/vme/vme 0xccb17346 vme_bus_type +EXPORT_SYMBOL drivers/vme/vme 0xd797b9a5 vme_master_write +EXPORT_SYMBOL drivers/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/vme/vme 0xe693a6ce vme_get_size +EXPORT_SYMBOL drivers/vme/vme 0xefd1624a vme_dma_free_attribute +EXPORT_SYMBOL drivers/vme/vme 0xf5a10e25 vme_slave_set +EXPORT_SYMBOL drivers/vme/vme 0xf6ada6dc vme_dma_list_add +EXPORT_SYMBOL drivers/vme/vme 0xfacd8e72 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/vme/vme 0xfefda47e vme_slave_request +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x3efb8419 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x8484a2f4 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xb2070439 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xc7651c75 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0x382a6887 w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0xbda2ef57 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x33701b14 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x98f19859 w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x4ab9ccae w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x60fcde9a w1_add_master_device +EXPORT_SYMBOL drivers/w1/wire 0xab58fe0a w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0xac2823d7 w1_remove_master_device +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xb5f20875 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xc4f657bf iTCO_vendor_pre_stop +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xdc6effc9 iTCO_vendor_pre_start +EXPORT_SYMBOL fs/btrfs/btrfs 0x02897198 ulist_add +EXPORT_SYMBOL fs/btrfs/btrfs 0x09dceb4d ulist_free +EXPORT_SYMBOL fs/btrfs/btrfs 0x09fa4bcc ulist_init +EXPORT_SYMBOL fs/btrfs/btrfs 0x34b9e4c4 ulist_fini +EXPORT_SYMBOL fs/btrfs/btrfs 0x35490e9d ulist_next +EXPORT_SYMBOL fs/btrfs/btrfs 0xe4423912 ulist_alloc +EXPORT_SYMBOL fs/btrfs/btrfs 0xedf03da5 ulist_reinit +EXPORT_SYMBOL fs/configfs/configfs 0x034097dc config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x0c348ac4 configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x0dad36cc config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x3d64616f configfs_depend_item +EXPORT_SYMBOL fs/configfs/configfs 0x67bb3646 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x8fd1e9af configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x9b10afb0 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0xa4cbf452 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0xc34707b3 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xccf23c32 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0xeb5eec65 config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0xecf7b506 config_item_set_name +EXPORT_SYMBOL fs/exofs/libore 0x011500ad ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x06ef51ef ore_create +EXPORT_SYMBOL fs/exofs/libore 0x160d6b2c extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x28806871 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x689292ab ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x778ae23f ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x7f6cc5f7 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0x98000302 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0xa3d2a634 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0xaf6bb9d8 ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0xe454e696 ore_read +EXPORT_SYMBOL fs/exofs/libore 0xf56ff159 ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0xfe4134bf ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x07dd716c fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x193729af fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x1d9ecc75 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x21f08f2b __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0x25582e17 fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0x2ab2b276 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x2ea14e05 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0x34e1631f __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x3a0a9815 fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x4f218815 fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x557cd6a7 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x594a215a __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0x5d64c273 __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x626d4207 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x6e97849b fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x74530ecd fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x7e0b9010 __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x8228e638 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x92ee3910 __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x9f7a1fb0 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0xa0d5bd6a __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xaa6bc694 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0xb2b6576f fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0xc03aabae __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0xc0537e9d __fscache_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0xc8858e94 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xc89877c4 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xcfdc39bc fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0xd2c4e3aa __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0xde4fc950 fscache_object_work_func +EXPORT_SYMBOL fs/fscache/fscache 0xeb69d107 fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xeff72b97 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xfc42872d __fscache_check_page_write +EXPORT_SYMBOL fs/nfsd/nfsd 0x13d93eda nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x83585203 nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0xbfd7d7a2 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x17e4ae1e qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0x1a5a7437 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x4c2f47ef qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xba690402 qtree_release_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xdf0c1d3e qtree_read_dquot +EXPORT_SYMBOL lib/cordic 0x434bfd07 cordic_calc_iq +EXPORT_SYMBOL lib/crc-ccitt 0x3771b461 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc-itu-t 0xf5b4a948 crc_itu_t +EXPORT_SYMBOL lib/crc7 0xa7587646 crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/crc8 0x41248eaf crc8 +EXPORT_SYMBOL lib/crc8 0xab9ad613 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0xd4534d80 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/lru_cache 0x0163bc72 lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0x068c643a lc_reset +EXPORT_SYMBOL lib/lru_cache 0x269b8f77 lc_put +EXPORT_SYMBOL lib/lru_cache 0x31e9b84b lc_get +EXPORT_SYMBOL lib/lru_cache 0x3b074b02 lc_destroy +EXPORT_SYMBOL lib/lru_cache 0x4f063e89 lc_find +EXPORT_SYMBOL lib/lru_cache 0x65cdbc9c lc_try_get +EXPORT_SYMBOL lib/lru_cache 0x664c69b7 lc_set +EXPORT_SYMBOL lib/lru_cache 0x8bef999a lc_committed +EXPORT_SYMBOL lib/lru_cache 0x94b539df lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0xbb58a843 lc_try_lock +EXPORT_SYMBOL lib/lru_cache 0xd9710a61 lc_create +EXPORT_SYMBOL lib/lru_cache 0xdcf214fd lc_del +EXPORT_SYMBOL lib/lru_cache 0xf249f5fd lc_is_used +EXPORT_SYMBOL lib/lru_cache 0xf2e63333 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0xf3e81586 lc_seq_printf_stats +EXPORT_SYMBOL lib/raid6/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0xd9e91f83 raid6_vgfmul +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xe9f7149c zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8022 0x63b12f28 unregister_8022_client +EXPORT_SYMBOL net/802/p8022 0xa3bb6c80 register_8022_client +EXPORT_SYMBOL net/802/p8023 0x502317d6 make_8023_client +EXPORT_SYMBOL net/802/p8023 0x6401010f destroy_8023_client +EXPORT_SYMBOL net/802/psnap 0x9ad9f852 register_snap_client +EXPORT_SYMBOL net/802/psnap 0xc7502dc4 unregister_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x0805e9f3 p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x0a1bdbed p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0x1a37c7e9 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x2549c0e8 v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x26d25902 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x2b355f1a p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0x35d1e27e p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x42949b98 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0x58ca4a92 p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0x5fb6c75e v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x6a88a6db p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x6c469547 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x6e9cdc5a p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x82f340a0 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0x85f3601c p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0x867a05c3 p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x8710068e p9_client_symlink +EXPORT_SYMBOL net/9p/9pnet 0x8c173d41 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x8d10377b p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0x919097ec p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x92ac1d9c p9_payload_gup +EXPORT_SYMBOL net/9p/9pnet 0x977a0030 p9_nr_pages +EXPORT_SYMBOL net/9p/9pnet 0x998212a0 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0x9d6cc8e1 p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0xa5aa3586 p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0xac192877 p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0xb1d8b11d p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xbced14a3 p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0xc5db54a9 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xc6b8c2db p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0xc7e3e0b8 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0xcc716ad3 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0xcc938e09 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0xd105d896 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0xd7420d83 p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0xd8eda45e p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0xdf779ecd p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0xe471d19f p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe6d2830f p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0xebac2c3e v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0xee4e0f82 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0xef36b7c7 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0xf39042c2 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0xf4a111d8 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xf4be1c47 p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0xf5fb1d4d p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0xf7370533 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0xf84f2022 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0xfd40c79d p9_idpool_check +EXPORT_SYMBOL net/appletalk/appletalk 0x55511e53 atrtr_get_dev +EXPORT_SYMBOL net/appletalk/appletalk 0x832c745a alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0xca7bc7f5 atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0xfe7b3513 aarp_send_ddp +EXPORT_SYMBOL net/atm/atm 0x28a65573 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x2a0de03e atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x3e2934ab atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x5a1dca5c vcc_release_async +EXPORT_SYMBOL net/atm/atm 0x62c41185 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x93136f41 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x9feaf287 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0xaa024146 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xbd87d51c atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0xc3675a8c atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xd5be6ea0 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0xd82a7eac atm_proc_root +EXPORT_SYMBOL net/atm/atm 0xdcc1a2c9 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0xe23e1939 atm_dev_lookup +EXPORT_SYMBOL net/atm/atm 0xe4803477 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0xee3ac792 atm_charge +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xf80dc07e deregister_atm_ioctl +EXPORT_SYMBOL net/ax25/ax25 0x026c1368 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x07933655 ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0x13e0d5e8 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x211967d2 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x4bb98659 ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0xa0abb503 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0xb33fd5e0 ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xd4125d9e ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/ax25/ax25 0xf28b702c ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0xf49da94e ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0xf8869127 ax25_listen_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1d9d7cfa hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1f86849f bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x37e6156e bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x42eb3244 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4467f4cb bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0x47884a2f hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x48419f8b bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4e838cca bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0x5b1817b7 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x61fc64cb hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x63f10cbe hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0x655ad1bf hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0x66c2dd8a hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0x67d47f59 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6cc9db57 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6d6a9efe bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x75695848 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7c640527 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7f97bb61 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x91c9a325 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x97943c3a hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x98224a57 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9a3e8137 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9cc304fa bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0xad9cff79 bt_sock_link +EXPORT_SYMBOL net/bluetooth/bluetooth 0xae5df4f8 bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb61a0c3b bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb8e80e06 hci_send_cmd +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc5572767 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd95ecc6d hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe61a9192 hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xef5d3b76 hci_recv_stream_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf8207c68 bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfd03bfbc bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0xfff1f474 hci_recv_fragment +EXPORT_SYMBOL net/bridge/bridge 0x7d1262f3 br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x084265ec ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x7de54d32 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xad4a897a ebt_do_table +EXPORT_SYMBOL net/caif/caif 0x1446b60a caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x2a09f713 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x329dbd06 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x38701a7c cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x4a237e57 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x50dcefc8 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x5f8696b3 cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0x6a44fc70 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x8165bdd5 get_cfcnfg +EXPORT_SYMBOL net/caif/caif 0x839ddb7b cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x966d7de2 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x9e3e305d cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0xb7b6874e caif_free_client +EXPORT_SYMBOL net/caif/caif 0xc56670eb caif_disconnect_client +EXPORT_SYMBOL net/caif/caif 0xd511e5e1 caif_enroll_dev +EXPORT_SYMBOL net/can/can 0x034847ed can_proto_register +EXPORT_SYMBOL net/can/can 0x2797242b can_rx_register +EXPORT_SYMBOL net/can/can 0x435c5e0e can_proto_unregister +EXPORT_SYMBOL net/can/can 0x4882e8ae can_ioctl +EXPORT_SYMBOL net/can/can 0xd2ad0a7f can_send +EXPORT_SYMBOL net/can/can 0xf9d1a6c0 can_rx_unregister +EXPORT_SYMBOL net/ceph/libceph 0x09290ab3 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x0bd5dcf4 ceph_calc_pg_primary +EXPORT_SYMBOL net/ceph/libceph 0x10940306 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x140d16fb ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x197effcb ceph_osdc_release_request +EXPORT_SYMBOL net/ceph/libceph 0x19ab4aca ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x1cc22eb0 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x1ff20af0 ceph_osdc_init +EXPORT_SYMBOL net/ceph/libceph 0x226c7ece ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x26331a48 ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0x270dd7f7 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x2977fe88 ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x2b0b4606 ceph_osdc_put_event +EXPORT_SYMBOL net/ceph/libceph 0x2c766809 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x2ff905cd ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x3158173e ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x324aeb31 ceph_monc_init +EXPORT_SYMBOL net/ceph/libceph 0x34a64292 ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x36062638 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0x3a0de307 ceph_copy_page_vector_to_user +EXPORT_SYMBOL net/ceph/libceph 0x3abec91f ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x3e0a3ef2 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x3f792db1 ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x4156f351 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x4205ffd7 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x43c8d341 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x43e458f6 ceph_file_part +EXPORT_SYMBOL net/ceph/libceph 0x488068a4 ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x4bab3612 ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x4d64f1e8 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0x4f180156 ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x50c29f3b ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x52e0646d ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x5379cea3 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x56d9e8f6 ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x57baf885 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x581919e9 ceph_calc_raw_layout +EXPORT_SYMBOL net/ceph/libceph 0x58daf620 ceph_monc_got_mdsmap +EXPORT_SYMBOL net/ceph/libceph 0x5a5a031d ceph_osdc_stop +EXPORT_SYMBOL net/ceph/libceph 0x5fe4b2fa ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0x62684c3e ceph_osdc_unregister_linger_request +EXPORT_SYMBOL net/ceph/libceph 0x63758856 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x687b80a9 ceph_osdc_wait_event +EXPORT_SYMBOL net/ceph/libceph 0x6d2d06a1 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0x6ed41be2 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x72acbc9f ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x77692acb ceph_msg_last_put +EXPORT_SYMBOL net/ceph/libceph 0x7bb2728d ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x81cbb997 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x82a9bc5a ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0x83508d82 ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0x87b33327 ceph_calc_object_layout +EXPORT_SYMBOL net/ceph/libceph 0x8ceea166 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x986b880c ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x9cdc5abe ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x9e77d5cf ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x9ec17c64 ceph_client_id +EXPORT_SYMBOL net/ceph/libceph 0x9f3136de ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x9f534f4d ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0xa40bd703 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0xa5f8335d ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xa82f74e0 ceph_osdc_cancel_event +EXPORT_SYMBOL net/ceph/libceph 0xafb8a407 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0xb54676fa ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0xb6081d6d ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0xb85d6840 ceph_osdc_create_event +EXPORT_SYMBOL net/ceph/libceph 0xb8e97591 ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0xc4a80955 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0xc52e38b2 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0xc55a1290 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0xc55de604 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0xc6fa6a9b ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xc9f82b38 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0xcb50a624 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0xd19f7429 ceph_monc_create_snapid +EXPORT_SYMBOL net/ceph/libceph 0xd2c107bb ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0xd644ba38 ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0xdae4d3f1 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0xe508fc67 ceph_osdc_build_request +EXPORT_SYMBOL net/ceph/libceph 0xe889dc03 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0xea8fdca1 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0xf0c8e579 ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0xf5e98827 ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xfdbc93bf ceph_osdc_set_request_linger +EXPORT_SYMBOL net/dccp/dccp_ipv4 0x750760a1 dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x29c34e70 ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x45c96e56 wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0x53c81ea7 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0x636be844 wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/ieee802154 0x6a5906dd ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x6c6e95ea ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x7efe7228 ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0x8f7f95aa wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0x95cee2d2 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0xbbcec10f ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xd2c2d345 ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xf6f3b4ec wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/ieee802154 0xfa765870 ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x158ae204 arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x187da8fc arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xe1e12127 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x40d4b740 ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x530f6adb ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xfb996f31 ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x1d9e897b xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0xfe95222e xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x6f4a34ab ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x83f7c626 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x4b93cef3 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x4ea0913e ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0xafc766c3 ip6t_do_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x508cbe3c xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0xb4505086 xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0x9519e70c xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xe37f287a xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x18d9667d ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x1aeb102f ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x29a6e545 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x6be88706 ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x8d702d00 ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x96b3c188 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x9fe58481 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xb0abdb2c ircomm_connect_response +EXPORT_SYMBOL net/irda/irda 0x01dbeb0e irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x0bab6037 hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x0eabc1e2 iriap_close +EXPORT_SYMBOL net/irda/irda 0x0fc27721 irlap_open +EXPORT_SYMBOL net/irda/irda 0x1a39b136 irlap_close +EXPORT_SYMBOL net/irda/irda 0x1abb3ba9 irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x1b72d988 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x1ce2e776 irttp_close_tsap +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x23a2eee7 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x359de411 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x3b0a2ab6 irias_find_object +EXPORT_SYMBOL net/irda/irda 0x3b9bdefe irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x3eed8acf iriap_open +EXPORT_SYMBOL net/irda/irda 0x3f82edc0 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x428321fa hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x48d17824 irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0x610d4fd5 alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x62acf28c irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0x648c7478 hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0x680ddb06 proc_irda +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x724a9642 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0x7619f61e irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7ac89124 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0x7d54adaf irias_new_object +EXPORT_SYMBOL net/irda/irda 0x7ff509a2 hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0x8cd99be0 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x954d1742 irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9e326eb3 hashbin_delete +EXPORT_SYMBOL net/irda/irda 0xa370c681 hashbin_find +EXPORT_SYMBOL net/irda/irda 0xa8689469 irttp_dup +EXPORT_SYMBOL net/irda/irda 0xa8e39670 irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0xa9eaac98 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc0bee29c hashbin_new +EXPORT_SYMBOL net/irda/irda 0xc1cea629 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0xd2a8a0ce irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xdeef9b1f irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xe7670468 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xf1dcc638 async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0xf1f2603c irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0xf52dace1 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0xf5f7cedf irttp_data_request +EXPORT_SYMBOL net/irda/irda 0xfe30df01 irlmp_close_lsap +EXPORT_SYMBOL net/l2tp/l2tp_core 0xf591ad16 l2tp_recv_common +EXPORT_SYMBOL net/lapb/lapb 0x0aa4243a lapb_unregister +EXPORT_SYMBOL net/lapb/lapb 0x17901347 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x40aad029 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0x45049f07 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x5ae021b6 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x9cff396e lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0xc56352dc lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0xdf8ed16a lapb_connect_request +EXPORT_SYMBOL net/llc/llc 0x32fd36fd llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x38b92846 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x53951d36 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x8e5c3d92 llc_sap_close +EXPORT_SYMBOL net/llc/llc 0x9b1bff9a llc_sap_find +EXPORT_SYMBOL net/llc/llc 0xba7cf673 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0xd629316a llc_sap_list_lock +EXPORT_SYMBOL net/llc/llc 0xe1b11d3a llc_set_station_handler +EXPORT_SYMBOL net/llc/llc 0xe4ad17f9 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/mac80211/mac80211 0x01531f43 ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x02ea16fc ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x04b14116 wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x22f320cc ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x26957faa ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0x29cb6cb8 ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x31e07ead ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0x33123e79 __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x3686d6f8 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x41a7828a ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x445fb09b ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0x45a46abc ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x484f8b81 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x491b1eb6 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x4de0050c ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0x4faa2f27 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x505e8509 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x57c90cad ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x5c28cca5 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x5c76704d ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x65326d70 ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x658b4647 ieee80211_sta_eosp_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x676a0821 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x683a1606 rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x70bb079f ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x72380e85 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x7344e354 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x746d9a86 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x78d95cb3 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x80d93411 ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x83eba2f8 ieee80211_napi_complete +EXPORT_SYMBOL net/mac80211/mac80211 0x89e36264 __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x8b6c7154 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x8d9c7f0c ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x8dc1ba18 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x909da5ef ieee80211_disable_dyn_ps +EXPORT_SYMBOL net/mac80211/mac80211 0x9762f418 ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x998f3279 ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x9c24dffd ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x9d40cc2e ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xa21c8f2b __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xa24f7510 ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0xa3dd7625 ieee80211_napi_schedule +EXPORT_SYMBOL net/mac80211/mac80211 0xa5aa82be ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xa6e9aebb ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0xa8b10f60 ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xaa157485 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0xad649ffb ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xb04ef769 ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0xb5f8dcc4 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0xb65dfc87 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xbb2bee2e ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0xc525ea2f ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xc7e9782e ieee80211_get_key_tx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0xc8ff9f5f ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0xd19f5c60 ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xd377751d __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0xd48df676 __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0xddb47d52 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0xdee06b3c ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xdfcdd9ee ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0xeadeba6b ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xebed54fb ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0xef0af0be ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0xefe7d142 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xf395de03 ieee80211_aes_cmac_calculate_k1_k2 +EXPORT_SYMBOL net/mac80211/mac80211 0xf66af6a8 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xf6a5fcac ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0xfb5e80d6 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xfb984075 ieee80211_enable_dyn_ps +EXPORT_SYMBOL net/mac802154/mac802154 0x23804ca9 ieee802154_free_device +EXPORT_SYMBOL net/mac802154/mac802154 0x25747704 ieee802154_alloc_device +EXPORT_SYMBOL net/mac802154/mac802154 0x2e9efdd7 ieee802154_register_device +EXPORT_SYMBOL net/mac802154/mac802154 0x82f0946b ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0xdb80875c ieee802154_unregister_device +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x1ade4538 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x3bf81adc ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x54339c7c ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x5d430cb7 ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x75fea9e9 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x894a7b48 ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x8aa670a3 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x92d5438a register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x96c6913b ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9c5cb4b2 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xa0674dfc ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xc7d62406 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd831a1a2 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xe0124b70 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xf01c5371 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x6d7e8b62 __nf_ct_ext_add_length +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x9f86d6c9 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xaf011a5c nf_conntrack_untracked +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x1d1c9278 nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/nf_nat 0x052946c3 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x0a94f1e6 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/nf_nat 0x53b7850e nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nf_nat 0x55e74515 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0x6c2592dd __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0xb717561b nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/x_tables 0x08c473b7 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x22cd6820 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x3a9051d6 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x648dbbb3 xt_register_target +EXPORT_SYMBOL net/netfilter/x_tables 0x7fc078fd xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xb28f5ef1 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xc1b9976a xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xc67ccaae xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xc681bb28 xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0xdb01403a xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xe0f60ba0 xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0xfa2cbfd6 xt_find_target +EXPORT_SYMBOL net/nfc/hci/hci 0x24b2ce40 nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0x26689050 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0x43028a27 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x485f8111 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0x4a59ad64 nfc_hci_send_response +EXPORT_SYMBOL net/nfc/hci/hci 0x58766195 nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x5b1daab0 nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x6b7f0a32 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0x7a013a76 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x973fa050 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x9824f7db nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0xab5c403d nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0xbca0b4fd nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0xc5db501c nfc_hci_register_device +EXPORT_SYMBOL net/nfc/hci/hci 0xca1dd967 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0xd78dc617 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0xdc30c67d nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0xded25dc5 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0xe8f3a20c nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0xef178e4a nfc_hci_send_event +EXPORT_SYMBOL net/nfc/nci/nci 0x27167c2b nci_unregister_device +EXPORT_SYMBOL net/nfc/nci/nci 0x9e7607e2 nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0xb8fd85ef nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0xba490602 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0xc0816cc8 nci_free_device +EXPORT_SYMBOL net/nfc/nci/nci 0xe283f56d nci_recv_frame +EXPORT_SYMBOL net/nfc/nfc 0x0863cfff nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0x129586f2 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x16ef3301 nfc_targets_found +EXPORT_SYMBOL net/nfc/nfc 0x5218c5a6 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x7d914348 nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0x7edc7863 nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0x7f45ca61 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x830ab7b3 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x8aef027f nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0xa7202135 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0xac69a272 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0xc242acb6 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0xd5a3070b nfc_class +EXPORT_SYMBOL net/nfc/nfc 0xd805213f nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0xe12794e6 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0xe85973b8 nfc_tm_activated +EXPORT_SYMBOL net/phonet/phonet 0x2f362ea6 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x30d3ca46 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0x3e1cc96e pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0x491b3df3 phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x94a5f55a phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0xafd08753 pn_sock_hash +EXPORT_SYMBOL net/phonet/phonet 0xbdc71141 phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xca2be972 phonet_proto_register +EXPORT_SYMBOL net/rds/rds 0x5031b8c5 rds_str_array +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x09f14c3a rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x0dad41db rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x12e142cb rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x24fed7e5 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2dc69ba7 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x46e71086 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4acf4e9f rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x4cd41fc7 rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x56871c99 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x796d6941 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x87d8194d rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x92bd3231 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa52aff15 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb924450f rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe410b760 rxrpc_kernel_end_call +EXPORT_SYMBOL net/sctp/sctp 0x941da12e sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/sunrpc 0xce7aa7d6 svc_pool_stats_open +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x72a35675 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x3f5c343e wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xea2c39b0 wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x00e065e9 cfg80211_del_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x030cd63b cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x05a2fd2c cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0f7e5927 cfg80211_roamed_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x12aa12b8 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0x1878e74a ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x19e03378 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x28999cbf cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x28fab2c9 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x29383f17 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0x29c2d41d cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x2c1aed90 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x2d98af03 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0x2f6a00b6 __cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x309b0ad2 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x30ee0e4a cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x3369081d cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x33b422f9 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0x35c232aa cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x363de5c3 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x37d37466 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x3c2217de cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x44e4bc31 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x44f0a512 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0x49cbbcbf cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x4d18adf5 cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0x4e9c912a cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x50f820ca wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x53cb93cf __cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x57f72168 cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x590268cb ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x5c1b8aa0 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x5cc88516 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x623eac70 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x638d9e0c cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x6850cb60 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6cc9552a cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0x6ec3f068 cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x6f163c3b cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0x75d031ec cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x77d899e3 wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x7ef39823 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x7fe1a403 cfg80211_find_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x807368e3 cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x81404b48 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x819911cc cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x8398c487 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0x86937100 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x8979e418 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0x8bdd659c cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x94a5e12d cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x982e6b6d ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0x9aad3236 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x9cf4e44d wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x9d44914f wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0xa1425906 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xa197b1ff ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0xa8935304 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xb7b1fa8f wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0xb8746dd5 cfg80211_send_unprot_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xc1e9d86f cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0xc33fb791 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0xc39e32e8 cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0xc63f1b81 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc71cbb9a cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0xcc468cd0 cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0xcf618a57 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0xd4ae6424 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0xd945edb1 ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xdb9b2969 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0xddf18d1b ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0xde8a2781 cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0xea22811e cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xeb570d7b cfg80211_send_unprot_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0xeb870bce cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0xf4a91c6e wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xf82e189e cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xf8649b25 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0xf9a53862 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xfa7d87f9 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xfb0d28a9 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xfed4d591 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/lib80211 0x28f65a2d lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x4a6634fe lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x5fad613b lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x6082905b lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xb924bc4d lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xfc2859e5 lib80211_crypt_delayed_deinit +EXPORT_SYMBOL sound/ac97_bus 0x49343b5f ac97_bus_type +EXPORT_SYMBOL sound/core/seq/snd-seq 0x0e82e10d snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3061c52d snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x40643fb8 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x78293ab8 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x9d98d0b1 snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x242e207f snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x65e2bfb7 snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x2b51b084 snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x350963b4 snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x7f62d029 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x83914b9a snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x92ee6bb0 snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x9e7d3f0f snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xbc141dfc snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xf2bf1549 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x4e8ec847 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x025fd124 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x07ab5769 snd_device_free +EXPORT_SYMBOL sound/core/snd 0x0de8264b snd_component_add +EXPORT_SYMBOL sound/core/snd 0x0efca083 _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x12fbc8db snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0x15d55a0f snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x2c306ef6 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0x2f059c57 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x316448d9 snd_card_free +EXPORT_SYMBOL sound/core/snd 0x3346dc3a snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x36662ed0 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0x377b4751 snd_card_unref +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x3ee4f1ad snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0x429fd692 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4b015768 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0x4eaefae0 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x4ec3a262 snd_card_create +EXPORT_SYMBOL sound/core/snd 0x52c2c5b2 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x55f76168 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x602c96f0 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x621c9188 snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x712f22b4 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x72c344d5 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x81b69e41 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x83dd1361 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x884c5a51 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x8e7288a0 snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x907782c3 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x9d5e4936 snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0xa0fd2427 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0xa3e2eeed snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0xa56d80d3 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0xa6cdc802 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0xa79e3a75 snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0xab428176 snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0xb0eb2ff6 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0xb10d489b snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xc8832260 snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0xce3ca308 copy_from_user_toio +EXPORT_SYMBOL sound/core/snd 0xd22fc5a8 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0xdb368582 snd_device_new +EXPORT_SYMBOL sound/core/snd 0xdfeafc6a snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0xe1d8f666 snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0xe7071f04 snd_info_register +EXPORT_SYMBOL sound/core/snd 0xed72fee4 snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xed815d67 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0xf3b710f5 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xf6f1f8db snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0xfc01397a snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xfef2b12e snd_cards +EXPORT_SYMBOL sound/core/snd-hwdep 0x5b84b032 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x20424e2a snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-page-alloc 0x3b91f3af snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x9c08fe1b snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xade88e76 snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xb30b8703 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-page-alloc 0xc694ac15 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xd8e37533 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0xed56d91f snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x08366c3d snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x0938a24e snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x13dd0e43 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0x1cc60f2d snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x29604d2a snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x2e6929a2 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x36bd2037 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x3d98c7c9 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x4d9b6d35 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x526b9537 snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x53449f19 snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x54c0467e snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x58af627e snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x60359403 snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x609302bf snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x6526b522 snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x6bd7315f snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x6c177082 snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x6dff6a94 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x6e5b6b9f snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x7db4efa1 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x7ec1eff0 snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x83c9e658 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0x856a6940 snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x881c6716 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x89c83e40 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x94098ff8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x9880818c snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0x9a3a14ac snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x9e252010 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x9ecf7edf snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xa2c9adc6 _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0xa41e10e7 snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0xa446ebcc snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa9adc229 snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0xaa93af46 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0xb15b2409 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xb24df674 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xc3646ece snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0xd2598e77 snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0xdcbf6aa9 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0xdd16aac8 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xe538cadf snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe5e488d9 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0xef1956f6 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf500171f snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0xff6104d0 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-rawmidi 0x04e8ef02 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0636aa0e snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x0d6708f8 snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-rawmidi 0x297f3316 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x2d4b3b29 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x53717ef0 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0x59826359 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5ac2a40b snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0x5ae2f812 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6be26edd snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0xbe76cc9c snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0xcc52936f snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd6d7f9b4 snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0xdc08e8be snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0xebd35302 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf517ccb6 snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xf87ec934 snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-timer 0x41851e8f snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0x479ce03e snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x4f5e8d71 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0x5d53eb85 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0x61e45de8 snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x6dabd2db snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x8624a400 snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xa0b00474 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0xa43ccdd2 snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0xaf8eed4a snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0xba520f82 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0xbc466d48 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0xbc7bc035 snd_timer_global_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x6d629c59 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc0fec227 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xe370e1a4 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x046865b2 snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3b68e668 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x5525d6c8 snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x62429cc4 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xb4a0b010 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xc440e404 snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xe0c0d13e snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xe9bd89dd snd_opl3_create +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0xf0aae3ab snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x0a6e77ad snd_opl4_write +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0x26d8a600 snd_opl4_read_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xa7226bd1 snd_opl4_write_memory +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xce911732 snd_opl4_create +EXPORT_SYMBOL sound/drivers/opl4/snd-opl4-lib 0xd1a72aec snd_opl4_read +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x00c382ca snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4410bc2e snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x4b7bdcaa snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x5c0cbbcf snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x69d27da9 snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x717cd965 snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x7bbfb3e4 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x9b65cf5b snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xb799f011 snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xf1f04d23 snd_vx_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x0faae325 amdtp_out_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x37cbbf03 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x43e459cc fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x45317d9f cmp_connection_break +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x45efa36f amdtp_out_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x47118fda fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x48ec5db3 amdtp_out_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x4bb3f32b amdtp_out_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x55c704da iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x563ccab5 snd_fw_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x62fabc9f amdtp_out_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x64a73f33 amdtp_out_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x70613e15 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x75b738f5 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x81b16144 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x83500cbf fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x9352238c fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x96ccb8bb amdtp_out_stream_set_rate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x9ee54bd0 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xc5ffed96 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xd8674a8e amdtp_out_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xdd6cbb44 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xdd9ac563 amdtp_out_stream_set_pcm_format +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xdeeff483 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xfa68f419 amdtp_out_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xfaa875b7 amdtp_out_stream_update +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x10dd068a snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x2e7f4165 snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x70978541 snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x8a4acc44 snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x96711dc6 snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xa38e8b9b snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1678d2f5 snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x752afa52 snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xacf65581 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xbc1ba96a snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xe5e7fce7 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xe8ed4ea2 snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x773c524e snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x8697b9ee snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xd45e146f snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xf12f379f snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x97b700e4 snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0xb5566c61 snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x4519dcc7 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x9600c8f8 snd_tea575x_set_freq +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xabf437e5 snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x52ae619b snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x7bc0a80c snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x89943619 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xba5052ca snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xcb1df738 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-i2c 0x18b617c8 snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x95881f2a snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0x9f277d42 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xb5596041 snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0xd7df1648 snd_i2c_sendbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xde81ddab snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0x0c209dcb snd_tea6330t_update_mixer +EXPORT_SYMBOL sound/i2c/snd-tea6330t 0xbad2a207 snd_tea6330t_detect +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x4661d8a0 snd_es1688_pcm +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x79ab76d7 snd_es1688_mixer +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0x8996b287 snd_es1688_create +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xf7b844d5 snd_es1688_reset +EXPORT_SYMBOL sound/isa/es1688/snd-es1688-lib 0xfa971b75 snd_es1688_mixer_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x01437003 snd_gus_use_dec +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x10f7f2f1 snd_gf1_alloc_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x1b527c00 snd_gus_dram_read +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x1c1ce117 snd_gus_interrupt +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x22855ca4 snd_gf1_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x2363a290 snd_gf1_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x3d26e2d0 snd_gf1_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x44205f06 snd_gf1_free_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x46db8d67 snd_gf1_lvol_to_gvol_raw +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x522aa5ea snd_gf1_ctrl_stop +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x55f9f922 snd_gf1_delay +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x638dd080 snd_gus_dram_write +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x66452490 snd_gus_use_inc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x754a297c snd_gf1_mem_lock +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x7a4365cd snd_gus_create +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x85753854 snd_gf1_i_look8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x8839eb8d snd_gf1_write16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x96c54a22 snd_gf1_new_mixer +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0x99037a08 snd_gus_initialize +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xaccfba9a snd_gf1_mem_free +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xb66a8c14 snd_gf1_pcm_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc38e8c68 snd_gf1_rawmidi_new +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc43a5527 snd_gf1_atten_table +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xc6059fb8 snd_gf1_peek +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xcdf17be2 snd_gf1_i_look16 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd3fe7372 snd_gf1_write_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd4fa2fec snd_gf1_dram_addr +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xd9a38334 snd_gf1_stop_voice +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xdf3aee64 snd_gf1_mem_alloc +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xe5d26d89 snd_gf1_mem_xfree +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xebfbc74b snd_gf1_i_write8 +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xefb305ac snd_gf1_poke +EXPORT_SYMBOL sound/isa/gus/snd-gus-lib 0xf9a01191 snd_gf1_translate_freq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x0e096be3 snd_msnd_init_queue +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x0f73c597 snd_msnd_DARQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x1ccb412b snd_msnd_DAPQ +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x3497c0be snd_msndmix_force_recsrc +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x48c60074 snd_msnd_send_word +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x68e8333a snd_msnd_disable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x75026b24 snd_msndmidi_input_read +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0x8b3daedb snd_msndmix_new +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xb27701da snd_msndmix_setup +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xbae34661 snd_msnd_send_dsp_cmd +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xbf55454c snd_msnd_enable_irq +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xcf40533d snd_msnd_pcm +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xd319fb57 snd_msnd_dsp_halt +EXPORT_SYMBOL sound/isa/msnd/snd-msnd-lib 0xfa3921c7 snd_msnd_upload_host +EXPORT_SYMBOL sound/isa/opti9xx/snd-miro 0xa327fa03 snd_aci_get_aci +EXPORT_SYMBOL sound/isa/opti9xx/snd-miro 0xfad8d30f snd_aci_cmd +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x0195459f snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x1f3ccf7b snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x68d905f3 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x8ec8c3c5 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x9e9a58bd snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xa8c0e2b0 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xbae9f831 snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xc783266d snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xd227849a snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xd58de2f1 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-csp 0x4164d487 snd_sb_csp_new +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x1f6fca2c snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x2356b63d snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x9f9ff6a4 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xe0b3f690 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x01a02bde snd_sb8dsp_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x1e9c2f91 snd_sb8dsp_midi +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0x62e722de snd_sb8dsp_midi_interrupt +EXPORT_SYMBOL sound/isa/sb/snd-sb8-dsp 0xc72488fa snd_sb8dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x11d30617 snd_emu8000_load_reverb_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x20bd3f45 snd_emu8000_update_equalizer +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x62c731ba snd_emu8000_dma_chan +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x68f80faa snd_emu8000_update_reverb_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x77b385f1 snd_emu8000_poke +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0x9cacc99e snd_emu8000_poke_dw +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xaee67181 snd_emu8000_update_chorus_mode +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xd3733341 snd_emu8000_load_chorus_fx +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xde209814 snd_emu8000_peek +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xf8f938d2 snd_emu8000_init_fm +EXPORT_SYMBOL sound/isa/sb/snd-sbawe 0xfca5e7e3 snd_emu8000_peek_dw +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x1c4e6f0d snd_wss_put_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x38c4097c snd_wss_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x441ab7df snd_wss_put_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x4422e615 snd_wss_get_pcm_ops +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x5668461d snd_wss_pcm +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x56d36b18 snd_wss_mce_up +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x594faa2a snd_wss_info_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x65db6917 snd_wss_info_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x7b202637 snd_wss_interrupt +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x7eab7ea4 snd_cs4236_ext_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x83542fc5 snd_cs4236_ext_out +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0x9a7cf84d snd_wss_in +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xb28c240c snd_wss_get_double +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xbce41e92 snd_wss_mixer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xc25db51b snd_wss_mce_down +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xdb6cc497 snd_wss_create +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xe4472d53 snd_wss_timer +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xead8fcde snd_wss_get_single +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xf87820d8 snd_wss_chip_id +EXPORT_SYMBOL sound/isa/wss/snd-wss-lib 0xfad0082e snd_wss_overrange +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x25f0d3f1 snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x2fc6f769 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x447ef4b7 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x450e6576 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6209dbd9 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x6d7f10e8 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8375e2d7 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x85642a57 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x860e5e57 snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8b050568 snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x8df4ff90 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb5f88a22 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd26ccf88 snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xdae14d31 snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xea185036 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf509c4de snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xfda8dc2e snd_ac97_suspend +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x8ac69b85 hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x3c431e96 snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x637d2e84 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x99eedd59 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x9b5c14e2 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd07c735f snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd48917e9 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd5447077 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xdd88a545 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xfd1ec08b snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x60e9bb94 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x299139e2 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x4607e609 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x9229ca06 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x0f7d660a oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x2198af97 oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x21f58ef1 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x34fb6788 oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x542138cb oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x761728be oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x7839eec2 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x7b861dfc oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x94114eaf oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x95f833b4 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x972d26e8 oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9e5e6f35 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa107e3bf oxygen_write16_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa10f6c43 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa8eb78ad oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb0aaafcc oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xb30d0759 oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xd74202db oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xef3b06be oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf7a9f221 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x6e16e106 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x93a82130 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xb856797b snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xdecfa432 snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xee8e5081 snd_trident_alloc_voice +EXPORT_SYMBOL sound/soundcore 0xa459e8f1 sound_class +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x1b6d9961 snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x1e4cd44d snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x4180472b snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x78ff9a65 snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x89b1cf81 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xde75179d snd_emux_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0373f0dc snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0x1cea7d75 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x44d0d500 __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x586c8a51 snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5a168b7c snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x5ce03651 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x74d53d08 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xf13a5e6b __snd_util_memblk_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0xe60fcb45 snd_usbmidi_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x1d8112af dm_mem_cache_alloc +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x22df6ffa dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x35c95b1b dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x86e5acf9 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xa43471b6 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xd55b290c dm_mem_cache_client_destroy +EXPORT_SYMBOL vmlinux 0x00000000 softirq_work_list +EXPORT_SYMBOL vmlinux 0x00044d96 kill_block_super +EXPORT_SYMBOL vmlinux 0x001a6368 __elv_add_request +EXPORT_SYMBOL vmlinux 0x00277160 bdput +EXPORT_SYMBOL vmlinux 0x0043747f sock_alloc_file +EXPORT_SYMBOL vmlinux 0x00460502 finish_no_open +EXPORT_SYMBOL vmlinux 0x00670b05 try_to_release_page +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x0084e86d unregister_shrinker +EXPORT_SYMBOL vmlinux 0x00918ee2 I_BDEV +EXPORT_SYMBOL vmlinux 0x0095ac97 kdb_current_task +EXPORT_SYMBOL vmlinux 0x009e76ba clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x00e2c188 nla_put +EXPORT_SYMBOL vmlinux 0x00e40a7f __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x00e8097b csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0x00ed49a0 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x00f2552e qdisc_destroy +EXPORT_SYMBOL vmlinux 0x00f62c0c vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x01135e94 twl6040_reg_write +EXPORT_SYMBOL vmlinux 0x01139ffc max_mapnr +EXPORT_SYMBOL vmlinux 0x0118b0dd d_genocide +EXPORT_SYMBOL vmlinux 0x012e13d0 __register_chrdev +EXPORT_SYMBOL vmlinux 0x01493e20 __netif_schedule +EXPORT_SYMBOL vmlinux 0x0179d524 wireless_spy_update +EXPORT_SYMBOL vmlinux 0x017b518f dev_warn +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x01b55279 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e902ed cdrom_open +EXPORT_SYMBOL vmlinux 0x01f69989 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0x01fee24d pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x022c0f43 icmpv6_send +EXPORT_SYMBOL vmlinux 0x0235fa85 current_fs_time +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0271c488 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0x0274dc2b netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x0289f176 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x029f78e7 set_disk_ro +EXPORT_SYMBOL vmlinux 0x02a18c74 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02b05034 register_con_driver +EXPORT_SYMBOL vmlinux 0x02be5af1 iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x02c269ed blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x02cb3447 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x02dbd7c6 skb_copy_expand +EXPORT_SYMBOL vmlinux 0x02defdc5 pci_bus_type +EXPORT_SYMBOL vmlinux 0x02ee26c1 free_pages_exact +EXPORT_SYMBOL vmlinux 0x0300f7a8 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0x030e5fd5 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x031578f6 dquot_destroy +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x0345e42f filp_close +EXPORT_SYMBOL vmlinux 0x03592ea0 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x035a6959 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x03647f0a pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0x0366307a console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x0367ab46 sk_release_kernel +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x037bf7da get_write_access +EXPORT_SYMBOL vmlinux 0x03a1657c security_path_chmod +EXPORT_SYMBOL vmlinux 0x03b580eb wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x03b83ec3 blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x03bd889d param_get_ulong +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03cfede3 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x03d4bcff mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x03e2d62b tty_throttle +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x040b1daf phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x0412335d rtnl_create_link +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x04283e74 ihold +EXPORT_SYMBOL vmlinux 0x043f032f netdev_printk +EXPORT_SYMBOL vmlinux 0x04482cdb __refrigerator +EXPORT_SYMBOL vmlinux 0x04524ecc copy_strings_kernel +EXPORT_SYMBOL vmlinux 0x045e3631 blkdev_fsync +EXPORT_SYMBOL vmlinux 0x04617461 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x046c1f16 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x046fd9ac fget_light +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x048ba238 simple_statfs +EXPORT_SYMBOL vmlinux 0x0494d6cb fb_show_logo +EXPORT_SYMBOL vmlinux 0x0499badc acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x04b597df dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x04ea56f9 _kstrtol +EXPORT_SYMBOL vmlinux 0x0501c98d __devm_request_region +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x053caf9a path_get +EXPORT_SYMBOL vmlinux 0x054085c3 __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x054434d6 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x05483fc5 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0x055a8ec1 kobject_init +EXPORT_SYMBOL vmlinux 0x056ee730 ipv6_hash_secret +EXPORT_SYMBOL vmlinux 0x057a91e2 update_time +EXPORT_SYMBOL vmlinux 0x057ce975 hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x057fbf40 pci_enable_device_io +EXPORT_SYMBOL vmlinux 0x0593a99b init_timer_key +EXPORT_SYMBOL vmlinux 0x059ea6a5 qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0x05b35d56 dma_mark_declared_memory_occupied +EXPORT_SYMBOL vmlinux 0x05c9329b inc_nlink +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x0634100a bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x06527519 inet6_add_offload +EXPORT_SYMBOL vmlinux 0x06712b59 tcp_make_synack +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x068b94cc ab3100_event_register +EXPORT_SYMBOL vmlinux 0x068c7263 ioremap_cache +EXPORT_SYMBOL vmlinux 0x0693e731 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x06ae1710 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x06c0dae5 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x06d2f086 dma_spin_lock +EXPORT_SYMBOL vmlinux 0x06ea4710 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x06f4bf00 seq_escape +EXPORT_SYMBOL vmlinux 0x06f791d8 sock_create_lite +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x07068aae blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x070d9614 scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x0711d55e bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x07138dea tty_port_close +EXPORT_SYMBOL vmlinux 0x0717c2de sock_wmalloc +EXPORT_SYMBOL vmlinux 0x07203670 max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x073172e2 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x074f5606 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0x0757c30d dev_uc_flush +EXPORT_SYMBOL vmlinux 0x07608604 acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x076ebea8 pv_lock_ops +EXPORT_SYMBOL vmlinux 0x0785d363 do_splice_from +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x07a155d1 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07bf3c8c pci_pme_active +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x07d3935a devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x07d50a24 csum_partial +EXPORT_SYMBOL vmlinux 0x0809f13f follow_up +EXPORT_SYMBOL vmlinux 0x081c963e dev_crit +EXPORT_SYMBOL vmlinux 0x0821cdc8 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x082bc47d d_invalidate +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x082facec ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x083c98b2 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x083eb21c rfkill_unregister +EXPORT_SYMBOL vmlinux 0x0855be68 usb_add_phy +EXPORT_SYMBOL vmlinux 0x08901a81 rfkill_alloc +EXPORT_SYMBOL vmlinux 0x0897287b acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x08bf826c _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0x08db7b38 account_page_redirty +EXPORT_SYMBOL vmlinux 0x08e662b1 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x08f0610f single_open +EXPORT_SYMBOL vmlinux 0x08ffa743 block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x093161d6 scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0x093c8f38 fput +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x095eb459 dma_supported +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x0992780d efi_enabled +EXPORT_SYMBOL vmlinux 0x09a478d9 idr_for_each +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09ea3a70 __frontswap_init +EXPORT_SYMBOL vmlinux 0x0a013606 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0x0a1148a2 tcp_getsockopt +EXPORT_SYMBOL vmlinux 0x0a11da27 generic_permission +EXPORT_SYMBOL vmlinux 0x0a144dbd napi_gro_frags +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a3131f6 strnchr +EXPORT_SYMBOL vmlinux 0x0a38ff2c sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0x0a469d23 mfd_clone_cell +EXPORT_SYMBOL vmlinux 0x0a617a01 tcp_parse_options +EXPORT_SYMBOL vmlinux 0x0a7bc120 mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0x0a990868 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x0aa74954 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x0aba4593 skb_make_writable +EXPORT_SYMBOL vmlinux 0x0abb1ff4 page_symlink +EXPORT_SYMBOL vmlinux 0x0ac525e6 register_sysctl +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0b044dfe blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0x0b0819ea kfree_skb_partial +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b2c14c0 dev_printk +EXPORT_SYMBOL vmlinux 0x0b45c0e6 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x0b48677a __kfifo_init +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b77e70c simple_transaction_release +EXPORT_SYMBOL vmlinux 0x0b882eb8 do_sync_write +EXPORT_SYMBOL vmlinux 0x0b8e6c07 dev_get_by_name +EXPORT_SYMBOL vmlinux 0x0ba317ef truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0x0bc477a2 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x0bc891be simple_lookup +EXPORT_SYMBOL vmlinux 0x0bd434ed i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0x0bdc971f pnp_register_driver +EXPORT_SYMBOL vmlinux 0x0beafcde gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0x0beb78ba __get_user_pages +EXPORT_SYMBOL vmlinux 0x0c02ad26 dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x0c192045 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x0c1c2df9 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x0c43698e xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x0c58a8cd netdev_increment_features +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c6c234f jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x0c76e5ce vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x0c7b04c9 set_groups +EXPORT_SYMBOL vmlinux 0x0c8c4672 generic_setlease +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0ca0c882 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0ca81a72 file_remove_suid +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb274ab neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x0cdb7d12 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x0cde729c key_type_keyring +EXPORT_SYMBOL vmlinux 0x0cec63e7 phy_device_register +EXPORT_SYMBOL vmlinux 0x0cf49139 mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x0cf5fd69 __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0x0cf8f67b d_instantiate_unique +EXPORT_SYMBOL vmlinux 0x0d19d7f9 __serio_register_port +EXPORT_SYMBOL vmlinux 0x0d2303e5 key_invalidate +EXPORT_SYMBOL vmlinux 0x0d250fa4 inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0x0d2e690f posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x0d3a23fa free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d4374fa poll_freewait +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0db7dc84 kernel_connect +EXPORT_SYMBOL vmlinux 0x0dd07f67 __seq_open_private +EXPORT_SYMBOL vmlinux 0x0e00e58c abort_creds +EXPORT_SYMBOL vmlinux 0x0e288df8 bio_add_page +EXPORT_SYMBOL vmlinux 0x0e300bf7 schedule_work +EXPORT_SYMBOL vmlinux 0x0e35b1f6 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x0e640021 dev_deactivate +EXPORT_SYMBOL vmlinux 0x0e6994b9 xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x0e6da44a set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x0e768109 inet6_del_offload +EXPORT_SYMBOL vmlinux 0x0eb8739f pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0x0ee86f8d __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x0f4c91ed ns_to_timespec +EXPORT_SYMBOL vmlinux 0x0f66ec49 pci_select_bars +EXPORT_SYMBOL vmlinux 0x0f7bef52 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x0f7f559e generic_ro_fops +EXPORT_SYMBOL vmlinux 0x0fa88dce tty_port_close_start +EXPORT_SYMBOL vmlinux 0x0fae11a6 fb_blank +EXPORT_SYMBOL vmlinux 0x0faef0ed __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x0fb9882b fail_migrate_page +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x10054031 iget_locked +EXPORT_SYMBOL vmlinux 0x102c56de irq_regs +EXPORT_SYMBOL vmlinux 0x1043523c pipe_to_file +EXPORT_SYMBOL vmlinux 0x106026a7 jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x10658763 kill_anon_super +EXPORT_SYMBOL vmlinux 0x1071b858 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x10743959 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x10791ace __dst_free +EXPORT_SYMBOL vmlinux 0x1092bc74 blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0x10ab7e68 down_killable +EXPORT_SYMBOL vmlinux 0x10b1043d pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x10bdc6b3 set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0x10e3658d sk_run_filter +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x11089ac7 _ctype +EXPORT_SYMBOL vmlinux 0x110c738e generic_pipe_buf_map +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x112ba04e locks_free_lock +EXPORT_SYMBOL vmlinux 0x113ad2b8 remap_pfn_range +EXPORT_SYMBOL vmlinux 0x113dd76c skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0x11589f0e devm_gpio_free +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x1173a00e elv_add_request +EXPORT_SYMBOL vmlinux 0x118f8c53 inet_select_addr +EXPORT_SYMBOL vmlinux 0x1196b2b8 ht_create_irq +EXPORT_SYMBOL vmlinux 0x1199a217 simple_write_end +EXPORT_SYMBOL vmlinux 0x11aa96cf dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0x11c5c3d8 bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x11dd01ad intel_scu_ipc_command +EXPORT_SYMBOL vmlinux 0x11e2ec12 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x11f31523 account_page_writeback +EXPORT_SYMBOL vmlinux 0x11f7ed4c hex_to_bin +EXPORT_SYMBOL vmlinux 0x11ffe5b2 file_update_time +EXPORT_SYMBOL vmlinux 0x120b336a __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x1223344e __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0x123131ad mdiobus_read +EXPORT_SYMBOL vmlinux 0x12358ef4 gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x125042c9 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x125059d3 module_put +EXPORT_SYMBOL vmlinux 0x1272080a vlan_vid_add +EXPORT_SYMBOL vmlinux 0x12828579 aio_complete +EXPORT_SYMBOL vmlinux 0x1285a6cd tcp_syn_flood_action +EXPORT_SYMBOL vmlinux 0x128a5cf9 complete_all +EXPORT_SYMBOL vmlinux 0x12a38747 usleep_range +EXPORT_SYMBOL vmlinux 0x12a551b8 proto_register +EXPORT_SYMBOL vmlinux 0x12da5bb2 __kmalloc +EXPORT_SYMBOL vmlinux 0x12f99022 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x12fe7cdc mii_check_gmii_support +EXPORT_SYMBOL vmlinux 0x13307fde vsscanf +EXPORT_SYMBOL vmlinux 0x133d1ea7 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x135948d4 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x13693bc3 mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x136b792a xfrm_input +EXPORT_SYMBOL vmlinux 0x136d0694 nlmsg_notify +EXPORT_SYMBOL vmlinux 0x13722b2f netdev_emerg +EXPORT_SYMBOL vmlinux 0x138725d0 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x139e7be2 mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x13c599db twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0x13d0adf7 __kfifo_out +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x1420b379 kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x1431e491 wireless_send_event +EXPORT_SYMBOL vmlinux 0x14584462 dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x1475db71 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x1488ad7c alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0x14a1406a padata_do_serial +EXPORT_SYMBOL vmlinux 0x14aea134 sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x14bf913a led_blink_set_oneshot +EXPORT_SYMBOL vmlinux 0x14c8be1d blk_put_request +EXPORT_SYMBOL vmlinux 0x14da5e70 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x14f7f82e xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0x150389d6 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x1503b180 zero_fill_bio +EXPORT_SYMBOL vmlinux 0x15135a12 fsync_bdev +EXPORT_SYMBOL vmlinux 0x152c2321 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0x15348a31 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0x1534efec idr_get_next +EXPORT_SYMBOL vmlinux 0x154c6338 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x154cdfa3 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x15605c98 xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x15692c87 param_ops_int +EXPORT_SYMBOL vmlinux 0x156daebf uart_match_port +EXPORT_SYMBOL vmlinux 0x15a1d8b7 neigh_connected_output +EXPORT_SYMBOL vmlinux 0x15af6154 nf_register_hook +EXPORT_SYMBOL vmlinux 0x15be617a fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x15c5b823 init_buffer +EXPORT_SYMBOL vmlinux 0x15eefbba dev_addr_add +EXPORT_SYMBOL vmlinux 0x15f571ec blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x1627ed72 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x16384b3d bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x165e12a5 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x166b6008 inode_permission +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x1685f701 napi_get_frags +EXPORT_SYMBOL vmlinux 0x168f1082 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x16a858c1 netif_carrier_off +EXPORT_SYMBOL vmlinux 0x16bfc470 send_sig +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x170c5fbe netdev_warn +EXPORT_SYMBOL vmlinux 0x17266403 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0x173238b3 blk_init_queue +EXPORT_SYMBOL vmlinux 0x1739ae32 sk_receive_skb +EXPORT_SYMBOL vmlinux 0x176feaf5 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0x1787cafc crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x1790d76b _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x179d8aaa mpage_readpages +EXPORT_SYMBOL vmlinux 0x17a8446e invalidate_bdev +EXPORT_SYMBOL vmlinux 0x17af28f1 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x17c6eb04 scsi_unregister +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17eb428c sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0x17edfd28 eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x17f86378 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x1826f089 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x182ac2e4 block_read_full_page +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x184e6c85 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x1856ed6e pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x185899d8 tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0x18790e7e kunmap +EXPORT_SYMBOL vmlinux 0x188a3dfb timespec_trunc +EXPORT_SYMBOL vmlinux 0x189868d7 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x189a2a5d vc_cons +EXPORT_SYMBOL vmlinux 0x18cb7f58 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x18d96501 atomic64_dec_if_positive_cx8 +EXPORT_SYMBOL vmlinux 0x18e090ad inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x18f260ec scsi_block_requests +EXPORT_SYMBOL vmlinux 0x193c0d89 scsi_host_get +EXPORT_SYMBOL vmlinux 0x19437f8b __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x1975faaf seq_read +EXPORT_SYMBOL vmlinux 0x1976aa06 param_ops_bool +EXPORT_SYMBOL vmlinux 0x19786a41 generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0x19799977 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x19893b60 skb_seq_read +EXPORT_SYMBOL vmlinux 0x19989500 tty_port_hangup +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19a9e62b complete +EXPORT_SYMBOL vmlinux 0x19bd383b security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x19f33408 register_framebuffer +EXPORT_SYMBOL vmlinux 0x1a18551c dquot_quota_on +EXPORT_SYMBOL vmlinux 0x1a33cab2 genphy_suspend +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a63af34 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x1a83e14c acpi_bus_start +EXPORT_SYMBOL vmlinux 0x1a843af1 devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x1a8d6894 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x1a91c7b1 dump_trace +EXPORT_SYMBOL vmlinux 0x1a9a7f6f dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0x1abe0784 dev_close +EXPORT_SYMBOL vmlinux 0x1ac4e68c __i2c_transfer +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1ad14749 dma_find_channel +EXPORT_SYMBOL vmlinux 0x1ae14ef5 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x1ae3ee97 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b0ac272 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0x1b0f6430 pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0x1b1e1088 sg_nents +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b79f7e7 swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x1b82fefa md_unplug +EXPORT_SYMBOL vmlinux 0x1b8479a3 mutex_lock +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1ba7ccc6 cfb_fillrect +EXPORT_SYMBOL vmlinux 0x1bb53145 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x1bf7fdd1 netdev_change_features +EXPORT_SYMBOL vmlinux 0x1bf823ef netdev_update_features +EXPORT_SYMBOL vmlinux 0x1bfd223e pci_map_rom +EXPORT_SYMBOL vmlinux 0x1c09f02c cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x1c13c851 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x1c2fe6e5 freeze_super +EXPORT_SYMBOL vmlinux 0x1c3d039d jbd2__journal_start +EXPORT_SYMBOL vmlinux 0x1c615791 generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x1c72975f dcache_dir_open +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c934933 i2c_del_driver +EXPORT_SYMBOL vmlinux 0x1ca93c9c generic_writepages +EXPORT_SYMBOL vmlinux 0x1caef4ab mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x1cb9af37 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1cd1eec0 get_fs_type +EXPORT_SYMBOL vmlinux 0x1d1d7eca jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0x1d24921b in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x1d4c682d dev_set_allmulti +EXPORT_SYMBOL vmlinux 0x1d52e4df mount_pseudo +EXPORT_SYMBOL vmlinux 0x1d63dcbf __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x1d7cef09 __pskb_copy +EXPORT_SYMBOL vmlinux 0x1d7d0406 mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x1d7ee01c scsi_device_get +EXPORT_SYMBOL vmlinux 0x1d9726f5 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x1daf238a module_refcount +EXPORT_SYMBOL vmlinux 0x1dafa0f1 max8998_bulk_write +EXPORT_SYMBOL vmlinux 0x1db6214b blk_fetch_request +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1e047854 warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x1e0c2be4 ioremap_wc +EXPORT_SYMBOL vmlinux 0x1e19cae4 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x1e26be3b get_anon_bdev +EXPORT_SYMBOL vmlinux 0x1e332691 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0x1e3dc1be kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x1e4933c7 devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e71a245 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x1e8f6dac tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0x1e9edfb7 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x1ec4eb34 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x1ec57696 agp_enable +EXPORT_SYMBOL vmlinux 0x1ee80e11 tty_name +EXPORT_SYMBOL vmlinux 0x1f0ddebe block_write_end +EXPORT_SYMBOL vmlinux 0x1f122853 register_md_personality +EXPORT_SYMBOL vmlinux 0x1f59c1e2 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x1f5a8886 ip6_xmit +EXPORT_SYMBOL vmlinux 0x1f5b4534 __skb_get_rxhash +EXPORT_SYMBOL vmlinux 0x1f65dd22 dev_add_offload +EXPORT_SYMBOL vmlinux 0x1f7d8f28 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x1f7e807f kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x1fba2eca genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0x1fba8840 nf_reinject +EXPORT_SYMBOL vmlinux 0x1fbd16da ip_tos2prio +EXPORT_SYMBOL vmlinux 0x1fd07fff kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x1fe912f1 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x1fed6ea7 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x2000b43d netif_carrier_on +EXPORT_SYMBOL vmlinux 0x20024391 dcb_getapp +EXPORT_SYMBOL vmlinux 0x20056746 ifla_policy +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x201a4e5f tty_port_close_end +EXPORT_SYMBOL vmlinux 0x204173d9 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x2059f7e7 con_is_bound +EXPORT_SYMBOL vmlinux 0x2072ee9b request_threaded_irq +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x208aadb0 __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x20a789ac irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x20af0956 dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0x20b23865 tty_free_termios +EXPORT_SYMBOL vmlinux 0x20c55ae0 sscanf +EXPORT_SYMBOL vmlinux 0x20c6192f intel_scu_ipc_ioread32 +EXPORT_SYMBOL vmlinux 0x20d51a85 sockfd_lookup +EXPORT_SYMBOL vmlinux 0x20e0d9d3 save_mount_options +EXPORT_SYMBOL vmlinux 0x2101f1e3 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0x210562b9 input_allocate_device +EXPORT_SYMBOL vmlinux 0x21059dea serio_close +EXPORT_SYMBOL vmlinux 0x2108bdda find_get_pages_tag +EXPORT_SYMBOL vmlinux 0x21315700 param_get_bool +EXPORT_SYMBOL vmlinux 0x2131ae0a remove_arg_zero +EXPORT_SYMBOL vmlinux 0x2134d028 tty_check_change +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x21753513 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0x217dda13 flex_array_get +EXPORT_SYMBOL vmlinux 0x2180cbd6 file_ns_capable +EXPORT_SYMBOL vmlinux 0x2188a092 phy_drivers_register +EXPORT_SYMBOL vmlinux 0x218b2db7 kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x21937a12 bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x2199337a down_timeout +EXPORT_SYMBOL vmlinux 0x21d68f04 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x21f9038a x86_hyper_ms_hyperv +EXPORT_SYMBOL vmlinux 0x21fb443e _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x220a8a9c pci_set_ltr +EXPORT_SYMBOL vmlinux 0x222b9092 mdiobus_scan +EXPORT_SYMBOL vmlinux 0x222e7b69 udp_disconnect +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x22324730 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x2276db98 kstrtoint +EXPORT_SYMBOL vmlinux 0x22aff57c serio_open +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22beb4fd generic_file_remap_pages +EXPORT_SYMBOL vmlinux 0x22e019f7 kmap +EXPORT_SYMBOL vmlinux 0x22e42d84 dev_mc_sync +EXPORT_SYMBOL vmlinux 0x22ee5976 brioctl_set +EXPORT_SYMBOL vmlinux 0x231d4001 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x23293cc5 set_binfmt +EXPORT_SYMBOL vmlinux 0x233a4aa3 mount_subtree +EXPORT_SYMBOL vmlinux 0x23510fba __dev_get_by_index +EXPORT_SYMBOL vmlinux 0x23532c4d ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x23666b61 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x2369cdec blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0x2384797d __dquot_free_space +EXPORT_SYMBOL vmlinux 0x23958b5f keyring_clear +EXPORT_SYMBOL vmlinux 0x23a4eca8 bdi_destroy +EXPORT_SYMBOL vmlinux 0x23a574fd security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x23aa23e9 remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0x23b69329 mmc_release_host +EXPORT_SYMBOL vmlinux 0x23b9d6e2 mangle_path +EXPORT_SYMBOL vmlinux 0x23bcaf00 inode_dio_done +EXPORT_SYMBOL vmlinux 0x23becce2 security_path_truncate +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23e4328b notify_change +EXPORT_SYMBOL vmlinux 0x23f399c1 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x23f5d3e1 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x23fd328a redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x24212d86 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x2431d4ca __get_page_tail +EXPORT_SYMBOL vmlinux 0x243730dc seq_release_private +EXPORT_SYMBOL vmlinux 0x243bc02e pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x24467dc1 bdgrab +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x2468abe8 blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x2475dee8 dev_set_group +EXPORT_SYMBOL vmlinux 0x2482e688 vsprintf +EXPORT_SYMBOL vmlinux 0x24b275a5 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x24e1fb80 dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x24f169fc down_read_trylock +EXPORT_SYMBOL vmlinux 0x24fa38dc vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250113b4 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x251e9fb2 inode_add_bytes +EXPORT_SYMBOL vmlinux 0x25277497 rfkill_register +EXPORT_SYMBOL vmlinux 0x25318043 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x253bdb78 param_get_int +EXPORT_SYMBOL vmlinux 0x2541e1d5 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0x255ccda2 tty_unregister_device +EXPORT_SYMBOL vmlinux 0x2578c1fd sock_edemux +EXPORT_SYMBOL vmlinux 0x2580771f elv_rb_del +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x25b55667 fget +EXPORT_SYMBOL vmlinux 0x25b5a5ae tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x25c677c4 mac_pton +EXPORT_SYMBOL vmlinux 0x25e931c6 dev_mc_add +EXPORT_SYMBOL vmlinux 0x25f11d5f xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x25fb5c44 acpi_bus_hot_remove_device +EXPORT_SYMBOL vmlinux 0x263beb75 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x2643535a pnp_possible_config +EXPORT_SYMBOL vmlinux 0x2650d835 sysctl_ip_early_demux +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x268cc6a2 sys_close +EXPORT_SYMBOL vmlinux 0x26a3908f elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x26bb950b __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0x26d8341e inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f0453a blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x26f4d335 dev_get_stats +EXPORT_SYMBOL vmlinux 0x26fae6d2 kill_fasync +EXPORT_SYMBOL vmlinux 0x26fbcbb3 __module_get +EXPORT_SYMBOL vmlinux 0x26fe18f1 dqget +EXPORT_SYMBOL vmlinux 0x270456c1 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x27253192 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x2732f360 netdev_info +EXPORT_SYMBOL vmlinux 0x273ae1fd netdev_set_master +EXPORT_SYMBOL vmlinux 0x273ded4d softnet_data +EXPORT_SYMBOL vmlinux 0x273f9c85 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0x274d08dc __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x27810361 acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x279f4b8e blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0x27a75d0e md_write_end +EXPORT_SYMBOL vmlinux 0x27ae7d0c ec_transaction +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27c2197f param_set_short +EXPORT_SYMBOL vmlinux 0x27e9f682 get_task_io_context +EXPORT_SYMBOL vmlinux 0x280641a8 ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x280cff15 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x281823c5 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x2835e3e3 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0x2844b708 scsi_execute +EXPORT_SYMBOL vmlinux 0x284bd456 inet_sendpage +EXPORT_SYMBOL vmlinux 0x2870fd4f textsearch_register +EXPORT_SYMBOL vmlinux 0x2871a1d0 sock_rfree +EXPORT_SYMBOL vmlinux 0x2873440e dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x287e986f put_disk +EXPORT_SYMBOL vmlinux 0x28a05c16 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28b715a6 isapnp_cfg_end +EXPORT_SYMBOL vmlinux 0x28c8648b pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x28d25f35 dquot_transfer +EXPORT_SYMBOL vmlinux 0x28dd4750 ida_simple_get +EXPORT_SYMBOL vmlinux 0x290cca85 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x29202f84 simple_getattr +EXPORT_SYMBOL vmlinux 0x2931d961 journal_create +EXPORT_SYMBOL vmlinux 0x29523b8d ip_check_defrag +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x29579865 fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x295db419 x86_hyper +EXPORT_SYMBOL vmlinux 0x29a1cef3 fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0x29a6b41c mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x29c51b9c sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x29fdda53 kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0x2a0d8241 inet_bind +EXPORT_SYMBOL vmlinux 0x2a19c155 revert_creds +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a37d074 dma_pool_free +EXPORT_SYMBOL vmlinux 0x2a5d9209 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x2a5def2f intel_scu_ipc_iowrite32 +EXPORT_SYMBOL vmlinux 0x2a86cda5 mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x2a8a4edb kill_litter_super +EXPORT_SYMBOL vmlinux 0x2aa0e4fc strncasecmp +EXPORT_SYMBOL vmlinux 0x2ac82f60 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x2ad04077 remove_proc_entry +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b2ce78b kstrtos8 +EXPORT_SYMBOL vmlinux 0x2b324518 sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x2b46926f dquot_drop +EXPORT_SYMBOL vmlinux 0x2b5069c1 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x2b67db14 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x2b76dc08 tty_register_device +EXPORT_SYMBOL vmlinux 0x2b7e21aa abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x2b83fc16 should_remove_suid +EXPORT_SYMBOL vmlinux 0x2b8ecb5f set_page_dirty +EXPORT_SYMBOL vmlinux 0x2b9da7a4 genl_lock +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb086ed ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bb88082 d_find_alias +EXPORT_SYMBOL vmlinux 0x2bb99cb3 da9052_i2c_fix +EXPORT_SYMBOL vmlinux 0x2bba1859 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x2bc49a06 scsi_put_command +EXPORT_SYMBOL vmlinux 0x2bc95bd4 memset +EXPORT_SYMBOL vmlinux 0x2bf8d577 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x2bfcd7a6 vfs_open +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c14323a kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x2c1511e6 fb_get_mode +EXPORT_SYMBOL vmlinux 0x2c201e94 xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x2c256e1f input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x2c3ed1ae unregister_nls +EXPORT_SYMBOL vmlinux 0x2c4b516d register_cdrom +EXPORT_SYMBOL vmlinux 0x2c5a0415 i2c_use_client +EXPORT_SYMBOL vmlinux 0x2c90492c dev_get_by_index +EXPORT_SYMBOL vmlinux 0x2ca39695 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x2cda8785 kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x2cecac09 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0x2cfb5f57 pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x2d0366dc nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x2d0f4fa9 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x2d140a58 genl_unlock +EXPORT_SYMBOL vmlinux 0x2d290311 noop_qdisc +EXPORT_SYMBOL vmlinux 0x2d37342e cpu_online_mask +EXPORT_SYMBOL vmlinux 0x2d6678ff iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x2d8063a3 __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2dc07a96 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2deda4a1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2df1d870 find_or_create_page +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e2f3812 journal_update_format +EXPORT_SYMBOL vmlinux 0x2e3a0e39 sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x2e60bace memcpy +EXPORT_SYMBOL vmlinux 0x2e91ca21 arp_create +EXPORT_SYMBOL vmlinux 0x2ea0db16 iget5_locked +EXPORT_SYMBOL vmlinux 0x2eae8175 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x2ec524ad __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x2eca7f99 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x2eda3c93 security_path_rename +EXPORT_SYMBOL vmlinux 0x2eeceb42 sk_chk_filter +EXPORT_SYMBOL vmlinux 0x2ef63ad6 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x2efcb85c __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x2f03fc4b security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x2f064b55 allocate_resource +EXPORT_SYMBOL vmlinux 0x2f25bdc9 dev_load +EXPORT_SYMBOL vmlinux 0x2f287f0d copy_to_user +EXPORT_SYMBOL vmlinux 0x2f6de80a __blk_end_request +EXPORT_SYMBOL vmlinux 0x2f8f5492 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0x2f9b5b0c elv_rb_find +EXPORT_SYMBOL vmlinux 0x2fa16468 netif_napi_add +EXPORT_SYMBOL vmlinux 0x2fa1685a __frontswap_load +EXPORT_SYMBOL vmlinux 0x2faa86e0 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x2fac78f2 inet_add_protocol +EXPORT_SYMBOL vmlinux 0x2fb1a97b bh_submit_read +EXPORT_SYMBOL vmlinux 0x2fb6de5d add_device_randomness +EXPORT_SYMBOL vmlinux 0x2fe91d76 simple_unlink +EXPORT_SYMBOL vmlinux 0x2ff42639 filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0x3013e398 generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x3016bb16 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0x30226ddf agp_device_command +EXPORT_SYMBOL vmlinux 0x302b865b x86_hyper_vmware +EXPORT_SYMBOL vmlinux 0x303b11c0 register_exec_domain +EXPORT_SYMBOL vmlinux 0x304a1119 __scsi_put_command +EXPORT_SYMBOL vmlinux 0x3053f93a mmc_erase +EXPORT_SYMBOL vmlinux 0x30557bfe dev_mc_flush +EXPORT_SYMBOL vmlinux 0x307b451d jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x307c2fd0 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x307f8e3b skb_queue_purge +EXPORT_SYMBOL vmlinux 0x3093aa08 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x30a80826 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x30cada8f radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x30d79ef7 lock_may_write +EXPORT_SYMBOL vmlinux 0x30db11df pm860x_page_set_bits +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30e9566d uart_add_one_port +EXPORT_SYMBOL vmlinux 0x30eac86b shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x30ec1365 del_gendisk +EXPORT_SYMBOL vmlinux 0x30f9e316 dev_driver_string +EXPORT_SYMBOL vmlinux 0x3102d70b frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x310917fe sort +EXPORT_SYMBOL vmlinux 0x3124bc00 mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x313b7b7f padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x314c1c59 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x31847017 mmc_stop_bkops +EXPORT_SYMBOL vmlinux 0x318cadb1 reciprocal_value +EXPORT_SYMBOL vmlinux 0x318d5cc4 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x3191f109 __krealloc +EXPORT_SYMBOL vmlinux 0x3193328d tcf_exts_validate +EXPORT_SYMBOL vmlinux 0x31a313d6 kernel_sendmsg +EXPORT_SYMBOL vmlinux 0x31e1d8e2 set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0x31e55b6a fget_raw +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x31ea04a3 scsi_register +EXPORT_SYMBOL vmlinux 0x31f0bb78 __kmap_atomic_idx +EXPORT_SYMBOL vmlinux 0x31fa95fb register_quota_format +EXPORT_SYMBOL vmlinux 0x3201aaae clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0x3202435a wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x32046e2d dev_uc_init +EXPORT_SYMBOL vmlinux 0x320d34c9 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x32565988 sync_inode +EXPORT_SYMBOL vmlinux 0x326425ca pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x3284a084 d_make_root +EXPORT_SYMBOL vmlinux 0x32a015f4 skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0x32bb04c8 from_kqid +EXPORT_SYMBOL vmlinux 0x32cea339 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x32eeaded _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x330b3bcd mddev_congested +EXPORT_SYMBOL vmlinux 0x3317cf71 pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0x331ae70f gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0x33250694 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x3328855b nf_log_unregister +EXPORT_SYMBOL vmlinux 0x33391c80 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0x3349b898 sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x33520008 ip_queue_xmit +EXPORT_SYMBOL vmlinux 0x3352f0e7 inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0x33758620 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x337cce46 put_cmsg +EXPORT_SYMBOL vmlinux 0x3382c129 udp_lib_get_port +EXPORT_SYMBOL vmlinux 0x33ac417f acpi_os_hotplug_execute +EXPORT_SYMBOL vmlinux 0x33c08480 journal_start +EXPORT_SYMBOL vmlinux 0x33cd1a7f lro_flush_all +EXPORT_SYMBOL vmlinux 0x33dbfd93 tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0x33e3d17c skb_tx_error +EXPORT_SYMBOL vmlinux 0x33f0768c cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x34184afe current_kernel_time +EXPORT_SYMBOL vmlinux 0x3427f922 netdev_notice +EXPORT_SYMBOL vmlinux 0x342f60fe apm_info +EXPORT_SYMBOL vmlinux 0x3437d4a9 proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x345a7221 bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x34682b3f blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0x347013de nla_validate +EXPORT_SYMBOL vmlinux 0x34837927 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x348c5545 ps2_command +EXPORT_SYMBOL vmlinux 0x34908c14 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34c351f6 kernel_read +EXPORT_SYMBOL vmlinux 0x34f3484e security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x34fc78e8 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x350bf636 __bio_clone +EXPORT_SYMBOL vmlinux 0x350fa410 key_reject_and_link +EXPORT_SYMBOL vmlinux 0x3527089b security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x35406ea0 __dev_remove_offload +EXPORT_SYMBOL vmlinux 0x354206c4 pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0x35445d53 kset_register +EXPORT_SYMBOL vmlinux 0x359ff065 release_sock +EXPORT_SYMBOL vmlinux 0x35a844dd block_write_full_page +EXPORT_SYMBOL vmlinux 0x35b6b772 param_ops_charp +EXPORT_SYMBOL vmlinux 0x35ca8cfa dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x35f5f140 end_page_writeback +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x360b8d16 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x361a12e2 jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x362ef408 _copy_from_user +EXPORT_SYMBOL vmlinux 0x363ebf54 i8042_install_filter +EXPORT_SYMBOL vmlinux 0x3656e054 tty_lock +EXPORT_SYMBOL vmlinux 0x36722b83 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x367546a2 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x367c5531 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x367ed109 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0x3686ea09 spi_print_msg +EXPORT_SYMBOL vmlinux 0x36875497 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x36aad357 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x36c6af51 intel_scu_ipc_iowrite8 +EXPORT_SYMBOL vmlinux 0x36e360e3 __hw_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x36ea8aa3 pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x36f9cd94 rcu_is_cpu_idle +EXPORT_SYMBOL vmlinux 0x37072416 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0x37107dbc page_put_link +EXPORT_SYMBOL vmlinux 0x37145f24 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x374dbb72 netif_device_detach +EXPORT_SYMBOL vmlinux 0x374fe40c cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x3753e8b9 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x37a89995 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x37adcb0d con_copy_unimap +EXPORT_SYMBOL vmlinux 0x37b777df param_set_copystring +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37e74642 get_jiffies_64 +EXPORT_SYMBOL vmlinux 0x37f614b7 __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x37ff4c06 copy_from_user_overflow +EXPORT_SYMBOL vmlinux 0x381144a9 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0x381a798a setup_max_cpus +EXPORT_SYMBOL vmlinux 0x381ccc13 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x3834a1c0 sock_create +EXPORT_SYMBOL vmlinux 0x38401084 ip_mc_rejoin_groups +EXPORT_SYMBOL vmlinux 0x384c1616 __blk_run_queue +EXPORT_SYMBOL vmlinux 0x385748d5 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x387cccbe __mutex_init +EXPORT_SYMBOL vmlinux 0x38869d88 kstat +EXPORT_SYMBOL vmlinux 0x388799f6 unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x38897ca7 inet6_release +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x389d0b52 bdi_init +EXPORT_SYMBOL vmlinux 0x38a2d8fe scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x38a71b7e pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x38b3f033 lock_may_read +EXPORT_SYMBOL vmlinux 0x38b987ad generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x38c1d19d invalidate_partition +EXPORT_SYMBOL vmlinux 0x38f0ed16 mii_nway_restart +EXPORT_SYMBOL vmlinux 0x39092f66 bdi_unregister +EXPORT_SYMBOL vmlinux 0x3916e70a ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0x3929faf4 get_super +EXPORT_SYMBOL vmlinux 0x3939f8f0 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x394fb626 journal_init_inode +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x3981b14f done_path_create +EXPORT_SYMBOL vmlinux 0x399ae23a ida_get_new_above +EXPORT_SYMBOL vmlinux 0x399ca907 __register_binfmt +EXPORT_SYMBOL vmlinux 0x39a055f3 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x39ac7c2d dquot_release +EXPORT_SYMBOL vmlinux 0x39b5e0cb get_super_thawed +EXPORT_SYMBOL vmlinux 0x39d636e4 cdev_del +EXPORT_SYMBOL vmlinux 0x3a013b7d remove_wait_queue +EXPORT_SYMBOL vmlinux 0x3a08475f platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x3a32839e intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x3a4786ec eth_mac_addr +EXPORT_SYMBOL vmlinux 0x3a632bab buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x3a7193cb d_alloc +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3aba138e filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0x3abf2c98 dev_trans_start +EXPORT_SYMBOL vmlinux 0x3ad95526 vm_insert_page +EXPORT_SYMBOL vmlinux 0x3ae13fee scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x3ae5db55 __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0x3af1d086 qdisc_reset +EXPORT_SYMBOL vmlinux 0x3b16f7e7 dev_addr_del +EXPORT_SYMBOL vmlinux 0x3b201620 machine_real_restart +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b3ccc12 tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x3b492f7e ppp_register_channel +EXPORT_SYMBOL vmlinux 0x3b6942b2 dquot_acquire +EXPORT_SYMBOL vmlinux 0x3b6b1d50 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x3b6b7ffc dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x3b7d8996 cdrom_check_events +EXPORT_SYMBOL vmlinux 0x3b861b83 dentry_open +EXPORT_SYMBOL vmlinux 0x3b8ce0c4 md_done_sync +EXPORT_SYMBOL vmlinux 0x3bacaa5a dma_set_mask +EXPORT_SYMBOL vmlinux 0x3bcbf383 kmem_cache_create +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bdac4b5 rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x3bef03b9 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0x3c1103bd ata_dev_acpi_handle +EXPORT_SYMBOL vmlinux 0x3c1ce2e8 dquot_scan_active +EXPORT_SYMBOL vmlinux 0x3c29e76a agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x3c2caead seq_bitmap_list +EXPORT_SYMBOL vmlinux 0x3c80c06c kstrtoull +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3cae11e8 seq_open_private +EXPORT_SYMBOL vmlinux 0x3cb0dd67 generic_getxattr +EXPORT_SYMBOL vmlinux 0x3cb3931b sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x3cc7d18e sock_wfree +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3cf1a03a padata_set_cpumasks +EXPORT_SYMBOL vmlinux 0x3d051f35 inet_shutdown +EXPORT_SYMBOL vmlinux 0x3d36fd5b gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x3d3dd6dc dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d8e09cf tty_schedule_flip +EXPORT_SYMBOL vmlinux 0x3d8e1cb6 __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x3d985bea pci_choose_state +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3dcb88a0 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x3def5719 blk_end_request +EXPORT_SYMBOL vmlinux 0x3dfc52e1 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x3dfc897c seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x3e150a9c dev_activate +EXPORT_SYMBOL vmlinux 0x3e16a735 proc_symlink +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e6c32d0 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0x3e70dd97 mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x3e882943 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x3e9110fa __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x3ea0fc02 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x3eae292f param_set_byte +EXPORT_SYMBOL vmlinux 0x3eaf291d param_get_string +EXPORT_SYMBOL vmlinux 0x3eb3e1c7 iterate_fd +EXPORT_SYMBOL vmlinux 0x3ebd9449 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x3ec16c3b in_group_p +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef34499 console_start +EXPORT_SYMBOL vmlinux 0x3ef78d80 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x3eff5ac2 intel_scu_ipc_writev +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f1eadfc swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0x3f3f7235 acpi_bus_add +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f58c42c ida_pre_get +EXPORT_SYMBOL vmlinux 0x3f79748c pci_dev_driver +EXPORT_SYMBOL vmlinux 0x3f81363e lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x3f9f868f __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x3fa154e3 install_exec_creds +EXPORT_SYMBOL vmlinux 0x3fa58ef8 wait_for_completion +EXPORT_SYMBOL vmlinux 0x3fa63cc2 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x3fc1d623 write_inode_now +EXPORT_SYMBOL vmlinux 0x3fde1267 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x3fe8a8b5 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x3fffcc26 ps2_handle_response +EXPORT_SYMBOL vmlinux 0x40062afd sg_miter_stop +EXPORT_SYMBOL vmlinux 0x40084554 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0x402734c9 sk_common_release +EXPORT_SYMBOL vmlinux 0x40282565 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x402b8281 __request_module +EXPORT_SYMBOL vmlinux 0x40595860 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0x4059792f print_hex_dump +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x40880501 netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x40973662 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x4098bb38 __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x409c0668 ping_prot +EXPORT_SYMBOL vmlinux 0x40a26a9b eth_header_cache +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40a2d1dd dm_table_get_size +EXPORT_SYMBOL vmlinux 0x40a9b349 vzalloc +EXPORT_SYMBOL vmlinux 0x40bd1f6e eth_header_parse +EXPORT_SYMBOL vmlinux 0x40c01859 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x40c02eb8 set_pages_nx +EXPORT_SYMBOL vmlinux 0x40c7247c si_meminfo +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40d04664 console_trylock +EXPORT_SYMBOL vmlinux 0x40e88e16 nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x40f82568 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0x41067973 vfs_llseek +EXPORT_SYMBOL vmlinux 0x411b7b83 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0x411f1968 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x4128e6e4 vga_client_register +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x414c835a ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x41570b63 km_state_notify +EXPORT_SYMBOL vmlinux 0x4166ee20 vm_map_ram +EXPORT_SYMBOL vmlinux 0x41756eb8 write_one_page +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x4199384f dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0x419afa96 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0x41c50a97 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x41cea285 ps2_handle_ack +EXPORT_SYMBOL vmlinux 0x41d0f3dd mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x41dd4226 km_query +EXPORT_SYMBOL vmlinux 0x41ef2710 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x41f7d177 __neigh_create +EXPORT_SYMBOL vmlinux 0x41fb0653 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x41ffcdce xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x4207bf1c blk_sync_queue +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x422b5b1d sk_reset_timer +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x426773e8 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0x428f24f9 posix_acl_create +EXPORT_SYMBOL vmlinux 0x4292364c schedule +EXPORT_SYMBOL vmlinux 0x42977ad4 __hw_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x429fd957 inet6_getname +EXPORT_SYMBOL vmlinux 0x42a1b208 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x42c2b218 dqput +EXPORT_SYMBOL vmlinux 0x42c8de35 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x42cf6b80 xfrm_find_acq +EXPORT_SYMBOL vmlinux 0x42f2e390 scsi_free_command +EXPORT_SYMBOL vmlinux 0x42faeefd ata_print_version +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4307823b pci_release_region +EXPORT_SYMBOL vmlinux 0x4307c746 inet_frag_kill +EXPORT_SYMBOL vmlinux 0x4314bba4 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0x4351577a fb_parse_edid +EXPORT_SYMBOL vmlinux 0x435855e4 simple_write_begin +EXPORT_SYMBOL vmlinux 0x4368f133 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0x436aee4c __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x4380adca key_link +EXPORT_SYMBOL vmlinux 0x438610bd security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x43a0458b blk_start_plug +EXPORT_SYMBOL vmlinux 0x43b55ccd bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0x43ccb808 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x43f23311 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x43ff78f1 kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0x4411c503 prandom_seed +EXPORT_SYMBOL vmlinux 0x442a37c4 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0x44366cfc simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0x44438b96 hex2bin +EXPORT_SYMBOL vmlinux 0x4445a61e tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x4463bbab bio_copy_kern +EXPORT_SYMBOL vmlinux 0x44649f07 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x446d3b08 release_firmware +EXPORT_SYMBOL vmlinux 0x4470a79b param_ops_long +EXPORT_SYMBOL vmlinux 0x447fbe6d phy_attach +EXPORT_SYMBOL vmlinux 0x44a3e3fb fsnotify_alloc_group +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44f1606d down_trylock +EXPORT_SYMBOL vmlinux 0x44fb687b scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x45081703 ec_get_handle +EXPORT_SYMBOL vmlinux 0x4535239e twl6040_set_pll +EXPORT_SYMBOL vmlinux 0x45382552 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x454aca5d __nla_put +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4567607b names_cachep +EXPORT_SYMBOL vmlinux 0x4578661a _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0x4578f528 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x457e6826 tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x4582fc93 mmc_request_done +EXPORT_SYMBOL vmlinux 0x458586e2 tcp_poll +EXPORT_SYMBOL vmlinux 0x45943b83 eth_header +EXPORT_SYMBOL vmlinux 0x4598d543 d_alloc_name +EXPORT_SYMBOL vmlinux 0x45a765cf pci_add_resource +EXPORT_SYMBOL vmlinux 0x45a79637 proc_mkdir +EXPORT_SYMBOL vmlinux 0x45b3528a pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x45bc18b8 bio_pair_release +EXPORT_SYMBOL vmlinux 0x45bd9efd dm_table_put +EXPORT_SYMBOL vmlinux 0x45d216b9 tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x45de5965 loop_register_transfer +EXPORT_SYMBOL vmlinux 0x45fe7ff7 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x4623e357 generic_fillattr +EXPORT_SYMBOL vmlinux 0x46287cbc vfs_rmdir +EXPORT_SYMBOL vmlinux 0x462a0864 inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x462a2e75 match_strlcpy +EXPORT_SYMBOL vmlinux 0x462f7108 gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x4640b5f3 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x464dc3eb pci_find_capability +EXPORT_SYMBOL vmlinux 0x4658f7b6 bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x465cab34 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x46608fa0 getnstimeofday +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x46a0b838 iunique +EXPORT_SYMBOL vmlinux 0x46b80e00 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x46df7808 devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x46eff6ea journal_clear_err +EXPORT_SYMBOL vmlinux 0x46feb099 dm_read_arg +EXPORT_SYMBOL vmlinux 0x47102a29 devm_gpio_request +EXPORT_SYMBOL vmlinux 0x4733aa23 dquot_commit +EXPORT_SYMBOL vmlinux 0x473cd4bd unregister_quota_format +EXPORT_SYMBOL vmlinux 0x47416e14 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x4747306d kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x477bc636 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x4792c572 down_interruptible +EXPORT_SYMBOL vmlinux 0x47939e0d __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x47973e0d blk_end_request_all +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a70c45 netpoll_setup +EXPORT_SYMBOL vmlinux 0x47b3e554 genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x47b3f862 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x47b546a0 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x47b6a10f ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x47d6b393 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x48179e97 xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x4824f5e9 dev_open +EXPORT_SYMBOL vmlinux 0x4839e610 tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x4845c423 param_array_ops +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486d2f29 dqstats +EXPORT_SYMBOL vmlinux 0x48731baa journal_get_create_access +EXPORT_SYMBOL vmlinux 0x487d9343 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x487e2473 __sb_end_write +EXPORT_SYMBOL vmlinux 0x488796ea pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x48d74618 journal_start_commit +EXPORT_SYMBOL vmlinux 0x49045426 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x490997f0 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0x4926b83d call_usermodehelper_fns +EXPORT_SYMBOL vmlinux 0x49305926 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x493e432b fd_install +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x497b81ca kern_path_create +EXPORT_SYMBOL vmlinux 0x499b5f29 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x49b07aec tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x49c41a10 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x49d3de60 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x49f5febd tcp_sync_mss +EXPORT_SYMBOL vmlinux 0x49fcd386 dquot_resume +EXPORT_SYMBOL vmlinux 0x49fd5dde mmc_gpio_free_ro +EXPORT_SYMBOL vmlinux 0x4a068246 set_user_nice +EXPORT_SYMBOL vmlinux 0x4a07f901 inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0x4a171e6f agp_copy_info +EXPORT_SYMBOL vmlinux 0x4a1bce2c skb_gso_segment +EXPORT_SYMBOL vmlinux 0x4a290270 bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a74fd8b genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x4a82a5b1 scsi_init_io +EXPORT_SYMBOL vmlinux 0x4a87158c i2c_clients_command +EXPORT_SYMBOL vmlinux 0x4a88d15e scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x4a91157b phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x4aa9dbe7 ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x4aba9fc6 jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0x4abbe3c2 vm_brk +EXPORT_SYMBOL vmlinux 0x4abd48f4 __put_cred +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4acdaeb6 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x4ad4f5b1 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x4ae25a8d lookup_one_len +EXPORT_SYMBOL vmlinux 0x4ae52971 input_register_handle +EXPORT_SYMBOL vmlinux 0x4ae86303 bio_init +EXPORT_SYMBOL vmlinux 0x4aea9890 pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x4b1ec3e2 kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x4b34fbf5 block_all_signals +EXPORT_SYMBOL vmlinux 0x4b415542 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x4b5fd49e dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x4b60fc4e xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x4b789736 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x4b992eee generic_file_splice_read +EXPORT_SYMBOL vmlinux 0x4ba04c27 __ip_select_ident +EXPORT_SYMBOL vmlinux 0x4bc4d5a5 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0x4be85a03 memweight +EXPORT_SYMBOL vmlinux 0x4bec62cc security_path_symlink +EXPORT_SYMBOL vmlinux 0x4becec22 acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x4bf28e7c xfrm_register_km +EXPORT_SYMBOL vmlinux 0x4bf7b27d inode_sb_list_lock +EXPORT_SYMBOL vmlinux 0x4bfcb3d2 devm_free_irq +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c2ae700 strnstr +EXPORT_SYMBOL vmlinux 0x4c49a3f5 page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0x4c579a79 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0x4c81904c set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x4c9ab164 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cc995c5 vfs_write +EXPORT_SYMBOL vmlinux 0x4ccdeaae set_bh_page +EXPORT_SYMBOL vmlinux 0x4cdb3178 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x4ce3ae76 frontswap_enabled +EXPORT_SYMBOL vmlinux 0x4ce529bf qdisc_list_del +EXPORT_SYMBOL vmlinux 0x4cfe4f08 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x4d25c515 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0x4d2e3c3c bdi_setup_and_register +EXPORT_SYMBOL vmlinux 0x4d3c153f sigprocmask +EXPORT_SYMBOL vmlinux 0x4d405db8 param_ops_string +EXPORT_SYMBOL vmlinux 0x4d438c9a vm_event_states +EXPORT_SYMBOL vmlinux 0x4d45d89e udp_memory_allocated +EXPORT_SYMBOL vmlinux 0x4d4eac49 twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x4d521ac0 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0x4d539528 inet_release +EXPORT_SYMBOL vmlinux 0x4d613d58 input_event +EXPORT_SYMBOL vmlinux 0x4d84892d xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x4d885e9f udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x4d974b9c register_sysrq_key +EXPORT_SYMBOL vmlinux 0x4d9b652b rb_erase +EXPORT_SYMBOL vmlinux 0x4da8ece7 bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dce3e2f request_key_async +EXPORT_SYMBOL vmlinux 0x4de34a07 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e05066d wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x4e21999c acpi_get_child +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e64cbe5 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x4e655793 sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e7cbecb neigh_for_each +EXPORT_SYMBOL vmlinux 0x4e830a3e strnicmp +EXPORT_SYMBOL vmlinux 0x4e8c2e59 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0x4e8f717d abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0x4ea25709 dql_reset +EXPORT_SYMBOL vmlinux 0x4eb11f1f seq_bitmap +EXPORT_SYMBOL vmlinux 0x4ec04b85 i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x4ecd67c1 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x4eddc085 xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x4eebd30b scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x4efe8d29 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x4f076e6e kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x4f0ad0a2 unlock_page +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f1ce671 md_integrity_register +EXPORT_SYMBOL vmlinux 0x4f339ddc vfs_create +EXPORT_SYMBOL vmlinux 0x4f391d0e nla_parse +EXPORT_SYMBOL vmlinux 0x4f3d3771 phy_start +EXPORT_SYMBOL vmlinux 0x4f450bac tcp_release_cb +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f4f4d23 nobh_writepage +EXPORT_SYMBOL vmlinux 0x4f61ba93 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x4f68e5c9 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x4f72fad8 noop_fsync +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f94e684 atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x4f9b2ded commit_creds +EXPORT_SYMBOL vmlinux 0x4f9b8973 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x4fb76076 generic_read_dir +EXPORT_SYMBOL vmlinux 0x4fbca384 __lock_buffer +EXPORT_SYMBOL vmlinux 0x4fc8bc4f dm_unregister_target +EXPORT_SYMBOL vmlinux 0x4fcef794 agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x50097088 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x500df4d9 ata_link_printk +EXPORT_SYMBOL vmlinux 0x5020096b directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x5045a080 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x50529870 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x50599f34 scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0x50768449 kern_path +EXPORT_SYMBOL vmlinux 0x5088e22d poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x508944c4 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x50ba65d2 generic_readlink +EXPORT_SYMBOL vmlinux 0x50c91319 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x50cb7033 sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x50eedeb8 printk +EXPORT_SYMBOL vmlinux 0x51124c64 flush_signals +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x5143c678 param_get_invbool +EXPORT_SYMBOL vmlinux 0x514521bb input_open_device +EXPORT_SYMBOL vmlinux 0x514b70f8 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x514daf43 open_exec +EXPORT_SYMBOL vmlinux 0x5152e605 memcmp +EXPORT_SYMBOL vmlinux 0x5161924d simple_empty +EXPORT_SYMBOL vmlinux 0x517f79f9 d_drop +EXPORT_SYMBOL vmlinux 0x5186518f profile_pc +EXPORT_SYMBOL vmlinux 0x5198ded1 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0x51b6982c xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x51bb3af9 vfs_mknod +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51d816e4 seq_write +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51ef33b8 kstrndup +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x5206459c proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x5206d70c get_thermal_instance +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x521b4fd0 __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x52312ef0 setup_arg_pages +EXPORT_SYMBOL vmlinux 0x52428cc8 parent_mem_cgroup +EXPORT_SYMBOL vmlinux 0x525e026f acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x525fbc5d wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x526150a7 read_cache_page +EXPORT_SYMBOL vmlinux 0x5264682c tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x527b11e4 quota_send_warning +EXPORT_SYMBOL vmlinux 0x528688a4 inet_listen +EXPORT_SYMBOL vmlinux 0x528c709d simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x52d42c95 set_current_groups +EXPORT_SYMBOL vmlinux 0x52e77265 free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x52f3406b neigh_update +EXPORT_SYMBOL vmlinux 0x52f6aaf9 thaw_bdev +EXPORT_SYMBOL vmlinux 0x530b1e4c rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x531626cd sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x5339debb dev_remove_offload +EXPORT_SYMBOL vmlinux 0x5342feeb twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x535bc7cb have_submounts +EXPORT_SYMBOL vmlinux 0x53685810 vm_iomap_memory +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x5383f34b _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0x5385175b tcp_init_sock +EXPORT_SYMBOL vmlinux 0x53b77dda posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x53c44f19 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x53e98b68 pcibios_set_irq_routing +EXPORT_SYMBOL vmlinux 0x53f2ef10 wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x53faa124 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x5409775b free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x54152e04 percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x5424b88a xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x54364354 update_region +EXPORT_SYMBOL vmlinux 0x54389849 lock_fb_info +EXPORT_SYMBOL vmlinux 0x543ef284 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x5444c926 phy_print_status +EXPORT_SYMBOL vmlinux 0x545fd132 dev_change_flags +EXPORT_SYMBOL vmlinux 0x5469e859 jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x548c5c9b pci_fixup_device +EXPORT_SYMBOL vmlinux 0x548c9816 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x54935666 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0x54a9c496 dcache_readdir +EXPORT_SYMBOL vmlinux 0x54a9db5f _kstrtoul +EXPORT_SYMBOL vmlinux 0x54bffc30 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x54c6a317 mmc_remove_host +EXPORT_SYMBOL vmlinux 0x54e42dca ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54efb5d6 cpu_number +EXPORT_SYMBOL vmlinux 0x5500b2e7 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x551bd071 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x553aa7a5 __scm_destroy +EXPORT_SYMBOL vmlinux 0x5541ea93 on_each_cpu +EXPORT_SYMBOL vmlinux 0x5567c227 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x556c18db pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x557e7033 vga_tryget +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55b41aac framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x55b93396 elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0x55c406e7 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x55f54dfe dma_pool_create +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x561ab201 dentry_path_raw +EXPORT_SYMBOL vmlinux 0x56358fe6 tty_port_init +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x5636cfce xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x5642793a radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x56491a59 serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x5676a3e5 intel_scu_ipc_ioread8 +EXPORT_SYMBOL vmlinux 0x56827d12 sock_no_bind +EXPORT_SYMBOL vmlinux 0x569ce837 __sb_start_write +EXPORT_SYMBOL vmlinux 0x569e1664 swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0x56bfb517 scsi_scan_target +EXPORT_SYMBOL vmlinux 0x56c03d2d blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56cebc2a d_rehash +EXPORT_SYMBOL vmlinux 0x56f2590b mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x56ffa85f ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0x5705088a __vmalloc +EXPORT_SYMBOL vmlinux 0x57057c63 __ps2_command +EXPORT_SYMBOL vmlinux 0x5722305a dst_release +EXPORT_SYMBOL vmlinux 0x57235674 register_filesystem +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x5736a8f1 lock_rename +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x575af70c on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x57674fd7 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x577506d9 neigh_table_init +EXPORT_SYMBOL vmlinux 0x5775592c pci_dev_get +EXPORT_SYMBOL vmlinux 0x578a26f4 notify_thermal_framework +EXPORT_SYMBOL vmlinux 0x579fbcd2 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0x57ad842d __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x57d1dc43 tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0x58046baa __ht_create_irq +EXPORT_SYMBOL vmlinux 0x5836f533 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x58442ab3 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x586103be acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x58656d58 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x5892d54c acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x58a1cc2f swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x58c9a77e tty_register_driver +EXPORT_SYMBOL vmlinux 0x58ce9c18 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x58e7648a inet_sendmsg +EXPORT_SYMBOL vmlinux 0x58ea9717 misc_deregister +EXPORT_SYMBOL vmlinux 0x58fef6f8 ist_info +EXPORT_SYMBOL vmlinux 0x59177771 try_module_get +EXPORT_SYMBOL vmlinux 0x592b59af acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x592ca405 net_dma_find_channel +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x5945ee48 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x59678b4c xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0x5976f210 scsi_add_device +EXPORT_SYMBOL vmlinux 0x5979eee2 free_task +EXPORT_SYMBOL vmlinux 0x597fb23c pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x5990c236 free_buffer_head +EXPORT_SYMBOL vmlinux 0x59ad7895 uart_update_timeout +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59c55472 blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59ddd5b6 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x59e70f93 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0x59ef535f agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x5a2aa62e __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x5a4607bd pci_get_device +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a4a1959 blk_make_request +EXPORT_SYMBOL vmlinux 0x5a670a13 security_inode_permission +EXPORT_SYMBOL vmlinux 0x5a80be10 ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0x5abd67bb alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5aebbdfd follow_down +EXPORT_SYMBOL vmlinux 0x5af5f120 pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x5afc4b93 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0x5b11bf2e tty_unthrottle +EXPORT_SYMBOL vmlinux 0x5b19634d div_s64_rem +EXPORT_SYMBOL vmlinux 0x5b271d86 acpi_video_dmi_promote_vendor +EXPORT_SYMBOL vmlinux 0x5b33e3f7 tty_port_put +EXPORT_SYMBOL vmlinux 0x5b52b6b0 spi_dv_device +EXPORT_SYMBOL vmlinux 0x5b5af9f5 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x5b621193 fsnotify_put_mark +EXPORT_SYMBOL vmlinux 0x5b62536f unregister_key_type +EXPORT_SYMBOL vmlinux 0x5b66a5fb dev_notice +EXPORT_SYMBOL vmlinux 0x5b7cee43 sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0x5b8d6063 user_revoke +EXPORT_SYMBOL vmlinux 0x5ba53020 vfs_fstat +EXPORT_SYMBOL vmlinux 0x5baac65e phy_get_eee_err +EXPORT_SYMBOL vmlinux 0x5bbaed32 nf_setsockopt +EXPORT_SYMBOL vmlinux 0x5bbf465e neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x5bdfcacd ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x5be5af52 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x5c3edd59 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x5c4c2cd8 generic_pipe_buf_unmap +EXPORT_SYMBOL vmlinux 0x5c76d696 vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0x5c849899 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0x5cd59829 __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0x5ceec96e tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x5cf53ce2 input_free_minor +EXPORT_SYMBOL vmlinux 0x5d035cc2 simple_rmdir +EXPORT_SYMBOL vmlinux 0x5d0b1892 param_set_invbool +EXPORT_SYMBOL vmlinux 0x5d251500 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0x5d5b5a16 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x5d5c5353 blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0x5d72be7c unlock_rename +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5d920bc6 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0x5d9fed4c rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x5dce6b75 complete_and_exit +EXPORT_SYMBOL vmlinux 0x5de836a2 skb_store_bits +EXPORT_SYMBOL vmlinux 0x5df4525b pcie_get_readrq +EXPORT_SYMBOL vmlinux 0x5dfa32d4 blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x5e0a9f7a __devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x5e0cfcd9 mmc_start_req +EXPORT_SYMBOL vmlinux 0x5e135e63 ip6_frag_init +EXPORT_SYMBOL vmlinux 0x5e43f23e pci_disable_ido +EXPORT_SYMBOL vmlinux 0x5e66f3b2 dump_seek +EXPORT_SYMBOL vmlinux 0x5e6947f7 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x5e792d4f rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x5e8c8f20 alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5eaaea97 udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x5eb24829 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x5ec6a7e7 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x5ecd0539 kmap_atomic_prot +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ef45dc0 kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x5f005368 kstrtou8 +EXPORT_SYMBOL vmlinux 0x5f080e97 pnp_start_dev +EXPORT_SYMBOL vmlinux 0x5f1a4ccf intel_scu_ipc_update_register +EXPORT_SYMBOL vmlinux 0x5f27544a mempool_destroy +EXPORT_SYMBOL vmlinux 0x5f28f533 kernel_bind +EXPORT_SYMBOL vmlinux 0x5f3c8f5c mmc_assume_removable +EXPORT_SYMBOL vmlinux 0x5f485346 scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x5f58f676 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x5f691fbc skb_queue_head +EXPORT_SYMBOL vmlinux 0x5f747f2a bio_phys_segments +EXPORT_SYMBOL vmlinux 0x5f875eb5 blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0x5fa1de21 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x5fd2073e journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x5fe0f52a __find_get_block +EXPORT_SYMBOL vmlinux 0x5fe41fb6 percpu_counter_set +EXPORT_SYMBOL vmlinux 0x5fed1bb6 tc_classify +EXPORT_SYMBOL vmlinux 0x5fefb4dd uart_register_driver +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x601ba7c9 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x601f665f dm_io_client_create +EXPORT_SYMBOL vmlinux 0x60289a1d scsi_finish_command +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x603e14ad tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0x6066c468 generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x606d0b09 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60a98da3 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x60af82a4 simple_pin_fs +EXPORT_SYMBOL vmlinux 0x60b2e38a rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x60bfc81e simple_fill_super +EXPORT_SYMBOL vmlinux 0x60e5f9c5 scsi_remove_device +EXPORT_SYMBOL vmlinux 0x60eb3798 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0x60fc4cf3 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0x61083de2 d_delete +EXPORT_SYMBOL vmlinux 0x610a93a5 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0x610b4c97 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x611e6d3e sock_sendmsg +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x6127ec6d agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x6128b5fc __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x612ec61e dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x6135eb4d journal_lock_updates +EXPORT_SYMBOL vmlinux 0x614383c0 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x61528b43 kobject_get +EXPORT_SYMBOL vmlinux 0x615492f1 alloc_disk_node +EXPORT_SYMBOL vmlinux 0x6167b55d md_error +EXPORT_SYMBOL vmlinux 0x617643a2 param_set_long +EXPORT_SYMBOL vmlinux 0x618263ae writeback_inodes_sb_nr_if_idle +EXPORT_SYMBOL vmlinux 0x618f2250 set_security_override +EXPORT_SYMBOL vmlinux 0x61993705 scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0x619b187b add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0x61aaa9f7 release_pages +EXPORT_SYMBOL vmlinux 0x61b08f95 iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x61b5ade0 down_write +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61c7850e i2c_release_client +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x621d77a0 sleep_on +EXPORT_SYMBOL vmlinux 0x621f6984 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x6225637e md5_transform +EXPORT_SYMBOL vmlinux 0x6226b9fa machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x6228c21f smp_call_function_single +EXPORT_SYMBOL vmlinux 0x622fa02a prepare_to_wait +EXPORT_SYMBOL vmlinux 0x622fb4bf mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x623e50b6 agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x6241a2ab __copy_from_user_ll_nocache +EXPORT_SYMBOL vmlinux 0x624d3add vfs_unlink +EXPORT_SYMBOL vmlinux 0x624eba38 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x62568c82 input_inject_event +EXPORT_SYMBOL vmlinux 0x6260a7ac do_splice_direct +EXPORT_SYMBOL vmlinux 0x6260e54b security_path_mknod +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62849ac7 dev_valid_name +EXPORT_SYMBOL vmlinux 0x62976795 agp_free_memory +EXPORT_SYMBOL vmlinux 0x62b2d008 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0x62cb4cee interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0x62dd5d92 new_inode +EXPORT_SYMBOL vmlinux 0x62df17b5 tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0x62e376c2 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x62eb4c65 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x62f54eb5 mii_ethtool_sset +EXPORT_SYMBOL vmlinux 0x62fbc1d4 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x62fd6207 param_set_charp +EXPORT_SYMBOL vmlinux 0x62fea150 udp_poll +EXPORT_SYMBOL vmlinux 0x6308cad9 security_task_getsecid +EXPORT_SYMBOL vmlinux 0x63105fc3 lro_receive_frags +EXPORT_SYMBOL vmlinux 0x63187451 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x6332cc1a audit_log_start +EXPORT_SYMBOL vmlinux 0x6339535a cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x635148f4 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0x635bf840 swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x636c6e93 force_sig +EXPORT_SYMBOL vmlinux 0x63922bbd vfs_stat +EXPORT_SYMBOL vmlinux 0x63a01291 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x63cb2ad0 __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x63db4962 max8998_read_reg +EXPORT_SYMBOL vmlinux 0x63eb9355 panic_blink +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63f710f4 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x63fc232f strlen_user +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x6423d02c md_finish_reshape +EXPORT_SYMBOL vmlinux 0x6462a01e jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0x6468aa14 ip6_route_output +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x6490267e ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0x6494bb98 netif_skb_features +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x6499d9a3 __sock_create +EXPORT_SYMBOL vmlinux 0x64a1b89f bdget +EXPORT_SYMBOL vmlinux 0x64a4b84d cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x64a996ac deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x64d1d415 mnt_pin +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x64f5c2c7 fsnotify_destroy_mark +EXPORT_SYMBOL vmlinux 0x6505348e journal_stop +EXPORT_SYMBOL vmlinux 0x650a6767 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x65125138 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x6513a3fa fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x651b517b generic_make_request +EXPORT_SYMBOL vmlinux 0x6538c7c2 pci_match_id +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x65427bd4 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x6556e263 security_file_permission +EXPORT_SYMBOL vmlinux 0x655f1ab0 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x6565d33f scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x657879ce __init_rwsem +EXPORT_SYMBOL vmlinux 0x6585e310 alloc_pages_exact_nid +EXPORT_SYMBOL vmlinux 0x65a295bb atomic64_xchg_cx8 +EXPORT_SYMBOL vmlinux 0x65c1ba6c phy_connect +EXPORT_SYMBOL vmlinux 0x65cb2819 bio_map_kern +EXPORT_SYMBOL vmlinux 0x65d2589a udp_sendmsg +EXPORT_SYMBOL vmlinux 0x65d4675a pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0x65d7b71a ata_port_printk +EXPORT_SYMBOL vmlinux 0x65dccf13 xz_dec_end +EXPORT_SYMBOL vmlinux 0x65f3ad9a fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x6605f97f flex_array_clear +EXPORT_SYMBOL vmlinux 0x66355efc vprintk +EXPORT_SYMBOL vmlinux 0x663b7867 journal_release_buffer +EXPORT_SYMBOL vmlinux 0x664a00e2 mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x6673ca30 mmc_read_bkops_status +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66a67dab flex_array_shrink +EXPORT_SYMBOL vmlinux 0x66c8b825 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x67269fe6 dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x673f815e agp_bridges +EXPORT_SYMBOL vmlinux 0x673fcfdd sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x67450ee5 sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x677b6d9c dev_mc_del +EXPORT_SYMBOL vmlinux 0x67800676 __breadahead +EXPORT_SYMBOL vmlinux 0x6786b310 pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0x679bb247 netdev_err +EXPORT_SYMBOL vmlinux 0x67a93b55 unregister_con_driver +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67b37fc9 mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x67b78eb3 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x67d20f7e generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x67dcffb7 lg_lock_init +EXPORT_SYMBOL vmlinux 0x67f481e4 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0x67f7403e _raw_spin_lock +EXPORT_SYMBOL vmlinux 0x680abf36 __lock_page +EXPORT_SYMBOL vmlinux 0x68133ce4 pci_iomap +EXPORT_SYMBOL vmlinux 0x682fb702 __pagevec_release +EXPORT_SYMBOL vmlinux 0x683a8317 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x68459e41 udp_prot +EXPORT_SYMBOL vmlinux 0x685acc2b cdev_init +EXPORT_SYMBOL vmlinux 0x687b6a16 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x687fdacc jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x68882be4 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0x689c2364 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x68bc0421 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0x68dfc59f __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0x68e05d57 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x690f4b6d padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x691dcf99 jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0x692353c0 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x69442943 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x6965c276 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x6988d0ca cpu_dr7 +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69a6df9b end_buffer_async_write +EXPORT_SYMBOL vmlinux 0x69ad2f20 kstrtouint +EXPORT_SYMBOL vmlinux 0x69b1beac generic_file_fsync +EXPORT_SYMBOL vmlinux 0x69cdc3ab i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69d5985b elevator_init +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69e36e40 fs_bio_set +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a1882e5 pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0x6a27bfce csum_partial_copy_generic +EXPORT_SYMBOL vmlinux 0x6a2c2d3d cpufreq_cooling_unregister +EXPORT_SYMBOL vmlinux 0x6a3a1a60 sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x6a3e0f71 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x6a40f245 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x6a417ef4 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0x6a48e16b percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x6a4c1d1f intel_gtt_get +EXPORT_SYMBOL vmlinux 0x6a68efb3 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a77b2d9 dmam_free_coherent +EXPORT_SYMBOL vmlinux 0x6ab0e7eb alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x6abae402 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6ad34ca2 netdev_crit +EXPORT_SYMBOL vmlinux 0x6ad760dc genlmsg_put +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6af95e8f inode_set_bytes +EXPORT_SYMBOL vmlinux 0x6afdff9b journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x6b06fdce delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x6b07b14a inet_addr_type +EXPORT_SYMBOL vmlinux 0x6b084592 tcf_hash_search +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b2db8ae vfs_lstat +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b59bea6 skb_copy +EXPORT_SYMBOL vmlinux 0x6b719d8e __alloc_skb +EXPORT_SYMBOL vmlinux 0x6b7589f4 param_set_bool +EXPORT_SYMBOL vmlinux 0x6b953103 generic_write_end +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bc48c81 md_flush_request +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6be7290e mmc_detect_change +EXPORT_SYMBOL vmlinux 0x6bf88123 writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x6c0dcec4 d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x6c1ce5ce strcspn +EXPORT_SYMBOL vmlinux 0x6c2e3320 strncmp +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c55dc37 noop_llseek +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c6a222a tty_write_room +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c7e3c80 inode_needs_sync +EXPORT_SYMBOL vmlinux 0x6c823486 xfrm_input_resume +EXPORT_SYMBOL vmlinux 0x6c8c4d8f inetdev_by_index +EXPORT_SYMBOL vmlinux 0x6ca35687 dma_mmap_from_coherent +EXPORT_SYMBOL vmlinux 0x6caa6178 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x6caf3de5 input_set_capability +EXPORT_SYMBOL vmlinux 0x6cafc68e inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x6cdc5c6b nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6ce166bf file_open_root +EXPORT_SYMBOL vmlinux 0x6ce2aad4 journal_load +EXPORT_SYMBOL vmlinux 0x6ce3587f mdiobus_write +EXPORT_SYMBOL vmlinux 0x6d01b44e drop_super +EXPORT_SYMBOL vmlinux 0x6d044c26 param_ops_uint +EXPORT_SYMBOL vmlinux 0x6d05b35e generic_block_bmap +EXPORT_SYMBOL vmlinux 0x6d09319c eth_type_trans +EXPORT_SYMBOL vmlinux 0x6d0b5b83 inet_register_protosw +EXPORT_SYMBOL vmlinux 0x6d0f1f89 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d34ba86 tty_mutex +EXPORT_SYMBOL vmlinux 0x6d48deb4 pnp_is_active +EXPORT_SYMBOL vmlinux 0x6d5bfec4 x86_hyper_xen_hvm +EXPORT_SYMBOL vmlinux 0x6d5edd0e xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x6d6a7a16 dm_put_device +EXPORT_SYMBOL vmlinux 0x6d7c4b15 pci_set_master +EXPORT_SYMBOL vmlinux 0x6d8b77de neigh_seq_start +EXPORT_SYMBOL vmlinux 0x6db07877 isapnp_protocol +EXPORT_SYMBOL vmlinux 0x6ddb4f7f soft_cursor +EXPORT_SYMBOL vmlinux 0x6dddf0b1 max8998_bulk_read +EXPORT_SYMBOL vmlinux 0x6dea5aae unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6e16cb58 wake_up_process +EXPORT_SYMBOL vmlinux 0x6e18babe dev_remove_pack +EXPORT_SYMBOL vmlinux 0x6e197ab0 pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x6e224cef filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0x6e51ac2e _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0x6e54e489 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0x6e559520 cad_pid +EXPORT_SYMBOL vmlinux 0x6e5be8c0 address_space_init_once +EXPORT_SYMBOL vmlinux 0x6e65f2dc rtc_lock +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e732853 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x6e8304fe jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eb0e183 mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0x6ee29fd0 blk_free_tags +EXPORT_SYMBOL vmlinux 0x6ef13922 inet_del_protocol +EXPORT_SYMBOL vmlinux 0x6ef5f91c filemap_flush +EXPORT_SYMBOL vmlinux 0x6f0021af tcf_hash_check +EXPORT_SYMBOL vmlinux 0x6f1b0557 elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x6f20960a full_name_hash +EXPORT_SYMBOL vmlinux 0x6f4c6b71 lg_local_unlock +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f5eb551 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0x6f842802 sock_create_kern +EXPORT_SYMBOL vmlinux 0x6f8f39cb bitmap_startwrite +EXPORT_SYMBOL vmlinux 0x6fb25298 phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x6fc08594 ilookup +EXPORT_SYMBOL vmlinux 0x6fc2d0a4 panic_notifier_list +EXPORT_SYMBOL vmlinux 0x6fc53dc6 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x6fc9adcc jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x6ffe53ef ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x70117256 napi_gro_receive +EXPORT_SYMBOL vmlinux 0x703b4352 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x704b5407 genl_notify +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x706fadc8 idr_remove_all +EXPORT_SYMBOL vmlinux 0x7087d885 init_task +EXPORT_SYMBOL vmlinux 0x70894d08 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x708d59c1 read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x709fd258 build_skb +EXPORT_SYMBOL vmlinux 0x70a17fef journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x70b5ff54 agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x70bac900 simple_dir_operations +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70c09af8 generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x70ce5fb5 give_up_console +EXPORT_SYMBOL vmlinux 0x70d053fd try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x70d1f8f3 strncat +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70ec7bc5 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x70ffdc08 tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x710b01fd iterate_supers_type +EXPORT_SYMBOL vmlinux 0x7114a71f bit_waitqueue +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x714e6ed7 flush_old_exec +EXPORT_SYMBOL vmlinux 0x7161d8eb ps2_init +EXPORT_SYMBOL vmlinux 0x71677f2f keyring_alloc +EXPORT_SYMBOL vmlinux 0x716e7a7f __ip_dev_find +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x71721b57 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0x71794f2a scsi_print_sense +EXPORT_SYMBOL vmlinux 0x718ea6a4 generic_file_mmap +EXPORT_SYMBOL vmlinux 0x7194e7f9 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71a672ef dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x71ade6df __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0x71d6b606 pci_disable_link_state +EXPORT_SYMBOL vmlinux 0x71da7aa7 vfs_symlink +EXPORT_SYMBOL vmlinux 0x71efddde dma_common_mmap +EXPORT_SYMBOL vmlinux 0x71f5d470 serio_interrupt +EXPORT_SYMBOL vmlinux 0x71f8b784 phy_find_first +EXPORT_SYMBOL vmlinux 0x722216bc fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x7233ede5 set_create_files_as +EXPORT_SYMBOL vmlinux 0x7234bdc3 pci_disable_obff +EXPORT_SYMBOL vmlinux 0x7234eafb otg_state_string +EXPORT_SYMBOL vmlinux 0x7242a45a vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0x726b81e7 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x726ba640 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x726dba11 lock_sock_fast +EXPORT_SYMBOL vmlinux 0x7282495b elevator_exit +EXPORT_SYMBOL vmlinux 0x72a1a2b8 skb_dequeue +EXPORT_SYMBOL vmlinux 0x72a5a8e3 inet_accept +EXPORT_SYMBOL vmlinux 0x72b0a36c kobject_set_name +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c6f838 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x72cd0444 fsnotify_init_mark +EXPORT_SYMBOL vmlinux 0x72d58de9 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x72d8a106 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x72d8aafc tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0x72df2f2a up_read +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72ec013e find_inode_number +EXPORT_SYMBOL vmlinux 0x72ec2937 kernel_sendpage +EXPORT_SYMBOL vmlinux 0x72ee9fc2 do_splice_to +EXPORT_SYMBOL vmlinux 0x72f3aa32 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x730c47d7 sk_alloc +EXPORT_SYMBOL vmlinux 0x7315a4e9 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x733c3b54 kasprintf +EXPORT_SYMBOL vmlinux 0x7342acf8 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0x734ea4b3 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x73609280 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x737de5e9 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x738803e6 strnlen +EXPORT_SYMBOL vmlinux 0x73a12c38 xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0x73aa7fd0 sock_from_file +EXPORT_SYMBOL vmlinux 0x73c203fe xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x73cfb6f7 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x73dd54eb irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x73e20c1c strlcpy +EXPORT_SYMBOL vmlinux 0x73f11212 gen_new_estimator +EXPORT_SYMBOL vmlinux 0x73f4a301 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x73f911ec tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x7406f5c5 kobject_put +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x7413793a EISA_bus +EXPORT_SYMBOL vmlinux 0x74233721 __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x742b55cd bio_integrity_endio +EXPORT_SYMBOL vmlinux 0x743ad690 phy_connect_direct +EXPORT_SYMBOL vmlinux 0x743b4ae3 atomic64_inc_not_zero_cx8 +EXPORT_SYMBOL vmlinux 0x7464f887 ll_rw_block +EXPORT_SYMBOL vmlinux 0x7469fcfe radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x747544d1 ppp_dev_name +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x748dc66e netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0x749f4165 irq_stat +EXPORT_SYMBOL vmlinux 0x74bb2181 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x74c134b9 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x74c58430 key_unlink +EXPORT_SYMBOL vmlinux 0x74c8e8aa create_syslog_header +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d79b9e get_agp_version +EXPORT_SYMBOL vmlinux 0x74e5ff1a udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x74fa4478 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x75057c31 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x7505bdef memchr_inv +EXPORT_SYMBOL vmlinux 0x751577ab iget_failed +EXPORT_SYMBOL vmlinux 0x75271716 save_processor_state +EXPORT_SYMBOL vmlinux 0x7531e3dc acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x7538b132 agp_off +EXPORT_SYMBOL vmlinux 0x754dac78 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x757b6f9d search_binary_handler +EXPORT_SYMBOL vmlinux 0x7593d385 div64_s64 +EXPORT_SYMBOL vmlinux 0x759b54b7 abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x759b8bff posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0x75a3c48b tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x75b03327 xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x75bb675a finish_wait +EXPORT_SYMBOL vmlinux 0x75bda77a seq_hlist_next +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75c74737 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x75d21809 vprintk_emit +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x7628f3c7 this_cpu_off +EXPORT_SYMBOL vmlinux 0x762add85 atomic64_inc_return_cx8 +EXPORT_SYMBOL vmlinux 0x7647726c handle_sysrq +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x7679c736 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x768a11ae phy_driver_register +EXPORT_SYMBOL vmlinux 0x768c72f4 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0x76954660 kernel_listen +EXPORT_SYMBOL vmlinux 0x769e06d7 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x76adfcd6 pci_disable_device +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76f2fbe3 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x7707349b wait_iff_congested +EXPORT_SYMBOL vmlinux 0x770a0036 isapnp_cfg_begin +EXPORT_SYMBOL vmlinux 0x771320ca input_set_abs_params +EXPORT_SYMBOL vmlinux 0x7715c8ef pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x771cf835 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x772f9eec __percpu_counter_add +EXPORT_SYMBOL vmlinux 0x77315c4e delete_from_page_cache +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x77623a2e input_register_device +EXPORT_SYMBOL vmlinux 0x777539b7 cpu_info +EXPORT_SYMBOL vmlinux 0x777d53a7 neigh_destroy +EXPORT_SYMBOL vmlinux 0x77847726 simple_transaction_read +EXPORT_SYMBOL vmlinux 0x779a18af kstrtoll +EXPORT_SYMBOL vmlinux 0x77b31e1a posix_test_lock +EXPORT_SYMBOL vmlinux 0x77b38ba8 ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x77bc13a0 strim +EXPORT_SYMBOL vmlinux 0x77ce93b3 qid_lt +EXPORT_SYMBOL vmlinux 0x77df0847 __set_personality +EXPORT_SYMBOL vmlinux 0x77e8f4b3 sk_dst_check +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f615b7 jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x7806698f request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0x780b133f blk_run_queue +EXPORT_SYMBOL vmlinux 0x780fdfd1 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x782de033 sock_i_ino +EXPORT_SYMBOL vmlinux 0x784156bd pci_unmap_rom +EXPORT_SYMBOL vmlinux 0x7845afec freeze_bdev +EXPORT_SYMBOL vmlinux 0x7849d693 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0x784f58dc nla_reserve +EXPORT_SYMBOL vmlinux 0x7873420a pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x7880c781 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x788216b2 padata_alloc +EXPORT_SYMBOL vmlinux 0x788f31b2 mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x789affb1 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x78aa5b2e jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x78bb2011 dm_ratelimit_state +EXPORT_SYMBOL vmlinux 0x78cbbe23 cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x78db38d3 proc_dointvec +EXPORT_SYMBOL vmlinux 0x78dd0dd0 pci_remove_bus +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78fb18f6 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0x78fded09 sg_miter_start +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x7928e387 dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x79505fc8 tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x796606af generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0x796eb99c bio_integrity_free +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x7989ed8b fb_pan_display +EXPORT_SYMBOL vmlinux 0x799112f8 scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79baf739 get_phy_device +EXPORT_SYMBOL vmlinux 0x79f2c508 bmap +EXPORT_SYMBOL vmlinux 0x7a188791 prandom_bytes +EXPORT_SYMBOL vmlinux 0x7a249b35 nf_afinfo +EXPORT_SYMBOL vmlinux 0x7a27c184 ewma_init +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a527755 tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0x7a6f862c dquot_disable +EXPORT_SYMBOL vmlinux 0x7a8906a2 security_inode_readlink +EXPORT_SYMBOL vmlinux 0x7a9bf88d udplite_table +EXPORT_SYMBOL vmlinux 0x7ab34113 balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x7ab88a45 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x7acf0693 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x7ad1f500 pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x7ad41bf9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x7ada7489 agp_backend_release +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7afa89fc vsnprintf +EXPORT_SYMBOL vmlinux 0x7b03848a verify_mem_not_deleted +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b134ddf acpi_get_name +EXPORT_SYMBOL vmlinux 0x7b3a0318 dst_alloc +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b5c8440 vm_munmap +EXPORT_SYMBOL vmlinux 0x7b7fc8a2 journal_extend +EXPORT_SYMBOL vmlinux 0x7b8ec307 genphy_update_link +EXPORT_SYMBOL vmlinux 0x7b99ef92 thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL vmlinux 0x7bb64cd5 set_pages_uc +EXPORT_SYMBOL vmlinux 0x7bcc92b9 twl6040_power +EXPORT_SYMBOL vmlinux 0x7be14b0c neigh_event_ns +EXPORT_SYMBOL vmlinux 0x7c1372e8 panic +EXPORT_SYMBOL vmlinux 0x7c3114a4 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x7c3806b7 __pci_enable_wake +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c98845d twl_i2c_read +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cdb1ead jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x7ce6e057 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x7cea599f no_llseek +EXPORT_SYMBOL vmlinux 0x7cf96374 mmc_fixup_device +EXPORT_SYMBOL vmlinux 0x7d0db45c jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d66a5f3 generic_setxattr +EXPORT_SYMBOL vmlinux 0x7d72fb44 scsi_print_result +EXPORT_SYMBOL vmlinux 0x7dbc2e57 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x7dc16f3a bioset_create +EXPORT_SYMBOL vmlinux 0x7deff673 dm_consume_args +EXPORT_SYMBOL vmlinux 0x7dfbd816 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x7e0fd18e serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x7e130f08 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0x7e1d85a7 follow_down_one +EXPORT_SYMBOL vmlinux 0x7e221ad5 sget +EXPORT_SYMBOL vmlinux 0x7e2a7b46 ip_fragment +EXPORT_SYMBOL vmlinux 0x7e394c4e sysctl_local_reserved_ports +EXPORT_SYMBOL vmlinux 0x7e3f3fbc gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x7e78ab64 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x7e8a50ac phy_device_create +EXPORT_SYMBOL vmlinux 0x7ec971dc __napi_complete +EXPORT_SYMBOL vmlinux 0x7ecb001b __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x7ee73c0c memcg_socket_limit_enabled +EXPORT_SYMBOL vmlinux 0x7eebfe4c ether_setup +EXPORT_SYMBOL vmlinux 0x7ef2ef9e pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0x7ef6a500 keyring_search +EXPORT_SYMBOL vmlinux 0x7efc25be jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x7efca87c pnp_find_dev +EXPORT_SYMBOL vmlinux 0x7efe5a47 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x7efe96fe path_is_under +EXPORT_SYMBOL vmlinux 0x7f18b194 kacpi_hotplug_wq +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f42ccf2 __quota_error +EXPORT_SYMBOL vmlinux 0x7f4fcccf journal_ack_err +EXPORT_SYMBOL vmlinux 0x7f658e80 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x7fad7bde skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0x7fb17c94 scsi_dma_map +EXPORT_SYMBOL vmlinux 0x7fd0e08a sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x7fe32873 rb_replace_node +EXPORT_SYMBOL vmlinux 0x801d8ece empty_aops +EXPORT_SYMBOL vmlinux 0x80554700 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x806bd303 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x80af87fd simple_release_fs +EXPORT_SYMBOL vmlinux 0x80ca5026 _bin2bcd +EXPORT_SYMBOL vmlinux 0x80ddee6f kmap_high +EXPORT_SYMBOL vmlinux 0x810ad060 nobh_write_begin +EXPORT_SYMBOL vmlinux 0x810d9ba9 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x814e7730 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x8150c0ba mempool_resize +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815c56d0 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x81618304 ip6_frag_match +EXPORT_SYMBOL vmlinux 0x81732487 i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x817b0076 __invalidate_device +EXPORT_SYMBOL vmlinux 0x819e1c25 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0x81b70170 d_move +EXPORT_SYMBOL vmlinux 0x81c1d4d4 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0x81d10f5f trace_seq_putc +EXPORT_SYMBOL vmlinux 0x81d3eec1 led_set_brightness +EXPORT_SYMBOL vmlinux 0x81db6ebb xz_dec_reset +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x81fb92de inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x82058655 generic_delete_inode +EXPORT_SYMBOL vmlinux 0x82072614 tasklet_kill +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x8235805b memmove +EXPORT_SYMBOL vmlinux 0x823933c5 dm_get_device +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x825cac31 __bread +EXPORT_SYMBOL vmlinux 0x8260686f bitmap_find_next_zero_area +EXPORT_SYMBOL vmlinux 0x82659567 eisa_driver_unregister +EXPORT_SYMBOL vmlinux 0x82684cfd mmc_add_host +EXPORT_SYMBOL vmlinux 0x8268659c tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x828e315f inode_change_ok +EXPORT_SYMBOL vmlinux 0x82a69b0a netdev_features_change +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82c4a1db freezing_slow_path +EXPORT_SYMBOL vmlinux 0x82cc4dad phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x82d53a8f bio_unmap_user +EXPORT_SYMBOL vmlinux 0x82d5563b genl_register_ops +EXPORT_SYMBOL vmlinux 0x82d948eb __brelse +EXPORT_SYMBOL vmlinux 0x82e940a7 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x82fc232c ppp_input +EXPORT_SYMBOL vmlinux 0x82ffe6b4 mem_cgroup_subsys +EXPORT_SYMBOL vmlinux 0x830e547b ioremap_prot +EXPORT_SYMBOL vmlinux 0x831d69e5 kunmap_high +EXPORT_SYMBOL vmlinux 0x831e6fea skb_clone +EXPORT_SYMBOL vmlinux 0x8331e4c2 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0x833a0598 devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x833c03aa acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x8340ca9c dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0x8378c03f tcp_connect +EXPORT_SYMBOL vmlinux 0x83877108 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x838f70b0 twl_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x83a3c6a4 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a6eeca dev_get_flags +EXPORT_SYMBOL vmlinux 0x83abbf5b tcf_register_action +EXPORT_SYMBOL vmlinux 0x83c8a355 param_set_int +EXPORT_SYMBOL vmlinux 0x83de1007 inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x83e8d73c dma_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0x84060081 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x840dc647 da903x_query_status +EXPORT_SYMBOL vmlinux 0x8413a737 blk_put_queue +EXPORT_SYMBOL vmlinux 0x8417f512 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x843cbfdd scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x8456829f napi_complete +EXPORT_SYMBOL vmlinux 0x846bcc01 dm_table_get +EXPORT_SYMBOL vmlinux 0x84749c04 nonseekable_open +EXPORT_SYMBOL vmlinux 0x849161c3 iput +EXPORT_SYMBOL vmlinux 0x8493696e dev_uc_del +EXPORT_SYMBOL vmlinux 0x84b28f74 elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x84b3ef83 module_layout +EXPORT_SYMBOL vmlinux 0x84b413c5 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x84be886f completion_done +EXPORT_SYMBOL vmlinux 0x84cb78d8 dev_addr_init +EXPORT_SYMBOL vmlinux 0x8507ef27 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x850f28df pci_release_regions +EXPORT_SYMBOL vmlinux 0x8526b4b7 security_mmap_file +EXPORT_SYMBOL vmlinux 0x8526c374 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0x8530cdfc fasync_helper +EXPORT_SYMBOL vmlinux 0x85548a66 km_policy_expired +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x857f0484 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x85a1480e xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0x85a95b94 unlock_new_inode +EXPORT_SYMBOL vmlinux 0x85b0c7f9 user_path_create +EXPORT_SYMBOL vmlinux 0x85b5e625 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x85b69c56 elv_rb_add +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x85e7deb2 iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0x860506c9 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x863a4c20 override_creds +EXPORT_SYMBOL vmlinux 0x865029ac __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x86697781 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x866aa2d3 generic_file_llseek +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x8694f9b9 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x869dbb8e blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x86a4889a kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0x86a9c5f6 serio_rescan +EXPORT_SYMBOL vmlinux 0x86b7804d ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0x86baf2cb register_netdev +EXPORT_SYMBOL vmlinux 0x86bf65ae dst_destroy +EXPORT_SYMBOL vmlinux 0x86d5255f _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x86d809e0 log_start_commit +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x870bf928 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x873cbe8b vfs_writev +EXPORT_SYMBOL vmlinux 0x875984e5 idr_remove +EXPORT_SYMBOL vmlinux 0x8765424b fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x8775ead0 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0x87872a1e skb_put +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x8798e453 __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87bf55a4 inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x8806b34d scsi_get_command +EXPORT_SYMBOL vmlinux 0x88077a98 eisa_driver_register +EXPORT_SYMBOL vmlinux 0x880dde6c sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x881622c3 kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x8834396c mod_timer +EXPORT_SYMBOL vmlinux 0x884ea3ac md_check_recovery +EXPORT_SYMBOL vmlinux 0x8858a624 locks_delete_block +EXPORT_SYMBOL vmlinux 0x8861be58 dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0x8890963d scm_fp_dup +EXPORT_SYMBOL vmlinux 0x88a84808 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0x88ddb650 pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x891e185e input_unregister_device +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x894b09d4 insert_inode_locked +EXPORT_SYMBOL vmlinux 0x8953f8ff __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x89741d6e __devm_release_region +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x897d7bc9 usb_get_phy +EXPORT_SYMBOL vmlinux 0x89876f78 fib_default_rule_pref +EXPORT_SYMBOL vmlinux 0x899ad9a7 input_free_device +EXPORT_SYMBOL vmlinux 0x89afe34e __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x89bf4da6 key_revoke +EXPORT_SYMBOL vmlinux 0x89c05f6d tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0x89c45295 spi_schedule_dv_device +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89d7b2f4 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x89e4a247 ps2_drain +EXPORT_SYMBOL vmlinux 0x89e92376 phy_device_free +EXPORT_SYMBOL vmlinux 0x8a00e66c f_setown +EXPORT_SYMBOL vmlinux 0x8a1ab4ee timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8a40eebf simple_transaction_set +EXPORT_SYMBOL vmlinux 0x8a490c90 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x8a6043ff tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a909b03 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0x8a90f2ed scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8abd119f xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x8acbf186 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x8ace8ca3 groups_alloc +EXPORT_SYMBOL vmlinux 0x8ad12771 lock_sock_nested +EXPORT_SYMBOL vmlinux 0x8b1339c6 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x8b18496f __copy_to_user_ll +EXPORT_SYMBOL vmlinux 0x8b1a7a66 pcie_aspm_enabled +EXPORT_SYMBOL vmlinux 0x8b226a81 acpi_video_dmi_demote_vendor +EXPORT_SYMBOL vmlinux 0x8b2c643f dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0x8b30c681 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b3a1957 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x8b4ac155 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x8b4e044d input_flush_device +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b6c859b spi_attach_transport +EXPORT_SYMBOL vmlinux 0x8b7452a4 dev_addr_flush +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8ba7cb03 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x8bbfc12a agp_create_memory +EXPORT_SYMBOL vmlinux 0x8bc56f2a thaw_super +EXPORT_SYMBOL vmlinux 0x8bef758a set_device_ro +EXPORT_SYMBOL vmlinux 0x8bfe8c57 param_set_uint +EXPORT_SYMBOL vmlinux 0x8c08bf06 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x8c0dd2f9 dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c495eb1 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0x8c4a4038 generic_listxattr +EXPORT_SYMBOL vmlinux 0x8c637d43 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x8cbcc437 phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cda8029 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x8d2d4187 vsc824x_add_skew +EXPORT_SYMBOL vmlinux 0x8d4734b1 __neigh_event_send +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d5b5e7e kernel_getpeername +EXPORT_SYMBOL vmlinux 0x8d6f81b4 __div64_32 +EXPORT_SYMBOL vmlinux 0x8d79a892 idr_get_new +EXPORT_SYMBOL vmlinux 0x8d7f399d __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8d99d76c kill_pid +EXPORT_SYMBOL vmlinux 0x8da1a3cb acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x8daad7b0 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0x8daf8c42 dql_init +EXPORT_SYMBOL vmlinux 0x8dbaf963 simple_rename +EXPORT_SYMBOL vmlinux 0x8dc6e564 restore_processor_state +EXPORT_SYMBOL vmlinux 0x8dc8085c nf_log_register +EXPORT_SYMBOL vmlinux 0x8ddb42b5 pci_restore_state +EXPORT_SYMBOL vmlinux 0x8de20ad9 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0x8dec8842 idr_destroy +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e00d117 agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x8e0d66f4 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x8e0ec4f2 tcf_hash_release +EXPORT_SYMBOL vmlinux 0x8e28cd42 in_egroup_p +EXPORT_SYMBOL vmlinux 0x8e33e2e9 submit_bh +EXPORT_SYMBOL vmlinux 0x8e7a767b arp_invalidate +EXPORT_SYMBOL vmlinux 0x8e888ec3 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x8ea59073 bitmap_unplug +EXPORT_SYMBOL vmlinux 0x8eaf2a5f vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x8eb199a8 intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x8ec55cf1 ida_destroy +EXPORT_SYMBOL vmlinux 0x8ed8ef21 pci_clear_master +EXPORT_SYMBOL vmlinux 0x8f01ec9d set_anon_super +EXPORT_SYMBOL vmlinux 0x8f0ea4e1 phy_detach +EXPORT_SYMBOL vmlinux 0x8f22d863 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f6c25ff inode_init_always +EXPORT_SYMBOL vmlinux 0x8f7014a1 param_set_ulong +EXPORT_SYMBOL vmlinux 0x8f73a354 truncate_setsize +EXPORT_SYMBOL vmlinux 0x8f84ced2 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x8f851e08 blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8faf955d end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0x8ff4079b pv_irq_ops +EXPORT_SYMBOL vmlinux 0x8ff87186 genphy_resume +EXPORT_SYMBOL vmlinux 0x8ffdb3b8 crc16 +EXPORT_SYMBOL vmlinux 0x8ffee5b2 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0x900001fa dev_alert +EXPORT_SYMBOL vmlinux 0x9003653b tc_classify_compat +EXPORT_SYMBOL vmlinux 0x9007f81b thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x900cce36 dput +EXPORT_SYMBOL vmlinux 0x90211356 mmc_card_sleep +EXPORT_SYMBOL vmlinux 0x90275b4f mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x902d7b8f vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x903589df nf_getsockopt +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x904ea792 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x90648721 xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x906a5ea7 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x90741f65 finish_open +EXPORT_SYMBOL vmlinux 0x908c14a7 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0x9093e9cf bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90b70162 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x90c5e819 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x90cbb2d1 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x90d3be89 nf_log_packet +EXPORT_SYMBOL vmlinux 0x90eb037e inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x91165ac5 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0x9117ec4e i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0x911837ab framebuffer_release +EXPORT_SYMBOL vmlinux 0x9123724c blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0x912b515e scsi_prep_return +EXPORT_SYMBOL vmlinux 0x9141ec9e proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91463b1d kstrtos16 +EXPORT_SYMBOL vmlinux 0x91480103 pnp_find_card +EXPORT_SYMBOL vmlinux 0x914d763e dev_mc_unsync +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x91715312 sprintf +EXPORT_SYMBOL vmlinux 0x91a0e940 get_io_context +EXPORT_SYMBOL vmlinux 0x91b153b8 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x92334bb9 pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x9254b8bf scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0x92683ca7 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0x92897e3d default_idle +EXPORT_SYMBOL vmlinux 0x92a1752d proto_unregister +EXPORT_SYMBOL vmlinux 0x92a9c60c time_to_tm +EXPORT_SYMBOL vmlinux 0x92b0cc4d input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x92eb5627 mii_link_ok +EXPORT_SYMBOL vmlinux 0x92f784dc schedule_work_on +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x93215e1d __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0x93335ec0 blk_register_region +EXPORT_SYMBOL vmlinux 0x93448c57 screen_info +EXPORT_SYMBOL vmlinux 0x934494dd bdevname +EXPORT_SYMBOL vmlinux 0x934f07eb tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x9358e251 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0x9373e5de pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0x9399dd99 mount_ns +EXPORT_SYMBOL vmlinux 0x93a3fa07 scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93a8bf3f inet_stream_connect +EXPORT_SYMBOL vmlinux 0x93b7bf86 generic_mii_ioctl +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93f14fff netif_rx +EXPORT_SYMBOL vmlinux 0x93f4d42a spi_release_transport +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x943ce573 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0x943dc726 idr_replace +EXPORT_SYMBOL vmlinux 0x9451c518 user_path_at +EXPORT_SYMBOL vmlinux 0x947db2fc pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a51833 bio_put +EXPORT_SYMBOL vmlinux 0x94aeb2ef usb_put_phy +EXPORT_SYMBOL vmlinux 0x94aeb857 unregister_cdrom +EXPORT_SYMBOL vmlinux 0x94b541b5 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x94ea4bfb blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x94ffe968 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x95409a9f generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x9545af6d tasklet_init +EXPORT_SYMBOL vmlinux 0x954be679 blk_bio_map_sg +EXPORT_SYMBOL vmlinux 0x95607652 dquot_file_open +EXPORT_SYMBOL vmlinux 0x9584d8d7 i2c_transfer +EXPORT_SYMBOL vmlinux 0x959331a6 scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x95a098ff scsi_ioctl +EXPORT_SYMBOL vmlinux 0x95e4acfb abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x95e6e500 blk_stack_limits +EXPORT_SYMBOL vmlinux 0x95f89a33 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x9609a95a jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x96265772 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0x9640a7d5 blk_start_queue +EXPORT_SYMBOL vmlinux 0x964b9e68 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x96573b80 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x965b2046 mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x967054d5 pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0x96898769 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x968a14f9 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x9692f106 nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x9696ac72 rename_lock +EXPORT_SYMBOL vmlinux 0x96a592f6 seq_puts +EXPORT_SYMBOL vmlinux 0x96b6bc44 sk_free +EXPORT_SYMBOL vmlinux 0x96bf7c0c inet_add_offload +EXPORT_SYMBOL vmlinux 0x96c7e43b seq_printf +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96ce354d scsi_host_put +EXPORT_SYMBOL vmlinux 0x96d456b4 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x96da5ac7 journal_destroy +EXPORT_SYMBOL vmlinux 0x96eb241c clear_nlink +EXPORT_SYMBOL vmlinux 0x96f68b76 tcp_read_sock +EXPORT_SYMBOL vmlinux 0x96f8dc79 register_key_type +EXPORT_SYMBOL vmlinux 0x9740b1b4 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x975a1c56 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x97679aaf input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0x97999817 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x97b4500c __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0x97b59586 lg_local_lock_cpu +EXPORT_SYMBOL vmlinux 0x97b94764 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x97bafca7 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x97c5bd0a acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x97cd8bdf irq_set_chip +EXPORT_SYMBOL vmlinux 0x97d49ddf ip_options_compile +EXPORT_SYMBOL vmlinux 0x97dcef29 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97e0368d inet_confirm_addr +EXPORT_SYMBOL vmlinux 0x97f8b838 vfs_rename +EXPORT_SYMBOL vmlinux 0x97f9dce6 proc_create_data +EXPORT_SYMBOL vmlinux 0x981b28ae sock_recvmsg +EXPORT_SYMBOL vmlinux 0x9820b644 warn_slowpath_fmt_taint +EXPORT_SYMBOL vmlinux 0x986bfcbd icmp_send +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x98728c63 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0x9873a618 kthread_bind +EXPORT_SYMBOL vmlinux 0x9878bfc4 dget_parent +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x98913444 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x98a11fa7 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x98b9ab9d vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0x98c65790 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x98c6c327 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x98d26031 mmc_can_reset +EXPORT_SYMBOL vmlinux 0x98d2b9e1 set_pages_x +EXPORT_SYMBOL vmlinux 0x98f51279 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x98fa21b0 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x99005338 rtnl_notify +EXPORT_SYMBOL vmlinux 0x99052a84 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x99136f3a pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x99215b0f devfreq_add_device +EXPORT_SYMBOL vmlinux 0x9922f1da dcb_setapp +EXPORT_SYMBOL vmlinux 0x994cd48f pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x99517682 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x99535f53 dev_get_by_flags_rcu +EXPORT_SYMBOL vmlinux 0x99591a7a ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x995bd564 pci_save_state +EXPORT_SYMBOL vmlinux 0x9964b26b gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x996c5b7b inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99a2623e devm_request_and_ioremap +EXPORT_SYMBOL vmlinux 0x99ac1f89 dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x99b956de block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0x99b992c8 idr_get_new_above +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99d29478 truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0x99d536eb task_nice +EXPORT_SYMBOL vmlinux 0x99d968e8 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x99e1d67e filemap_fault +EXPORT_SYMBOL vmlinux 0x99eae60e sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x9a109aa7 vmap +EXPORT_SYMBOL vmlinux 0x9a111f57 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a1e2d1f udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x9a1fc4b4 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x9a23e778 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x9a42773d pci_disable_msi +EXPORT_SYMBOL vmlinux 0x9a5164aa mmc_cache_ctrl +EXPORT_SYMBOL vmlinux 0x9a6a83f9 cmos_lock +EXPORT_SYMBOL vmlinux 0x9a958aee iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x9b1bc353 agp_bind_memory +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b6eb137 ksize +EXPORT_SYMBOL vmlinux 0x9b6f7a77 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x9b75cb81 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x9b95d65b splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x9b98895d fsnotify_add_mark +EXPORT_SYMBOL vmlinux 0x9b9c746c skb_pull +EXPORT_SYMBOL vmlinux 0x9b9e05f9 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bb76a0d journal_dirty_data +EXPORT_SYMBOL vmlinux 0x9bd7178c pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x9bd9b786 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x9be197e0 blk_integrity_is_initialized +EXPORT_SYMBOL vmlinux 0x9be7bde4 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x9bfcb683 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0x9c0c2178 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x9c2c944a __copy_from_user_ll_nocache_nozero +EXPORT_SYMBOL vmlinux 0x9c3a5026 gen_pool_free +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c5c0431 pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0x9c6fd967 dentry_unhash +EXPORT_SYMBOL vmlinux 0x9c799d10 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x9c85cf95 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x9c8ecd26 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x9cab34a6 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x9cb87f47 __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9ce40f16 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x9ce67994 unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0x9ceb163c memcpy_toiovec +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d0bf6ad ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x9d15cc4c find_lock_page +EXPORT_SYMBOL vmlinux 0x9d160443 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d5ecbf2 __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x9da01691 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x9dab7bc1 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x9dacd69d rtnl_unicast +EXPORT_SYMBOL vmlinux 0x9dad7c03 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x9db49c77 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0x9dcdb15c uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x9df1a7c3 prepare_binprm +EXPORT_SYMBOL vmlinux 0x9df6b6b5 nf_hook_slow +EXPORT_SYMBOL vmlinux 0x9e0c711d vzalloc_node +EXPORT_SYMBOL vmlinux 0x9e2000a7 memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0x9e357d81 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e3acff1 do_sync_read +EXPORT_SYMBOL vmlinux 0x9e4b3747 sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x9e4faeef dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x9e607910 audit_log +EXPORT_SYMBOL vmlinux 0x9e61bb05 set_freezable +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e9b881c inet_del_offload +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9ed685ee iov_iter_advance +EXPORT_SYMBOL vmlinux 0x9ef92bbe inode_init_owner +EXPORT_SYMBOL vmlinux 0x9eff3655 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f38a786 generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0x9f46ced8 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x9f491e5d ftrace_print_symbols_seq_u64 +EXPORT_SYMBOL vmlinux 0x9f4d698a security_inode_init_security +EXPORT_SYMBOL vmlinux 0x9f8b2ada send_sig_info +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9faa85ab ipv6_select_ident +EXPORT_SYMBOL vmlinux 0x9fb29176 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0x9fb3dd30 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9fc70a74 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x9fc9cd35 nla_append +EXPORT_SYMBOL vmlinux 0x9fdecc31 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x9ffa3a75 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0xa00aca2a dql_completed +EXPORT_SYMBOL vmlinux 0xa00cd3fb pm860x_reg_read +EXPORT_SYMBOL vmlinux 0xa0156dca journal_revoke +EXPORT_SYMBOL vmlinux 0xa018630c sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xa01fd512 blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0xa02968ee revalidate_disk +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa06cf9d8 datagram_poll +EXPORT_SYMBOL vmlinux 0xa06df9e1 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0xa07ed110 xz_dec_init +EXPORT_SYMBOL vmlinux 0xa0ae9dcc max8925_set_bits +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b6c885 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xa0c9f0cc mount_nodev +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0d5142e mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa11c21be kmap_atomic +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa1415618 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0xa14f3d8c ewma_add +EXPORT_SYMBOL vmlinux 0xa1591374 padata_free +EXPORT_SYMBOL vmlinux 0xa1807e23 pci_enable_ido +EXPORT_SYMBOL vmlinux 0xa19b75b7 bio_integrity_split +EXPORT_SYMBOL vmlinux 0xa1b10e20 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c4fd09 pneigh_enqueue +EXPORT_SYMBOL vmlinux 0xa1c5a3b3 cleancache_enabled +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1e14bde generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0xa1f61226 clocksource_unregister +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa23fb771 consume_skb +EXPORT_SYMBOL vmlinux 0xa250c838 param_get_charp +EXPORT_SYMBOL vmlinux 0xa250d077 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0xa25c4255 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0xa25efb6a textsearch_prepare +EXPORT_SYMBOL vmlinux 0xa26a51a0 mapping_tagged +EXPORT_SYMBOL vmlinux 0xa2738fe8 scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0xa2848c50 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0xa2850210 netlink_unicast +EXPORT_SYMBOL vmlinux 0xa2a15add xfrm_lookup +EXPORT_SYMBOL vmlinux 0xa2a53ce7 bdget_disk +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2b2e7e4 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0xa2e19508 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0xa2e819e8 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0xa2ef34d7 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0xa306e0c9 skb_flow_dissect +EXPORT_SYMBOL vmlinux 0xa33d9a48 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0xa33e2ccc phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0xa34f1ef5 crc32_le +EXPORT_SYMBOL vmlinux 0xa3504378 rwsem_wake +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa35340a8 mmc_interrupt_hpi +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa363dab4 udp_table +EXPORT_SYMBOL vmlinux 0xa36eb218 mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0xa3a57f57 single_release +EXPORT_SYMBOL vmlinux 0xa3dc806f neigh_parms_release +EXPORT_SYMBOL vmlinux 0xa3f031b8 rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0xa3f68d7b tty_lock_pair +EXPORT_SYMBOL vmlinux 0xa42b017c setup_new_exec +EXPORT_SYMBOL vmlinux 0xa42dd909 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0xa439a246 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xa43b1297 vscnprintf +EXPORT_SYMBOL vmlinux 0xa43b9539 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0xa43dd7f5 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0xa46305ea mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xa4636d78 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xa4694bd5 pci_scan_bus +EXPORT_SYMBOL vmlinux 0xa4701e9e timekeeping_inject_offset +EXPORT_SYMBOL vmlinux 0xa470ca8e ppp_register_compressor +EXPORT_SYMBOL vmlinux 0xa47d25ec ndisc_mc_map +EXPORT_SYMBOL vmlinux 0xa4af65ad mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4c3286d invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0xa4c7d6f0 clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xa4c82bda __netlink_dump_start +EXPORT_SYMBOL vmlinux 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL vmlinux 0xa4d52536 agp_bridge +EXPORT_SYMBOL vmlinux 0xa4d7a9e1 kill_pgrp +EXPORT_SYMBOL vmlinux 0xa4eb4eff _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0xa51cdfe8 __FIXADDR_TOP +EXPORT_SYMBOL vmlinux 0xa525f0af setattr_copy +EXPORT_SYMBOL vmlinux 0xa5526619 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa5534451 pci_pme_capable +EXPORT_SYMBOL vmlinux 0xa568169c register_nls +EXPORT_SYMBOL vmlinux 0xa577a850 param_get_short +EXPORT_SYMBOL vmlinux 0xa58bf075 tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5af64bb sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0xa5b5ae64 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xa5b5fb5b fb_class +EXPORT_SYMBOL vmlinux 0xa5da0abd acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0xa5dd45f3 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0xa5fdb89f pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0xa6114c47 dev_emerg +EXPORT_SYMBOL vmlinux 0xa62e6e4f acpi_get_table_with_size +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa63f91f5 check_disk_size_change +EXPORT_SYMBOL vmlinux 0xa64d5982 padata_stop +EXPORT_SYMBOL vmlinux 0xa6637c85 tty_devnum +EXPORT_SYMBOL vmlinux 0xa6715115 do_settimeofday +EXPORT_SYMBOL vmlinux 0xa675804c utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0xa67da660 mempool_alloc +EXPORT_SYMBOL vmlinux 0xa67e2845 dq_data_lock +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6970398 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0xa6b13658 __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0xa6b27452 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0xa6ef1a26 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xa6efeead netif_napi_del +EXPORT_SYMBOL vmlinux 0xa70f86aa block_invalidatepage +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa71568db journal_wipe +EXPORT_SYMBOL vmlinux 0xa71c66ab scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0xa71e7463 __first_cpu +EXPORT_SYMBOL vmlinux 0xa72997f4 arp_send +EXPORT_SYMBOL vmlinux 0xa72e6d1d __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0xa735db59 prandom_u32 +EXPORT_SYMBOL vmlinux 0xa749ddaf pm860x_page_bulk_write +EXPORT_SYMBOL vmlinux 0xa769dd7f tty_set_operations +EXPORT_SYMBOL vmlinux 0xa77408c4 disk_stack_limits +EXPORT_SYMBOL vmlinux 0xa78edf42 bio_sector_offset +EXPORT_SYMBOL vmlinux 0xa7930d60 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xa7aca1ef bio_endio +EXPORT_SYMBOL vmlinux 0xa7cf6c2f atomic64_dec_return_cx8 +EXPORT_SYMBOL vmlinux 0xa7d94ccf xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xa7e52c14 scm_detach_fds +EXPORT_SYMBOL vmlinux 0xa7e92dac jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0xa81feca9 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0xa81ff6b8 get_disk +EXPORT_SYMBOL vmlinux 0xa8232c78 strtobool +EXPORT_SYMBOL vmlinux 0xa825b5fc agp_unbind_memory +EXPORT_SYMBOL vmlinux 0xa8281e6a jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0xa843805a get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0xa86f7a7f sk_reset_txq +EXPORT_SYMBOL vmlinux 0xa8721b97 system_state +EXPORT_SYMBOL vmlinux 0xa8941008 mount_bdev +EXPORT_SYMBOL vmlinux 0xa8a51575 agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8c5eefd scsi_device_put +EXPORT_SYMBOL vmlinux 0xa8cd2a5b skb_split +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8ecf3f8 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa90b426c unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0xa90ef52d ipv4_specific +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa932fa7d mmc_resume_host +EXPORT_SYMBOL vmlinux 0xa93ded73 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0xa955aeb8 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0xa96a7527 __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0xa972aa85 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0xa99132aa md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0xa9b67b90 dev_queue_xmit +EXPORT_SYMBOL vmlinux 0xa9cf1752 inet_frags_init +EXPORT_SYMBOL vmlinux 0xa9d60ffb dev_err +EXPORT_SYMBOL vmlinux 0xa9e0c84e blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0xa9ebcd0c dev_uc_sync +EXPORT_SYMBOL vmlinux 0xa9f0acdd ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0xa9fa0600 skb_copy_bits +EXPORT_SYMBOL vmlinux 0xaa294444 unload_nls +EXPORT_SYMBOL vmlinux 0xaa34cb25 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0xaa477c98 usb_remove_phy +EXPORT_SYMBOL vmlinux 0xaa4dd334 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xaa5fc143 inode_init_once +EXPORT_SYMBOL vmlinux 0xaa6901ac __kfifo_out_r +EXPORT_SYMBOL vmlinux 0xaa6f23ad rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0xaa813d19 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xaa863c7a vm_insert_pfn +EXPORT_SYMBOL vmlinux 0xaa8fea18 acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0xaa90131b ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0xaac1a9a5 dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0xaad6d92f rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0xaad78eb4 dma_async_device_register +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab1d6cc1 param_get_long +EXPORT_SYMBOL vmlinux 0xab28271c i8253_lock +EXPORT_SYMBOL vmlinux 0xab354350 request_key +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab6076f2 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab694444 bsearch +EXPORT_SYMBOL vmlinux 0xab6bde28 sysctl_max_syn_backlog +EXPORT_SYMBOL vmlinux 0xab761779 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab81a33f pci_enable_ltr +EXPORT_SYMBOL vmlinux 0xabb78296 flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xabbda766 complete_request_key +EXPORT_SYMBOL vmlinux 0xabcaa577 free_anon_bdev +EXPORT_SYMBOL vmlinux 0xabcf98d7 netlink_set_err +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xabdeee49 block_write_begin +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac1b754c security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0xac1d37cd neigh_compat_output +EXPORT_SYMBOL vmlinux 0xac2d2fb8 gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0xac33396b seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0xac375e78 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0xac3b3a16 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0xac3c1c4a __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0xac48f8d1 __d_drop +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac77cc25 kmap_to_page +EXPORT_SYMBOL vmlinux 0xaca144bb devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0xaca2495f tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0xacaf19b4 dquot_initialize +EXPORT_SYMBOL vmlinux 0xacb4261c security_path_rmdir +EXPORT_SYMBOL vmlinux 0xacbfecc7 pnp_release_card_device +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacde6340 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0xace8956a kthread_stop +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad07f027 gen_replace_estimator +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad2a8bd2 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xad428612 mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0xad55f681 pci_iounmap +EXPORT_SYMBOL vmlinux 0xad7ddb47 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0xad84bef8 dm_table_event +EXPORT_SYMBOL vmlinux 0xad9896cb ida_get_new +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadb5559d param_ops_byte +EXPORT_SYMBOL vmlinux 0xadc691ca mpage_writepage +EXPORT_SYMBOL vmlinux 0xade5fa00 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0xae1450e4 tcp_prot +EXPORT_SYMBOL vmlinux 0xae165c52 max8998_write_reg +EXPORT_SYMBOL vmlinux 0xae1fedb7 journal_get_write_access +EXPORT_SYMBOL vmlinux 0xae30678b pci_request_region +EXPORT_SYMBOL vmlinux 0xae32856b key_payload_reserve +EXPORT_SYMBOL vmlinux 0xae359046 xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0xae39bc35 inode_newsize_ok +EXPORT_SYMBOL vmlinux 0xae41777c scsi_host_alloc +EXPORT_SYMBOL vmlinux 0xae729e59 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0xae81dcea ata_ap_acpi_handle +EXPORT_SYMBOL vmlinux 0xaea976a8 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xaebe2751 acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0xaec1159a agp_free_page_array +EXPORT_SYMBOL vmlinux 0xaec655c7 alloc_pages_exact +EXPORT_SYMBOL vmlinux 0xaed5ba5b ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0xaee4e016 tcp_seq_open +EXPORT_SYMBOL vmlinux 0xaf04a650 generic_file_open +EXPORT_SYMBOL vmlinux 0xaf2a60cd cap_mmap_file +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf483159 i2c_verify_client +EXPORT_SYMBOL vmlinux 0xaf4b1540 acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xaf56900e pcim_iounmap +EXPORT_SYMBOL vmlinux 0xaf611eac amd_nb_misc_ids +EXPORT_SYMBOL vmlinux 0xaf7adb6f blk_init_queue_node +EXPORT_SYMBOL vmlinux 0xaf91d89f __kernel_param_lock +EXPORT_SYMBOL vmlinux 0xaf9d9ecc __register_nmi_handler +EXPORT_SYMBOL vmlinux 0xafb58df0 is_bad_inode +EXPORT_SYMBOL vmlinux 0xafc87b28 skb_trim +EXPORT_SYMBOL vmlinux 0xaffcb93d ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0xb01b1db8 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0xb0207ecf ___ratelimit +EXPORT_SYMBOL vmlinux 0xb05ac04f acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0xb05fc310 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0xb077ef32 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xb07f792d elv_register_queue +EXPORT_SYMBOL vmlinux 0xb0a88c7f swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0xb0b35c6f dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0bb4155 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0xb0cb15ab vfs_mkdir +EXPORT_SYMBOL vmlinux 0xb0cd2605 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0ec7444 serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0xb0fb2baa fb_set_cmap +EXPORT_SYMBOL vmlinux 0xb0ffda2f blk_limits_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xb11dbf51 sock_kfree_s +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1a6f366 ip_mc_join_group +EXPORT_SYMBOL vmlinux 0xb1b46bc1 bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xb1bb3fc3 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1cf44df fb_find_best_mode +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1d9523e wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0xb1f275da pci_request_regions +EXPORT_SYMBOL vmlinux 0xb1fb9aca ata_dev_printk +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb2383607 free_netdev +EXPORT_SYMBOL vmlinux 0xb25317d3 pcim_enable_device +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb2744b36 down_write_trylock +EXPORT_SYMBOL vmlinux 0xb2b4dc1d sync_inodes_sb +EXPORT_SYMBOL vmlinux 0xb2b8bf27 i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0xb2b94674 __crc32c_le +EXPORT_SYMBOL vmlinux 0xb2be6e92 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0xb2d307de param_ops_short +EXPORT_SYMBOL vmlinux 0xb2f590af tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0xb2f74fb6 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb317fb9a input_reset_device +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb3305d52 send_remote_softirq +EXPORT_SYMBOL vmlinux 0xb33aac2d inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb3591213 __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0xb36146c1 mpage_writepages +EXPORT_SYMBOL vmlinux 0xb36b32ce kmem_cache_free +EXPORT_SYMBOL vmlinux 0xb3951b4a key_alloc +EXPORT_SYMBOL vmlinux 0xb3968efd __block_write_begin +EXPORT_SYMBOL vmlinux 0xb3cc120e pnp_activate_dev +EXPORT_SYMBOL vmlinux 0xb3d28f5f __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0xb3e0590d acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0xb3f10fc4 textsearch_destroy +EXPORT_SYMBOL vmlinux 0xb3f679e2 scsi_release_buffers +EXPORT_SYMBOL vmlinux 0xb3f7646e kthread_should_stop +EXPORT_SYMBOL vmlinux 0xb416fc38 km_report +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb4331410 skb_append +EXPORT_SYMBOL vmlinux 0xb4390f9a mcount +EXPORT_SYMBOL vmlinux 0xb43c9e7c d_prune_aliases +EXPORT_SYMBOL vmlinux 0xb43f0f34 blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xb45578b8 memscan +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb48f6241 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xb494d55a misc_register +EXPORT_SYMBOL vmlinux 0xb4d6e420 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0xb4f2ee61 register_console +EXPORT_SYMBOL vmlinux 0xb52ee8be intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0xb53f3575 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xb54088a3 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb557a119 skb_insert +EXPORT_SYMBOL vmlinux 0xb55ae4a7 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0xb57343c2 frontswap_shrink +EXPORT_SYMBOL vmlinux 0xb57cb2b7 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xb5a0afd2 mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5aa7165 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5d09d4f dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0xb5f85e87 pci_get_slot +EXPORT_SYMBOL vmlinux 0xb5f892ab follow_pfn +EXPORT_SYMBOL vmlinux 0xb5fe0397 filp_open +EXPORT_SYMBOL vmlinux 0xb603365d scsi_mode_sense +EXPORT_SYMBOL vmlinux 0xb60c0a56 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0xb61f921b dma_release_declared_memory +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb645483a mmc_align_data_size +EXPORT_SYMBOL vmlinux 0xb64b939f acpi_device_hid +EXPORT_SYMBOL vmlinux 0xb65abdad aio_put_req +EXPORT_SYMBOL vmlinux 0xb6637f9e netlink_kernel_release +EXPORT_SYMBOL vmlinux 0xb6663b7d __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0xb667882b kern_unmount +EXPORT_SYMBOL vmlinux 0xb66b0e3a pci_scan_slot +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6822a33 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb6896671 crc_t10dif +EXPORT_SYMBOL vmlinux 0xb689e373 thermal_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xb69226b6 vm_insert_mixed +EXPORT_SYMBOL vmlinux 0xb6936ffe _bcd2bin +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6b541d6 __sk_dst_check +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6c756f3 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xb6cfebdc i2c_add_adapter +EXPORT_SYMBOL vmlinux 0xb6d81c2f blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0xb6e9ccf2 __getblk +EXPORT_SYMBOL vmlinux 0xb6ed1e53 strncpy +EXPORT_SYMBOL vmlinux 0xb6f0ed3f __vlan_find_dev_deep +EXPORT_SYMBOL vmlinux 0xb6f82b42 ip_getsockopt +EXPORT_SYMBOL vmlinux 0xb729c43b scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0xb73cbf9c would_dump +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb75dda99 replace_mount_options +EXPORT_SYMBOL vmlinux 0xb78e14e8 blk_requeue_request +EXPORT_SYMBOL vmlinux 0xb7abe9ae uart_write_wakeup +EXPORT_SYMBOL vmlinux 0xb7aea67b xfrm_state_walk +EXPORT_SYMBOL vmlinux 0xb7b61546 crc32_be +EXPORT_SYMBOL vmlinux 0xb7b6618c ida_init +EXPORT_SYMBOL vmlinux 0xb7c44d94 sock_update_classid +EXPORT_SYMBOL vmlinux 0xb7f55ecc atomic64_add_return_cx8 +EXPORT_SYMBOL vmlinux 0xb7f9dab9 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xb81960ca snprintf +EXPORT_SYMBOL vmlinux 0xb835b3e4 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0xb8553861 scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0xb863e8df seq_putc +EXPORT_SYMBOL vmlinux 0xb86c1964 pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0xb87e30a8 padata_do_parallel +EXPORT_SYMBOL vmlinux 0xb899ec43 __mem_cgroup_count_vm_event +EXPORT_SYMBOL vmlinux 0xb8b89a84 blk_complete_request +EXPORT_SYMBOL vmlinux 0xb8c23360 ida_remove +EXPORT_SYMBOL vmlinux 0xb8dfde3e mmc_flush_cache +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb8e877e7 kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0xb8ebac85 redraw_screen +EXPORT_SYMBOL vmlinux 0xb9070f9a skb_kill_datagram +EXPORT_SYMBOL vmlinux 0xb907513f unpoison_memory +EXPORT_SYMBOL vmlinux 0xb91f3b24 pm860x_page_reg_read +EXPORT_SYMBOL vmlinux 0xb9281ed6 netif_receive_skb +EXPORT_SYMBOL vmlinux 0xb931c13e vga_put +EXPORT_SYMBOL vmlinux 0xb934ec16 cpufreq_cooling_register +EXPORT_SYMBOL vmlinux 0xb93ca9f3 __break_lease +EXPORT_SYMBOL vmlinux 0xb960822b thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0xb97b8187 devfreq_add_governor +EXPORT_SYMBOL vmlinux 0xb9805c05 journal_check_available_features +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9d94375 seq_vprintf +EXPORT_SYMBOL vmlinux 0xb9f9a82b mnt_unpin +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba41585a tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba5cbe42 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0xba814170 get_tz_trend +EXPORT_SYMBOL vmlinux 0xba8ea6ad rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0xba93df37 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0xbaaf4c04 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xbab89f9d xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0xbabb18ab acpi_device_set_power +EXPORT_SYMBOL vmlinux 0xbabd0673 journal_check_used_features +EXPORT_SYMBOL vmlinux 0xbac577a6 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0xbad6f503 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0xbaeffa05 qid_eq +EXPORT_SYMBOL vmlinux 0xbafd7e2f xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0xbb0595c7 jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb2980bb xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb713e6d sk_filter_release_rcu +EXPORT_SYMBOL vmlinux 0xbb7ff62a sock_wake_async +EXPORT_SYMBOL vmlinux 0xbb801ccf journal_forget +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbbaae1ae tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0xbbb15255 idr_init +EXPORT_SYMBOL vmlinux 0xbbd092fc inet6_ioctl +EXPORT_SYMBOL vmlinux 0xbbdeb92d mntget +EXPORT_SYMBOL vmlinux 0xbbe71d23 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0xbbf8ddeb udp_seq_open +EXPORT_SYMBOL vmlinux 0xbc1afedf up_write +EXPORT_SYMBOL vmlinux 0xbc2031de acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0xbc2990cf sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0xbc59d55a pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0xbc5b5db7 generic_show_options +EXPORT_SYMBOL vmlinux 0xbca91732 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0xbcbed383 bdi_register +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbceb5f92 skb_checksum +EXPORT_SYMBOL vmlinux 0xbcf6fea5 serio_reconnect +EXPORT_SYMBOL vmlinux 0xbcfa03cb tcp_shutdown +EXPORT_SYMBOL vmlinux 0xbd06ee0c d_instantiate +EXPORT_SYMBOL vmlinux 0xbd1d57a8 default_llseek +EXPORT_SYMBOL vmlinux 0xbd51245c journal_force_commit +EXPORT_SYMBOL vmlinux 0xbd5ddf87 pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0xbd9b74b6 journal_flush +EXPORT_SYMBOL vmlinux 0xbda328ee splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0xbdba6411 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xbdbe7378 cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xbdd2d1f7 journal_abort +EXPORT_SYMBOL vmlinux 0xbe0e5118 nla_memcmp +EXPORT_SYMBOL vmlinux 0xbe0edeca tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0xbe254e92 param_set_ushort +EXPORT_SYMBOL vmlinux 0xbe2c0274 add_timer +EXPORT_SYMBOL vmlinux 0xbe4be0b6 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0xbe589a5e alloc_fcdev +EXPORT_SYMBOL vmlinux 0xbe8c37d9 intel_scu_ipc_simple_command +EXPORT_SYMBOL vmlinux 0xbec25438 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xbec30d05 x86_match_cpu +EXPORT_SYMBOL vmlinux 0xbed4e349 sock_no_getname +EXPORT_SYMBOL vmlinux 0xbedb36dd ns_capable +EXPORT_SYMBOL vmlinux 0xbee90f2f __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbef4c2b5 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0xbf0b0d4d swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0xbf244634 sk_wait_data +EXPORT_SYMBOL vmlinux 0xbf2a816a blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0xbf3cf662 agp_put_bridge +EXPORT_SYMBOL vmlinux 0xbf4d4bb9 acpi_bios_error +EXPORT_SYMBOL vmlinux 0xbf7718a5 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8b39e9 isapnp_present +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbf9f7a2b input_set_keycode +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfc407b4 param_ops_bint +EXPORT_SYMBOL vmlinux 0xbfc7531d __dquot_transfer +EXPORT_SYMBOL vmlinux 0xbfe4784c efi +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xbfefc592 input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0xbffa5684 devm_ioport_map +EXPORT_SYMBOL vmlinux 0xc00a9a89 mem_map +EXPORT_SYMBOL vmlinux 0xc00c63ae mdiobus_free +EXPORT_SYMBOL vmlinux 0xc01b8050 unbind_con_driver +EXPORT_SYMBOL vmlinux 0xc01cf848 _raw_read_lock +EXPORT_SYMBOL vmlinux 0xc01eed33 __copy_from_user_ll_nozero +EXPORT_SYMBOL vmlinux 0xc030c4db key_task_permission +EXPORT_SYMBOL vmlinux 0xc05a6012 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xc05dcbf3 __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0xc05f5366 ilookup5 +EXPORT_SYMBOL vmlinux 0xc0603e8f starget_for_each_device +EXPORT_SYMBOL vmlinux 0xc068440e __kfifo_alloc +EXPORT_SYMBOL vmlinux 0xc06bc475 inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xc06c5df6 scsi_device_resume +EXPORT_SYMBOL vmlinux 0xc06cc4d9 alloc_file +EXPORT_SYMBOL vmlinux 0xc0763484 rfkill_blocked +EXPORT_SYMBOL vmlinux 0xc07e3fe7 simple_setattr +EXPORT_SYMBOL vmlinux 0xc0823e4c twl_i2c_write +EXPORT_SYMBOL vmlinux 0xc09d2402 unregister_console +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0a8ff16 acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0xc0d1329c dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0xc0d6bac8 fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0xc0e3e4c4 sock_no_socketpair +EXPORT_SYMBOL vmlinux 0xc0e4943b __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xc0ed7095 __scm_send +EXPORT_SYMBOL vmlinux 0xc0edb1fd netpoll_print_options +EXPORT_SYMBOL vmlinux 0xc1132663 agp_generic_enable +EXPORT_SYMBOL vmlinux 0xc11d8093 iov_shorten +EXPORT_SYMBOL vmlinux 0xc12ec3a6 dns_query +EXPORT_SYMBOL vmlinux 0xc13d5a8e blk_integrity_register +EXPORT_SYMBOL vmlinux 0xc1538825 acpi_root_dir +EXPORT_SYMBOL vmlinux 0xc16c5746 jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0xc1708e98 mii_check_media +EXPORT_SYMBOL vmlinux 0xc177c669 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xc1930e88 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0xc1aa64a5 blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0xc1b39a82 put_io_context +EXPORT_SYMBOL vmlinux 0xc1c2dd09 __hw_addr_flush +EXPORT_SYMBOL vmlinux 0xc1d93366 blk_peek_request +EXPORT_SYMBOL vmlinux 0xc1eeb87a mutex_trylock +EXPORT_SYMBOL vmlinux 0xc1f2f510 input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0xc1f36689 mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0xc21d0d0a dev_uc_unsync +EXPORT_SYMBOL vmlinux 0xc22b50ad param_set_bint +EXPORT_SYMBOL vmlinux 0xc232b6cb skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0xc2343534 alloc_fddidev +EXPORT_SYMBOL vmlinux 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc280a525 __copy_from_user_ll +EXPORT_SYMBOL vmlinux 0xc293a804 proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0xc2b0f85b tcf_exts_dump +EXPORT_SYMBOL vmlinux 0xc2c2de35 pci_find_bus +EXPORT_SYMBOL vmlinux 0xc2d632fb iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0xc2d711e1 krealloc +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2f9c045 timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xc3126d7e devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0xc33b9924 add_disk +EXPORT_SYMBOL vmlinux 0xc353a56a amd_northbridges +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3c448fb backlight_force_update +EXPORT_SYMBOL vmlinux 0xc3ce67ec genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0xc3cf8c88 tty_hangup +EXPORT_SYMBOL vmlinux 0xc3e2001d seq_open +EXPORT_SYMBOL vmlinux 0xc3fa6a59 memchr +EXPORT_SYMBOL vmlinux 0xc4014933 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc41e8f7a wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0xc41f0516 node_states +EXPORT_SYMBOL vmlinux 0xc44acc81 unmap_mapping_range +EXPORT_SYMBOL vmlinux 0xc4554217 up +EXPORT_SYMBOL vmlinux 0xc48257b7 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xc48f7040 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc49fa2c8 rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0xc4acf313 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0xc4c91229 inet_frag_destroy +EXPORT_SYMBOL vmlinux 0xc4d3fbf1 tcf_em_register +EXPORT_SYMBOL vmlinux 0xc50f0e22 page_address +EXPORT_SYMBOL vmlinux 0xc5189315 ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xc536ea3e napi_gro_flush +EXPORT_SYMBOL vmlinux 0xc54eea54 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc5737d73 dma_alloc_from_coherent +EXPORT_SYMBOL vmlinux 0xc57ab7bc proc_dostring +EXPORT_SYMBOL vmlinux 0xc58bfdc5 arp_xmit +EXPORT_SYMBOL vmlinux 0xc5a49397 migrate_page +EXPORT_SYMBOL vmlinux 0xc5ac4aa4 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0xc6013534 dev_uc_add +EXPORT_SYMBOL vmlinux 0xc6028dd6 __napi_schedule +EXPORT_SYMBOL vmlinux 0xc631580a console_unlock +EXPORT_SYMBOL vmlinux 0xc63cc125 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0xc6645b42 mempool_create_node +EXPORT_SYMBOL vmlinux 0xc66deb02 blk_get_request +EXPORT_SYMBOL vmlinux 0xc68673d7 blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0xc6b23120 intel_scu_ipc_iowrite16 +EXPORT_SYMBOL vmlinux 0xc6cb5a5b __bforget +EXPORT_SYMBOL vmlinux 0xc6cbbc89 capable +EXPORT_SYMBOL vmlinux 0xc6fbfca6 inet_csk_accept +EXPORT_SYMBOL vmlinux 0xc702156b param_get_ushort +EXPORT_SYMBOL vmlinux 0xc70630ad km_new_mapping +EXPORT_SYMBOL vmlinux 0xc70e559f jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0xc713e520 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0xc718d1a3 dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xc71a7b27 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc728656d km_state_expired +EXPORT_SYMBOL vmlinux 0xc7324500 skb_dst_set_noref +EXPORT_SYMBOL vmlinux 0xc73c775f input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0xc74e26f8 security_path_link +EXPORT_SYMBOL vmlinux 0xc768de19 cpu_all_bits +EXPORT_SYMBOL vmlinux 0xc781bd9f rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc79c3892 pm860x_reg_write +EXPORT_SYMBOL vmlinux 0xc7a129e8 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc7a9f929 pagecache_write_end +EXPORT_SYMBOL vmlinux 0xc7d45a58 d_find_any_alias +EXPORT_SYMBOL vmlinux 0xc7dfe91b dst_discard +EXPORT_SYMBOL vmlinux 0xc7eb92ef truncate_pagecache +EXPORT_SYMBOL vmlinux 0xc7ec6c27 strspn +EXPORT_SYMBOL vmlinux 0xc80bb7c4 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xc80f5f82 vfs_read +EXPORT_SYMBOL vmlinux 0xc82385da __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0xc8276a79 nf_hooks_needed +EXPORT_SYMBOL vmlinux 0xc8402e62 find_get_page +EXPORT_SYMBOL vmlinux 0xc84a0a7e seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0xc84bf53a i2c_register_driver +EXPORT_SYMBOL vmlinux 0xc862cc5b kill_bdev +EXPORT_SYMBOL vmlinux 0xc86a677b pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0xc86ba3ac pci_enable_obff +EXPORT_SYMBOL vmlinux 0xc87823bf twl_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xc88d712c elv_abort_queue +EXPORT_SYMBOL vmlinux 0xc896f317 find_vma +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc8a4381f generic_write_sync +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8b8e960 sock_no_listen +EXPORT_SYMBOL vmlinux 0xc8b9484a tcp_proc_register +EXPORT_SYMBOL vmlinux 0xc8d5a81e input_release_device +EXPORT_SYMBOL vmlinux 0xc8ed98dc deactivate_super +EXPORT_SYMBOL vmlinux 0xc94ac0fa scsi_remove_host +EXPORT_SYMBOL vmlinux 0xc965b5b6 irq_to_desc +EXPORT_SYMBOL vmlinux 0xc96a57bd neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0xc9752fa8 console_stop +EXPORT_SYMBOL vmlinux 0xc979f16f km_policy_notify +EXPORT_SYMBOL vmlinux 0xc97d61ca __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0xc98a3b22 udp_proc_register +EXPORT_SYMBOL vmlinux 0xc9921a6e mntput +EXPORT_SYMBOL vmlinux 0xc996d097 del_timer +EXPORT_SYMBOL vmlinux 0xc99e2a55 twl_rev +EXPORT_SYMBOL vmlinux 0xc9c64dd9 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0xc9d94ff1 iterate_mounts +EXPORT_SYMBOL vmlinux 0xca5967e3 vm_stat +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xca9360b5 rb_next +EXPORT_SYMBOL vmlinux 0xcaae4b21 __lru_cache_add +EXPORT_SYMBOL vmlinux 0xcad23914 audit_log_task_info +EXPORT_SYMBOL vmlinux 0xcae9f2a8 inet6_protos +EXPORT_SYMBOL vmlinux 0xcafcec62 dquot_get_dqinfo +EXPORT_SYMBOL vmlinux 0xcb0288ea ledtrig_cpu +EXPORT_SYMBOL vmlinux 0xcb07f41d unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xcb21a8b3 dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0xcb29cca1 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0xcb3b6211 max8925_reg_read +EXPORT_SYMBOL vmlinux 0xcb420861 _dev_info +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcbba481b handle_edge_irq +EXPORT_SYMBOL vmlinux 0xcbbd8044 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0xcbc74773 may_umount +EXPORT_SYMBOL vmlinux 0xcbc9557f unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xcbcafc1b kfree_skb +EXPORT_SYMBOL vmlinux 0xcbe3a0b9 d_path +EXPORT_SYMBOL vmlinux 0xcc07cd74 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0xcc198bc8 tty_vhangup +EXPORT_SYMBOL vmlinux 0xcc21e0e4 ip_defrag +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc37f55c blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xcc4d1bfb atomic64_read_cx8 +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc549f3e register_netdevice +EXPORT_SYMBOL vmlinux 0xcc5b27b5 acpi_extract_package +EXPORT_SYMBOL vmlinux 0xcc61f45a mfd_add_devices +EXPORT_SYMBOL vmlinux 0xcc701479 mmc_can_discard +EXPORT_SYMBOL vmlinux 0xcc72a398 skb_unlink +EXPORT_SYMBOL vmlinux 0xcc7e1d03 vfs_readlink +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xcc8a6dc4 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0xcc94cc28 load_nls +EXPORT_SYMBOL vmlinux 0xcc9854c7 pcim_iomap +EXPORT_SYMBOL vmlinux 0xccb466a8 bio_map_user +EXPORT_SYMBOL vmlinux 0xccc21f5e input_get_new_minor +EXPORT_SYMBOL vmlinux 0xccc32113 padata_add_cpu +EXPORT_SYMBOL vmlinux 0xccc92511 pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0xccc9f5f1 __destroy_inode +EXPORT_SYMBOL vmlinux 0xccd5683f thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0xccee136b kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0xccff6aa6 read_cache_pages +EXPORT_SYMBOL vmlinux 0xcd279169 nla_find +EXPORT_SYMBOL vmlinux 0xcd28ac12 __kfree_skb +EXPORT_SYMBOL vmlinux 0xcd76c5bb mutex_unlock +EXPORT_SYMBOL vmlinux 0xcd7780d5 ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xcd872dc4 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0xcdd0317b blk_init_tags +EXPORT_SYMBOL vmlinux 0xcdd35a9c genphy_read_status +EXPORT_SYMBOL vmlinux 0xcdd881a3 dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0xcdde88fe thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0xcdde942f dmam_pool_create +EXPORT_SYMBOL vmlinux 0xcde172ac radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce1f5873 kobject_add +EXPORT_SYMBOL vmlinux 0xce2840e7 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0xce2a8a98 pneigh_lookup +EXPORT_SYMBOL vmlinux 0xce449a90 input_unregister_handler +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce6a0449 tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0xce707de6 tty_port_destroy +EXPORT_SYMBOL vmlinux 0xce7770b8 blk_get_queue +EXPORT_SYMBOL vmlinux 0xce960621 path_put +EXPORT_SYMBOL vmlinux 0xcea36d3a dma_release_from_coherent +EXPORT_SYMBOL vmlinux 0xcec6a5fc pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0xcef51982 kstrtou16 +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xceffe0ce tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0xcf0ba4cd mmc_free_host +EXPORT_SYMBOL vmlinux 0xcf0f9666 backlight_device_register +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf275513 simple_readpage +EXPORT_SYMBOL vmlinux 0xcf3762fe generic_error_remove_page +EXPORT_SYMBOL vmlinux 0xcf53237c inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xcf58122e scsi_allocate_command +EXPORT_SYMBOL vmlinux 0xcf61e6d7 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0xcf63860d request_firmware +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcfe05d4d register_kmmio_probe +EXPORT_SYMBOL vmlinux 0xd016d15e unlock_buffer +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd01b07ab dmam_declare_coherent_memory +EXPORT_SYMBOL vmlinux 0xd04a86b1 __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0xd068d5ec make_bad_inode +EXPORT_SYMBOL vmlinux 0xd0720a17 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0a91bab skip_spaces +EXPORT_SYMBOL vmlinux 0xd0af7386 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0xd0d42c42 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xd0d8621b strlen +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0f0d945 down_read +EXPORT_SYMBOL vmlinux 0xd0f36f0d audit_log_format +EXPORT_SYMBOL vmlinux 0xd0f94d69 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0xd0fb7cd4 __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xd0fe3111 mpage_readpage +EXPORT_SYMBOL vmlinux 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL vmlinux 0xd119ebde tcp_splice_read +EXPORT_SYMBOL vmlinux 0xd11c0dc1 __kernel_param_unlock +EXPORT_SYMBOL vmlinux 0xd126d86c tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0xd13d357e eth_change_mtu +EXPORT_SYMBOL vmlinux 0xd1446a71 current_task +EXPORT_SYMBOL vmlinux 0xd14e1d95 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0xd1515064 cdev_add +EXPORT_SYMBOL vmlinux 0xd1641961 tcf_exts_change +EXPORT_SYMBOL vmlinux 0xd1780ea5 blk_start_request +EXPORT_SYMBOL vmlinux 0xd1816f32 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0xd181d1e1 processors +EXPORT_SYMBOL vmlinux 0xd18989b3 pci_get_class +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd196c9be kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0xd1c114dc tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0xd1e78ccd tcp_ioctl +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd220cf8a jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0xd2329de3 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0xd2370406 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0xd24cab3a dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd2559d0f mmc_card_awake +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd266efe7 mempool_create +EXPORT_SYMBOL vmlinux 0xd27b25dd blk_check_plugged +EXPORT_SYMBOL vmlinux 0xd2853331 simple_open +EXPORT_SYMBOL vmlinux 0xd28d080f genl_register_mc_group +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2b104ea add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xd2b2bf8b blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xd2ce7cac xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0xd2e6a582 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0xd33cfc50 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xd35e249a _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0xd383ffba abx500_register_ops +EXPORT_SYMBOL vmlinux 0xd3d3a477 posix_acl_init +EXPORT_SYMBOL vmlinux 0xd3d8407f pci_target_state +EXPORT_SYMBOL vmlinux 0xd3dcab0b flex_array_alloc +EXPORT_SYMBOL vmlinux 0xd4049e56 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0xd40b872c phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0xd40ea064 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0xd4157b47 bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xd41f762a xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0xd43a0697 alloc_disk +EXPORT_SYMBOL vmlinux 0xd452e094 journal_init_dev +EXPORT_SYMBOL vmlinux 0xd476b2ee mmc_gpio_free_cd +EXPORT_SYMBOL vmlinux 0xd4804504 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0xd48af0e6 vlan_vid_del +EXPORT_SYMBOL vmlinux 0xd48e46cb mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0xd4a7e074 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0xd4c3b174 printk_emit +EXPORT_SYMBOL vmlinux 0xd4eb5efd bd_set_size +EXPORT_SYMBOL vmlinux 0xd4ffa484 acpi_initialize_subsystem +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd52ced0b pci_write_vpd +EXPORT_SYMBOL vmlinux 0xd543bdda dquot_quotactl_ops +EXPORT_SYMBOL vmlinux 0xd54a70a2 from_kqid_munged +EXPORT_SYMBOL vmlinux 0xd55ce1ec dm_io +EXPORT_SYMBOL vmlinux 0xd5639c91 set_blocksize +EXPORT_SYMBOL vmlinux 0xd5b1376d register_shrinker +EXPORT_SYMBOL vmlinux 0xd5c0a8ed sock_i_uid +EXPORT_SYMBOL vmlinux 0xd5cac943 unregister_netdev +EXPORT_SYMBOL vmlinux 0xd5dc4be8 unregister_qdisc +EXPORT_SYMBOL vmlinux 0xd5df241d ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0xd5e6e5e4 first_ec +EXPORT_SYMBOL vmlinux 0xd5f2172f del_timer_sync +EXPORT_SYMBOL vmlinux 0xd5f400dc sg_miter_next +EXPORT_SYMBOL vmlinux 0xd5ff21e9 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0xd60b5330 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0xd611f50c load_nls_default +EXPORT_SYMBOL vmlinux 0xd616683a ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd63ec5d2 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0xd6477688 skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0xd648e564 fb_match_mode +EXPORT_SYMBOL vmlinux 0xd654984f take_over_console +EXPORT_SYMBOL vmlinux 0xd6a66c2c blk_rq_init +EXPORT_SYMBOL vmlinux 0xd6a89931 skb_find_text +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6c4336a tcf_action_exec +EXPORT_SYMBOL vmlinux 0xd6de9a0a jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd7265d22 ps2_begin_command +EXPORT_SYMBOL vmlinux 0xd74f0da5 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0xd75c79df smp_call_function +EXPORT_SYMBOL vmlinux 0xd75cc8a0 sync_blockdev +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd78b6795 create_proc_entry +EXPORT_SYMBOL vmlinux 0xd78e79ca scsicam_bios_param +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7bd3af2 add_wait_queue +EXPORT_SYMBOL vmlinux 0xd7c7f37d pci_read_vpd +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7e4c1e8 eisa_bus_type +EXPORT_SYMBOL vmlinux 0xd7e56a4e simple_strtoll +EXPORT_SYMBOL vmlinux 0xd7ea7094 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xd80e4046 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xd81190a3 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0xd81985a8 netdev_set_bond_master +EXPORT_SYMBOL vmlinux 0xd82037e7 cont_write_begin +EXPORT_SYMBOL vmlinux 0xd82f0d8a blk_recount_segments +EXPORT_SYMBOL vmlinux 0xd85833cb __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0xd85df7d4 boot_cpu_data +EXPORT_SYMBOL vmlinux 0xd863b093 textsearch_unregister +EXPORT_SYMBOL vmlinux 0xd86f3b7f sock_release +EXPORT_SYMBOL vmlinux 0xd870d859 unregister_md_personality +EXPORT_SYMBOL vmlinux 0xd873b568 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0xd898efe8 scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8a8f7cb blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0xd8c4a164 vfs_getattr +EXPORT_SYMBOL vmlinux 0xd8d2558a inet_frag_find +EXPORT_SYMBOL vmlinux 0xd8d8af05 xfrm_state_update +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd92329e3 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0xd92afabe bitmap_clear +EXPORT_SYMBOL vmlinux 0xd938c5a3 blkdev_put +EXPORT_SYMBOL vmlinux 0xd947b889 sock_no_connect +EXPORT_SYMBOL vmlinux 0xd9515343 ndo_dflt_bridge_getlink +EXPORT_SYMBOL vmlinux 0xd969b2c7 amd_e400_c1e_detected +EXPORT_SYMBOL vmlinux 0xd9838915 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd98d08c7 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0xd990546c lg_local_unlock_cpu +EXPORT_SYMBOL vmlinux 0xd99ead7f put_page +EXPORT_SYMBOL vmlinux 0xd9a9bb30 getname +EXPORT_SYMBOL vmlinux 0xd9e61fcb qid_valid +EXPORT_SYMBOL vmlinux 0xda08c0d7 pcibios_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda117f99 input_grab_device +EXPORT_SYMBOL vmlinux 0xda1732ee pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0xda18f45c agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0xda1f4c9e dquot_operations +EXPORT_SYMBOL vmlinux 0xda35b601 bdi_register_dev +EXPORT_SYMBOL vmlinux 0xda3d10a8 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0xda4465d0 sk_prot_clear_portaddr_nulls +EXPORT_SYMBOL vmlinux 0xda519df2 idr_find +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xda8b50db tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0xda8fd495 isapnp_write_byte +EXPORT_SYMBOL vmlinux 0xdaa2742d secpath_dup +EXPORT_SYMBOL vmlinux 0xdaa57ec3 totalhigh_pages +EXPORT_SYMBOL vmlinux 0xdac94858 pci_get_subsys +EXPORT_SYMBOL vmlinux 0xdb55470d devm_usb_put_phy +EXPORT_SYMBOL vmlinux 0xdb68bbad rfkill_destroy +EXPORT_SYMBOL vmlinux 0xdb760f52 __kfifo_free +EXPORT_SYMBOL vmlinux 0xdb7a5b8e jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0xdb864d65 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0xdb98bf62 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0xdba362dc cdrom_release +EXPORT_SYMBOL vmlinux 0xdbaa08ae pagevec_lookup +EXPORT_SYMBOL vmlinux 0xdbab295a bio_split +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbe26b81 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0xdbf43d82 cdev_alloc +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc2c9ad4 neigh_lookup +EXPORT_SYMBOL vmlinux 0xdc3fcbc9 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0xdc4042dd inet_frags_fini +EXPORT_SYMBOL vmlinux 0xdc497c47 i2c_master_send +EXPORT_SYMBOL vmlinux 0xdc570f62 lg_global_unlock +EXPORT_SYMBOL vmlinux 0xdc57f532 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0xdc587256 sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0xdc67700b security_path_unlink +EXPORT_SYMBOL vmlinux 0xdc6d41cf vfs_fstatat +EXPORT_SYMBOL vmlinux 0xdc78a859 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0xdc7e0bd3 d_splice_alias +EXPORT_SYMBOL vmlinux 0xdc8ed499 touch_atime +EXPORT_SYMBOL vmlinux 0xdc93e3ae mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0xdca0a14d dev_printk_emit +EXPORT_SYMBOL vmlinux 0xdca6f079 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0xdcbc028d jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xdcca4149 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0xdcddf5c2 scsi_execute_req +EXPORT_SYMBOL vmlinux 0xdcde193f xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0xdd0a2ba2 strlcat +EXPORT_SYMBOL vmlinux 0xdd1a2871 down +EXPORT_SYMBOL vmlinux 0xdd1c65f6 blk_finish_plug +EXPORT_SYMBOL vmlinux 0xdd3a0857 pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xdd3bc099 register_gifconf +EXPORT_SYMBOL vmlinux 0xdd4a5569 param_get_byte +EXPORT_SYMBOL vmlinux 0xdd5e6feb serio_unregister_driver +EXPORT_SYMBOL vmlinux 0xdd6cb3d2 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0xdd73c886 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0xdd83aa64 mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0xdde65d6e __inode_permission +EXPORT_SYMBOL vmlinux 0xde15a93c md_register_thread +EXPORT_SYMBOL vmlinux 0xde16dc16 tboot +EXPORT_SYMBOL vmlinux 0xde39b2bf ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0xde3c982c vfs_link +EXPORT_SYMBOL vmlinux 0xde3fa839 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0xde4d718c netdev_alert +EXPORT_SYMBOL vmlinux 0xde50b4cb phy_register_fixup +EXPORT_SYMBOL vmlinux 0xde8da256 max8925_bulk_write +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0xdeabc66f kmap_atomic_to_page +EXPORT_SYMBOL vmlinux 0xdefc8955 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf2c2742 rb_last +EXPORT_SYMBOL vmlinux 0xdf48a0eb flex_array_put +EXPORT_SYMBOL vmlinux 0xdf589b51 sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf6e2458 prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0xdf89812d page_follow_link_light +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf9b9d0a mdiobus_register +EXPORT_SYMBOL vmlinux 0xdfc1618c nobh_write_end +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfe139f8 tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0xdfe1fc7a xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0xdfe7d36f pipe_unlock +EXPORT_SYMBOL vmlinux 0xdff4f5ad acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0xe0153ae8 input_unregister_handle +EXPORT_SYMBOL vmlinux 0xe04f7caa dm_read_arg_group +EXPORT_SYMBOL vmlinux 0xe06141e9 security_sk_clone +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe07f4ca2 netpoll_parse_options +EXPORT_SYMBOL vmlinux 0xe08a8c1b md_write_start +EXPORT_SYMBOL vmlinux 0xe08d630c init_special_inode +EXPORT_SYMBOL vmlinux 0xe0965f23 do_SAK +EXPORT_SYMBOL vmlinux 0xe0991ed1 d_obtain_alias +EXPORT_SYMBOL vmlinux 0xe0a16a20 intel_scu_ipc_i2c_cntrl +EXPORT_SYMBOL vmlinux 0xe0a46b2e pci_reenable_device +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b09dc8 devm_usb_get_phy +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0b7fbdd vm_mmap +EXPORT_SYMBOL vmlinux 0xe0ba53f4 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0xe0bfac44 kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0xe10a8f8a sock_no_poll +EXPORT_SYMBOL vmlinux 0xe1114669 inet_ioctl +EXPORT_SYMBOL vmlinux 0xe1288988 pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe13fb82c __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0xe1589da2 generic_removexattr +EXPORT_SYMBOL vmlinux 0xe15b28d1 netlink_broadcast +EXPORT_SYMBOL vmlinux 0xe1727d69 dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe18302c3 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0xe1d9ea86 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0xe1ef9405 elevator_change +EXPORT_SYMBOL vmlinux 0xe1f9af9d tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0xe1fa85cd vfsmount_lock +EXPORT_SYMBOL vmlinux 0xe200d2d5 param_get_uint +EXPORT_SYMBOL vmlinux 0xe200f872 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0xe2034333 acpi_evaluate_hotplug_ost +EXPORT_SYMBOL vmlinux 0xe227084c __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xe231bc4d scsi_report_opcode +EXPORT_SYMBOL vmlinux 0xe231f461 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe267f6b3 acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xe26c2128 cancel_dirty_page +EXPORT_SYMBOL vmlinux 0xe2762f25 bio_integrity_prep +EXPORT_SYMBOL vmlinux 0xe280709c pnp_stop_dev +EXPORT_SYMBOL vmlinux 0xe29c0b90 vga_get +EXPORT_SYMBOL vmlinux 0xe2bd038d __inet6_hash +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2e8065e memdup_user +EXPORT_SYMBOL vmlinux 0xe2f5580f dma_ops +EXPORT_SYMBOL vmlinux 0xe2fae716 kmemdup +EXPORT_SYMBOL vmlinux 0xe304bfc9 vfs_follow_link +EXPORT_SYMBOL vmlinux 0xe319eb24 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0xe3210892 __secpath_destroy +EXPORT_SYMBOL vmlinux 0xe3977394 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xe3b6da53 generic_write_checks +EXPORT_SYMBOL vmlinux 0xe3bca2f3 contig_page_data +EXPORT_SYMBOL vmlinux 0xe3d6f284 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0xe3e5d5bb ppp_input_error +EXPORT_SYMBOL vmlinux 0xe3ef2b9e ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0xe3f4453c dquot_free_inode +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe3ff674e max8998_update_reg +EXPORT_SYMBOL vmlinux 0xe404f587 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xe408390b tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0xe409c66b vc_resize +EXPORT_SYMBOL vmlinux 0xe418d162 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0xe41a8077 seq_lseek +EXPORT_SYMBOL vmlinux 0xe429aa42 acpi_pm_device_run_wake +EXPORT_SYMBOL vmlinux 0xe430969a vfs_fsync +EXPORT_SYMBOL vmlinux 0xe44889a4 dquot_alloc +EXPORT_SYMBOL vmlinux 0xe45f60d8 __wake_up +EXPORT_SYMBOL vmlinux 0xe465e38b neigh_ifdown +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe489ea39 tcp_valid_rtt_meas +EXPORT_SYMBOL vmlinux 0xe49924aa __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xe4bd50b1 tcf_hash_create +EXPORT_SYMBOL vmlinux 0xe4c16404 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0xe4c5984c mark_page_accessed +EXPORT_SYMBOL vmlinux 0xe4ce438f put_tty_driver +EXPORT_SYMBOL vmlinux 0xe4cea742 scsi_remove_target +EXPORT_SYMBOL vmlinux 0xe4d35c72 uart_get_divisor +EXPORT_SYMBOL vmlinux 0xe4e9aa5f journal_set_features +EXPORT_SYMBOL vmlinux 0xe4f922cd bprm_change_interp +EXPORT_SYMBOL vmlinux 0xe509c5d8 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0xe50f904f intel_scu_ipc_ioread16 +EXPORT_SYMBOL vmlinux 0xe5122890 flow_cache_genid +EXPORT_SYMBOL vmlinux 0xe520204a set_pages_array_wb +EXPORT_SYMBOL vmlinux 0xe5208918 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe530d757 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0xe53fa9b6 devm_ioremap +EXPORT_SYMBOL vmlinux 0xe572245a phy_disconnect +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe599b536 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0xe59a0119 proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0xe59c4763 tty_port_open +EXPORT_SYMBOL vmlinux 0xe5a781d3 request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5d95985 param_ops_ulong +EXPORT_SYMBOL vmlinux 0xe5dc7b2a __free_pages +EXPORT_SYMBOL vmlinux 0xe5ec8084 max8925_reg_write +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5fdb120 dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0xe612cbf2 key_put +EXPORT_SYMBOL vmlinux 0xe645774d devm_iounmap +EXPORT_SYMBOL vmlinux 0xe64d98fe rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xe67e95f0 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe6a5bc2b vfs_statfs +EXPORT_SYMBOL vmlinux 0xe6b3fe21 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xe6c08e41 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0xe6ebc016 key_create_or_update +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe7594a2b pcie_set_readrq +EXPORT_SYMBOL vmlinux 0xe76065bf dump_write +EXPORT_SYMBOL vmlinux 0xe7722171 flex_array_free +EXPORT_SYMBOL vmlinux 0xe77c6b8a linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0xe781b5f6 intel_scu_ipc_readv +EXPORT_SYMBOL vmlinux 0xe78a68d2 write_cache_pages +EXPORT_SYMBOL vmlinux 0xe795d321 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0xe798d71c cpu_core_map +EXPORT_SYMBOL vmlinux 0xe79ea1c9 unlazy_fpu +EXPORT_SYMBOL vmlinux 0xe7a42a55 skb_queue_tail +EXPORT_SYMBOL vmlinux 0xe7a4b76a update_devfreq +EXPORT_SYMBOL vmlinux 0xe7a664c4 nf_hooks +EXPORT_SYMBOL vmlinux 0xe7a696c5 pnpbios_protocol +EXPORT_SYMBOL vmlinux 0xe7a81967 audit_log_secctx +EXPORT_SYMBOL vmlinux 0xe7ad048f ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0xe7b340ec pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0xe7b4ae72 pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xe7c1f9a3 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0xe7d3d87b ip_ct_attach +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe7d97acd bioset_free +EXPORT_SYMBOL vmlinux 0xe7e9e23f block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xe7f3be00 bio_copy_user +EXPORT_SYMBOL vmlinux 0xe804ef89 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe812101c vfs_readv +EXPORT_SYMBOL vmlinux 0xe827d25d tty_kref_put +EXPORT_SYMBOL vmlinux 0xe83cbfaa poll_initwait +EXPORT_SYMBOL vmlinux 0xe86d1a4d grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xe86d34c1 journal_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe8876dc6 dev_mc_init +EXPORT_SYMBOL vmlinux 0xe88e7a93 lg_global_lock +EXPORT_SYMBOL vmlinux 0xe88ff52c blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0xe8943abd dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0xe898281e start_tty +EXPORT_SYMBOL vmlinux 0xe8b63ace radix_tree_range_tag_if_tagged +EXPORT_SYMBOL vmlinux 0xe8b68849 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0xe8b87999 dma_sync_wait +EXPORT_SYMBOL vmlinux 0xe8bcaa4f file_sb_list_del +EXPORT_SYMBOL vmlinux 0xe8bea3bc qdisc_put_stab +EXPORT_SYMBOL vmlinux 0xe8cf6f1d set_pages_wb +EXPORT_SYMBOL vmlinux 0xe8d6604e clear_inode +EXPORT_SYMBOL vmlinux 0xe8dfeef2 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xe8f344a4 skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0xe8f5a58e netdev_state_change +EXPORT_SYMBOL vmlinux 0xe8fc2dd3 fb_set_var +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe927dce8 mb_cache_create +EXPORT_SYMBOL vmlinux 0xe9370e2b nf_register_hooks +EXPORT_SYMBOL vmlinux 0xe9495ac3 bdev_read_only +EXPORT_SYMBOL vmlinux 0xe94cf4a6 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0xe953ad39 scsi_scan_host +EXPORT_SYMBOL vmlinux 0xe953b21f get_next_ino +EXPORT_SYMBOL vmlinux 0xe95421d9 pci_dev_put +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe9b44748 sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0xe9c4c9aa unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xe9d5900f dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0xe9eeb543 arp_tbl +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea08d193 inet_getname +EXPORT_SYMBOL vmlinux 0xea101aee tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea614a28 __ethtool_get_settings +EXPORT_SYMBOL vmlinux 0xea781679 udp_proc_unregister +EXPORT_SYMBOL vmlinux 0xea7940ed input_register_handler +EXPORT_SYMBOL vmlinux 0xea7987f1 key_update +EXPORT_SYMBOL vmlinux 0xea7b8a44 acpi_install_interface +EXPORT_SYMBOL vmlinux 0xea7bc402 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xeaa45233 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xeac21afc d_set_d_op +EXPORT_SYMBOL vmlinux 0xeac862a8 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeae8a619 phy_stop +EXPORT_SYMBOL vmlinux 0xeaef9b82 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0xeb1f088e udplite_prot +EXPORT_SYMBOL vmlinux 0xeb27e8a6 get_gendisk +EXPORT_SYMBOL vmlinux 0xeb37101c audit_log_end +EXPORT_SYMBOL vmlinux 0xeb4ca795 __page_symlink +EXPORT_SYMBOL vmlinux 0xeb55a931 __kfifo_max_r +EXPORT_SYMBOL vmlinux 0xeba8fc64 ida_simple_remove +EXPORT_SYMBOL vmlinux 0xebb46b11 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0xebba957d jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0xebccf7ad inet_stream_ops +EXPORT_SYMBOL vmlinux 0xebdbe48c radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0xebe7c10e swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0xec15f00a tcp_cookie_generator +EXPORT_SYMBOL vmlinux 0xec1f6d71 registered_fb +EXPORT_SYMBOL vmlinux 0xec2c1801 d_add_ci +EXPORT_SYMBOL vmlinux 0xec39f75f neigh_direct_output +EXPORT_SYMBOL vmlinux 0xec4a1ae7 tcp_check_req +EXPORT_SYMBOL vmlinux 0xec4addb6 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0xec6206b9 mii_ethtool_gset +EXPORT_SYMBOL vmlinux 0xec911e99 dev_alloc_name +EXPORT_SYMBOL vmlinux 0xec9e98ae scsi_host_set_state +EXPORT_SYMBOL vmlinux 0xeca36315 security_path_chown +EXPORT_SYMBOL vmlinux 0xecb3a5e1 clocksource_register +EXPORT_SYMBOL vmlinux 0xecb721f1 try_wait_for_completion +EXPORT_SYMBOL vmlinux 0xecc76a1e tcp_v4_connect +EXPORT_SYMBOL vmlinux 0xeccd3e0c acpi_handle_printk +EXPORT_SYMBOL vmlinux 0xecd67cec schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0xecdf76c6 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xece784c2 rb_first +EXPORT_SYMBOL vmlinux 0xecf299cc scsi_print_command +EXPORT_SYMBOL vmlinux 0xecfcc864 blkdev_get +EXPORT_SYMBOL vmlinux 0xed10c751 ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xed5a6ff2 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0xed71bf1a tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0xed7e1295 gen_pool_create +EXPORT_SYMBOL vmlinux 0xed816650 d_validate +EXPORT_SYMBOL vmlinux 0xed93f29e __kunmap_atomic +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedb835c4 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xede2b586 jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0xee213b89 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee3c9283 page_readlink +EXPORT_SYMBOL vmlinux 0xee4c877a inet_put_port +EXPORT_SYMBOL vmlinux 0xee4db157 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0xee4de4ac lookup_bdev +EXPORT_SYMBOL vmlinux 0xee598448 __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xee63ea8f prepare_creds +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee846b5a dquot_enable +EXPORT_SYMBOL vmlinux 0xee95a2ed posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeba4fec tcp_child_process +EXPORT_SYMBOL vmlinux 0xeebc0c7e locks_mandatory_area +EXPORT_SYMBOL vmlinux 0xeec15ce3 blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0xeecee17a dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0xeeec9264 inet6_bind +EXPORT_SYMBOL vmlinux 0xeef855ee tcp_sendpage +EXPORT_SYMBOL vmlinux 0xef1d35b7 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0xef240630 padata_start +EXPORT_SYMBOL vmlinux 0xef2cad15 drop_nlink +EXPORT_SYMBOL vmlinux 0xef3fe614 pci_disable_msix +EXPORT_SYMBOL vmlinux 0xef871d22 pci_disable_ltr +EXPORT_SYMBOL vmlinux 0xef93d4e9 do_truncate +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xefaceb4b init_net +EXPORT_SYMBOL vmlinux 0xefb9d8f2 tty_port_tty_get +EXPORT_SYMBOL vmlinux 0xefc55975 sk_filter +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xefe900d5 d_lookup +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf0040079 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0xf00483f1 locks_init_lock +EXPORT_SYMBOL vmlinux 0xf01b5b0d mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0xf02d0af4 md_unregister_thread +EXPORT_SYMBOL vmlinux 0xf0553b99 igrab +EXPORT_SYMBOL vmlinux 0xf05ffa15 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf06a374e led_blink_set +EXPORT_SYMBOL vmlinux 0xf0886d33 agp_find_bridge +EXPORT_SYMBOL vmlinux 0xf0afc408 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0xf0b8960a udp_lib_unhash +EXPORT_SYMBOL vmlinux 0xf0bf5831 netif_device_attach +EXPORT_SYMBOL vmlinux 0xf0c44eb0 writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0xf0ce7d50 proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf100416a remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf12d331c lg_local_lock +EXPORT_SYMBOL vmlinux 0xf12f4870 fb_find_mode +EXPORT_SYMBOL vmlinux 0xf13136a1 sk_stream_error +EXPORT_SYMBOL vmlinux 0xf13feb57 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0xf141bf26 cancel_delayed_work +EXPORT_SYMBOL vmlinux 0xf176eab2 pci_enable_device +EXPORT_SYMBOL vmlinux 0xf17d7c28 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xf18142f2 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0xf18242e1 atomic64_set_cx8 +EXPORT_SYMBOL vmlinux 0xf189d96a journal_errno +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1a522cf input_get_keycode +EXPORT_SYMBOL vmlinux 0xf1b8b8a7 seq_path +EXPORT_SYMBOL vmlinux 0xf1b8ddca pskb_expand_head +EXPORT_SYMBOL vmlinux 0xf1bce0cb genphy_config_aneg +EXPORT_SYMBOL vmlinux 0xf1c1861a sock_init_data +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1deabf2 div64_u64 +EXPORT_SYMBOL vmlinux 0xf1e61a35 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1ee6398 netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0xf1faac3a _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0xf202c5cb radix_tree_insert +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf2194740 posix_lock_file +EXPORT_SYMBOL vmlinux 0xf21b83d7 tty_unlock +EXPORT_SYMBOL vmlinux 0xf22a7543 register_qdisc +EXPORT_SYMBOL vmlinux 0xf22bb63c kernel_accept +EXPORT_SYMBOL vmlinux 0xf2357254 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0xf23d0ddc wl12xx_get_platform_data +EXPORT_SYMBOL vmlinux 0xf23fcb99 __kfifo_in +EXPORT_SYMBOL vmlinux 0xf249d1fc spi_display_xfer_agreement +EXPORT_SYMBOL vmlinux 0xf259929c vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0xf2654354 writeback_in_progress +EXPORT_SYMBOL vmlinux 0xf277c848 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0xf28ed6e2 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf2a275d5 dmam_release_declared_memory +EXPORT_SYMBOL vmlinux 0xf2a2e0ad input_close_device +EXPORT_SYMBOL vmlinux 0xf2f0060c __frontswap_store +EXPORT_SYMBOL vmlinux 0xf30cb315 account_page_dirtied +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf32055e7 dev_base_lock +EXPORT_SYMBOL vmlinux 0xf3338ce2 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf336339b get_unmapped_area +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf33e38ab sock_no_accept +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf34d58f0 rt6_lookup +EXPORT_SYMBOL vmlinux 0xf3529967 simple_link +EXPORT_SYMBOL vmlinux 0xf37260ab _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0xf377cbd3 pipe_lock +EXPORT_SYMBOL vmlinux 0xf389fe60 __hw_addr_init +EXPORT_SYMBOL vmlinux 0xf3916987 global_cursor_default +EXPORT_SYMBOL vmlinux 0xf39676e4 lease_modify +EXPORT_SYMBOL vmlinux 0xf396cd21 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0xf3986b06 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0xf3a488c2 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0xf3b43f9c tcp_recvmsg +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3dbaaa6 idr_pre_get +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf4536cee sync_inode_metadata +EXPORT_SYMBOL vmlinux 0xf4588efc devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xf45a4e52 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4b25e6f unregister_framebuffer +EXPORT_SYMBOL vmlinux 0xf4b754fd acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0xf4bdbeb9 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0xf4de6279 splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0xf4e7585a skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf4f19e51 downgrade_write +EXPORT_SYMBOL vmlinux 0xf4fa7d09 locks_remove_posix +EXPORT_SYMBOL vmlinux 0xf502d273 acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0xf50df9d1 sock_register +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf5300659 dev_set_mac_address +EXPORT_SYMBOL vmlinux 0xf536d22e acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf54e7f90 skb_push +EXPORT_SYMBOL vmlinux 0xf557ca5c kobject_del +EXPORT_SYMBOL vmlinux 0xf573a7ff netdev_class_create_file +EXPORT_SYMBOL vmlinux 0xf5b10e67 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0xf5c05914 generic_segment_checks +EXPORT_SYMBOL vmlinux 0xf5c07569 mfd_cell_disable +EXPORT_SYMBOL vmlinux 0xf5eb1a72 journal_restart +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf5f435d9 read_dev_sector +EXPORT_SYMBOL vmlinux 0xf5fdb106 qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0xf6083749 blk_execute_rq +EXPORT_SYMBOL vmlinux 0xf6388c56 sysctl_ip_default_ttl +EXPORT_SYMBOL vmlinux 0xf64da2da jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0xf67a7276 fsnotify_put_group +EXPORT_SYMBOL vmlinux 0xf6b160bb bio_reset +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6bbd64c udp_ioctl +EXPORT_SYMBOL vmlinux 0xf6bf6e52 __nlmsg_put +EXPORT_SYMBOL vmlinux 0xf6e0fa4c __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xf6e733c9 may_umount_tree +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf7018436 tcp_close +EXPORT_SYMBOL vmlinux 0xf726d02f atomic64_add_unless_cx8 +EXPORT_SYMBOL vmlinux 0xf73402bb thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0xf74194db neigh_seq_next +EXPORT_SYMBOL vmlinux 0xf745cb16 atomic64_sub_return_cx8 +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf75bc434 files_lglock +EXPORT_SYMBOL vmlinux 0xf766e7ef jbd2_journal_start +EXPORT_SYMBOL vmlinux 0xf7680e2d pm860x_set_bits +EXPORT_SYMBOL vmlinux 0xf76a9dd7 scsi_register_interface +EXPORT_SYMBOL vmlinux 0xf785ccab ps2_end_command +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79f6139 dev_add_pack +EXPORT_SYMBOL vmlinux 0xf7a56ad4 stop_tty +EXPORT_SYMBOL vmlinux 0xf7bd881b xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0xf7bf18a1 submit_bio +EXPORT_SYMBOL vmlinux 0xf7c4482e __nla_reserve +EXPORT_SYMBOL vmlinux 0xf7e0996f netlink_ack +EXPORT_SYMBOL vmlinux 0xf7e37635 __wait_on_bit +EXPORT_SYMBOL vmlinux 0xf7e9e036 phy_init_eee +EXPORT_SYMBOL vmlinux 0xf7ffaddf default_file_splice_read +EXPORT_SYMBOL vmlinux 0xf803fe39 bitmap_set +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf81e3adb bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0xf825e1d7 read_cache_page_async +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf82ec573 rb_prev +EXPORT_SYMBOL vmlinux 0xf854f988 mmc_register_driver +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf890fe7f pm_idle +EXPORT_SYMBOL vmlinux 0xf8c1c90e genl_register_family +EXPORT_SYMBOL vmlinux 0xf8e21c44 uart_resume_port +EXPORT_SYMBOL vmlinux 0xf9045355 __f_setown +EXPORT_SYMBOL vmlinux 0xf9348cbc xz_dec_run +EXPORT_SYMBOL vmlinux 0xf940a328 __next_cpu +EXPORT_SYMBOL vmlinux 0xf94c4805 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0xf97456ea _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0xf9946197 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9e73082 scnprintf +EXPORT_SYMBOL vmlinux 0xfa25b193 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0xfa30957c mempool_free +EXPORT_SYMBOL vmlinux 0xfa368e23 ___pskb_trim +EXPORT_SYMBOL vmlinux 0xfa3ba846 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0xfaa9c990 mmc_hw_reset_check +EXPORT_SYMBOL vmlinux 0xfaab7626 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0xfac8865f sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0xfae67b1f cap_mmap_addr +EXPORT_SYMBOL vmlinux 0xfaf2f919 skb_pad +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb07604c inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0xfb0fa293 __block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xfb2f0c3c tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0xfb441d41 i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0xfb4c073d ppp_unit_number +EXPORT_SYMBOL vmlinux 0xfb4ec87c dm_register_target +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb745572 pid_task +EXPORT_SYMBOL vmlinux 0xfb77c916 pnp_device_detach +EXPORT_SYMBOL vmlinux 0xfb80c7a0 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0xfb8d7b76 cfb_copyarea +EXPORT_SYMBOL vmlinux 0xfb8e6f95 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0xfb9e0404 vfs_readdir +EXPORT_SYMBOL vmlinux 0xfba20b97 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0xfbaaf01e console_lock +EXPORT_SYMBOL vmlinux 0xfbbd96e4 seq_release +EXPORT_SYMBOL vmlinux 0xfbdb995e generic_file_direct_write +EXPORT_SYMBOL vmlinux 0xfbe3fdcf mutex_lock_killable +EXPORT_SYMBOL vmlinux 0xfbe6057b netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xfbe64609 inet_dgram_ops +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc35332f ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0xfc353e26 block_commit_write +EXPORT_SYMBOL vmlinux 0xfc3896a2 scsi_rescan_device +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc3ca901 set_nlink +EXPORT_SYMBOL vmlinux 0xfc562165 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xfc65459a kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0xfc6c39d9 security_d_instantiate +EXPORT_SYMBOL vmlinux 0xfc7f8982 tty_unlock_pair +EXPORT_SYMBOL vmlinux 0xfc872fd1 get_ibs_caps +EXPORT_SYMBOL vmlinux 0xfca89923 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0xfca9ce60 serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcaafbad kick_iocb +EXPORT_SYMBOL vmlinux 0xfcaafed3 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0xfcac0d40 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0xfcb550fa pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xfcc0c0b2 __scsi_add_device +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcda613e devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcf0bb3a filemap_fdatawait +EXPORT_SYMBOL vmlinux 0xfcf0da6f pcie_port_service_register +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd142da1 kset_unregister +EXPORT_SYMBOL vmlinux 0xfd18f79e tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xfd3033b0 mii_check_link +EXPORT_SYMBOL vmlinux 0xfd6293c2 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfd796090 tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfd846aeb get_user_pages +EXPORT_SYMBOL vmlinux 0xfd88cda0 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0xfda0dbe8 ftrace_print_hex_seq +EXPORT_SYMBOL vmlinux 0xfda3de66 arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0xfdb0ea41 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdbe0288 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0xfdee7d42 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe0147b7 eth_validate_addr +EXPORT_SYMBOL vmlinux 0xfe053f28 log_wait_commit +EXPORT_SYMBOL vmlinux 0xfe1d90f8 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0xfe4fc0f6 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe610ae3 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe85d57a check_disk_change +EXPORT_SYMBOL vmlinux 0xfe8de69d blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0xfe95ec1e __xfrm_init_state +EXPORT_SYMBOL vmlinux 0xfeae10f5 simple_transaction_get +EXPORT_SYMBOL vmlinux 0xfebe49ee netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0xfec6d9db arp_find +EXPORT_SYMBOL vmlinux 0xfedd0ad5 blk_delay_queue +EXPORT_SYMBOL vmlinux 0xfeedda2f tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff0cfd39 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff404c1e tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0xff480992 dump_fpu +EXPORT_SYMBOL vmlinux 0xff4e7575 pci_enable_msix +EXPORT_SYMBOL vmlinux 0xff5baf59 sock_no_mmap +EXPORT_SYMBOL vmlinux 0xff5fc40a mount_single +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff688cb5 key_validate +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xffc34f3f pci_set_power_state +EXPORT_SYMBOL vmlinux 0xffd237eb block_truncate_page +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffdb113f pnp_get_resource +EXPORT_SYMBOL vmlinux 0xffe5095d groups_free +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x56e7c1ea ablk_exit +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x67ad1fc2 ablk_set_key +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x74bbc0e0 ablk_init_common +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x88c661b1 ablk_init +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x8b6f8425 ablk_encrypt +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0xaf0c2f67 __ablk_encrypt +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0xd84dfe83 ablk_decrypt +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-i586 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x4e1e2d59 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x8bafda74 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x9bd6ff4e glue_ctr_crypt_final_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0xcb4de640 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0xf6521a10 glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-i586 0x28afd262 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-i586 0x6f068d90 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0158ccf1 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x033e6bb5 kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x03e8cf5c kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x05339358 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x05fe2f99 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0621db08 kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x078dcc51 gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0b000c5b kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0eda5898 kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x12698002 kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x13cc6634 kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x18e257ab __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1a4342a5 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1ac9f44a kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1cfe78d1 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1f84ff20 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x21495759 kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2155f6b9 kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x234a2267 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2433d6fd __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x299be0b2 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x29abf779 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2e953f9f kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2f636c31 kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x30d1544b kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x34397f79 fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x354029f7 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x361f9a58 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x366ae7df kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3de08404 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3ee59a92 __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3f36dbe8 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4115db65 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x411950ec x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x414c054c kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x43f050a3 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x485cd7f6 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4c9ee35d kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4d535994 handle_mmio_page_fault_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5147b828 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5256147b gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x55573c44 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x59c42d03 gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5a45fd85 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5b63372d kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5ccaf42f kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5d481527 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5fa173c7 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x600418d4 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x633d6ed5 kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x63b7e614 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x63ddc11f kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6666f0ec kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x669da1fd kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6b3c3a34 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6c233f95 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6c5261f3 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6d46eebb kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6ddadcbe kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6e7b4100 kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x75effa88 kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7678201a kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7789bd72 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x78d3a14f kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7991f3b5 kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x79dbf670 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7a8cf62a kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7aa64803 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7c20c080 gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7f640225 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x829f52ed kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x831327da kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x83901720 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x84ceb28c __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x86b37f22 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8b90981d kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8da01274 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e1cd06f kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8f420abb kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x94a50f92 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9939e01e kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9a216313 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9a826c0a kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9ad29c23 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9f431b3d kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9f45ff49 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa26853ae kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa8bf3667 kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaac7c868 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xac6fa164 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaeb12d8a kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaeb1d2e8 kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb066b21b kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb284eed4 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb2a65cca __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb6846d58 kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb8f6a3e2 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xba9ed435 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbc2b538e __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbf05ab76 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc11cebc2 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc4993935 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc5cbf30a gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc96ee68f kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc9b4362a kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb3790b2 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb67ce10 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xce169e6c kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xce706bef kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0459e67 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd99dd690 kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe031e563 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe5db40d9 kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe9790e86 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf3db4f72 gfn_to_pfn_async +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xfad05415 kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xfbb726b8 kvm_put_kvm +EXPORT_SYMBOL_GPL crypto/af_alg 0x1dbefea6 af_alg_release +EXPORT_SYMBOL_GPL crypto/af_alg 0x1f179916 af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x391f8c1b af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x7e7cde9c af_alg_wait_for_completion +EXPORT_SYMBOL_GPL crypto/af_alg 0x81ce37d7 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x85a0d775 af_alg_complete +EXPORT_SYMBOL_GPL crypto/af_alg 0x93957c0c af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0xa2d01206 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0xc4ede9c9 af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0x25b2b950 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x756410fd async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0xe5e28759 async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x12b63040 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x977c447a async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x85ceae28 async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x9585bbbd __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x9cbea292 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xce360c0e async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x00340938 async_xor +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0x16be35b5 async_xor_val +EXPORT_SYMBOL_GPL crypto/blowfish_common 0xeebc3a13 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x27278ca9 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x4a2a3ca6 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0xebe4824a cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x1291971c __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x1e2c961f __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x4d22ee1f cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x8f04034a __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast_common 0x08aa6fb7 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x0c5fbf8a cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0xe39dd4b4 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0xee83a4f3 cast_s4 +EXPORT_SYMBOL_GPL crypto/cryptd 0x0235f0d0 cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x2663638d cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x3b1f1dc0 cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x7ee9ae31 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x80a7cf29 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x8364f95e cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x847421c9 cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x84d06d94 cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x89f89ed3 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0xb071171b cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/lrw 0x3864eb66 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x9e8f7197 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0xcd074900 lrw_init_table +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x37997173 serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x5ddb33e9 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x77b39cb4 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x8a1a99ad __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/twofish_common 0x4b74c766 twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0x6c3229bb __twofish_setkey +EXPORT_SYMBOL_GPL crypto/xts 0x2fbf285a xts_crypt +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x1c8984c7 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x87bd07bd acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0xb9a141b0 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0xe1372311 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x0a96a872 ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x206b52be ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x29612371 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x2deda5a2 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x38d7335f ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x482e5d50 ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x5eacba1f ahci_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x6663ca16 ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x7e63364c ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x8ed5058c ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x93e5c780 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x96ee972e ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xa45e4d1e ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xa958af0e ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xbd622fb2 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xc8905cfd ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xe793c3b1 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xea50dad3 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xf6464980 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xfa5ecf0a ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xfecece0b ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x89210c9e __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-mmio 0x8a5ab7fa devm_regmap_init_mmio +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-mmio 0xb1dbff0c regmap_init_mmio +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x006af644 bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x18e05836 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x1961e7c2 bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x24fb711b bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x28375ea3 bcma_core_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x337c4f5b bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x33e6559d bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x3d3dc0c7 __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x496f6773 bcma_core_pci_extend_L1timer +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x6ff0ace3 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x7b1ef9a4 bcma_find_core +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x922e5400 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xb5e99f0c bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xb7bd3387 bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xcfcf80e9 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xd74e5ec9 bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xf263025d bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x0e0f308e btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x1a559f1f btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x5f7841dd btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x6a719d40 btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x6c6841b8 btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x6f11819e btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x78b89b5a btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x79d9aa2e btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb34d93e6 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xdc30b0fe btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/char/scx200_gpio 0xd949f921 scx200_gpio_ops +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x3100ba10 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x66ae23ca dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x67ea8fbb unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x89e7d1a6 free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8df1427d register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x9d1112fa alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xb8b9f66f dca_add_requester +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x1da7cc08 edac_mc_handle_error +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2658a865 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2cfcf74b edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x31070d68 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3b165c9e edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3eccfe14 edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x545fa61c edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x55695739 find_mci_by_dev +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x69259f22 edac_mem_types +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6f43c720 edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x7a27cb72 edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x854063f6 edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8aacaacf edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x980abe29 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xaabcc078 edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xaea2a401 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xb6e3859b edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc0abf0aa edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc0dcb59e edac_layer_name +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xcb993158 edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xec94cca9 edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xed23770e edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf90ebf96 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xfa622785 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0d38cee6 amd_decode_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1d34e996 pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x21626132 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x233ce2e4 to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x3eba1a17 rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x593ec4b5 ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x737912b3 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xaeeba16b tt_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb0ca1fe7 ll_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0xf4ade51f fw_card_release +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x013fbdac cs5535_gpio_set +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x93f8fe67 cs5535_gpio_set_irq +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0xc0bb404a cs5535_gpio_setup_event +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0xd3bd9300 cs5535_gpio_isset +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0xe07c0954 cs5535_gpio_clear +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x0dddd12b bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x1116600b bgpio_remove +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x6d9607a1 __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0x781eba4d __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xb1210067 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xc12dbb03 drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x05876c69 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x08a7896d i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x402468e9 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x500858b9 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0xe7237b0b i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x875fd6aa ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x9e968463 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0xdca6fd4f ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/hid/hid 0x03675f9d hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0e6eabea hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x123a2a98 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1486efb8 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x19ee73a6 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1b05b9cc hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x338f1890 hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x362ecea2 hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x43ef6367 hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4906a967 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x5ee43f21 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x64741025 hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x67054c16 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6964cf82 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6c24c9dd hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6f1a7cb3 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x70a633f1 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7f241d9d hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0x90ad0b20 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0x985e73dc hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa48c2caa hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa68f2079 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xafb8fa2a hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xb983555b hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbad447d2 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc1e09597 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd60878d5 hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd7b2ae4f hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe3c975b0 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xe64fb7e4 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf4ffd1a9 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf940b56c hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x2f622ea1 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x8c4181ec roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x97c9d8ff roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x125e9759 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x760056bf roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x8f840d68 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x0ca9d500 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x6343483a sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xaaf4dabe sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xddc0ee59 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xf458c537 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xf7fb9d53 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x0a036820 usbhid_wait_io +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x1d4c91e0 usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x7d42e7e6 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0xeb309ed3 hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x11310ca2 hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x11b9e5ad hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x11bd8d76 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x25b55ba7 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x44d4a71a hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x69028ad7 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x71526f1a hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x74de2989 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x77aa87da hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x9e8af2e7 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xb1edfe3e hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xc3dec8d1 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xe0c385a6 hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x0cfb1c03 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x20620b15 vmbus_sendpacket_multipagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x44b854fc vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x4944ec55 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x49e01929 vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x4ca17699 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x78361e16 vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x7b071a56 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0xc91a78a4 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0xf46babfa vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x0bbbe6ed pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x20636b1a pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x35aafaeb pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x3ac6f3b9 pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x45592c91 pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x475e707b pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x811d7d3c pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x9e04f558 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xb9871377 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xce173f43 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xcff7c52e pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x17cf4fb3 i2c_dw_init +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x227bede2 i2c_dw_clear_int +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x3d8e21a5 i2c_dw_disable_int +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x4e13fd49 i2c_dw_xfer +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x5699998c i2c_dw_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x5bb1170b i2c_dw_isr +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x740e785c i2c_dw_is_enabled +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x8604009b i2c_dw_disable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xbb02a1bc i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xce7d3013 i2c_dw_func +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x554337a7 nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0x3dfa5458 i2c_del_mux_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0xf0e3e66d i2c_add_mux_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x038c0090 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x9bdd6020 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x04334456 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x17419a2b ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x304c6ac6 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x6780c27d ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x829f665c ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x84339bf1 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x9860cdc2 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xa603c156 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xf2c46e67 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x19a51f78 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x5ea0b8ff adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x67727826 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x6b451061 adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x6fa21851 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xa41a98e6 adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xd6205e31 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xdce2b799 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xe0f45e5b adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xe4cf8102 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xe777b0b7 adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xf1ade894 adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x116640a1 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x1a3de4b0 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x252f0342 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x267c0508 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x26f6b499 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x2a1fab3c iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x2cd72564 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x3df5d303 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x48943aef iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x4ca9ce57 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x53a102f5 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x55d12d31 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x58ed8916 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x61a62e22 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x687a9736 iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x6cca5e5b iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x6f161500 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x761a5c6d iio_scan_mask_query +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x7a711aef iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x8315015b iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x9d79967c iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xbfba375d iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xd7899049 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xde7bc2ec iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xe57853bd iio_scan_mask_set +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xeb5c89aa iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xf90c2f71 iio_update_demux +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xf96e5e2c iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0xdbd019c4 ib_wq +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x21709554 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x49a4fcbd adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x66535a18 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0xe213ad3a adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0xe4586827 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x7f7c0ff2 cyttsp_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0xaaa8ca11 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0xba1846ca cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0e1fa5c2 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0f76d32e wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x23346058 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x2d21e9a5 wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x309ff4ff wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x79119fe7 wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x7b41594f wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x8645c166 wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x8a23544d wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x92a0e8b2 wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xdfee54c8 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xfc35f461 wm9713_codec +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x2136fc63 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x3a4c5375 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x5f3226a3 ipack_device_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x63b01328 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0xbe6dc695 ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0xf5cdd5b6 ipack_device_unregister +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x4de7b2d0 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0xb17b7c77 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x005889ec gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x04e1f23b gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x0c75f856 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x16794f9b gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x68927907 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x70ebc415 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x7bea7e85 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x8eff32df gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x8fd56803 gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9200137f gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x95437f62 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x9a616c93 gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb42606d5 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb65e177b gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xbd900e8e gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xc0c34423 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xcfb50e7a gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xd64ee097 gigaset_start +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x17dd39d6 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x205f99d3 dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x2eb01e04 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x6791a44e dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x9873da2f dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb6d5c65d dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb70b342a dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xc714754b dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xca2e3a88 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xcfa01a18 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xebd06eaf dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x0ad0dc4f dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x22163b69 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x3909d3a8 dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x4b6ebaab dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x594952bd dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x62a23587 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x6d3f57bd dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x74dcd98c dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x7c381a76 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x9b2b253a dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xa82b2066 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xc9a3422d dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xd4bddf5c dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xdc69e37a dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xe004ee92 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xe6024e59 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xebcc64a4 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xeca7949e dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x67ab30c3 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0xa11a4fea dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x01d2f9ac dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x09472122 dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x1a8b3691 dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x38efaf5a dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3a18389a dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x5d30024e dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7774620f dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d053fc5 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x8e0aa1ac dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x93f49c02 dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa53387c7 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa83588eb dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa8813ad6 dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xbe38a431 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xc66ce277 dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xcab63c3d dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd8aa4284 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xe952cbb3 dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf05e6884 dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xf37a3cfe dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfd93482e dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x0054f69d dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x03ced457 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x08a936ca dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x11eab9fe dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x1e3f728d dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x2c112836 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x2e730a21 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x40f7bd91 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x63b2ff62 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x67521436 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x688d422d dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x72289260 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7ade1071 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7b047bd9 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7dc38fc6 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x80c89b3d dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x901e3820 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x9b4b5b29 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x9e798e22 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xa2507774 dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xa6aae3ea dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb7bad799 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb967690a dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb9a6ecf8 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xbaa513b0 dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xbc5fe7c1 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xbcfdc290 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xd163cade dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xdb562135 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xead1e727 dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xf99dc2cf dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/raid1 0xd0cffc38 md_raid1_congested +EXPORT_SYMBOL_GPL drivers/md/raid10 0x85b7f636 md_raid10_congested +EXPORT_SYMBOL_GPL drivers/md/raid456 0x36db2ae7 md_raid5_congested +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x66c0289a b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x0a50527e saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x1ea847db saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x416e1ae1 saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x689c6144 saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x938096ee saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x9dda7108 saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xa1072da6 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xcaeb5fde saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xd6882e79 saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xea928c1f saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x2c81904b saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x6010ae34 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x9224ddef saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xa33b7cbb saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xc4c951be saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xcc90b09e saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xcfe78f46 saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x0657a7b8 sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x12c4ec94 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x1cc392e9 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x398dc240 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x3d51d8af smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x63222b29 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x728bee4e smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x76222253 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xbb1976e7 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xbbdb5c42 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xbce41b47 sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xc164488c smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xc5df1b88 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xd1021d05 sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xdcfb14f8 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xdd06f8a7 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xde46a007 smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xee1289b5 smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xf4f16131 smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xff347cbc sms_board_power +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0x6bc87fee tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x98f8b7db cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x02229784 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x150ee8e8 mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x1aaea8b4 mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x20ca0a08 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x2ba8d8ca mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x2bf94095 mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x3fc84a04 mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x4e7f2529 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x5915d325 mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x910998d2 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x9138ebd5 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x91955307 mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xa0c3d75f mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xae734f84 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xb8d24fc3 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xbbf269b2 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xf48ffd6e mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x1e8da8e7 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x631cb24e saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x63afa762 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x90f85601 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0xce74f411 saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x11b3431a ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x3c1df895 ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x6e18c1eb ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xb4802ea1 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xc2b6f615 ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xec5669ef ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xfbc36985 ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x0ce6a389 radio_isa_probe +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x179886bd radio_isa_match +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0x4a489a19 radio_isa_remove +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0xd1975f90 radio_isa_pnp_remove +EXPORT_SYMBOL_GPL drivers/media/radio/radio-isa 0xd54625ed radio_isa_pnp_probe +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x20f8d9c8 radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x4c6f18d0 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x051cd812 rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x183eb76c ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x3013a0eb rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x31b5ab48 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x423fc299 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x439b528d rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x45b80357 rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x553efb91 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x5bf67caf ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x5d3fb161 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x74448c74 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x78372589 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x9630d6f6 rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xba3d18e9 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xc2e88bca rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xe506621a ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xf2a445d5 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xf3f68030 ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x76395bed mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x4c26c489 microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x8b1021bb mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x0fc1dd56 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x190a4581 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x2a235972 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x768ade7c tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x69e6762f tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0xba8f5030 tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0xbe90e2b3 tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x1a0cf4d5 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x20bb803b tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0xc7d378bc simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x06ebdeeb cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x11a98097 cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x13ce841b cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x3540aaf9 cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x491a8b59 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x49825f64 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x535ef998 cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x6b5bc512 cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x7cf3c6a4 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x7f7fc26c cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x855dab59 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x96d6c2b2 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xad5e6c88 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xb6fe7afe cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xd33e2bdc is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xde02767a cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xeb552934 cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xed029d7e cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xf655dca6 cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x2b3ac78e mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0xde3a0d5d mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x03c1ed21 em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x0541aaeb em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x21eaefdd em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x4d21033a em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x5fd61d68 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x61611b06 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x67e984a8 em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xbc9142ce em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xd3976018 em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xd437558c em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xdb827d09 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xeeb758c4 em28xx_alloc_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xf24d4a1e em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xf450c676 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x2309a6d6 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x89b611dd tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xb91ad0c0 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xdff8e89d tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xe8dede28 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xf080e657 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xf0e21c7b tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x2190a9b2 v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x3773583a v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x41f9b8b5 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x53105839 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x5d9d3491 v4l_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x6bb8b17e v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x6f344bb9 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x6f5ffe9d v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x7eaf8e7a v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x813f3de4 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x83e34c1f v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x94632f90 v4l_fill_dv_preset_info +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x18b0bbdc v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x32708d7e v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x4a9a599f v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0xe4d80377 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x20ece26a v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x273890ec v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x3a648798 v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x3f2f9d37 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x43b88a5c v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x755fd812 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x8b1e9567 v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x951d6a6d v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x9f35d8ae v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xb366b68f v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xb41f9bf8 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xbd9db795 v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xc6fca5ad v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xe38cfda1 v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xfc7e9414 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x0857749e videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x2a7f819c videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x2b868eb5 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x32e5dbbb __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x421a1f10 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x5b70da8d videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x5f71bc5f videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x6646c27f videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x85a3263b videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x85dced6f videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x9dbd7dc7 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xa49ffcc0 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xa52e2596 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xad044633 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xaf347746 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xb448cde1 videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xb671c106 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xb79a3cca videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xbb317f50 videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xc3e461df videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xc99de500 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xc9d97fcd videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xe7a374ae videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xffc4c24d videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x989f3a9d videobuf_to_dma_contig +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x9a46dc11 videobuf_dma_contig_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0xc5ad2ee8 videobuf_queue_dma_contig_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0xef40fe4f videobuf_queue_dma_contig_init_cached +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x0fd081b2 videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x23b8add3 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x247ff613 videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x2e76d94a videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x4973d9c1 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x9b896d9e videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0xa67a2fe6 videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0xa825c75b videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0xbe9ba0d1 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0xd9a9c843 videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x0cceb166 videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x4b7435bc videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0xea722d35 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x00a08211 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x03d1f05e vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x05750f7f vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x13c78326 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x1769b875 vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x1e90dd8b vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x24bc3758 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x448759fe vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x4b66008b vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x532f3ef3 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x57b9072d vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x57cdd000 vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x5b7345c7 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x5f1b8b2e vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x6133b453 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x6413c820 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x6f5fa61b vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x812d68a0 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x85f91747 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x870a8d6c vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x870ad750 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x94ce3c3b vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x9d3366dd vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa8918dab vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xab4ef1be vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xaf5bbc4c vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xca23df2b vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xca48c032 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd861e657 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd8abd548 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd914600a vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xdc1ec0f0 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xea764cb8 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xec0463c9 vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x31163ebe vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xe1501479 vb2_dma_contig_init_ctx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xe57f0426 vb2_dma_contig_cleanup_ctx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x0b68808d vb2_put_vma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x1229e3c3 vb2_get_vma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x97a1051d vb2_get_contig_userptr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0xe59449fe vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0xd0f9dafb vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x01bc0a8d v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x01bf9fa1 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x185d349b v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x1ce30f25 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x3001655d v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x49f8780a v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x5512d753 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x632722f3 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x80445c54 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x8186a998 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x8cf7d57c v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x9193cfb1 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x950d9d1f v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x974e4290 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x9d387f05 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xaae81c94 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xc25ad078 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xca400db2 v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xcacfb62d v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xce10d801 v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xd1838187 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xec78c294 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x2127ac9f i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x59865eb7 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x8df6014e i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x8e54c62a i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xb680191b i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xb92e6cd2 i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xceb06936 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xe7c44b09 i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x33da51e3 pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x37d62f45 pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0xdbde8330 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0xdebb27db pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x31df119e lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x4c0f67da lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x6586a8d0 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x1f0f154d lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x2e3387e3 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x2f192b25 lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x691d39bb lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xa82a5606 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xcf30bfcd lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xeac580ae lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x0469aea4 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x04c5de44 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x44d3e584 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x56dc10ec mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x6ee80016 mc13xxx_common_cleanup +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0xbc6a1b24 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x0895aa9e pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x11ea4af8 pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x20d582e0 pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x40718b9d pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x989b7a84 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x9bb64bbb pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xb5062367 pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xb81e9085 pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xd518ca38 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xe0cd7ac2 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xecf07b79 pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0x44d483e7 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xc2b8fc54 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x0105d127 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x3cb190e2 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x58f1637a pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x8e1fa728 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x9066ddb7 pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x01a33234 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x4fca3918 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x037aa867 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x145137dc rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x1c7b9456 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x1cd8a456 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x3618f546 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x388839c9 rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x40743cdb rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x435aa8a1 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x5041cc27 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x51426948 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x911f5829 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x9c2e3202 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xa7fc17cc rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xabeef950 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xb072964e rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xb5f583ae rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xbf9cc259 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xc8d7ca2c rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xf13bbc68 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xf6823ae3 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xfb02228c rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x37f4aca3 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x8660ece3 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x96c2cbc9 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xcf392f55 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xdf3ac4f1 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x34bfac75 tps65217_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x9152ffc8 tps65217_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0xb5389de5 tps65217_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0xe693b4eb tps65217_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/twl4030-madc 0x08b8dd2e twl4030_madc_conversion +EXPORT_SYMBOL_GPL drivers/mfd/twl4030-madc 0x4362dc66 twl4030_get_madc_conversion +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0x1c6a6d9a ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x307edf0e cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x8a024429 cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xbf959581 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xdff98ced cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x27cb133b eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d2ff63 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x822222db eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x98bb5a22 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x0addb1af enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x1e9c71a3 enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x406a3c55 enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x9d21bbe0 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xa99339a9 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xc7ddb2af enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xebafb2a3 enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x13952b41 lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x34567587 lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x40d01f58 lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x533d60f0 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x605ed83b lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xa83d596f lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xee473f13 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xfb6d22c7 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/pti 0x19f09b98 pti_release_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x23bde487 pti_request_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x52a78e81 pti_writedata +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x1b94c3f0 st_unregister +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x9de77120 st_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x16c0fa34 sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x392b2d15 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x6343cdbc sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x757f293f sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x9a6340d9 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xc571cfb6 sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xd8e25e82 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xdd0630c0 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xde6363f9 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x076ed465 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x2bad8032 sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x3158232a sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x59100bc6 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x9847b946 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0xf022c621 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x1848753c cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x47ac6f89 cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xbed20725 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x3a2ed499 cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x6ae98c88 cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x85e6e1f3 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0x6156585f cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x42594bfb cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x94000a44 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0xf0297dfe cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0x1b1eb0da DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x050fa193 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0b1a91d6 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0ccecbe7 put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0e55e1ef mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0ea8ec61 mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0f49346e mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x167eec78 mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1903d7ce mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x19760418 mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x19e83c4c mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x22b7a27d mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2ca61508 kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3068b102 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3310e275 deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x39c3d544 mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3e40dced mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x3f91316a mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x42a2fe1c mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x48d19cb3 mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x49d76535 mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x4c131d50 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x4f4be211 register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x53014cc5 mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x611b3704 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x64167cf5 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7623c300 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7d0f8143 mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xa5b81927 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xad2ab9d8 mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb8150111 mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xbec6afb7 mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xd1d27e0b mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xede80c81 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xefad6aef mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf43627c7 mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf48c6a99 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf6d30cfe mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf8ea86e2 register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xf9fd78e4 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfaa675b9 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xff84855d get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x012ce1af mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x3482cedf register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x4259b34d del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xa13fdadc add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xb3123147 deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x68db21b4 nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xa7a819f4 nand_update_bbt +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xcf17f7ac nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0xa16bc0f2 sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x0e1fa21b onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x57084ff6 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x11328215 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x129f6a87 ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x38e10c1d ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x3bea8bd2 ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x402f9295 ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4eb3dca4 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5cfdd22d ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7853a73e ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7d73d1d6 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7e61b8c5 ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7ed336bf ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x7fba2d8f ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x8d372f69 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x978ab191 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa1d335c5 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x13a070ca c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x56655dc5 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x69a7303a alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x8f3dc7db free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x9c877992 unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0xaa0d210c c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1ebfee02 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x222c295a can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2a63437b alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x360f39d5 open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x37fda87b alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x809db770 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa14651f1 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa65c873b close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xaa9c5ee5 free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xae7c44b6 register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb346573b can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc61db291 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xdefe6d6e can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xe6412060 alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x1e78c971 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x469e1480 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x7463c906 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x90b80b98 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x49ebd0d2 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x691e509f register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x85ec593b alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x93c83566 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x9cdb76ec unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x04c6c669 macb_set_hwaddr +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x270c2fda macb_set_rx_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x392d90f9 macb_get_hwaddr +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x3cce4aea macb_get_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x47c91ecc macb_ioctl +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xb9ea5584 macb_mii_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xee8a29be macb_ethtool_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x021c9487 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x04dec7fc mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x0eeb11ca mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x0fa22420 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x110cd712 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x1171549b mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x17e1e12d mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x192b9805 mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x19944033 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x1ce875fd mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x1fe39665 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x23e895d9 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x2eed51b8 mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x31b5ae3d mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x32fb9c75 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x33c0faf0 mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x33ed2a50 mlx4_get_eth_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3a0c31ef mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3b4ef557 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3ea8e535 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x42074cdf mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x42151060 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x436c0d36 mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4bd6f192 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4d9b9db1 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x55d49e0a mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x57a6a978 mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x59b91788 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x5b55a5ba mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x5bb63f1a mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x649a64d6 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x64dea742 mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x65086b71 mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x74c44412 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x7d500bb5 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x7de3bf58 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x7e1604ae mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x82c46266 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x895dc107 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x8db0c773 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x8e2bfeec mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x900bd153 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x92683af9 mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x93d16720 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x93e6a5d1 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9958e82e mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x99e3fa09 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9d6ccd97 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa4f09603 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa5f70f02 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa6df78a3 mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa9c5c4ac mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xab0f36f3 mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xaf02a980 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb31776d1 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb3366dfd mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb897705f mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xba68dbbf mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbac1af2f mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbadb41bb mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbe17d94a mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbec2c9d0 mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xc1a6e212 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xc8d24af2 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xcc9bf779 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xd4eb75c5 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe69313df mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe8a456f0 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe9fbf5ed mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xecf70cb5 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xef6f943e mlx4_put_eth_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xefef4dab mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf1abc428 mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf747da4d mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf806d27b mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xfaf85d1e mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xfda1071c __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xff0b93e4 mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x4b1736e2 macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x4e50b64b macvlan_start_xmit +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xa3aca45f macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xb9d8fb16 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xd552c6c6 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/macvtap 0x5289fc9f macvtap_get_socket +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x7b3f9d2f usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x97f0fb89 usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xa824fe8a usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xe0161b90 usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x5c9ee6d7 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x6611dee4 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x7205a596 cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xa0362770 cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xbf93d155 cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xd1f39c10 cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x163917bc rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x1fc3249f generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x62196610 rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x82a200b4 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xa1d0c2a9 rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xd43a1c11 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x13a95d23 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x1737aa88 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2119fcd7 usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2913237f usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x2fc4dee4 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x32eda41c usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4260433d usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5267a5c9 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5f089ff3 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5f0fd22b usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6dc1f9a3 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x7558fef2 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x858650b3 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x86a6af6c usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9738fdb9 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa615363f usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xaa3f5774 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb17d5fd5 usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb8b9de2a usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbe5b29ba usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc11860e8 usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xcecc7e54 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd1a7d742 usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe33b0c59 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf04fe04b usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xf53a919b usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfa5d56c7 usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfbe629b9 usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfea06c77 usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x05d4709d i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x0d542521 i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2956dad1 i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3060f867 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3be61286 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x3c926c57 i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x60563f82 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x6d21500d i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8efc1268 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x9e856b43 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa2055522 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb57332de i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xbd431771 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xdde8887d i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe6540c70 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xe750abc0 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0xa1d2f655 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0x086effe2 il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0x29a5d3d7 _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0x57528d66 il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0xad8ad9d8 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0xef124e24 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x0ab88196 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x0ec3a647 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x1c53ad1e iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x215daec5 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x24b9769a iwl_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x2b0cd0f9 iwl_release_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x31e1c247 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x3207d38d iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x34cf14e2 __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x3adc22ba _iwl_read_targ_mem_dwords +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x3e0dc6e3 iwl_notification_wait_notify +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x4a88225a iwl_test_free +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x4e36d50c iwl_test_init +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x5c52e109 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x6101306b iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x683aba72 iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x68c36bde _iwl_write_targ_mem_dwords +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x6fa01f8b iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x70c0cd8f iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x70ca8c58 iwl_test_handle_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x7b10ebd7 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x8caceb62 iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x8eeab160 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x93168028 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x95d6f74a iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xa19fde45 iwl_set_bits_mask +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xaae78ee0 iwl_write_targ_mem +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xad52b30f iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xb89ffedf iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xbb3940aa __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xbf2dc249 iwl_test_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xbf5b4719 __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xca1c7328 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xcea0b361 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xcf2c1f2a iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xcf68ab90 iwl_test_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xdcb8aeac iwl_grab_nic_access_silent +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xdcdbd4b0 iwl_clear_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xde75a1f2 iwl_set_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xeb3f99f9 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xee8d0ed8 iwl_test_parse +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xfd99cefc iwl_read_targ_mem +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x03e09516 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x122790dc lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1999f3e3 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x1a069396 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5ba91b88 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5fdf38b8 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x6622b82e lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x71e30df5 lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x7d8cc0f7 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x89610306 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x8b8f3960 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x90b24ecc lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x9896dbcc lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xb13eec08 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xbebab48a lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xc0c2d7e8 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf255c8a3 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x0fa48f09 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x2b6eeb30 lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x55475b60 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6b7495b9 lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x719b076b lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x948d3258 lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xbbcf9e8b lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc85e6899 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xf3a00b20 lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0x2b8a6078 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xddba9654 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x12936153 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x1e02b6f0 mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x21224757 mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x27f36c17 mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x2bae1e9c mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x324da618 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x41289ac6 mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x7f691327 mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x82577afe mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x85334c93 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xb436dfd6 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xb496ba8e mwifiex_deauthenticate +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xc1cfb55f mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xe39e8b8d mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x33c24367 p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x5a007530 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x6661ddeb p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x6945c810 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x6ff32798 p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x9ae4a736 p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xcee136fa p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xdf87a523 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xe19b43ae p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x03764e32 rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x07f17af3 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x1cb7182f rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x24a0abb6 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x26363a75 rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x30bf51e5 rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x32bdf93d rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x33800157 rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x3ee86ae9 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x437f662f rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x4ff03513 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x5223d336 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x55825fd1 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x58198f11 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x5d7ea34f rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x6cbeb1a9 rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x76514cfa rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x7e4d8b3a rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x808e2d28 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x87539f89 rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x8b380959 rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x90fcd36e rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x96fb4f90 rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x9f464944 rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xa3d0a6a7 rt2800_get_tkip_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xa5dc0f40 rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xab16866f rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xaeaec010 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xb296c521 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xb830e30c rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xc276b582 rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xc41ce9db rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xc944cdc0 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xcd3be88e rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd2a98aa4 rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xdaaba1d5 rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xe7f798a7 rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0285a400 rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0da5791b rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x0f6224e0 rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x107d94c7 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2aa7285b rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x2d25f172 rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x338512d5 rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x38c36f35 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x444b3f31 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x49ebced2 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4ed8cbff rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5340371d rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x621bd873 rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x65bbf881 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6743e800 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6ba0af02 rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6f58f6bd rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x77442773 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7801af60 rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7948f9ba rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7955a6e6 rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7c22cf89 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7d29c0fd rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8b1f681c rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x8f760402 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x98796ea0 rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x999ad755 rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9a0b59e5 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9ece83d6 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa72226ff rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa7849daf rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa849ef30 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa99bc9e9 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xaa6214d3 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb0e82fb7 rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb95760c0 rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb9dd1aa6 rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc1b02de6 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc266bb73 rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc5a9cccd rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd24139f9 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd924deac rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdf6549c5 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xef866a3c rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf3de754d rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf4446301 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x251567fa rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x3def44d8 rt2x00pci_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x5eae8a71 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x61022e32 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x8fa56e67 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x96a1a55b rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xaaafe344 rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb58a8182 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xf350c7e0 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1796d872 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x17bef7f7 rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x22e30bb7 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x279b96c0 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x44f1049a rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x45edb4d5 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x47720702 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x612dd867 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x6b0886a9 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x7d229cb5 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x807cd304 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x87e71d68 rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x910baa81 rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc3dfaca9 rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xc4f3a592 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xea84c8e1 rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x0f321161 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x27602b22 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x5e3bd3c0 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x05294fba wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x05a208b3 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x0f0383ee wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x113118c2 wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x1d4c3b79 wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x258b8c8b wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x26e23ded wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x29297f0a wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x2cb40a6b wlcore_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x3ddaa693 wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x43ed65a0 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x508d3e23 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x51401734 wlcore_wake_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x53dff67d wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x5db8831b wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x5e09ff6d wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x683cf777 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x865ff791 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x99c9516e wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xb0e0dc37 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xba02ca4f wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xd0a767d1 wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xe78f8cb2 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xeabb0495 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xeb35eab5 wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xf24d71a5 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xf6d7596c wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x4975290b acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x4a120042 acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0xb1e81fdc asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0xdf0ddeb9 asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x46809fa9 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x232b5238 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x61cdf799 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0xe26032eb mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x64ebe677 wmi_query_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xa9b7afd8 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xc5e3dddf wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xe2426710 wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x77214fb5 pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x993a3997 pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xca0e6a04 pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x24a42ef7 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0xabe280bb mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0xeab5870c mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x03b1ebcb wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x0afa0a6e wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x2c921f38 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x3ad2ebb5 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x5cc97741 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xf67110df wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0x9adddc3b wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x03cb1cfc cxgbi_ddp_ppod_set +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x04a701f7 cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x08169c21 cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x0a061558 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x14ca5d68 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x2085a7f0 cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x2acf7604 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x2cefbbce cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x35c0e80f cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x35e985da cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x395575fe cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x3a5c4389 cxgbi_ddp_page_size_factor +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x416703d0 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x4216200c cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x498dc020 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x500c2fc3 cxgbi_ddp_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x54c90d81 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x6151b6bf cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7279bc4d cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7818a9e9 cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7d6b3393 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7fbaa67c cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7fdb6004 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x80833ab2 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x82b95205 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x85c98a6c cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x895d456c cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x89649e3a cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x8c2ba369 cxgbi_ddp_ppod_clear +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x96965897 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x98d58c76 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x9a6b794d cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xa1aa844b cxgbi_ddp_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xa3e9b40a cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xa9cf79e2 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xb257f63e cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xc0941337 cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xca586988 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xccff11c8 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xd980cd45 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xdc3507e6 cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xdd5237f0 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xe30fdd0d cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xe56e3784 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xe6baf37a cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xef346615 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf0317911 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xffa0d066 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x0982abd2 scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x0d55b986 scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x425e10e3 scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x6c7d5b4f scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x82f4e0d5 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x974d4a44 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xba03d562 scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x0fb51275 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x1e4e266d fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x2f57a102 fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x451b31d0 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x5cb774cb fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x5ce2b176 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x72b7437d fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x79cded69 fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x83f42f97 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x84b3d915 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x88792077 fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x93013be0 __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x9cea87c1 fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xc90f76f0 fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xe972418a fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x58904f84 iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x708324f8 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x71db3963 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0xb9a68010 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0xc2fb4eb8 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0xe4e9052e iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x07038d94 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x081a8a56 iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0ec870df iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x11ea6b96 iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x159e60c6 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1b3506b5 iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x1c16c77f iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2532e872 iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x29636e09 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x29a47e90 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2e5b8397 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2eb88f8b iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2fbc4f99 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3b228e03 __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3c82452b iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3e9492cd iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4282ac2b iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5564e377 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x56ae5695 iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x57922fe5 iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x59c4fd33 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x5d94e614 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x61fa4d78 iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6e2b05e9 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6fd3f074 iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x70d635de iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7d485e27 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x816fd942 iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x86a1fe92 iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x89149f31 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x907fb23e iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x93be9e78 iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa4832cf0 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc00185aa iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc0cb02f4 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc7aac6a4 iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xca7e5d46 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcbc2cf4f iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd158d265 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd398bd67 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xd3e5da5b iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdc6ed09b iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xebde1516 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf1aab654 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf84c321d iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xfc49011d iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x047b2ae6 iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x061af88d iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x2e6277b2 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x2ff23e9e iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3b2c5c07 iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x3c07719f iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x629bdf08 iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x653af1a0 iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x68d8589d iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x9d719a99 iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xa4144eef iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xaec60595 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xbe16fba1 iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xc0dcce5e iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xcdc91595 iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xebb4a613 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf41c9ec4 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x01e142c4 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x0c98c3fa sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x36b2da13 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x3e8e4b82 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x437123ca sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x50d62efe sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5ed42aac sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x6f17cf19 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x78e7146e sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7950685e sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x7af9262a sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x83fb14ee sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8a4965b9 sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x994f5f06 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x9b087204 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa24d09c4 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa4bc1fbe sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xae192a98 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb26b9efd sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xd006745c sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xefccbccc sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf1957be4 sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xf77863b3 sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xff92f26a sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xffc96f6f sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x181029d3 srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x1c6b343f srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x3cd142cc srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x9fea6004 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xadb72ae8 srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xcdd6ef9d srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x0a40f2a1 scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x33c6f3ba scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x374556b7 scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x3a090415 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x58a0c680 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x5f85ca77 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x6a634f0b scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xdafd050d scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xdb8517c5 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0d8c98ac iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x100bd1ea iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x200b7f32 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x28d52909 iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x28db88c2 iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x294c49e6 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x30e846b8 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x39831f5c iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x426eead1 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x454b4e37 iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x56ca5985 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x59b92f1a iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5e5b9310 iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x649b7934 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x76543af1 iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7872d14d iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x83cd2104 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8b2b7a67 iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa8c3798c iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb2a4e87f iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbd56f90c iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbf6d2e3b iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xc75bece3 iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcad96356 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcb29063d iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcf19dc00 iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd856371a iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdb2f5f1d iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdd0a34fa iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf3d7bb6d iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfb73e243 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xfb7f9c3b iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x2cf2393d sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x2d0e6e29 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x4e00873d sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x98ea85ab sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x0969205a srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x34a9d99e srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x703588e9 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x88d8a1f4 srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x9754dba3 srp_rport_del +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x27957199 spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x2a74a515 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0x674cf45a spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xb6b9e56c spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xd0b07472 spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xf47a8819 spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x3a1dff97 dw_spi_xfer_done +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x3e1914eb dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x57c5f59a dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xde6e39f5 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xfa064984 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x8c99d1f3 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x00dac720 comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x101435b8 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x26c3614e comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x504303d5 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x5c866f91 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x65f0ec73 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x849fe0ac comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xa310539d comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xbb0c42bc comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xcd8dc287 comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x8f3c19f9 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xe040986d das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xb18fcf12 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xd478e5ef labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x0a57170b ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x248ef0f4 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x325f6117 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x7c0caf26 ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x81398c1f ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x9a75f7cc ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xa9e8a41b ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xc4d4766e ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x0779ed88 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x5b0e4304 ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x752b6118 ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x91775805 ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x97bacefc ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xefad2531 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x043993b8 CsrUint32Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x063ce8fd CsrMemCpySer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x1a2f4153 CsrUint16Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x1b112e5a CsrUint32Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x20ed5d24 CsrMemCpyDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x25d71627 CsrWifiEventCsrUint16Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x2e32b4fa CsrWifiEventCsrUint16CsrUint8Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x35ee09da CsrWifiEventSizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x4a44d987 CsrCharStringSer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x4b702d3b CsrWifiEventCsrUint16CsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x5bef3871 CsrCharStringDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x71d701be CsrThreadSleep +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x7b2ce3fd CsrWifiEventCsrUint8Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x80cc6f40 CsrTimeGet +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x83653836 CsrWifiEventCsrUint16Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x92b87e22 CsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x99c3117b CsrWifiEventCsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xa914520b CsrMsgConvFindEntry +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xad2a353d CsrWifiEventCsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xb39bdd0a CsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc47d071c CsrMsgConvInsert +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc79e2f1d CsrWifiEventSer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc9691b01 CsrMsgConvInit +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xde3f2c0f CsrWifiEventCsrUint16Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xdf5f5f67 CsrUint16Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xe258383d CsrWifiEventCsrUint32Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xe2e90b5d CsrMsgConvCustomLookupRegister +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xe90cfd08 CsrWifiEventCsrUint32Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xeb229892 CsrWifiEventDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xfd995761 CsrWifiEventCsrUint32Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xfe9f5512 CsrWifiEventCsrUint16CsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x12e6177b oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x14523351 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x14c4b6b0 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x3c6ec396 oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xca667daa oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xeb94de18 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xeec034fb oslec_free +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0xec33340e adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/rts5139/rts5139 0xbd5a0e51 rts5139_usb_ids +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x0e81c76d spk_serial_out +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x14f06fe7 spk_serial_in_nowait +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x2a69e80a spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x30dbca29 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x3385a398 synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x41a160e5 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x4449e1dd synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x475e158a synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x4f19ce72 spk_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x5f23a9c8 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x62a50122 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x7c39f188 serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x7c596e7b spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x7fc8c368 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x8e146195 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x9a888082 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xaf7d501c spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb48956f8 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb73a5748 get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xbbd15a51 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xc766ae09 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xce56e8c5 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe0033b1b spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe7cd4558 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe7e810f8 spk_serial_in +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x0890f6cb usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x180abcd1 usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x22d403a5 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x24b9a9ed sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x2c51f936 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x3601ace1 usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x5361e101 usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x5a6f2867 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x5acdf8f9 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x75542da4 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x819f8b25 usbip_recv +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xa62bd3c5 usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xd529af00 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x585ebaac n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x04fc7979 uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x1a4f9171 uio_unregister_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xd4860ebb __uio_register_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x5d5a1e50 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0x60556aac usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x4517eba2 ci13xxx_add_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0xa1975f27 ci13xxx_remove_device +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x082504a8 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x0abbe5ca usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2dd547b4 usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2e09263f usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x36b44b64 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x42264226 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x49f6877e usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x5457b812 usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x592f21eb usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x7258f516 usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x806ed278 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x8aeb8239 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x94d7075a usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x9519c445 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x98e17125 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xa0792a2d usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xb92efc7c usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xd2ea2134 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xd9f14e12 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xdaea877e usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xf474a207 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xfc36847c usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x0479afac usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x5cdbbf1c usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0xa92b8dae usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0xad2129b3 usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0xbfa6e483 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0xe15f26bf usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x65eabf23 ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0xa60665de ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x00552a72 usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x01955075 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x1916fea2 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x92552c85 ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa41b56da usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb6b37e31 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xd7d601b8 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xf0382ae1 usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xfc7cb574 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0x957aac65 musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/tusb6010 0x987d8423 tusb_get_revision +EXPORT_SYMBOL_GPL drivers/usb/phy/isp1301 0x14740fc7 isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0xabf893dc usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x068f2fe6 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x26462328 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3619e573 usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5585ccb5 usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x59ca1e61 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7592946d usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x785c8590 usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7da80b8e usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x83c3f6d3 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x84e74950 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x887f7d77 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x9e87be18 usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa0bd1d8e usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xa571903e usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xaad37a2a usb_serial_generic_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xc53cf1e9 usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe0704470 usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe4dc387a usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x04b5b96e usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x17805ad2 usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x22b738bc usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2d2c6d19 usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x35504b27 usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x387dfd04 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x41156b15 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x43ae8a7c usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x519f61ff fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5c1b89a7 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x647621d8 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x690bccc7 usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8ee4eafd usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x92f96cf1 usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9fd66c2f usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa1ec78e9 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa1eed1f6 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xac937c25 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb75e842d usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xbf10b5ca usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc3053223 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdc6d70d9 usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x2d9a2cfb wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x30114a83 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xb778c8ba wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xc165d622 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xcb55ad58 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xf4654c3f wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xfcd7ab4e wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x05a0d7d7 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0946478c wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x103fb489 wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x17d56b5b wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x1d84b7c8 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x25249453 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2fbede39 wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x53c34160 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x59d0a781 wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x759dcf76 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7f0b7631 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb6038444 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xba582cb2 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc7becf8f wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xce8bd3ef wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xd31197c4 wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xdb1e7b0e wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x048f0076 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x1bb86ae8 i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x2702c192 i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x14364fcc umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x2319f22e umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x25b3a1b1 umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x599c602a __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x7eb1494f umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x8cc67faa umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xa8d4fd2b umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xde103c16 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b4c08a9 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0b8aad57 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x10303204 uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1589fa0e uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x19b5bdb7 uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x26704925 uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2a427bbb uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2c9483fe uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3225b767 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x349fa90e uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3534b8cb uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x35d4ec98 uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3ca5c0c5 uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3ce136ab uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4001f72b uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5e4bc088 __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x60339a70 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x61e12e63 uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x62cc74d4 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x65a8a9bf uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x67080e0f uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x6d6aafa7 uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7136254a uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7b4cfa9d uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7dcfcd23 uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x80b40817 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8c6290e2 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8fb5a96d uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa66f2303 uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xba20ea87 __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xba446f7a uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xbb6c69b2 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc2907ef3 uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc63c1902 uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc9e4f642 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe1716f06 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xef9af304 uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf16f158c uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf72342c6 uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf87f1c2c uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xfe10b54b uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xe12a69ef whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x338bd187 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x738c3981 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x7b997b70 vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0xf9b2cfaa vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x3617b272 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x3aa0453f auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x41c17578 auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x5547f531 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x661471dc auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x6cf3667a auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x7f380e9a auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x81929566 auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xc60f285c auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xcda8bc2e auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x2c63e051 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0xdab0f892 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x261bfa03 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x6b89db35 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x809359dd ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x820111a8 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa0b38bdd ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xa6e74601 ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xd968d076 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0xd5bf76ba fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x8ec89de5 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xda26b39f fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x151051a7 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x1b06a558 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x22a7af24 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x292da7a2 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x30cc9311 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x31469540 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x79e6190a viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x98ac99a8 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0xb4f863e6 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0xcaefb732 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0xfff2dfd2 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x157755c1 w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x32a1ffcc w1_next_pullup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x34514974 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x3bcfef9c w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x5493915d w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7bc248c4 w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x96ab9e21 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0x9d1a7fbb w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa9edda8c w1_write_8 +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0x44d09182 xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x2d1ea139 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x97edeed9 dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xab277345 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xc6dc8c2f dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x092cf98e fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x3be88c58 nlmclnt_proc +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x3ced8ef4 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x4062669e locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x77e35ccc nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x9eef6db9 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa7fa13e9 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xaa79b56d nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xb496e01c lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xc812a179 nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xdb690b4f nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x033e0ec9 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x041bd0a9 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0570b93d nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0a168468 nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0c13d482 nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0c72ecf2 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0d3be65e nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0e1e4f31 nfs_file_flush +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x12160f41 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x12a865b9 nfs_pageio_add_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x137ef2bf nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x13a350de nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x13cdb178 nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x16c2ca87 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x171532cc nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x176fd1be nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1b928564 nfs_setlease +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1be90397 nfs_initiate_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1dc12b87 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1e49a9ca nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1f506150 nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x26884ff7 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x27144e36 nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x294e514a nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2a0ce687 nfs_writehdr_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2be907d5 nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2e1e61b3 nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3070bae4 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x328cfc81 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3494fcef nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x34c4a573 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x38296cf5 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3980f527 nfs_file_fsync_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x39e05ac3 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3c857030 nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3ca31f35 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3d3858ce nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3e060312 nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3f1d4655 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3f2690f2 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3f5cc642 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x42f2c81f nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x451922fb nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4699c746 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x476c1d05 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4a29ad13 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4a5e3a5b nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4bffe2fc nfs_readhdr_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4c516abc nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4fb15aa4 nfs_file_splice_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5085e6db nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x51892d61 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x518afd35 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x52d19abf nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5767ea16 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5779ffd7 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x593523fd nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5a896bea nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5d26a325 nfs_put_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5e1d863a nfs_sockaddr_match_ipaddr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x632a538c nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x637d5324 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x65560ebf nfs_dns_resolve_name +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x67511d67 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x68c2ec9b nfs_readdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x68d157d1 nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6ac8a485 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6d9677eb nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x70630f9c nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x70cba120 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x72169b48 nfs_pageio_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7458a395 nfs_writedata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x754b764d nfs_generic_pagein +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x770183bb nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x77cbdc45 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x781a7e37 nfs_generic_flush +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7a7c24e8 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7bfc096c nfs_sb_deactive_async +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7d1c3726 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7db4a8ac nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x81533530 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8166913c nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8916a62a nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x89bc5a64 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8b86266a nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x90a5530f nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x91405c00 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x91d1fe52 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x98c05ffc nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x99ac3b49 nfs_initiate_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9bbec652 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9f868281 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa15694f4 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa18845de nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa21571e0 nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa447064c nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa44c6412 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa744e6ef nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa8d2d1ce nfs_callback_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa8e9e1ae send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xaa41d11a unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xaa6c71e4 get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xaaa14361 nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb367fe6b nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb4523d5f nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb70592f0 nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb7bdf60c nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbb138639 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbdae3802 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbe1baf08 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbefc304d nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbfc0b299 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc009e537 nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc5bce9fa nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc5ef47d5 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc71befb2 nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcc6eb89e nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcd06fb3d nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcd5dc099 nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcdc0f76e nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcf0ce0e3 register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcfe06cfd nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd0141bb8 nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd2c8608d nfs_writehdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd7853a64 nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdae9b5d7 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdf9d2d1b nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe2d408fb nfs_readhdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe3ed2065 nfs_file_splice_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe759d684 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe7f9df45 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe8475a6a nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe9d2c405 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xed985a42 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf228f9b2 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf26a8fd2 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf690f008 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf6e2b5f1 nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xfa3062e3 nfs_pageio_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xfb74880a nfs_fscache_set_inode_cookie +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xfcca94e5 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xfd0f0549 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x00c403b8 pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x0a9a1db2 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x12eef9b0 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x18f6da79 pnfs_readhdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x1e47651e nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x26649d00 nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x2eb1e2c8 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x33d88ba8 pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x38d6d97c nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x46a60f6e nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x4bd84ab6 pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x4cd0f249 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x524952b9 nfs41_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x5c388fec pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x5c6e6cfc pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x747dd5a9 pnfs_writehdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x76074e96 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x76d6da71 nfs4_proc_getdevicelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x82173493 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x838adaa6 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x8465ea08 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x8c05de82 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x93541103 _pnfs_return_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x953f2c64 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xa51625aa nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb42bb637 nfs4_insert_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb7e4f3b0 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xbd5f2841 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xc51d9906 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xc834bd95 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xdb4493be nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xecb83308 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xed15fb41 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xef678549 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xef7589ec nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xf849c75b pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x5847bf51 nfsacl_encode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xcc4029ca nfsacl_decode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x07a59c96 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x0a143712 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1cb231d0 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x598989d4 o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x687f6251 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa9f5379a o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbf29241c o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbf99a072 o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xc3679d7b o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xc52ae064 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xcf479df7 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd859ac8c o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x22de2f40 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x8b1f4d82 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xa8d51b10 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xaea1d8b2 dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xe0c4e91d dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xe4c82268 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x025e2d69 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x16b2e575 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x2416038a ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x32494d71 ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x5469ce31 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x7083dbd5 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x89502fe7 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xb4bd060c ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdc11d739 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdc823ea4 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe2bd47db ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe40cffce ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe417d940 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL lib/bch 0x231d70fc encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x6b770f49 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x9463ff71 init_bch +EXPORT_SYMBOL_GPL lib/bch 0xbdf512de free_bch +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x2f929d63 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x70908e4e notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x021957e1 raid6_datap_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x05513b71 raid6_call +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x0f8a2742 raid6_2data_recov +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x201d8ea3 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x29fa419f decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x28957e13 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x2a92dd50 garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x438c00de garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x8b3f311f garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xef1ff59f garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xff52322f garp_request_leave +EXPORT_SYMBOL_GPL net/802/stp 0x5bc720da stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x87f71e5b stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0xb7c735b9 p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0xdd9ded55 p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x50754510 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0xe2c6bb26 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0x8a5cf788 ax25_register_pid +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x349c6a46 bt_debugfs +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0e46c90d dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0fee32fa dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x10c8d6e0 dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0x136f7d06 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3123c6fa dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x365a6c5f dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0x404a9a67 dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x409ca585 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x47e592c3 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ec35231 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x56baa5b3 dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5cf249fa dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5e2024b1 dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x60ef4e69 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x66756c22 dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x68726ccb dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7211e9e1 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0x7c6d433a dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8c002d25 dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8eb68a86 dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0x93dbcca2 dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9598d24d dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0xaab13790 dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0xadb65976 dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb1cb390d dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb2900daa dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb306096a dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb7b37d50 dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbead331c inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc32bde95 dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcc716581 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0xcfa03cfe dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0xda801773 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdb21cbc4 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0xecba2a1d dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf081bf41 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf3017e21 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf3931b06 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x0ba874b9 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x16b0ad12 dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x3f09850d dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xc132acff dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xc82a0e4f dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xf921ee6b dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x50aaf743 unregister_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x67736eee register_switch_driver +EXPORT_SYMBOL_GPL net/ipv4/gre 0x503a79d6 gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0xd20b21d9 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x05ee5f4c inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x4bfc4edf inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x5b3dcabf inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x7baf9c87 inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x924e65d9 inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xc08f21e5 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0xb8169d49 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x8f1bc314 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x74c63762 nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x1d49d11d tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x785b52d5 tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xac3b7f64 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xcbf09ab8 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xec4de8a5 tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/xfrm4_mode_tunnel 0x1806262f xfrm4_mode_tunnel_input_register +EXPORT_SYMBOL_GPL net/ipv4/xfrm4_mode_tunnel 0x2c15c9e5 xfrm4_mode_tunnel_input_deregister +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x16f8dcf6 ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x84ee4af8 ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x8f750ddd ip6_tnl_dst_reset +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0xb574a7c0 ip6_tnl_dst_store +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0xd4ad9b2c ip6_tnl_dst_check +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0xb7eec4aa ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x6eb85693 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0xcf344859 nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x1115d813 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x12431d5f l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x2093e691 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x252a347b l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x27d8d980 l2tp_tunnel_sock_put +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x383cc224 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x5229fda3 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x64e352ea l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x6bcbac89 l2tp_session_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x8126cbc0 l2tp_session_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xa5b1e679 l2tp_tunnel_sock_lookup +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xd333426c l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xdaff2561 l2tp_session_find_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xee9ff9a5 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x49fab4cc ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x61b89b4d ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x78d486c9 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x8144280b ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x8670c653 ieee80211_request_smps +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xbdfd75b4 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xc4c6a985 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xc8a57996 ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xca06127c ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xfb9948fb ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x1ea8735a ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x397f6231 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x5808603b ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x6344eaf6 ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7273cc5f ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7762965e ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7924b6de ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x80ee118c ip_set_nfnl_get +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x81fff2d1 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x878a2dc3 ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x883d6572 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x9dc5a800 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x9e98722b ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa0f08be5 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa293f8a6 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa2d623f3 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xb0fb378f ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xc031f125 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xc2cadb7c ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xc3b062db ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xfda3ec7a ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x448f714c ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x79ebb57b unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xc097921c register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe249eb62 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0024cfe0 nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x01d2a276 nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0dd846a5 nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1240a313 nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1266d056 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1493f3e7 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1b5ed9f2 seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1dd1e1eb __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x20afe5d1 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x20b3e9f1 __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x22349db5 nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x25739d85 nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x25b24abc nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x26922f49 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x270c4447 nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x27b60917 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x289c3714 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x30c39afb nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x323e2f6e nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x339f78c9 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x34effd38 nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37386cac nf_conntrack_hash_rnd +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37568c75 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37e1d757 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3ff57a98 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x46036551 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x4afbd66e nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x504bcd45 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5075b6cb __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x50fafe18 nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x54426a6d nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x55b7ec5f nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5815a9ba nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x584bfa5f nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a5a47e1 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5abaea11 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5dbc6d7a nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x61e3f2e0 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62a6b3b4 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x667408ef nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x693c3961 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6da90373 nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x70cd866d nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x76a7ebd3 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x779a45fa nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7a889be4 nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7b1df9fd nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7bd602f8 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7fa0d93d nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x821bbcbd nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8bd21dd0 nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x96354266 __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x96c4d4c0 nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9b0920b1 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa1d87ce6 nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa43ed9be nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa4f2b642 nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa5482c5d nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xab3d1f95 nf_ct_untracked_status_or +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xad1bb027 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaff2722b nf_ct_dying_timeout +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xaffda90a nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbb60a1e7 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc0240dd4 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc40f284c nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc4e6bc3d nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcef4fd38 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd6dd2770 nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdfe5e400 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe1bc638f nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe2c35a0f nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf13ceabd nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf4b936ea nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd4387a3 nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x2af25ff3 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0x15aa1d51 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x86d51956 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x0f8c4526 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x1a5bc138 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x4d4fb3f9 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x70cea19f get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x9db31743 set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xdf011428 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xe42f59a1 set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xefb491d6 nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf691e69f nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xf96b35c4 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0xe33be032 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x39fa5ca5 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x7a2013bc nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xae8036f3 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0xf41b3659 nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x85041fce nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xa85c30b5 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x0b2d6e2d nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x1ce33d3a nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x22e57d76 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x39804db9 ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x39822a71 nf_nat_sip_seq_adjust_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x3c5fa9f6 nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x741b4d06 ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x79d5b406 nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x7aa7184f ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x9598b80f ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xf0a0d02c ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xf163b425 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xff50dab6 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0xbb49d392 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0xbe771334 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x0d9bae4b nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x131f636c nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x20c28843 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x8414800a __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x8b19d719 nf_nat_tcp_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x8dd0deb0 nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x8f8da2a9 nf_nat_set_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xb7a3bbd6 nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xd24a7504 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xd438a488 nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xfb2ee15a nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0xe4c5c20c nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x310e0630 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x377bcc3b nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x6d9765f2 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x7da6b0fa nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xa6f4f928 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xca68a3dd nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x15b5096b nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x21f6bba6 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0xbecf5d14 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x340e6f26 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0f22e199 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x19fecd02 xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x29de121d xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x3329c821 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x55fb2107 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x69a037a3 xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x6a991873 xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7e3d60e0 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x807d2b2c xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x88a29e2d xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x969568d8 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xab9ff8f0 xt_hook_link +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xda6f7009 xt_hook_unlink +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xfe592498 xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x2efedbde xt_rateest_put +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0xe4c5ff4a xt_rateest_lookup +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x05b75999 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0x083cbb42 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0x0de4a121 rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x10a213aa rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0x129cbf1e rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x160d28e4 rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0x23ff5f44 rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2610eab1 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x27933452 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x2ec64acd rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3b4fc0fc rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x50cbe7b3 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x75c8901a rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x7faf94aa rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0x8008a7f8 rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x96fafe85 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x97deb61e rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0xbb905de9 rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0xc172155f rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0xc1cf6f17 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0xc2dab779 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xcd10f1fd rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xd38516ef rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0xd5a0059b rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0xd87c24b4 rds_send_get_message +EXPORT_SYMBOL_GPL net/rds/rds 0xf6f06743 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0xfcc1e14c rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x037c0a92 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x69258a8c rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x02248336 gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x393bee85 gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x4a656bdd gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x58bcac4a gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x643c65ba gss_mech_get_by_OID +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x683521b7 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x6859e567 gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x77ff65d8 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x894d15ce gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb1794085 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf2414daf gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x008a8c0f rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02e3ffba rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x03ba4961 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x04f5f8fe rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x094bdf50 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ad2d148 rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b139484 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0b2aa007 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e1474e9 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0e4cfe72 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0ec7d6b4 rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0edb7802 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x11ced11d cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x12a9052c rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1368968a rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x13d2f348 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x14ca6e9b xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15342546 rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x15915363 xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x181f0b9f rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x18bbb16d rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x192af7b0 xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1b8cfe20 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1c0728f8 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1ca5b30a xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1cd04a8c xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1d66399f cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f72e552 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x20117c24 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x203e59dc svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x212cea9a cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x22237fcc xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x246e43da sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x26ca67d5 xdr_process_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x26ddcb13 csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2a529572 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2c5b9db6 xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2c864f9c svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2f8ebbe0 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31e64e79 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x34984ad0 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x39c4f241 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3a2a2f50 xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x41bb14a5 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4208bf0b rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x43aca724 rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4745358c rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4afc3c97 rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4c904f1c auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d3d7c07 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4dc6902c rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4e0468b4 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4fe87dfb xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x54047835 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x56a86c2e xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x578982f1 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b31adef rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5deab824 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5e2540dd unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ec107db rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5efc4071 xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x60785429 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x61159c1c rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6264addf svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x65c71639 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x67ed0e46 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6ce4f274 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d332ea6 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6d429ce8 svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6dc11216 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6f59ae30 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6fdcb416 xs_swapper +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x705040e5 xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7081816f svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x722b3c8c xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x729349af svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x74743678 rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x75bc998f svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x76d8e6d5 svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x778fb9f4 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7935b172 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7a9d5b16 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7f55cf3d xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7fab7be3 xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x80a40599 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82f7b31f svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x83d4dbbd svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x845b8803 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86f1cf7f svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8700240f rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8885d7b0 auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a6c91c3 svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8b7887f4 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8d4b0a57 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e9044ab xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x91360aaf rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9156fb7b rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x92dbab34 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9717e7b6 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x98b75d64 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x99dd572f xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9e991c29 read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9f9a15b8 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa12c1ece svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa379a947 rpc_queue_empty +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa3c63b28 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa45c8476 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa54e821a rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa606368e auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa66cee90 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa794533d svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa80bc668 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa99a5994 svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xab5f9690 rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xabb07d83 rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac3c2148 _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xad17c27d svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaea2b343 rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb0116611 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb314faad rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb911bb3b xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbc709632 rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbca707c4 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdc08222 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbe43a636 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf801a36 xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc04a75bb xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc08f1064 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc11770d5 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc16c0706 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc23e88f7 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc26012a4 rpc_task_reset_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc41e41ae xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc65a5dd8 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc6f928de rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8afed53 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9e1f8d4 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcaaaf634 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcc9e0af3 rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcfb024b9 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3674c9b xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd372badf svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd4400673 xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd5504347 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd59a30ad svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd87a8ea9 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf24248f svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdf2c2466 svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe00cdfa9 svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1a4cccd svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1ac2bb8 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe319ac4d svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe3278ca0 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe34a5a9a rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe4a87e88 rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe6640110 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe74ca1de rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe75df566 rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe890532b sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe925d810 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe9883428 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xec9d5ed7 svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xef0fee9a xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf06d01ff cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf0ccf8d9 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf128d88a xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf2186392 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf37b6a3b xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf37c5c9c rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf43a5ba6 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf5039fad xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf72c4464 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9facc09 sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfaeda231 sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfbb737cf rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfc095b5f __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfc62cf01 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfcce856b xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfd69d94a sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/wimax/wimax 0x29e4a414 wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x30ea7457 wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0x341f34b3 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0x6c5cdf23 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x721fac3c wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7d5e0796 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa29ddae6 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcda732a5 wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0xe4af5901 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0xeb1289af wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0xeb8c5468 wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xf5eee9ca wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xfe4a3298 wimax_msg_data +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x2c0c1280 cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x5856c11d cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x67ec0213 cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x7a282fd5 cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x801947e7 cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x8bf48a31 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x98729882 cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xaeb9629b cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xaf407f66 cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf1fae636 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xf2b171dc cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x3108ea46 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x4d4fd5f1 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xaeea3073 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xd05dc2a3 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xdafc719f pskb_put +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x9823226b ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xaef4f896 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc51dca52 ipcomp_init_state +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xfb99ade1 ipcomp_destroy +EXPORT_SYMBOL_GPL sound/core/snd 0x0fef2e49 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0xa5ab2eb4 snd_ctl_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0xa6248b69 snd_kctl_jack_new +EXPORT_SYMBOL_GPL sound/core/snd 0xdbd30289 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0xddb5e8d9 snd_kctl_jack_report +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x01bd9a52 snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x97843ac3 snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0xe8d480fe snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x04e1b99f snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x09e913c1 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x1bf1c13f snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xd38f8935 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x24dfbeac snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x2f1090e1 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x5e7196c7 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x83cd4f06 snd_ak4113_build +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x921978da snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0xd405140b snd_ak4113_create +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x012fc61d snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0285376e snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x049a46ba snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x05ccc44c snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x05ed1e16 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x065158fe snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0676f5ac snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x06ba63a0 snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x08c55728 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0afe2552 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0b96d2bd snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0be9df39 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0d344ab7 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x10ac8e71 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x13cee671 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x14eff254 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x152a9460 snd_hda_gen_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1e14bb56 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x20a5cf3b snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x24fe67be snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x260b7994 snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2875a7c4 snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x288dd5a6 snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x29d236a8 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2aef30b7 is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2ba96b17 snd_hda_gen_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2bdaa810 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2c4f0dad snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2cfe111a snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3091bc41 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x32714721 snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x33c933a5 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x346f779d snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x35e72061 query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x375cacd5 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3b3bc1b6 snd_hda_override_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3ce2b6ce snd_hda_bus_reboot_notify +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3db28820 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4070c2e0 snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x428a40d8 snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x43924512 snd_hda_query_supported_pcm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x44d8ba4f snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x471430f4 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x49887258 snd_hda_jack_detect +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4dab1f60 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x50d4a6a4 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5171f4d5 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5211650a snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x527ee1a8 snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x544daf2e snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x57d8ce86 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x587bfd52 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5bdc6394 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5d193ead snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5e46e61e snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5f5eee20 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x610ed4c8 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6561aaea snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x67d11d7c snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6adcb6e7 snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6b331430 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6c649798 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6d26042e snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6f622fda snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6f8c04fe snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x72573210 snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x72f45435 snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x766e83e0 snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x768cc1e1 snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x77415de1 snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7757e2dc snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x77ede8f1 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x783b2241 snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x79410c4f snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x79f9256f snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7cc63425 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7dbc02b1 snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x818a3be5 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x81a7acf5 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x829ad759 snd_hda_jack_tbl_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x85f588f5 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x883b16cb snd_hda_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8884b9e0 snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x88dc4ab1 snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e4c6826 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8fa9b41b snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x90a9132e __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9b920b9b snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa012e81e snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa177bc96 snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2e6c816 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa31532ed snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa40f4905 snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa9371f2f snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xab119840 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xad019415 snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xae3aa595 snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xae8c687d snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb36cdd34 snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb6257fd1 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb7867b66 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb8668a70 snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb89f4183 snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbc03aff8 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe0ff95b snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcd2eae06 snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcddcf902 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcf9be902 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd15c311b snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd28f16aa snd_hda_codec_update_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd29399f6 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd403c0a9 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd4865a68 snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd7edc8d4 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd97bc8fd snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdab9e5e5 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe118de5d snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe2fb22b2 snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe38c7a1e snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe73c06f5 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe74ea215 snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe758c7ee snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed76f5c5 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3657991 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf5693d04 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf6dedd3d snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-88pm860x 0x03d1b4c2 pm860x_mic_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-88pm860x 0xbfb3b1b0 pm860x_hs_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ab8500-codec 0x8c23db08 ab8500_audio_set_ear_cmv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ab8500-codec 0xd013ea3f ab8500_audio_setup_mics +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x1f8ea94a arizona_out_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x37e18744 arizona_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x5e8e6067 arizona_mixer_texts +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x73f9f1d5 arizona_lhpf3_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x78355a2b arizona_mixer_values +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x7e59c88a arizona_out_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x93ed4d8b arizona_in_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x9cb34752 arizona_in_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x9f5a143c arizona_out_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xb65ecf5b arizona_lhpf4_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xbda2db92 arizona_set_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xc8c68d8f arizona_init_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xc9c29637 arizona_mixer_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xcfcdbe31 arizona_init_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xd58efa61 arizona_lhpf2_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xe2e28337 arizona_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xe466e0fc arizona_lhpf1_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xf23a2c4b arizona_in_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cx20442 0x13ed556e v253_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98095 0x8fdf210a max98095_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x00cc39c9 max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-sn95031 0x44622e15 sn95031_jack_detection +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tpa6130a2 0x9e7a28ca tpa6130a2_stereo_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tpa6130a2 0xb9044ad8 tpa6130a2_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x26588c93 twl6040_hs_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x6bab01fb twl6040_get_dl1_gain +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x7e02b3f7 twl6040_get_hs_step_size +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x9ef6e934 twl6040_get_clk_id +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0xf0f27de0 twl6040_get_trim_value +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wl1273 0xe3ff8c40 wl1273_get_format +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x2fef6d83 wm_adsp2_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0xd62b0514 wm_adsp1_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0xdd1a3991 wm_adsp2_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x0d714b2c wm_hubs_update_class_w +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x1227cbfa wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x5cd7eb9b wm_hubs_dcs_done +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x8b4e4cd7 wm_hubs_hpr_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x9802efb9 wm_hubs_handle_analogue_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x983a5c5d wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xb2922f3c wm_hubs_hpl_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xc8ae8d87 wm_hubs_vmid_ena +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xfe25315e wm_hubs_set_bias_level +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x7467cead wm8350_mic_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0xbe6fccd2 wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0xe07c6511 wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0x14a424c8 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x038fcb55 wm8958_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x27615798 wm8994_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8996 0xc5ba6cf2 wm8996_detect +EXPORT_SYMBOL_GPL sound/soc/mid-x86/snd-soc-sst-platform 0x10f9d290 sst_register_dsp +EXPORT_SYMBOL_GPL sound/soc/mid-x86/snd-soc-sst-platform 0xf86b0e82 sst_unregister_dsp +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x011ff051 snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x03ccea64 snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x06c90e35 snd_soc_dapm_put_enum_virt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x07b09fe1 snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x07f70341 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0a1b1cea snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0e0f41d7 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0e599f26 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0e920764 snd_soc_dapm_get_enum_virt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0fc296f0 snd_soc_cache_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x12829c6e snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1ad6bea5 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1d72e683 snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1e4d43bd snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1e5600da snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x250fed01 snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2541a979 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x266c7a5e snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2724b647 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x27722ecb snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x281a9a4e snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a4f41b3 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2b51f0a3 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2c0902c6 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2dff5e7e snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2e540f69 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2f61bbd2 snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3381b7ba snd_soc_codec_writable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3f1a31e2 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x407e6a1c snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4351e796 snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4493464e snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x48c6b3ee snd_soc_default_writable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x48f5b98b snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5004c7b9 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x523fa51a snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x52e67b22 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x54f8344c snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x57cf34aa snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5bfe8928 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5cc15d8f snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5cd149f8 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5d31f960 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5e8003b1 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5efb802c snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x615c266e snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6261d6c8 snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x638b3a0d snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6581dd64 snd_soc_update_bits_locked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x66042fb0 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x692a2194 snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6a76b6cb snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c3f36f6 snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6c9de67e snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6d17bdbc snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6dd5ade9 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7040e18f snd_soc_cache_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x704e2242 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x718b977e dapm_mark_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x722163ff snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x730fda43 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x74a6c967 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7560ec28 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x762407b8 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x76d69ab8 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x78e5eef2 snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7946d647 snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7a9067c8 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7b5a1a16 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7e606130 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7eff0e6f snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7fb4035b snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8097ada2 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x83b7dd79 dapm_mark_io_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x83eed483 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x86a4e8f0 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x86bd79a5 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8734c685 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x87d5bde0 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8a8380d3 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8bf5e25e snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8c1f9769 snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x903fd1de snd_soc_codec_readable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x922dd0df snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x92552111 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x93202d87 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x938593be snd_soc_default_readable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x951711c9 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x95761f6c snd_soc_platform_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x970cce87 snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9ac0ec12 snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9caf3672 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa041ca02 snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa06d6256 snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa133fb72 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa149eced snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa18ead7c snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa6affc1b snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa7f511fa snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa8876413 snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaceb1a1f snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xafadd24c snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaff173e1 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb0bdfd49 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb4256793 snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb6fd5d31 snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbb36d66b snd_soc_bulk_write_raw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbc25f069 snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc3b217ef snd_soc_default_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8269f94 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8376732 snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc97dab99 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xceb0bb74 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd3b867e6 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd56ef8cc snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd57c1923 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xda7b8d2b snd_soc_cache_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe052e341 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe1ad323e snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe44e7e01 snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe4635b01 dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xe9789951 snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeb025dd2 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeb711ae7 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xece0d6e3 snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xedf4ca7c snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeeaa35f1 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef61e767 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf0ce9509 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf26646a4 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf851ead9 snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfa9d0e65 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfac7735f snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfd4fae6c snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfdfdbe6b snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL vmlinux 0x0002959f ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0x0005b197 key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x000c3bc2 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0x00632780 work_busy +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x00682841 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0x009c5534 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00d1e6e9 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x00d28689 fsnotify +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00fb656d tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x00fc9d1e rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0x01010c6d klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x011cf028 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x014b1908 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01bcde23 usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x01c222d5 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x01d11a05 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x02283171 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x02444e06 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x026211e2 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x0277127a dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x02892180 vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x029f7eb6 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x02ad7fc3 invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x02fb69df __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x03066bfc tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x030e0b8f max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x031f0648 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x03237190 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x03338c9c register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x034022e4 tpm_store_cancel +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x034992f2 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0x0373a1c4 power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0x03b1e0cd transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x03c35c1d serial8250_tx_dma +EXPORT_SYMBOL_GPL vmlinux 0x03d118a8 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x03f21a8e pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x0465a073 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x0466b37a bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x0477a2f9 blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x048b5f8d twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x04a79848 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x04b11f44 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0x04bf26af ioremap_page_range +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04c406dc register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x04c4f603 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x04ef8a1b __clocksource_updatefreq_scale +EXPORT_SYMBOL_GPL vmlinux 0x04f9888c __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x053faf70 dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x05412e3e usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x054e1bfb ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x056e4621 crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x056e8e94 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x0572b26b pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x057347d4 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x058b582a vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x05ae262e regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x05c3f2ec ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x05c4bc60 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x05cea748 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x0604ebd1 __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x060b0d59 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x0610594c bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0x062fc169 xen_hvm_resume_frames +EXPORT_SYMBOL_GPL vmlinux 0x06443e41 ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x0666791a usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x067c8b36 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x06814f47 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x06963c36 intel_msic_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x06a581e0 skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x06d44e29 crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x06f22ca2 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x07195fb1 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x072d75da ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x075971d3 __rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0762403c edac_put_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x0769a28b inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0x078c0137 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x07b21f85 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07df01c6 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x07e3ca5e net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0x07eb4a34 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0x07f300c3 smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x0827e3f4 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x08706e66 simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0x087154f8 usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x087e1866 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x08940228 fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0x08b37353 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0x08b412ca regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x08bdce58 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0x08ee4bde gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x09038508 sk_unattached_filter_destroy +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x092c2a7a irq_domain_add_tree +EXPORT_SYMBOL_GPL vmlinux 0x09469482 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x0958d1fb ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x0962d0e8 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0x09b2db46 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x09c08276 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x09d6bd84 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0x0a0eeab3 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x0a5ceba2 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x0afd4610 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b19ed7c apei_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x0b52e502 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x0b59390b __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x0b595031 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0x0b98b7f5 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x0bae62b1 ktime_get_monotonic_offset +EXPORT_SYMBOL_GPL vmlinux 0x0bcc1793 skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x0bfa3a19 rcu_idle_exit +EXPORT_SYMBOL_GPL vmlinux 0x0c010cdf dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x0c0416c3 pwm_disable +EXPORT_SYMBOL_GPL vmlinux 0x0c0c015e ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c36fae1 sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x0c5fa1f6 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x0c68b9c6 crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0x0c71a3a3 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0c89836f get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0x0cb595cf ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x0cf81ae5 ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x0d018f0d extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x0d1188d4 usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x0d1a2f1d inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x0d1cadf9 kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x0d32130e ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x0d52a809 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x0d925565 dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x0da0d791 i2c_unlock_adapter +EXPORT_SYMBOL_GPL vmlinux 0x0da5232f cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x0ddd2687 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x0de80aa1 rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x0deb0ade register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x0e13cb4d apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x0e181f5c adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x0e2e9739 posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x0e423e0e sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x0eed1acb add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL vmlinux 0x0f071fcf blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0x0f12cb11 balloon_mapping_alloc +EXPORT_SYMBOL_GPL vmlinux 0x0f1fe58e crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x0f46ecd4 sock_update_netprioidx +EXPORT_SYMBOL_GPL vmlinux 0x0f6087d7 fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x0f751aea input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x0f9c3d89 blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x0fa138de xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x0fafad00 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x0fb6f63f srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x0fc01e9f static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x0fcc1969 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x0fcd8232 rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x0fdfd63e btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x0fe48ffb apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x0feaea06 tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x0feb3fad crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x101184f4 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x10291853 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x103dad9c vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x10469f4c inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x1046bff0 usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x104d54bf skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0x10547d22 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x106574bd __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x10c094d3 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x10c9d678 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x10e290a6 dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x10e485b3 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x10ecc52c usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x110076d1 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x110105cd adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x110106c1 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x110523aa ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x1138cf89 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x1162a14d device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x1167cde3 blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x1172ce54 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x117c7305 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x11b78222 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x11f59b39 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x120569d7 css_id +EXPORT_SYMBOL_GPL vmlinux 0x1210b69f cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x121ed3f3 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x122e97e3 ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x12315949 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x123eeba0 pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x12559a50 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x1258d9d9 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x1272c82a get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x128a2a90 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0x12bf239e ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x130a1818 tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x131a5ed7 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x131db64a system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x13391ee1 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x135c618e crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x135c783b ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x136c526e class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x138082f6 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x138aff76 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x13932085 zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13dc1c02 xen_swiotlb_map_sg_attrs +EXPORT_SYMBOL_GPL vmlinux 0x13f3e3fb klist_init +EXPORT_SYMBOL_GPL vmlinux 0x14284309 pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x143e0f77 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0x1447f60e module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x145784d1 gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x146a7abd da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1479fecc xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0x1488cd33 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x14a25ea0 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x14a32fc6 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x14a48eb1 dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x14dfc826 fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x14e500bd __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x15010e1f arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x151512b3 cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x151c7be8 rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0x153a0c91 usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x153b1e96 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0x154f5d82 crypto_ahash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x15568631 lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x15819455 sec_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15a9b7d4 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x15ad462c srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x15cfef23 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0x16000a3c dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x162883f2 usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0x162ff9f8 ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x16363e97 da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x1650bf27 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x165c0555 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x167be6ed rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x1693bc5d pstore_register +EXPORT_SYMBOL_GPL vmlinux 0x16c57b0c unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x16c7c988 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x16cf1f45 led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0x16d70edf tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0x16e7ba41 xen_unmap_domain_mfn_range +EXPORT_SYMBOL_GPL vmlinux 0x16f8c972 tpm_write +EXPORT_SYMBOL_GPL vmlinux 0x171b577b unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x172e72d4 vdso_enabled +EXPORT_SYMBOL_GPL vmlinux 0x1750734a rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x175a10f0 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x17614bf3 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x177c338d twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x1780203b sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x17cefff8 cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x17d9aec5 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x1829b9ed hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x183cb3db sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x1853653c btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x18582826 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x1866cec2 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x18c0d1dd pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x18ca8c5e wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x18d59472 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x18e2c347 dev_pm_qos_remove_global_notifier +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x1933f59d irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x193d48e0 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x19496284 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x196614ce hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x1974ee47 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x198bf005 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19b37761 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x19bb300b xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x19bc3999 power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x19fc7f60 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x1a082d69 max77693_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x1a31e676 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a46a19a tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x1a556301 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x1a585d3e tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x1a5fb07f fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0x1aca29f6 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0x1ad83009 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x1ae0b01b ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0x1ae0e135 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x1b1f2bda speedstep_get_freqs +EXPORT_SYMBOL_GPL vmlinux 0x1b38db7d blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0x1b494645 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x1b4ce589 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x1b52db1c probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x1b53aecf iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1b5c7cb7 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x1b76763e i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bb76cc9 sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0x1bfcde4f power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1c17782a regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x1c3679a2 print_context_stack_bp +EXPORT_SYMBOL_GPL vmlinux 0x1c5b1f28 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x1c6c1034 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1c80d27d btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1cffc4df RSA_public_key_algorithm +EXPORT_SYMBOL_GPL vmlinux 0x1d31535f acpi_power_resource_register_device +EXPORT_SYMBOL_GPL vmlinux 0x1d459685 xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x1d58ae14 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x1d62f36a driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0x1d6c86ad regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x1d739e1c xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x1d77b0f8 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x1da12bd6 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x1dce3cfe __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1dd50e76 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0x1df081ec spi_master_resume +EXPORT_SYMBOL_GPL vmlinux 0x1df8d437 __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x1e000879 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x1e2eabca subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x1e314b21 regulator_use_dummy_regulator +EXPORT_SYMBOL_GPL vmlinux 0x1e3a88fb trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x1e55941c tpm_bios_log_teardown +EXPORT_SYMBOL_GPL vmlinux 0x1e5cefde relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0x1e67c9bd raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebcd181 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1ed7a1f5 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x1edc21cb hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x1ee58200 edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x1ee972ce acpi_dev_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x1f100d4a fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0x1f1988f7 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x1f6a7b09 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x1f8544b8 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x1f8db7f9 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fba3929 serial8250_rx_dma +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fd07f03 inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x1fea3521 ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0x1ff7c923 get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x201a26c9 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0x202b2859 blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x2043f1af led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0x208d7b5c __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0x209ec764 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20ca7db5 shake_page +EXPORT_SYMBOL_GPL vmlinux 0x20d8599b ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x20f7f2ae scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x2100c55b __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x210de9d9 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x21269a2e m2p_remove_override +EXPORT_SYMBOL_GPL vmlinux 0x212a6f99 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x212b9577 sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0x2168d948 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x217259aa usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x219b3509 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0x219ca802 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x219cb78d tpm_open +EXPORT_SYMBOL_GPL vmlinux 0x219fe717 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x21a02126 crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x21c20d1a ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0x21e8c709 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x21fd6be9 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x22436a53 sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x225c1067 ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0x22753bdb spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0x2278e84b preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x22836026 unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x22f82a2b usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0x2331ca55 pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x233b7d76 __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x2359df1b find_vpid +EXPORT_SYMBOL_GPL vmlinux 0x23632f23 xen_swiotlb_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x23679939 __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x2396a756 cgroup_next_descendant_post +EXPORT_SYMBOL_GPL vmlinux 0x23e35b68 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x240580a9 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0x24137ee0 timed_output_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x24283c76 __module_address +EXPORT_SYMBOL_GPL vmlinux 0x24300819 tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x24698411 sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x247ef831 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x24b44e2d input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24c94819 put_device +EXPORT_SYMBOL_GPL vmlinux 0x24d213db spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x24dcefc8 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x24fc46b6 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x2517a46b dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x25292a0d sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x257fc2be tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x258e1952 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x26032be9 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0x2623db67 dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0x262aa282 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x262f20a8 local_clock +EXPORT_SYMBOL_GPL vmlinux 0x264587ad shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x264aced1 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x26520970 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x2664afb1 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x267a9b6b tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0x26944404 mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0x26a309da serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x26af0bc7 i2c_lock_adapter +EXPORT_SYMBOL_GPL vmlinux 0x26b71fb4 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x26bbe645 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0x26c48243 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26cf3657 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x26f99bea mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0x272d5141 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x272faac9 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x273762f7 dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x2737b96b usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0x2737fb90 debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x2744c474 inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x2762a77a ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0x276449d6 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x2787db00 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x278ec596 firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x279cb985 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x279d33ce led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x27c1e63f usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x27d48615 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0x27dc8335 put_pid +EXPORT_SYMBOL_GPL vmlinux 0x27dfde63 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x27ea5464 xen_swiotlb_unmap_sg_attrs +EXPORT_SYMBOL_GPL vmlinux 0x27f4f029 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x280b4f0a exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x280e4516 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x2815d584 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x28221b40 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x283031cd subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x2869ebaf regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x28a82da4 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0x28a903c8 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x29059b53 __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0x291638af elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2918893f dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x293f073e vrtc_cmos_write +EXPORT_SYMBOL_GPL vmlinux 0x294a75ca wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0x294d078f crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0x29534e72 ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0x2959087e srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x295aee20 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0x29ab5aed pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x29b4c41f class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x29e17637 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x29e98cda rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x2a043f34 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0x2a07e742 sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x2a3a9d2a hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a7a2045 perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0x2aa617cf mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x2aa9425b max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x2ac244c9 ref_module +EXPORT_SYMBOL_GPL vmlinux 0x2ac36de7 btree_last +EXPORT_SYMBOL_GPL vmlinux 0x2ad1ece4 zs_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x2ad48200 wm8400_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x2ad789f6 pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0x2ae765de mmput +EXPORT_SYMBOL_GPL vmlinux 0x2aeedef2 regulator_register +EXPORT_SYMBOL_GPL vmlinux 0x2b1aaf81 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x2b1ba741 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0x2b587e29 fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x2b5a3cb0 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x2b67f096 speedstep_get_frequency +EXPORT_SYMBOL_GPL vmlinux 0x2b8a2f95 __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x2bcde065 acpi_power_resource_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x2bdb9cb5 usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0x2be37728 user_update +EXPORT_SYMBOL_GPL vmlinux 0x2be7fb8e disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x2be8cc44 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x2bf33103 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x2c00d7c6 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c229ea9 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x2c24bbf4 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x2c33ac07 xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x2c532db6 free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x2c542382 tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x2c6a0410 xen_set_domain_pte +EXPORT_SYMBOL_GPL vmlinux 0x2c7109e4 usb_is_intel_switchable_xhci +EXPORT_SYMBOL_GPL vmlinux 0x2c748f50 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x2c7d0047 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x2c7d9c64 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x2c7db649 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x2c902bb2 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x2c95c837 pci_intx_mask_supported +EXPORT_SYMBOL_GPL vmlinux 0x2c9c523a rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x2ca4ebcd regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x2cde0992 usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x2ce532b9 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2cea32ee unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x2d0ac226 usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x2d17a0e1 cgroup_taskset_size +EXPORT_SYMBOL_GPL vmlinux 0x2d1b02d2 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x2d2d5c2a led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0x2d3385d3 system_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d59c954 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x2d90c17e dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2db0b950 securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x2dc1bc34 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x2ddd49fd security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x2de46289 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x2def5525 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x2e010199 ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0x2e19d88e ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0x2e2360b1 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x2e2e1b8b xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x2e2f1740 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2e3155b9 acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x2e45e488 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x2e6b516f ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x2e7e877a regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0x2e8b6c8c __pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2e9f4b8d pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2ebe3135 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x2ef881e8 usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x2f014a64 ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0x2f04323f crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x2f26d1b9 ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x2f3717a8 da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x2f4113a2 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f693f15 crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x2f6ce4de md_trim_bio +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2f8f943f sk_unattached_filter_create +EXPORT_SYMBOL_GPL vmlinux 0x2fa8cd58 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x2fbdc463 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x2fc27b86 register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x2fecf5fc spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x2ff6d735 pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x3004b269 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x30178261 xen_swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0x3037dec4 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x30386e21 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x3053a842 xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x30884461 devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x308b733a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x30a4f4ca bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0x30acc9de ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x30cc3746 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0x30f85ff1 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x30f937e1 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0x3109b751 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0x3117a875 cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x31266931 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x313a3589 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x31756fc2 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x31931685 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0x31a1cf89 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x31b662d3 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0x31c0c2d1 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x31c18391 ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x31c7970f pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x31c7bf87 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0x31e1b207 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x31ef8523 crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0x32028ae1 pwm_enable +EXPORT_SYMBOL_GPL vmlinux 0x320fb4d5 fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x325e8144 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0x32631a19 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0x32679aca css_depth +EXPORT_SYMBOL_GPL vmlinux 0x32924a4d scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x32964c3a proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x329bbbde timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x32ad1e96 ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x32b31a8c ktime_get_boottime +EXPORT_SYMBOL_GPL vmlinux 0x32b398b9 get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0x32b60150 inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0x32c3cb4e class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x32c65bb1 ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x32fd447a monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0x32fd4b62 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0x330f4a1b rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x3313ae48 ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0x333228ec intel_msic_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x334c37d8 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0x336154ca rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x33a0112d pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x33b96e5d apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x33d406c4 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0x340b764f device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x342b49a7 hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x345ce9cc cgroup_lock_live_group +EXPORT_SYMBOL_GPL vmlinux 0x345e160d page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x345ef7ce crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x347fd4b3 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x34a02220 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x34ac50a4 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x34d5e280 tpm_add_ppi +EXPORT_SYMBOL_GPL vmlinux 0x34dcb4c9 usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x34f63af0 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x35257908 ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x352650ee gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x3549d5be blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0x35550497 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x3560bfbd jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0x357fea95 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x358ff60f twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x3590508b crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x3599eeb3 iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0x35cc1cea sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x35dc82c1 serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0x35f3ae51 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x36192be4 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x367e62df key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x36a13e6f pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x36b5497e intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x36ba2551 intel_scu_devices_destroy +EXPORT_SYMBOL_GPL vmlinux 0x36f82b71 i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x3700154c pkey_hash_algo +EXPORT_SYMBOL_GPL vmlinux 0x370588bd sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x37078605 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x3707a020 usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0x37173820 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0x3754f93f relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x375effab __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x376e19df use_mm +EXPORT_SYMBOL_GPL vmlinux 0x3792e56c sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0x37c3fb96 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x37e58fa7 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x37f69414 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0x37fd844d crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x38164e9d rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x38331751 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x383403a1 devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x3841ab01 unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x38620e38 gnttab_grant_foreign_access_trans_ref +EXPORT_SYMBOL_GPL vmlinux 0x386a4708 blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x386a628f hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x38a9c2c7 input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x38ab4ba4 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x38b179d3 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x38ca4282 fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x38f0a4dd usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x39133391 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x392fd158 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x39394782 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x393ac56f da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x39477403 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x399e6c6a sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0x39e598f8 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x39e670aa kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x3a09bf5c rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x3a0a13a3 pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x3a26ed11 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x3a31292d fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0x3a38dc65 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x3a4f6a32 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x3a536bd7 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x3a81993a irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x3a81d7a3 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x3aac6886 pci_pri_enabled +EXPORT_SYMBOL_GPL vmlinux 0x3ab18ca0 da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3acdf325 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x3ad38e45 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x3ad83563 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x3ad8f21d arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x3ae11dab fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x3aef6a54 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x3b21b2fc blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x3b7145bb apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x3b990667 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0x3bb9d6c4 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3bfcb864 xen_swiotlb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0x3c140e10 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x3c2ba131 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0x3c92d8cb extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3c9390db pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3ca6ab00 ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x3cac21b9 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x3ccb9571 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cd2ae5e wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d168b74 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x3d2fd930 regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d5ade86 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0x3d620976 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3dae9430 tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x3dd4d3a7 bprintf +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3de9cae1 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x3dec6677 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x3e017232 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x3e0fa135 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0x3e4db22e sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x3e588ab2 cgroup_unload_subsys +EXPORT_SYMBOL_GPL vmlinux 0x3e7080cb mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x3e757637 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x3e7f0dfc __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x3ea0b66d pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x3ea5196d apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x3eacb054 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0x3ec2a661 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x3ee29d59 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f229c4c oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x3f587649 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3fa08da1 arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x3fb213aa debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x3fe92d0a mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x3ffe3c3d xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x4007f056 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0x403f9529 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x408e0a36 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x40910ccb vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0x40922306 rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0x40944922 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x40a7c064 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40ca07d3 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x40f46025 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0x40f78723 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x4116959c rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x412938f2 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x41459a69 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0x417b7248 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x41814cb8 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x418ae6ff sec_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x418d5be8 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x41dec20b simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0x41e1064f acpi_get_gpio +EXPORT_SYMBOL_GPL vmlinux 0x41ee8d3f xen_swiotlb_sync_single_for_device +EXPORT_SYMBOL_GPL vmlinux 0x41fe57b4 user_read +EXPORT_SYMBOL_GPL vmlinux 0x420125d7 tpm_read +EXPORT_SYMBOL_GPL vmlinux 0x42032056 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x4205ad24 cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x42160169 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x421f9d0b tpm_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x422a6618 spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x424a239d dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x42825ce2 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x428c25a3 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x429d93c0 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x42ad3066 transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x42af55da exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x42c989ff iomap_atomic_prot_pfn +EXPORT_SYMBOL_GPL vmlinux 0x42cda25e pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x42e98b94 blkg_lookup_create +EXPORT_SYMBOL_GPL vmlinux 0x42f36621 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x4301a3c6 __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0x430f443c sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x43234a34 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x43353e51 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x43550c76 aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x435e6c6e crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x436dbff1 __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0x438c01ed blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x4393e15e ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x4396b273 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x43a53735 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x43acd469 evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0x43c6e3e7 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x43ebc80b thermal_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x440b4ca3 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x44386bdf spi_master_suspend +EXPORT_SYMBOL_GPL vmlinux 0x44404f11 kdb_register_repeat +EXPORT_SYMBOL_GPL vmlinux 0x4455e1b3 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44a3854d pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x44adb4bb fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x44cc9c55 klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x44fb3041 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0x4512b086 intel_scu_devices_create +EXPORT_SYMBOL_GPL vmlinux 0x452f4a4f iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45d14bdf hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x45f02a5b tpm_show_active +EXPORT_SYMBOL_GPL vmlinux 0x46074c17 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x460f7531 wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x46297e4c aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x46676d88 led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x46c6fd51 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0x46c82368 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0x4711c23a xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x478a874d regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x479395ea fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x4793f2d9 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x47ff399f regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x48682db9 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x488ddffc unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x48a488a0 sysctl_tcp_cookie_size +EXPORT_SYMBOL_GPL vmlinux 0x48ab5da7 pkey_algo +EXPORT_SYMBOL_GPL vmlinux 0x48ba32f5 usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x48d587b8 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x48deeed1 pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x48df8c40 ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x491125ff edac_subsys +EXPORT_SYMBOL_GPL vmlinux 0x491314c6 crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x4967748a irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x49742e57 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0x497afe80 attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x4982a57f probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x498d293a trace_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49db8db4 register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x4a07ec95 ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x4a2208d8 acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0x4a47b122 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x4a6688af adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x4a812b91 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x4aadeb9a ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x4ac10d10 pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x4ad3856e debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x4ae0a373 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x4afb573b vrtc_cmos_read +EXPORT_SYMBOL_GPL vmlinux 0x4b003111 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0x4b05c084 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x4b076147 uncache_firmware +EXPORT_SYMBOL_GPL vmlinux 0x4b1ba07d serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x4b2e18a5 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x4b639896 dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x4b694bf9 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0x4b93df89 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x4b97d052 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x4ba6bd93 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x4bbc0689 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x4bc62a81 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x4be00bb5 spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x4bfe57d7 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x4c10d14d __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x4c16f764 btree_remove +EXPORT_SYMBOL_GPL vmlinux 0x4c4d545f clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x4c6313a7 __put_net +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4cdee584 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0x4d13f9d8 usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x4d1b0ca0 tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x4d40305a usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x4d882118 ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x4d910805 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x4da7caf9 crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x4dba62ed pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x4dc0683b crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0x4dcf0d2f posix_timers_register_clock +EXPORT_SYMBOL_GPL vmlinux 0x4e04b3ac ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x4e109192 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x4e242f5f pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x4e57723d apei_read +EXPORT_SYMBOL_GPL vmlinux 0x4e5863ff device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x4e5b7a1e tps65912_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x4e74e625 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x4ed6e906 blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x4ee27c7c usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x4ef5bcf4 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x4f1ccf7d dev_pm_qos_add_global_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4f241b5b hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x4f453d43 sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x4f625931 fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x4f7d96c4 usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x4f846917 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0x4f85de3c pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0x4fd4e89d ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x4ff1b66f sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x5026585c xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x505d7f63 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x506691f1 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x506cc085 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x5091b823 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x50a7ccf2 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0x50c89f23 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x50d9298d securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0x50da0539 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x50df82e4 __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50ead61a setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x50ef1f83 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x50fb4749 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0x510551e3 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x5108b3fc acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x51275cb9 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x517b5744 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x518cf9d5 get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x519663c8 ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x519ceb32 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0x51a62f61 register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x51afc1c0 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x51f0399c sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x5210a5bf hsi_board_list +EXPORT_SYMBOL_GPL vmlinux 0x52212010 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x52367d6a usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x5254b70e crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0x5258175f serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x525db0d6 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x525ec800 kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x52b354c1 dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0x52c0618d usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x52ec3d52 srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x52efff12 vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0x53161fc1 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x531e0418 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0x531e2944 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0x5346bccc extcon_get_cable_state_ +EXPORT_SYMBOL_GPL vmlinux 0x534898e2 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0x5358fc36 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5374b5f7 ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0x5388e299 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x539f157b pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x53a3e486 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x541bd60a irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x54579436 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x54874603 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54b8ac68 gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x54c1237c extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x54ef4145 tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0x551987ac power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x5523d8a4 usb_enable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x5526925e acpi_dev_pm_detach +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x55784228 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x55a2a929 __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x55aca159 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x55e7581f pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x564f1dca klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x5654f836 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x565b6892 uuid_le_gen +EXPORT_SYMBOL_GPL vmlinux 0x56886b19 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x5698b9ed sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0x56b63670 lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x56befcba fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x56d0e43d blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x56d697ce cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x56dfa4c2 pm_generic_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x56e75d47 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x57195da5 sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x57231f45 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x57581e3d pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x576401ff pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x5768daa7 sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x577f23c3 debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x578bd166 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57dd5a59 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0x581aa38b wm8994_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x58370240 cgroup_load_subsys +EXPORT_SYMBOL_GPL vmlinux 0x5839fc62 gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x58413099 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x58485b19 __netpoll_free_rcu +EXPORT_SYMBOL_GPL vmlinux 0x584b1c0f blk_add_request_payload +EXPORT_SYMBOL_GPL vmlinux 0x586f7306 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0x58736736 bmp085_remove +EXPORT_SYMBOL_GPL vmlinux 0x587bd6a1 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x587e83dc rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0x58c4375d device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x58c54cf7 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0x58e1526f noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x58fe9409 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x593e116f class_destroy +EXPORT_SYMBOL_GPL vmlinux 0x593f0d46 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0x593f24b5 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x5947abbe max77693_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x59715bbc rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x598ece9e __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x59945c53 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0x59ca9f6c ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x59d03bc5 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x59e2743e call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x59eae699 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x5a10671a crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a3e09ef vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x5a43ff83 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x5a441ebd efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x5a48534a regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x5a7ae1b5 iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5ac6261d cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5af3f6e9 sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x5b49f975 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x5b94e2e8 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0x5bd6b19c blkio_subsys +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c359e4b spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x5c3bb7bf usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x5c5237cd uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x5c5bf6bb ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0x5c5d30b3 dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x5c853622 unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x5cd11d69 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0x5d085990 vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x5d12e48f input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x5d194f5b scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d3d5d62 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x5d3dbe68 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x5d48a650 m2p_find_override_pfn +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d9042a2 wm8994_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x5dbf1e7a class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5dd18380 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5de25635 register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0x5de553b7 crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x5df80918 sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x5e103c62 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x5e4c2935 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x5e51cd74 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x5e6b36ea xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x5e76583f input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x5e8b0b8b xen_swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x5e90745d skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0x5eb41316 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0x5ebc5d00 netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x5ecdb867 pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x5ed3f23b debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x5ef85fac arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x5f1c5db9 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x5f248f72 set_timer_slack +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5f33237a tpm_dev_vendor_release +EXPORT_SYMBOL_GPL vmlinux 0x5f61b172 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0x5f67c3ad pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x5f75340f ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0x5faf24a9 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x5fc27be9 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x5fd513c5 extcon_set_cable_state_ +EXPORT_SYMBOL_GPL vmlinux 0x5fdfa2c1 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x60506751 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x6071dd5c device_add +EXPORT_SYMBOL_GPL vmlinux 0x6074d616 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x60899d66 disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60a79897 usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0x60bdf405 usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60db0856 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x60e0fb12 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x60e7fafc usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x611006d5 apic +EXPORT_SYMBOL_GPL vmlinux 0x6114d8a4 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x6140f64e usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x61634f05 lock_flocks +EXPORT_SYMBOL_GPL vmlinux 0x616b7f9c __mrst_cpu_chip +EXPORT_SYMBOL_GPL vmlinux 0x6175bb20 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x618ab5a8 bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x618f3c45 hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0x6197ecae __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x619c599b tpm_release +EXPORT_SYMBOL_GPL vmlinux 0x61a8543f ata_sas_port_async_resume +EXPORT_SYMBOL_GPL vmlinux 0x61d8dcfb inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0x61fb404c bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x61fbee4b platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0x622e6b93 __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x623803c8 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x624a6406 hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x62506704 pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0x626aeae5 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x62b21948 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x62b9cd2b ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0x62d950c0 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0x62e0377d xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x62f6eb4d i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0x62fc00bb pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x63123380 rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x63205de1 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x6331ae1f usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0x63503038 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x63528199 perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x63571eca pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0x635ec980 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x6365ce64 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x637d8f0e platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x639493e7 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x63a690f8 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0x641991fb fat_detach +EXPORT_SYMBOL_GPL vmlinux 0x64256424 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0x642b4937 i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x643b157b md_ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x6463b21f lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x647b1e1d iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x6487817f __blkg_release +EXPORT_SYMBOL_GPL vmlinux 0x64b5b88c debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0x64bf1eb8 pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x650eb106 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x651d3093 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0x6527a231 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x652d1868 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x653cb02d intel_msic_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x65539a81 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0x655c6efd wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x65720e78 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0x657e23d9 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0x6589a5b1 swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x6592c5e7 __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x659e382e bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x65a8af83 dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x65bb3d1b usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d2afa1 tpm_remove_ppi +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x65fa533b usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x661af691 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x661ca04b ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0x663c16d6 gnttab_grant_foreign_access_subpage_ref +EXPORT_SYMBOL_GPL vmlinux 0x665cf6de netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0x666b14cd xen_remap_domain_mfn_range +EXPORT_SYMBOL_GPL vmlinux 0x66834a62 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x669306dd spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66c3dc74 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x66c78bd2 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x66ca4d50 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66eb2ce4 usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x66eddeda crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x67130e83 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x67153782 blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x671bf2ba md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x6739a503 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x674e13e1 public_key_destroy +EXPORT_SYMBOL_GPL vmlinux 0x676324b4 xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x676e6802 pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x6783fb8e xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x67988437 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x67cb436b fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x67f496a2 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x67f57533 pwm_set_polarity +EXPORT_SYMBOL_GPL vmlinux 0x67feebc9 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x6812cf8d __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x68148bdc pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x6820efdf inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0x68621ad7 fat_attach +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68956406 static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x68cf9d6f cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0x68d60877 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x68dd754b xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0x68f1909d key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x68f5c5f2 set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x6913d3b9 usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x6923ce63 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x69292a6a ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x693ad413 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x69447467 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x6945725e mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0x698a899f ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x698be398 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x699701c7 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x69a19375 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0x69be25ee ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x69be8236 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x69ddafe8 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x69fc6a7c pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x6a387ede __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x6a3f4fe1 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x6a5fb566 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x6a60f007 devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6ab922b2 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6aba167a regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x6abd890f fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x6acad21f acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x6ae2abc2 platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0x6b067942 pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x6b19ca38 uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x6b264960 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x6b29a1fa ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x6b4b81dd vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x6b5aa1bd platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x6b78c1ef usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x6b94c408 enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x6ba9ed80 devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x6bd334c6 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x6c1251fd apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x6c245278 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0x6c29194f devres_get +EXPORT_SYMBOL_GPL vmlinux 0x6c35bdb0 usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c4f9b28 stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0x6c749afe __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x6c81a422 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6c99084f rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x6ccd9aa8 regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x6cd08c35 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0x6cff5705 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x6d0f1947 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x6d24f14b rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d31e93b tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x6d38c2cc pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x6d43ba85 spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x6d4b9ee3 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x6d523af9 vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0x6d69f513 gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x6d7b6025 key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x6dd6af8f ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x6df0007f __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0x6e0c4244 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0x6e14ebc2 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e782c23 iomap_create_wc +EXPORT_SYMBOL_GPL vmlinux 0x6e7943ec iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x6e89a560 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x6eb4c93d crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0x6f0037e9 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x6f1ee69e kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x6f998eee __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0x6fb32d35 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x6fd8e497 seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6fec44fa tpm_show_durations +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x700792c8 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x701b4173 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0x703189d7 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x7054b949 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x7079fe4f ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x708bd95d irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x70a91fca dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x70bb651d __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x70cf032f usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x70e316b2 usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x710126f5 crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7103269d __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x71245a44 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x712b3243 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x7138f444 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0x7161221b devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x71b42275 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x71bb4121 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x71c8d616 tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x72225675 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x7267db00 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x72838878 find_module +EXPORT_SYMBOL_GPL vmlinux 0x7285f84f unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x729220a3 free_css_id +EXPORT_SYMBOL_GPL vmlinux 0x72a2208a scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x72b212ff regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x72b2e506 usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x72cadad6 hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x72d688ea anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x72e7dafd led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0x72ef6b3f crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0x73013896 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x731bc460 xenbus_dev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x735b1cd6 btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0x73635284 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0x738fd248 intel_msic_reg_update +EXPORT_SYMBOL_GPL vmlinux 0x739d45a4 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73c14e37 blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x73d69364 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x73e77de6 get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x73eb349e pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x74392999 mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x74457e56 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x7452adff user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x74531597 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x74796909 wm8994_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x748d801a pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x74aaae18 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x74aba997 debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74b7cd32 get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74c08941 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x74d277b5 xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0x74d61992 debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x7522f3ba irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x7533d7a9 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0x754f1ee5 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0x757f938c fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x7584c8e7 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x75859954 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x75c2b9f1 memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x75c8a11c inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x75f96e40 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x7616c202 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x7624cbdb __rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x763d696e cgroup_taskset_cur_cgroup +EXPORT_SYMBOL_GPL vmlinux 0x764e4fe8 pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0x76719f56 pwm_config +EXPORT_SYMBOL_GPL vmlinux 0x7688ccf0 pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0x769a6150 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0x76b504a0 find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x76b73759 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x770cf981 tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x7711cd32 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x77214cea sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x772d43a3 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x77323e87 devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x775a6ef5 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x7765bfb9 register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x7790adc0 aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x77bc0e61 __css_tryget +EXPORT_SYMBOL_GPL vmlinux 0x77e78218 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x77e89077 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x78019dda ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x782adb74 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x7839c492 device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0x7878bd18 xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0x789935f2 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0x78aec715 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x78d2d7f3 usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x792f30b6 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x7956e1d0 pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x796c2d48 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x79763252 trace_buffer_unlock_commit_regs +EXPORT_SYMBOL_GPL vmlinux 0x79810fef crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x798220fa spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0x7985e00d bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x7986d786 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0x7991fd8d crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x79a34344 init_fpu +EXPORT_SYMBOL_GPL vmlinux 0x79a71c48 kernel_stack_pointer +EXPORT_SYMBOL_GPL vmlinux 0x79a86b2b fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x79d19151 task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x79e69460 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x79f08a5c subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7a2e4b44 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x7a44caca fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x7a4c1438 pv_info +EXPORT_SYMBOL_GPL vmlinux 0x7a5b99f0 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x7a7c5175 amd_erratum_383 +EXPORT_SYMBOL_GPL vmlinux 0x7a944007 rcu_idle_enter +EXPORT_SYMBOL_GPL vmlinux 0x7aa34560 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x7ab3ca18 eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x7ac39d26 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x7ac8e5b0 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x7adbacfe rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7b0f1ab3 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b2ce536 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x7b90d1a9 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x7bb27621 smpboot_register_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x7bb756e6 bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x7bbda803 tpm_show_enabled +EXPORT_SYMBOL_GPL vmlinux 0x7bc4406b tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0x7bf38726 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0x7bfef978 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x7c68e7e8 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x7c7085ff driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x7cc1b7fd max77693_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x7ce9fab9 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0x7ceaf0d5 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x7cef4d6a irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x7d59dd46 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x7d6567ab vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x7d697801 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x7d8ef61a platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x7dae4529 dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dd703c0 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x7dda53d4 ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0x7e0425c1 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x7e0ef97c regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e15b901 perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x7e1ecdc5 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x7e2e835a wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x7e31f184 ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x7e3c17d2 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x7e43b083 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0x7e43ffd1 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e8774a3 acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x7e9ec330 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x7ea240e7 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x7ec22f9a apei_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x7ed20d25 xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x7ee2317c blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x7f079bce irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x7f39a1dd ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x7f634fa2 debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x7f671b90 pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x7f86d4b1 fpu_finit +EXPORT_SYMBOL_GPL vmlinux 0x7fc9d04e ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ffc8718 gpio_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x803fd0c1 usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x80439cdc pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x805a7ab9 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x8093ed98 mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0x809a9057 bio_clone_mddev +EXPORT_SYMBOL_GPL vmlinux 0x809f8d34 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x80d5e57a mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x80eabd6e tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0x80f3268f __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x81015aa8 md_new_event +EXPORT_SYMBOL_GPL vmlinux 0x810b7210 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x8123e676 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x812efb65 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0x81317971 __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x815aca62 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0x8171edb7 regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x8174e10c crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x818ba5f5 input_class +EXPORT_SYMBOL_GPL vmlinux 0x81a264ce usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x81b1b955 pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0x81c4c69e pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x81ef30ad unregister_efivars +EXPORT_SYMBOL_GPL vmlinux 0x81ef47e9 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x8215177a ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x8216c7bb usb_string +EXPORT_SYMBOL_GPL vmlinux 0x8219daa3 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x822de450 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0x824c8e4c cgroup_taskset_first +EXPORT_SYMBOL_GPL vmlinux 0x82700d2d sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x82924e14 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82dbec19 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x82df5a3c proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0x82f89884 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x83497183 __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x837914e0 xen_swiotlb_dma_mapping_error +EXPORT_SYMBOL_GPL vmlinux 0x8384e07b key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x838b13e7 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x839d7964 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x83a5ae2e __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x83d75a09 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0x84159e55 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x8441839a crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x84e83980 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x85050965 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x85216155 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x854f0d11 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x85526eef usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0x856629e7 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0x85702715 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x8570e5e6 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x8571e4a3 extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x8574ca6c gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85c334bc ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x85c6c77c ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0x85c7f674 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x85d6eb4b ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x85d9b5ad devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x85e3cbce ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x85ed6833 crypto_lookup_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x85fa0083 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0x862f98a3 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x863c552c cache_firmware +EXPORT_SYMBOL_GPL vmlinux 0x86426cc4 isa_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x8656a879 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x867732a9 __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86aa16e6 klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x86ae18fa skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x86f8c910 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x8704eb06 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x870e16b7 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x87153f1c tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x871bcaa4 irq_find_host +EXPORT_SYMBOL_GPL vmlinux 0x87348d1a sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x87733ec0 ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87856274 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x87984b16 __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0x87a3f8b7 pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x87c99a2f pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x8831f8b1 kmap_atomic_pfn +EXPORT_SYMBOL_GPL vmlinux 0x8834860a fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x884680f8 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0x88499e3a usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x885f6f43 css_lookup +EXPORT_SYMBOL_GPL vmlinux 0x88ab6fe3 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x88b0844e btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x890bb5aa led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x891a5a7f gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x8924eb1e rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x89485687 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x89502f0c gnttab_subpage_grants_available +EXPORT_SYMBOL_GPL vmlinux 0x8956aeae apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x89b7dd52 tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0x89f59a61 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x89fe54be device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x8a04b9fe tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x8a0f2383 pci_intx +EXPORT_SYMBOL_GPL vmlinux 0x8a3e463c pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x8a5c7a80 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x8a75c2da ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x8a77d770 thermal_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8a8af97b pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x8abacc47 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x8ae687cc tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0x8afbf7b1 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x8b04668e bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x8b125e48 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0x8b4ff0dd tpm_show_owned +EXPORT_SYMBOL_GPL vmlinux 0x8b66f9e0 xen_platform_pci_unplug +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b95477b input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0x8bb0fb58 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x8bf4d934 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x8bfe3006 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x8c03d20c destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c0b7c1e ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x8c1a34d3 tpm_show_caps +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c3a9274 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0x8c431339 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0x8c48b6fb nfq_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x8c4db1b5 usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x8c8778ba transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x8c8b40d6 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x8ca86f12 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x8ca8c682 device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x8cabbeba device_store_int +EXPORT_SYMBOL_GPL vmlinux 0x8cbc73a2 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x8cd9f935 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x8d22bb58 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8d41d47a cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0x8d7895af bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x8d831c2d rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x8daf33db sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0x8df70dac regulator_get +EXPORT_SYMBOL_GPL vmlinux 0x8dfae631 wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0x8e0100b5 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8e1984e5 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8e23c5a5 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0x8e343fb2 devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x8e3bbb68 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0x8e79f83b ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0x8e8685e5 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8ebd1718 verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x8ed0cdec usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x8edfb574 injectm +EXPORT_SYMBOL_GPL vmlinux 0x8f12669a irq_linear_revmap +EXPORT_SYMBOL_GPL vmlinux 0x8f30c7b2 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x8f382b5b iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0x8f3d5d9d __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f91db3f sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x8fa8eceb inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x8fae8e9a pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x8fb576b8 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x8fb6050f tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x8fcfa3c4 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0x8fdbae00 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x8ffd11e7 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x90103558 tpm_show_pubek +EXPORT_SYMBOL_GPL vmlinux 0x9052b73d xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x9062c322 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x9068392b class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x909e66d7 xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90ad7b67 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x90d0bd83 blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0x90e03ade pwm_request +EXPORT_SYMBOL_GPL vmlinux 0x9111bfdb of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x911cc8d6 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0x911f4485 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x916fd750 class_create_file +EXPORT_SYMBOL_GPL vmlinux 0x918ad429 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x91a932fa ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0x91b1cddf ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x91c1d99c pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0x91c6016c pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0x91c6e5b0 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x91fa8c4e inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x920bfdc4 crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0x923f5aa3 flush_kthread_worker +EXPORT_SYMBOL_GPL vmlinux 0x924c46f8 zs_unmap_object +EXPORT_SYMBOL_GPL vmlinux 0x9259dcdd md_is_badblock +EXPORT_SYMBOL_GPL vmlinux 0x929c467f btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x92b57248 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x92c86db9 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x92c90e22 queue_work +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x9312d80e evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x93226faa irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x93287a74 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x93296369 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x932ac160 xen_swiotlb_sync_sg_for_device +EXPORT_SYMBOL_GPL vmlinux 0x933ec7e1 cgroup_taskset_next +EXPORT_SYMBOL_GPL vmlinux 0x93611afd usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0x9369ce75 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x938baadb spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0x9392e2b8 dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x93a842b7 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x93dbee5b usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x941298f4 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0x941f2aaa eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x942cfb07 __class_create +EXPORT_SYMBOL_GPL vmlinux 0x943fc708 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x9452f94b __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x947b87b9 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0x9489a5e1 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94abb745 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0x94c318be apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x94e5342b debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x94f510af ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x95190367 get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x953ca582 fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x955b0e2e kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x958bb924 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x958df3ac zs_free +EXPORT_SYMBOL_GPL vmlinux 0x9596518c shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x95afff0b timed_output_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x95bc9078 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x95bf6be4 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0x95c62423 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x960bb0e5 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x9613633c devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x96179bf3 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x961f2e6c xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x9621849f ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x962a5a67 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x964add15 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x96604112 xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x9678c23a pci_pri_stopped +EXPORT_SYMBOL_GPL vmlinux 0x968b46ce ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0x96a22790 vmcore_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x96a50baf register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x96b87e9e usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x96ba843c device_register +EXPORT_SYMBOL_GPL vmlinux 0x96bdedb4 fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96d810a9 device_create +EXPORT_SYMBOL_GPL vmlinux 0x9720a737 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x974b5535 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9756135b tps65912_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x976cddd2 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x97821604 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x978595f4 bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x97989a55 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x97b093dd btree_update +EXPORT_SYMBOL_GPL vmlinux 0x97de8711 pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x97ee2958 usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x97ef3ee4 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0x980f3ac0 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x9842f28e blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x984b081a sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0x98503a63 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x985f492d user_match +EXPORT_SYMBOL_GPL vmlinux 0x987ec9fe blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x988f2715 led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x98b60ca2 pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x98be4b17 ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x98cc564a regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x98fa88c7 swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0x991f7e27 perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x99230871 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x998c5aae register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x9a0e6a34 power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a63984f driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x9a89dbf7 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x9a8ad79a iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x9a9824ef btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9ac11b74 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x9aca444b get_monotonic_boottime +EXPORT_SYMBOL_GPL vmlinux 0x9ad0511a gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0x9ae0f836 da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x9aeacb87 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x9b03b79f usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x9b1b286b dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9b4adcdb regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0x9b5dbbc2 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x9b9f3648 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9ba29ec6 bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x9babf390 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x9bb82054 ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x9bd72b78 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x9be69eba sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0x9bece81b mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x9bf246d4 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x9bfe4356 ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x9c2e4b66 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x9c44fa71 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x9c7c4718 pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0x9c9b8247 pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0x9ccb1788 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x9d030b99 stop_machine +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d0ca2a4 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0x9d2c73d9 usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x9d318de8 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d69cf96 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x9d8331c0 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x9da5a9d7 print_context_stack +EXPORT_SYMBOL_GPL vmlinux 0x9dcd7699 regmap_update_bits_check +EXPORT_SYMBOL_GPL vmlinux 0x9dcf8e7c inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x9dcfaf53 perf_trace_buf_prepare +EXPORT_SYMBOL_GPL vmlinux 0x9dd6bcd7 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x9dd73a9c crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x9dd88f40 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x9de7d9f5 iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x9dfdf722 gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0x9e1f9f38 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x9e3aa078 led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x9e3e9a31 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x9ea48fa6 ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x9ea95423 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0x9ebcc1f8 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x9ebff902 start_thread +EXPORT_SYMBOL_GPL vmlinux 0x9ed3f3df tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0x9f0d8982 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0x9f10e66d rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x9f13d97c crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0x9f29601a atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x9f366d2a __class_register +EXPORT_SYMBOL_GPL vmlinux 0x9f41a956 device_rename +EXPORT_SYMBOL_GPL vmlinux 0x9fae26ea device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fd9578f dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x9fe939e1 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0x9fe96be8 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0x9fefc58d sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0x9ff0ead9 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0x9ff8bba3 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x9ffbe55b register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xa002592b crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0xa00a24e0 cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xa0127c5a virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0xa0208e02 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0xa0287578 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0xa042bfd0 __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xa04fe976 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0xa05837fe led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0xa0b2df56 cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0xa0b9124e device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL vmlinux 0xa0d685cd ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0xa0e401a7 sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0xa0ebdc52 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xa10575ec crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0xa10a6e51 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0xa117de4b tcp_fetch_timewait_stamp +EXPORT_SYMBOL_GPL vmlinux 0xa11c4816 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0xa121d45d pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xa15414fb watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xa156a1f2 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0xa16ac284 sec_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xa17d002b ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xa19840c6 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0xa1bd7822 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0xa1f1cb33 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0xa22178eb acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xa2711e4d wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0xa2741ce9 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xa2905ab3 iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0xa2957c45 extcon_find_cable_index +EXPORT_SYMBOL_GPL vmlinux 0xa2bc6da1 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa2f73838 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0xa3032510 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0xa31e5105 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0xa3217182 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0xa34f5a98 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0xa3503bfc usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa3726229 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0xa38602cd drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xa3a04602 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0xa3e7c113 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xa3fe6fd9 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0xa4010b3c bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0xa40c98f9 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa452f2a4 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0xa466de38 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa472e469 tpm_gen_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xa48196c8 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0xa49f99eb register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0xa4a686c3 sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0xa4c3cb8c unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0xa4ca0d4e unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa4d58669 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xa4dee346 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0xa55339c3 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0xa5e0cda8 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa608324e gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0xa61b1477 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0xa625110d kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0xa6756e8b crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0xa67cc6a3 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0xa6916ecb fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0xa6a0a273 max77693_write_reg +EXPORT_SYMBOL_GPL vmlinux 0xa6b21ef2 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0xa6d11596 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0xa6e1a69d kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0xa6f1503d dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xa6f4011d ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0xa6fcbb36 wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0xa71ed122 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0xa722a819 cpu_has_amd_erratum +EXPORT_SYMBOL_GPL vmlinux 0xa724257f init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0xa75312bc call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0xa75e4f7e srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xa7aae053 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0xa7c7c6fb pwm_put +EXPORT_SYMBOL_GPL vmlinux 0xa7f0a6aa debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xa7f92105 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xa7fd4d21 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0xa85df008 xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0xa85fc503 __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xa88e8a35 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0xa8b82a53 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0xa8cba127 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0xa8d1f0d2 tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0xa8d3b869 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0xa8e081dd xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xa8ee4a84 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa91c5cab tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0xa960c5ec led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0xa967f0de inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0xa9a82042 gnttab_trans_grants_available +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9cd2a71 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0xa9f038f1 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0xa9fc3f54 gnttab_grant_foreign_access_trans +EXPORT_SYMBOL_GPL vmlinux 0xaa1d8bb6 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0xaa1ff83d locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0xaa2a72bf __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0xaa3f13f7 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa42144f do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0xaa449b36 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0xaa517f20 extcon_get_cable_state +EXPORT_SYMBOL_GPL vmlinux 0xaa547e26 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0xaa78adc0 __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0xaa852c93 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa87105f save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0xaa8ba31e rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0xaaa3761c power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0xaaa918c9 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0xaaee55d7 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab1e0ba2 device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0xab1ee6b3 clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0xab4b794e root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xab54350c scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0xab6babaf pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0xab7e3362 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0xab95ac37 usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0xabb1eb15 dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xabc47f60 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xac789867 pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0xac8869a1 agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0xac9ce195 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0xaca49503 rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc742ca anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xacebba5f platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0xacfd81f6 work_cpu +EXPORT_SYMBOL_GPL vmlinux 0xad1d40fe device_attach +EXPORT_SYMBOL_GPL vmlinux 0xad56c8dc vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0xad59e9ab usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0xad772698 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0xad842098 usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0xad8b52bb usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xad8d8ab0 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0xad999326 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0xada38534 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xadc785ec kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0xaddd049b acpi_i2c_register_devices +EXPORT_SYMBOL_GPL vmlinux 0xaddea503 rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0xadf76222 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae1954c7 extcon_update_state +EXPORT_SYMBOL_GPL vmlinux 0xae4a9d3d dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xae4eb14a xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0xae67b9e6 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0xae69b1c1 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xae6eaf93 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0xae7c231d mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0xae7c5411 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0xae7d9c6c regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0xaf4bfea2 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0xafa2b7b9 leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xafb823b5 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0xafcb394e fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0xafcdde2e inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0xafdce2aa wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0xafe0ca97 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0xafe9ee31 serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0xafeb2480 user_describe +EXPORT_SYMBOL_GPL vmlinux 0xaff8a032 devres_remove +EXPORT_SYMBOL_GPL vmlinux 0xb0360aba bsg_request_fn +EXPORT_SYMBOL_GPL vmlinux 0xb04b7984 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0xb05f0bc4 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0xb079a8ce bmp085_probe +EXPORT_SYMBOL_GPL vmlinux 0xb089ea83 i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0xb0b85f47 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xb0eb43e1 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0xb0ebbe3c raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0xb0f99af0 queue_kthread_work +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb12d6f6c da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0xb140d14c ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xb1425b32 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xb1813d07 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1bed25d dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0xb1ca52ce tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0xb1faaebc exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0xb208313c regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0xb21b8ba2 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0xb2325f32 platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0xb25462d2 __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xb25d991e pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0xb27f7faa dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0xb2c4e2d2 register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xb2c53dbf fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb2d18227 usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0xb2d48a2e queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0xb2d76239 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xb2d9569c wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0xb2e3c108 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0xb2e764e8 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0xb2e95394 xen_swiotlb_sync_single_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0xb2f50352 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0xb304b211 sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0xb3146445 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb3280b86 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xb33f6a39 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0xb36327a0 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0xb37802bb register_efivars +EXPORT_SYMBOL_GPL vmlinux 0xb3d5bd83 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0xb3eb06ed ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xb40aa5d4 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0xb4758daf dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb520071d ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0xb520965d tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xb5287e04 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0xb53620d1 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0xb571bcf2 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a0e11e lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0xb5a11e9c ata_sas_port_async_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb5a2550f blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0xb5b52bec get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0xb5cb8145 hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xb5d8913d register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb5e896fb tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0xb5f17edf perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xb5fd5199 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0xb61b3bba inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb639e968 __bus_register +EXPORT_SYMBOL_GPL vmlinux 0xb67b2219 cm_suspend_again +EXPORT_SYMBOL_GPL vmlinux 0xb67c64fd __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6bb37df ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0xb6bc49a9 __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xb6d498ef wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0xb6e12b2a pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb71d96dd synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb71e10ae ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xb742848b platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0xb75a9516 regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0xb78c53f0 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0xb7a325c3 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0xb7b663d6 blk_queue_flush +EXPORT_SYMBOL_GPL vmlinux 0xb7ce84e9 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7e2f370 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb7ef8a9b con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0xb7f49c01 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0xb7f77027 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0xb8570ada ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0xb86bcceb klist_next +EXPORT_SYMBOL_GPL vmlinux 0xb87eeccc uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0xb89692fc usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0xb8a029db br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0xb8a53123 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0xb8b3ab9d agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0xb8d4c30d shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb9176155 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0xb94db76b mddev_init +EXPORT_SYMBOL_GPL vmlinux 0xb98fc7ef sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9ab9b65 md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0xb9ad29d9 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0xb9b82bcc blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0xb9b9df41 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0xb9c425de register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0xb9d025c9 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0xb9da2997 snmp_fold_field64 +EXPORT_SYMBOL_GPL vmlinux 0xb9fc708b queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0xba0531f1 spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0xba05825d sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0xba11793b cgroup_add_cftypes +EXPORT_SYMBOL_GPL vmlinux 0xbabb5212 spi_async +EXPORT_SYMBOL_GPL vmlinux 0xbb038ce4 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xbb0a2666 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0xbb0ab47b debug_locks +EXPORT_SYMBOL_GPL vmlinux 0xbb0bbb82 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xbb58b814 iomap_free +EXPORT_SYMBOL_GPL vmlinux 0xbba44408 ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbd37d77 md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0xbbeba168 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0xbbf0a75a unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0xbbf64668 pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0xbbf68cf9 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0xbbf8f768 regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0xbc0d0c50 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0xbc272d2d usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0xbc2bf721 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0xbc6f01a6 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xbc6f931b workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0xbc94dd46 acpi_dev_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xbca0201a sfi_mrtc_array +EXPORT_SYMBOL_GPL vmlinux 0xbcb838a1 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0xbccfd4d8 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0xbcdd5b99 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0xbce0d336 single_release_net +EXPORT_SYMBOL_GPL vmlinux 0xbcf39990 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbcf57bc2 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0xbcfe0e3d elv_register +EXPORT_SYMBOL_GPL vmlinux 0xbd1056f5 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0xbd3b64ab hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd50eb94 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0xbd5cb8b9 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0xbd7771fc swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0xbd77eed1 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0xbd85ba29 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xbdb72b87 pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdd2f42a rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0xbdd5f10f apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0xbdf19f4e input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0xbdf8c621 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe4c9287 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xbe5a7346 driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xbe616238 xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0xbe814943 rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0xbe9383f5 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0xbe977632 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0xbe99a793 sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xbea35c9b regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0xbeb43bb7 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xbf208d9a perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0xbf2d6b6d ftrace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0xbf3f685c inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xbf4e2976 ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xbf5c020f __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0xbf639bef init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0xbfa4f2ef __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0xbfbc5434 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0xbfe1df98 tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0xbffcb3b7 acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0xc00131cf visitor64 +EXPORT_SYMBOL_GPL vmlinux 0xc01c5b7a inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0xc01da89a tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0xc0768d5a ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0xc08647ff ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc0871e89 pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xc0909942 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xc09a7010 regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0xc0a99d02 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0xc0c8190d acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0xc0ce7362 usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0xc0d26387 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc0e00c7e isa_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xc0e256ee yield_to +EXPORT_SYMBOL_GPL vmlinux 0xc0e75cec visitor128 +EXPORT_SYMBOL_GPL vmlinux 0xc10e31da sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0xc10f2b8e cgroup_unlock +EXPORT_SYMBOL_GPL vmlinux 0xc11379f1 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc11800b3 da903x_read +EXPORT_SYMBOL_GPL vmlinux 0xc11b4470 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0xc11bd00f tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc128c399 evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0xc12d6dd2 stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0xc12f8272 extcon_set_cable_state +EXPORT_SYMBOL_GPL vmlinux 0xc131ac98 platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0xc135af4e iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0xc13caa2c regmap_init +EXPORT_SYMBOL_GPL vmlinux 0xc13dc6c0 tpm_show_timeouts +EXPORT_SYMBOL_GPL vmlinux 0xc156e421 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0xc164642e xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0xc16f19bc acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc18578ed process_srcu +EXPORT_SYMBOL_GPL vmlinux 0xc1a81908 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xc1ce7113 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0xc20d413b usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0xc2179689 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0xc220be93 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0xc2253516 blkg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc24addbf inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0xc24c03f0 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0xc2520597 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0xc25671fe xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc27d863e lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0xc280fb46 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0xc2b10740 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0xc2b1660f blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0xc2c7aa1a xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0xc2d983f0 security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xc2e5a234 devres_add +EXPORT_SYMBOL_GPL vmlinux 0xc325bd97 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0xc3348f15 sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0xc341ae6d zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc35b65c0 dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xc37127a8 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0xc390f8fb rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0xc39940b7 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0xc3a1e97d adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xc4149dea __mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0xc414b1ca dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0xc4178f0c pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc4287430 bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0xc454fc7b twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0xc45d79dd m2p_add_override +EXPORT_SYMBOL_GPL vmlinux 0xc471c67a twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0xc473042e dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc492b4a1 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0xc4a8c7d1 blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xc4ce1004 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xc5031bb5 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0xc5184f41 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc53fd96d inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0xc5786f47 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xc59a3c31 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0xc5a55cd9 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0xc5b15d83 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xc5bab3fe btree_init +EXPORT_SYMBOL_GPL vmlinux 0xc5c264a5 amd_erratum_400 +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc6531cd4 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0xc65d3eed ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc665ccd6 acpi_dev_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xc66a3dae find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xc66b77b1 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0xc69b7ee5 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0xc6e114cc tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xc7002ac4 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0xc7087844 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0xc72e1233 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0xc73eefea __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xc74876c2 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xc751c27e xen_swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0xc7884519 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0xc7a1840e llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0xc7c2a71d simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0xc7c2b103 ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xc7c6391c mpi_set_buffer +EXPORT_SYMBOL_GPL vmlinux 0xc7e39bca ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc7f5ea50 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc8954464 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xc8add232 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xc8e7cf64 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0xc91277a1 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xc9135712 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc991cc63 tps65912_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xc9b2d056 ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xc9c3f176 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca06aac2 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0xca0fba2e irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0xca141f0e sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0xca1a7fd9 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0xca23029a fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0xca25c3ce tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0xca28193c regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0xca54f74f blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xca7d8764 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca931032 crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcafb5c7c regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0xcb145889 bmp085_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0xcb15eee9 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0xcb17bb4e __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0xcb25e00b acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0xcb319cbd usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0xcb4d19a4 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0xcb5ca1fe inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xcb7e3fcd __css_put +EXPORT_SYMBOL_GPL vmlinux 0xcb811146 debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0xcb91cc6f intel_scu_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcb947f66 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0xcb9cb460 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcbb54cff generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0xcbee20b2 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0xcbf8ad26 pwm_free +EXPORT_SYMBOL_GPL vmlinux 0xcbfca143 debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc389899 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0xcc3a7933 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0xcc3da32d aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0xcc57041e handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0xcc63b431 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc750c3e ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xcc9fc40f cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xccea4e34 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0xcd211b96 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0xcd3134fd xen_swiotlb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0xcd539891 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0xcd56f215 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xcd752a72 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0xcd91b127 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0xcda18696 inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xce0b9b59 max77693_read_reg +EXPORT_SYMBOL_GPL vmlinux 0xce345af7 bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xce46e140 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xce4ab6c3 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xce6a9d9a trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xcea5f9be __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0xcea636f0 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xceb4d21d balloon_devinfo_alloc +EXPORT_SYMBOL_GPL vmlinux 0xcedfbe87 fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0xcee1641c kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0xcef1dd0e perf_check_microcode +EXPORT_SYMBOL_GPL vmlinux 0xcef5819a pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0xcf03c6e6 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0xcf5b9712 x86_hyper_kvm +EXPORT_SYMBOL_GPL vmlinux 0xcf7c573d ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0xcfa66370 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0xcfb5871c irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0xcfbe77c1 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0xcfc62f27 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL vmlinux 0xd00fb24e devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0xd02297c6 usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0xd028d73d crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0xd03a08c7 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd0458ccb xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0xd0461d83 uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xd05464d6 cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0xd0654d5f scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0d8b156 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xd118ec6f i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xd1274b29 led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0xd135c1b1 ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0xd14bc4d9 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0xd14c6d58 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0xd14d6360 tps65912_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xd1507e59 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd16740f6 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xd1a1505b fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0xd1af2a75 sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0xd1b2db37 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0xd1dc38f5 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0xd1e18a60 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd1f6cde5 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0xd201ca50 virtqueue_add_buf +EXPORT_SYMBOL_GPL vmlinux 0xd20bf6ba dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd217ce9f wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0xd217e9e6 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0xd2213342 device_del +EXPORT_SYMBOL_GPL vmlinux 0xd22c5c7e __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0xd2712e4a sec_reg_update +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2875da3 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0xd297f044 devres_release +EXPORT_SYMBOL_GPL vmlinux 0xd2a3dd4f cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2aaeb4e kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0xd2c58ab2 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0xd2cbc658 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0xd2d4dac8 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0xd2f449f6 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0xd3209f0f stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xd32fe193 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xd34562b6 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd37e13b4 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0xd381025f __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0xd38bb26b tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL vmlinux 0xd38ce360 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0xd38e0b48 ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0xd3a25474 spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0xd3dc9785 pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xd3e6528f hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0xd4034828 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0xd4251246 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xd42896a6 pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0xd44a5eac kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0xd45f5c15 blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xd461a2fe scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0xd484f862 scsi_unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xd4c14632 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0xd4d55cd4 dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0xd4d8c17f sysfs_rename_link +EXPORT_SYMBOL_GPL vmlinux 0xd5053cef sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0xd5133c3c __init_kthread_worker +EXPORT_SYMBOL_GPL vmlinux 0xd520cd95 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0xd544e902 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0xd54f2bd4 bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0xd550560f __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0xd55ad93b iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0xd59668e6 unlock_flocks +EXPORT_SYMBOL_GPL vmlinux 0xd5bd7dac ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd5d16be0 crypto_lookup_aead +EXPORT_SYMBOL_GPL vmlinux 0xd629dd13 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0xd6428b01 dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0xd65b9393 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0xd67364f7 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0xd67db80a ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0xd67f5217 btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd69415d6 device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0xd6c2e04b __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0xd6ccc7c3 ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0xd6dfea5a swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0xd6ed3a8e cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0xd703025b ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd72feba2 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xd745f980 dbs_check_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd768aed3 crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd77c0bc8 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0xd7a579d3 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0xd7ab2c0c speedstep_detect_processor +EXPORT_SYMBOL_GPL vmlinux 0xd7c8840e crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd80531a7 __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0xd808989e usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xd809ae2b hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0xd81953e0 digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0xd81de62c ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0xd820c283 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xd8250a5c iounmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xd841c957 pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0xd8525ea7 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0xd85ac634 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xd862218e relay_close +EXPORT_SYMBOL_GPL vmlinux 0xd8742b7d spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0xd875acef task_xstate_cachep +EXPORT_SYMBOL_GPL vmlinux 0xd87601cc ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xd87f464d pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xd8899b88 simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0xd8ecf1c8 regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0xd8f4dcbc tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL vmlinux 0xd8f6ad79 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xd8f76d88 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0xd8ff8a43 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xd919806a amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xd92df852 driver_find +EXPORT_SYMBOL_GPL vmlinux 0xd9341e5c iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd939e84f n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0xd942d353 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0xd949f4c5 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0xd94b737e erst_read +EXPORT_SYMBOL_GPL vmlinux 0xd97f1a19 regmap_update_bits +EXPORT_SYMBOL_GPL vmlinux 0xd981b224 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0xd98a13a1 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0xd98ad2c8 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0xd9adb844 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0xd9bc11ae crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0xd9d7f623 pkey_id_type +EXPORT_SYMBOL_GPL vmlinux 0xd9ecb670 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xda050109 irq_domain_add_nomap +EXPORT_SYMBOL_GPL vmlinux 0xda21c35d devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xda3a7ca9 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xda410af4 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xda44cb37 setup_charger_manager +EXPORT_SYMBOL_GPL vmlinux 0xda45e739 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0xdaa528b7 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb04cacc tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0xdb099bbb ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0xdb37fb8c wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0xdb39d0fe ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0xdb3e7f5b devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0xdb3f3e73 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0xdb49e284 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xdb4b772f blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0xdb6aea2a mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xdb8a1b3f usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdbb0acca tpm_remove_hardware +EXPORT_SYMBOL_GPL vmlinux 0xdbcdf0b6 ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0xdbd1bdc5 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0xdbf23931 sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0xdbf7cb70 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0xdbfb0c07 pci_pri_status +EXPORT_SYMBOL_GPL vmlinux 0xdc14a211 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0xdc153eb2 blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0xdc59a32f wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0xdc6699cb acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0xdc67d314 wm8994_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xdc6f396c led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0xdc714560 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xdc7f60bb inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0xdc825d6c usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0xdc90dd6e hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0xdc97af2e syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0xdccca4b1 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0xdce20be9 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0xdce57037 apei_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0xdd2efc0f ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xdd315807 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0xdd56bd5d led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0xdd67e10c page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0xdd92f24b pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0xdda731a7 da903x_write +EXPORT_SYMBOL_GPL vmlinux 0xddce07d9 crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0xddd58dc0 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xde04897f dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0xde44ef28 cpufreq_get_measured_perf +EXPORT_SYMBOL_GPL vmlinux 0xde473020 unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xde590bf1 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xde747356 intel_msic_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xde8a8fc9 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0xde8f877f kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0xdf0f75c6 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0xdf1882af dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0xdf2cb63e relay_open +EXPORT_SYMBOL_GPL vmlinux 0xdf59eea5 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0xdf8a909b blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xdf8d48e0 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0xdfa1fd06 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0xdfbf8a9a wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0xdfc4cc75 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xdfd260c5 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xe007de41 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0xe01730f5 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0xe02eb6d0 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe041fcbf max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0xe05260e5 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0xe0602c87 ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0xe07e656d register_mce_write_callback +EXPORT_SYMBOL_GPL vmlinux 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0dfc6fc vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0xe10cd6ad erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0xe11169a5 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xe1aca2a5 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xe1b3b588 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xe1e12d88 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xe22ae0d0 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xe254ec0b wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe2a808a4 tpm_register_hardware +EXPORT_SYMBOL_GPL vmlinux 0xe2cea60d skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xe2d2a436 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xe2dd67e5 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xe3043ff9 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0xe309d9bc bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe35b5ba5 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0xe384a102 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0xe391ceb7 sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0xe3a1cbd9 scsi_register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xe3bc7fd4 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xe3cad119 ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0xe3db9313 spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0xe4065611 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0xe41534ce bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xe41a164b uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0xe422f0c4 pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0xe4309905 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0xe439815c erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0xe446dd59 cred_to_ucred +EXPORT_SYMBOL_GPL vmlinux 0xe4661ca6 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0xe469350d get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0xe47d5576 nfq_ct_nat_hook +EXPORT_SYMBOL_GPL vmlinux 0xe49a42ce extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe4a171ae subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xe4c331b6 acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0xe4e01cb2 rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0xe4e68bc8 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0xe51270a6 ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0xe5185e91 device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0xe55b3a12 ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xe56a6601 fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0xe57abf75 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0xe5809b70 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xe583d559 spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0xe585ad10 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0xe5883bd9 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe58fb452 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0xe5b0e543 ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0xe600638c fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe64ad8ea unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe663c44b wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0xe6886205 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0xe6cf2c64 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xe6ddaa3c virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0xe6e1c5fe uuid_be_gen +EXPORT_SYMBOL_GPL vmlinux 0xe6eebaff dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0xe71f113e cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0xe7232e0f user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe7652473 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0xe769232e sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0xe7758e92 ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0xe7afe452 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0xe7bb6d34 fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe818b32b ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xe8282b17 debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xe844593d bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0xe84d9b47 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xe84f6e5c pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0xe85f6c3a pci_msi_off +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe86f3e42 each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0xe885e2d8 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0xe8941031 event_storage_mutex +EXPORT_SYMBOL_GPL vmlinux 0xe8bef544 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xe92cfe2f posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xe92e9462 mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0xe92f735d iommu_map +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe9691216 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0xe979656d regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0xe97c9f90 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0xe98649eb static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0xe98dc88e inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0xe9a1c70b regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0xe9a9d081 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe9d1b7cf irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0xe9d76ef8 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xe9ed7c9e blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe9f01971 rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea4128b2 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea5aa345 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xea8f8987 usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0xeb1c3628 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0xeb370805 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0xeb45eed4 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xeb5e58db rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0xeb9abbee ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0xebec57c4 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0xebf08c9d ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0xebf68af1 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0xec16feb2 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec25f967 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xec28a6c3 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xec42b49c usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0xec48d9a7 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0xec8c4a1d sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xec996e0b usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0xecc39c28 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xecf9018d sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0xed3515f5 bmp085_detect +EXPORT_SYMBOL_GPL vmlinux 0xed52f156 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xed54c419 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0xedb7586c sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xedbc4c12 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedf3f1f1 do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0xee116c0d rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0xee274f97 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0xee547a69 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xee73d7bc pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0xee90f072 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0xeec24d31 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0xeed19aed iommu_present +EXPORT_SYMBOL_GPL vmlinux 0xeefa4d06 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0xef116b36 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0xef1f6e23 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0xef23d470 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0xef37f11a hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0xef3a63ec device_move +EXPORT_SYMBOL_GPL vmlinux 0xef40127b blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0xef409b74 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0xef5bf009 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef782b88 gnttab_grant_foreign_access_subpage +EXPORT_SYMBOL_GPL vmlinux 0xef823029 add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xef8c7850 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0xef9ddda2 tpm_bios_log_setup +EXPORT_SYMBOL_GPL vmlinux 0xefc91531 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0xefec6e1b relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0xefef0909 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xeff3732b ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0xf001dc80 irq_domain_add_linear +EXPORT_SYMBOL_GPL vmlinux 0xf0034e09 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xf054ac97 intel_msic_irq_read +EXPORT_SYMBOL_GPL vmlinux 0xf05d88b6 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xf05db8c6 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf06c1cc7 unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xf07b8d5e handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0xf0893264 smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0xf096a211 skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf0a02968 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0xf0a6cb98 pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0xf0f5dbc2 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0xf12a2ef9 kick_process +EXPORT_SYMBOL_GPL vmlinux 0xf12a9e23 class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xf138b941 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0xf16abeb6 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0xf17bd0ec blk_queue_bio +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1aae32e acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0xf1b31314 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0xf1b551d9 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xf1d02a33 sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0xf1e5d80f async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0xf22d8371 ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0xf244bc40 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0xf2834293 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0xf2c96a38 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xf2de4476 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf301b4a8 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0xf30d3c40 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xf30e105d ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0xf30fda27 lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0xf31af5f1 perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0xf31b3fd1 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0xf331236f btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0xf352718a default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0xf36cd8b9 dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0xf371dc61 crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0xf385605b balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0xf394bba8 blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xf39ed384 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0xf3b451ca kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0xf3b93a97 cgroup_lock_is_held +EXPORT_SYMBOL_GPL vmlinux 0xf3dd036d regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0xf3de1a45 ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0xf3eb1c23 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0xf400fc41 rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xf425c086 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0xf4396b4e inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0xf46e6b67 posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf47b9a07 blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0xf48beaf2 usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4d11ef9 sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0xf4d7cc47 crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xf4ebed20 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0xf4fc2d6c __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf50f0190 get_device +EXPORT_SYMBOL_GPL vmlinux 0xf5180b5f sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0xf5285a10 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0xf52b36da ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf556b3cb dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0xf5785b42 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf597b82d xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0xf5a18547 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5c73d71 class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf5e71c13 blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0xf604ac17 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0xf617f4ed acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xf624ece6 part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0xf6413521 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xf652d4d7 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xf6550e6f __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xf6671d45 acpi_dev_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0xf67effa7 ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0xf681db53 attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0xf692c143 tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0xf6e04730 event_storage +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf6ec7fc3 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0xf6f2f4c5 tcp_peer_is_proven +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf7322bc8 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0xf74656ab regulator_can_change_voltage +EXPORT_SYMBOL_GPL vmlinux 0xf74c275c rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0xf75246ff vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0xf7543a75 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0xf75a85d5 max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0xf765f40c acpi_device_power_state +EXPORT_SYMBOL_GPL vmlinux 0xf7a14f56 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0xf7d13903 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf7f9cb7f led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf82f16b3 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0xf84db261 usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0xf86eb7c8 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf893e927 regmap_read +EXPORT_SYMBOL_GPL vmlinux 0xf8b80ac9 crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0xf8d1a0ca crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xf8d789b4 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xf8de0836 flush_kthread_work +EXPORT_SYMBOL_GPL vmlinux 0xf8ee301e pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf8fb4868 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0xf8fe3d0b kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0xf90e61c1 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xf917e8ad cpufreq_governor_dbs +EXPORT_SYMBOL_GPL vmlinux 0xf92ce956 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0xf940f432 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0xf951ee96 pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0xf9677a14 cgroup_next_descendant_pre +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf997d715 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9d9264e xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0xf9ecc6d0 ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0xfa012fe7 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xfa1eb910 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa37b69d cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0xfab06b3a usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xfab83caf public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0xfad09d5d unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xfaf8a5b8 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0xfb034be5 driver_attach +EXPORT_SYMBOL_GPL vmlinux 0xfb05c9b4 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0xfb1a1b48 usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xfb32b30f ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0xfb64b230 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0xfb6eedf9 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0xfb832c2a crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0xfbbea850 balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0xfbed89fb shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0xfbf21a11 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfc14eb5f md_run +EXPORT_SYMBOL_GPL vmlinux 0xfc15e10b ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0xfc2f93fd device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0xfc397ceb pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0xfc3b4246 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0xfc51f170 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0xfc83fca0 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0xfc968c8b apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0xfca46cd0 acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0xfcac9be4 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0xfcb9ad4c shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xfcd7bc0b ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xfd04ed5c sec_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xfd05464b klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0xfd3e8d0b wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xfd486812 tpm_show_pcrs +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd7243c7 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0xfd9a8e9c dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0xfdabb13b trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0xfddc3b9e ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0xfdfa4ce9 task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0xfe29dcbc crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xfe2debf1 pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0xfe2e2917 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0xfe31e381 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0xfe352fc5 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xfe4a65c3 md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0xfe727411 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0xfe73e7ba inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0xfe97434f __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfeda4e1c look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0xfef8a166 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0xff05fa13 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xff2e6073 kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0xff479c02 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0xff5168d6 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff5f2b0e __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xff7d917c sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xffa4c4ec cgroup_lock +EXPORT_SYMBOL_GPL vmlinux 0xffac9709 driver_register +EXPORT_SYMBOL_GPL vmlinux 0xffe88306 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0xfffc76aa xen_xenbus_fops --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/i386/generic.compiler +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/i386/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/amd64/generic.modules +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/amd64/generic.modules @@ -0,0 +1,3703 @@ +3c574_cs +3c589_cs +3c59x +3w-9xxx +3w-sas +3w-xxxx +6lowpan +6pack +8021q +8139cp +8139too +8250_dw +8255 +8255_pci +8390 +88pm800 +88pm805 +88pm80x +88pm80x_onkey +88pm860x_battery +88pm860x_bl +88pm860x_charger +88pm860x_onkey +88pm860x-ts +9p +9pnet +9pnet_rdma +9pnet_virtio +a100u2w +a3d +a8293 +aacraid +aat2870_bl +aat2870-regulator +ab3100 +ab3100-otp +abituguru +abituguru3 +ablk_helper +ac97_bus +acard-ahci +acecad +acenic +acerhdf +acer-wmi +acpi_ipmi +acpi_memhotplug +acpi_pad +acpiphp +acpiphp_ibm +acpi_power_meter +acquirewdt +act200l-sir +act_csum +act_gact +act_ipt +actisys-sir +act_mirred +act_nat +act_pedit +act_police +act_simple +act_skbedit +ad2s1200 +ad2s1210 +ad2s90 +ad5064 +ad525x_dpot +ad525x_dpot-i2c +ad525x_dpot-spi +ad5360 +ad5380 +ad5398 +ad5421 +ad5446 +ad5449 +ad5504 +ad5624r_spi +ad5686 +ad5755 +ad5764 +ad5791 +ad5930 +ad5933 +ad714x +ad714x-i2c +ad714x-spi +ad7150 +ad7152 +ad7192 +ad7266 +ad7280a +ad7291 +ad7298 +ad7314 +ad7414 +ad7418 +ad7476 +ad7606 +ad7746 +ad7780 +ad7791 +ad7793 +ad7816 +ad7877 +ad7879 +ad7879-i2c +ad7879-spi +ad7887 +ad799x +ad8366 +ad9523 +ad9832 +ad9834 +ad9850 +ad9852 +ad9910 +ad9951 +adcxx +addi_apci_035 +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 +ade7753 +ade7754 +ade7758 +ade7759 +ade7854 +ade7854-i2c +ade7854-spi +adf4350 +adfs +adi +adis16060 +adis16080 +adis16130 +adis16136 +adis16201 +adis16203 +adis16204 +adis16209 +adis16220 +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_bl +adp5520-keys +adp5588-keys +adp5589-keys +adp8860_bl +adp8870_bl +ads1015 +ads7828 +ads7846 +ads7871 +ad_sigma_delta +adt7316 +adt7316-i2c +adt7316-spi +adt7410 +adt7411 +adt7462 +adt7470 +adt7475 +adummy +adutux +adv7170 +adv7175 +adv7180 +advansys +advantechwdt +adv_pci1710 +adv_pci1723 +adv_pci_dio +adxl34x +adxl34x-i2c +adxl34x-spi +adxrs450 +aesni-intel +aes-x86_64 +af_802154 +af9013 +af9033 +af_alg +affs +af_key +af_packet_diag +af-rxrpc +ah4 +ah6 +aha152x_cs +ahci +ahci_platform +aic79xx +aic7xxx +aic94xx +aiptek +aircable +airo +airo_cs +ak8975 +alauda +algif_hash +algif_skcipher +ali-ircc +alim1535_wdt +alim7101_wdt +alphatrack +altera-ci +altera_jtaguart +altera_ps2 +altera-stapl +altera_uart +alx +ambassador +amc6821 +amd5536udc +amd64_edac_mod +amd76xrom +amd8111e +amd_iommu_v2 +amd-rng +amilo-rfkill +amplc_dio200 +amplc_pc236 +amplc_pc263 +amplc_pci224 +amplc_pci230 +ams369fg06 +analog +ansi_cprng +anubis +aoe +apanel +apds9802als +apds990x +apple_bl +appledisplay +apple-gmux +applesmc +appletalk +appletouch +applicom +ar5523 +ar7part +arc4 +arcfb +arcmsr +arcnet +arc_ps2 +arc-rawmode +arc-rimi +arc_uart +arizona-haptics +arizona-i2c +arizona-ldo1 +arizona-micsupp +arizona-spi +ark3116 +arkfb +arptable_filter +arp_tables +arpt_mangle +as3711-regulator +as5011 +asb100 +asc7621 +asix +ast +asus_atk0110 +asus-laptop +asus-nb-wmi +asus_oled +asus-wmi +async_memcpy +async_pq +async_raid6_recov +async_tx +async_xor +at24 +at25 +at76c50x-usb +at86rf230 +at91_ether +atbm8830 +aten +ath +ath3k +ath5k +ath6kl_core +ath6kl_sdio +ath6kl_usb +ath9k +ath9k_common +ath9k_htc +ath9k_hw +ati_remote +ati_remote2 +atl1 +atl1c +atl1e +atl2 +atlas_btns +atm +atmel +atmel_cs +atmel_mxt_ts +atmel_pci +atmtcp +atp +atp870u +atxp1 +aty128fb +atyfb +au0828 +au8522_common +au8522_decoder +au8522_dig +aufs +auo_k1900fb +auo_k1901fb +auo_k190x +auo-pixcir-ts +authenc +authencesn +auth_rpcgss +autofs4 +avma1_cs +avm_cs +avmfritz +ax25 +axnet_cs +b1 +b1dma +b1pci +b1pcmcia +b2c2-flexcop +b2c2-flexcop-pci +b2c2-flexcop-usb +b43 +b43legacy +b44 +bas_gigaset +batman-adv +baycom_par +baycom_ser_fdx +baycom_ser_hdx +bch +bcm203x +bcm3510 +bcm5974 +bcma +bcma-hcd +bcm_wimax +be2iscsi +be2net +befs +belkin_sa +bfa +bfs +bfusb +bh1770glc +bh1780gli +binfmt_misc +block2mtd +blocklayoutdriver +blowfish_common +blowfish_generic +blowfish-x86_64 +bluecard_cs +bluetooth +bma150 +bmp085-i2c +bmp085-spi +bna +bnep +bnx2 +bnx2fc +bnx2i +bnx2x +bonding +bpa10x +bpck +bpctl_mod +bpqether +bq2415x_charger +bq27x00_battery +br2684 +brcmfmac +brcmsmac +brcmutil +bridge +broadsheetfb +bsd_comp +bt3c_cs +bt819 +bt856 +bt866 +bt878 +btcx-risc +btmrvl +btmrvl_sdio +btrfs +btsdio +bttv +btuart_cs +btusb +btwilink +bu21013_ts +budget +budget-av +budget-ci +budget-core +budget-patch +BusLogic +bw-qcam +bypass +c2port-duramar2150 +c4 +c67x00 +cachefiles +cafe_ccic +cafe_nand +caif +caif_hsi +caif_serial +caif_socket +caif_usb +camellia-aesni-avx-x86_64 +camellia_generic +camellia-x86_64 +can +can-bcm +can-dev +can-gw +can-raw +capi +capidrv +capmode +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 +cc770 +cc770_isa +cc770_platform +c_can +c_can_pci +c_can_platform +cciss +ccm +cdc-acm +cdc_eem +cdc_ether +cdc_mbim +cdc_ncm +cdc-phonet +cdc_subset +cdc-wdm +cedusb +ceph +cfag12864b +cfag12864bfb +cfg80211 +cfi_cmdset_0001 +cfi_cmdset_0002 +cfi_cmdset_0020 +cfi_probe +cfi_util +cfspi_slave +ch +ch341 +ch7006 +chipreg +chnl_net +ci13xxx_msm +ci13xxx_pci +cifs +ci_hdrc +cirrus +cirrusfb +ck804xrom +classmate-laptop +clearpad_tm1217 +clip +cls_basic +cls_cgroup +cls_flow +cls_fw +cls_route +cls_rsvp +cls_rsvp6 +cls_tcindex +cls_u32 +cm109 +cm4000_cs +cm4040_cs +cma3000_d0x +cma3000_d0x_i2c +cmtp +cnic +cobra +coda +com20020 +com20020_cs +com20020-pci +com90io +com90xx +comedi +comedi_bond +comedi_fc +comedi_parport +comedi_test +comm +compal-laptop +configfs +contec_pci_dio +cordic +core +coretemp +cp210x +cpcihp_generic +cpcihp_zt5550 +cpia2 +cpqarray +cpu5wdt +cpuid +cpu-notifier-error-inject +c-qcam +cramfs +cr_bllcd +crc7 +crc8 +crc-ccitt +crc-itu-t +crvml +cryptd +cryptoloop +crypto_null +crypto_user +crystalhd +cs5345 +cs53l32a +cs5535-mfd +csiostor +csr_helper +csr_wifi +ct82c710 +ctr +cts +cuse +cx18 +cx18-alsa +cx22700 +cx22702 +cx231xx +cx231xx-alsa +cx231xx-dvb +cx2341x +cx23885 +cx24110 +cx24113 +cx24116 +cx24123 +cx25821 +cx25821-alsa +cx25840 +cx82310_eth +cx8800 +cx8802 +cx88-alsa +cx88-blackbird +cx88-dvb +cx88-vp3054-i2c +cx88xx +cxacru +cxd2099 +cxd2820r +cxgb +cxgb3 +cxgb3i +cxgb4 +cxgb4i +cxgb4vf +cxt1e1 +cy8ctmg110_ts +cyber2000fb +cyberjack +cyclades +cyclomx +cycx_drv +cypress_cy7c63 +cypress_m8 +cytherm +cyttsp_core +cyttsp_i2c +cyttsp_spi +da9030_battery +da9034-ts +da903x +da903x_bl +da9052-battery +da9052_bl +da9052-hwmon +da9052_onkey +da9052-regulator +da9052_tsi +da9052_wdt +da9055-hwmon +da9055_onkey +da9055-regulator +da9055_wdt +DAC960 +daqboard2000 +das08 +das08_cs +db9 +dc395x +dca +dccp +dccp_diag +dccp_ipv4 +dccp_ipv6 +dccp_probe +dcdbas +ddbridge +de2104x +de4x5 +de600 +de620 +decnet +deflate +defxx +dell-laptop +dell-led +dell_rbu +dell-wmi +dell-wmi-aio +denali +denali_pci +des_generic +dgrp +dib0070 +dib0090 +dib3000mb +dib3000mc +dib7000m +dib7000p +dib8000 +dibx000_common +digi_acceleport +diskonchip +divacapi +divadidd +diva_idi +diva_mnt +divas +dl2k +dlci +dlm +dm1105 +dm9601 +dm-bio-prison +dm-bufio +dm-crypt +dm-delay +dme1737 +dmfe +dm-flakey +dmi-sysfs +dm-log +dm-log-userspace +dm-mirror +dm-multipath +dm-persistent-data +dm-queue-length +dm-raid +dm-raid45 +dm-region-hash +dm-round-robin +dm-service-time +dm-snapshot +dm-thin-pool +dm-verity +dmx3191d +dm-zero +dnet +dn_rtmsg +doc2001plus +docecc +docg3 +docg4 +docprobe +dpt_i2o +drbd +drm +drm_kms_helper +drm_usb +drxd +drxk +ds1621 +ds1682 +ds1wm +ds2482 +ds2490 +ds2760_battery +ds2780_battery +ds2781_battery +ds2782_battery +ds3000 +ds620 +dsa_core +dsbr100 +dscc4 +dss1_divert +dst +dst_ca +dstr +dt3000 +dt3155v4l +dt9812 +dtl1_cs +dummy +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_cypress_firmware +dvb-usb-dib0700 +dvb-usb-dibusb-common +dvb-usb-dibusb-mb +dvb-usb-dibusb-mc +dvb-usb-digitv +dvb-usb-dtt200u +dvb-usb-dtv5100 +dvb-usb-dw2102 +dvb-usb-ec168 +dvb-usb-friio +dvb-usb-gl861 +dvb-usb-gp8psk +dvb-usb-it913x +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_v2 +dvb-usb-vp702x +dvb-usb-vp7045 +dwc3 +dwc3-exynos +dwc3-omap +dwc3-pci +dw_dmac +dyna_pci10xx +dynapro +e100 +e1000 +e1000e +e4000 +e752x_edac +earth-pt1 +eata +ebt_802_3 +ebtable_broute +ebtable_filter +ebtable_nat +ebtables +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 +ec100 +echo +ec_sys +edac_core +edac_mce_amd +edt-ft5x06 +eeepc-laptop +eeepc-wmi +eeprom +eeprom_93cx6 +eeprom_93xx46 +eeti_ts +efs +einj +elo +elsa_cs +em28xx +em28xx-alsa +em28xx-dvb +em28xx-rc +emc1403 +emc2103 +emc6w201 +em_canid +em_cmp +emi26 +emi62 +em_ipset +em_meta +em_nbyte +empeg +ems_pci +ems_pcmcia +ems_usb +em_text +emu10k1-gp +em_u32 +enc28j60 +enclosure +ene_ir +eni +enic +epat +epia +epic100 +eql +esb2rom +esd_usb2 +esi-sir +esp4 +esp6 +et131x +ethoc +eurotechwdt +evbug +exofs +ext2 +extcon-adc-jack +extcon-arizona +extcon-gpio +extcon-max77693 +extcon-max8997 +ezusb +f2fs +f71805f +f71808e_wdt +f71882fg +f75375s +f81232 +fakelb +fam15h_power +fan53555 +farsync +faulty +fb_ddc +fb_sys_fops +fc0011 +fc0012 +fc0013 +fc2580 +fcoe +fcrypt +fdomain +fdomain_cs +fealnx +ff-memless +fintek-cir +firedtv +firestream +firewire-core +firewire-net +firewire-ohci +firewire-sbp2 +firewire-serial +fit2 +fit3 +fixed +floppy +fm801-gp +fm_drv +fmvj18x_cs +fnic +forcedeth +fore_200e +freevxfs +friq +frpw +fsa9480 +fscache +fschmd +ft1000 +ft1000_pcmcia +ftdi-elan +ftdi_sio +ftl +fujitsu-laptop +fujitsu-tablet +fujitsu_ts +funsoft +g450_pll +g760a +g_acm_ms +gadgetfs +gamecon +gameport +garmin_gps +garp +g_audio +g_cdc +gcm +g_dbgp +gdmwm +gdth +generic +generic-adc-battery +generic_bl +gen_probe +g_ether +gf128mul +gf2k +g_ffs +gfs2 +ghash-clmulni-intel +ghash-generic +g_hid +gigaset +girbil-sir +gl518sm +gl520sm +gl620a +gluebi +glue_helper +gma500_gfx +g_mass_storage +g_midi +g_ncm +g_nokia +go7007 +go7007-usb +goku_udc +gp2ap002a00f +gpio-74x164 +gpio-addr-flash +gpio-adp5520 +gpio-adp5588 +gpio-amd8111 +gpio-arizona +gpio-charger +gpio-cs5535 +gpio-da9052 +gpio-da9055 +gpio-fan +gpio-generic +gpio-ich +gpio-ir-recv +gpio-it8761e +gpio-janz-ttl +gpio_keys +gpio_keys_polled +gpio-max7300 +gpio-max7301 +gpio-max730x +gpio-max732x +gpio-mc33880 +gpio-mcp23s08 +gpio-ml-ioh +gpio_mouse +gpio-pca953x +gpio-pcf857x +gpio-pch +gpio-rdc321x +gpio-regulator +gpio-sch +gpio_tilt_polled +gpio-tps65912 +gpio-ts5500 +gpio-twl4030 +gpio-twl6040 +gpio_vbus +gpio-viperboard +gpio-vx855 +gpio-wm831x +gpio-wm8350 +gpio-wm8994 +g_printer +gre +grip +grip_mp +gsc_hpdi +g_serial +gspca_benq +gspca_conex +gspca_cpia1 +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_stv0680 +gspca_stv06xx +gspca_sunplus +gspca_t613 +gspca_topro +gspca_tv8532 +gspca_vc032x +gspca_vicam +gspca_xirlink_cit +gspca_zc3xx +gtco +guillemot +gunze +g_webcam +gx1fb +gxfb +g_zero +hamachi +hampshire +hangcheck-timer +hanwang +hci +hci_uart +hci_vhci +hdaps +hdlc +hdlc_cisco +hdlcdrv +hdlc_fr +hdlc_ppp +hdlc_raw +hdlc_raw_eth +hdlc_x25 +hdpvr +he +hecubafb +hexium_gemini +hexium_orion +hfc4s8s_l1 +hfcmulti +hfcpci +hfcsusb +hfc_usb +hfs +hfsplus +hgafb +hid +hid-a4tech +hid-apple +hid-aureal +hid-axff +hid-belkin +hid-cherry +hid-chicony +hid-cypress +hid-dr +hid-elecom +hid-emsff +hid-ezkey +hid-gaff +hid-generic +hid-gyration +hid-holtekff +hid-holtek-kbd +hid-hyperv +hid-icade +hid-kensington +hid-keytouch +hid-kye +hid-lcpower +hid-lenovo-tpkbd +hid-logitech +hid-logitech-dj +hid-magicmouse +hid-microsoft +hid-monterey +hid-multitouch +hid-ntrig +hid-ortek +hidp +hid-petalynx +hid-picolcd +hid-pl +hid-primax +hid-prodikeys +hid-ps3remote +hid-roccat +hid-roccat-arvo +hid-roccat-common +hid-roccat-isku +hid-roccat-kone +hid-roccat-koneplus +hid-roccat-kovaplus +hid-roccat-lua +hid-roccat-pyra +hid-roccat-savu +hid-saitek +hid-samsung +hid-sensor-accel-3d +hid-sensor-als +hid-sensor-gyro-3d +hid-sensor-hub +hid-sensor-iio-common +hid-sensor-magn-3d +hid-sensor-trigger +hid-sjoy +hid-sony +hid-speedlink +hid-sunplus +hid-tivo +hid-tmff +hid-topseed +hid-twinhan +hid-uclogic +hid-wacom +hid-waltop +hid-wiimote +hid-zpff +hid-zydacron +hih6130 +hisax +hisax_fcpcipnp +hisax_isac +hisax_st5481 +hmc5843 +hmc6352 +hopper +horizon +hostap +hostap_cs +hostap_pci +hostap_plx +hp100 +hp4x +hp_accel +hpfs +hpilo +hpsa +hptiop +hpwdt +hp-wmi +hsi +hsi_char +hso +htc-pasic3 +hv_balloon +hv_netvsc +hv_storvsc +hv_utils +hv_vmbus +hwa-hc +hwa-rc +hwmon-vid +hwpoison-inject +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-designware-core +i2c-designware-pci +i2c-dev +i2c-diolan-u2c +i2c-eg20t +i2c-gpio +i2c-hid +i2c-i801 +i2c-intel-mid +i2c-isch +i2c-ismt +i2c-matroxfb +i2c-mux +i2c-mux-gpio +i2c-mux-pca9541 +i2c-mux-pca954x +i2c-nforce2 +i2c-nforce2-s4985 +i2c-ocores +i2c-parport +i2c-parport-light +i2c-pca-platform +i2c-piix4 +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 +i2o_block +i2o_bus +i2o_config +i2o_core +i2o_proc +i2o_scsi +i3000_edac +i3200_edac +i5000_edac +i5100_edac +i5400_edac +i5k_amb +i6300esb +i7300_edac +i7300_idle +i740fb +i7core_edac +i810 +i82092 +i82975x_edac +i8k +i915 +ib700wdt +ib_addr +ib_cm +ib_core +ib_ipath +ib_ipoib +ib_iser +ib_mad +ibmaem +ibmasm +ibmasr +ibmpex +ibm_rtl +ib_mthca +ib_qib +ib_sa +ib_srp +ib_srpt +ib_ucm +ib_umad +ib_uverbs +ichxrom +icp_multi +ics932s401 +ideapad-laptop +idmouse +idt77252 +ie6xx_wdt +ieee802154 +ifb +iforce +igb +igbvf +iguanair +iio_dummy +iio_hwmon +iio-trig-gpio +iio-trig-periodic-rtc +iio-trig-sysfs +ii_pci20kc +ili210x +ili9320 +imm +imon +imx074 +ina2xx +industrialio +industrialio-triggered-buffer +inet_diag +inexio +inftl +initio +input-polldev +int51x1 +intelfb +intel_ips +intel_menlow +intel_mid_dma +intel_oaktrail +intel-rng +intel_vr_nor +interact +interval_tree_test +ioatdma +ioc4 +io_edgeport +io_ti +iowarrior +ip6_gre +ip6table_filter +ip6table_mangle +ip6table_nat +ip6table_raw +ip6_tables +ip6table_security +ip6t_ah +ip6t_eui64 +ip6t_frag +ip6t_hbh +ip6t_ipv6header +ip6t_MASQUERADE +ip6t_mh +ip6t_NPT +ip6t_REJECT +ip6t_rpfilter +ip6t_rt +ip6_tunnel +ipack +ipaq +ipcomp +ipcomp6 +ipddp +ipg +ip_gre +iphase +ipheth +ipip +ipmi_devintf +ipmi_msghandler +ipmi_poweroff +ipmi_si +ipmi_watchdog +ipoctal +ipr +ips +ip_set +ip_set_bitmap_ip +ip_set_bitmap_ipmac +ip_set_bitmap_port +ip_set_hash_ip +ip_set_hash_ipport +ip_set_hash_ipportip +ip_set_hash_ipportnet +ip_set_hash_net +ip_set_hash_netiface +ip_set_hash_netport +ip_set_list_set +iptable_filter +iptable_mangle +iptable_nat +iptable_raw +ip_tables +iptable_security +ipt_ah +ipt_CLUSTERIP +ipt_ECN +ipt_MASQUERADE +ipt_REJECT +ipt_rpfilter +ipt_ULOG +ip_vs +ip_vs_dh +ip_vs_ftp +ip_vs_lblc +ip_vs_lblcr +ip_vs_lc +ip_vs_nq +ip_vs_pe_sip +ip_vs_rr +ip_vs_sed +ip_vs_sh +ip_vs_wlc +ip_vs_wrr +ip_vti +ipw +ipw2100 +ipw2200 +ipwireless +ipx +ircomm +ircomm-tty +irda +irda-usb +ir-jvc-decoder +ir-kbd-i2c +irlan +ir-lirc-codec +ir-mce_kbd-decoder +ir-nec-decoder +irnet +ir-rc5-decoder +ir-rc5-sz-decoder +ir-rc6-decoder +ir-sanyo-decoder +ir-sony-decoder +irtty-sir +ir-usb +isci +iscsi_boot_sysfs +iscsi_ibft +iscsi_target_mod +iscsi_tcp +isdn +isdn_bsdcomp +isdnhdlc +isicom +isight_firmware +isl29003 +isl29018 +isl29020 +isl29028 +isl6271a-regulator +isl6405 +isl6421 +isl6423 +isofs +isp116x-hcd +isp1301 +isp1362-hcd +isp1704_charger +isp1760 +it87 +it8712f_wdt +it87_wdt +it913x-fe +iTCO_vendor_support +iTCO_wdt +itd1000 +ite-cir +iuu_phoenix +ivtv +ivtv-alsa +ivtvfb +iw_c2 +iw_cm +iw_cxgb3 +iw_cxgb4 +iwl3945 +iwl4965 +iwldvm +iwlegacy +iwlwifi +iw_nes +ix2505v +ixgb +ixgbe +ixgbevf +janz-cmodio +janz-ican3 +jc42 +jedec_probe +jffs2 +jfs +jmb38x_ms +jme +joydev +joydump +jr3_pci +jsm +k10temp +k8temp +kafs +kalmia +kaweth +kb3886_bl +kbic +kbtab +kcomedilib +ke_counter +kernelcapi +keucr +keyspan +keyspan_pda +keyspan_remote +kfifo_buf +khazad +kingsun-sir +kl5kusb105 +kobil_sct +ks0108 +ks0127 +ks8842 +ks8851 +ks8851_mll +ks959-sir +ksdazzle-sir +ksz884x +ktti +kvaser_pci +kvaser_usb +kvm +kvm-amd +kvm-intel +kxsd9 +kxtj9 +kyrofb +l1oip +l2tp_core +l2tp_debugfs +l2tp_ppp +l440gx +l4f00242t03 +l64781 +lanai +lapb +lapbether +latch-addr-flash +lcd +ld9040 +ldusb +lec +leds-88pm860x +leds-adp5520 +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-lp5521 +leds-lp5523 +leds-lp8788 +leds-lt3593 +leds-max8997 +leds-mc13783 +leds-ot200 +leds-pca9532 +leds-pca955x +leds-pca9633 +leds-regulator +leds-ss4200 +leds-tca6507 +leds-wm831x-status +leds-wm8350 +ledtrig-backlight +ledtrig-default-on +ledtrig-gpio +ledtrig-heartbeat +ledtrig-oneshot +ledtrig-timer +ledtrig-transient +legousbtower +lg2160 +lgdt3305 +lgdt330x +lgs8gxx +lg-vl600 +lib80211 +lib80211_crypt_ccmp +lib80211_crypt_tkip +lib80211_crypt_wep +libahci +libceph +libcomposite +libcrc32c +libcxgbi +libertas +libertas_cs +libertas_sdio +libertas_spi +libertas_tf +libertas_tf_usb +libfc +libfcoe +libipw +libiscsi +libiscsi_tcp +libore +libosd +libsas +libsrp +lightning +line6usb +lineage-pem +linear +lirc_bt829 +lirc_dev +lirc_igorplugusb +lirc_imon +lirc_parallel +lirc_sasem +lirc_serial +lirc_sir +lirc_zilog +lis3l02dq +lis3lv02d +lis3lv02d_i2c +litelink-sir +lkkbd +llc +llc2 +lm25066 +lm3533-als +lm3533_bl +lm3533-core +lm3533-ctrlbank +lm3630_bl +lm3639_bl +lm63 +lm70 +lm73 +lm75 +lm77 +lm78 +lm80 +lm83 +lm8323 +lm8333 +lm85 +lm87 +lm90 +lm92 +lm93 +lm95241 +lm95245 +lmc +lms283gf05 +lnbp21 +lnbp22 +lockd +logger +lp +lp3971 +lp3972 +lp855x_bl +lp8727_charger +lp8788-charger +lpc_ich +lpc_sch +lpddr_cmds +lpfc +lru_cache +lrw +ltc2978 +ltc4151 +ltc4215 +ltc4245 +ltc4261 +ltv350qv +lxfb +m25p80 +m2m-deinterlace +m52790 +m88rs2000 +ma600-sir +mac80211 +mac80211_hwsim +mac802154 +macb +mac-celtic +mac-centeuro +mac-croatian +mac-cyrillic +mac-gaelic +mac-greek +mac_hid +machzwd +mac-iceland +mac-inuit +macmodes +mac-roman +mac-romanian +mac-turkish +macvlan +macvtap +magellan +mantis +mantis_core +map_absent +map_funcs +map_ram +map_rom +matrix-keymap +matrix_keypad +matroxfb_accel +matroxfb_base +matroxfb_crtc2 +matroxfb_DAC1064 +matroxfb_g450 +matroxfb_maven +matroxfb_misc +matroxfb_Ti3026 +matrox_w1 +max1111 +max11801_ts +max1363 +max1586 +max16064 +max16065 +max1619 +max1668 +max17040_battery +max17042_battery +max197 +max2165 +max3100 +max34440 +max517 +max6639 +max6642 +max6650 +max6875 +max7359_keypad +max77686 +max8649 +max8660 +max8688 +max8903_charger +max8907 +max8907-regulator +max8925_bl +max8925_onkey +max8925_power +max8925-regulator +max8952 +max8973-regulator +max8997 +max8997_charger +max8998 +max8998_charger +mb862xxfb +mb86a16 +mb86a20s +mc13783-adc +mc13783-pwrbutton +mc13783-regulator +mc13783_ts +mc13892-regulator +mc13xxx-core +mc13xxx-i2c +mc13xxx-regulator-core +mc13xxx-spi +mc44s803 +mce_amd_inj +mce-inject +mceusb +mcp2120-sir +mcp251x +mcp3021 +mcp4725 +mcs5000_ts +mcs7780 +mcs7830 +mcs_touchkey +mct_u232 +md4 +mdc800 +mdio +me4000 +me_daq +megaraid +megaraid_mbox +megaraid_mm +megaraid_sas +mei +mem2mem_testdev +memory-notifier-error-inject +memstick +metronomefb +metro-usb +meye +mfd +mga +michael_mic +microcode +microtek +minix +mip6 +mISDN_core +mISDN_dsp +mISDNinfineon +mISDNipac +mISDNisar +mite +mk712 +mkiss +mlx4_core +mlx4_en +mlx4_ib +mma8450 +mmc_block +mmc_spi +mms114 +mos7720 +mos7840 +moto_modem +moxa +mpoa +mpr121_touchkey +mpt2sas +mpt3sas +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +mpu3050 +mrf24j40 +mrst_max3110 +msdos +msi-laptop +msi-wmi +msp3400 +mspro_block +msr +mt2060 +mt2063 +mt20xx +mt2131 +mt2266 +mt312 +mt352 +mt9m001 +mt9m111 +mt9t031 +mt9t112 +mt9v011 +mt9v022 +mtd +mtd_blkdevs +mtdblock +mtdblock_ro +mtdchar +mtd_dataflash +mtdoops +mtdram +mtdswap +mtip32xx +mtouch +multipath +musb_hdrc +mv88e6060 +mv88e6xxx_drv +mvmdio +mvsas +mv_udc +mvumi +mwave +mwifiex +mwifiex_pcie +mwifiex_sdio +mwifiex_usb +mwl8k +mxb +mxl111sf-demod +mxl111sf-tuner +mxl5005s +mxl5007t +mxm-wmi +mxser +myri10ge +n411 +nand +nand_bch +nand_ecc +nand_ids +nandsim +natsemi +navman +nbd +nci +ncpfs +ne2k-pci +neofb +net1080 +net2272 +net2280 +netconsole +netjet +netprio_cgroup +netrom +netsc520 +nettel +netxen_nic +newtonkbd +nfc +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_dccp +nf_conntrack_proto_gre +nf_conntrack_proto_sctp +nf_conntrack_proto_udplite +nf_conntrack_sane +nf_conntrack_sip +nf_conntrack_snmp +nf_conntrack_tftp +nfcwilink +nf_defrag_ipv4 +nf_defrag_ipv6 +nf_nat +nf_nat_amanda +nf_nat_ftp +nf_nat_h323 +nf_nat_ipv4 +nf_nat_ipv6 +nf_nat_irc +nf_nat_pptp +nf_nat_proto_dccp +nf_nat_proto_gre +nf_nat_proto_sctp +nf_nat_proto_udplite +nf_nat_sip +nf_nat_snmp_basic +nf_nat_tftp +nfnetlink +nfnetlink_acct +nfnetlink_cthelper +nfnetlink_cttimeout +nfnetlink_log +nfnetlink_queue +nfs +nfs_acl +nfsd +nfs_layout_nfsv41_files +nfsv2 +nfsv3 +nfsv4 +nftl +nf_tproxy_core +ngene +n_hdlc +ni_6527 +ni_65xx +ni_660x +ni_670x +nicstar +ni_daq_700 +ni_daq_dio24 +ni_labpc +ni_labpc_cs +nilfs2 +ni_mio_cs +ni_pcidio +ni_pcimio +ni_tio +ni_tiocmd +niu +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 +nop-usb-xceiv +nosy +notifier-error-inject +nouveau +nozomi +n_r3964 +ns558 +ns83820 +nsc-ircc +ntc_thermistor +ntfs +n_tracerouter +n_tracesink +nuvoton-cir +nvidiafb +nvme +nvram +nv_tco +nxt200x +nxt6000 +objlayoutdriver +ocfs2 +ocfs2_dlm +ocfs2_dlmfs +ocfs2_nodemanager +ocfs2_stackglue +ocfs2_stack_o2cb +ocfs2_stack_user +ocrdma +old_belkin-sir +omfs +omninet +on20 +on26 +onenand +opencores-kbd +openvswitch +oprofile +opticon +option +or51132 +or51211 +orinoco +orinoco_cs +orinoco_nortel +orinoco_plx +orinoco_tmd +orinoco_usb +osd +osdblk +osst +oti6858 +output +ov2640 +ov5642 +ov6650 +ov7670 +ov772x +ov9640 +ov9740 +overlayfs +oxu210hp-hcd +ozwpan +p4-clockmod +p54common +p54pci +p54spi +p54usb +p8022 +p8023 +padlock-aes +padlock-sha +palmas-regulator +panasonic-laptop +pandora_bl +panel +paride +parkbd +parport +parport_ax88796 +parport_cs +parport_pc +parport_serial +pata_acpi +pata_ali +pata_amd +pata_arasan_cf +pata_artop +pata_atiixp +pata_atp867x +pata_cmd640 +pata_cmd64x +pata_cs5520 +pata_cs5530 +pata_cs5536 +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_sc1200 +pata_sch +pata_serverworks +pata_sil680 +pata_sl82c105 +pata_triflex +pata_via +pc300too +pc87360 +pc87413_wdt +pc87427 +pcap_keys +pcap-regulator +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 +pci200syn +pcips2 +pci_slot +pci-stub +pcmcia +pcmcia_core +pcmciamtd +pcmcia_rsrc +pcm_common +pcnet32 +pcnet_cs +pcrypt +pcspkr +pcwd_pci +pcwd_usb +pd +pd6729 +pda_power +pdc_adma +peak_pci +peak_pcmcia +peak_usb +pegasus +penmount +pf +pg +phantom +phison +phonet +phram +physmap +pixcir_i2c_ts +pktcdvd +pktgen +pl2303 +platform_lcd +plat_nand +plat-ram +plip +plusb +pluto2 +plx_pci +pm2fb +pm3fb +pm8001 +pmbus +pmbus_core +pmc551 +pmcraid +pm-notifier-error-inject +pn533 +pn544_i2c +pn_pep +poseidon +powermate +ppa +ppdev +ppp_async +ppp_deflate +ppp_mppe +pppoatm +pppoe +pppox +ppp_synctty +pps_core +pps-gpio +pps-ldisc +pps_parport +pptp +prism2_usb +ps2mult +psmouse +psnap +pt +pti +ptp +ptp_pch +pvrusb2 +pwc +pwm-beeper +pwm_bl +pwm-twl +pwm-twl-led +qcaux +qcserial +qinfo_probe +qla1280 +qla2xxx +qla3xxx +qla4xxx +qlcnic +qlge +qlogic_cs +qlogicfas408 +qmi_wwan +qnx4 +qnx6 +qt1010 +qt1070 +qt2160 +quatech2 +quatech_daqp_cs +quickstart +quota_tree +quota_v1 +quota_v2 +r128 +r592 +r6040 +r8169 +r8187se +r8192e_pci +r8192u_usb +r852 +r8712u +r8a66597-hcd +r8a66597-udc +radeon +radeonfb +radio-i2c-si470x +radio-keene +radio-maxiradio +radio-mr800 +radio-shark +radio-si4713 +radio-tea5764 +radio-timb +radio-usb-si470x +radio-wl1273 +raid0 +raid1 +raid10 +raid456 +raid6_pq +raid6test +raid_class +ramoops +raw +ray_cs +rbd +rbtree_test +rc5t583-regulator +rc-adstech-dvb-t-pci +rc-alink-dtu-m +rc-anysee +rc-apac-viewcomp +rcar-phy +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-cinergy +rc-cinergy-1400 +rc-core +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-em-terratec +rc-encore-enltv +rc-encore-enltv2 +rc-encore-enltv-fm53 +rc-evga-indtube +rc-eztv +rc-flydvb +rc-flyvideo +rc-fusionhdtv-mce +rc-gadmei-rm008z +rc-genius-tvgo-a11mce +rc-gotview7135 +rc-hauppauge +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-lirc +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-snapstream-firefly +rc-streamzap +rc-tbs-nec +rc-technisat-usb2 +rc-terratec-cinergy-xs +rc-terratec-slim +rc-terratec-slim-2 +rc-tevii-nec +rc-tivo +rc-total-media-in-hand +rc-trekstor +rc-tt-1500 +rc-twinhan1027 +rc-videomate-m1f +rc-videomate-s350 +rc-videomate-tv-pvr +rc-winfast +rc-winfast-usbii-deluxe +rdc321x-southbridge +rdma_cm +rdma_ucm +rds +rds_rdma +rds_tcp +redboot +redrat3 +reed_solomon +regmap-mmio +reiserfs +remoteproc +renesas_usbhs +retu-mfd +retu-pwrbutton +rfc1051 +rfc1201 +rfcomm +rfd_ftl +rfkill-regulator +ring_sw +rio500 +rionet +rivafb +rj54n1cb0c +rmd128 +rmd160 +rmd256 +rmd320 +rndis_host +rndis_wlan +rocket +romfs +rose +rotary_encoder +rpcsec_gss_krb5 +rt2400pci +rt2500pci +rt2500usb +rt2800lib +rt2800pci +rt2800usb +rt2x00lib +rt2x00pci +rt2x00usb +rt61pci +rt73usb +rtc-88pm80x +rtc-88pm860x +rtc-ab3100 +rtc-bq32k +rtc-bq4802 +rtc-da9052 +rtc-da9055 +rtc-ds1286 +rtc-ds1305 +rtc-ds1307 +rtc-ds1374 +rtc-ds1390 +rtc-ds1511 +rtc-ds1553 +rtc-ds1672 +rtc-ds1742 +rtc-ds2404 +rtc-ds3232 +rtc-ds3234 +rtc-em3027 +rtc-fm3130 +rtc-isl12022 +rtc-isl1208 +rtc-m41t80 +rtc-m41t93 +rtc-m41t94 +rtc-m48t35 +rtc-m48t59 +rtc-m48t86 +rtc-max6900 +rtc-max6902 +rtc-max8907 +rtc-max8925 +rtc-max8998 +rtc-mc13xxx +rtc-msm6242 +rtc-pcap +rtc-pcf2123 +rtc-pcf50633 +rtc-pcf8523 +rtc-pcf8563 +rtc-pcf8583 +rtc-r9701 +rtc-rc5t583 +rtc-rp5c01 +rtc-rs5c348 +rtc-rs5c372 +rtc-rv3029c2 +rtc-rx8025 +rtc-rx8581 +rtc-s35390a +rtc-stk17ta8 +rtc-tps6586x +rtc-tps65910 +rtc-twl +rtc-v3020 +rtc-wm831x +rtc-wm8350 +rtc-x1205 +rtd520 +rtl2830 +rtl2832 +rtl8150 +rtl8180 +rtl8187 +rtl8192c-common +rtl8192ce +rtl8192cu +rtl8192de +rtl8192se +rtl8723ae +rtllib +rtllib_crypt_ccmp +rtllib_crypt_tkip +rtllib_crypt_wep +rtlwifi +rts5139 +rtsx_pci +rtsx_pci_ms +rtsx_pci_sdmmc +rx51_battery +rxkad +s1d13xxxfb +s2250 +s2250-loader +s2255drv +s2io +s2mps11 +s3fb +s526 +s5h1409 +s5h1411 +s5h1420 +s5m8767 +s626 +s6e63m0 +s921 +saa6588 +saa6752hs +saa7110 +saa7115 +saa7127 +saa7134 +saa7134-alsa +saa7134-dvb +saa7134-empress +saa7146 +saa7146_vv +saa7164 +saa717x +saa7185 +saa7706h +safe_serial +salsa20_generic +salsa20-x86_64 +samsung-laptop +samsung-q10 +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 +savage +savagefb +sb1000 +sb105x +sbc60xxwdt +sbc8360 +sbc_epx_c3 +sbc_fitpc2_wdt +sbc_gxx +sbe-2t3e3 +sb_edac +sbni +sbp_target +sbs +sbs-battery +sbshc +sc1200wdt +sc520cdp +sc520_wdt +sc92031 +sca3000 +scb2_flash +sch311x_wdt +sch5627 +sch5636 +sch56xx-common +sch_atm +sch_cbq +sch_choke +sch_codel +sch_drr +sch_dsmark +sch_fq_codel +sch_gred +sch_hfsc +sch_htb +sch_ingress +sch_mqprio +sch_multiq +sch_netem +sch_plug +sch_prio +sch_qfq +sch_red +sch_sfb +sch_sfq +sch_tbf +sch_teql +scsi_debug +scsi_dh +scsi_dh_alua +scsi_dh_emc +scsi_dh_hp_sw +scsi_dh_rdac +scsi_tgt +scsi_transport_fc +scsi_transport_iscsi +scsi_transport_sas +scsi_transport_srp +sctp +sctp_probe +sdhci +sdhci-acpi +sdhci-pci +sdhci-pltfm +sdio_uart +sdricoh_cs +sedlbauer_cs +seed +seeq8005 +sep_driver +seqiv +ser_gigaset +serial2002 +serial_cs +serio_raw +sermouse +serpent-avx-x86_64 +serpent_generic +serpent-sse2-x86_64 +serport +serqt_usb2 +ses +sfc +sha1-ssse3 +shark2 +shpchp +sht15 +sht21 +si21xx +si4713-i2c +sidewinder +siemens_mpi +sierra +sierra_net +sil164 +sir-dev +sis +sis190 +sis5595 +sis900 +sis-agp +sisfb +sisusbvga +sit +sja1000 +sja1000_isa +sja1000_platform +skel +skfp +skge +sky2 +sl811_cs +sl811-hcd +slcan +slicoss +slip +slram +sm501 +sm501fb +sm7xxfb +smb347-charger +smc91c92_cs +sm_common +sm_ftl +smm665 +smsc37b787_wdt +smsc47b397 +smsc47m1 +smsc47m192 +smsc75xx +smsc9420 +smsc95xx +smsc-ircc2 +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-bt87x +snd-ca0106 +snd-cmipci +snd-compress +snd-cs4281 +snd-cs46xx +snd-cs5530 +snd-cs5535audio +snd-cs8427 +snd-ctxfi +snd-darla20 +snd-darla24 +snd-dummy +snd-echo3g +snd-emu10k1 +snd-emu10k1-synth +snd-emu10k1x +snd-emux-synth +snd-ens1370 +snd-ens1371 +snd-es1938 +snd-es1968 +snd-firewire-lib +snd-firewire-speakers +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-hdmi +snd-hda-codec-idt +snd-hda-codec-realtek +snd-hda-codec-si3054 +snd-hda-codec-via +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-mona +snd-mpu401 +snd-mpu401-uart +snd-mtpav +snd-mts64 +snd-nm256 +snd-opl3-lib +snd-opl3-synth +snd-oxygen +snd-oxygen-lib +snd-page-alloc +snd-pcm +snd-pcsp +snd-pcxhr +snd-pdaudiocf +snd-portman2x4 +snd-pt2258 +snd-rawmidi +snd-riptide +snd-rme32 +snd-rme96 +snd-rme9652 +snd-sb16-dsp +snd-sb-common +snd-scs1x +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-88pm860x +snd-soc-ab8500-codec +snd-soc-ad1836 +snd-soc-ad193x +snd-soc-ad73311 +snd-soc-adau1373 +snd-soc-adav80x +snd-soc-ads117x +snd-soc-ak4104 +snd-soc-ak4535 +snd-soc-ak4641 +snd-soc-ak4642 +snd-soc-ak4671 +snd-soc-alc5623 +snd-soc-alc5632 +snd-soc-arizona +snd-soc-core +snd-soc-cs4270 +snd-soc-cs4271 +snd-soc-cs42l51 +snd-soc-cs42l52 +snd-soc-cs42l73 +snd-soc-cx20442 +snd-soc-da7210 +snd-soc-da732x +snd-soc-da9055 +snd-soc-dfbmcs320 +snd-soc-isabelle +snd-soc-jz4740-codec +snd-soc-l3 +snd-soc-lm4857 +snd-soc-lm49453 +snd-soc-max9768 +snd-soc-max98088 +snd-soc-max98090 +snd-soc-max98095 +snd-soc-max9850 +snd-soc-max9877 +snd-soc-mc13783 +snd-soc-ml26124 +snd-soc-pcm3008 +snd-soc-rt5631 +snd-soc-sgtl5000 +snd-soc-simple-card +snd-soc-spdif-rx +snd-soc-spdif-tx +snd-soc-ssm2602 +snd-soc-sta32x +snd-soc-sta529 +snd-soc-tlv320aic23 +snd-soc-tlv320aic26 +snd-soc-tlv320aic32x4 +snd-soc-tlv320aic3x +snd-soc-tlv320dac33 +snd-soc-tpa6130a2 +snd-soc-twl4030 +snd-soc-twl6040 +snd-soc-uda134x +snd-soc-uda1380 +snd-soc-wl1273 +snd-soc-wm0010 +snd-soc-wm1250-ev1 +snd-soc-wm2000 +snd-soc-wm2200 +snd-soc-wm5100 +snd-soc-wm5102 +snd-soc-wm5110 +snd-soc-wm8350 +snd-soc-wm8400 +snd-soc-wm8510 +snd-soc-wm8523 +snd-soc-wm8580 +snd-soc-wm8711 +snd-soc-wm8727 +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-wm8782 +snd-soc-wm8804 +snd-soc-wm8900 +snd-soc-wm8903 +snd-soc-wm8904 +snd-soc-wm8940 +snd-soc-wm8955 +snd-soc-wm8960 +snd-soc-wm8961 +snd-soc-wm8962 +snd-soc-wm8971 +snd-soc-wm8974 +snd-soc-wm8978 +snd-soc-wm8983 +snd-soc-wm8985 +snd-soc-wm8988 +snd-soc-wm8990 +snd-soc-wm8991 +snd-soc-wm8993 +snd-soc-wm8994 +snd-soc-wm8995 +snd-soc-wm8996 +snd-soc-wm9081 +snd-soc-wm9090 +snd-soc-wm-adsp +snd-soc-wm-hubs +snd-sonicvibes +snd-tea575x-tuner +snd-timer +snd-trident +snd-ua101 +snd-usb-6fire +snd-usb-audio +snd-usb-caiaq +snd-usbmidi-lib +snd-usb-us122l +snd-usb-usx2y +snd-util-mem +snd-via82xx +snd-via82xx-modem +snd-virmidi +snd-virtuoso +snd-vx222 +snd-vx-lib +snd-vxpocket +snd-ymfpci +soc_camera +soc_camera_platform +soc_mediabus +softdog +softing +softing_cs +solo6x10 +solos-pci +sony-laptop +soundcore +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 +speedstep-lib +speedtch +spi-altera +spi-bitbang +spi-butterfly +spidev +spi-dw +spi-dw-midpci +spi-gpio +spi_ks8995 +spi-lm70llp +spi-oc-tiny +spi-pxa2xx-pci +spi-pxa2xx-platform +spi-sc18is602 +spi-tle62x0 +spi-topcliff-pch +spi-xcomm +squashfs +ssb +ssb-hcd +ssfdc +sst25l +sstfb +ssu100 +ssv_dnp +st +st1232 +starfire +stb0899 +stb6000 +stb6100 +st_drv +ste_modem_rproc +stex +stinger +stir4200 +stk1160 +stkwebcam +stmmac +stmpe-keypad +stmpe-ts +stowaway +stp +streamzap +stv0288 +stv0297 +stv0299 +stv0367 +stv0900 +stv090x +stv6110 +stv6110x +sundance +sungem +sungem_phy +sunhme +suni +sunkbd +sunrpc +svcrdma +svgalib +sx8 +sym53c500_cs +sym53c8xx +symbolserial +synaptics_i2c +synaptics_i2c_rmi4 +synaptics_usb +synclink +synclink_cs +synclink_gt +synclinkmp +syscopyarea +sysfillrect +sysimgblt +sysv +t1pci +target_core_file +target_core_iblock +target_core_mod +target_core_pscsi +tc3589x-keypad +tca6416-keypad +tca8418_keypad +tcm_fc +tcm_loop +tcm_qla2xxx +tcm_usb_gadget +tcm_vhost +tcp_bic +tcp_diag +tcp_highspeed +tcp_htcp +tcp_hybla +tcp_illinois +tcp_lp +tcp_probe +tcp_scalable +tcp_vegas +tcp_veno +tcp_westwood +tcp_yeah +tcrypt +tda10021 +tda10023 +tda10048 +tda1004x +tda10071 +tda10086 +tda18212 +tda18218 +tda18271 +tda18271c2dd +tda665x +tda7432 +tda8083 +tda8261 +tda826x +tda827x +tda8290 +tda9840 +tda9887 +tdfx +tdfxfb +tdo24m +tea +tea5761 +tea5767 +tea6415c +tea6420 +tef6862 +tehuti +tekram-sir +teles_cs +test-kstrtox +test_power +tg3 +tgr192 +thinkpad_acpi +thmc50 +ti-adc081c +ti_am335x_adc +ti_am335x_tsc +ti_am335x_tscadc +ti_dac7512 +tifm_7xx1 +tifm_core +tifm_ms +tifm_sd +timb_dma +timberdale +timblogiw +timbuart +timed_gpio +timeriomem-rng +tipc +ti_usb_3410_5052 +tlan +tlclk +tm6000 +tm6000-alsa +tm6000-dvb +tmdc +tmiofb +tmp102 +tmp401 +tmp421 +tmscsim +toim3232-sir +topstar-laptop +toshiba_acpi +toshiba_bluetooth +touchit213 +touchright +touchwin +tpci200 +tpm_atmel +tpm_i2c_infineon +tpm_infineon +tpm_nsc +tpm-rng +tpm_tis +tps51632-regulator +tps6105x +tps6105x-regulator +tps62360-regulator +tps65010 +tps65023-regulator +tps6507x +tps6507x-regulator +tps6507x-ts +tps65090-regulator +tps65217 +tps65217_bl +tps65217-regulator +tps6524x-regulator +tps6586x-regulator +tps65910-regulator +tps65912-regulator +tps80031-regulator +trancevibrator +tranzport +tridentfb +ts5500_flash +ts_bm +tsc2005 +tsc2007 +tsc40 +ts_fsm +ts_kmp +tsl2550 +tsl2563 +tsl2583 +tsl2x7x_core +ttm +ttpci-eeprom +ttusb_dec +ttusbdecfe +ttusbir +tua6100 +tua9001 +tulip +tuner +tuner-simple +tuner-types +tuner-xc2028 +tunnel4 +tunnel6 +turbografx +tusb6010 +tvaudio +tveeprom +tvp5150 +tw9910 +twidjoy +twl4030_charger +twl4030_keypad +twl4030-madc +twl4030-madc-hwmon +twl4030-pwrbutton +twl4030-vibra +twl4030_wdt +twl6040-vibra +twofish-avx-x86_64 +twofish_common +twofish_generic +twofish-x86_64 +twofish-x86_64-3way +typhoon +u132-hcd +uartlite +ubi +ubifs +ucb1400_core +ucb1400_ts +ucd9000 +ucd9200 +udc-core +udf +udl +udlfb +udp_diag +ueagle-atm +ufs +ufshcd +uhid +uio +uio_aec +uio_cif +uio_dmem_genirq +uio_netx +uio_pci_generic +uio_pdrv +uio_pdrv_genirq +uio_sercos3 +uli526x +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 +unioxx5 +unix_diag +upd64031a +upd64083 +uPD98402 +usb8xxx +usbatm +usb_debug +usbdux +usbduxfast +usbduxsigma +usb_gigaset +usbhid +usbip-core +usbip-host +usbkbd +usblcd +usbled +usblp +usbmon +usbmouse +usbnet +usbserial +usbsevseg +usb-storage +usbtest +usbtmc +usbtouchscreen +usbvision +usb_wwan +userspace-consumer +ushc +uss720 +uvcvideo +uvesafb +uwb +v4l2-common +v4l2-int-device +v4l2-mem2mem +vcan +vcnl4000 +ves1820 +ves1x93 +vesafb +veth +vfio +vfio_iommu_type1 +vfio-pci +vga16fb +vgastate +vgg2432a4 +vhci-hcd +vhost_net +via +via686a +via-camera +via-cputemp +viafb +via-ircc +via-rhine +via-rng +via-sdmmc +via-velocity +via_wdt +video +videobuf2-core +videobuf2-dma-contig +videobuf2-memops +videobuf2-vmalloc +videobuf-core +videobuf-dma-contig +videobuf-dma-sg +videobuf-dvb +videobuf-vmalloc +videocodec +videodev +viperboard +viperboard_adc +virtio_balloon +virtio_console +virtio_mmio +virtio-rng +virtio_scsi +virtual +visor +vivi +vivopay-serial +vlsi_ir +vmac +vme +vme_ca91cx42 +vme_pio2 +vme_tsi148 +vme_user +vme_vmivme7805 +vmk80xx +vmlfb +vmw_balloon +vmwgfx +vmw_pvscsi +vmxnet3 +vp27smpx +vpx3220 +vsxxxaa +vt1211 +vt6655_stage +vt6656_stage +vt8231 +vt8623fb +vub300 +vx855 +vxge +vxlan +w1_bq27000 +w1_ds2408 +w1_ds2423 +w1_ds2431 +w1_ds2433 +w1_ds2760 +w1_ds2780 +w1_ds2781 +w1_ds28e04 +w1-gpio +w1_smem +w1_therm +w35und +w5100 +w5300 +w6692 +w83627ehf +w83627hf +w83627hf_wdt +w83697hf_wdt +w83697ug_wdt +w83781d +w83791d +w83792d +w83793 +w83795 +w83877f_wdt +w83977af_ir +w83977f_wdt +w83l785ts +w83l786ng +w9966 +wacom +wacom_i2c +wacom_w8001 +wafer5823wdt +walkera0701 +wanrouter +wanxl +warrior +wbsd +wdt_pci +whci +whci-hcd +whc-rc +whiteheat +wil6210 +wimax +winbond-840 +winbond-cir +wire +wis-ov7640 +wis-saa7113 +wis-saa7115 +wis-sony-tuner +wis-tw2804 +wis-tw9903 +wis-uda1342 +wl1251 +wl1251_sdio +wl1251_spi +wl1273-core +wl12xx +wl18xx +wl3501_cs +wlags49_h25_cs +wlags49_h2_cs +wlcore +wlcore_sdio +wlcore_spi +wm831x_backup +wm831x_bl +wm831x-dcdc +wm831x-hwmon +wm831x-isink +wm831x-ldo +wm831x-on +wm831x_power +wm831x-ts +wm831x_wdt +wm8350-hwmon +wm8350_power +wm8350-regulator +wm8350_wdt +wm8400-regulator +wm8739 +wm8775 +wm8994-regulator +wm97xx-ts +wmi +wp512 +wusb-cbaf +wusbcore +wusb-wa +x25 +x25_asy +x38_edac +xc4000 +xc5000 +xcbc +xen-blkback +xen-evtchn +xen-fbfront +xenfs +xen-gntalloc +xen-gntdev +xen-kbdfront +xen-netback +xen-pciback +xen-pcifront +xen-privcmd +xen_wdt +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 +xirc2ps_cs +xircom_cb +xo15-ebook +xor +xpad +xprtrdma +x_tables +xt_addrtype +xt_AUDIT +xt_CHECKSUM +xt_CLASSIFY +xt_cluster +xt_comment +xt_connbytes +xt_connlimit +xt_connmark +xt_CONNSECMARK +xt_conntrack +xt_cpu +xt_CT +xt_dccp +xt_devgroup +xt_dscp +xt_DSCP +xt_ecn +xt_esp +xt_hashlimit +xt_helper +xt_hl +xt_HL +xt_HMARK +xt_IDLETIMER +xt_iprange +xt_ipvs +xtkbd +xt_LED +xt_length +xt_limit +xt_LOG +xt_mac +xt_mark +xt_multiport +xt_nat +xt_NETMAP +xt_nfacct +xt_NFLOG +xt_NFQUEUE +xt_osf +xt_owner +xt_physdev +xt_pkttype +xt_policy +xt_quota +xt_rateest +xt_RATEEST +xt_realm +xt_recent +xt_REDIRECT +xts +xt_sctp +xt_SECMARK +xt_set +xt_socket +xt_state +xt_statistic +xt_string +xt_tcpmss +xt_TCPMSS +xt_TCPOPTSTRIP +xt_tcpudp +xt_TEE +xt_time +xt_TPROXY +xt_TRACE +xt_u32 +xusbatm +xz_dec_test +yam +yealink +yellowfin +yenta_socket +yurex +zatm +zaurus +zd1201 +zd1211rw +zhenhua +zio +zl10036 +zl10039 +zl10353 +zl6100 +zlib +zlib_deflate +znet +zr36016 +zr36050 +zr36060 +zr36067 +zr364xx +zram +zte_ev --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/amd64/generic +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/amd64/generic @@ -0,0 +1,14381 @@ +EXPORT_SYMBOL arch/x86/kvm/kvm 0x5721cefe kvm_cpu_has_pending_timer +EXPORT_SYMBOL arch/x86/kvm/kvm 0x74ff2941 kvm_read_guest_atomic +EXPORT_SYMBOL crypto/gf128mul 0x0c2f123f gf128mul_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x1068004b gf128mul_bbe +EXPORT_SYMBOL crypto/gf128mul 0x2f2889a0 gf128mul_init_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0x3755f990 gf128mul_init_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x384ef9ce gf128mul_64k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x56af0dbd gf128mul_x_ble +EXPORT_SYMBOL crypto/gf128mul 0x83581089 gf128mul_init_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0x9b2560b9 gf128mul_init_4k_bbe +EXPORT_SYMBOL crypto/gf128mul 0x9e13f6f6 gf128mul_lle +EXPORT_SYMBOL crypto/gf128mul 0xbd17a0df gf128mul_4k_lle +EXPORT_SYMBOL crypto/gf128mul 0xc0890413 gf128mul_64k_lle +EXPORT_SYMBOL crypto/gf128mul 0xd60736ec gf128mul_free_64k +EXPORT_SYMBOL crypto/xor 0x5b6c00e6 xor_blocks +EXPORT_SYMBOL drivers/acpi/video 0x0ef6e5a3 acpi_video_get_edid +EXPORT_SYMBOL drivers/acpi/video 0x7a45377b acpi_video_unregister +EXPORT_SYMBOL drivers/acpi/video 0x8826c13b acpi_video_register +EXPORT_SYMBOL drivers/atm/suni 0x71b13eb3 suni_init +EXPORT_SYMBOL drivers/atm/uPD98402 0x906b77d1 uPD98402_init +EXPORT_SYMBOL drivers/bcma/bcma 0x5a514fdd bcma_core_dma_translation +EXPORT_SYMBOL drivers/block/drbd/drbd 0x35131b36 drbd_role_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0x7730f22d drbd_conn_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0xaf27bebf drbd_disk_str +EXPORT_SYMBOL drivers/block/drbd/drbd 0xd2943484 drbd_set_st_err_str +EXPORT_SYMBOL drivers/block/paride/paride 0x207ada64 pi_write_block +EXPORT_SYMBOL drivers/block/paride/paride 0x2c87043d pi_schedule_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0x2cdcdd31 paride_unregister +EXPORT_SYMBOL drivers/block/paride/paride 0x36809949 paride_register +EXPORT_SYMBOL drivers/block/paride/paride 0x5095860d pi_release +EXPORT_SYMBOL drivers/block/paride/paride 0x89cc0519 pi_init +EXPORT_SYMBOL drivers/block/paride/paride 0x9b001183 pi_read_regr +EXPORT_SYMBOL drivers/block/paride/paride 0x9e92f973 pi_do_claimed +EXPORT_SYMBOL drivers/block/paride/paride 0xab8f9691 pi_connect +EXPORT_SYMBOL drivers/block/paride/paride 0xba2fdf90 pi_disconnect +EXPORT_SYMBOL drivers/block/paride/paride 0xf180e5c3 pi_write_regr +EXPORT_SYMBOL drivers/block/paride/paride 0xf885bfd6 pi_read_block +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1348760d ipmi_request_settime +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x16dcec76 ipmi_set_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1a10c898 ipmi_set_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x1aba5db8 ipmi_unregister_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x3d03c335 ipmi_smi_add_proc_entry +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x40f2b10c ipmi_alloc_smi_msg +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x423b776a ipmi_create_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x44abddcd ipmi_get_smi_info +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x4c971bec ipmi_smi_msg_received +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x524f6f51 ipmi_get_my_address +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5e80f37c ipmi_unregister_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x5fcdcc05 ipmi_get_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x67cb9784 ipmi_poll_interface +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x78fd36e7 ipmi_request_supply_msgs +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x804f922a ipmi_addr_length +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x8c8ee770 ipmi_destroy_user +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0x96cbcc81 ipmi_get_version +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa28a2ace ipmi_set_gets_events +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa2a98b91 ipmi_get_maintenance_mode +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xa2cdeaa1 ipmi_smi_watcher_register +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xc6c1e89b ipmi_smi_watcher_unregister +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe0fa83f2 ipmi_register_for_cmd +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe4f4665b ipmi_validate_addr +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xe6ab72a6 ipmi_set_my_LUN +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xec52bb34 ipmi_register_smi +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xf2576cb9 ipmi_smi_watchdog_pretimeout +EXPORT_SYMBOL drivers/char/ipmi/ipmi_msghandler 0xfcb77cfd ipmi_free_recv_msg +EXPORT_SYMBOL drivers/char/nvram 0x0f28cb91 nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x17ff2c1d __nvram_read_byte +EXPORT_SYMBOL drivers/char/nvram 0x2adec1e0 __nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x7da28f12 nvram_check_checksum +EXPORT_SYMBOL drivers/char/nvram 0x9ce3f83f nvram_write_byte +EXPORT_SYMBOL drivers/char/nvram 0xa8813189 __nvram_write_byte +EXPORT_SYMBOL drivers/dma/dw_dmac 0x19254058 dw_dma_generic_filter +EXPORT_SYMBOL drivers/dma/dw_dmac 0x347f661a dw_dma_cyclic_free +EXPORT_SYMBOL drivers/dma/dw_dmac 0x3b55b40d dw_dma_get_src_addr +EXPORT_SYMBOL drivers/dma/dw_dmac 0x98ff9bbf dw_dma_cyclic_stop +EXPORT_SYMBOL drivers/dma/dw_dmac 0xa5a88c11 dw_dma_cyclic_prep +EXPORT_SYMBOL drivers/dma/dw_dmac 0xb420f261 dw_dma_cyclic_start +EXPORT_SYMBOL drivers/dma/dw_dmac 0xc3c2a395 dw_dma_get_dst_addr +EXPORT_SYMBOL drivers/edac/edac_core 0x39dd28d6 edac_mc_find +EXPORT_SYMBOL drivers/firewire/firewire-core 0x04d0f641 fw_core_remove_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x06b382a4 fw_core_handle_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x0f7d6af8 fw_csr_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x16e91e21 fw_csr_iterator_next +EXPORT_SYMBOL drivers/firewire/firewire-core 0x2885fec5 fw_get_request_speed +EXPORT_SYMBOL drivers/firewire/firewire-core 0x34d39b1e fw_fill_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0x3c56ef91 fw_workqueue +EXPORT_SYMBOL drivers/firewire/firewire-core 0x41829af7 fw_core_handle_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x4ce6e6ed fw_iso_buffer_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x5ad8a5e9 fw_iso_buffer_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0x617ae4c0 fw_send_request +EXPORT_SYMBOL drivers/firewire/firewire-core 0x645b715f fw_core_add_descriptor +EXPORT_SYMBOL drivers/firewire/firewire-core 0x65c9438b fw_csr_iterator_init +EXPORT_SYMBOL drivers/firewire/firewire-core 0x6e5d6718 fw_iso_resource_manage +EXPORT_SYMBOL drivers/firewire/firewire-core 0x79089097 fw_cancel_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0x809ebbbc fw_core_remove_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0x80b081e3 fw_core_remove_card +EXPORT_SYMBOL drivers/firewire/firewire-core 0x86468d44 fw_rcode_string +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8a8d263e fw_iso_context_flush_completions +EXPORT_SYMBOL drivers/firewire/firewire-core 0x8c7a3291 fw_card_initialize +EXPORT_SYMBOL drivers/firewire/firewire-core 0x90863005 fw_high_memory_region +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa1d9abe6 fw_bus_type +EXPORT_SYMBOL drivers/firewire/firewire-core 0xa4bae6bc fw_run_transaction +EXPORT_SYMBOL drivers/firewire/firewire-core 0xaa7178d8 fw_iso_context_destroy +EXPORT_SYMBOL drivers/firewire/firewire-core 0xae709a0e fw_iso_context_stop +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb3e46384 fw_send_response +EXPORT_SYMBOL drivers/firewire/firewire-core 0xb7b3ed30 fw_schedule_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xbe05020b fw_core_add_address_handler +EXPORT_SYMBOL drivers/firewire/firewire-core 0xd290ab1f fw_iso_context_queue_flush +EXPORT_SYMBOL drivers/firewire/firewire-core 0xd57476be fw_iso_context_create +EXPORT_SYMBOL drivers/firewire/firewire-core 0xe3ec429f fw_iso_context_queue +EXPORT_SYMBOL drivers/firewire/firewire-core 0xeb0daa0d fw_iso_context_start +EXPORT_SYMBOL drivers/firewire/firewire-core 0xec5ba2b3 fw_core_handle_bus_reset +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf0cd6fcb fw_card_add +EXPORT_SYMBOL drivers/firewire/firewire-core 0xf4b45af7 fw_device_enable_phys_dma +EXPORT_SYMBOL drivers/firmware/dcdbas 0xa75079d6 dcdbas_smi_request +EXPORT_SYMBOL drivers/gpu/drm/drm 0x015a53f9 drm_gem_vm_close +EXPORT_SYMBOL drivers/gpu/drm/drm 0x025c90f5 drm_mm_init_scan +EXPORT_SYMBOL drivers/gpu/drm/drm 0x02e6e099 drm_mode_width +EXPORT_SYMBOL drivers/gpu/drm/drm 0x03da5227 drm_mm_put_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0447b54a drm_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x065cf85d drm_crtc_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0699512d drm_ati_pcigart_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ae4b94c drm_ht_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0cfb7a3f drm_gem_private_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x0ffc4892 drm_mode_group_init_legacy_group +EXPORT_SYMBOL drivers/gpu/drm/drm 0x100bbcea drm_clflush_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x107e87fb drm_gem_object_handle_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x108ec154 drm_gem_object_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x11065515 drm_mode_equal +EXPORT_SYMBOL drivers/gpu/drm/drm 0x11348841 drm_gem_prime_handle_to_fd +EXPORT_SYMBOL drivers/gpu/drm/drm 0x12c6276a drm_buffer_read_object +EXPORT_SYMBOL drivers/gpu/drm/drm 0x142b8b35 drm_buffer_copy_from_user +EXPORT_SYMBOL drivers/gpu/drm/drm 0x14e1343d drm_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x176fb762 drm_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x194eadaa drm_edid_header_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x194fcf61 drm_mm_dump_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x19621a52 drm_match_cea_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1a770ac3 drm_detect_hdmi_monitor +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b2c6ddc drm_property_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x1b584c77 drm_mm_insert_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0x200fddd9 drm_mode_create_dvi_i_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20645642 drm_debug +EXPORT_SYMBOL drivers/gpu/drm/drm 0x20df2043 drm_mm_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x216a352c drm_gem_prime_import +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2201bb82 drm_plane_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x23e96ced drm_poll +EXPORT_SYMBOL drivers/gpu/drm/drm 0x24c7c935 drm_framebuffer_unreference +EXPORT_SYMBOL drivers/gpu/drm/drm 0x27054e03 drm_framebuffer_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x275268a7 drm_handle_vblank +EXPORT_SYMBOL drivers/gpu/drm/drm 0x29e2c36f drm_agp_info +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2c7ca04c drm_vblank_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x2e44269e drm_mm_insert_node_in_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3074f033 drm_order +EXPORT_SYMBOL drivers/gpu/drm/drm 0x310dbbe1 drm_mode_validate_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0x31dd3c68 drm_mm_init_scan_with_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0x344df3d0 drm_mm_scan_add_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3469cc0a drm_pci_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x34935c2b drm_mode_find_dmt +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3507f449 drm_vblank_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x36d6b6a7 drm_mm_insert_node_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x37eced1e drm_gem_object_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x38a4f7ae drm_format_num_planes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x39046012 drm_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3a53abff drm_agp_bind_pages +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3ac1fef9 drm_mode_legacy_fb_format +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3ad3a9c4 drm_calc_vbltimestamp_from_scanoutpos +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3b9d009a drm_format_plane_cpp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x3eb37b9d drm_ht_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x400ed194 drm_mode_attachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x401c6311 drm_mode_create_from_cmdline_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4038017d drm_pcie_get_speed_cap_mask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x40985f22 drm_idlelock_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0x40e8db6f drm_get_pci_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4171ba66 drm_prime_gem_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x43384bd9 drm_buffer_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x44a0c113 drm_mode_height +EXPORT_SYMBOL drivers/gpu/drm/drm 0x457d8454 drm_irq_install +EXPORT_SYMBOL drivers/gpu/drm/drm 0x469a4f90 drm_agp_bind +EXPORT_SYMBOL drivers/gpu/drm/drm 0x48816384 drm_plane_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x48da615c drm_addbufs_pci +EXPORT_SYMBOL drivers/gpu/drm/drm 0x498dcb5e drm_ut_debug_printk +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4c511235 drm_edid_is_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4d44cba7 drm_gem_handle_delete +EXPORT_SYMBOL drivers/gpu/drm/drm 0x4ea1f5a2 drm_gem_object_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5045752c drm_get_platform_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x51646289 drm_mm_scan_remove_block +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5167d7b0 drm_calc_timestamping_constants +EXPORT_SYMBOL drivers/gpu/drm/drm 0x51cd5a06 drm_mode_connector_detach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0x51ce3b08 drm_get_connector_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x523c0480 drm_ati_pcigart_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x54d7b415 drm_edid_to_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0x54d9adf0 drm_mm_search_free_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55b1a78a drm_pci_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x55f6fd54 drm_fill_in_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x585788be drm_crtc_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x58d37735 drm_gem_object_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5d7318dc drm_global_item_ref +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5e49202b drm_gem_free_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x5eafb8e9 drm_mode_set_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6077412e drm_pci_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x612e1643 drm_mode_prune_invalid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x619ff61d drm_agp_acquire +EXPORT_SYMBOL drivers/gpu/drm/drm 0x61ac10e8 drm_unbind_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6203cf37 drm_core_reclaim_buffers +EXPORT_SYMBOL drivers/gpu/drm/drm 0x629c05e1 drm_clflush_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0x63e39f88 drm_i2c_encoder_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x66f834f6 drm_gem_vm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x683e2160 drm_gem_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x690e03eb drm_connector_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6971c824 drm_encoder_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b14bccc drm_mode_cea_vic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b1dafe0 drm_sysfs_connector_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6b6d7375 drm_timestamp_precision +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6cee2e42 drm_object_property_get_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6ddc90a9 drm_property_create_bitmask +EXPORT_SYMBOL drivers/gpu/drm/drm 0x6e1cbbe5 drm_compat_ioctl +EXPORT_SYMBOL drivers/gpu/drm/drm 0x716632f7 drm_prime_lookup_buf_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7289c580 drm_send_vblank_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7568b291 drm_get_edid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7594fe3f drm_mode_config_reset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7645f9a0 drm_open +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7918b922 drm_addbufs_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7a4e7297 drm_edid_block_valid +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7afc821a drm_agp_alloc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7b42b5d4 drm_mode_copy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7da83b80 drm_connector_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7db94bd3 drm_sysfs_connector_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0x7e937111 drm_add_edid_modes +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8172ae32 drm_mm_pre_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x83b0ac71 drm_master_get +EXPORT_SYMBOL drivers/gpu/drm/drm 0x86427b08 drm_debugfs_create_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0x86506d96 drm_gem_prime_fd_to_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0x87bc3d14 drm_mode_config_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0x89eacc60 drm_read +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8a4b6a35 drm_mm_get_block_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8acbc7d6 drm_prime_destroy_file_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8b06bb89 drm_vblank_count +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c2118a3 drm_vblank_off +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c510862 drm_find_cea_extension +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c589d0b drm_mode_create_dithering_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8c77bf40 drm_unplug_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8d84ea11 drm_gem_prime_export +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8de13715 drm_format_vert_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8dfb019d drm_buffer_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8e62db34 drm_mode_detachmode_crtc +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8eff9111 drm_ht_find_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0x8f7df3a7 drm_object_attach_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x919e9dc7 drm_mm_search_free_in_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0x92342bab drm_mode_parse_command_line_for_connector +EXPORT_SYMBOL drivers/gpu/drm/drm 0x94c5a87b drm_mode_create_scaling_mode_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0x95700c70 drm_noop +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9688efae drm_mm_debug_table +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9745d638 drm_err +EXPORT_SYMBOL drivers/gpu/drm/drm 0x98e3fb9c drm_property_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0x99678d73 drm_get_last_vbltimestamp +EXPORT_SYMBOL drivers/gpu/drm/drm 0x999441ca drm_mode_config_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0x99faf195 drm_core_ioremapfree +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c155f71 drm_property_create_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9c3debb9 drm_addmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9cc12485 drm_core_ioremap +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9ce693ff drm_vblank_pre_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9eddaf42 drm_mode_destroy +EXPORT_SYMBOL drivers/gpu/drm/drm 0x9fca8cb0 drm_agp_free +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa1eabd87 drm_mode_list_concat +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa4087904 drm_agp_release +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa4ba16be drm_core_ioremap_wc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa598c1b5 drm_mode_connector_list_update +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa5ccb740 drm_platform_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa82957c0 drm_cvt_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa844e9fe drm_vblank_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xa846f650 drm_agp_unbind +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaaa2e8bc drm_vblank_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xac50d585 drm_mm_replace_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0xadf7d5b5 drm_rmmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaee7637c drm_get_encoder_name +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaefac5c6 drm_probe_ddc +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf0c89af drm_mm_get_block_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xaf386afd drm_gem_mmap +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb2a10cae drm_add_modes_noedid +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb3884610 drm_gem_handle_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb4396477 drm_irq_uninstall +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb5540008 drm_global_item_unref +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb5b8e458 drm_put_minor +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb6b532b5 drm_mode_create_tv_properties +EXPORT_SYMBOL drivers/gpu/drm/drm 0xb95beb55 drm_object_property_set_value +EXPORT_SYMBOL drivers/gpu/drm/drm 0xba2d0719 drm_mode_hsync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbb9467ba drm_get_minor +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe001c53 drm_property_add_enum +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbe89e479 drm_mm_clean +EXPORT_SYMBOL drivers/gpu/drm/drm 0xbf4f7733 drm_master_put +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc0dae80f drm_vblank_count_and_time +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc11a5a2a drm_framebuffer_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc25a61ec drm_mode_set_crtcinfo +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc414c422 drm_vblank_offdelay +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc5ea13f8 drm_property_create_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc65371ee drm_mode_crtc_set_gamma_size +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc87fe131 drm_mm_insert_node_in_range_generic +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc89ef398 drm_i2c_encoder_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xc9109d52 drm_global_mutex +EXPORT_SYMBOL drivers/gpu/drm/drm 0xca45efbc drm_format_horz_chroma_subsampling +EXPORT_SYMBOL drivers/gpu/drm/drm 0xca66c860 drm_framebuffer_cleanup +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcb1beab5 drm_mode_vrefresh +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd0fc417 drm_ht_just_insert_please +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd6cabd1 drm_gtf_mode_complex +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcd91a7cd drm_mode_probed_add +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcda91c46 drm_mode_debug_printmodeline +EXPORT_SYMBOL drivers/gpu/drm/drm 0xcecb8017 drm_pci_exit +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd1f2508b drm_prime_sg_to_page_addr_arrays +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd2335101 drm_fb_get_bpp_depth +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd431e503 drm_mode_create_dirty_info_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd584d4cb drm_debugfs_remove_files +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd6463f0c drm_free_agp +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd6c637f5 drm_mode_create +EXPORT_SYMBOL drivers/gpu/drm/drm 0xd8bbff2b drm_getsarea +EXPORT_SYMBOL drivers/gpu/drm/drm 0xda0aae11 drm_mode_validate_clocks +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdb86adbf drm_mm_takedown +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdbb5a9f5 drm_ht_remove_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdbf6f47e drm_prime_init_file_private +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdd82dbec drm_gtf_mode +EXPORT_SYMBOL drivers/gpu/drm/drm 0xdf00487d drm_gem_create_mmap_offset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe0a4b15f drm_sysfs_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe1d362fd drm_framebuffer_reference +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2703bcb drm_idlelock_take +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe2927cf3 drm_connector_unplug_all +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe3a9f87a drm_mode_connector_update_edid_property +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe4c617db drm_prime_remove_buf_handle +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6ac9287 drm_mode_object_find +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6ebe04f drm_mode_connector_attach_encoder +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe6f46e6e drm_clflush_virt_range +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe7197773 drm_ht_insert_item +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9a95b54 drm_fasync +EXPORT_SYMBOL drivers/gpu/drm/drm 0xe9ad7695 drm_platform_init +EXPORT_SYMBOL drivers/gpu/drm/drm 0xeb1726d5 drm_select_eld +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf0e51183 drm_av_sync_delay +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1421d13 drm_mode_sort +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf14c93ba drm_put_dev +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf1e7fbf6 drm_prime_pages_to_sg +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf4e151f0 drm_mode_duplicate +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf50d232a drm_mode_remove +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf5ae964b drm_vblank_post_modeset +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf92e3603 drm_rmmap_locked +EXPORT_SYMBOL drivers/gpu/drm/drm 0xf9705f6c drm_mm_remove_node +EXPORT_SYMBOL drivers/gpu/drm/drm 0xfee9b107 drm_agp_enable +EXPORT_SYMBOL drivers/gpu/drm/drm 0xffc6c87a drm_detect_monitor_audio +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x0fa3dcf0 drm_helper_hpd_irq_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x149c6c55 drm_kms_helper_poll_disable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x177ddbc7 drm_fb_helper_pan_display +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2d07bd6e drm_fb_helper_single_add_all_connectors +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x2d7a787f drm_dp_clock_recovery_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x3037c137 drm_helper_disable_unused_functions +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4cda4222 drm_kms_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4d378988 drm_kms_helper_poll_enable +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x4f583577 drm_fb_helper_fill_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x5cdcc759 drm_fb_helper_check_var +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x61ec71a4 drm_helper_move_panel_connectors_to_head +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x64d194bd drm_kms_helper_poll_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x711a004a drm_dp_link_rate_to_bw_code +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x73850602 drm_fb_helper_hotplug_event +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x82f61d56 drm_fb_helper_initial_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x95734457 drm_crtc_helper_set_config +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x97006ae8 i2c_dp_aux_add_bus +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9864601e drm_crtc_helper_set_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9d251144 drm_fb_helper_panic +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0x9f30c10c drm_helper_crtc_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa35351ef drm_kms_helper_poll_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa454289d drm_fb_helper_debug_leave +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa5950e7d drm_fb_helper_restore_fbdev_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xa8d6809d drm_dp_bw_code_to_link_rate +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xab31dbb8 drm_fb_helper_blank +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xafc58ca1 drm_helper_resume_force_mode +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xb37a0603 drm_dp_link_train_channel_eq_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbab950c9 drm_fb_helper_fini +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xbc662c3b drm_helper_probe_single_connector_modes +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc469c244 drm_fb_helper_restore +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc4d88067 drm_helper_encoder_in_use +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xc7fd39bb drm_dp_channel_eq_ok +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xce2e0f92 drm_fb_helper_fill_fix +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd02c73c7 drm_dp_link_train_clock_recovery_delay +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd0371922 drm_fb_helper_set_par +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd490e017 drm_fb_helper_single_fb_probe +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd5d8b6b8 drm_dp_get_adjust_request_pre_emphasis +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd62e1f78 drm_fb_helper_debug_enter +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xd90172c2 drm_fb_helper_init +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf1adda93 drm_helper_mode_fill_fb_struct +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xf334021a drm_fb_helper_setcmap +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfe10cbd4 drm_helper_connector_dpms +EXPORT_SYMBOL drivers/gpu/drm/drm_kms_helper 0xfee43a69 drm_dp_get_adjust_request_voltage +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0x82f32e0a drm_usb_exit +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0x8540eb0f drm_usb_init +EXPORT_SYMBOL drivers/gpu/drm/drm_usb 0xdc711f54 drm_get_usb_dev +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0249328e ttm_bo_unlock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0795fe25 ttm_bo_synccpu_write_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x08488482 ttm_read_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x08a29178 ttm_mem_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x09a8e5ff ttm_bo_manager_func +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0a205ebc ttm_bo_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0d1180f3 ttm_base_object_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0ebbe826 ttm_write_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0f0c880f ttm_bo_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0f796b67 ttm_bo_move_accel_cleanup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x0f8dde17 ttm_bo_wait +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x11b2f92e ttm_pool_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x1251267c ttm_dma_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x17e48a1d ttm_base_object_lookup +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x18ebe205 ttm_vt_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2010429e ttm_suspend_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2ae04a5b ttm_agp_tt_populate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x2b54aa9a ttm_object_file_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3795b0a3 ttm_bo_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x38b00090 ttm_bo_dma_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3c1346d6 ttm_tt_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x3cf72c48 ttm_bo_lock_delayed_workqueue +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4932b364 ttm_bo_init_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4a4e4e50 ttm_mem_global_free +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4d1eea63 ttm_base_object_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x4e8dd264 ttm_bo_global_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x564e1aee ttm_bo_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5cfe9e4f ttm_agp_tt_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x5d40874a ttm_agp_tt_create +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6052860c ttm_round_pot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x61bdb34f ttm_eu_fence_buffer_objects +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x65e6c04d ttm_bo_unreserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x675351b1 ttm_bo_mem_space +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x6b42725d ttm_bo_mem_put +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x74b0c1b1 ttm_pool_unpopulate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7586fb3a ttm_eu_reserve_buffers +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x78c61b50 ttm_vt_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x7ac219b5 ttm_bo_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x80d86f0e ttm_object_device_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x81e7545f ttm_object_device_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x821bdae8 ttm_bo_reserve +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x84c7fd43 ttm_bo_wait_unreserved +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x85b53a36 ttm_bo_clean_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x86a4066d ttm_eu_backoff_reservation +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9385b73e ttm_mem_global_alloc +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x998e45c0 ttm_ref_object_base_unref +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0x9a8bd8ac ttm_read_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xa6457e0f ttm_bo_move_ttm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xacc2feab ttm_write_unlock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xad343b5f ttm_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xb7902d7f ttm_ref_object_add +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbb694632 ttm_dma_tt_fini +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbc406753 ttm_bo_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xbd1185ae ttm_bo_unmap_virtual +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc3b7ce42 ttm_bo_validate +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc4d4618d ttm_io_prot +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xc850d617 ttm_mem_global_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xca60ba80 ttm_lock_init +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xcfb1b327 ttm_tt_bind +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd2cfa8d2 ttm_bo_acc_size +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd36436c4 ttm_suspend_lock +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd5755e32 ttm_page_alloc_debugfs +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xd7f47c9c ttm_tt_set_placement_caching +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xded47e69 ttm_bo_kmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe48b04b9 ttm_fbdev_mmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xe5224cde ttm_bo_swapout_all +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xebfddec1 ttm_bo_kunmap +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xec259626 ttm_bo_evict_mm +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xefed5c55 ttm_bo_move_memcpy +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xf4f28a88 ttm_bo_synccpu_write_grab +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfbc2c5ec ttm_object_file_release +EXPORT_SYMBOL drivers/gpu/drm/ttm/ttm 0xfe9b70e9 ttm_bo_unref +EXPORT_SYMBOL drivers/hv/hv_vmbus 0x32dfae10 vmbus_recvpacket +EXPORT_SYMBOL drivers/hv/hv_vmbus 0xde2036ad vmbus_sendpacket +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0x0903c239 vid_from_reg +EXPORT_SYMBOL drivers/hwmon/hwmon-vid 0xef1c781c vid_which_vrm +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x0e2a6864 sch56xx_read_virtual_reg +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x0f5877d4 sch56xx_read_virtual_reg16 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x34257f35 sch56xx_watchdog_unregister +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0x963b1e93 sch56xx_watchdog_register +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xe5022f95 sch56xx_read_virtual_reg12 +EXPORT_SYMBOL drivers/hwmon/sch56xx-common 0xed1d2a08 sch56xx_write_virtual_reg +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0x9d9f14db i2c_bit_algo +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xdb7eabbc i2c_bit_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-bit 0xf2bbb430 i2c_bit_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x2167380e i2c_pca_add_bus +EXPORT_SYMBOL drivers/i2c/algos/i2c-algo-pca 0x73690c5b i2c_pca_add_numbered_bus +EXPORT_SYMBOL drivers/i2c/busses/i2c-amd756 0x3b62aa10 amd756_smbus +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x2be16a2f hid_sensor_read_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x45a21270 hid_sensor_parse_common_attributes +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x5b201645 hid_sensor_read_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0x61e2ac2c hid_sensor_write_samp_freq_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-iio-common 0xd8ce4cb0 hid_sensor_write_raw_hyst_value +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0xea1aa5dc hid_sensor_setup_trigger +EXPORT_SYMBOL drivers/iio/common/hid-sensors/hid-sensor-trigger 0xf1db1d39 hid_sensor_remove_trigger +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0x862f96a2 adis_enable_irq +EXPORT_SYMBOL drivers/iio/imu/adis_lib 0xec21bc69 adis_debugfs_reg_access +EXPORT_SYMBOL drivers/iio/industrialio 0x0d136a2c iio_triggered_buffer_postenable +EXPORT_SYMBOL drivers/iio/industrialio 0x13649720 iio_bus_type +EXPORT_SYMBOL drivers/iio/industrialio 0x14aa3ca7 iio_push_event +EXPORT_SYMBOL drivers/iio/industrialio 0x16b78ef0 iio_buffer_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0x20eaf501 iio_trigger_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x250cd4d2 iio_trigger_free +EXPORT_SYMBOL drivers/iio/industrialio 0x2d6bcdcb iio_trigger_generic_data_rdy_poll +EXPORT_SYMBOL drivers/iio/industrialio 0x39e57a2d iio_device_free +EXPORT_SYMBOL drivers/iio/industrialio 0x3c7fb563 iio_buffer_init +EXPORT_SYMBOL drivers/iio/industrialio 0x3fd1ff76 iio_buffer_read_length +EXPORT_SYMBOL drivers/iio/industrialio 0x4536fd14 iio_buffer_show_enable +EXPORT_SYMBOL drivers/iio/industrialio 0x716bf0be iio_device_alloc +EXPORT_SYMBOL drivers/iio/industrialio 0x76235396 iio_trigger_register +EXPORT_SYMBOL drivers/iio/industrialio 0x896fc9a5 iio_buffer_register +EXPORT_SYMBOL drivers/iio/industrialio 0x9e4854a8 iio_trigger_poll_chained +EXPORT_SYMBOL drivers/iio/industrialio 0xaf631ea2 iio_buffer_write_length +EXPORT_SYMBOL drivers/iio/industrialio 0xb6cacb98 iio_buffer_store_enable +EXPORT_SYMBOL drivers/iio/industrialio 0xbf15432b iio_triggered_buffer_predisable +EXPORT_SYMBOL drivers/iio/industrialio 0xcaf18169 iio_device_register +EXPORT_SYMBOL drivers/iio/industrialio 0xcdb4415b iio_sw_buffer_preenable +EXPORT_SYMBOL drivers/iio/industrialio 0xcdf8a9f7 iio_trigger_poll +EXPORT_SYMBOL drivers/iio/industrialio 0xdf76bbeb iio_pollfunc_store_time +EXPORT_SYMBOL drivers/iio/industrialio 0xe20bf70f iio_read_const_attr +EXPORT_SYMBOL drivers/iio/industrialio 0xf5600fbc iio_trigger_unregister +EXPORT_SYMBOL drivers/iio/industrialio 0xf803fa3c iio_trigger_notify_done +EXPORT_SYMBOL drivers/iio/industrialio 0xff45c18d iio_device_unregister +EXPORT_SYMBOL drivers/iio/industrialio-triggered-buffer 0x027fb552 iio_triggered_buffer_cleanup +EXPORT_SYMBOL drivers/iio/industrialio-triggered-buffer 0x32674289 iio_triggered_buffer_setup +EXPORT_SYMBOL drivers/iio/kfifo_buf 0x5b7e97df iio_kfifo_allocate +EXPORT_SYMBOL drivers/iio/kfifo_buf 0xdd02802f iio_kfifo_free +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x2107de5f rdma_addr_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x37838b44 rdma_translate_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x6f6ee97c rdma_addr_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x8ef35bcc rdma_resolve_ip +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0x9d1f522d rdma_addr_cancel +EXPORT_SYMBOL drivers/infiniband/core/ib_addr 0xa56b112a rdma_copy_addr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x02d654cc ib_send_cm_drep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x08808858 ib_send_cm_rej +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x40b15911 ib_send_cm_lap +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x5e6646b2 ib_send_cm_sidr_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x60b47086 ib_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x72598eea ib_send_cm_rtu +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x73b52904 cm_class +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x768c5e9a ib_send_cm_rep +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x887c55d5 ib_send_cm_dreq +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0x916c0099 ib_send_cm_mra +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xa932bb10 ib_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb485ab92 ib_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xb7b6a5e4 ib_cm_notify +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xc4bcebcf ib_send_cm_apr +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xd75f0cf9 ib_send_cm_sidr_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xdfe8dbef ib_send_cm_req +EXPORT_SYMBOL drivers/infiniband/core/ib_cm 0xece08c8d ib_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0377a069 ib_alloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x05d664f5 ib_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0639b255 ib_init_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x06c82fcf mult_to_ib_rate +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x078e0b1c ib_unregister_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x0c1b9ac1 ib_ud_header_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x136ca5da ib_destroy_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x14f84918 ib_rate_to_mbps +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x16139bf0 ib_create_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x171f99f1 ib_rate_to_mult +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1b12b758 ib_fmr_pool_unmap +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1da92c96 ib_unregister_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x1e491a04 ib_unmap_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x22f3cf93 ib_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x27f826a4 ib_dealloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2e950453 ib_create_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x2ed6e386 ib_ud_header_pack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x30819954 ib_umem_get +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x34a9fa3a ib_dereg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x34fea25a ib_query_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x363842cc ib_dealloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x386cabcb ib_get_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3c977424 ib_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3ccb23ef ib_alloc_pd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x3efccc32 ibnl_put_msg +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x48f0687e ib_query_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4b5e43df ib_free_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4b9a96cb ib_register_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4de80cae ib_find_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4e42e7bf ib_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4e591dc0 ib_dealloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x4f94b571 ib_query_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x50dbc447 ib_flush_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5944bf5f ib_find_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5c00abf6 ib_create_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x5e7bc9d1 ib_query_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x6e6b3f40 ib_detach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x71fdc42d rdma_port_get_link_layer +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x72010d7e ib_reg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x735a853f ib_alloc_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7549842c ib_dealloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x76b1bae9 ib_find_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7813a27f ib_find_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x798360ee ib_modify_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7b901c80 ib_get_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7d9767f8 ib_rereg_phys_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x7eae5af7 ib_alloc_fast_reg_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x81b71fc6 ib_umem_page_count +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8bfdb1aa ib_query_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8c6f3605 ib_alloc_xrcd +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x8dbc736f ibnl_put_attr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96a09121 ib_umem_release +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x96ce6c46 rdma_node_get_transport +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x984286da ib_fmr_pool_map_phys +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9b2ffe05 ib_dealloc_mw +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9b56d8f8 ib_resize_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9c59efdc ib_register_event_handler +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0x9fcfdb02 ib_modify_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa0014b42 ib_modify_device +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa432baf6 ib_unpack +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xa5af2f31 ib_destroy_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb40fe947 ib_modify_qp_is_ok +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xb8e3410e ib_set_client_data +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc32b59ff ib_destroy_fmr_pool +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc55625f4 ib_attach_mcast +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc67f14a5 ibnl_remove_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xc865c59a ib_create_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcaee81f6 ib_modify_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xcd0a9987 ib_create_cq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd65fad72 ib_query_ah +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xd91a660c ib_destroy_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xda52ef07 ib_modify_srq +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xda603fb3 ib_create_ah_from_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xdc568948 ib_alloc_fmr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xddbbcb7f ib_close_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xde56d564 ib_alloc_fast_reg_page_list +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe2ea976c ib_get_cached_lmc +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe61e0e3f ibnl_add_client +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xe98a375f ib_open_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xeb5a7293 ib_dispatch_event +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xeefd4131 ib_query_port +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf4c997a1 ib_get_dma_mr +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf5d21494 ib_modify_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xf9429084 ib_get_cached_gid +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfc150956 ib_ud_header_init +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfce689d8 ib_query_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_core 0xfdf98543 ib_find_exact_cached_pkey +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x21542d3a ib_modify_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x39b65b6e ib_free_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x4190fabf ib_get_rmpp_segment +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x56502817 ib_redirect_mad_qp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x6f077fcf ib_get_mad_data_offset +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x7b5d4b7a ib_is_mad_class_rmpp +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x82b7d347 ib_unregister_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0x946d5d27 ib_response_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xba3a3a88 ib_register_mad_agent +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xc3e13c2a ib_free_recv_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xd803df0a ib_create_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xebe15d62 ib_process_mad_wc +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xecdaf981 ib_post_send_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xf931593b ib_cancel_mad +EXPORT_SYMBOL drivers/infiniband/core/ib_mad 0xfe8f14f8 ib_register_mad_snoop +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x2fd0e42f ib_sa_unregister_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x4e4477c2 ib_init_ah_from_mcmember +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x576fdbac ib_sa_free_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x6d3481fb ib_init_ah_from_path +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x6d4f42d1 ib_sa_guid_info_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x7f985aa8 ib_sa_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0x85240cb9 ib_sa_path_rec_get +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xc1955a3f ib_sa_register_client +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xca304251 ib_sa_get_mcmember_rec +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xda0d50ec ib_sa_cancel_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xee457639 ib_sa_service_rec_query +EXPORT_SYMBOL drivers/infiniband/core/ib_sa 0xf6b6444b ib_sa_unpack_path +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x02f847bc ib_copy_path_rec_from_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x07cf5a51 ib_copy_ah_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x18382f6a ib_copy_path_rec_to_user +EXPORT_SYMBOL drivers/infiniband/core/ib_uverbs 0x184f3575 ib_copy_qp_attr_to_user +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x2aaa0526 iw_cm_connect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x2fc9f5c1 iw_cm_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x30e9f47f iw_cm_listen +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x4899afa6 iw_create_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x60d38c26 iw_cm_reject +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0x8a36cfe7 iw_destroy_cm_id +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xb1e24dc7 iw_cm_disconnect +EXPORT_SYMBOL drivers/infiniband/core/iw_cm 0xbadce330 iw_cm_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x06892a5d rdma_create_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x10f1ebc2 rdma_leave_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x1202b9c7 rdma_disconnect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x13ce8ab2 rdma_join_multicast +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3cc62277 rdma_init_qp_attr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x3ef585d5 rdma_connect +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4ab0ecb0 rdma_resolve_route +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x4aef9f77 rdma_destroy_qp +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x5a6be560 rdma_set_service_type +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x76b3d136 rdma_bind_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x88433867 rdma_reject +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x8dcdb859 rdma_destroy_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0x9df1a670 rdma_listen +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xa8671e55 rdma_create_id +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xb54fbbb5 rdma_set_ib_paths +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xc7a848c8 rdma_set_reuseaddr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xce026dc9 rdma_resolve_addr +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xe77b2a75 rdma_accept +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfaee5e2a rdma_set_afonly +EXPORT_SYMBOL drivers/infiniband/core/rdma_cm 0xfcc21e85 rdma_notify +EXPORT_SYMBOL drivers/input/gameport/gameport 0x2b1adfb3 gameport_open +EXPORT_SYMBOL drivers/input/gameport/gameport 0x37d9d1c1 gameport_unregister_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0x67d834b6 gameport_set_phys +EXPORT_SYMBOL drivers/input/gameport/gameport 0x6ef39b0f gameport_stop_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8420423c gameport_start_polling +EXPORT_SYMBOL drivers/input/gameport/gameport 0x8e472baa __gameport_register_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x9378df82 gameport_unregister_port +EXPORT_SYMBOL drivers/input/gameport/gameport 0x9f151149 __gameport_register_driver +EXPORT_SYMBOL drivers/input/gameport/gameport 0xccedb697 gameport_close +EXPORT_SYMBOL drivers/input/input-polldev 0x4243163e input_free_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xaac37cf3 input_unregister_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xcd635824 input_register_polled_device +EXPORT_SYMBOL drivers/input/input-polldev 0xfa0fb52f input_allocate_polled_device +EXPORT_SYMBOL drivers/input/matrix-keymap 0xc44f3673 matrix_keypad_build_keymap +EXPORT_SYMBOL drivers/input/misc/ad714x 0x531e1a1d ad714x_remove +EXPORT_SYMBOL drivers/input/misc/ad714x 0x864325fc ad714x_probe +EXPORT_SYMBOL drivers/input/misc/ad714x 0x8ec72c0b ad714x_enable +EXPORT_SYMBOL drivers/input/misc/ad714x 0xdde0206b ad714x_disable +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x5bcf07a8 cma3000_init +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x892d76b2 cma3000_resume +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0x89d9444e cma3000_exit +EXPORT_SYMBOL drivers/input/misc/cma3000_d0x 0xca3f100a cma3000_suspend +EXPORT_SYMBOL drivers/input/sparse-keymap 0x48d603e7 sparse_keymap_report_event +EXPORT_SYMBOL drivers/input/sparse-keymap 0x62b44899 sparse_keymap_free +EXPORT_SYMBOL drivers/input/sparse-keymap 0xac9a7fd9 sparse_keymap_report_entry +EXPORT_SYMBOL drivers/input/sparse-keymap 0xad1794c7 sparse_keymap_entry_from_scancode +EXPORT_SYMBOL drivers/input/sparse-keymap 0xcc2fd26f sparse_keymap_setup +EXPORT_SYMBOL drivers/input/sparse-keymap 0xfc3c3f61 sparse_keymap_entry_from_keycode +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x91438c78 ad7879_probe +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0x97f83edf ad7879_remove +EXPORT_SYMBOL drivers/input/touchscreen/ad7879 0xd0036a6b ad7879_pm_ops +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x478853cc amd_iommu_unbind_pasid +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x65c18b63 amd_iommu_bind_pasid +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x7ce4bcf0 amd_iommu_free_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0x8984325d amd_iommu_init_device +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0xe0203a55 amd_iommu_set_invalid_ppr_cb +EXPORT_SYMBOL drivers/iommu/amd_iommu_v2 0xe1fa2dea amd_iommu_set_invalidate_ctx_cb +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x04403fcf unregister_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x14f2aa5a capi20_get_version +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x22ddf76e capi_ctr_suspend_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2b8eab1f capilib_free_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x2baa6586 capilib_new_ncci +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x31c24aa4 capi20_isinstalled +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x3bf76fff capi_ctr_ready +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x47d3fc51 capi_info2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x4c608770 capi20_put_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x50b33ca4 capi_cmsg2message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x6057c6f3 capi_message2cmsg +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x62e32d43 capilib_data_b3_conf +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x71e8d5ba capilib_data_b3_req +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7292ab34 cdebbuf_free +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x72a25a72 capi_cmsg2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7578c274 capi20_register +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7a33596c capi20_get_serial +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x7e6f1307 capi20_get_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x8f699913 capilib_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0x9f823278 register_capi_driver +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xa8f3a973 attach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xaa165d27 capilib_release_appl +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb17851f4 capi_ctr_handle_message +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb19fda8d capi_cmd2str +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xb60e5e5f capi_cmsg_header +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd31415ea capi_ctr_down +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xd735599b capi_ctr_resume_output +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xdd13e14f detach_capi_ctr +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xe19a11ac capi20_get_profile +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xed061606 capi20_manufacturer +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xf27f5817 capi20_release +EXPORT_SYMBOL drivers/isdn/capi/kernelcapi 0xfd552f7a capi_message2str +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x1326f93c b1_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x145106f0 b1_load_t4file +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x193ab85a avmcard_dma_alloc +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x4e7b4e0d b1_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x5ee51e8e b1_parse_version +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x6444851a b1_free_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x74ab53a3 b1_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x7826b76f avmcard_dma_free +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x78680902 b1_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x85f09690 b1_irq_table +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0x91b80519 b1_getrevision +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xa049a135 b1ctl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xa56c0034 b1_loaded +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xba015544 b1_load_config +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xd8103a4f b1_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xdfd28376 b1_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xfa10fee4 b1_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1 0xfc9cc039 b1_alloc_card +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x0597d2eb b1dma_release_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x06773beb b1dma_send_message +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x221b9161 t1pci_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x3e9f0a9a b1dma_reset_ctr +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x7c823bc7 b1dmactl_proc_fops +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0x7ea13075 b1pciv4_detect +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xaf22b989 b1dma_register_appl +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xbf96f07d b1dma_load_firmware +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xcd96804e b1dma_reset +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1dma 0xd6f9f1ea b1dma_interrupt +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0x29562993 b1pcmcia_delcard +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xaec3240e b1pcmcia_addcard_m1 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xea620116 b1pcmcia_addcard_m2 +EXPORT_SYMBOL drivers/isdn/hardware/avm/b1pcmcia 0xf14bf8b1 b1pcmcia_addcard_b1 +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x26ff2b89 proc_net_eicon +EXPORT_SYMBOL drivers/isdn/hardware/eicon/divadidd 0x2974ead1 DIVA_DIDD_Read +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x2246032f mISDNisac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0x3befde73 mISDNipac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xc8639a49 mISDNipac_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNipac 0xea65e754 mISDNisac_init +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0x6387d777 mISDNisar_irq +EXPORT_SYMBOL drivers/isdn/hardware/mISDN/mISDNisar 0xee818094 mISDNisar_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x07f4f2ce hisax_unregister +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x148f0c99 FsmFree +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x7f29ce36 FsmInitTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x93a64734 FsmChangeState +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0x9df0cd27 FsmEvent +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xcfb757eb hisax_init_pcmcia +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xe227344e FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xee93522c hisax_register +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xf0a16657 FsmNew +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xfc27303b HiSax_closecard +EXPORT_SYMBOL drivers/isdn/hisax/hisax 0xff2db2cf FsmDelTimer +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x3f3b323a isac_d_l2l1 +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x522d74ff isac_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0x842451e0 isac_init +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xd354bd08 isacsx_setup +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xf5f8cb65 isac_irq +EXPORT_SYMBOL drivers/isdn/hisax/hisax_isac 0xfd6aab1e isacsx_irq +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x1d4d2c62 register_isdn +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0x28ba3e57 isdn_ppp_register_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfa06820f isdn_register_divert +EXPORT_SYMBOL drivers/isdn/i4l/isdn 0xfcff9c8f isdn_ppp_unregister_compressor +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x3b71e4fc isdnhdlc_decode +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x59cc8a7e isdnhdlc_out_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0x8ee38862 isdnhdlc_rcv_init +EXPORT_SYMBOL drivers/isdn/i4l/isdnhdlc 0xfd9d4c09 isdnhdlc_encode +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x06152a28 queue_ch_frame +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x121b6685 mISDN_initbchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x18c7e668 recv_Echannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x2348cc3c mISDN_FsmFree +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x24b43503 mISDN_initdchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x276fd541 create_l1 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x468d9b31 bchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x4757b37e recv_Dchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x50c2230c mISDN_FsmChangeState +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x54451388 mISDN_FsmRestartTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x54f9777b get_next_dframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x588886a6 l1_event +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x59157104 mISDN_clear_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x597c82f4 mISDN_freebchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x601f5696 get_next_bframe +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x614ede30 mISDN_FsmAddTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x6efef417 recv_Bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x79110217 mISDN_register_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8a4e99fb mISDN_clock_update +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x8bc2aa9f mISDN_register_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0x96309324 mISDN_FsmDelTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xa453c8c2 mISDN_unregister_device +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xbba10a43 mISDN_ctrl_bchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xc3401729 mISDN_register_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd285995f mISDN_clock_get +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd4757a78 recv_Dchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xd5145151 mISDN_FsmEvent +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xdae28aa4 recv_Bchannel_skb +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe3707d65 mISDNDevName4ch +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe4b4ae0c bchannel_get_rxbuf +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe87943cf mISDN_FsmInitTimer +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xe8f617eb mISDN_unregister_clock +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xea33b7c6 mISDN_freedchannel +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xeebe5ff3 dchannel_senddata +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xefabbfbe mISDN_unregister_Bprotocol +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_core 0xf9e7832f mISDN_FsmNew +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x01087af0 mISDN_dsp_element_unregister +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0x60721da7 dsp_audio_law_to_s32 +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xa215f1b2 dsp_audio_s16_to_law +EXPORT_SYMBOL drivers/isdn/mISDN/mISDN_dsp 0xb98308d8 mISDN_dsp_element_register +EXPORT_SYMBOL drivers/md/dm-log 0x425b7e80 dm_dirty_log_type_unregister +EXPORT_SYMBOL drivers/md/dm-log 0xb8a7afde dm_dirty_log_create +EXPORT_SYMBOL drivers/md/dm-log 0xe7feec63 dm_dirty_log_destroy +EXPORT_SYMBOL drivers/md/dm-log 0xebc3fdf0 dm_dirty_log_type_register +EXPORT_SYMBOL drivers/md/dm-snapshot 0x7f11520b dm_exception_store_destroy +EXPORT_SYMBOL drivers/md/dm-snapshot 0x84070dbe dm_snap_origin +EXPORT_SYMBOL drivers/md/dm-snapshot 0xd0695fd1 dm_snap_cow +EXPORT_SYMBOL drivers/md/dm-snapshot 0xd8a94ff5 dm_exception_store_create +EXPORT_SYMBOL drivers/md/dm-snapshot 0xf1ffe11d dm_exception_store_type_unregister +EXPORT_SYMBOL drivers/md/dm-snapshot 0xfab5ba66 dm_exception_store_type_register +EXPORT_SYMBOL drivers/md/raid456 0xbcfee75e raid5_set_cache_size +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x060212f9 flexcop_pass_dmx_packets +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x0c562180 flexcop_pass_dmx_data +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x1bcc7fd0 flexcop_device_kmalloc +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x1f873a2a flexcop_pid_feed_control +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x3c035b41 flexcop_device_initialize +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x519765aa flexcop_i2c_request +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x571538cc flexcop_wan_set_speed +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x60761cd8 flexcop_sram_set_dest +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x64fb280f flexcop_sram_ctrl +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x6f82e9e8 flexcop_device_kfree +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x829f62ad flexcop_dump_reg +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0x82e38e5e flexcop_eeprom_check_mac_addr +EXPORT_SYMBOL drivers/media/common/b2c2/b2c2-flexcop 0xc75a7c26 flexcop_device_exit +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x05ae480d dvb_generic_open +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x0c651bb2 dvb_ringbuffer_read +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x0ea1d1c8 dvb_frontend_detach +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x10f75fb9 dvb_dmx_swfilter_packets +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x17523ce7 dvb_frontend_sleep_until +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x18e2e5b6 dvb_generic_ioctl +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x1a07e506 dvb_register_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x1efc1a10 dvb_frontend_reinitialise +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x2aa45b81 dvb_dmx_swfilter_raw +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x3229ad8e dvb_dmx_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x346509fe dvb_ca_en50221_camchange_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x398aab01 dvb_ringbuffer_flush_spinlock_wakeup +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x3b52b065 dvb_register_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x4108a2a9 dvb_net_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x479c812c dvb_register_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x52ebf44b dvb_ca_en50221_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x573e2e72 dvb_unregister_adapter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x5ecbb3f5 dvb_frontend_resume +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x64d6d7a9 dvb_ringbuffer_avail +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x6b67e301 dvb_dmx_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x74a5a698 dvb_filter_pes2ts_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x80e3832d dvb_filter_get_ac3info +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x887caf4f dvb_ringbuffer_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x8d0df2a1 dvb_ringbuffer_free +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x9c95786a dvb_ca_en50221_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0x9cd7fc83 dvb_dmx_swfilter_204 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xa2a65e70 dvb_ringbuffer_read_user +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xac4ca1b0 intlog2 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xb06f7081 dvb_generic_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xbc95ab01 dvb_unregister_device +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xca4965f1 dvb_ringbuffer_empty +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xcc2e7da7 dvb_net_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xd68a099e timeval_usec_diff +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xd6ebc716 dvb_dmxdev_init +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xda99f8cb dvb_unregister_frontend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe15697bd dvb_ringbuffer_write +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe2253dcc dvb_dmxdev_release +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xe5ae8707 intlog10 +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xeb5f10bb dvb_ca_en50221_camready_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xee17abc1 dvb_dmx_swfilter +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xefcef46b dvb_ringbuffer_flush +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf1286613 dvb_frontend_suspend +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf7116a52 dvb_ca_en50221_frda_irq +EXPORT_SYMBOL drivers/media/dvb-core/dvb-core 0xf826deb0 dvb_filter_pes2ts +EXPORT_SYMBOL drivers/media/dvb-frontends/a8293 0x38b4ba49 a8293_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/af9013 0x9c9b9655 af9013_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/af9033 0xb65792d1 af9033_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/atbm8830 0xcd5d9424 atbm8830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x083c7f54 au8522_analog_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x09fd4cea au8522_init +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x24a27e74 au8522_i2c_gate_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x28abe6c9 au8522_release_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0x6868a86b au8522_get_state +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xb63e3cc7 au8522_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xbb2a5931 au8522_readreg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xf1a01c05 au8522_writereg +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_common 0xf5813bc5 au8522_led_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/au8522_dig 0xb1b8e0eb au8522_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/bcm3510 0x28d0cbde bcm3510_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22700 0xf735b426 cx22700_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx22702 0x3f78d088 cx22702_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24110 0xb89ad9b8 cx24110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x1dd253af cx24113_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24113 0x3643ebea cx24113_agc_callback +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24116 0x8d1b4232 cx24116_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0x4a4f74a4 cx24123_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/cx24123 0xef7696f1 cx24123_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/cxd2820r 0x435a7199 cxd2820r_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x3a9833e6 dib0070_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x431764cd dib0070_get_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x5b298413 dib0070_set_rf_output +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0x93c0f89d dib0070_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0070 0xfe413417 dib0070_ctrl_agc_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x01f321f2 dib0090_fw_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x076ee4d5 dib0090_get_wbd_offset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x37f8b922 dib0090_gain_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x5f8760cf dib0090_pwm_gain_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x85c40303 dib0090_set_dc_servo +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x87027ef9 dib0090_dcc_freq +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x88a6138c dib0090_get_current_gain +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0x8d4e3fe5 dib0090_get_wbd_target +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xa2cac625 dib0090_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xb8e22e96 dib0090_register +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xc9232ea9 dib0090_set_vga +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xcb8031f4 dib0090_update_rframp_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xe62de1b0 dib0090_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xe9ca36f7 dib0090_set_switch +EXPORT_SYMBOL drivers/media/dvb-frontends/dib0090 0xff3c0753 dib0090_update_tuning_table_7090 +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mb 0x507102fa dib3000mb_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x3e675dcf dib3000mc_pid_control +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x504f3e1b dib3000mc_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x60e5439b dib3000mc_get_tuner_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0x8f00f9e1 dib3000mc_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0xc4b09871 dib3000mc_pid_parse +EXPORT_SYMBOL drivers/media/dvb-frontends/dib3000mc 0xc928758b dib3000mc_set_config +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x666b5210 dib7000m_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x8ff1ad74 dib7000m_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0x95a15e9d dib7000m_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000m 0xd88291bd dib7000m_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x037a5336 dib7090_get_adc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x0b77c115 dib7000p_update_pll +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x1d824481 dib7000p_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x1f73f612 dib7000p_ctrl_timf +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x28376dfa dib7000p_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x30dd2b5b dib7000pc_detection +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x33cded86 dib7000p_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x3bc794d6 dib7000p_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x4774fc32 dib7000p_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x4b81e614 dib7000p_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x4c0774f5 dib7000p_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x587cde8e dib7090_tuner_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0x994ebcfa dib7090_get_i2c_tuner +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xbe8fd23f dib7000p_get_agc_values +EXPORT_SYMBOL drivers/media/dvb-frontends/dib7000p 0xe0b55cb2 dib7090_slave_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x01122328 dib8096p_get_i2c_tuner +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x272efae3 dib8000_pwm_agc_reset +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x377642f1 dib8000_get_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x4c14ad45 dib8000_get_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x4da04111 dib8000_set_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x4fe36602 dib8000_pid_filter +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x50b90dd5 dib8090p_get_dc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x52d21f85 dib8000_remove_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x5907540c dib8000_get_tune_state +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x62ad6072 dib8000_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x66cbf5ee dib8000_i2c_enumeration +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x84c4cfd6 dib8000_ctrl_timf +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x84f21b1b dib8000_update_pll +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x8710a3de dib8000_set_wbd_ref +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x933f667e dib8096p_tuner_sleep +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0x9480bf39 dib8000_get_adc_power +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xc4233cca dib8000_set_slave_frontend +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xfcfa4cbe dib8000_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/dvb-frontends/dib8000 0xff37464a dib8000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x1304119f dibx000_get_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x316980a9 dibx000_init_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x35a7eac6 dibx000_i2c_set_speed +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0x4f38860e dibx000_reset_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xa5da0331 dibx000_exit_i2c_master +EXPORT_SYMBOL drivers/media/dvb-frontends/dibx000_common 0xad3ad91c systime +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0x1f6a95d4 drxd_config_i2c +EXPORT_SYMBOL drivers/media/dvb-frontends/drxd 0xdde2811a drxd_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/drxk 0xbcd9713b drxk_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ds3000 0x4e052afb ds3000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/dvb-pll 0x9c2c7dce dvb_pll_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ec100 0x5e5ecb0a ec100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6405 0x01f433e8 isl6405_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6421 0xf749472a isl6421_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/isl6423 0xe932ea61 isl6423_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/it913x-fe 0x85672384 it913x_fe_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/itd1000 0xe326b85b itd1000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ix2505v 0x89709ee3 ix2505v_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/l64781 0x00d2176b l64781_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lg2160 0xa7cbbd57 lg2160_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt3305 0x78f85d9b lgdt3305_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgdt330x 0xf69bd083 lgdt330x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lgs8gxx 0x3baefe64 lgs8gxx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0xbee550a3 lnbp21_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp21 0xf44a6e4e lnbh24_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/lnbp22 0x9394dc0a lnbp22_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/m88rs2000 0xe7a4915f m88rs2000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a16 0x3f8b64c5 mb86a16_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mb86a20s 0xa9b99af3 mb86a20s_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt312 0x3803b3b2 mt312_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/mt352 0x8d7c7d06 mt352_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt200x 0xc8a0b74c nxt200x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/nxt6000 0xd84c1c65 nxt6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51132 0x54e732d9 or51132_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/or51211 0x170c3bfb or51211_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2830 0x029df76e rtl2830_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2830 0xcad4df78 rtl2830_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/rtl2832 0x0306cd15 rtl2832_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1409 0x051cfd20 s5h1409_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1411 0x745d5124 s5h1411_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0x285cc978 s5h1420_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/s5h1420 0xc53eef00 s5h1420_get_tuner_i2c_adapter +EXPORT_SYMBOL drivers/media/dvb-frontends/s921 0xd6563aeb s921_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/si21xx 0x1d8dd130 si21xx_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp8870 0x9c444ce0 sp8870_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/sp887x 0x0473f602 sp887x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb0899 0x3f0fbf0e stb0899_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6000 0x489a3abe stb6000_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stb6100 0x73a6cad4 stb6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0288 0xff97e946 stv0288_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0297 0xaa8f838b stv0297_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0299 0x9ea120e5 stv0299_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0x2eee5fa8 stv0367cab_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0367 0xb424c787 stv0367ter_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv0900 0x0595795a stv0900_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0x998a9a11 stv090x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv090x 0xbbb17d6b stv090x_set_gpio +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110 0x5fd8e2a8 stv6110_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/stv6110x 0x13e098c5 stv6110x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10021 0xf0b1a302 tda10021_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10023 0x8a4c5eb8 tda10023_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10048 0x9203ab17 tda10048_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x07ee6f76 tda10046_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda1004x 0x3145358c tda10045_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10071 0xfd933b82 tda10071_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda10086 0x0d4d5356 tda10086_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda665x 0x718ac3cd tda665x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8083 0x78cd0962 tda8083_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda8261 0x52d2aa27 tda8261_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tda826x 0xf5a7f425 tda826x_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/tua6100 0x00562b7b tua6100_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1820 0x3b46be8e ves1820_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/ves1x93 0x28e38124 ves1x93_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10036 0x53889881 zl10036_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10039 0x5f758a8e zl10039_attach +EXPORT_SYMBOL drivers/media/dvb-frontends/zl10353 0x71a93569 zl10353_attach +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0x1fca2fcb btcx_riscmem_alloc +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0x495e4b0c btcx_calc_skips +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xad2fe38b btcx_sort_clips +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xc368f8e6 btcx_align +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xcda0ded2 btcx_screen_clips +EXPORT_SYMBOL drivers/media/i2c/btcx-risc 0xf0a20ffb btcx_riscmem_free +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x1ca0c084 cx2341x_log_status +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x2f25eee2 cx2341x_update +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x3db8be82 cx2341x_ctrl_query +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0x5b88faf6 cx2341x_ext_ctrls +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xa55bb8f6 cx2341x_handler_setup +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xc184ec1e cx2341x_ctrl_get_menu +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcf76ce95 cx2341x_fill_defaults +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xcf8b77a4 cx2341x_mpeg_ctrls +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xdeb039d4 cx2341x_handler_set_busy +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xebe4b775 cx2341x_handler_set_50hz +EXPORT_SYMBOL drivers/media/i2c/cx2341x 0xf5dbd045 cx2341x_handler_init +EXPORT_SYMBOL drivers/media/i2c/tveeprom 0x75343e79 tveeprom_read +EXPORT_SYMBOL drivers/media/i2c/tveeprom 0xded6b874 tveeprom_hauppauge_analog +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x01a3ceff flexcop_dma_control_timer_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x3e50317a flexcop_dma_config +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x52a2ca60 flexcop_dma_control_size_irq +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x5470f10e flexcop_dma_allocate +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x6ed231cd flexcop_dma_xfer_control +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0x955bb9f6 flexcop_dma_config_timer +EXPORT_SYMBOL drivers/media/pci/b2c2/b2c2-flexcop-pci 0xdbd6d101 flexcop_dma_free +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x1ec1d02d bt878_stop +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x32dfb4cc bt878 +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0x34c52379 bt878_device_control +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0xd5d0bdef bt878_num +EXPORT_SYMBOL drivers/media/pci/bt8xx/bt878 0xd8f08693 bt878_start +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x11dc4b6d bttv_gpio_enable +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x5f9be7a9 bttv_sub_register +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x8ecf4acc bttv_write_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0x9b1d8e35 bttv_get_pcidev +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0xbcf2d2fb bttv_read_gpio +EXPORT_SYMBOL drivers/media/pci/bt8xx/bttv 0xf19988a6 bttv_sub_unregister +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x0305a290 dst_wait_dst_ready +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x12191704 write_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x2b23f876 rdc_reset_state +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x6268f4af dst_pio_disable +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0x9c24b060 dst_error_recovery +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xc94d8c53 dst_attach +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xcaaf5df9 dst_error_bailout +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xcda1d418 read_dst +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xe1809663 dst_comm_init +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst 0xe94b8c9c dst_check_sum +EXPORT_SYMBOL drivers/media/pci/bt8xx/dst_ca 0xffb9713c dst_ca_attach +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x2cdea06d cx18_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x5628bbeb cx18_release_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x7542e403 cx18_claim_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0x76495c3f cx18_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0xb1f50d59 cx18_ext_init +EXPORT_SYMBOL drivers/media/pci/cx18/cx18 0xe2d9e7b2 cx18_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x68e60a23 altera_hw_filt_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x6ff7510d altera_ci_tuner_reset +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x9247b72f altera_hw_filt_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0x9417e17a altera_ci_init +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0xb1850f17 altera_pid_feed_control +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0xdb3faf38 altera_ci_release +EXPORT_SYMBOL drivers/media/pci/cx23885/altera-ci 0xe66b9812 altera_ci_irq +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x066589ac cx25821_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x136822c0 cx25821_risc_databuffer_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x24aaea8f cx25821_dev_get +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x471e1cfb cx25821_devlist +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x53e16429 cx25821_set_gpiopin_direction +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x62cc11d2 cx25821_devlist_mutex +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x67cc5b8b cx25821_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x70ff8eee cx25821_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x784853c3 cx25821_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x84896bbd cx25821_dev_unregister +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0x92a48ab4 cx25821_sram_channel_setup_audio +EXPORT_SYMBOL drivers/media/pci/cx25821/cx25821 0xee832d92 cx25821_sram_channel_dump_audio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0x7bc6a936 vp3054_i2c_probe +EXPORT_SYMBOL drivers/media/pci/cx88/cx88-vp3054-i2c 0xa3800a1c vp3054_i2c_remove +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x1a71a48a cx88_enum_input +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x419feb89 cx88_set_freq +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0x43b43e8f cx88_querycap +EXPORT_SYMBOL drivers/media/pci/cx88/cx8800 0xb0c6891f cx88_video_mux +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x0de68bd8 cx8802_buf_queue +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x1c4b19f2 cx8802_cancel_buffers +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x5b0e3638 cx8802_buf_prepare +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0x6773e837 cx8802_register_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0xac636bea cx8802_unregister_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx8802 0xf2c89874 cx8802_get_driver +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x0563fc9a cx88_sram_channel_dump +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x1f5f4f86 cx88_risc_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x4216fc84 cx88_sram_channels +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x50f15002 cx88_vdev_init +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x59b16a60 cx88_get_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6141c8c5 cx88_tuner_callback +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x6ba28016 cx88_sram_channel_setup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x724de188 cx88_shutdown +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x74ac397b cx88_set_stereo +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x7642ed3c cx88_print_irqbits +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x7722ee91 cx88_core_irq +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x779da3df cx88_ir_start +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x8339f890 cx88_risc_stopper +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x8953f1f2 cx88_set_scale +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x904b8696 cx88_audio_thread +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0x9e63efa1 cx88_risc_databuffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xa3664e24 cx88_wakeup +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xb4423594 cx88_ir_stop +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xb8a60653 cx88_reset +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xbaa88c26 cx88_set_tvaudio +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xbb7d58c2 cx88_core_put +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xcc55c93c cx88_newstation +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xe70706a4 cx88_free_buffer +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xe9378bf1 cx88_set_tvnorm +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xf6e2db17 cx88_core_get +EXPORT_SYMBOL drivers/media/pci/cx88/cx88xx 0xfc55673a cx88_dsp_detect_stereo_sap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x07ece450 ivtv_vapi +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x14f67530 ivtv_debug +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x19b4973e ivtv_udma_alloc +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x2714d968 ivtv_set_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x3e40ae61 ivtv_ext_init +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x4493daf0 ivtv_udma_unmap +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x46741d5d ivtv_init_on_first_open +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x4997b2a0 ivtv_claim_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x672461ad ivtv_release_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x70e70e2f ivtv_firmware_check +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x7d8e160c ivtv_clear_irq_mask +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x9ab791d2 ivtv_api +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0x9c4685ee ivtv_vapi_result +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xa84be14f ivtv_udma_prepare +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xb2f78654 ivtv_udma_setup +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xc25d9f00 ivtv_reset_ir_gpio +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xe2f60b68 ivtv_start_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/ivtv/ivtv 0xec5fa0ea ivtv_stop_v4l2_encode_stream +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x04e83446 saa7134_tuner_callback +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x1211df5d saa7134_devlist +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x14dfecc6 saa7134_boards +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x1eaf1d5a saa7134_pgtable_alloc +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x1fec3f32 saa7134_set_gpio +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x203997e5 saa7134_tvaudio_setmute +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x4ae47724 saa_dsp_writel +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x74fd40c7 saa7134_set_dmabits +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0x7b4a78cd saa7134_dmasound_init +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xa8c884bf saa7134_pgtable_free +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xa9f7675e saa7134_devlist_lock +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xd8f80b86 saa7134_ts_register +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xddfd5755 saa7134_dmasound_exit +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xf076c019 saa7134_ts_unregister +EXPORT_SYMBOL drivers/media/pci/saa7134/saa7134 0xf933862d saa7134_pgtable_build +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0xc3e4c127 ttpci_eeprom_decode_mac +EXPORT_SYMBOL drivers/media/pci/ttpci/ttpci-eeprom 0xfd08354d ttpci_eeprom_parse_mac +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x1b67818d videocodec_attach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x676bfcfd videocodec_register +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0x9358769d videocodec_detach +EXPORT_SYMBOL drivers/media/pci/zoran/videocodec 0xb973e1b5 videocodec_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x36a9c5c7 soc_camera_host_register +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x51275f09 soc_camera_xlate_by_fourcc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x55ce1ad4 soc_camera_lock +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x5783ae53 soc_camera_host_unregister +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x649571e4 soc_camera_apply_board_flags +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x74d54e3b soc_camera_unlock +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0x8c968bcd soc_camera_power_off +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_camera 0xc9c59deb soc_camera_power_on +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x2fc57265 soc_mbus_find_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x31477397 soc_mbus_get_fmtdesc +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x61871f65 soc_mbus_bytes_per_line +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0x7371455d soc_mbus_samples_per_pixel +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0xc8b28da5 soc_mbus_config_compatible +EXPORT_SYMBOL drivers/media/platform/soc_camera/soc_mediabus 0xde30e6b9 soc_mbus_image_size +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x04dca738 lirc_unregister_driver +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x15d78c19 lirc_dev_fop_write +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x28ffb4a6 lirc_dev_fop_poll +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x2c1b7507 lirc_dev_fop_ioctl +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x47058a1b lirc_register_driver +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x5056a524 lirc_get_pdata +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0x699a2e00 lirc_dev_fop_open +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xb4e5460f lirc_dev_fop_read +EXPORT_SYMBOL drivers/media/rc/lirc_dev 0xb84ba085 lirc_dev_fop_close +EXPORT_SYMBOL drivers/media/rc/rc-core 0x4d3ae55b ir_raw_handler_register +EXPORT_SYMBOL drivers/media/rc/rc-core 0xbc5e1d6c ir_raw_handler_unregister +EXPORT_SYMBOL drivers/media/tuners/e4000 0x81a4b937 e4000_attach +EXPORT_SYMBOL drivers/media/tuners/fc0011 0x636b951b fc0011_attach +EXPORT_SYMBOL drivers/media/tuners/fc0012 0x333dcbfa fc0012_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x7f9ff73c fc0013_attach +EXPORT_SYMBOL drivers/media/tuners/fc0013 0x8b00f2ee fc0013_rc_cal_reset +EXPORT_SYMBOL drivers/media/tuners/fc0013 0xf9c0a773 fc0013_rc_cal_add +EXPORT_SYMBOL drivers/media/tuners/fc2580 0x05d3558e fc2580_attach +EXPORT_SYMBOL drivers/media/tuners/max2165 0x5737de80 max2165_attach +EXPORT_SYMBOL drivers/media/tuners/mc44s803 0x9f10b774 mc44s803_attach +EXPORT_SYMBOL drivers/media/tuners/mt2060 0x56294402 mt2060_attach +EXPORT_SYMBOL drivers/media/tuners/mt2131 0x700d7b44 mt2131_attach +EXPORT_SYMBOL drivers/media/tuners/mt2266 0x67c0928d mt2266_attach +EXPORT_SYMBOL drivers/media/tuners/mxl5005s 0x26fa12a1 mxl5005s_attach +EXPORT_SYMBOL drivers/media/tuners/qt1010 0x9b65b70d qt1010_attach +EXPORT_SYMBOL drivers/media/tuners/tda18212 0xef63d0be tda18212_attach +EXPORT_SYMBOL drivers/media/tuners/tda18218 0xde70c548 tda18218_attach +EXPORT_SYMBOL drivers/media/tuners/tua9001 0x676eaa50 tua9001_attach +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0x0cb4b189 tuners +EXPORT_SYMBOL drivers/media/tuners/tuner-types 0xc2821775 tuner_count +EXPORT_SYMBOL drivers/media/tuners/tuner-xc2028 0x349341ac xc2028_attach +EXPORT_SYMBOL drivers/media/tuners/xc4000 0x76bf52f5 xc4000_attach +EXPORT_SYMBOL drivers/media/tuners/xc5000 0x26196f45 xc5000_attach +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0x0f21c28f cx231xx_register_extension +EXPORT_SYMBOL drivers/media/usb/cx231xx/cx231xx 0xe471a43e cx231xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_cypress_firmware 0xd62d496a usbv2_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_cypress_firmware 0xdf61e728 dvb_usbv2_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x134aa078 dvb_usbv2_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x15a16328 dvb_usbv2_reset_resume +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x2ceb62ec dvb_usbv2_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x43bb4167 dvb_usbv2_probe +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0x5d70e682 dvb_usbv2_disconnect +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xaa8a86b7 dvb_usbv2_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb-v2/dvb_usb_v2 0xd8852537 dvb_usbv2_suspend +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x1c79913f dvb_usb_get_hexline +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x3ae52c3b dvb_usb_generic_write +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x3d5c4a03 usb_cypress_load_firmware +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0x5b24f4d6 dvb_usb_nec_rc_key_to_event +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xb489b303 dvb_usb_device_init +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xc235d848 dvb_usb_generic_rw +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb 0xcb9423dc dvb_usb_device_exit +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0x13e247e0 rc_map_af9005_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0xa499a2e6 af9005_rc_decode +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-af9005-remote 0xd4e288db rc_map_af9005_table_size +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x094e8223 dibusb2_0_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x1c3200f5 dibusb_dib3000mc_tuner_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x2ee5a0e7 dibusb_pid_filter_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x72d5eae8 dibusb_pid_filter +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0x7ccca563 dibusb_rc_query +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xa3e72194 dibusb_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xb1d8418d dibusb_power_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xb47559e0 rc_map_dibusb_table +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xbee1d328 dibusb_dib3000mc_frontend_attach +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xdcc31044 dibusb_i2c_algo +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xdd8aa179 dibusb2_0_streaming_ctrl +EXPORT_SYMBOL drivers/media/usb/dvb-usb/dvb-usb-dibusb-common 0xfc253a03 dibusb_read_eeprom_byte +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0x7f866090 em28xx_unregister_extension +EXPORT_SYMBOL drivers/media/usb/em28xx/em28xx 0xd7eae7f3 em28xx_register_extension +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x01a06bbe gspca_suspend +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x113d866f gspca_frame_add +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0x61b049f4 gspca_coarse_grained_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xc2ea6cdd gspca_expo_autogain +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xcce50d63 gspca_resume +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xdd1af4b2 gspca_disconnect +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xdf0f01bc gspca_dev_probe2 +EXPORT_SYMBOL drivers/media/usb/gspca/gspca_main 0xf3c1319c gspca_dev_probe +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0x7cc805b2 tm6000_unregister_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0xaaef2228 tm6000_register_extension +EXPORT_SYMBOL drivers/media/usb/tm6000/tm6000 0xdbdc0030 tm6000_init_digital_mode +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x429ec14a ttusbdecfe_dvbs_attach +EXPORT_SYMBOL drivers/media/usb/ttusb-dec/ttusbdecfe 0x6959c080 ttusbdecfe_dvbt_attach +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x42c8e001 v4l2_ctrl_next +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4adaf0f3 v4l2_ctrl_query_menu_valid_items +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4eb907bd v4l2_chip_match_i2c_client +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x4ed5e0d7 v4l2_chip_match_host +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x5333503b v4l2_chip_ident_i2c_client +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x53c9394f v4l2_ctrl_query_menu +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0x5f96a661 v4l2_ctrl_check +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-common 0xabe27502 v4l2_ctrl_query_fill +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x1f6f0b9d v4l2_m2m_mmap +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0x459e133f v4l2_m2m_get_curr_priv +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0xb7703436 v4l2_m2m_job_finish +EXPORT_SYMBOL drivers/media/v4l2-core/v4l2-mem2mem 0xca157f30 v4l2_m2m_get_vq +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x270e2a3e videobuf_dvb_alloc_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x3f4aa851 videobuf_dvb_register_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x5612636f videobuf_dvb_get_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0x609cba36 videobuf_dvb_dealloc_frontends +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0xb64334c4 videobuf_dvb_find_frontend +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf-dvb 0xf3a2b290 videobuf_dvb_unregister_bus +EXPORT_SYMBOL drivers/media/v4l2-core/videobuf2-core 0xbc0079a1 vb2_querybuf +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x015cd14c v4l2_subdev_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x02510462 v4l2_ctrl_add_handler +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x0614dd5a v4l2_video_std_frame_period +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x07137e38 v4l2_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x0acef19a v4l2_subdev_try_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x123959a1 v4l2_type_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x16244fe5 v4l2_prio_check +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x1c8f4dd4 v4l2_subdev_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2342f1ae v4l2_prio_open +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2558c7b6 v4l2_ctrl_auto_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2e99c966 v4l2_ctrl_sub_ev_ops +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2ee89cda v4l2_ctrl_handler_setup +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2f5863b8 video_devdata +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x2fff1b07 v4l2_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x39e36228 v4l2_g_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3ac82647 v4l2_ctrl_radio_filter +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3adbd595 v4l2_field_names +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x3bdd0f94 v4l2_prio_change +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x40bba33a v4l2_ctrl_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x495426ee v4l2_ctrl_get_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x4a78e37d v4l2_subdev_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x5587a029 v4l2_ctrl_new_std_menu_items +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x5734ca6e video_ioctl2 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x61e88a52 v4l2_ctrl_subscribe_event +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x621928fe v4l2_ctrl_find +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x67568109 v4l2_ctrl_new_std +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x6899a54d v4l2_ctrl_grab +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x71ffbbb3 v4l2_ctrl_handler_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x72036b99 v4l2_ctrl_log_status +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x73198b38 __video_register_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x760f9319 v4l2_ctrl_handler_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x7a3cd015 v4l2_ctrl_get_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x8106095a v4l2_prio_max +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x813fefd6 v4l2_queryctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x83fd83b7 v4l2_ctrl_new_std_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x85aa3b6f v4l2_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x8dceb474 v4l2_ctrl_add_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x949fa825 v4l2_ctrl_g_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0x953ecbd8 v4l2_ctrl_new_custom +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xa04901a9 v4l2_subdev_s_ext_ctrls +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xa38805ee v4l2_subdev_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xab3d966b video_device_alloc +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb48cebbd v4l2_ctrl_handler_free +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb77b0159 v4l2_prio_init +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xb9836e7f v4l2_ctrl_s_ctrl_int64 +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbac4a225 v4l2_ctrl_fill +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xbc5671dc v4l_printk_ioctl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xc12cf8f8 v4l2_ctrl_replace +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xcc6dff24 video_usercopy +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xcda04a5b v4l2_prio_close +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xcfd824c5 v4l2_subdev_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xd04093dd v4l2_querymenu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xd1d295f1 video_unregister_device +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe089c237 v4l2_ctrl_poll +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe2b92059 v4l2_video_std_construct +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe6fce6f2 v4l2_ctrl_merge +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xe8640437 v4l2_g_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xed95dca1 v4l2_ctrl_s_ctrl +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xeef3201e v4l2_ctrl_new_int_menu +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xef681355 video_device_release_empty +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf3251e7b v4l2_norm_to_name +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf50c7e6b v4l2_ctrl_activate +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xf570e540 v4l2_ctrl_cluster +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfb08bea0 video_device_release +EXPORT_SYMBOL drivers/media/v4l2-core/videodev 0xfb80dba2 v4l2_subdev_queryctrl +EXPORT_SYMBOL drivers/memstick/core/memstick 0x0564e3d1 memstick_set_rw_addr +EXPORT_SYMBOL drivers/memstick/core/memstick 0x103bc6d3 memstick_add_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x33aa33b2 memstick_resume_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x361ca16b memstick_register_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x39e7d16a memstick_free_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5ab1a2f3 memstick_remove_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x5d820a02 memstick_init_req_sg +EXPORT_SYMBOL drivers/memstick/core/memstick 0x65753a18 memstick_unregister_driver +EXPORT_SYMBOL drivers/memstick/core/memstick 0x8b9bef41 memstick_suspend_host +EXPORT_SYMBOL drivers/memstick/core/memstick 0x90c41aea memstick_new_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xbb5b5aa0 memstick_detect_change +EXPORT_SYMBOL drivers/memstick/core/memstick 0xd3743cfe memstick_next_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xdc07e67e memstick_init_req +EXPORT_SYMBOL drivers/memstick/core/memstick 0xea967bd8 memstick_alloc_host +EXPORT_SYMBOL drivers/memstick/host/r592 0x52f1b23b memstick_debug_get_tpc_name +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x043a6933 mpt_set_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x0a8fb499 mpt_raid_phys_disk_pg0 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x14c8e4bd mpt_get_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x25160d4b mpt_event_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x25903a79 mpt_free_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x290b52c5 mpt_findImVolumes +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x381a5365 mpt_suspend +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4069227a mpt_clear_taskmgmt_in_progress_flag +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4495038c mpt_config +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4526289b mpt_event_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x4a108e17 mpt_detach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x502108d0 mpt_fwfault_debug +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x58879a72 mpt_print_ioc_summary +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x632c75d2 mpt_attach +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x64ed3f24 mpt_free_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x690fa081 mptbase_sas_persist_operation +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x7684591f mpt_device_driver_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x78160c4c mpt_verify_adapter +EXPORT_SYMBOL drivers/message/fusion/mptbase 0x877d2712 mpt_HardResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xad84a3b7 mpt_put_msg_frame +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb04a5599 mpt_resume +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xb82bff5f mpt_raid_phys_disk_get_num_paths +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc0e69f82 mpt_device_driver_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc1322ac6 mpt_raid_phys_disk_pg1 +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xc47c22e8 mpt_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xcab92a6d mpt_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xcd361366 mpt_reset_register +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd500ddc7 mpt_alloc_fw_memory +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xd9a92a75 mpt_reset_deregister +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdc75d6aa mpt_send_handshake_request +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xdd805159 ioc_list +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf526f74a mpt_GetIocState +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf64ae0ec mpt_halt_firmware +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xf9244a29 mpt_Soft_Hard_ResetHandler +EXPORT_SYMBOL drivers/message/fusion/mptbase 0xfffca48e mpt_put_msg_frame_hi_pri +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x04fe27f8 mptscsih_proc_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x065a170c mptscsih_get_scsi_lookup +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0c2989a6 mptscsih_IssueTaskMgmt +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x0e05e01f mptscsih_io_done +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x1f2dab51 mptscsih_dev_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x22042162 mptscsih_bus_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x296f366c mptscsih_host_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x2d27d332 mptscsih_raid_id_to_num +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x30010a5e mptscsih_bios_param +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9078cd6d mptscsih_abort +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x93fe389d mptscsih_remove +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x94e2f311 mptscsih_slave_destroy +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x95be5162 mptscsih_resume +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x982e061c mptscsih_ioc_reset +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0x9f451f13 mptscsih_info +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa779b388 mptscsih_taskmgmt_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xa9efc772 mptscsih_is_phys_disk +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xadbdbfa4 mptscsih_flush_running_cmds +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xb93af511 mptscsih_slave_configure +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xc6f96bac mptscsih_event_process +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xcc728b33 mptscsih_shutdown +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xda052cb1 mptscsih_taskmgmt_response_code +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xe0a9f280 mptscsih_suspend +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf1d42fd7 mptscsih_change_queue_depth +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf2394967 mptscsih_scandv_complete +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf71635e1 mptscsih_qcmd +EXPORT_SYMBOL drivers/message/fusion/mptscsih 0xf8052e5f mptscsih_host_attrs +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x0ef8850a i2o_exec_lct_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x138773f1 i2o_driver_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x139b275c i2o_driver_notify_controller_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x19c77077 i2o_msg_get_wait +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2013d435 i2o_cntxt_list_remove +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x29a6b006 i2o_device_claim +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x2a843bef i2o_dump_message +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x3a36e814 i2o_iop_find_device +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x4cf72263 i2o_parm_table_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x4efeeb11 i2o_cntxt_list_get_ptr +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x56540533 i2o_msg_post_wait_mem +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x77677325 i2o_cntxt_list_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x79b6dd26 i2o_driver_notify_controller_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x8475e4fa i2o_device_claim_release +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9a0fa4e6 i2o_driver_notify_device_add_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0x9a4229c5 i2o_driver_unregister +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb1a0467a i2o_parm_field_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4a26495 i2o_event_register +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xb4c00dcf i2o_controllers +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xbfb42918 i2o_cntxt_list_add +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc09f9336 i2o_find_iop +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xc423a08d i2o_driver_notify_device_remove_all +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xca73662c i2o_status_get +EXPORT_SYMBOL drivers/message/i2o/i2o_core 0xfbd48271 i2o_parm_issue +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xe264ab02 pasic3_write_register +EXPORT_SYMBOL drivers/mfd/htc-pasic3 0xf72bb4c9 pasic3_read_register +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x16a35ea3 mc13xxx_irq_ack +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x655cca9c mc13xxx_reg_rmw +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x76cfb60c mc13xxx_get_flags +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x7e787f72 mc13xxx_irq_status +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x842e6dff mc13xxx_irq_mask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x8eb783b9 mc13xxx_irq_free +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x9859f737 mc13xxx_irq_request_nounmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0x989f599c mc13xxx_irq_unmask +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xada5412b mc13xxx_lock +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xb452a379 mc13xxx_reg_read +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xba2556e5 mc13xxx_irq_request +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xc2478d22 mc13xxx_reg_write +EXPORT_SYMBOL drivers/mfd/mc13xxx-core 0xd6449a99 mc13xxx_unlock +EXPORT_SYMBOL drivers/mfd/tps6105x 0x04169f65 tps6105x_get +EXPORT_SYMBOL drivers/mfd/tps6105x 0xb55bfeca tps6105x_mask_and_set +EXPORT_SYMBOL drivers/mfd/tps6105x 0xf395da5d tps6105x_set +EXPORT_SYMBOL drivers/mfd/tps65010 0x02d4ad0f tps65013_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0x0c6ad2cf tps65010_config_vdcdc2 +EXPORT_SYMBOL drivers/mfd/tps65010 0x28485130 tps65010_config_vregs1 +EXPORT_SYMBOL drivers/mfd/tps65010 0x33739de7 tps65010_set_vib +EXPORT_SYMBOL drivers/mfd/tps65010 0x9fd44c69 tps65010_set_led +EXPORT_SYMBOL drivers/mfd/tps65010 0xb14080cc tps65010_set_low_pwr +EXPORT_SYMBOL drivers/mfd/tps65010 0xd5bb106d tps65010_set_vbus_draw +EXPORT_SYMBOL drivers/mfd/tps65010 0xe99b3f36 tps65010_set_gpio_out_value +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0x481fd012 ad_dpot_probe +EXPORT_SYMBOL drivers/misc/ad525x_dpot 0xe2794f58 ad_dpot_remove +EXPORT_SYMBOL drivers/misc/altera-stapl/altera-stapl 0x1746ab2d altera_init +EXPORT_SYMBOL drivers/misc/c2port/core 0x807b6749 c2port_device_register +EXPORT_SYMBOL drivers/misc/c2port/core 0xa6fbc11d c2port_device_unregister +EXPORT_SYMBOL drivers/misc/ioc4 0x80fde2b6 ioc4_unregister_submodule +EXPORT_SYMBOL drivers/misc/ioc4 0xf610d789 ioc4_register_submodule +EXPORT_SYMBOL drivers/misc/tifm_core 0x0356df2a tifm_free_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x25bf4c82 tifm_remove_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0x2ca5ec1f tifm_unmap_sg +EXPORT_SYMBOL drivers/misc/tifm_core 0x7277f616 tifm_has_ms_pif +EXPORT_SYMBOL drivers/misc/tifm_core 0x78db2060 tifm_eject +EXPORT_SYMBOL drivers/misc/tifm_core 0x90f0476b tifm_alloc_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xa319e453 tifm_free_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xa8c2ec46 tifm_queue_work +EXPORT_SYMBOL drivers/misc/tifm_core 0xc607ce18 tifm_register_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xda59bf24 tifm_alloc_device +EXPORT_SYMBOL drivers/misc/tifm_core 0xeefd0f71 tifm_unregister_driver +EXPORT_SYMBOL drivers/misc/tifm_core 0xf30df521 tifm_add_adapter +EXPORT_SYMBOL drivers/misc/tifm_core 0xfa4a47e0 tifm_map_sg +EXPORT_SYMBOL drivers/mmc/card/mmc_block 0xcc835c51 mmc_cleanup_queue +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x707c49a9 cfi_read_pri +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x7d27de8d cfi_fixup +EXPORT_SYMBOL drivers/mtd/chips/cfi_util 0x8940e818 cfi_varsize_frob +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x5c1c07fa register_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x7ffc1624 map_destroy +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0x83fd3abd do_map_probe +EXPORT_SYMBOL drivers/mtd/chips/chipreg 0xa39fa645 unregister_mtd_chip_driver +EXPORT_SYMBOL drivers/mtd/chips/gen_probe 0xf095c8bf mtd_do_chip_probe +EXPORT_SYMBOL drivers/mtd/lpddr/lpddr_cmds 0xa1af1937 lpddr_cmdset +EXPORT_SYMBOL drivers/mtd/maps/map_funcs 0xae271e19 simple_map_init +EXPORT_SYMBOL drivers/mtd/mtd 0x0dc245f2 mtd_concat_destroy +EXPORT_SYMBOL drivers/mtd/mtd 0x1363b4c1 mtd_concat_create +EXPORT_SYMBOL drivers/mtd/nand/denali 0xdb9c3ea2 denali_init +EXPORT_SYMBOL drivers/mtd/nand/denali 0xe3303c46 denali_remove +EXPORT_SYMBOL drivers/mtd/nand/nand 0x0431c601 nand_unlock +EXPORT_SYMBOL drivers/mtd/nand/nand 0x172e8266 nand_default_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x2214ee1f nand_lock +EXPORT_SYMBOL drivers/mtd/nand/nand 0x4096ee20 nand_scan_bbt +EXPORT_SYMBOL drivers/mtd/nand/nand 0x8afb5c33 nand_scan_tail +EXPORT_SYMBOL drivers/mtd/nand/nand 0xb2de9ea4 nand_scan_ident +EXPORT_SYMBOL drivers/mtd/nand/nand 0xe3b2dc81 nand_scan +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x44d2c957 nand_bch_init +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x624e2086 nand_bch_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x6a2a371b nand_bch_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_bch 0x70097aa0 nand_bch_free +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x3132ee65 __nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0x48f97485 nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb4b94377 __nand_correct_data +EXPORT_SYMBOL drivers/mtd/nand/nand_ecc 0xb83e4c28 nand_calculate_ecc +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0x836bdb72 nand_flash_ids +EXPORT_SYMBOL drivers/mtd/nand/nand_ids 0xa336feb7 nand_manuf_ids +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x0eff8602 flexonenand_region +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0x34dd3425 onenand_default_bbt +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xa16a9426 onenand_addr +EXPORT_SYMBOL drivers/mtd/onenand/onenand 0xd7ea8a06 onenand_scan_bbt +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6534792a arcnet_debug +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x6eaf8c1d arc_proto_default +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x7d0a8519 arc_raw_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0x8297dbf7 arcnet_timeout +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xb0180ae1 arcnet_unregister_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xb1707900 arcnet_open +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xb4baa2e5 arcnet_close +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xb854a7e3 arc_bcast_proto +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe1848d9d arc_proto_map +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe8985888 arcnet_send_packet +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xe8af2ddf alloc_arcdev +EXPORT_SYMBOL drivers/net/arcnet/arcnet 0xecb730b0 arcnet_interrupt +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xeb5db62e com20020_check +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xf72b1da8 com20020_found +EXPORT_SYMBOL drivers/net/arcnet/com20020 0xfd7ed878 com20020_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x0d1d8f4f NS8390_init +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x101b564e ei_get_stats +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x119721ac ei_interrupt +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x12747d66 ei_poll +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x20975a2d ei_tx_timeout +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x4c5de560 ei_open +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0x6bc59368 ei_close +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xa481ce7e ei_netdev_ops +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xadc3e534 ei_set_multicast_list +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xcba87af0 ei_start_xmit +EXPORT_SYMBOL drivers/net/ethernet/8390/8390 0xece0c6aa __alloc_ei_netdev +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x5d2dc6ba cnic_register_driver +EXPORT_SYMBOL drivers/net/ethernet/broadcom/cnic 0x636af174 cnic_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x1288779f cxgb3_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x1822d8ac t3_l2e_free +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x2126758a dev2t3cdev +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x2156fe7d cxgb3_register_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x2c9b62c7 cxgb3_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x454c6360 t3_l2t_send_slow +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x4ccb339e t3_register_cpl_handler +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x55887cc9 t3_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x6acc1d29 t3_l2t_send_event +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x77512b73 cxgb3_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x8b8eb89f cxgb3_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0x8d843a06 cxgb3_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xa58fb77b cxgb3_queue_tid_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xb03c68fa cxgb3_unregister_client +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xc54b9f0c cxgb3_insert_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb3/cxgb3 0xeaeede67 cxgb3_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x1005e960 cxgb4_alloc_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x288c3cf3 cxgb4_remove_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x2fc9101b cxgb4_register_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x34180911 cxgb4_pktgl_to_skb +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x3c23304b cxgb4_port_viid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x4ce31ba3 cxgb4_l2t_release +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x4d5f7673 cxgb4_remove_tid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x54266671 cxgb4_l2t_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x58bf015a cxgb4_free_atid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x636fede8 cxgb4_port_chan +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x63920099 cxgb4_flush_eq_cache +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x655a3d23 cxgb4_free_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x6644f7c4 cxgb4_iscsi_init +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x67408ceb cxgb4_alloc_sftid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x7034f943 cxgb4_create_server_filter +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x7ff9e355 cxgb4_dbfifo_count +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0x91fcb54d cxgb4_ofld_send +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xb00e8362 cxgb4_sync_txq_pidx +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xb2a6724b cxgb4_l2t_get +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xb2e4b110 cxgb4_get_tcp_stats +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xc9207b8c cxgb4_create_server +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xd00e5a36 cxgb4_unregister_uld +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xd69a0294 cxgb4_best_mtu +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xe1577c05 cxgb4_alloc_stid +EXPORT_SYMBOL drivers/net/ethernet/chelsio/cxgb4/cxgb4 0xfaf11305 cxgb4_port_idx +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x267216af be_roce_unregister_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0x5d85649f be_roce_register_driver +EXPORT_SYMBOL drivers/net/ethernet/emulex/benet/be2net 0xbab62e22 be_roce_mcc_cmd +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x00b7b51f mlx4_gen_port_state_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x253d8ca3 mlx4_SET_PORT_SCHEDULER +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x31dba5fd mlx4_gen_guid_change_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x436cf81f mlx4_get_slave_pkey_gid_tbl_len +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x45e76e70 mlx4_SET_PORT_general +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4a8ddd83 mlx4_gen_pkey_eqe +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4e142a31 mlx4_get_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x5792a8f9 mlx4_SET_PORT_PRIO2TC +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x6db1ef39 mlx4_get_parav_qkey +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x724b2b33 mlx4_is_slave_active +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x86ffa2ed set_and_calc_slave_port_state +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x89237e85 mlx4_gen_slaves_port_mgt_ev +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x8e7ee418 mlx4_SET_PORT_qpn_calc +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x90e1ce99 mlx4_put_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x95a2fb72 mlx4_get_slave_node_guid +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9c792587 mlx4_SET_MCAST_FLTR +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa1e3178e mlx4_sync_pkey_table +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xac79dc01 mlx4_assign_eq +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbaaac96c mlx4_set_stats_bitmap +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe84c8430 mlx4_test_interrupts +EXPORT_SYMBOL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf52d9e5e mlx4_release_eq +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x5384daa4 hdlcdrv_unregister +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x79090350 hdlcdrv_register +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0x88131bcc hdlcdrv_receiver +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xa6bfc349 hdlcdrv_arbitrate +EXPORT_SYMBOL drivers/net/hamradio/hdlcdrv 0xb688b6ef hdlcdrv_transmitter +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x05ff0da7 sirdev_get_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x1e77c102 irda_unregister_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x27c75f7c sirdev_set_dtr_rts +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x46e2a420 sirdev_write_complete +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x478dca9f sirdev_put_instance +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x4e2991cb sirdev_raw_read +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x6722015d sirdev_raw_write +EXPORT_SYMBOL drivers/net/irda/sir-dev 0x7b64a740 sirdev_receive +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xc496d81d irda_register_dongle +EXPORT_SYMBOL drivers/net/irda/sir-dev 0xeffccb17 sirdev_set_dongle +EXPORT_SYMBOL drivers/net/mdio 0x22bce513 mdio_mii_ioctl +EXPORT_SYMBOL drivers/net/mdio 0x43e4defc mdio45_nway_restart +EXPORT_SYMBOL drivers/net/mdio 0x7577f992 mdio_set_flag +EXPORT_SYMBOL drivers/net/mdio 0xa1a29548 mdio45_probe +EXPORT_SYMBOL drivers/net/mdio 0xb34a7575 mdio45_ethtool_spauseparam_an +EXPORT_SYMBOL drivers/net/mdio 0xc6b1163f mdio45_links_ok +EXPORT_SYMBOL drivers/net/mdio 0xddc98749 mdio45_ethtool_gset_npage +EXPORT_SYMBOL drivers/net/ppp/pppox 0x325f1154 pppox_unbind_sock +EXPORT_SYMBOL drivers/net/ppp/pppox 0x339a6378 register_pppox_proto +EXPORT_SYMBOL drivers/net/ppp/pppox 0xafaf2b45 pppox_ioctl +EXPORT_SYMBOL drivers/net/ppp/pppox 0xe0ff7a18 unregister_pppox_proto +EXPORT_SYMBOL drivers/net/sungem_phy 0x5e9001d7 sungem_phy_probe +EXPORT_SYMBOL drivers/net/usb/usbnet 0x4bf4933d usbnet_manage_power +EXPORT_SYMBOL drivers/net/usb/usbnet 0x837d18b6 usbnet_device_suggests_idle +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x38da4725 cycx_intr +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x62be23ea cycx_setup +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x66a4c4e6 cycx_down +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0x968458a6 cycx_peek +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xb6f383de cycx_poke +EXPORT_SYMBOL drivers/net/wan/cycx_drv 0xfe7cd576 cycx_exec +EXPORT_SYMBOL drivers/net/wan/hdlc 0x2a7395d5 alloc_hdlcdev +EXPORT_SYMBOL drivers/net/wan/hdlc 0x37a72957 hdlc_close +EXPORT_SYMBOL drivers/net/wan/hdlc 0x41c4505b hdlc_ioctl +EXPORT_SYMBOL drivers/net/wan/hdlc 0x4674977f unregister_hdlc_device +EXPORT_SYMBOL drivers/net/wan/hdlc 0x4d11fc79 hdlc_change_mtu +EXPORT_SYMBOL drivers/net/wan/hdlc 0x6bb89781 attach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xb1e21c42 detach_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xce20a4b7 hdlc_open +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe2aac569 register_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xe7c23237 unregister_hdlc_protocol +EXPORT_SYMBOL drivers/net/wan/hdlc 0xf555d112 hdlc_start_xmit +EXPORT_SYMBOL drivers/net/wimax/i2400m/i2400m 0x858334ce i2400m_unknown_barker +EXPORT_SYMBOL drivers/net/wireless/airo 0x2083aaf0 stop_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0x8d3e1f1b init_airo_card +EXPORT_SYMBOL drivers/net/wireless/airo 0xde73d41e reset_airo_card +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x043a8e26 ath_hw_keyreset +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x319c6026 ath_is_49ghz_allowed +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x32676e01 ath_key_delete +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x32c906f3 ath_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4b2068e8 ath_rxbuf_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x4e2481d5 ath_is_world_regd +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x53358ce3 ath_regd_get_band_ctl +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x6d960860 ath_reg_notifier_apply +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x8fa8d247 ath_hw_cycle_counters_update +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x91c41a49 ath_hw_get_listen_time +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0x9f689ee3 ath_key_config +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xd1041c4d ath_hw_setbssidmask +EXPORT_SYMBOL drivers/net/wireless/ath/ath 0xf7197d21 ath_regd_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x21735c2d ath6kl_core_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x486c7139 ath6kl_cfg80211_resume +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x49051614 ath6kl_core_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x4e1380ee ath6kl_printk +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x51c00b39 ath6kl_core_destroy +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x732d3ecc ath6kl_cfg80211_suspend +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x81359c04 ath6kl_core_rx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x8d2ff266 ath6kl_hif_intr_bh_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x91cfb84a ath6kl_hif_rw_comp_handler +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0x968fdfde ath6kl_stop_txrx +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xdd4c6e99 ath6kl_core_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ath/ath6kl/ath6kl_core 0xf02ddf8c ath6kl_core_create +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x079ad6f3 ath9k_hw_wow_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x447c4f20 ath9k_hw_wow_wakeup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x56525dea ath9k_hw_wow_apply_pattern +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k 0x91fc76f5 ath9k_hw_wow_event_to_string +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x0f09f418 ath9k_cmn_update_txpow +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x59275983 ath9k_cmn_update_ichannel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0x7160a33f ath9k_cmn_get_hw_crypto_keytype +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xa39a3036 ath9k_cmn_get_curchannel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xab10226e ath9k_cmn_init_crypto +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xd2981357 ath9k_cmn_count_streams +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_common 0xf59eadf3 ath9k_cmn_padpos +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x008f1318 ar9003_paprd_setup_gain_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x01ce94af ath9k_hw_set_sta_beacon_timers +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x01e5bef4 ar9003_hw_bb_watchdog_dbg_info +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x031e94eb ar9003_paprd_init_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x04b698b5 ath9k_hw_init +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x07bd1019 ath9k_hw_settsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x07c6187b ath9k_hw_btcoex_set_concur_txprio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x0b45a903 ath9k_hw_intrpend +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x0c038508 ath9k_hw_phy_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1105af2b ath9k_hw_abortpcurecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x154fc398 ath9k_hw_stopdmarecv +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1557c617 ath9k_hw_setuprxdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x15b89d77 ath9k_hw_btcoex_bt_stomp +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1696e14c ath_gen_timer_isr +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x17b9b72d ar9003_hw_disable_phy_restart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x18880a10 ath9k_hw_disable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1a043ac3 ath9k_hw_setmcastfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x1baec0dd ath9k_hw_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x238b7fd5 ar9003_mci_set_bt_version +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x24103082 ar9003_paprd_populate_single_table +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x25953e4a ath9k_hw_wait +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x27184f81 ath_gen_timer_free +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x292ba9bc ath9k_hw_kill_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x2f9d1cf4 ath9k_hw_setantenna +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3a712fc3 ath_gen_timer_alloc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3b0c4998 ath9k_hw_gen_timer_start +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x3ec35d68 ar9003_paprd_create_curve +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x404237f5 ath9k_hw_name +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x430fd935 ath9k_hw_setrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x45414e81 ath9k_hw_setopmode +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x4542b7a9 ath9k_hw_gpio_get +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x478b6983 ath9k_hw_getnf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x49a8accd ar9003_mci_cleanup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x4b519302 ath9k_hw_bstuck_nfcal +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x4bf8e330 ath9k_hw_gettxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x6006800c ath9k_hw_setrxabort +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x60ad8167 ath9k_hw_getchan_noise +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x62a86330 ar9003_get_pll_sqsum_dvc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x62ba0dc4 ath9k_hw_computetxtime +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x662ae2bc ath9k_hw_releasetxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x68741e86 ar9003_mci_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x691220de ath9k_hw_rxprocdesc +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x704e0d4c ath9k_hw_check_alive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x748f5510 ath9k_hw_gen_timer_stop +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x76951ec7 ath9k_hw_gettsf32 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x7807cddc ath9k_hw_setup_statusring +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x7b52e0ba ar9003_paprd_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x80190a3a ath9k_hw_getrxfilter +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x818be7e2 ath9k_hw_putrxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x81fe73f2 ath9k_hw_set_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x830455d5 ar9003_mci_state +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8424244e ar9003_mci_get_interrupt +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x89c9be24 ath9k_hw_btcoex_set_weight +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8a49a7d9 ath9k_hw_beaconq_setup +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8b0e654e ath9k_hw_btcoex_init_3wire +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x8ef9b227 ath9k_hw_btcoex_enable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x95217623 ath9k_hw_cfg_gpio_input +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9908218e ath9k_hw_beaconinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9b291215 ath9k_hw_gettsf64 +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9b950854 ath9k_hw_cfg_output +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9c25c1a9 ath9k_hw_btcoex_init_mci +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9c7f6383 ath9k_hw_setuptxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9e79d9e4 ath9k_hw_btcoex_init_scheme +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0x9fa731ea ath9k_hw_updatetxtriglevel +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa32965be ath9k_hw_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa7eddba5 ath9k_hw_disable_mib_counters +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xa947b9c3 ath9k_hw_enable_interrupts +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xad01ab6b ath9k_hw_setpower +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xad83e0e9 ar9003_mci_send_wlan_channels +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xadb41158 ar9003_mci_send_message +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xaf3e9cbe ath9k_hw_init_btcoex_hw +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xafe8b616 ath9k_hw_set_gpio +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb18c36c9 ath9k_hw_process_rxdesc_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb2725861 ath9k_hw_resettxqueue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xb9a0708e ath9k_hw_btcoex_disable +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xba14c6f8 ath9k_hw_set_txpowerlimit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xbb8eb352 ath9k_hw_set_rx_bufsize +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xc8f94f61 ath9k_hw_deinit +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd0397cf8 ath9k_hw_get_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xd408d5c4 ath9k_hw_set_txq_props +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xdd19baa4 ath9k_hw_write_associd +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xdd7efdd1 ath9k_hw_ani_monitor +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xe446d54d ar9003_is_paprd_enabled +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xebc14b3a ath9k_hw_set_tsfadjust +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xed9f3dff ath9k_hw_abort_tx_dma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf0a00489 ath9k_hw_startpcureceive +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf513a160 ath9k_hw_reset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf626eaaa ath9k_hw_addrxbuf_edma +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf73e3bd8 ath9k_hw_init_global_settings +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf7895860 ath9k_hw_puttxbuf +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf8b82eff ar9003_paprd_is_done +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xf94e4fe6 ath9k_hw_reset_calvalid +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfa77be31 ar9003_mci_get_next_gpm_offset +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfaff58e8 ath9k_hw_stop_dma_queue +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfb944f95 ath9k_hw_txstart +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xfbb3572e ath9k_hw_numtxpending +EXPORT_SYMBOL drivers/net/wireless/ath/ath9k/ath9k_hw 0xffda7eb0 ath9k_hw_btcoex_init_2wire +EXPORT_SYMBOL drivers/net/wireless/atmel 0x203e3873 init_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0x567e1d3b stop_atmel_card +EXPORT_SYMBOL drivers/net/wireless/atmel 0xef9b7f9d atmel_open +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmfmac/brcmfmac 0x6e33a91d brcmf_sdio_probe +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmfmac/brcmfmac 0xd66b80ed brcmf_sdio_remove +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x076be87a brcmu_pktq_mlen +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x07e737df brcmu_pkt_buf_get_skb +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x235f6d1e brcmu_pktq_penq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x5771dc14 brcmu_pktq_pdeq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x631fd7e4 brcmu_pktq_peek_tail +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x63375203 brcmu_pktq_pflush +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x911f915a brcmu_pktq_flush +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0x929d91c7 brcmu_pktq_mdeq +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xaff40951 brcmu_pktq_pdeq_tail +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xbc805c75 brcmu_pktq_init +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xc6181822 brcmu_pkt_buf_free_skb +EXPORT_SYMBOL drivers/net/wireless/brcm80211/brcmutil/brcmutil 0xf2088e15 brcmu_pktq_penq_head +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x01fc222c hostap_80211_ops +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x0c785ef2 hostap_info_process +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1723ac32 hostap_set_multicast_list_queue +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x1d0aa32b hostap_add_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x2a4676b1 hostap_check_sta_fw_version +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x383b6ed6 hostap_init_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4084c523 hostap_setup_dev +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4d198da2 hostap_handle_sta_tx_exc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x4ff8bae0 hostap_set_auth_algs +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x62d5ff88 hostap_free_data +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6a2670af hostap_init_ap_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6b536801 hostap_80211_rx +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6c4d8249 hostap_set_word +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6c518c58 hostap_info_init +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x6d213cc1 hostap_set_string +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x81a98b94 hostap_set_roaming +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x837fe19a hostap_set_antsel +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x89ee450d hostap_get_porttype +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x92246b03 hostap_master_start_xmit +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0x95520b12 hostap_set_encryption +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa12ad27f hostap_dump_tx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xa58a2e6a hostap_remove_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb10dd7de hostap_remove_interface +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb2a945e0 hostap_dump_rx_header +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xb4b77c8b hostap_80211_get_hdrlen +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc154d40a hostap_set_hostapd +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xc826ba0f hostap_init_proc +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xd1bb9634 prism2_update_comms_qual +EXPORT_SYMBOL drivers/net/wireless/hostap/hostap 0xdcbee448 hostap_set_hostapd_sta +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x15a75e07 libipw_get_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x19ebab59 libipw_rx +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x225eae34 libipw_set_geo +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x448ca5a9 libipw_wx_set_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x468808ac libipw_xmit +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x50d213fc libipw_freq_to_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5757d5b6 libipw_rx_mgt +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x5c4f4146 libipw_get_channel_flags +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x678110ac libipw_wx_get_encode +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x6f202a84 libipw_channel_to_index +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x78a7eac4 libipw_wx_set_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x7ea89a75 libipw_change_mtu +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x83409560 alloc_libipw +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x92ec55fc libipw_txb_free +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x996f0e4c libipw_wx_get_encodeext +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0x9ed8f2f1 libipw_is_valid_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xac1ea21c libipw_get_channel +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xb25ae5e7 libipw_wx_get_scan +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd6d502c5 libipw_channel_to_freq +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xd9368d77 free_libipw +EXPORT_SYMBOL drivers/net/wireless/ipw2x00/libipw 0xe9fb6d58 libipw_networks_age +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x00d0b30d il_mac_remove_interface +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x01bbddd3 il_set_rxon_hwcrypto +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x026a5ac1 il_free_txq_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x04b4f704 il_tx_cmd_complete +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x057754e9 il_cmd_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x059e5759 il_irq_handle_error +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x09a0c76b il_clear_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x0cadea7c il_setup_watchdog +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x0ce9479e il_hdl_pm_debug_stats +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x0e04fe8c il_clear_ucode_stations +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x143ff4a0 il_txq_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x14c1d1e2 il_mac_bss_info_changed +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x1633f29a il_send_cmd_sync +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x168985b4 il_init_scan_params +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x18305f6f il_tx_queue_reset +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x1c89f9ed il_send_cmd_pdu +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x208512dd il_hdl_error +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x216d32d4 il_get_active_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x21a2f06e il_write_targ_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x267d2c14 il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x274a86b7 il_set_rxon_ht +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2c667414 il_leds_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2cca640d il_set_tx_power +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x2e34158a il_leds_exit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x30c724e8 il_hdl_pm_sleep +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x351255a0 il_set_rate +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x38cfa558 il_mac_config +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x3a4b5917 il_hdl_spectrum_measurement +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x3fa2dc00 il_rx_queue_alloc +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x40bf59a2 il_wr_prph +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x461f0148 il_cancel_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4aa39103 il_get_cmd_string +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4aab673c il_rd_prph +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x4f67c090 il_tx_queue_unmap +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x518a0b91 il_restore_stations +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x564c6740 il_debug_level +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x57ee4753 il_get_lowest_plcp +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x5bfe3b69 il_full_rxon_required +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x5cf6096e il_power_update_mode +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x601aac5f il_update_stats +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x614fbfcf il_free_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x632fc983 il_dbgfs_unregister +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6b48a22a il_setup_scan_deferred_work +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6e26c1a8 il_alloc_txq_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x6f7ece93 il_fill_probe_req +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x71897704 il_add_station_common +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x75a553fb il_init_channel_map +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x75be268c il_mac_sta_remove +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x76680dae il_mac_change_interface +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x7b4516bf il_dbgfs_register +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x81b32d10 il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x89061622 il_usecs_to_beacons +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x891ef074 il_send_add_sta +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x8ce3c079 il_set_flags_for_band +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x8f902ee4 il_connection_init_rx_config +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9062b5f5 _il_poll_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x916f4fe8 il_send_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x91bc9eca il_send_rxon_timing +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x944c62cf il_set_decrypted_flag +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x94c07a73 il_mac_reset_tsf +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x98cdbb2f il_rx_queue_update_write_ptr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9c0d16f5 il_send_cmd_pdu_async +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0x9fcc57cc il_mac_hw_scan +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa2aede4e il_force_reset +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa674e9aa il_get_single_channel_number +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xa8e7a5de il_set_bit +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xac1d6e91 il_check_rxon_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xad804db6 il_pm_ops +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb4595bcb il_cmd_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb5074b6e il_free_geos +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb668c4a2 il_tx_queue_free +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xb7bd33ff il_isr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xba8d509d il_get_free_ucode_key_idx +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xbec58c22 il_send_lq_cmd +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc0f5159a il_read_targ_mem +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc39cf12c il_bg_watchdog +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc8a20ae1 il_mac_conf_tx +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xc937e2fb il_is_ht40_tx_allowed +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xcad0a709 il_tx_queue_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd3b8bd77 il_scan_cancel_timeout +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd4f4e6da il_eeprom_query_addr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd77fca5d il_init_geos +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xd7cbdb3b il_add_beacon_time +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xdc92c48a il_eeprom_free +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xdcb7d817 il_get_channel_info +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xde83f32e _il_apm_stop +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xded9e188 il_send_stats_request +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xdeeb7e69 il_eeprom_query16 +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe355305f il_apm_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe435493a il_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe643f472 il_setup_rx_scan_handlers +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xe96b105d il_get_passive_dwell_time +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf36417a6 il_chswitch_done +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf38249c0 il_send_bt_config +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf4e25ce9 il_set_rxon_channel +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf501278b il_bcast_addr +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xf811469b il_hdl_csa +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfbc5dbfd il_scan_cancel +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfc2e7651 il_rx_queue_space +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfce4e4ab il_power_initialize +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfd892e76 il_mac_add_interface +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfd995384 il_eeprom_init +EXPORT_SYMBOL drivers/net/wireless/iwlegacy/iwlegacy 0xfe016d80 il_tx_cmd_protection +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x08dd8699 __tracepoint_iwlwifi_dev_rx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x0c50fa2b __tracepoint_iwlwifi_dev_tx +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x1ecc5465 __tracepoint_iwlwifi_err +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x2f7b7e55 __tracepoint_iwlwifi_dev_ucode_wrap_event +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x3b9d00d6 __tracepoint_iwlwifi_dev_ioread32 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x675bcb86 __tracepoint_iwlwifi_info +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x779dd6f5 __tracepoint_iwlwifi_dev_iowrite32 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x85c1bb84 __tracepoint_iwlwifi_dev_iowrite8 +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x8de37664 __tracepoint_iwlwifi_dbg +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x954eb7a7 __tracepoint_iwlwifi_crit +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0x963a6f8a __tracepoint_iwlwifi_dev_ucode_error +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0xb8f7026f __tracepoint_iwlwifi_dev_ucode_cont_event +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0xe2dcc8de __tracepoint_iwlwifi_warn +EXPORT_SYMBOL drivers/net/wireless/iwlwifi/iwlwifi 0xf9ec6bdd __tracepoint_iwlwifi_dev_ucode_event +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x42733322 orinoco_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x54a3ffd9 orinoco_if_add +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x686c5838 alloc_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x69f13a92 orinoco_down +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0x7b417105 __orinoco_ev_rx +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xa7c4d090 orinoco_up +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xac74d646 orinoco_if_del +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbcad40ce orinoco_set_multicast_list +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xbf115ed1 orinoco_stop +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xca29f2cf __orinoco_ev_info +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd6dab3dc free_orinocodev +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xd999290f orinoco_get_stats +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xdb0cbd65 hermes_struct_init +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xef9335ef orinoco_process_xmit_skb +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf30b266c orinoco_tx_timeout +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf384eb12 orinoco_change_mtu +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xf8bacaa8 orinoco_open +EXPORT_SYMBOL drivers/net/wireless/orinoco/orinoco 0xffe27bca orinoco_interrupt +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x00a9c418 rtl92c_dm_init_edca_turbo +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x038525de rtl92c_phy_set_io_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x07896bb2 rtl92c_dm_rf_saving +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x18eae24f _rtl92c_phy_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x25b46781 rtl92c_firmware_selfreset +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x2a5e3806 _rtl92c_phy_init_bb_rf_register_definition +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x2d62fda7 rtl92c_phy_lc_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x333cb2f4 rtl92ce_phy_set_rf_on +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x3abf5ccf rtl92c_phy_ap_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x430bd529 rtl92c_phy_scan_operation_backup +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x46a3c75f rtl92c_phy_sw_chnl_callback +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x49cfadac rtl92c_dm_bt_coexist +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x522d5ddc rtl92c_dm_check_txpower_tracking +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x6652dceb rtl92c_phy_sw_chnl +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x67b6417f _rtl92c_phy_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x699c83c0 rtl92c_set_fw_rsvdpagepkt +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x6f2a6c37 rtl92c_phy_rf_config +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x704f6f17 rtl92c_phy_set_txpower_level +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x76276cae rtl92c_dm_init_rate_adaptive_mask +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0x7b3881c4 _rtl92c_store_pwrIndex_diffrate_offset +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xa785b688 rtl92c_set_fw_joinbss_report_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xa9020f41 rtl92c_phy_set_rfpath_switch +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xaffb2610 rtl92c_download_fw +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xb3314d48 _rtl92c_phy_calculate_bit_shift +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xba792e78 _rtl92c_phy_set_rf_sleep +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xbd3f80cb rtl8192_phy_check_is_legal_rfpath +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xc1472f44 _rtl92c_phy_fw_rf_serial_write +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xc4ca80d2 _rtl92c_phy_bb8192c_config_parafile +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xc8497017 rtl92c_bt_rssi_state_change +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xcd413781 rtl92c_dm_write_dig +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xcdb7d53e rtl92c_phy_query_bb_reg +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xcfd0e269 rtl92c_phy_set_io +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xdfd16686 _rtl92c_phy_dbm_to_txpwr_Idx +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe076ce1c rtl92c_phy_update_txpower_dbm +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe0d34322 rtl92c_dm_watchdog +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xe1882946 rtl92c_set_fw_pwrmode_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf2c04333 rtl92c_phy_set_bb_reg +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf3c23a30 _rtl92c_phy_txpwr_idx_to_dbm +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf4fb7f97 _rtl92c_phy_fw_rf_serial_read +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xf6f2b3e7 rtl92c_phy_set_bw_mode +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xfce28b20 rtl92c_fill_h2c_cmd +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xfce89c79 rtl92c_dm_init +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common 0xfe437f8c rtl92c_phy_iq_calibrate +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x010c68f6 rtl_get_tcb_desc +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x05d0375d rtl_ps_enable_nic +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x207fbb70 rtl_evm_db_to_percentage +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x25158f5f rtl_cam_delete_one_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x36067648 rtl_usb_disconnect +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x36bb6512 rtl_efuse_shadow_map_update +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x37e8e010 rtl_cam_get_free_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x4153c0b2 rtl_cam_reset_all_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x45e2c28e rtl_cam_mark_invalid +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x4b3d9794 rtl_pci_suspend +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x6315fe6d rtl_cam_add_one_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x6f940310 rtl_cam_empty_entry +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x79188a02 rtl_query_rxpwrpercentage +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x7a7fc6a2 rtl_init_rfkill +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x8a639f44 rtl_usb_resume +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x8e904710 rtl_ps_disable_nic +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0x94c6b8bb rtl_usb_probe +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xa00bddd8 rtl_process_phyinfo +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xb26425dc rtl_fw_cb +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xd1124fe7 rtl_ps_set_rf_state +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xd7481e8d efuse_read_1byte +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xdbb7030e rtl_pci_resume +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xdc2c31fa rtl_signal_scale_mapping +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xddf10b17 rtl_pci_disconnect +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xe3c2baac rtlwifi_rate_mapping +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xe8a76593 rtl_pci_probe +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xeb58722d rtl_usb_suspend +EXPORT_SYMBOL drivers/net/wireless/rtlwifi/rtlwifi 0xf585d19d rtl_cam_del_entry +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x256b6d04 wlcore_calc_packet_alignment +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x2b29378c wlcore_tx_complete +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0x8e062a2e wl12xx_is_dummy_packet +EXPORT_SYMBOL drivers/net/wireless/ti/wlcore/wlcore 0xcc6182f1 wl1271_free_tx_id +EXPORT_SYMBOL drivers/parport/parport 0x014cc542 parport_ieee1284_ecp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x05d0a3ee parport_register_driver +EXPORT_SYMBOL drivers/parport/parport 0x1546a2a2 parport_get_port +EXPORT_SYMBOL drivers/parport/parport 0x21db920c parport_register_device +EXPORT_SYMBOL drivers/parport/parport 0x238b8885 parport_claim +EXPORT_SYMBOL drivers/parport/parport 0x24a711ec parport_unregister_device +EXPORT_SYMBOL drivers/parport/parport 0x301c3b45 parport_find_number +EXPORT_SYMBOL drivers/parport/parport 0x3a04fad9 parport_ieee1284_epp_write_data +EXPORT_SYMBOL drivers/parport/parport 0x494dfe5a parport_read +EXPORT_SYMBOL drivers/parport/parport 0x4d2a941b parport_ieee1284_interrupt +EXPORT_SYMBOL drivers/parport/parport 0x536161ad parport_ieee1284_ecp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x5e3a3912 parport_irq_handler +EXPORT_SYMBOL drivers/parport/parport 0x5e822437 parport_find_base +EXPORT_SYMBOL drivers/parport/parport 0x64046ee9 parport_wait_event +EXPORT_SYMBOL drivers/parport/parport 0x68295e36 parport_ieee1284_epp_write_addr +EXPORT_SYMBOL drivers/parport/parport 0x6b64e8c1 parport_ieee1284_read_byte +EXPORT_SYMBOL drivers/parport/parport 0x82f19da2 parport_claim_or_block +EXPORT_SYMBOL drivers/parport/parport 0x8b104386 parport_set_timeout +EXPORT_SYMBOL drivers/parport/parport 0x8d8e96ca parport_ieee1284_ecp_read_data +EXPORT_SYMBOL drivers/parport/parport 0x930bb1c1 parport_write +EXPORT_SYMBOL drivers/parport/parport 0xb450acd1 parport_remove_port +EXPORT_SYMBOL drivers/parport/parport 0xb99a1a9c parport_negotiate +EXPORT_SYMBOL drivers/parport/parport 0xc73927d0 parport_release +EXPORT_SYMBOL drivers/parport/parport 0xd2106c47 parport_ieee1284_read_nibble +EXPORT_SYMBOL drivers/parport/parport 0xd35ec444 parport_ieee1284_epp_read_data +EXPORT_SYMBOL drivers/parport/parport 0xdb638207 parport_ieee1284_epp_read_addr +EXPORT_SYMBOL drivers/parport/parport 0xe000bdd9 parport_put_port +EXPORT_SYMBOL drivers/parport/parport 0xe0866390 parport_ieee1284_write_compat +EXPORT_SYMBOL drivers/parport/parport 0xe0a519df parport_announce_port +EXPORT_SYMBOL drivers/parport/parport 0xe0d774e4 parport_unregister_driver +EXPORT_SYMBOL drivers/parport/parport 0xf07cc4fd parport_register_port +EXPORT_SYMBOL drivers/parport/parport 0xf37b7d1b parport_wait_peripheral +EXPORT_SYMBOL drivers/parport/parport_pc 0xd17f88e0 parport_pc_probe_port +EXPORT_SYMBOL drivers/parport/parport_pc 0xf3ebedf0 parport_pc_unregister_port +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x0065c833 pcmcia_write_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x0d1a0199 pcmcia_disable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x23dc7e94 pcmcia_read_config_byte +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x2fea343f pcmcia_loop_config +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x30cbe65f pcmcia_fixup_vpp +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x4bba9710 __pcmcia_request_exclusive_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x59c8b008 pcmcia_dev_present +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x5a4c0da9 pcmcia_release_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x66a5e0ef pcmcia_request_window +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x742f5665 pcmcia_parse_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x85831cc6 pcmcia_fixup_iowidth +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x8b574710 pcmcia_map_mem_page +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9c788e5b pcmcia_loop_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0x9ec9aaaa pcmcia_get_mac_from_cis +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xabde666a pcmcia_request_irq +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xbcfe9297 pcmcia_request_io +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xbfd005b4 pcmcia_enable_device +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xc3191b02 pcmcia_get_tuple +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xd4b5ca2f pcmcia_register_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia 0xf1462d88 pcmcia_unregister_driver +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x126eb5b7 pcmcia_socket_class +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x19c1c5bc pcmcia_socket_list_rwsem +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x212db8d2 pcmcia_socket_list +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x3b517c3e pcmcia_reset_card +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4b10081c pcmcia_get_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x4ccfe77d pcmcia_register_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x8ff842f4 pccard_register_pcmcia +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0x941a0c76 pcmcia_get_socket_by_nr +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xa6dfd0f6 pcmcia_unregister_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xcf97f3bd dead_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xe950d343 pcmcia_put_socket +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xecbb6500 pcmcia_parse_events +EXPORT_SYMBOL drivers/pcmcia/pcmcia_core 0xee913384 pcmcia_parse_uevents +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0x012ab8c1 pccard_nonstatic_ops +EXPORT_SYMBOL drivers/pcmcia/pcmcia_rsrc 0xabacad17 pccard_static_ops +EXPORT_SYMBOL drivers/platform/x86/sony-laptop 0x5bb1e117 sony_pic_camera_command +EXPORT_SYMBOL drivers/pps/pps_core 0x05c543b0 pps_event +EXPORT_SYMBOL drivers/pps/pps_core 0x787c614c pps_lookup_dev +EXPORT_SYMBOL drivers/pps/pps_core 0x95529be3 pps_unregister_source +EXPORT_SYMBOL drivers/pps/pps_core 0xa8fef05f pps_register_source +EXPORT_SYMBOL drivers/ptp/ptp 0x1a5a8269 ptp_clock_event +EXPORT_SYMBOL drivers/ptp/ptp 0x6ceeb68a ptp_clock_index +EXPORT_SYMBOL drivers/ptp/ptp 0xdf17a7e1 ptp_clock_register +EXPORT_SYMBOL drivers/ptp/ptp 0xf04d562c ptp_clock_unregister +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x2d6d5fef pch_ch_control_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x386f4b30 pch_src_uuid_hi_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x480e152d pch_set_station_address +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x5c09fd8f pch_tx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x66f573ed pch_rx_snap_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x76b86fc1 pch_src_uuid_lo_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0x786155d4 pch_ch_event_write +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xa2ef50c7 pch_ch_control_read +EXPORT_SYMBOL drivers/ptp/ptp_pch 0xd3e1d0ca pch_ch_event_read +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x09423d1d rproc_shutdown +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x520df874 rproc_boot +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0x6fcddd1c rproc_report_crash +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xaf16cc0a rproc_vq_interrupt +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xc75906aa rproc_add +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xd19f3bd4 rproc_alloc +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xd4686baf rproc_del +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xed4f057b rproc_da_to_va +EXPORT_SYMBOL drivers/remoteproc/remoteproc 0xf3221a21 rproc_put +EXPORT_SYMBOL drivers/scsi/bnx2fc/bnx2fc 0x55f2f364 bnx2fc_ctlr_get_lesb +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x1a4f4863 fcoe_ctlr_destroy +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x2d42b8d1 fcoe_transport_attach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x406c03fd fcoe_transport_detach +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x41bb5069 fcoe_fcf_get_selected +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x48a66fa7 fcoe_ctlr_els_send +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x582444cd fcoe_ctlr_recv_flogi +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x779bfe94 fcoe_ctlr_get_fip_mode +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x7dab3b00 fcoe_ctlr_recv +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x9575c843 fcoe_ctlr_link_down +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0x99bcaa95 fcoe_ctlr_link_up +EXPORT_SYMBOL drivers/scsi/fcoe/libfcoe 0xc03ffe21 fcoe_ctlr_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x02bcd86d fc_eh_abort +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x09585934 fc_lport_bsg_request +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0ab60eb4 fc_lport_notifier_head +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x0b38dcf6 fc_fc4_deregister_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x1875501c fc_set_rport_loss_tmo +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x18b69e91 fc_rport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x21d2dba6 fc_set_mfs +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x22b90986 fc_exch_mgr_del +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x22d1ece8 fc_slave_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x238395fe fc_lport_iterate +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x23e0ff84 fc_lport_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2a4f5516 fc_lport_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2b13f619 fc_exch_mgr_list_clone +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x2c94ca50 fc_exch_mgr_free +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x340c1c0b fc_vport_setlink +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x36e5fbaf fc_cpu_mask +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x3d0b5dd5 fc_lport_set_local_id +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x43afa364 fc_elsct_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4714ee56 fc_lport_config +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x48ac3354 fc_rport_terminate_io +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4ee2f8c0 fc_exch_mgr_alloc +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x4f6a6d36 fc_fc4_register_provider +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x56ed21e2 fc_exch_mgr_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x69b420cc fc_change_queue_depth +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x6a58ccba fc_fcp_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x7140b5d9 fc_fabric_login +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x71f71703 fc_fcp_destroy +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x753d1c92 fc_lport_logo_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x81cdf80f fc_fill_reply_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x86d5041a fc_exch_update_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x8e1734dc fc_vport_id_lookup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0x9d329bb4 fc_exch_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa30fc4de fc_frame_crc_check +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xa8e468c2 fc_eh_device_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xabf13d6a fc_linkup +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb4c2e3d5 fc_lport_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb6142d08 fc_fabric_logoff +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb8e07fad fc_lport_flogi_resp +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xb9a91573 fc_get_host_speed +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xc447e325 fc_get_host_stats +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xcf0edb8d fc_fill_hdr +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xdff3a2a1 fc_change_queue_type +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe25e260f fc_exch_recv +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe458e5ff fc_eh_host_reset +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe5d01b86 fc_exch_mgr_add +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe5da1827 fc_frame_alloc_fill +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xe897f87f fc_linkdown +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xed062c44 fc_elsct_send +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf1f4703a fc_queuecommand +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xf28d7dac libfc_vport_create +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfa066d07 fc_disc_init +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xfe142cc4 fc_get_host_port_state +EXPORT_SYMBOL drivers/scsi/libfc/libfc 0xffdfd0e6 _fc_frame_alloc +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x1f27da8c sas_prep_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x5cb784b4 sas_wait_eh +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x6e22746c sas_resume_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x789d3715 sas_suspend_ha +EXPORT_SYMBOL drivers/scsi/libsas/libsas 0x8a87e724 try_test_sas_gpio_gp_bit +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x2250c66e mraid_mm_adapter_app_handle +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x512c956d mraid_mm_unregister_adp +EXPORT_SYMBOL drivers/scsi/megaraid/megaraid_mm 0x876f5fa6 mraid_mm_register_adp +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0c17edb1 osd_sec_init_nosec_doall_caps +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x0f156297 osd_execute_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x173a4fa7 osd_req_list_partition_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1836c7d9 osd_req_flush_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1ced5307 osd_dev_init +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x1f5e7536 osd_req_add_get_attr_page +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x264438b7 osd_finalize_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x2bfe915e osd_req_read_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x3faff3b6 osd_req_read +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x4897675f osd_req_write +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5163f566 osd_auto_detect_ver +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5270725f osd_req_read_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x5273842d osd_req_decode_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x561ede3d osd_req_create_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x57113890 osd_req_flush_obsd +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x60133952 osd_req_add_set_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x60e5a073 osd_req_add_get_attr_list +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6bc69c17 osd_req_get_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x6da190cd osd_req_read_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x79e56fa5 osd_req_remove_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x7c6f58a6 osd_req_write_sg +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x8518b291 osd_req_remove_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x85cf6366 osd_req_list_collection_objects +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x869b71b8 osd_req_decode_sense_full +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x88e2c5f7 osd_req_flush_object +EXPORT_SYMBOL drivers/scsi/osd/libosd 0x9a5c7bb2 osd_req_write_kern +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xa82912c7 osd_req_create_partition +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xabf4fdb8 osd_req_set_attributes +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb6dc1e13 osd_req_format +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xb71c0557 osd_req_list_partition_collections +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xc6f52540 osd_execute_request_async +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xcffcb734 osd_req_list_dev_partitions +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xd00cf6e1 osd_start_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdb46d7d9 osd_dev_fini +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdb809cc4 osd_req_flush_collection +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xdfbc2d37 osd_end_request +EXPORT_SYMBOL drivers/scsi/osd/libosd 0xefb1c4cc osd_req_write_sg_kern +EXPORT_SYMBOL drivers/scsi/osd/osd 0x1b611e05 osduld_put_device +EXPORT_SYMBOL drivers/scsi/osd/osd 0x4447d474 osduld_path_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x5fc48609 osduld_unregister_test +EXPORT_SYMBOL drivers/scsi/osd/osd 0x6dbdcb9a osduld_info_lookup +EXPORT_SYMBOL drivers/scsi/osd/osd 0x8bfdef9a osduld_device_same +EXPORT_SYMBOL drivers/scsi/osd/osd 0x9370e9f9 osduld_device_info +EXPORT_SYMBOL drivers/scsi/osd/osd 0xb774373b osduld_register_test +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x3bb25044 qlt_enable_vha +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x5196ba78 qlt_rdy_to_xfer +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x671faf01 qlt_lport_deregister +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x7043118f qlt_xmit_response +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0x92af1f8c qlt_stop_phase1 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xa66c23b9 qlt_stop_phase2 +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xae5ab3f7 qlt_unreg_sess +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xbca737c4 qlt_free_mcmd +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xc3bf7be5 qlt_lport_register +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xe1af590f qlt_xmit_tm_rsp +EXPORT_SYMBOL drivers/scsi/qla2xxx/qla2xxx 0xfd06aa02 qlt_free_cmd +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x1e5867b8 qlogicfas408_disable_ints +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x1f55cd70 qlogicfas408_ihandl +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd34f95 qlogicfas408_info +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x3fd8cd71 qlogicfas408_detect +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x420c97b8 qlogicfas408_biosparam +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x6e1ff3b4 qlogicfas408_abort +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0x8ad0a275 qlogicfas408_bus_reset +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xd2e654c6 qlogicfas408_queuecommand +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xe76b3b20 qlogicfas408_get_chip_type +EXPORT_SYMBOL drivers/scsi/qlogicfas408 0xf2b95199 qlogicfas408_setup +EXPORT_SYMBOL drivers/scsi/raid_class 0xcec7fb76 raid_class_attach +EXPORT_SYMBOL drivers/scsi/raid_class 0xdae66c56 raid_component_add +EXPORT_SYMBOL drivers/scsi/raid_class 0xe8de43e7 raid_class_release +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x16facbd5 fc_host_post_vendor_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x200cf6a1 fc_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x32684e94 fc_host_post_event +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x4368d56d scsi_is_fc_vport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7954b1ea fc_get_event_number +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x7cf35909 fc_block_scsi_eh +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x88c232bd fc_remote_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0x9661ad5d fc_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xa4f09168 fc_remote_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xcdb066eb fc_vport_terminate +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xec050e6e scsi_is_fc_rport +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xf88890af fc_vport_create +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xfa3ec348 fc_remote_port_rolechg +EXPORT_SYMBOL drivers/scsi/scsi_transport_fc 0xfc6200bf fc_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x19c69731 sas_attach_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x1aedea0b sas_port_mark_backlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x258fb408 sas_port_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2aed6e4c sas_port_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x2f72332e scsi_is_sas_port +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x3a562b7d sas_port_alloc_num +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x451e9ace sas_end_device_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x454cbc7d sas_rphy_remove +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x4f969268 scsi_is_sas_rphy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x54702068 sas_port_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5e621b9d sas_phy_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5fa14f19 sas_read_port_mode_page +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x5ff7b16b sas_phy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x77ae6d1e sas_port_get_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x8d2846ec sas_port_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x90a71e9a sas_port_add_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x97feae0a sas_phy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0x9d6f2fbd scsi_is_sas_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xac74c376 sas_release_transport +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb2055508 sas_rphy_unlink +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xb9c77c45 sas_rphy_add +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xc8b14206 sas_rphy_delete +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xd81e2e45 sas_port_delete_phy +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xdf825a9e sas_expander_alloc +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe1a71e6d sas_remove_host +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe2b3ed6b sas_rphy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xe7e4a0d5 sas_phy_free +EXPORT_SYMBOL drivers/scsi/scsi_transport_sas 0xff095a13 sas_remove_children +EXPORT_SYMBOL drivers/ssb/ssb 0x00b08e20 __ssb_driver_register +EXPORT_SYMBOL drivers/ssb/ssb 0x034d2b03 ssb_driver_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x03e695c9 ssb_dma_translation +EXPORT_SYMBOL drivers/ssb/ssb 0x0db677fd ssb_device_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x130b541c ssb_pcicore_dev_irqvecs_enable +EXPORT_SYMBOL drivers/ssb/ssb 0x13695a34 ssb_pmu_set_ldo_paref +EXPORT_SYMBOL drivers/ssb/ssb 0x1e569f29 ssb_pcihost_register +EXPORT_SYMBOL drivers/ssb/ssb 0x2d7831a9 ssb_pmu_set_ldo_voltage +EXPORT_SYMBOL drivers/ssb/ssb 0x35820ab1 ssb_commit_settings +EXPORT_SYMBOL drivers/ssb/ssb 0x411d771c ssb_bus_suspend +EXPORT_SYMBOL drivers/ssb/ssb 0x58dc163d ssb_bus_unregister +EXPORT_SYMBOL drivers/ssb/ssb 0x5f44cec9 ssb_set_devtypedata +EXPORT_SYMBOL drivers/ssb/ssb 0x84f90110 ssb_device_is_enabled +EXPORT_SYMBOL drivers/ssb/ssb 0x9bc6c026 ssb_bus_may_powerdown +EXPORT_SYMBOL drivers/ssb/ssb 0xb114e307 ssb_bus_resume +EXPORT_SYMBOL drivers/ssb/ssb 0xb33301a3 ssb_chipco_gpio_control +EXPORT_SYMBOL drivers/ssb/ssb 0xb5289c48 ssb_bus_powerup +EXPORT_SYMBOL drivers/ssb/ssb 0xb93de7bb ssb_bus_sdiobus_register +EXPORT_SYMBOL drivers/ssb/ssb 0xc0512e0f ssb_admatch_base +EXPORT_SYMBOL drivers/ssb/ssb 0xc6708ab1 ssb_clockspeed +EXPORT_SYMBOL drivers/ssb/ssb 0xcf56d62d ssb_device_disable +EXPORT_SYMBOL drivers/ssb/ssb 0xd481192b ssb_admatch_size +EXPORT_SYMBOL drivers/ssb/ssb 0xeaa2ecc6 ssb_bus_pcibus_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0cd330f4 range_unknown +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x0e9937a2 comedi_buf_put +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x16b0793e comedi_event +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2dbbd678 comedi_check_chanlist +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x2f0ad9d3 range_bipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x3ffba8ee comedi_buf_memcpy_to +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x4fe634f3 range_bipolar2_5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x5016be3a comedi_buf_read_n_available +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x52f96446 comedi_driver_unregister +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x54df24ff comedi_buf_read_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x8113872c range_unipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0x82c4bba5 comedi_get_subdevice_runflags +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa2319c11 comedi_buf_write_alloc +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xa5668d5b comedi_buf_get +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xb2c7fbf7 comedi_driver_register +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xbb52fc7f range_bipolar10 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xd84656a7 comedi_buf_memcpy_from +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xdb2044b2 range_unipolar5 +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xe05d9a0f comedi_buf_read_free +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xf6d96c0b comedi_error +EXPORT_SYMBOL drivers/staging/comedi/comedi 0xfb260300 comedi_buf_write_free +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x0ee32429 subdev_8255_interrupt +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x142510fd subdev_8255_init_irq +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x370a9bf7 subdev_8255_cleanup +EXPORT_SYMBOL drivers/staging/comedi/drivers/8255 0x917d2f8a subdev_8255_init +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x575ed6b5 cfc_read_array_from_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x5a32fed4 cfc_write_array_to_buffer +EXPORT_SYMBOL drivers/staging/comedi/drivers/comedi_fc 0x8c625eec cfc_handle_events +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x07afbc49 mite_alloc_ring +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x10ca15a0 mite_setup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x1ea17ce5 mite_buf_change +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x34574af6 mite_bytes_in_transit +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x3b78622c mite_request_channel_in_range +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x46328206 mite_bytes_written_to_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x70e88400 mite_alloc +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x71cff184 mite_bytes_read_from_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x7d9f84c3 mite_free_ring +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0x9c1b1955 mite_prep_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xac975124 mite_dma_disarm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xc370b2f8 mite_dma_arm +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd03e544e mite_setup2 +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd1b537c8 mite_sync_input_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xd3112aa2 mite_release_channel +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xdfc0211e mite_bytes_read_from_memory_ub +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe0103664 mite_unsetup +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe32d90ea mite_get_status +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe7ac09d9 mite_sync_output_dma +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xe83d529c mite_bytes_written_to_memory_lb +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xf4adb482 mite_dma_tcr +EXPORT_SYMBOL drivers/staging/comedi/drivers/mite 0xf769fa90 mite_done +EXPORT_SYMBOL drivers/staging/comedi/drivers/pcm_common 0xd4722670 comedi_pcm_cmdtest +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x0cb7bb8a comedi_get_n_channels +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x603306f1 comedi_find_subdevice_by_type +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x60377100 comedi_open +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x875dd282 comedi_dio_bitfield +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0x9d45993f comedi_dio_config +EXPORT_SYMBOL drivers/staging/comedi/kcomedilib/kcomedilib 0xc65ffbc6 comedi_close +EXPORT_SYMBOL drivers/staging/fwserial/firewire-serial 0x71c89469 fwtty_port_put +EXPORT_SYMBOL drivers/staging/fwserial/firewire-serial 0xe2506a70 fwtty_port_get +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x539ef1fe adt7316_probe +EXPORT_SYMBOL drivers/staging/iio/addac/adt7316 0x752dd9c9 adt7316_remove +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0x96823fc0 ade7854_remove +EXPORT_SYMBOL drivers/staging/iio/meter/ade7854 0xb61e2c70 ade7854_probe +EXPORT_SYMBOL drivers/staging/iio/ring_sw 0x3681af2d iio_sw_rb_allocate +EXPORT_SYMBOL drivers/staging/iio/ring_sw 0xa0c99249 iio_sw_rb_free +EXPORT_SYMBOL drivers/staging/media/cxd2099/cxd2099 0x4c22150e cxd2099_attach +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x09b49ebd go7007_boot_encoder +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x1a21dab2 go7007_register_encoder +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x833c5e9d go7007_snd_init +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x9aec31d7 go7007_read_interrupt +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0x9f543b05 go7007_snd_remove +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0xa9aad3c3 go7007_remove +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0xbfb39bd0 go7007_read_addr +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0xe2b186c5 go7007_alloc +EXPORT_SYMBOL drivers/staging/media/go7007/go7007 0xea0a9631 go7007_parse_video_stream +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1459d39d rtllib_wx_set_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x172f51f8 rtllib_rx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1a487edc rtllib_act_scanning +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1d4f7531 rtllib_wx_get_power +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x1e809425 rtllib_xmit +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x20f7ef81 rtllib_wx_set_rawtx +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x29feb455 rtllib_wx_set_mlme +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x2a7df013 rtllib_softmac_start_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x2c93e7b3 rtllib_wx_get_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x2e47bb53 rtllib_softmac_stop_protocol +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x38bacd26 rtllib_EnableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x4371bf94 rtllib_wx_get_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x4983b9a3 rtllib_wx_set_gen_ie +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x4c5c5248 rtllib_wx_set_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x504a7c1b rtllib_wx_get_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x50ecb1a2 rtllib_wx_set_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x551a83cf Dot11d_Channelmap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x56b16eb8 rtllib_wx_get_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x64b5ed88 notify_wx_assoc_event +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x67a679a2 RemovePeerTS +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x69ba8bbf rtllib_wx_set_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x80abf48c rtllib_stop_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x85fc1aa3 dot11d_init +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x8719094b rtllib_stop_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x87c43eed rtllib_wx_get_name +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x8cb6a0b2 rtllib_stop_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x91c5aa14 rtllib_reset_queue +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0x94c1759f rtllib_ps_tx_ack +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xab60afa8 rtllib_wpa_supplicant_ioctl +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xac3926a8 rtllib_wx_get_wap +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xae4c130d rtllib_start_send_beacons +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xb089c542 rtllib_wx_get_rts +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xbe1420f2 rt_global_debug_component +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc17c9b46 rtllib_wx_get_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc41ef67b rtllib_sta_ps_send_null_frame +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc49513c1 rtllib_DisableIntelPromiscuousMode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc86a3dea rtllib_wx_set_essid +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc9080850 rtllib_wx_set_auth +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xc9500cb3 rtllib_wx_get_scan +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xcb64c4d1 rtllib_get_beacon +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xcc123955 rtllib_wx_set_encode_ext +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd0849428 alloc_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd13cae69 HT_update_self_and_peer_setting +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xd66d51b6 rtllib_start_scan_syncro +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xdf78f620 rtllib_wlan_frequencies +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xe39b3898 rtllib_wx_set_mode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xeeb1272b free_rtllib +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf0a0fb17 rtllib_wx_set_rate +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf35d44c1 rtllib_legal_channel +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf3fa1ed6 rtllib_wx_set_encode +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xf65be9b4 rtllib_wx_set_freq +EXPORT_SYMBOL drivers/staging/rtl8192e/rtllib 0xfd323201 rtllib_MgntDisconnect +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x044b1cc5 ieee80211_wx_set_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x0ff30395 ieee80211_stop_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x11931373 ieee80211_wx_get_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x144e2fc8 ieee80211_wx_set_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x18942162 ieee80211_wx_set_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x1a6a2b9f ieee80211_softmac_xmit_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x1b9b3c64 ieee80211_start_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x1d8e7c3f ieee80211_wx_set_mlme_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x20d403dc ieee80211_wx_set_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x2334c819 ieee80211_softmac_start_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x28c52142 Dot11d_Init +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x296c324b ieee80211_ps_tx_ack_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x2f9cc677 ieee80211_disassociate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x312e94f7 ieee80211_wx_get_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x32946cff notify_wx_assoc_event_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x3dbf85a8 ieee80211_reset_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x46079813 ieee80211_rx_mgt_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x465ceb63 IsLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x4cb4819d ieee80211_wx_get_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x5294e318 ieee80211_start_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x534311d0 ieee80211_wx_get_name_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x5b84fcfb ieee80211_stop_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x5b8e19f0 ieee80211_txb_free_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x60217d4c ieee80211_get_beacon_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x62db10cd ieee80211_wx_get_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x657a9eb1 ieee80211_stop_send_beacons_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x6cd2e6bc ieee80211_wx_get_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x829054c5 Dot11d_Reset +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x83a8c2fb ieee80211_wx_set_scan_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8602fcea ieee80211_wx_get_rts_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8acfbabe ieee80211_wx_set_auth_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8c320a79 ieee80211_wx_get_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x8dcde1f7 ieee80211_wx_set_rawtx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x92b3296d Dot11d_UpdateCountryIe +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0x9fa29cb8 ieee80211_rx_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xa29de3f3 ieee80211_wx_get_wap_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xb050f7e6 ieee80211_wx_get_essid_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xb0a0f5ab ieee80211_wx_set_encode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xb1043cfe HTUpdateSelfAndPeerSetting +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xb7e83611 ieee80211_wx_set_gen_ie_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xb91085b9 ieee80211_wake_queue_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xc1f7bae7 ieee80211_is_shortslot_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xc370a43e ieee80211_wlan_frequencies_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xc5c2f9a5 DOT11D_ScanComplete +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xc6c5c8e3 ieee80211_wx_set_power_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xcd64e386 ieee80211_softmac_scan_syncro_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xcdf0fdfd ieee80211_wx_set_encode_ext_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xcfa32845 ToLegalChannel +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xd7886204 ieee80211_wx_get_rate_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xde8f5015 ieee80211_wx_set_freq_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xe218a8f2 ieee80211_is_54g_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xf077ef91 DOT11D_GetMaxTxPwrInDbm +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xf4bad1e3 SendDisassociation_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xfabcdfdd ieee80211_send_probe_requests_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xfabfed4f ieee80211_softmac_stop_protocol_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xfe32d791 ieee80211_wx_set_mode_rsl +EXPORT_SYMBOL drivers/staging/rtl8192u/r8192u_usb 0xff8c7127 ieee80211_wpa_supplicant_ioctl_rsl +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x0017f35f set_bp_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x00ea0cde set_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x06d6f244 get_bp_dis_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x09df8f3e set_tap_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x0a8d32c3 get_bypass_slave_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x1936264c set_dis_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x1d2eb8ca get_tap_change_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x203af1f7 reset_bypass_wd_timer_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2070f14a set_bypass_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x27b990ef get_bypass_info_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2ba7cd35 get_wd_autoreset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2c3f1c17 get_tx_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2f59e636 get_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x2fdb893a get_tap_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x361cf40a get_dis_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x45ca99c3 set_wd_autoreset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x550a188c set_bypass_wd_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x5cb59e92 get_bypass_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x66b60122 set_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x675208c0 set_tx_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x692623f2 get_std_nic_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x75131ec6 set_bypass_pwoff_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x76c0b7d0 set_tpl_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x7e872825 get_wd_exp_mode_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x7e8d701e get_wd_expire_time_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x86388b07 get_bp_disc_change_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x93ae4648 get_wd_set_caps_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x95e42b0d is_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x9df5f807 set_dis_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0x9e21f42e set_std_nic_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xa689a214 get_bypass_wd_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xae117788 get_bp_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xc368d30d get_dis_tap_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xccab5de0 get_bypass_caps_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xd3e034b3 get_bypass_pwoff_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xd9c1ccfc get_bp_disc_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xd9d38d97 set_wd_exp_mode_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xe640f06e set_bp_disc_pwup_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xecdaa456 set_bp_hw_reset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xedcd3c1b get_bypass_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf06d67bf set_bp_dis_disc_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf57c1671 get_bp_hw_reset_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf693c3a1 bp_if_scan_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xf8237882 get_bypass_change_sd +EXPORT_SYMBOL drivers/staging/silicom/bpctl_mod 0xfa59240d get_tpl_sd +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x05af3c4c set_wd_exp_mode +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x05b08a42 set_bp_hw_reset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x0b0d5ce0 get_tap_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x0fc2e83c reset_bypass_wd_timer +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x123a8133 get_tx +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x157ec89c get_bp_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2440f05a get_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2b01d1d4 set_bp_dis_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2c27a2f0 set_dis_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2da97f4b is_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x2e86c67b get_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x37416370 get_bp_hw_reset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x37bdab27 get_wd_autoreset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x3da96a18 get_bypass_caps +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x4025805e get_bypass_change +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x4940a0cc get_bypass_info +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x4d21ff51 get_bypass_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x5147360c get_bp_disc_change +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x515d4df1 get_bypass_slave +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x5560267e set_wd_autoreset +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x5be44d44 set_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x6653590c get_wd_exp_mode +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x6bda14ec get_bp_dis_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x72c618ae set_bypass_wd +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x76d47e6f set_bp_disc_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x794e3815 set_tap_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x7c6cbc16 get_tpl +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x84a263dc set_tx +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x8a16f22c set_tpl +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x946ff795 get_wd_set_caps +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x94f6aff2 get_bypass_wd +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0x9d1ecf73 set_bypass_pwoff +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xb1385629 set_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xbff68c45 set_bypass_pwup +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xc871c561 get_dis_bypass +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xcee528df set_std_nic +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xd202dd85 get_bypass_pwoff +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xd787f151 get_wd_expire_time +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xdb6a39d2 get_dis_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xebd25ae5 get_std_nic +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf1e9f8c1 set_bp_disc +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf224abd9 get_tap_change +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf5a591b2 set_dis_tap +EXPORT_SYMBOL drivers/staging/silicom/bypasslib/bypass 0xf643fd4c get_bp_disc_pwup +EXPORT_SYMBOL drivers/target/target_core_mod 0x02de3b18 transport_set_vpd_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x091630e6 transport_subsystem_release +EXPORT_SYMBOL drivers/target/target_core_mod 0x0a41a52c target_put_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x0e4d3fca __transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x1276582f fc_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x16a23925 target_sess_cmd_list_set_waiting +EXPORT_SYMBOL drivers/target/target_core_mod 0x192ad694 target_wait_for_sess_cmds +EXPORT_SYMBOL drivers/target/target_core_mod 0x19fb5bb9 iscsi_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0x1a2fddd1 iscsi_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x2013fe3e transport_check_aborted_status +EXPORT_SYMBOL drivers/target/target_core_mod 0x23d5a084 core_tpg_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x2502d5df core_tpg_set_initiator_node_queue_depth +EXPORT_SYMBOL drivers/target/target_core_mod 0x2903b9a0 target_submit_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x32940475 transport_handle_cdb_direct +EXPORT_SYMBOL drivers/target/target_core_mod 0x38292075 core_tpg_check_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x3874aed7 fc_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x3c2aac25 target_submit_cmd_map_sgls +EXPORT_SYMBOL drivers/target/target_core_mod 0x40c56691 target_fabric_configfs_free +EXPORT_SYMBOL drivers/target/target_core_mod 0x41e5ac91 transport_wait_for_tasks +EXPORT_SYMBOL drivers/target/target_core_mod 0x43b38524 core_tpg_add_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0x4dc1d328 target_execute_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x4df6ae7c transport_deregister_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x5170b392 transport_generic_free_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x52c7f244 spc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0x5a90d117 target_get_session +EXPORT_SYMBOL drivers/target/target_core_mod 0x5d002321 transport_kunmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0x64da59bc transport_send_check_condition_and_sense +EXPORT_SYMBOL drivers/target/target_core_mod 0x6b95cfc0 transport_subsystem_register +EXPORT_SYMBOL drivers/target/target_core_mod 0x6d49f57e core_tpg_set_initiator_node_tag +EXPORT_SYMBOL drivers/target/target_core_mod 0x798bf516 sbc_get_device_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x79f77b3e sas_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0x7af06f56 target_fabric_configfs_init +EXPORT_SYMBOL drivers/target/target_core_mod 0x7b5084c2 sas_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0x7dbada9d transport_set_vpd_ident_type +EXPORT_SYMBOL drivers/target/target_core_mod 0x83706383 transport_init_se_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0x85aa880c transport_set_vpd_assoc +EXPORT_SYMBOL drivers/target/target_core_mod 0x8a107c03 fc_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0x9d9586e0 target_put_sess_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xa12fe9be core_tmr_alloc_req +EXPORT_SYMBOL drivers/target/target_core_mod 0xa41f619e sas_parse_pr_out_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xa688d729 transport_register_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xaa077f98 transport_deregister_session_configfs +EXPORT_SYMBOL drivers/target/target_core_mod 0xb5b95707 fc_get_pr_transport_id_len +EXPORT_SYMBOL drivers/target/target_core_mod 0xb80a2368 target_setup_cmd_from_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0xc2a9b7d2 transport_generic_handle_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0xc38149be transport_free_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xc40990ee transport_init_session +EXPORT_SYMBOL drivers/target/target_core_mod 0xc5fdf380 transport_lookup_tmr_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0xcb44f0a5 iscsi_get_fabric_proto_ident +EXPORT_SYMBOL drivers/target/target_core_mod 0xcf12bf21 transport_generic_new_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xd4ab3ace iscsi_get_pr_transport_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xd59615e3 spc_get_write_same_sectors +EXPORT_SYMBOL drivers/target/target_core_mod 0xd5d0d131 core_tpg_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0xd85441bc spc_emulate_report_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0xdbbb8e46 core_tpg_clear_object_luns +EXPORT_SYMBOL drivers/target/target_core_mod 0xe40fdb9a transport_generic_request_failure +EXPORT_SYMBOL drivers/target/target_core_mod 0xe430e9fe transport_kmap_data_sg +EXPORT_SYMBOL drivers/target/target_core_mod 0xece26e38 target_submit_tmr +EXPORT_SYMBOL drivers/target/target_core_mod 0xecee28e7 core_tpg_del_initiator_node_acl +EXPORT_SYMBOL drivers/target/target_core_mod 0xed30b0e3 core_alua_check_nonop_delay +EXPORT_SYMBOL drivers/target/target_core_mod 0xf01621c7 transport_set_vpd_proto_id +EXPORT_SYMBOL drivers/target/target_core_mod 0xf4b9fe83 sbc_parse_cdb +EXPORT_SYMBOL drivers/target/target_core_mod 0xfbdcf479 target_complete_cmd +EXPORT_SYMBOL drivers/target/target_core_mod 0xfc381b21 target_fabric_configfs_register +EXPORT_SYMBOL drivers/target/target_core_mod 0xfdde3c67 target_fabric_configfs_deregister +EXPORT_SYMBOL drivers/target/target_core_mod 0xfdde5020 transport_lookup_cmd_lun +EXPORT_SYMBOL drivers/target/target_core_mod 0xfeb04ada sas_get_pr_transport_id +EXPORT_SYMBOL drivers/usb/class/cdc-wdm 0x1875b307 usb_cdc_wdm_register +EXPORT_SYMBOL drivers/usb/host/sl811-hcd 0xdeb18f29 sl811h_driver +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xa64a4cea usb_nop_xceiv_unregister +EXPORT_SYMBOL drivers/usb/otg/nop-usb-xceiv 0xd0e43207 usb_nop_xceiv_register +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x19a896de usb_wwan_write_room +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x399166c3 usb_wwan_suspend +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x3f6272e6 usb_wwan_port_remove +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x4ab1df00 usb_wwan_write +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x777fb250 usb_wwan_close +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x788eafb8 usb_wwan_open +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0x9749f3f5 usb_wwan_tiocmset +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xa4a777db usb_wwan_resume +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xb4613a14 usb_wwan_ioctl +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xc20ffa39 usb_wwan_set_termios +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xcd96ecfe usb_wwan_dtr_rts +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xd0c1279c usb_wwan_chars_in_buffer +EXPORT_SYMBOL drivers/usb/serial/usb_wwan 0xe7fb7e6e usb_wwan_tiocmget +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x414f7bc9 usb_serial_suspend +EXPORT_SYMBOL drivers/usb/serial/usbserial 0x47fe1d7d usb_serial_resume +EXPORT_SYMBOL drivers/video/backlight/generic_bl 0x366d19ef genericbl_limit_intensity +EXPORT_SYMBOL drivers/video/backlight/lcd 0x648f77ea lcd_device_register +EXPORT_SYMBOL drivers/video/backlight/lcd 0x79afad73 lcd_device_unregister +EXPORT_SYMBOL drivers/video/cyber2000fb 0x0cc3ede5 cyber2000fb_detach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x34c8cd08 cyber2000fb_attach +EXPORT_SYMBOL drivers/video/cyber2000fb 0x534b6f18 cyber2000fb_disable_extregs +EXPORT_SYMBOL drivers/video/cyber2000fb 0xb39f68d1 cyber2000fb_enable_extregs +EXPORT_SYMBOL drivers/video/macmodes 0x233917d1 mac_vmode_to_var +EXPORT_SYMBOL drivers/video/macmodes 0xa4f803a0 mac_find_mode +EXPORT_SYMBOL drivers/video/macmodes 0xe2304303 mac_map_monitor_sense +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0x3efc6a1d matroxfb_g450_setpll_cond +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xc5757041 g450_mnp2f +EXPORT_SYMBOL drivers/video/matrox/g450_pll 0xdce19fc2 matroxfb_g450_setclk +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x3d858bf4 DAC1064_global_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0x42a175df matrox_mystique +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xa73b2eff matrox_G100 +EXPORT_SYMBOL drivers/video/matrox/matroxfb_DAC1064 0xfe1775fc DAC1064_global_restore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_Ti3026 0x75133083 matrox_millennium +EXPORT_SYMBOL drivers/video/matrox/matroxfb_accel 0x5ce7a200 matrox_cfbX_init +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x0f769f08 matroxfb_wait_for_sync +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x2a23f7b3 matroxfb_register_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0x4514b1c1 matroxfb_enable_irq +EXPORT_SYMBOL drivers/video/matrox/matroxfb_base 0xe10f8b0c matroxfb_unregister_driver +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x93d943f5 matroxfb_g450_shutdown +EXPORT_SYMBOL drivers/video/matrox/matroxfb_g450 0x9c20c204 matroxfb_g450_connect +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x25cf8049 matroxfb_PLL_calcclock +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0x6e1fa9c9 matroxfb_DAC_out +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xbb0fa531 matroxfb_vgaHWinit +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xcdc90c64 matroxfb_var2my +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xd528d698 matroxfb_vgaHWrestore +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xd5ff4f21 matroxfb_DAC_in +EXPORT_SYMBOL drivers/video/matrox/matroxfb_misc 0xda28326b matroxfb_read_pins +EXPORT_SYMBOL drivers/video/mb862xx/mb862xxfb 0x4c278a6f mb862xxfb_init_accel +EXPORT_SYMBOL drivers/video/output 0x0a80814f video_output_unregister +EXPORT_SYMBOL drivers/video/output 0x5a7fb2f5 video_output_register +EXPORT_SYMBOL drivers/video/sis/sisfb 0x3037658e sis_malloc +EXPORT_SYMBOL drivers/video/sis/sisfb 0x454a3cf0 sis_free +EXPORT_SYMBOL drivers/video/svgalib 0x0828016a svga_get_tilemax +EXPORT_SYMBOL drivers/video/svgalib 0x17f3f471 svga_set_default_seq_regs +EXPORT_SYMBOL drivers/video/svgalib 0x1be6dc30 svga_set_textmode_vga_regs +EXPORT_SYMBOL drivers/video/svgalib 0x3d4a25b9 svga_tilecopy +EXPORT_SYMBOL drivers/video/svgalib 0x4ab38ef2 svga_set_default_crt_regs +EXPORT_SYMBOL drivers/video/svgalib 0x6e4adb1e svga_check_timings +EXPORT_SYMBOL drivers/video/svgalib 0x80f24d95 svga_wcrt_multi +EXPORT_SYMBOL drivers/video/svgalib 0x8697fb67 svga_settile +EXPORT_SYMBOL drivers/video/svgalib 0x878569a2 svga_tilefill +EXPORT_SYMBOL drivers/video/svgalib 0x8de63fb4 svga_set_timings +EXPORT_SYMBOL drivers/video/svgalib 0xa70a08e5 svga_get_caps +EXPORT_SYMBOL drivers/video/svgalib 0xaac8053b svga_tileblit +EXPORT_SYMBOL drivers/video/svgalib 0xce71bf4b svga_tilecursor +EXPORT_SYMBOL drivers/video/svgalib 0xd1429fca svga_wseq_multi +EXPORT_SYMBOL drivers/video/svgalib 0xd22ca511 svga_set_default_atc_regs +EXPORT_SYMBOL drivers/video/svgalib 0xe28d2a49 svga_set_default_gfx_regs +EXPORT_SYMBOL drivers/video/svgalib 0xef774f5d svga_compute_pll +EXPORT_SYMBOL drivers/video/svgalib 0xf2db5956 svga_match_format +EXPORT_SYMBOL drivers/video/syscopyarea 0x56fba4c3 sys_copyarea +EXPORT_SYMBOL drivers/video/sysfillrect 0xd14e7bc9 sys_fillrect +EXPORT_SYMBOL drivers/video/sysimgblt 0xced34a3b sys_imageblit +EXPORT_SYMBOL drivers/video/vgastate 0x686de290 restore_vga +EXPORT_SYMBOL drivers/video/vgastate 0xe7a2620e save_vga +EXPORT_SYMBOL drivers/vme/vme 0x00d7e722 vme_lm_count +EXPORT_SYMBOL drivers/vme/vme 0x072f901c vme_master_rmw +EXPORT_SYMBOL drivers/vme/vme 0x0a055325 vme_new_dma_list +EXPORT_SYMBOL drivers/vme/vme 0x0c6bdc3f vme_master_read +EXPORT_SYMBOL drivers/vme/vme 0x0ec5babe vme_dma_free +EXPORT_SYMBOL drivers/vme/vme 0x20df5a3d vme_dma_pci_attribute +EXPORT_SYMBOL drivers/vme/vme 0x3e95083c vme_slave_get +EXPORT_SYMBOL drivers/vme/vme 0x455a7037 vme_unregister_bridge +EXPORT_SYMBOL drivers/vme/vme 0x46649cd1 vme_lm_set +EXPORT_SYMBOL drivers/vme/vme 0x48b99a13 vme_lm_free +EXPORT_SYMBOL drivers/vme/vme 0x48f982bc vme_slave_request +EXPORT_SYMBOL drivers/vme/vme 0x4baf35a7 vme_master_get +EXPORT_SYMBOL drivers/vme/vme 0x52983a4f vme_master_write +EXPORT_SYMBOL drivers/vme/vme 0x535c8308 vme_dma_pattern_attribute +EXPORT_SYMBOL drivers/vme/vme 0x5aff4177 vme_lm_get +EXPORT_SYMBOL drivers/vme/vme 0x5cdd4d7f vme_dma_list_free +EXPORT_SYMBOL drivers/vme/vme 0x5fdc0828 vme_master_request +EXPORT_SYMBOL drivers/vme/vme 0x7154f6b5 vme_bus_type +EXPORT_SYMBOL drivers/vme/vme 0x71b6179f vme_irq_free +EXPORT_SYMBOL drivers/vme/vme 0x79a33f85 vme_get_size +EXPORT_SYMBOL drivers/vme/vme 0x7cf35220 vme_master_free +EXPORT_SYMBOL drivers/vme/vme 0x7f72ffd4 vme_lm_request +EXPORT_SYMBOL drivers/vme/vme 0x7fcf4732 vme_dma_list_add +EXPORT_SYMBOL drivers/vme/vme 0x8c0e03e2 vme_irq_generate +EXPORT_SYMBOL drivers/vme/vme 0x92fa5abb vme_lm_detach +EXPORT_SYMBOL drivers/vme/vme 0x9aeb07e8 vme_lm_attach +EXPORT_SYMBOL drivers/vme/vme 0xa1852d25 vme_dma_request +EXPORT_SYMBOL drivers/vme/vme 0xa2a335bd vme_alloc_consistent +EXPORT_SYMBOL drivers/vme/vme 0xa31bdf07 vme_master_set +EXPORT_SYMBOL drivers/vme/vme 0xa599e723 vme_dma_list_exec +EXPORT_SYMBOL drivers/vme/vme 0xb2f35387 vme_register_driver +EXPORT_SYMBOL drivers/vme/vme 0xba623967 vme_register_bridge +EXPORT_SYMBOL drivers/vme/vme 0xca5ee09a vme_free_consistent +EXPORT_SYMBOL drivers/vme/vme 0xd14d3ca4 vme_irq_handler +EXPORT_SYMBOL drivers/vme/vme 0xdff905e5 vme_slave_free +EXPORT_SYMBOL drivers/vme/vme 0xe601e392 vme_unregister_driver +EXPORT_SYMBOL drivers/vme/vme 0xe94ff303 vme_irq_request +EXPORT_SYMBOL drivers/vme/vme 0xefd1624a vme_dma_free_attribute +EXPORT_SYMBOL drivers/vme/vme 0xf0f326c5 vme_slot_get +EXPORT_SYMBOL drivers/vme/vme 0xf5a10e25 vme_slave_set +EXPORT_SYMBOL drivers/vme/vme 0xfacd8e72 vme_dma_vme_attribute +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x42e0e691 w1_ds2760_read +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4a505892 w1_ds2760_recall_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0x4fa016d3 w1_ds2760_write +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2760 0xd607fef7 w1_ds2760_store_eeprom +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0xc5b6e6db w1_ds2780_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2780 0xd7e80574 w1_ds2780_io +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0x67709500 w1_ds2781_eeprom_cmd +EXPORT_SYMBOL drivers/w1/slaves/w1_ds2781 0xd5ca022d w1_ds2781_io +EXPORT_SYMBOL drivers/w1/wire 0x02a86db0 w1_register_family +EXPORT_SYMBOL drivers/w1/wire 0x72611acf w1_remove_master_device +EXPORT_SYMBOL drivers/w1/wire 0xdb2c77e8 w1_unregister_family +EXPORT_SYMBOL drivers/w1/wire 0xec72e103 w1_add_master_device +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0x04e133fc iTCO_vendor_check_noreboot_on +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xa78bd894 iTCO_vendor_pre_set_heartbeat +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xb5f20875 iTCO_vendor_pre_keepalive +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xc4f657bf iTCO_vendor_pre_stop +EXPORT_SYMBOL drivers/watchdog/iTCO_vendor_support 0xdc6effc9 iTCO_vendor_pre_start +EXPORT_SYMBOL fs/btrfs/btrfs 0x02897198 ulist_add +EXPORT_SYMBOL fs/btrfs/btrfs 0x09dceb4d ulist_free +EXPORT_SYMBOL fs/btrfs/btrfs 0x09fa4bcc ulist_init +EXPORT_SYMBOL fs/btrfs/btrfs 0x34b9e4c4 ulist_fini +EXPORT_SYMBOL fs/btrfs/btrfs 0x35490e9d ulist_next +EXPORT_SYMBOL fs/btrfs/btrfs 0xe4423912 ulist_alloc +EXPORT_SYMBOL fs/btrfs/btrfs 0xedf03da5 ulist_reinit +EXPORT_SYMBOL fs/configfs/configfs 0x12ba2a96 configfs_undepend_item +EXPORT_SYMBOL fs/configfs/configfs 0x1e792b1e config_item_set_name +EXPORT_SYMBOL fs/configfs/configfs 0x1eda02f7 config_item_get +EXPORT_SYMBOL fs/configfs/configfs 0x23c0485f config_group_init +EXPORT_SYMBOL fs/configfs/configfs 0x3e70d03e configfs_register_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x4c4b6dd1 config_item_put +EXPORT_SYMBOL fs/configfs/configfs 0x5ac48cd1 config_group_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x660a8205 configfs_unregister_subsystem +EXPORT_SYMBOL fs/configfs/configfs 0x6760555f config_item_init_type_name +EXPORT_SYMBOL fs/configfs/configfs 0x93175453 config_group_find_item +EXPORT_SYMBOL fs/configfs/configfs 0x97375832 config_item_init +EXPORT_SYMBOL fs/configfs/configfs 0xf4b79ca9 configfs_depend_item +EXPORT_SYMBOL fs/exofs/libore 0x011500ad ore_calc_stripe_info +EXPORT_SYMBOL fs/exofs/libore 0x1a40bebd ore_get_io_state +EXPORT_SYMBOL fs/exofs/libore 0x28806871 ore_verify_layout +EXPORT_SYMBOL fs/exofs/libore 0x2f2204bf ore_create +EXPORT_SYMBOL fs/exofs/libore 0x3066f6fc ore_get_rw_state +EXPORT_SYMBOL fs/exofs/libore 0x4ab7120d extract_attr_from_ios +EXPORT_SYMBOL fs/exofs/libore 0x604e72a7 ore_remove +EXPORT_SYMBOL fs/exofs/libore 0x7d531c15 ore_put_io_state +EXPORT_SYMBOL fs/exofs/libore 0x9017a92c ore_truncate +EXPORT_SYMBOL fs/exofs/libore 0x9036f5e3 ore_read +EXPORT_SYMBOL fs/exofs/libore 0xa3d2a634 g_attr_logical_length +EXPORT_SYMBOL fs/exofs/libore 0xc1e86479 ore_check_io +EXPORT_SYMBOL fs/exofs/libore 0xd9dac55e ore_write +EXPORT_SYMBOL fs/fscache/fscache 0x07d9b576 fscache_wait_bit_interruptible +EXPORT_SYMBOL fs/fscache/fscache 0x08a27699 __fscache_write_page +EXPORT_SYMBOL fs/fscache/fscache 0x08fe7c53 __fscache_uncache_page +EXPORT_SYMBOL fs/fscache/fscache 0x0ff00583 fscache_mark_page_cached +EXPORT_SYMBOL fs/fscache/fscache 0x2323ecea __fscache_wait_on_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x33a5681d __fscache_maybe_release_page +EXPORT_SYMBOL fs/fscache/fscache 0x3589092f fscache_mark_pages_cached +EXPORT_SYMBOL fs/fscache/fscache 0x3815b03d fscache_check_aux +EXPORT_SYMBOL fs/fscache/fscache 0x3b8a4749 fscache_init_cache +EXPORT_SYMBOL fs/fscache/fscache 0x3fc23318 fscache_wait_bit +EXPORT_SYMBOL fs/fscache/fscache 0x4bd9a4f9 __fscache_read_or_alloc_pages +EXPORT_SYMBOL fs/fscache/fscache 0x5690af6f __fscache_check_page_write +EXPORT_SYMBOL fs/fscache/fscache 0x5a0c389f __fscache_attr_changed +EXPORT_SYMBOL fs/fscache/fscache 0x6ef9011f fscache_op_complete +EXPORT_SYMBOL fs/fscache/fscache 0x745232bc __fscache_unregister_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x74530ecd fscache_op_debug_id +EXPORT_SYMBOL fs/fscache/fscache 0x74b48a46 fscache_withdraw_cache +EXPORT_SYMBOL fs/fscache/fscache 0x758aa1c5 __fscache_relinquish_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x7935a530 __fscache_update_cookie +EXPORT_SYMBOL fs/fscache/fscache 0x7a7f13d7 __fscache_register_netfs +EXPORT_SYMBOL fs/fscache/fscache 0x7f4a408a fscache_object_lookup_negative +EXPORT_SYMBOL fs/fscache/fscache 0x86f8894f fscache_object_states +EXPORT_SYMBOL fs/fscache/fscache 0x89e23983 fscache_io_error +EXPORT_SYMBOL fs/fscache/fscache 0x8a8ec8d5 fscache_enqueue_operation +EXPORT_SYMBOL fs/fscache/fscache 0x97420e78 fscache_add_cache +EXPORT_SYMBOL fs/fscache/fscache 0x979ced81 __fscache_read_or_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0x9f63748d __fscache_wait_on_invalidate +EXPORT_SYMBOL fs/fscache/fscache 0xb19c779b fscache_fsdef_index +EXPORT_SYMBOL fs/fscache/fscache 0xbf79f7ac fscache_obtained_object +EXPORT_SYMBOL fs/fscache/fscache 0xcceb3c43 fscache_object_work_func +EXPORT_SYMBOL fs/fscache/fscache 0xceba286e __fscache_acquire_cookie +EXPORT_SYMBOL fs/fscache/fscache 0xdad876f2 __fscache_uncache_all_inode_pages +EXPORT_SYMBOL fs/fscache/fscache 0xdd9a55a1 fscache_put_operation +EXPORT_SYMBOL fs/fscache/fscache 0xe74bdba6 fscache_cache_cleared_wq +EXPORT_SYMBOL fs/fscache/fscache 0xf6038799 __fscache_alloc_page +EXPORT_SYMBOL fs/fscache/fscache 0xfac3e943 __fscache_invalidate +EXPORT_SYMBOL fs/nfsd/nfsd 0x13d93eda nfs4_acl_posix_to_nfsv4 +EXPORT_SYMBOL fs/nfsd/nfsd 0x2095976a nfs4_acl_new +EXPORT_SYMBOL fs/nfsd/nfsd 0x35e33c1e nfs4_acl_write_who +EXPORT_SYMBOL fs/nfsd/nfsd 0x5a157ae4 nfs4_acl_get_whotype +EXPORT_SYMBOL fs/nfsd/nfsd 0x83585203 nfs4_acl_nfsv4_to_posix +EXPORT_SYMBOL fs/ocfs2/cluster/ocfs2_nodemanager 0xbfd7d7a2 o2hb_global_heartbeat_active +EXPORT_SYMBOL fs/quota/quota_tree 0x5b72aec1 qtree_delete_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0x903d3372 qtree_entry_unused +EXPORT_SYMBOL fs/quota/quota_tree 0xd843806e qtree_write_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xf6601cbb qtree_read_dquot +EXPORT_SYMBOL fs/quota/quota_tree 0xff023586 qtree_release_dquot +EXPORT_SYMBOL lib/cordic 0x434bfd07 cordic_calc_iq +EXPORT_SYMBOL lib/crc-ccitt 0x1a703ba1 crc_ccitt +EXPORT_SYMBOL lib/crc-ccitt 0x75811312 crc_ccitt_table +EXPORT_SYMBOL lib/crc-itu-t 0x6d356209 crc_itu_t +EXPORT_SYMBOL lib/crc-itu-t 0xd29b009f crc_itu_t_table +EXPORT_SYMBOL lib/crc7 0x6c1f6fee crc7 +EXPORT_SYMBOL lib/crc7 0xd80c3603 crc7_syndrome_table +EXPORT_SYMBOL lib/crc8 0xab9ad613 crc8_populate_lsb +EXPORT_SYMBOL lib/crc8 0xd09b2cba crc8 +EXPORT_SYMBOL lib/crc8 0xd4534d80 crc8_populate_msb +EXPORT_SYMBOL lib/libcrc32c 0x27000b29 crc32c +EXPORT_SYMBOL lib/lru_cache 0x0d142dea lc_is_used +EXPORT_SYMBOL lib/lru_cache 0x4bde76ad lc_find +EXPORT_SYMBOL lib/lru_cache 0x4c3b89f9 lc_get +EXPORT_SYMBOL lib/lru_cache 0x6318e6cf lc_seq_dump_details +EXPORT_SYMBOL lib/lru_cache 0x63e9d900 lc_put +EXPORT_SYMBOL lib/lru_cache 0x645a7756 lc_committed +EXPORT_SYMBOL lib/lru_cache 0x94dca844 lc_set +EXPORT_SYMBOL lib/lru_cache 0x9684bdc9 lc_index_of +EXPORT_SYMBOL lib/lru_cache 0xa11372c3 lc_reset +EXPORT_SYMBOL lib/lru_cache 0xb717bddd lc_try_lock +EXPORT_SYMBOL lib/lru_cache 0xc5424321 lc_del +EXPORT_SYMBOL lib/lru_cache 0xcb1419b5 lc_seq_printf_stats +EXPORT_SYMBOL lib/lru_cache 0xceda4d8d lc_destroy +EXPORT_SYMBOL lib/lru_cache 0xd13109cc lc_create +EXPORT_SYMBOL lib/lru_cache 0xfdd6a93a lc_element_by_index +EXPORT_SYMBOL lib/lru_cache 0xff65355b lc_try_get +EXPORT_SYMBOL lib/raid6/raid6_pq 0x0bd662f6 raid6_gfmul +EXPORT_SYMBOL lib/raid6/raid6_pq 0x15fe0cd3 raid6_gfexp +EXPORT_SYMBOL lib/raid6/raid6_pq 0x5ba93f9d raid6_gfinv +EXPORT_SYMBOL lib/raid6/raid6_pq 0xb0d904b7 raid6_empty_zero_page +EXPORT_SYMBOL lib/raid6/raid6_pq 0xce45a6f1 raid6_gfexi +EXPORT_SYMBOL lib/raid6/raid6_pq 0xd9e91f83 raid6_vgfmul +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x315c65fd zlib_deflateInit2 +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0x48034724 zlib_deflateReset +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xaf64ad0d zlib_deflate +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xe9f7149c zlib_deflate_workspacesize +EXPORT_SYMBOL lib/zlib_deflate/zlib_deflate 0xf741c793 zlib_deflateEnd +EXPORT_SYMBOL net/802/p8022 0x6e945663 register_8022_client +EXPORT_SYMBOL net/802/p8022 0x9220e9ae unregister_8022_client +EXPORT_SYMBOL net/802/p8023 0x2c8a444e make_8023_client +EXPORT_SYMBOL net/802/p8023 0x4de01a65 destroy_8023_client +EXPORT_SYMBOL net/802/psnap 0x716019b0 unregister_snap_client +EXPORT_SYMBOL net/802/psnap 0x7ceabb45 register_snap_client +EXPORT_SYMBOL net/9p/9pnet 0x064d35ef p9_client_begin_disconnect +EXPORT_SYMBOL net/9p/9pnet 0x067d57d4 p9_client_mknod_dotl +EXPORT_SYMBOL net/9p/9pnet 0x11ce6ed4 v9fs_register_trans +EXPORT_SYMBOL net/9p/9pnet 0x21f4bb16 p9_client_readlink +EXPORT_SYMBOL net/9p/9pnet 0x2ab90ed8 p9_client_getattr_dotl +EXPORT_SYMBOL net/9p/9pnet 0x2c0c75f4 p9_client_rename +EXPORT_SYMBOL net/9p/9pnet 0x35d1e27e p9_idpool_get +EXPORT_SYMBOL net/9p/9pnet 0x3aeaa2d6 p9_parse_header +EXPORT_SYMBOL net/9p/9pnet 0x3d73a797 p9_errstr2errno +EXPORT_SYMBOL net/9p/9pnet 0x4374efd9 p9_tag_lookup +EXPORT_SYMBOL net/9p/9pnet 0x442340fb v9fs_get_trans_by_name +EXPORT_SYMBOL net/9p/9pnet 0x4dc2a2fd p9_client_attach +EXPORT_SYMBOL net/9p/9pnet 0x4f1df47f v9fs_get_default_trans +EXPORT_SYMBOL net/9p/9pnet 0x4fd2e3f4 p9_client_link +EXPORT_SYMBOL net/9p/9pnet 0x54fd2537 p9_payload_gup +EXPORT_SYMBOL net/9p/9pnet 0x60acdfa8 p9_client_readdir +EXPORT_SYMBOL net/9p/9pnet 0x6251f577 p9_client_read +EXPORT_SYMBOL net/9p/9pnet 0x694d34d2 p9_release_pages +EXPORT_SYMBOL net/9p/9pnet 0x70f356d1 p9_client_renameat +EXPORT_SYMBOL net/9p/9pnet 0x73f90354 p9_client_setattr +EXPORT_SYMBOL net/9p/9pnet 0x755eff36 p9_client_destroy +EXPORT_SYMBOL net/9p/9pnet 0x7a9fab0f p9_client_statfs +EXPORT_SYMBOL net/9p/9pnet 0x7f53dc3b p9_client_fsync +EXPORT_SYMBOL net/9p/9pnet 0x81c2b133 p9_client_clunk +EXPORT_SYMBOL net/9p/9pnet 0x83dde45d p9_client_write +EXPORT_SYMBOL net/9p/9pnet 0x8852b035 p9_is_proto_dotl +EXPORT_SYMBOL net/9p/9pnet 0x8f4ccefe p9_client_open +EXPORT_SYMBOL net/9p/9pnet 0x9493d71b p9_is_proto_dotu +EXPORT_SYMBOL net/9p/9pnet 0x96a509a2 p9_client_cb +EXPORT_SYMBOL net/9p/9pnet 0x977a0030 p9_nr_pages +EXPORT_SYMBOL net/9p/9pnet 0x9a27ca76 p9_client_wstat +EXPORT_SYMBOL net/9p/9pnet 0x9c964743 p9stat_free +EXPORT_SYMBOL net/9p/9pnet 0xa54ddc4f p9_client_create +EXPORT_SYMBOL net/9p/9pnet 0xaddbb035 p9dirent_read +EXPORT_SYMBOL net/9p/9pnet 0xbd415e24 p9_client_mkdir_dotl +EXPORT_SYMBOL net/9p/9pnet 0xbecda4f7 p9_client_lock_dotl +EXPORT_SYMBOL net/9p/9pnet 0xc5db54a9 p9_idpool_destroy +EXPORT_SYMBOL net/9p/9pnet 0xcbb94fac p9_client_walk +EXPORT_SYMBOL net/9p/9pnet 0xd3d1b1bc p9_client_create_dotl +EXPORT_SYMBOL net/9p/9pnet 0xd58b959f p9_client_remove +EXPORT_SYMBOL net/9p/9pnet 0xe1207ffc p9stat_read +EXPORT_SYMBOL net/9p/9pnet 0xe3a29369 p9_client_stat +EXPORT_SYMBOL net/9p/9pnet 0xe58a3360 p9_error_init +EXPORT_SYMBOL net/9p/9pnet 0xe709fefa p9_client_disconnect +EXPORT_SYMBOL net/9p/9pnet 0xe90f5adb p9_client_fcreate +EXPORT_SYMBOL net/9p/9pnet 0xec5df929 p9_client_unlinkat +EXPORT_SYMBOL net/9p/9pnet 0xeeb31ee1 v9fs_unregister_trans +EXPORT_SYMBOL net/9p/9pnet 0xf4a111d8 p9_idpool_create +EXPORT_SYMBOL net/9p/9pnet 0xf6631f2e p9_client_getlock_dotl +EXPORT_SYMBOL net/9p/9pnet 0xf84f2022 p9_idpool_put +EXPORT_SYMBOL net/9p/9pnet 0xfd40c79d p9_idpool_check +EXPORT_SYMBOL net/9p/9pnet 0xff5fd41d p9_client_symlink +EXPORT_SYMBOL net/appletalk/appletalk 0x28a61b4f atalk_find_dev_addr +EXPORT_SYMBOL net/appletalk/appletalk 0x3a7cbf0c aarp_send_ddp +EXPORT_SYMBOL net/appletalk/appletalk 0xe68a85f9 alloc_ltalkdev +EXPORT_SYMBOL net/appletalk/appletalk 0xfae0f377 atrtr_get_dev +EXPORT_SYMBOL net/atm/atm 0x141fb572 deregister_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x21c47b50 atm_init_aal5 +EXPORT_SYMBOL net/atm/atm 0x25ff5f56 atm_dev_signal_change +EXPORT_SYMBOL net/atm/atm 0x2cc2d52d vcc_hash +EXPORT_SYMBOL net/atm/atm 0x377399d3 vcc_process_recv_queue +EXPORT_SYMBOL net/atm/atm 0x529a5b65 vcc_insert_socket +EXPORT_SYMBOL net/atm/atm 0x5ca19815 atm_charge +EXPORT_SYMBOL net/atm/atm 0x7c0d3859 atm_dev_release_vccs +EXPORT_SYMBOL net/atm/atm 0x7cc780b2 atm_dev_register +EXPORT_SYMBOL net/atm/atm 0x93136f41 vcc_sklist_lock +EXPORT_SYMBOL net/atm/atm 0x9c248e53 register_atm_ioctl +EXPORT_SYMBOL net/atm/atm 0x9feaf287 sonet_subtract_stats +EXPORT_SYMBOL net/atm/atm 0xaa024146 sonet_copy_stats +EXPORT_SYMBOL net/atm/atm 0xbfa35711 vcc_release_async +EXPORT_SYMBOL net/atm/atm 0xc3585a30 atm_proc_root +EXPORT_SYMBOL net/atm/atm 0xc38d9252 atm_alloc_charge +EXPORT_SYMBOL net/atm/atm 0xd5b1ca48 atm_dev_deregister +EXPORT_SYMBOL net/atm/atm 0xf49bc67a atm_pcr_goal +EXPORT_SYMBOL net/atm/atm 0xfc57453f atm_dev_lookup +EXPORT_SYMBOL net/ax25/ax25 0x026c1368 ax25_display_timer +EXPORT_SYMBOL net/ax25/ax25 0x13e0d5e8 ax25_findbyuid +EXPORT_SYMBOL net/ax25/ax25 0x152304d1 ax25_find_cb +EXPORT_SYMBOL net/ax25/ax25 0x242852b9 ax25_uid_policy +EXPORT_SYMBOL net/ax25/ax25 0x3d85478d ax25_linkfail_release +EXPORT_SYMBOL net/ax25/ax25 0x4502c65a asc2ax +EXPORT_SYMBOL net/ax25/ax25 0x475f02c3 ax25_send_frame +EXPORT_SYMBOL net/ax25/ax25 0x53dea1ff ax2asc +EXPORT_SYMBOL net/ax25/ax25 0x5c24b335 ax25_linkfail_register +EXPORT_SYMBOL net/ax25/ax25 0x8ede9e26 ax25_protocol_release +EXPORT_SYMBOL net/ax25/ax25 0x90892d1b ax25_header_ops +EXPORT_SYMBOL net/ax25/ax25 0x9e661536 ax25_hard_header +EXPORT_SYMBOL net/ax25/ax25 0xad32c062 ax25_rebuild_header +EXPORT_SYMBOL net/ax25/ax25 0xb8e075fb ax25_listen_register +EXPORT_SYMBOL net/ax25/ax25 0xc1444946 ax25cmp +EXPORT_SYMBOL net/ax25/ax25 0xcf95d4f3 ax25_listen_release +EXPORT_SYMBOL net/ax25/ax25 0xd43ecbf1 null_ax25_address +EXPORT_SYMBOL net/bluetooth/bluetooth 0x08049671 hci_recv_stream_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x08bae141 bt_sock_poll +EXPORT_SYMBOL net/bluetooth/bluetooth 0x0c7b8fa5 hci_free_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x1583e695 bt_sock_ioctl +EXPORT_SYMBOL net/bluetooth/bluetooth 0x18124533 hci_conn_security +EXPORT_SYMBOL net/bluetooth/bluetooth 0x26025f74 hci_unregister_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x363f1253 hci_recv_fragment +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3e3edf03 hci_resume_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x3f9b38d6 hci_send_cmd +EXPORT_SYMBOL net/bluetooth/bluetooth 0x43ee704b bt_sock_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0x440fc3d6 hci_conn_check_secure +EXPORT_SYMBOL net/bluetooth/bluetooth 0x4ca02e24 hci_alloc_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x5810e415 bt_sock_register +EXPORT_SYMBOL net/bluetooth/bluetooth 0x6c0e9d1b bt_accept_dequeue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x72b18c1a hci_recv_frame +EXPORT_SYMBOL net/bluetooth/bluetooth 0x7c640527 bt_info +EXPORT_SYMBOL net/bluetooth/bluetooth 0x80f22700 bt_sock_stream_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x818188f9 hci_register_cb +EXPORT_SYMBOL net/bluetooth/bluetooth 0x849bd345 bt_accept_enqueue +EXPORT_SYMBOL net/bluetooth/bluetooth 0x85d75ca4 bt_sock_reclassify_lock +EXPORT_SYMBOL net/bluetooth/bluetooth 0x91c9a325 bt_to_errno +EXPORT_SYMBOL net/bluetooth/bluetooth 0x938c7fac bt_sock_recvmsg +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9c7703b6 hci_suspend_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0x9eaec4fa bt_accept_unlink +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa09d3a64 hci_register_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa64d1e56 hci_conn_switch_role +EXPORT_SYMBOL net/bluetooth/bluetooth 0xa6d6dc88 bt_procfs_cleanup +EXPORT_SYMBOL net/bluetooth/bluetooth 0xb61a0c3b bt_err +EXPORT_SYMBOL net/bluetooth/bluetooth 0xc4d3a1c8 hci_unregister_dev +EXPORT_SYMBOL net/bluetooth/bluetooth 0xcc1fb551 baswap +EXPORT_SYMBOL net/bluetooth/bluetooth 0xd84e758f hci_conn_put_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xdcacbf9f bt_sock_wait_state +EXPORT_SYMBOL net/bluetooth/bluetooth 0xdf7d3aa7 hci_conn_hold_device +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe5fa1669 hci_get_route +EXPORT_SYMBOL net/bluetooth/bluetooth 0xe9054730 bt_procfs_init +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf19294db bt_sock_unregister +EXPORT_SYMBOL net/bluetooth/bluetooth 0xf77dfd2f bt_sock_link +EXPORT_SYMBOL net/bridge/bridge 0x70d6943b br_should_route_hook +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x690c0b2c ebt_register_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0x7d1b74c7 ebt_unregister_table +EXPORT_SYMBOL net/bridge/netfilter/ebtables 0xfb770578 ebt_do_table +EXPORT_SYMBOL net/caif/caif 0x02c12fff caif_enroll_dev +EXPORT_SYMBOL net/caif/caif 0x0447cf22 get_cfcnfg +EXPORT_SYMBOL net/caif/caif 0x1446b60a caif_client_register_refcnt +EXPORT_SYMBOL net/caif/caif 0x2a09f713 cfpkt_fromnative +EXPORT_SYMBOL net/caif/caif 0x2ac95161 caif_connect_client +EXPORT_SYMBOL net/caif/caif 0x329dbd06 cfpkt_info +EXPORT_SYMBOL net/caif/caif 0x38701a7c cfcnfg_del_phy_layer +EXPORT_SYMBOL net/caif/caif 0x4a237e57 cfpkt_tonative +EXPORT_SYMBOL net/caif/caif 0x6a44fc70 cfpkt_extr_head +EXPORT_SYMBOL net/caif/caif 0x839ddb7b cfcnfg_set_phy_state +EXPORT_SYMBOL net/caif/caif 0x966d7de2 cfpkt_add_head +EXPORT_SYMBOL net/caif/caif 0x9e3e305d cfpkt_set_prio +EXPORT_SYMBOL net/caif/caif 0xafa1348d cfcnfg_add_phy_layer +EXPORT_SYMBOL net/caif/caif 0xb7b6874e caif_free_client +EXPORT_SYMBOL net/caif/caif 0xfb7e4944 caif_disconnect_client +EXPORT_SYMBOL net/can/can 0x602a421f can_rx_register +EXPORT_SYMBOL net/can/can 0x6b69b1d7 can_ioctl +EXPORT_SYMBOL net/can/can 0xb4f28746 can_rx_unregister +EXPORT_SYMBOL net/can/can 0xc0a1f5b9 can_proto_register +EXPORT_SYMBOL net/can/can 0xc2192635 can_send +EXPORT_SYMBOL net/can/can 0xf43b6682 can_proto_unregister +EXPORT_SYMBOL net/ceph/libceph 0x09290ab3 ceph_debugfs_init +EXPORT_SYMBOL net/ceph/libceph 0x0a24ab47 ceph_osdc_wait_request +EXPORT_SYMBOL net/ceph/libceph 0x0bd5dcf4 ceph_calc_pg_primary +EXPORT_SYMBOL net/ceph/libceph 0x0d61c270 ceph_pagelist_set_cursor +EXPORT_SYMBOL net/ceph/libceph 0x0e67054a ceph_osdc_start_request +EXPORT_SYMBOL net/ceph/libceph 0x16e41ee8 ceph_osdc_wait_event +EXPORT_SYMBOL net/ceph/libceph 0x1957ec71 ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x197effcb ceph_osdc_release_request +EXPORT_SYMBOL net/ceph/libceph 0x1c0d45b2 ceph_copy_user_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x1c465da2 ceph_osdc_readpages +EXPORT_SYMBOL net/ceph/libceph 0x1ed194c8 ceph_copy_from_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x22f84f31 ceph_destroy_client +EXPORT_SYMBOL net/ceph/libceph 0x2699a4f7 ceph_con_init +EXPORT_SYMBOL net/ceph/libceph 0x29212a50 ceph_msg_new +EXPORT_SYMBOL net/ceph/libceph 0x2b10d4ba ceph_messenger_init +EXPORT_SYMBOL net/ceph/libceph 0x3072004a ceph_get_direct_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x334ad9d0 ceph_osdc_alloc_request +EXPORT_SYMBOL net/ceph/libceph 0x37cdba2c ceph_osdc_new_request +EXPORT_SYMBOL net/ceph/libceph 0x3abec91f ceph_pr_addr +EXPORT_SYMBOL net/ceph/libceph 0x4205ffd7 ceph_destroy_options +EXPORT_SYMBOL net/ceph/libceph 0x4236a800 ceph_auth_is_authenticated +EXPORT_SYMBOL net/ceph/libceph 0x43e458f6 ceph_file_part +EXPORT_SYMBOL net/ceph/libceph 0x4658268b ceph_calc_raw_layout +EXPORT_SYMBOL net/ceph/libceph 0x47b2e6c1 ceph_monc_create_snapid +EXPORT_SYMBOL net/ceph/libceph 0x4a283545 ceph_pagelist_release +EXPORT_SYMBOL net/ceph/libceph 0x50c29f3b ceph_pg_pool_name_by_id +EXPORT_SYMBOL net/ceph/libceph 0x5157acc7 ceph_auth_invalidate_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x5379cea3 ceph_caps_for_mode +EXPORT_SYMBOL net/ceph/libceph 0x570ceb67 ceph_buffer_new +EXPORT_SYMBOL net/ceph/libceph 0x57147b3c ceph_monc_open_session +EXPORT_SYMBOL net/ceph/libceph 0x57665a85 ceph_con_close +EXPORT_SYMBOL net/ceph/libceph 0x57baf885 ceph_str_hash +EXPORT_SYMBOL net/ceph/libceph 0x63758856 ceph_str_hash_name +EXPORT_SYMBOL net/ceph/libceph 0x65091f9d ceph_put_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x6a2a4276 ceph_zero_page_vector_range +EXPORT_SYMBOL net/ceph/libceph 0x6c21ba53 ceph_osdc_init +EXPORT_SYMBOL net/ceph/libceph 0x6f015f2c ceph_osdc_create_event +EXPORT_SYMBOL net/ceph/libceph 0x6fe9e8de ceph_osdc_put_event +EXPORT_SYMBOL net/ceph/libceph 0x6feeba0b ceph_osdc_unregister_linger_request +EXPORT_SYMBOL net/ceph/libceph 0x7168baf8 ceph_pagelist_free_reserve +EXPORT_SYMBOL net/ceph/libceph 0x74128215 __ceph_open_session +EXPORT_SYMBOL net/ceph/libceph 0x77387d85 ceph_monc_got_mdsmap +EXPORT_SYMBOL net/ceph/libceph 0x77692acb ceph_msg_last_put +EXPORT_SYMBOL net/ceph/libceph 0x7b27e94b ceph_auth_update_authorizer +EXPORT_SYMBOL net/ceph/libceph 0x7bb2728d ceph_pg_poolid_by_name +EXPORT_SYMBOL net/ceph/libceph 0x7c16240b ceph_osdc_writepages +EXPORT_SYMBOL net/ceph/libceph 0x7cc387b7 ceph_osdc_cancel_event +EXPORT_SYMBOL net/ceph/libceph 0x7f015514 ceph_alloc_page_vector +EXPORT_SYMBOL net/ceph/libceph 0x81cbb997 ceph_calc_file_object_mapping +EXPORT_SYMBOL net/ceph/libceph 0x81eae1b6 ceph_pagelist_append +EXPORT_SYMBOL net/ceph/libceph 0x838aaefb ceph_create_client +EXPORT_SYMBOL net/ceph/libceph 0x87637e92 ceph_check_fsid +EXPORT_SYMBOL net/ceph/libceph 0x87b33327 ceph_calc_object_layout +EXPORT_SYMBOL net/ceph/libceph 0x8b9414fa ceph_msg_dump +EXPORT_SYMBOL net/ceph/libceph 0x964bb334 ceph_osdc_build_request +EXPORT_SYMBOL net/ceph/libceph 0x9aa3e93c ceph_con_send +EXPORT_SYMBOL net/ceph/libceph 0x9f534f4d ceph_buffer_release +EXPORT_SYMBOL net/ceph/libceph 0xa72a1448 ceph_monc_stop +EXPORT_SYMBOL net/ceph/libceph 0xaba2c454 ceph_client_id +EXPORT_SYMBOL net/ceph/libceph 0xafb8a407 ceph_msgr_flush +EXPORT_SYMBOL net/ceph/libceph 0xb54676fa ceph_msg_type_name +EXPORT_SYMBOL net/ceph/libceph 0xb6081d6d ceph_msgr_exit +EXPORT_SYMBOL net/ceph/libceph 0xbe449187 ceph_copy_page_vector_to_user +EXPORT_SYMBOL net/ceph/libceph 0xc10909b5 ceph_release_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xc2b5891e ceph_auth_verify_authorizer_reply +EXPORT_SYMBOL net/ceph/libceph 0xc4a80955 ceph_debugfs_cleanup +EXPORT_SYMBOL net/ceph/libceph 0xc55de604 ceph_parse_options +EXPORT_SYMBOL net/ceph/libceph 0xc586690a ceph_monc_validate_auth +EXPORT_SYMBOL net/ceph/libceph 0xc9f82b38 ceph_msgr_init +EXPORT_SYMBOL net/ceph/libceph 0xcb50a624 ceph_parse_ips +EXPORT_SYMBOL net/ceph/libceph 0xcdec855c ceph_auth_destroy_authorizer +EXPORT_SYMBOL net/ceph/libceph 0xcf3b592b ceph_auth_create_authorizer +EXPORT_SYMBOL net/ceph/libceph 0xd119f3f7 ceph_compare_options +EXPORT_SYMBOL net/ceph/libceph 0xd2c107bb ceph_flags_to_mode +EXPORT_SYMBOL net/ceph/libceph 0xd3397738 ceph_monc_do_statfs +EXPORT_SYMBOL net/ceph/libceph 0xd4140d35 ceph_osdc_set_request_linger +EXPORT_SYMBOL net/ceph/libceph 0xdd26dbd9 ceph_copy_to_page_vector +EXPORT_SYMBOL net/ceph/libceph 0xed229339 ceph_pagelist_reserve +EXPORT_SYMBOL net/ceph/libceph 0xf45b79d2 ceph_osdc_sync +EXPORT_SYMBOL net/ceph/libceph 0xf5774cba ceph_pagelist_truncate +EXPORT_SYMBOL net/ceph/libceph 0xf6e97368 ceph_con_open +EXPORT_SYMBOL net/ceph/libceph 0xf99f1319 ceph_osdc_stop +EXPORT_SYMBOL net/ceph/libceph 0xfb5311db ceph_con_keepalive +EXPORT_SYMBOL net/ceph/libceph 0xfea1e4fe ceph_monc_init +EXPORT_SYMBOL net/dccp/dccp_ipv4 0xbc6ce4ed dccp_syn_ack_timeout +EXPORT_SYMBOL net/ieee802154/ieee802154 0x1f650ffe wpan_phy_alloc +EXPORT_SYMBOL net/ieee802154/ieee802154 0x5cd958ab ieee802154_nl_assoc_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0x60a2b647 wpan_phy_unregister +EXPORT_SYMBOL net/ieee802154/ieee802154 0x71200aeb ieee802154_nl_start_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0xb066e58e wpan_phy_for_each +EXPORT_SYMBOL net/ieee802154/ieee802154 0xb26876fb ieee802154_nl_beacon_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xb7c422b5 wpan_phy_free +EXPORT_SYMBOL net/ieee802154/ieee802154 0xbe7c35cc ieee802154_nl_scan_confirm +EXPORT_SYMBOL net/ieee802154/ieee802154 0xde210844 ieee802154_nl_disassoc_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xe56efcff ieee802154_nl_assoc_indic +EXPORT_SYMBOL net/ieee802154/ieee802154 0xe6a4b520 wpan_phy_register +EXPORT_SYMBOL net/ieee802154/ieee802154 0xf5b99f39 wpan_phy_find +EXPORT_SYMBOL net/ieee802154/ieee802154 0xfb0a6453 ieee802154_nl_disassoc_confirm +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0x3e148d23 arpt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xc9cabfbf arpt_unregister_table +EXPORT_SYMBOL net/ipv4/netfilter/arp_tables 0xcaa3bdea arpt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0x89f172db ipt_register_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xb2c8686f ipt_do_table +EXPORT_SYMBOL net/ipv4/netfilter/ip_tables 0xc7164bce ipt_unregister_table +EXPORT_SYMBOL net/ipv4/tunnel4 0x81f7b068 xfrm4_tunnel_register +EXPORT_SYMBOL net/ipv4/tunnel4 0x8894e290 xfrm4_tunnel_deregister +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x36322500 ip6_tnl_parse_tlv_enc_lim +EXPORT_SYMBOL net/ipv6/ip6_tunnel 0x54ed89e5 ip6_tnl_get_cap +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x0cb646b5 ip6t_register_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x3985f07a ip6t_unregister_table +EXPORT_SYMBOL net/ipv6/netfilter/ip6_tables 0x9ff6862d ip6t_do_table +EXPORT_SYMBOL net/ipv6/tunnel6 0x67ce2154 xfrm6_tunnel_deregister +EXPORT_SYMBOL net/ipv6/tunnel6 0x9113961d xfrm6_tunnel_register +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xe3f850a5 xfrm6_tunnel_spi_lookup +EXPORT_SYMBOL net/ipv6/xfrm6_tunnel 0xfbc44f56 xfrm6_tunnel_alloc_spi +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x063ae3f4 ircomm_disconnect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x77f5d413 ircomm_data_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x7c2c2442 ircomm_control_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0x908e38ad ircomm_flow_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xa18dcd65 ircomm_close +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xcdf1ac4e ircomm_connect_request +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xdd0bd9e8 ircomm_open +EXPORT_SYMBOL net/irda/ircomm/ircomm 0xed2124e2 ircomm_connect_response +EXPORT_SYMBOL net/irda/irda 0x03f0d384 irlap_close +EXPORT_SYMBOL net/irda/irda 0x05047d8d async_unwrap_char +EXPORT_SYMBOL net/irda/irda 0x06a3ee58 irias_new_integer_value +EXPORT_SYMBOL net/irda/irda 0x07d3647c irlmp_register_service +EXPORT_SYMBOL net/irda/irda 0x09f58a8b hashbin_lock_find +EXPORT_SYMBOL net/irda/irda 0x0faea048 irttp_flow_request +EXPORT_SYMBOL net/irda/irda 0x1e6bbb14 async_wrap_skb +EXPORT_SYMBOL net/irda/irda 0x2036ad06 irda_param_insert +EXPORT_SYMBOL net/irda/irda 0x26e6b539 irias_add_string_attrib +EXPORT_SYMBOL net/irda/irda 0x2d1105fe irttp_dup +EXPORT_SYMBOL net/irda/irda 0x32a91ebe irlmp_connect_request +EXPORT_SYMBOL net/irda/irda 0x3b6d5f65 hashbin_remove_this +EXPORT_SYMBOL net/irda/irda 0x3edec915 irttp_data_request +EXPORT_SYMBOL net/irda/irda 0x42a9904d irias_delete_object +EXPORT_SYMBOL net/irda/irda 0x42c625d7 irlmp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x448b8aaa irda_qos_bits_to_value +EXPORT_SYMBOL net/irda/irda 0x45aaeffa irlmp_connect_response +EXPORT_SYMBOL net/irda/irda 0x46c1c4a2 irlmp_unregister_service +EXPORT_SYMBOL net/irda/irda 0x4910a85e alloc_irdadev +EXPORT_SYMBOL net/irda/irda 0x615ee918 irias_new_object +EXPORT_SYMBOL net/irda/irda 0x630da552 irttp_connect_response +EXPORT_SYMBOL net/irda/irda 0x66ef7db3 irias_add_integer_attrib +EXPORT_SYMBOL net/irda/irda 0x6b043eba irda_init_max_qos_capabilies +EXPORT_SYMBOL net/irda/irda 0x6c503c58 irda_device_set_media_busy +EXPORT_SYMBOL net/irda/irda 0x7042bc54 irlmp_register_client +EXPORT_SYMBOL net/irda/irda 0x73339a54 irlmp_data_request +EXPORT_SYMBOL net/irda/irda 0x763e54a4 irlmp_unregister_client +EXPORT_SYMBOL net/irda/irda 0x76ef9f52 irias_insert_object +EXPORT_SYMBOL net/irda/irda 0x7957f728 irlmp_update_client +EXPORT_SYMBOL net/irda/irda 0x7b9e69b6 iriap_getvaluebyclass_request +EXPORT_SYMBOL net/irda/irda 0x7dabe31e hashbin_remove +EXPORT_SYMBOL net/irda/irda 0x7fb81606 irias_add_octseq_attrib +EXPORT_SYMBOL net/irda/irda 0x86b5f4ce hashbin_delete +EXPORT_SYMBOL net/irda/irda 0x8b69b459 hashbin_get_next +EXPORT_SYMBOL net/irda/irda 0x8b7167b8 irlmp_close_lsap +EXPORT_SYMBOL net/irda/irda 0x8cf370b2 irttp_disconnect_request +EXPORT_SYMBOL net/irda/irda 0x91815586 irda_param_pack +EXPORT_SYMBOL net/irda/irda 0x993ad14b irda_param_extract_all +EXPORT_SYMBOL net/irda/irda 0x9a388e4d irttp_connect_request +EXPORT_SYMBOL net/irda/irda 0x9dfe205d irlap_open +EXPORT_SYMBOL net/irda/irda 0x9e15c1ff proc_irda +EXPORT_SYMBOL net/irda/irda 0xa4548c32 hashbin_insert +EXPORT_SYMBOL net/irda/irda 0xad66e1db hashbin_get_first +EXPORT_SYMBOL net/irda/irda 0xb9394173 irias_delete_value +EXPORT_SYMBOL net/irda/irda 0xbcd3ef13 irias_object_change_attribute +EXPORT_SYMBOL net/irda/irda 0xbe40ace9 irlmp_discovery_request +EXPORT_SYMBOL net/irda/irda 0xc310cf21 hashbin_new +EXPORT_SYMBOL net/irda/irda 0xc97048d4 irttp_open_tsap +EXPORT_SYMBOL net/irda/irda 0xca430773 irttp_udata_request +EXPORT_SYMBOL net/irda/irda 0xd1ae6745 irias_find_object +EXPORT_SYMBOL net/irda/irda 0xd57045a8 hashbin_find +EXPORT_SYMBOL net/irda/irda 0xd6deeaae irda_setup_dma +EXPORT_SYMBOL net/irda/irda 0xde4c6b3c irlmp_service_to_hint +EXPORT_SYMBOL net/irda/irda 0xe15a80f1 irlmp_open_lsap +EXPORT_SYMBOL net/irda/irda 0xe5d42655 iriap_open +EXPORT_SYMBOL net/irda/irda 0xead50cf8 iriap_close +EXPORT_SYMBOL net/irda/irda 0xedd521c2 irlmp_get_discoveries +EXPORT_SYMBOL net/irda/irda 0xef19b90f irda_notify_init +EXPORT_SYMBOL net/irda/irda 0xfad7b65e irttp_close_tsap +EXPORT_SYMBOL net/l2tp/l2tp_core 0x548279af l2tp_recv_common +EXPORT_SYMBOL net/lapb/lapb 0x1007f244 lapb_register +EXPORT_SYMBOL net/lapb/lapb 0x1da8ba87 lapb_data_received +EXPORT_SYMBOL net/lapb/lapb 0x239db344 lapb_setparms +EXPORT_SYMBOL net/lapb/lapb 0x45bdf8a8 lapb_disconnect_request +EXPORT_SYMBOL net/lapb/lapb 0x47c3e634 lapb_getparms +EXPORT_SYMBOL net/lapb/lapb 0xdbb5d598 lapb_connect_request +EXPORT_SYMBOL net/lapb/lapb 0xe8503d70 lapb_data_request +EXPORT_SYMBOL net/lapb/lapb 0xf10f2e26 lapb_unregister +EXPORT_SYMBOL net/llc/llc 0x15c10afd llc_mac_hdr_init +EXPORT_SYMBOL net/llc/llc 0x16f5a104 llc_sap_find +EXPORT_SYMBOL net/llc/llc 0x38b92846 llc_remove_pack +EXPORT_SYMBOL net/llc/llc 0x42c11420 llc_build_and_send_ui_pkt +EXPORT_SYMBOL net/llc/llc 0x4e526348 llc_set_station_handler +EXPORT_SYMBOL net/llc/llc 0x52d7b2fd llc_sap_list +EXPORT_SYMBOL net/llc/llc 0x5614b3d0 llc_add_pack +EXPORT_SYMBOL net/llc/llc 0x6c6cdb31 llc_sap_list_lock +EXPORT_SYMBOL net/llc/llc 0x8b715e94 llc_sap_open +EXPORT_SYMBOL net/llc/llc 0xf14c55dd llc_sap_close +EXPORT_SYMBOL net/mac80211/mac80211 0x0131f10a ieee80211_iter_keys +EXPORT_SYMBOL net/mac80211/mac80211 0x014def6e __ieee80211_get_rx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x0b18334e ieee80211_proberesp_get +EXPORT_SYMBOL net/mac80211/mac80211 0x0c709506 ieee80211_sched_scan_results +EXPORT_SYMBOL net/mac80211/mac80211 0x0ec1ddb0 ieee80211_restart_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x10646cd8 ieee80211_enable_dyn_ps +EXPORT_SYMBOL net/mac80211/mac80211 0x127d9c90 ieee80211_wake_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x133a146f ieee80211_register_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x15293dbf ieee80211_queue_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0x158974b3 ieee80211_cqm_rssi_notify +EXPORT_SYMBOL net/mac80211/mac80211 0x1a22664b __ieee80211_get_assoc_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x1b34ea8e __ieee80211_get_radio_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x1ffd56af __ieee80211_get_tx_led_name +EXPORT_SYMBOL net/mac80211/mac80211 0x22f320cc ieee80211_sta_set_buffered +EXPORT_SYMBOL net/mac80211/mac80211 0x23f26531 ieee80211_nullfunc_get +EXPORT_SYMBOL net/mac80211/mac80211 0x26cc52eb ieee80211_connection_loss +EXPORT_SYMBOL net/mac80211/mac80211 0x286b3843 ieee80211_queue_work +EXPORT_SYMBOL net/mac80211/mac80211 0x2d418def ieee80211_rate_control_register +EXPORT_SYMBOL net/mac80211/mac80211 0x2deb28ec rate_control_send_low +EXPORT_SYMBOL net/mac80211/mac80211 0x3263867d ieee80211_find_sta +EXPORT_SYMBOL net/mac80211/mac80211 0x3686d6f8 ieee80211_report_low_ack +EXPORT_SYMBOL net/mac80211/mac80211 0x3a70d08b ieee80211_stop_queue +EXPORT_SYMBOL net/mac80211/mac80211 0x3ac12587 ieee80211_pspoll_get +EXPORT_SYMBOL net/mac80211/mac80211 0x403225de ieee80211_disable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0x4402e8f5 ieee80211_tx_status +EXPORT_SYMBOL net/mac80211/mac80211 0x4add529b ieee80211_sta_block_awake +EXPORT_SYMBOL net/mac80211/mac80211 0x4d009ba1 ieee80211_rts_duration +EXPORT_SYMBOL net/mac80211/mac80211 0x50c81c13 ieee80211_free_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x545725db ieee80211_get_buffered_bc +EXPORT_SYMBOL net/mac80211/mac80211 0x5c28cca5 ieee80211_get_tkip_p1k_iv +EXPORT_SYMBOL net/mac80211/mac80211 0x5f065cc3 ieee80211_tx_status_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x60e11ba4 ieee80211_free_txskb +EXPORT_SYMBOL net/mac80211/mac80211 0x658b4647 ieee80211_sta_eosp_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x6c4674a9 ieee80211_rate_control_unregister +EXPORT_SYMBOL net/mac80211/mac80211 0x6df7c336 ieee80211_alloc_hw +EXPORT_SYMBOL net/mac80211/mac80211 0x6f318316 ieee80211_rx +EXPORT_SYMBOL net/mac80211/mac80211 0x6f7c662f ieee80211_scan_completed +EXPORT_SYMBOL net/mac80211/mac80211 0x7344e354 ieee80211_start_tx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0x737b26aa ieee80211_ap_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0x83a24c29 ieee80211_start_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0x8484f8ec ieee80211_queue_delayed_work +EXPORT_SYMBOL net/mac80211/mac80211 0x9af95058 ieee80211_wake_queues +EXPORT_SYMBOL net/mac80211/mac80211 0x9d131518 ieee80211_unregister_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xa0fa0ec7 ieee80211_beacon_get_tim +EXPORT_SYMBOL net/mac80211/mac80211 0xa1202c8b wiphy_to_ieee80211_hw +EXPORT_SYMBOL net/mac80211/mac80211 0xa34e46a6 ieee80211_napi_complete +EXPORT_SYMBOL net/mac80211/mac80211 0xa94a9c84 ieee80211_sched_scan_stopped +EXPORT_SYMBOL net/mac80211/mac80211 0xaa157485 ieee80211_get_tkip_rx_p1k +EXPORT_SYMBOL net/mac80211/mac80211 0xb05f7b86 ieee80211_ctstoself_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xb111de64 ieee80211_rts_get +EXPORT_SYMBOL net/mac80211/mac80211 0xb148d4d1 ieee80211_napi_schedule +EXPORT_SYMBOL net/mac80211/mac80211 0xb2c3a57c ieee80211_chswitch_done +EXPORT_SYMBOL net/mac80211/mac80211 0xb911a2df ieee80211_stop_tx_ba_cb_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xbdd57d8d ieee80211_send_bar +EXPORT_SYMBOL net/mac80211/mac80211 0xc2f52c75 ieee80211_get_tkip_p2k +EXPORT_SYMBOL net/mac80211/mac80211 0xc7e9782e ieee80211_get_key_tx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0xc864ffa4 ieee80211_enable_rssi_reports +EXPORT_SYMBOL net/mac80211/mac80211 0xc9df33dc ieee80211_disable_dyn_ps +EXPORT_SYMBOL net/mac80211/mac80211 0xc9fdac3a ieee80211_probereq_get +EXPORT_SYMBOL net/mac80211/mac80211 0xd0ee304e ieee80211_ctstoself_get +EXPORT_SYMBOL net/mac80211/mac80211 0xddb47d52 ieee80211_get_key_rx_seq +EXPORT_SYMBOL net/mac80211/mac80211 0xe0db5bd8 ieee80211_generic_frame_duration +EXPORT_SYMBOL net/mac80211/mac80211 0xe62438b5 ieee80211_stop_queues +EXPORT_SYMBOL net/mac80211/mac80211 0xee9d7f34 ieee80211_stop_rx_ba_session +EXPORT_SYMBOL net/mac80211/mac80211 0xef0af0be ieee80211_sta_ps_transition +EXPORT_SYMBOL net/mac80211/mac80211 0xef170d48 ieee80211_rx_irqsafe +EXPORT_SYMBOL net/mac80211/mac80211 0xf0e548d5 __ieee80211_create_tpt_led_trigger +EXPORT_SYMBOL net/mac80211/mac80211 0xf27c0e53 ieee80211_beacon_loss +EXPORT_SYMBOL net/mac80211/mac80211 0xf395de03 ieee80211_aes_cmac_calculate_k1_k2 +EXPORT_SYMBOL net/mac80211/mac80211 0xf66af6a8 ieee80211_stop_tx_ba_session +EXPORT_SYMBOL net/mac802154/mac802154 0x127fddfe ieee802154_free_device +EXPORT_SYMBOL net/mac802154/mac802154 0x4207e109 ieee802154_register_device +EXPORT_SYMBOL net/mac802154/mac802154 0x89c780e4 ieee802154_rx_irqsafe +EXPORT_SYMBOL net/mac802154/mac802154 0xb276553c ieee802154_alloc_device +EXPORT_SYMBOL net/mac802154/mac802154 0xede43a90 ieee802154_unregister_device +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x2539e3a5 register_ip_vs_app_inc +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x28bf0347 ip_vs_proto_data_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x34daa87c register_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x553f31c6 unregister_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x555505e5 ip_vs_proto_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x7135c30f ip_vs_nfct_expect_related +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x84b0843d ip_vs_conn_new +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x8cdf90b9 ip_vs_conn_out_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0x9b2de372 unregister_ip_vs_scheduler +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xb2d63384 register_ip_vs_app +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xc26c09a7 ip_vs_tcp_conn_listen +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xc5a5332b ip_vs_conn_in_get +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xd831a1a2 ip_vs_proto_name +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xdce81aab ip_vs_conn_put +EXPORT_SYMBOL net/netfilter/ipvs/ip_vs 0xfe7bd1ae ip_vs_scheduler_err +EXPORT_SYMBOL net/netfilter/nf_conntrack 0x1a2b3e59 nf_conntrack_untracked +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xe3142611 __nf_ct_ext_add_length +EXPORT_SYMBOL net/netfilter/nf_conntrack 0xfd611486 __nf_ct_ext_destroy +EXPORT_SYMBOL net/netfilter/nf_conntrack_proto_gre 0x29028f5d nf_ct_gre_keymap_flush +EXPORT_SYMBOL net/netfilter/nf_nat 0x042a894c nf_xfrm_me_harder +EXPORT_SYMBOL net/netfilter/nf_nat 0x071bc926 __nf_nat_mangle_tcp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x4683da95 nf_nat_mangle_udp_packet +EXPORT_SYMBOL net/netfilter/nf_nat 0x8455e312 nf_nat_setup_info +EXPORT_SYMBOL net/netfilter/nf_nat 0xb7f2ff10 nf_nat_used_tuple +EXPORT_SYMBOL net/netfilter/nf_nat 0xccd64e84 nf_nat_follow_master +EXPORT_SYMBOL net/netfilter/x_tables 0x03bca034 xt_register_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x08c473b7 xt_alloc_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0x1c108390 xt_find_match +EXPORT_SYMBOL net/netfilter/x_tables 0x253e8b44 xt_compat_init_offsets +EXPORT_SYMBOL net/netfilter/x_tables 0x457814db xt_unregister_target +EXPORT_SYMBOL net/netfilter/x_tables 0x7c6521ef xt_unregister_matches +EXPORT_SYMBOL net/netfilter/x_tables 0x8de0dd97 xt_find_target +EXPORT_SYMBOL net/netfilter/x_tables 0xae2a47e6 xt_unregister_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xae4eaff2 xt_unregister_match +EXPORT_SYMBOL net/netfilter/x_tables 0xb28f5ef1 xt_free_table_info +EXPORT_SYMBOL net/netfilter/x_tables 0xbf54953b xt_register_targets +EXPORT_SYMBOL net/netfilter/x_tables 0xdb4fbd12 xt_register_match +EXPORT_SYMBOL net/netfilter/x_tables 0xe8bfe37e xt_register_target +EXPORT_SYMBOL net/nfc/hci/hci 0x1607d8a8 nfc_hci_driver_failure +EXPORT_SYMBOL net/nfc/hci/hci 0x24aa0cf4 nfc_hci_send_event +EXPORT_SYMBOL net/nfc/hci/hci 0x33daa041 nfc_hci_free_device +EXPORT_SYMBOL net/nfc/hci/hci 0x39ae0012 nfc_hci_set_param +EXPORT_SYMBOL net/nfc/hci/hci 0x418ca91c nfc_hci_get_param +EXPORT_SYMBOL net/nfc/hci/hci 0x43028a27 nfc_hci_result_to_errno +EXPORT_SYMBOL net/nfc/hci/hci 0x5bbee178 nfc_hci_send_response +EXPORT_SYMBOL net/nfc/hci/hci 0x5ce4f14a nfc_hci_connect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0x67be9129 nfc_hci_disconnect_all_gates +EXPORT_SYMBOL net/nfc/hci/hci 0x6c55e914 nfc_hci_send_cmd_async +EXPORT_SYMBOL net/nfc/hci/hci 0x7d394513 nfc_hci_get_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0xa4043bb5 nfc_hci_unregister_device +EXPORT_SYMBOL net/nfc/hci/hci 0xa4e769fa nfc_hci_target_discovered +EXPORT_SYMBOL net/nfc/hci/hci 0xaad68515 nfc_hci_allocate_device +EXPORT_SYMBOL net/nfc/hci/hci 0xb47814bf nfc_hci_send_cmd +EXPORT_SYMBOL net/nfc/hci/hci 0xb69bc3a6 nfc_hci_disconnect_gate +EXPORT_SYMBOL net/nfc/hci/hci 0xb9a91d08 nfc_hci_recv_frame +EXPORT_SYMBOL net/nfc/hci/hci 0xbca0b4fd nfc_hci_sak_to_protocol +EXPORT_SYMBOL net/nfc/hci/hci 0xc3f0ae90 nfc_hci_set_clientdata +EXPORT_SYMBOL net/nfc/hci/hci 0xca4a2830 nfc_hci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0x6d1d26a3 nci_recv_frame +EXPORT_SYMBOL net/nfc/nci/nci 0x7dced826 nci_unregister_device +EXPORT_SYMBOL net/nfc/nci/nci 0x9652ce3f nci_allocate_device +EXPORT_SYMBOL net/nfc/nci/nci 0xba490602 nci_to_errno +EXPORT_SYMBOL net/nfc/nci/nci 0xd231d1df nci_register_device +EXPORT_SYMBOL net/nfc/nci/nci 0xd2334aaf nci_free_device +EXPORT_SYMBOL net/nfc/nfc 0x058123a9 nfc_proto_register +EXPORT_SYMBOL net/nfc/nfc 0x27c8b094 nfc_allocate_device +EXPORT_SYMBOL net/nfc/nfc 0x2af684c7 nfc_tm_data_received +EXPORT_SYMBOL net/nfc/nfc 0x321bba79 nfc_proto_unregister +EXPORT_SYMBOL net/nfc/nfc 0x3678eed7 nfc_unregister_device +EXPORT_SYMBOL net/nfc/nfc 0x42f2bab2 nfc_tm_deactivated +EXPORT_SYMBOL net/nfc/nfc 0x671377d9 nfc_dep_link_is_up +EXPORT_SYMBOL net/nfc/nfc 0x6b8a6f0a nfc_class +EXPORT_SYMBOL net/nfc/nfc 0x73233f97 nfc_register_device +EXPORT_SYMBOL net/nfc/nfc 0x7e01c599 nfc_set_remote_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0xa9649035 nfc_target_lost +EXPORT_SYMBOL net/nfc/nfc 0xbf7969b8 nfc_alloc_recv_skb +EXPORT_SYMBOL net/nfc/nfc 0xc4ced98e nfc_get_local_general_bytes +EXPORT_SYMBOL net/nfc/nfc 0xe5222d6a nfc_driver_failure +EXPORT_SYMBOL net/nfc/nfc 0xe98de345 nfc_tm_activated +EXPORT_SYMBOL net/nfc/nfc 0xf38725f9 nfc_targets_found +EXPORT_SYMBOL net/phonet/phonet 0x0fe96c5d phonet_header_ops +EXPORT_SYMBOL net/phonet/phonet 0x1e4a38c5 phonet_stream_ops +EXPORT_SYMBOL net/phonet/phonet 0x66ac7987 pn_skb_send +EXPORT_SYMBOL net/phonet/phonet 0x81639830 pn_sock_get_port +EXPORT_SYMBOL net/phonet/phonet 0xa94d4a1c phonet_proto_unregister +EXPORT_SYMBOL net/phonet/phonet 0xa9588db5 phonet_proto_register +EXPORT_SYMBOL net/phonet/phonet 0xbb82f283 pn_sock_unhash +EXPORT_SYMBOL net/phonet/phonet 0xe5253d37 pn_sock_hash +EXPORT_SYMBOL net/rds/rds 0x7505d413 rds_str_array +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x03464510 rxrpc_kernel_begin_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x112b0533 rxrpc_kernel_send_data +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x23ad2321 rxrpc_kernel_get_abort_code +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x282b6524 rxrpc_kernel_reject_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x2d1ddea3 rxrpc_get_server_data_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x6f031c09 rxrpc_kernel_get_error_number +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x768119ed rxrpc_kernel_intercept_rx_messages +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x79378aee rxrpc_kernel_data_delivered +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9721a25d rxrpc_kernel_accept_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0x9d4d44c2 key_type_rxrpc +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xa53166b6 rxrpc_get_null_key +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xaf99b4ec rxrpc_kernel_free_skb +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xb13597a5 rxrpc_kernel_is_data_last +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xcf53a9b4 rxrpc_kernel_abort_call +EXPORT_SYMBOL net/rxrpc/af-rxrpc 0xe69bc781 rxrpc_kernel_end_call +EXPORT_SYMBOL net/sctp/sctp 0x414883db sctp_do_peeloff +EXPORT_SYMBOL net/sunrpc/sunrpc 0xa68bd8aa svc_pool_stats_open +EXPORT_SYMBOL net/wanrouter/wanrouter 0x0ebe03d1 unregister_wan_device +EXPORT_SYMBOL net/wanrouter/wanrouter 0x88aa3632 register_wan_device +EXPORT_SYMBOL net/wimax/wimax 0x3f861594 wimax_reset +EXPORT_SYMBOL net/wimax/wimax 0xcf6eb22c wimax_rfkill +EXPORT_SYMBOL net/wireless/cfg80211 0x09c64fbd ieee80211_frequency_to_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x0df7fd81 __cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x1727910c ieee80211_data_to_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0x180f320a cfg80211_conn_failed +EXPORT_SYMBOL net/wireless/cfg80211 0x1879fcbd bridge_tunnel_header +EXPORT_SYMBOL net/wireless/cfg80211 0x19e03378 cfg80211_get_p2p_attr +EXPORT_SYMBOL net/wireless/cfg80211 0x1e1cf3a2 __cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x1f9fb1f4 cfg80211_sched_scan_stopped +EXPORT_SYMBOL net/wireless/cfg80211 0x276cb3ec cfg80211_remain_on_channel_expired +EXPORT_SYMBOL net/wireless/cfg80211 0x33fdf379 cfg80211_cqm_txe_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x36dc03f9 cfg80211_inform_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x39be3b90 cfg80211_send_auth_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x3aaf5431 cfg80211_ch_switch_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x3c2217de cfg80211_put_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x4921abab cfg80211_connect_result +EXPORT_SYMBOL net/wireless/cfg80211 0x4b113614 cfg80211_testmode_alloc_event_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x4cc5ffc4 ieee80211_get_hdrlen_from_skb +EXPORT_SYMBOL net/wireless/cfg80211 0x4cea058d cfg80211_ready_on_channel +EXPORT_SYMBOL net/wireless/cfg80211 0x5032d638 wiphy_rfkill_stop_polling +EXPORT_SYMBOL net/wireless/cfg80211 0x56d15c89 cfg80211_reg_can_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0x590268cb ieee80211_get_response_rate +EXPORT_SYMBOL net/wireless/cfg80211 0x5b23603e cfg80211_cqm_pktloss_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x5c0767a3 wiphy_rfkill_set_hw_state +EXPORT_SYMBOL net/wireless/cfg80211 0x5cc88516 cfg80211_chandef_compatible +EXPORT_SYMBOL net/wireless/cfg80211 0x5d090a5e cfg80211_probe_status +EXPORT_SYMBOL net/wireless/cfg80211 0x60934044 cfg80211_classify8021d +EXPORT_SYMBOL net/wireless/cfg80211 0x6371d33b cfg80211_send_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0x65aa8c1b cfg80211_testmode_event +EXPORT_SYMBOL net/wireless/cfg80211 0x69b18f43 rfc1042_header +EXPORT_SYMBOL net/wireless/cfg80211 0x6e70be3f wiphy_unregister +EXPORT_SYMBOL net/wireless/cfg80211 0x6f08b123 cfg80211_del_sta +EXPORT_SYMBOL net/wireless/cfg80211 0x72c48080 cfg80211_rx_mgmt +EXPORT_SYMBOL net/wireless/cfg80211 0x74717075 cfg80211_get_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x75ab3be8 cfg80211_chandef_usable +EXPORT_SYMBOL net/wireless/cfg80211 0x781cfcad cfg80211_cqm_rssi_notify +EXPORT_SYMBOL net/wireless/cfg80211 0x7a7257fd cfg80211_get_mesh +EXPORT_SYMBOL net/wireless/cfg80211 0x7e777792 wiphy_apply_custom_regulatory +EXPORT_SYMBOL net/wireless/cfg80211 0x7ef39823 ieee80211_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0x7fe1a403 cfg80211_find_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x81404b48 ieee80211_bss_get_ie +EXPORT_SYMBOL net/wireless/cfg80211 0x8ec24422 cfg80211_send_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0x8fabcc88 cfg80211_unlink_bss +EXPORT_SYMBOL net/wireless/cfg80211 0x9295df1c cfg80211_send_rx_auth +EXPORT_SYMBOL net/wireless/cfg80211 0x9665d03a cfg80211_disconnected +EXPORT_SYMBOL net/wireless/cfg80211 0x971e4d0c cfg80211_send_assoc_timeout +EXPORT_SYMBOL net/wireless/cfg80211 0x982e6b6d ieee80211_radiotap_iterator_init +EXPORT_SYMBOL net/wireless/cfg80211 0xa1425906 ieee80211_channel_to_frequency +EXPORT_SYMBOL net/wireless/cfg80211 0xa197b1ff ieee80211_get_mesh_hdrlen +EXPORT_SYMBOL net/wireless/cfg80211 0xa89b3d88 __ieee80211_get_channel +EXPORT_SYMBOL net/wireless/cfg80211 0xab587363 cfg80211_notify_new_peer_candidate +EXPORT_SYMBOL net/wireless/cfg80211 0xaf0b251c cfg80211_report_obss_beacon +EXPORT_SYMBOL net/wireless/cfg80211 0xb4f439ac cfg80211_sched_scan_results +EXPORT_SYMBOL net/wireless/cfg80211 0xb5909061 regulatory_hint +EXPORT_SYMBOL net/wireless/cfg80211 0xb5a27a15 cfg80211_testmode_alloc_reply_skb +EXPORT_SYMBOL net/wireless/cfg80211 0xb717bc87 cfg80211_unregister_wdev +EXPORT_SYMBOL net/wireless/cfg80211 0xb787f91f cfg80211_mgmt_tx_status +EXPORT_SYMBOL net/wireless/cfg80211 0xb80b0f7d cfg80211_roamed_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xba0bdd93 cfg80211_inform_bss_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xbbc09c8c cfg80211_scan_done +EXPORT_SYMBOL net/wireless/cfg80211 0xbebb0264 cfg80211_ibss_joined +EXPORT_SYMBOL net/wireless/cfg80211 0xc35396c6 cfg80211_pmksa_candidate_notify +EXPORT_SYMBOL net/wireless/cfg80211 0xc36f6b9e cfg80211_send_unprot_disassoc +EXPORT_SYMBOL net/wireless/cfg80211 0xc4b9bcb0 cfg80211_new_sta +EXPORT_SYMBOL net/wireless/cfg80211 0xc63f1b81 ieee80211_radiotap_iterator_next +EXPORT_SYMBOL net/wireless/cfg80211 0xc665e9b0 cfg80211_gtk_rekey_notify +EXPORT_SYMBOL net/wireless/cfg80211 0xcd996237 cfg80211_tdls_oper_request +EXPORT_SYMBOL net/wireless/cfg80211 0xcf618a57 cfg80211_calculate_bitrate +EXPORT_SYMBOL net/wireless/cfg80211 0xd4ae6424 cfg80211_chandef_create +EXPORT_SYMBOL net/wireless/cfg80211 0xd543eb3e cfg80211_send_unprot_deauth +EXPORT_SYMBOL net/wireless/cfg80211 0xd66acb97 cfg80211_testmode_reply +EXPORT_SYMBOL net/wireless/cfg80211 0xd7933dea ieee80211_data_from_8023 +EXPORT_SYMBOL net/wireless/cfg80211 0xd9148b11 cfg80211_rx_unexpected_4addr_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xda1cb306 cfg80211_rx_spurious_frame +EXPORT_SYMBOL net/wireless/cfg80211 0xde8d7458 wiphy_rfkill_start_polling +EXPORT_SYMBOL net/wireless/cfg80211 0xe1381109 cfg80211_michael_mic_failure +EXPORT_SYMBOL net/wireless/cfg80211 0xe1d33950 wiphy_register +EXPORT_SYMBOL net/wireless/cfg80211 0xe2e20523 freq_reg_info +EXPORT_SYMBOL net/wireless/cfg80211 0xe7ed1dac cfg80211_send_rx_assoc +EXPORT_SYMBOL net/wireless/cfg80211 0xeb870bce cfg80211_chandef_valid +EXPORT_SYMBOL net/wireless/cfg80211 0xf604e9fb wiphy_new +EXPORT_SYMBOL net/wireless/cfg80211 0xf7d55a8c wiphy_free +EXPORT_SYMBOL net/wireless/cfg80211 0xfa7d87f9 cfg80211_ref_bss +EXPORT_SYMBOL net/wireless/cfg80211 0xfb1260f2 cfg80211_roamed +EXPORT_SYMBOL net/wireless/cfg80211 0xfc336f53 ieee80211_amsdu_to_8023s +EXPORT_SYMBOL net/wireless/cfg80211 0xfed4d591 cfg80211_find_vendor_ie +EXPORT_SYMBOL net/wireless/lib80211 0x2d0f99e5 print_ssid +EXPORT_SYMBOL net/wireless/lib80211 0x604474fb lib80211_register_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0x88002718 lib80211_crypt_info_free +EXPORT_SYMBOL net/wireless/lib80211 0x91a29545 lib80211_crypt_info_init +EXPORT_SYMBOL net/wireless/lib80211 0x9d6e2887 lib80211_get_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xecf64308 lib80211_unregister_crypto_ops +EXPORT_SYMBOL net/wireless/lib80211 0xfe7e95af lib80211_crypt_delayed_deinit +EXPORT_SYMBOL sound/ac97_bus 0x8e5d87e3 ac97_bus_type +EXPORT_SYMBOL sound/core/seq/snd-seq 0x1a724fcc snd_seq_kernel_client_ctl +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3061c52d snd_use_lock_sync_helper +EXPORT_SYMBOL sound/core/seq/snd-seq 0x3fb4d161 snd_seq_kernel_client_dispatch +EXPORT_SYMBOL sound/core/seq/snd-seq 0x49b03282 snd_seq_create_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x618ff691 snd_seq_kernel_client_write_poll +EXPORT_SYMBOL sound/core/seq/snd-seq 0x6bb71038 snd_seq_delete_kernel_client +EXPORT_SYMBOL sound/core/seq/snd-seq 0x774beede snd_seq_event_port_attach +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7949753c snd_seq_kernel_client_enqueue_blocking +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7ac2f329 snd_seq_expand_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq 0x7b8699eb snd_seq_event_port_detach +EXPORT_SYMBOL sound/core/seq/snd-seq 0xb8e448a0 snd_seq_set_queue_tempo +EXPORT_SYMBOL sound/core/seq/snd-seq 0xcac0a3be snd_seq_kernel_client_enqueue +EXPORT_SYMBOL sound/core/seq/snd-seq 0xe934da1d snd_seq_dump_var_event +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x202b21b0 snd_seq_device_register_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x3a57f235 snd_seq_autoload_unlock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x5499a001 snd_seq_device_new +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0x6339b6d0 snd_seq_device_load_drivers +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xb90668b2 snd_seq_autoload_lock +EXPORT_SYMBOL sound/core/seq/snd-seq-device 0xc622fb29 snd_seq_device_unregister_driver +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x6ea09972 snd_midi_channel_alloc_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0x833a3e07 snd_midi_channel_set_clear +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xb9948d2c snd_midi_channel_free_set +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-emul 0xf0a1fdb3 snd_midi_process_event +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x01b82065 snd_midi_event_reset_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x0d2b74da snd_midi_event_reset_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x2ceec35d snd_midi_event_decode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x668570c0 snd_midi_event_encode +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0x7f92860c snd_midi_event_no_status +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xb494afee snd_midi_event_free +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xc7b2b6c2 snd_midi_event_encode_byte +EXPORT_SYMBOL sound/core/seq/snd-seq-midi-event 0xe0a50454 snd_midi_event_new +EXPORT_SYMBOL sound/core/seq/snd-seq-virmidi 0x7cffe2b8 snd_virmidi_new +EXPORT_SYMBOL sound/core/snd 0x02820a85 snd_ctl_boolean_mono_info +EXPORT_SYMBOL sound/core/snd 0x0b014b57 snd_ctl_remove_id +EXPORT_SYMBOL sound/core/snd 0x0be75e1c snd_info_create_module_entry +EXPORT_SYMBOL sound/core/snd 0x15557a98 snd_card_disconnect +EXPORT_SYMBOL sound/core/snd 0x1883b0ce snd_card_unref +EXPORT_SYMBOL sound/core/snd 0x18e1683f snd_dma_program +EXPORT_SYMBOL sound/core/snd 0x191e88cf snd_dma_pointer +EXPORT_SYMBOL sound/core/snd 0x1d25a538 snd_add_device_sysfs_file +EXPORT_SYMBOL sound/core/snd 0x22bc8a1a snd_info_create_card_entry +EXPORT_SYMBOL sound/core/snd 0x24a94b26 snd_info_get_line +EXPORT_SYMBOL sound/core/snd 0x2913be53 snd_card_file_add +EXPORT_SYMBOL sound/core/snd 0x2ae3deaa release_and_free_resource +EXPORT_SYMBOL sound/core/snd 0x342a2354 copy_to_user_fromio +EXPORT_SYMBOL sound/core/snd 0x3971b4df snd_ecards_limit +EXPORT_SYMBOL sound/core/snd 0x401d8af2 snd_cards +EXPORT_SYMBOL sound/core/snd 0x40e67943 snd_jack_new +EXPORT_SYMBOL sound/core/snd 0x471911e6 snd_power_wait +EXPORT_SYMBOL sound/core/snd 0x4a3ea5c0 snd_request_card +EXPORT_SYMBOL sound/core/snd 0x4b015768 snd_iprintf +EXPORT_SYMBOL sound/core/snd 0x5157f115 snd_info_register +EXPORT_SYMBOL sound/core/snd 0x5b0f1e65 snd_card_free_when_closed +EXPORT_SYMBOL sound/core/snd 0x5c77c21a snd_ctl_find_numid +EXPORT_SYMBOL sound/core/snd 0x5d38d3b6 snd_ctl_free_one +EXPORT_SYMBOL sound/core/snd 0x5e38e5c4 snd_ctl_register_ioctl +EXPORT_SYMBOL sound/core/snd 0x5ff90564 snd_jack_report +EXPORT_SYMBOL sound/core/snd 0x611adf70 snd_ctl_rename_id +EXPORT_SYMBOL sound/core/snd 0x6189cf8a snd_card_set_id +EXPORT_SYMBOL sound/core/snd 0x61c2118f _snd_ctl_add_slave +EXPORT_SYMBOL sound/core/snd 0x624ae108 snd_ctl_remove +EXPORT_SYMBOL sound/core/snd 0x6b5aefad snd_register_device_for_dev +EXPORT_SYMBOL sound/core/snd 0x70c15ac1 snd_dma_disable +EXPORT_SYMBOL sound/core/snd 0x78c5256c snd_jack_set_key +EXPORT_SYMBOL sound/core/snd 0x7e1ec591 snd_ctl_unregister_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0x7fa148d0 snd_info_free_entry +EXPORT_SYMBOL sound/core/snd 0x81b69e41 snd_ctl_enum_info +EXPORT_SYMBOL sound/core/snd 0x8bbca0c6 snd_card_register +EXPORT_SYMBOL sound/core/snd 0x8d617c31 snd_device_register +EXPORT_SYMBOL sound/core/snd 0x8df4fce4 snd_device_new +EXPORT_SYMBOL sound/core/snd 0x8f595b11 snd_major +EXPORT_SYMBOL sound/core/snd 0x8f5e7e62 snd_unregister_device +EXPORT_SYMBOL sound/core/snd 0x94a9cfe8 snd_ctl_new1 +EXPORT_SYMBOL sound/core/snd 0x9b5eae77 snd_ctl_find_id +EXPORT_SYMBOL sound/core/snd 0x9e6d79f8 snd_info_get_str +EXPORT_SYMBOL sound/core/snd 0x9f6d4d81 snd_ctl_notify +EXPORT_SYMBOL sound/core/snd 0xa07f03c6 snd_ctl_unregister_ioctl +EXPORT_SYMBOL sound/core/snd 0xa0fd2427 snd_pci_quirk_lookup_id +EXPORT_SYMBOL sound/core/snd 0xa1ca087d snd_ctl_boolean_stereo_info +EXPORT_SYMBOL sound/core/snd 0xa22ab65d snd_jack_set_parent +EXPORT_SYMBOL sound/core/snd 0xa41fa418 snd_ctl_add +EXPORT_SYMBOL sound/core/snd 0xa5f6c9ea snd_ctl_register_ioctl_compat +EXPORT_SYMBOL sound/core/snd 0xb2e5ae4a snd_lookup_minor_data +EXPORT_SYMBOL sound/core/snd 0xb81e41b3 snd_pci_quirk_lookup +EXPORT_SYMBOL sound/core/snd 0xb96545d0 snd_card_free +EXPORT_SYMBOL sound/core/snd 0xbea421f8 snd_card_proc_new +EXPORT_SYMBOL sound/core/snd 0xcbc158a8 snd_ctl_make_virtual_master +EXPORT_SYMBOL sound/core/snd 0xcf47c963 snd_device_free +EXPORT_SYMBOL sound/core/snd 0xcfef756b snd_card_create +EXPORT_SYMBOL sound/core/snd 0xec082bbd snd_seq_root +EXPORT_SYMBOL sound/core/snd 0xf14eb26f snd_ctl_replace +EXPORT_SYMBOL sound/core/snd 0xf4335add snd_component_add +EXPORT_SYMBOL sound/core/snd 0xfcb28ed1 snd_card_file_remove +EXPORT_SYMBOL sound/core/snd 0xfffd89db copy_from_user_toio +EXPORT_SYMBOL sound/core/snd-hwdep 0xeac9dfd5 snd_hwdep_new +EXPORT_SYMBOL sound/core/snd-page-alloc 0x06b310c9 snd_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x11263860 snd_dma_alloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x5898dcba snd_malloc_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x5e8e6494 snd_dma_free_pages +EXPORT_SYMBOL sound/core/snd-page-alloc 0x770263b5 snd_dma_reserve_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0x7f9bb869 snd_dma_get_reserved_buf +EXPORT_SYMBOL sound/core/snd-page-alloc 0xca34c226 snd_sgbuf_get_chunk_size +EXPORT_SYMBOL sound/core/snd-page-alloc 0xe0a9f380 snd_dma_alloc_pages_fallback +EXPORT_SYMBOL sound/core/snd-pcm 0x0283dfe3 _snd_pcm_hw_params_any +EXPORT_SYMBOL sound/core/snd-pcm 0x04cda566 snd_interval_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x08d62825 snd_pcm_new_internal +EXPORT_SYMBOL sound/core/snd-pcm 0x0aff213f snd_pcm_lib_read +EXPORT_SYMBOL sound/core/snd-pcm 0x1126e458 snd_pcm_suspend +EXPORT_SYMBOL sound/core/snd-pcm 0x169839d5 snd_pcm_lib_get_vmalloc_page +EXPORT_SYMBOL sound/core/snd-pcm 0x18a2f79e snd_pcm_notify +EXPORT_SYMBOL sound/core/snd-pcm 0x1b3b208b snd_pcm_open_substream +EXPORT_SYMBOL sound/core/snd-pcm 0x1be90f02 snd_pcm_hw_rule_noresample +EXPORT_SYMBOL sound/core/snd-pcm 0x1d027e4b snd_pcm_format_signed +EXPORT_SYMBOL sound/core/snd-pcm 0x247b6f8b snd_pcm_hw_constraint_integer +EXPORT_SYMBOL sound/core/snd-pcm 0x2e592b6f snd_pcm_lib_preallocate_pages_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0x2f48b89d snd_pcm_hw_param_first +EXPORT_SYMBOL sound/core/snd-pcm 0x3796bdcc snd_pcm_format_little_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x39bf9301 _snd_pcm_hw_param_setempty +EXPORT_SYMBOL sound/core/snd-pcm 0x49c168ab _snd_pcm_lib_alloc_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x4dc0cc62 snd_pcm_lib_readv +EXPORT_SYMBOL sound/core/snd-pcm 0x4f816e9b snd_pcm_format_big_endian +EXPORT_SYMBOL sound/core/snd-pcm 0x52e3e4a5 snd_pcm_hw_param_value +EXPORT_SYMBOL sound/core/snd-pcm 0x5a54ae5f snd_pcm_hw_param_last +EXPORT_SYMBOL sound/core/snd-pcm 0x5e05e704 snd_pcm_lib_preallocate_pages +EXPORT_SYMBOL sound/core/snd-pcm 0x5e7f4920 snd_pcm_format_set_silence +EXPORT_SYMBOL sound/core/snd-pcm 0x62525974 snd_pcm_lib_free_vmalloc_buffer +EXPORT_SYMBOL sound/core/snd-pcm 0x63250ee3 snd_pcm_new +EXPORT_SYMBOL sound/core/snd-pcm 0x650f8603 snd_pcm_format_silence_64 +EXPORT_SYMBOL sound/core/snd-pcm 0x67e80c21 snd_pcm_new_stream +EXPORT_SYMBOL sound/core/snd-pcm 0x68670be3 snd_pcm_hw_constraint_ratnums +EXPORT_SYMBOL sound/core/snd-pcm 0x68a24153 snd_pcm_format_physical_width +EXPORT_SYMBOL sound/core/snd-pcm 0x699c8b48 snd_pcm_sgbuf_ops_page +EXPORT_SYMBOL sound/core/snd-pcm 0x6cfe152e snd_pcm_hw_refine +EXPORT_SYMBOL sound/core/snd-pcm 0x6d7e8d4c snd_pcm_period_elapsed +EXPORT_SYMBOL sound/core/snd-pcm 0x6dd68444 snd_pcm_mmap_data +EXPORT_SYMBOL sound/core/snd-pcm 0x6e4afbb4 snd_pcm_hw_constraint_list +EXPORT_SYMBOL sound/core/snd-pcm 0x6ef8fcd8 snd_pcm_format_linear +EXPORT_SYMBOL sound/core/snd-pcm 0x6f630e2b snd_pcm_hw_constraint_step +EXPORT_SYMBOL sound/core/snd-pcm 0x73088c70 snd_pcm_lib_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x7634ddf2 snd_pcm_hw_rule_add +EXPORT_SYMBOL sound/core/snd-pcm 0x79de64ea snd_pcm_suspend_all +EXPORT_SYMBOL sound/core/snd-pcm 0x8279da5a snd_pcm_kernel_ioctl +EXPORT_SYMBOL sound/core/snd-pcm 0x834dc955 snd_pcm_format_size +EXPORT_SYMBOL sound/core/snd-pcm 0x94098ff8 snd_interval_list +EXPORT_SYMBOL sound/core/snd-pcm 0x94ba2f2c snd_pcm_hw_constraint_msbits +EXPORT_SYMBOL sound/core/snd-pcm 0x9f03c713 snd_pcm_lib_preallocate_free_for_all +EXPORT_SYMBOL sound/core/snd-pcm 0xa61aa028 snd_pcm_format_unsigned +EXPORT_SYMBOL sound/core/snd-pcm 0xa9adc229 snd_pcm_link_rwlock +EXPORT_SYMBOL sound/core/snd-pcm 0xb41d2bd5 snd_pcm_set_ops +EXPORT_SYMBOL sound/core/snd-pcm 0xb66b098d snd_pcm_hw_constraint_pow2 +EXPORT_SYMBOL sound/core/snd-pcm 0xb9638db4 snd_pcm_rate_to_rate_bit +EXPORT_SYMBOL sound/core/snd-pcm 0xbde0c233 snd_pcm_lib_write +EXPORT_SYMBOL sound/core/snd-pcm 0xd09331f2 snd_pcm_release_substream +EXPORT_SYMBOL sound/core/snd-pcm 0xd28f26f9 snd_pcm_stop +EXPORT_SYMBOL sound/core/snd-pcm 0xd5c82702 snd_pcm_limit_hw_rates +EXPORT_SYMBOL sound/core/snd-pcm 0xd8817cf8 snd_pcm_lib_writev +EXPORT_SYMBOL sound/core/snd-pcm 0xdbd8f927 snd_pcm_lib_mmap_iomem +EXPORT_SYMBOL sound/core/snd-pcm 0xe56a9336 snd_pcm_format_width +EXPORT_SYMBOL sound/core/snd-pcm 0xe6272da8 snd_pcm_hw_constraint_minmax +EXPORT_SYMBOL sound/core/snd-pcm 0xe99e22db snd_pcm_lib_malloc_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xf3797152 snd_interval_ratnum +EXPORT_SYMBOL sound/core/snd-pcm 0xf638f002 snd_pcm_lib_free_pages +EXPORT_SYMBOL sound/core/snd-pcm 0xfd619f44 snd_pcm_hw_constraint_ratdens +EXPORT_SYMBOL sound/core/snd-pcm 0xff6104d0 snd_pcm_rate_bit_to_rate +EXPORT_SYMBOL sound/core/snd-pcm 0xff90177f snd_pcm_set_sync +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1a636664 snd_rawmidi_kernel_release +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1cb861f7 snd_rawmidi_set_ops +EXPORT_SYMBOL sound/core/snd-rawmidi 0x1d20f533 snd_rawmidi_info_select +EXPORT_SYMBOL sound/core/snd-rawmidi 0x20e4ad09 snd_rawmidi_drop_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x3e9f2719 snd_rawmidi_transmit +EXPORT_SYMBOL sound/core/snd-rawmidi 0x49c565f1 snd_rawmidi_transmit_peek +EXPORT_SYMBOL sound/core/snd-rawmidi 0x52d24dc1 snd_rawmidi_drain_input +EXPORT_SYMBOL sound/core/snd-rawmidi 0x6b4dd2a5 snd_rawmidi_receive +EXPORT_SYMBOL sound/core/snd-rawmidi 0x827104c4 snd_rawmidi_drain_output +EXPORT_SYMBOL sound/core/snd-rawmidi 0x923d3b50 snd_rawmidi_kernel_open +EXPORT_SYMBOL sound/core/snd-rawmidi 0xa18c004e snd_rawmidi_output_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xac62c08f snd_rawmidi_transmit_ack +EXPORT_SYMBOL sound/core/snd-rawmidi 0xb24e4736 snd_rawmidi_kernel_write +EXPORT_SYMBOL sound/core/snd-rawmidi 0xc8603e1a snd_rawmidi_input_params +EXPORT_SYMBOL sound/core/snd-rawmidi 0xd45e5c8e snd_rawmidi_transmit_empty +EXPORT_SYMBOL sound/core/snd-rawmidi 0xe5e6116d snd_rawmidi_kernel_read +EXPORT_SYMBOL sound/core/snd-rawmidi 0xfd34b1bf snd_rawmidi_new +EXPORT_SYMBOL sound/core/snd-timer 0x1f052bd1 snd_timer_new +EXPORT_SYMBOL sound/core/snd-timer 0x3a5fdb33 snd_timer_global_register +EXPORT_SYMBOL sound/core/snd-timer 0x64338b18 snd_timer_pause +EXPORT_SYMBOL sound/core/snd-timer 0x767d091f snd_timer_stop +EXPORT_SYMBOL sound/core/snd-timer 0x7ac35630 snd_timer_interrupt +EXPORT_SYMBOL sound/core/snd-timer 0x801db05f snd_timer_start +EXPORT_SYMBOL sound/core/snd-timer 0x9c06c6e9 snd_timer_notify +EXPORT_SYMBOL sound/core/snd-timer 0x9dc0441e snd_timer_resolution +EXPORT_SYMBOL sound/core/snd-timer 0xb5da8e5b snd_timer_continue +EXPORT_SYMBOL sound/core/snd-timer 0xb7d1e8b0 snd_timer_open +EXPORT_SYMBOL sound/core/snd-timer 0xc3ffb657 snd_timer_global_free +EXPORT_SYMBOL sound/core/snd-timer 0xc697a980 snd_timer_close +EXPORT_SYMBOL sound/core/snd-timer 0xde2a71b3 snd_timer_global_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0x6d629c59 snd_mpu401_uart_interrupt_tx +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xb91c5c10 snd_mpu401_uart_new +EXPORT_SYMBOL sound/drivers/mpu401/snd-mpu401-uart 0xc0fec227 snd_mpu401_uart_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x018e26e5 snd_opl3_reset +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x05060a19 snd_opl3_regmap +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x0eec97b3 snd_opl3_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x112f159b snd_opl3_timer_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x22835d96 snd_opl3_load_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x22a3315c snd_opl3_find_patch +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x3d61aa6c snd_opl3_hwdep_new +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x4e569d67 snd_opl3_interrupt +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x6e1c6d9e snd_opl3_init +EXPORT_SYMBOL sound/drivers/opl3/snd-opl3-lib 0x98dd8f38 snd_opl3_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x1fb00085 snd_vx_create +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x5bc08f6c snd_vx_dsp_load +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x76d8f388 snd_vx_setup_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0x98d6415d snd_vx_suspend +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xaf1f3fac snd_vx_dsp_boot +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xc4513548 snd_vx_load_boot_image +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xd73368aa snd_vx_resume +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xd764e606 snd_vx_free_firmware +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xe1a9e8f0 snd_vx_check_reg_bit +EXPORT_SYMBOL sound/drivers/vx/snd-vx-lib 0xf1f04d23 snd_vx_irq_handler +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x0a34ca62 cmp_connection_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x0ebd00f6 amdtp_out_stream_get_max_payload +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x11fce344 fw_iso_resources_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x2f77c6c0 amdtp_out_stream_stop +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x2fa4fd7f snd_fw_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x30fc6aab amdtp_out_stream_pcm_prepare +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x34b07cec amdtp_out_stream_set_rate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x387730e4 amdtp_out_stream_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x48425c66 fw_iso_resources_allocate +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x4f787248 fw_iso_resources_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x555cd294 amdtp_out_stream_pcm_pointer +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x5fbdcb5e amdtp_out_stream_pcm_abort +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x6652d94d fw_iso_resources_free +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x6e0f8a66 cmp_connection_establish +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x7a25c0bb amdtp_out_stream_set_pcm_format +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x8221e925 amdtp_out_stream_start +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x879a5eeb amdtp_out_stream_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x9adcde64 cmp_connection_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0x9f0472d8 iso_packets_buffer_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xa80a3ad7 cmp_connection_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xaacc2d3f fcp_avc_transaction +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xacdfe448 fw_iso_resources_update +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xc2878fe4 fcp_bus_reset +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xd037302d amdtp_out_stream_init +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xd21628c6 iso_packets_buffer_destroy +EXPORT_SYMBOL sound/firewire/snd-firewire-lib 0xf9507777 cmp_connection_break +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x04d26329 snd_ak4114_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x53ec88ac snd_ak4114_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x6ac0f45c snd_ak4114_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x7ed9827c snd_ak4114_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0x938bae1d snd_ak4114_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4114 0xa8a7643e snd_ak4114_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x1ab253af snd_ak4117_external_rate +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x365918df snd_ak4117_reg_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x686a001b snd_ak4117_build +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0x83e79e33 snd_ak4117_check_rate_and_errors +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xbadd4a63 snd_ak4117_reinit +EXPORT_SYMBOL sound/i2c/other/snd-ak4117 0xdcc14aa7 snd_ak4117_create +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x7f23a7d7 snd_akm4xxx_write +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0x95150a96 snd_akm4xxx_init +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xa9319bbe snd_akm4xxx_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-ak4xxx-adda 0xdfdc5ca5 snd_akm4xxx_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x2db8c5ce snd_pt2258_reset +EXPORT_SYMBOL sound/i2c/other/snd-pt2258 0x50f3b61c snd_pt2258_build_controls +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0x4f5055eb snd_tea575x_exit +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xceed62f0 snd_tea575x_init +EXPORT_SYMBOL sound/i2c/other/snd-tea575x-tuner 0xff4c5512 snd_tea575x_set_freq +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x71288b10 snd_cs8427_iec958_pcm +EXPORT_SYMBOL sound/i2c/snd-cs8427 0x9ae56065 snd_cs8427_iec958_active +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xa15446b2 snd_cs8427_create +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xc2d87fe2 snd_cs8427_reg_write +EXPORT_SYMBOL sound/i2c/snd-cs8427 0xfe64f4b6 snd_cs8427_iec958_build +EXPORT_SYMBOL sound/i2c/snd-i2c 0x164b4c64 snd_i2c_bus_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x4b8d24bc snd_i2c_device_create +EXPORT_SYMBOL sound/i2c/snd-i2c 0x592919bd snd_i2c_probeaddr +EXPORT_SYMBOL sound/i2c/snd-i2c 0x7283d7fc snd_i2c_device_free +EXPORT_SYMBOL sound/i2c/snd-i2c 0x9bf49d2a snd_i2c_readbytes +EXPORT_SYMBOL sound/i2c/snd-i2c 0xb58b8b69 snd_i2c_sendbytes +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x2845834a snd_sbdsp_create +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x2a4ca258 snd_sbmixer_read +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x5e2eb4c1 snd_sbmixer_new +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x70af2560 snd_sbmixer_suspend +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x75260b20 snd_sbmixer_write +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x7eb98e5c snd_sbdsp_command +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0x8652930f snd_sbdsp_reset +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xb04963d5 snd_sbdsp_get_byte +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xb4df397e snd_sbmixer_add_ctl +EXPORT_SYMBOL sound/isa/sb/snd-sb-common 0xe851c710 snd_sbmixer_resume +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x0ad4be57 snd_sb16dsp_pcm +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x292c3ac0 snd_sb16dsp_get_pcm_ops +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0x90a2afc6 snd_sb16dsp_configure +EXPORT_SYMBOL sound/isa/sb/snd-sb16-dsp 0xe0b3f690 snd_sb16dsp_interrupt +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x1e985192 snd_ac97_write +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x262b8f93 snd_ac97_suspend +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x3d43f3fd snd_ac97_pcm_open +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x42f5f33c snd_ac97_set_rate +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x4948c85e snd_ac97_tune_hardware +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x663df966 snd_ac97_update_bits +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x68df10df snd_ac97_mixer +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x72bf8277 snd_ac97_update_power +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x773b35ce snd_ac97_pcm_double_rate_rules +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0x938f42c9 snd_ac97_read +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xa67c50e0 snd_ac97_update +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xb4c057b5 snd_ac97_resume +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc1d2acb1 snd_ac97_write_cache +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc2c64bf4 snd_ac97_bus +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xc55aa4a1 snd_ac97_get_short_name +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xd57a7811 snd_ac97_pcm_assign +EXPORT_SYMBOL sound/pci/ac97/snd-ac97-codec 0xf22d8120 snd_ac97_pcm_close +EXPORT_SYMBOL sound/pci/asihpi/snd-asihpi 0x92c9dd8b hpi_send_recv +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x194b7695 snd_emu10k1_synth_bzero +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x22a1080b snd_emu10k1_voice_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x2baed492 snd_emu10k1_voice_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x56764cc4 snd_emu10k1_synth_free +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x61a5ecc3 snd_emu10k1_synth_alloc +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x6e5dd223 snd_emu10k1_ptr_read +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0x7e6fee73 snd_emu10k1_synth_copy_from_user +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xb544a2a9 snd_emu10k1_memblk_map +EXPORT_SYMBOL sound/pci/emu10k1/snd-emu10k1 0xd74e62c8 snd_emu10k1_ptr_write +EXPORT_SYMBOL sound/pci/hda/snd-hda-codec 0x4d0cf107 snd_hda_parse_generic_codec +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0x8dc3dc31 snd_ice1712_akm4xxx_build_controls +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xc70ffe83 snd_ice1712_akm4xxx_free +EXPORT_SYMBOL sound/pci/ice1712/snd-ice17xx-ak4xxx 0xeb2378b5 snd_ice1712_akm4xxx_init +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x03342eda oxygen_write8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x21d13628 oxygen_write32_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x37536e4f oxygen_read32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x4b457e65 oxygen_pci_probe +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x56bebd1f oxygen_read_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x5e488427 oxygen_read16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x5f2f7f06 oxygen_read8 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x606e326a oxygen_pci_shutdown +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x66585aa0 oxygen_write16 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x77362d46 oxygen_reset_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x81ae8cd3 oxygen_write_i2c +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x8b82c15c oxygen_write_ac97_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0x9e0de90c oxygen_write_spi +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xa495dcef oxygen_write32 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xacb6228a oxygen_write_uart +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xc5ac75de oxygen_pci_remove +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xc75b49b8 oxygen_write8_masked +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xc963ad8a oxygen_pci_pm +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xd2f70409 oxygen_write_ac97 +EXPORT_SYMBOL sound/pci/oxygen/snd-oxygen-lib 0xf058969d oxygen_write16_masked +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x14c96491 snd_trident_stop_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x3d6115cc snd_trident_free_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0x46fd217e snd_trident_start_voice +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xd3dca640 snd_trident_write_voice_regs +EXPORT_SYMBOL sound/pci/trident/snd-trident 0xd568631b snd_trident_alloc_voice +EXPORT_SYMBOL sound/soundcore 0xc9317ea6 sound_class +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x3226d9bd snd_emux_register +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x61add430 snd_emux_unlock_voice +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x655cb202 snd_sf_linear_to_log +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0x65942fe6 snd_emux_new +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xcd42071a snd_emux_terminate_all +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xd82c0f5b snd_emux_free +EXPORT_SYMBOL sound/synth/emux/snd-emux-synth 0xe9fb7352 snd_emux_lock_voice +EXPORT_SYMBOL sound/synth/snd-util-mem 0x02a372e1 snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x0dfa262e __snd_util_mem_alloc +EXPORT_SYMBOL sound/synth/snd-util-mem 0x1d15ee54 snd_util_memhdr_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0x2ac644eb snd_util_memhdr_new +EXPORT_SYMBOL sound/synth/snd-util-mem 0x47de6d80 snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xab934394 __snd_util_mem_free +EXPORT_SYMBOL sound/synth/snd-util-mem 0xe13f3044 snd_util_mem_avail +EXPORT_SYMBOL sound/synth/snd-util-mem 0xef36a5e5 __snd_util_memblk_new +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x16756dc0 snd_usbmidi_input_start +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x58515f72 snd_usbmidi_create +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0x63343b1d snd_usbmidi_input_stop +EXPORT_SYMBOL sound/usb/snd-usbmidi-lib 0xd9d2bb03 snd_usbmidi_disconnect +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x2b252a7f dm_mem_cache_free +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x35c95b1b dm_mem_cache_client_create +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x86e5acf9 dm_mem_cache_grow +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0x920a7a41 dm_message_parse +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xa43471b6 dm_mem_cache_shrink +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xd55b290c dm_mem_cache_client_destroy +EXPORT_SYMBOL ubuntu/dm-raid4-5/dm-raid45 0xdecbbbbf dm_mem_cache_alloc +EXPORT_SYMBOL vmlinux 0x00000000 softirq_work_list +EXPORT_SYMBOL vmlinux 0x0002c2c9 __xfrm_decode_session +EXPORT_SYMBOL vmlinux 0x0008af8a mdiobus_register +EXPORT_SYMBOL vmlinux 0x0008b8e5 kernel_accept +EXPORT_SYMBOL vmlinux 0x001be869 vfs_fsync_range +EXPORT_SYMBOL vmlinux 0x001dae9d sock_edemux +EXPORT_SYMBOL vmlinux 0x0059e31c ida_destroy +EXPORT_SYMBOL vmlinux 0x005c6b8b ab3100_event_unregister +EXPORT_SYMBOL vmlinux 0x00801678 flush_scheduled_work +EXPORT_SYMBOL vmlinux 0x0093a353 journal_destroy +EXPORT_SYMBOL vmlinux 0x00accdae rtnl_notify +EXPORT_SYMBOL vmlinux 0x00ae392d inet_register_protosw +EXPORT_SYMBOL vmlinux 0x00b0d4e0 eth_header_cache +EXPORT_SYMBOL vmlinux 0x00f2c76c user_revoke +EXPORT_SYMBOL vmlinux 0x01000e51 schedule +EXPORT_SYMBOL vmlinux 0x01001dc9 blk_end_request_all +EXPORT_SYMBOL vmlinux 0x01093ca5 cpu_info +EXPORT_SYMBOL vmlinux 0x01183448 ethtool_op_get_link +EXPORT_SYMBOL vmlinux 0x011bce7c set_groups +EXPORT_SYMBOL vmlinux 0x0135c843 __frontswap_store +EXPORT_SYMBOL vmlinux 0x0137b2af mount_nodev +EXPORT_SYMBOL vmlinux 0x01418be7 scsicam_bios_param +EXPORT_SYMBOL vmlinux 0x014f0936 devfreq_remove_governor +EXPORT_SYMBOL vmlinux 0x014f3c2a idr_get_new +EXPORT_SYMBOL vmlinux 0x015ddbdc wait_for_completion_interruptible +EXPORT_SYMBOL vmlinux 0x01902adf netpoll_trap +EXPORT_SYMBOL vmlinux 0x0194a014 simple_lookup +EXPORT_SYMBOL vmlinux 0x01a1f342 journal_wipe +EXPORT_SYMBOL vmlinux 0x01cb9de4 set_device_ro +EXPORT_SYMBOL vmlinux 0x01d19038 acpi_enable_subsystem +EXPORT_SYMBOL vmlinux 0x01e8af95 vlan_ioctl_set +EXPORT_SYMBOL vmlinux 0x02124474 ip_send_check +EXPORT_SYMBOL vmlinux 0x0237b57a arch_unregister_cpu +EXPORT_SYMBOL vmlinux 0x025241b1 textsearch_prepare +EXPORT_SYMBOL vmlinux 0x02649054 security_sock_rcv_skb +EXPORT_SYMBOL vmlinux 0x0274dc2b netif_get_num_default_rss_queues +EXPORT_SYMBOL vmlinux 0x029444f0 native_read_tsc +EXPORT_SYMBOL vmlinux 0x029bc837 request_key_with_auxdata +EXPORT_SYMBOL vmlinux 0x029e97e7 neigh_table_init +EXPORT_SYMBOL vmlinux 0x02a18c74 nf_conntrack_destroy +EXPORT_SYMBOL vmlinux 0x02a6ce5a crc16_table +EXPORT_SYMBOL vmlinux 0x02b45a39 __vlan_find_dev_deep +EXPORT_SYMBOL vmlinux 0x02d81845 audit_log_task_context +EXPORT_SYMBOL vmlinux 0x0303dffd linkwatch_fire_event +EXPORT_SYMBOL vmlinux 0x031c1f94 redraw_screen +EXPORT_SYMBOL vmlinux 0x031d9b66 uart_write_wakeup +EXPORT_SYMBOL vmlinux 0x0320e780 acpi_bus_register_driver +EXPORT_SYMBOL vmlinux 0x0334da4e scsi_command_size_tbl +EXPORT_SYMBOL vmlinux 0x03426777 rawv6_mh_filter_register +EXPORT_SYMBOL vmlinux 0x03498156 cpu_rmap_update +EXPORT_SYMBOL vmlinux 0x034d1f7b bdi_register_dev +EXPORT_SYMBOL vmlinux 0x03592ea0 security_unix_stream_connect +EXPORT_SYMBOL vmlinux 0x0366307a console_suspend_enabled +EXPORT_SYMBOL vmlinux 0x036c49bb sockfd_lookup +EXPORT_SYMBOL vmlinux 0x037a0cba kfree +EXPORT_SYMBOL vmlinux 0x0397becb unregister_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x03ae45c2 scsi_set_medium_removal +EXPORT_SYMBOL vmlinux 0x03b9b997 jbd2_journal_set_features +EXPORT_SYMBOL vmlinux 0x03bcb8ba netlink_ack +EXPORT_SYMBOL vmlinux 0x03bd889d param_get_ulong +EXPORT_SYMBOL vmlinux 0x03c06156 bitmap_fold +EXPORT_SYMBOL vmlinux 0x03da039a kernel_sock_ioctl +EXPORT_SYMBOL vmlinux 0x03db8187 gen_pool_set_algo +EXPORT_SYMBOL vmlinux 0x03ebda85 dns_query +EXPORT_SYMBOL vmlinux 0x03fd2571 vm_unmap_ram +EXPORT_SYMBOL vmlinux 0x03fff650 pci_bus_read_config_byte +EXPORT_SYMBOL vmlinux 0x04149b71 generic_pipe_buf_release +EXPORT_SYMBOL vmlinux 0x0422fe4a inet_csk_timer_bug_msg +EXPORT_SYMBOL vmlinux 0x0434120f rtnetlink_put_metrics +EXPORT_SYMBOL vmlinux 0x04365376 phy_print_status +EXPORT_SYMBOL vmlinux 0x04482cdb __refrigerator +EXPORT_SYMBOL vmlinux 0x044b58b2 i2c_release_client +EXPORT_SYMBOL vmlinux 0x0455a886 udp_seq_open +EXPORT_SYMBOL vmlinux 0x04699397 idr_remove_all +EXPORT_SYMBOL vmlinux 0x046c1f16 param_ops_invbool +EXPORT_SYMBOL vmlinux 0x048413d9 genphy_update_link +EXPORT_SYMBOL vmlinux 0x0487f831 fb_find_best_display +EXPORT_SYMBOL vmlinux 0x048a9c62 neigh_table_clear +EXPORT_SYMBOL vmlinux 0x04927208 cpu_active_mask +EXPORT_SYMBOL vmlinux 0x0499badc acpi_bios_warning +EXPORT_SYMBOL vmlinux 0x04ad27d2 set_binfmt +EXPORT_SYMBOL vmlinux 0x04d35282 security_path_mkdir +EXPORT_SYMBOL vmlinux 0x04d8c750 release_perfctr_nmi +EXPORT_SYMBOL vmlinux 0x04dab452 ppp_unregister_channel +EXPORT_SYMBOL vmlinux 0x04ea56f9 _kstrtol +EXPORT_SYMBOL vmlinux 0x04ea5d10 ksize +EXPORT_SYMBOL vmlinux 0x04ffefc4 cdrom_release +EXPORT_SYMBOL vmlinux 0x05147c6a blk_queue_dma_alignment +EXPORT_SYMBOL vmlinux 0x05240ee7 percpu_counter_batch +EXPORT_SYMBOL vmlinux 0x054434d6 radix_tree_tag_set +EXPORT_SYMBOL vmlinux 0x055659bf padata_set_cpumasks +EXPORT_SYMBOL vmlinux 0x055c8559 __kfifo_dma_in_prepare_r +EXPORT_SYMBOL vmlinux 0x056ee730 ipv6_hash_secret +EXPORT_SYMBOL vmlinux 0x0593a99b init_timer_key +EXPORT_SYMBOL vmlinux 0x0593d1fb scsi_report_device_reset +EXPORT_SYMBOL vmlinux 0x05c769fe nf_register_hooks +EXPORT_SYMBOL vmlinux 0x05c8d69e pci_try_set_mwi +EXPORT_SYMBOL vmlinux 0x05d4bc39 elv_unregister_queue +EXPORT_SYMBOL vmlinux 0x05d7ccb1 tcp_disconnect +EXPORT_SYMBOL vmlinux 0x05deb373 pci_restore_state +EXPORT_SYMBOL vmlinux 0x06050ec0 i2c_use_client +EXPORT_SYMBOL vmlinux 0x061651be strcat +EXPORT_SYMBOL vmlinux 0x061f4039 acpi_get_table_with_size +EXPORT_SYMBOL vmlinux 0x0634100a bitmap_parselist_user +EXPORT_SYMBOL vmlinux 0x0672264a shrink_dcache_sb +EXPORT_SYMBOL vmlinux 0x0672dd17 journal_abort +EXPORT_SYMBOL vmlinux 0x067d8d35 security_release_secctx +EXPORT_SYMBOL vmlinux 0x0681a614 xfrm_register_type +EXPORT_SYMBOL vmlinux 0x068c7263 ioremap_cache +EXPORT_SYMBOL vmlinux 0x06b4ac06 dev_open +EXPORT_SYMBOL vmlinux 0x06c0dae5 __kernel_fpu_end +EXPORT_SYMBOL vmlinux 0x06c602ca phy_register_fixup +EXPORT_SYMBOL vmlinux 0x06e47e5a cdrom_open +EXPORT_SYMBOL vmlinux 0x06ed18d3 vfs_llseek +EXPORT_SYMBOL vmlinux 0x06fe3b14 default_grn +EXPORT_SYMBOL vmlinux 0x070241f9 ida_get_new +EXPORT_SYMBOL vmlinux 0x0727c4f3 iowrite8 +EXPORT_SYMBOL vmlinux 0x0799aca4 local_bh_enable +EXPORT_SYMBOL vmlinux 0x07a580b2 splice_from_pipe_begin +EXPORT_SYMBOL vmlinux 0x07a63d3c d_alloc_pseudo +EXPORT_SYMBOL vmlinux 0x07a890c8 fb_alloc_cmap +EXPORT_SYMBOL vmlinux 0x07b6b357 input_mt_get_slot_by_key +EXPORT_SYMBOL vmlinux 0x07cc4a5d printk_timed_ratelimit +EXPORT_SYMBOL vmlinux 0x082c3213 pci_root_buses +EXPORT_SYMBOL vmlinux 0x083a1066 pci_claim_resource +EXPORT_SYMBOL vmlinux 0x083eb21c rfkill_unregister +EXPORT_SYMBOL vmlinux 0x085817e6 tcp_setsockopt +EXPORT_SYMBOL vmlinux 0x086663ef pm860x_page_reg_write +EXPORT_SYMBOL vmlinux 0x086ef968 padata_free +EXPORT_SYMBOL vmlinux 0x08746754 dev_get_by_name_rcu +EXPORT_SYMBOL vmlinux 0x08750651 inet_csk_prepare_forced_close +EXPORT_SYMBOL vmlinux 0x088bf99b elv_dispatch_add_tail +EXPORT_SYMBOL vmlinux 0x0890dca6 scsi_remove_target +EXPORT_SYMBOL vmlinux 0x0897287b acpi_disable_all_gpes +EXPORT_SYMBOL vmlinux 0x08a36a45 swiotlb_sync_single_for_cpu +EXPORT_SYMBOL vmlinux 0x08cf6d16 security_path_chown +EXPORT_SYMBOL vmlinux 0x08d8e59e scsi_cmd_ioctl +EXPORT_SYMBOL vmlinux 0x08e2b717 set_bdi_congested +EXPORT_SYMBOL vmlinux 0x08f64aa4 _raw_spin_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x092d30a0 scsi_release_buffers +EXPORT_SYMBOL vmlinux 0x0938139a blk_rq_map_integrity_sg +EXPORT_SYMBOL vmlinux 0x0948cde9 num_physpages +EXPORT_SYMBOL vmlinux 0x094fdac0 pv_mmu_ops +EXPORT_SYMBOL vmlinux 0x0964bcb2 boot_cpu_data +EXPORT_SYMBOL vmlinux 0x098431ba acpi_get_current_resources +EXPORT_SYMBOL vmlinux 0x098b6dac proc_dointvec_jiffies +EXPORT_SYMBOL vmlinux 0x098b71c6 fb_dealloc_cmap +EXPORT_SYMBOL vmlinux 0x098c0042 kthread_bind +EXPORT_SYMBOL vmlinux 0x0992780d efi_enabled +EXPORT_SYMBOL vmlinux 0x09a0afa4 submit_bh +EXPORT_SYMBOL vmlinux 0x09a8183d i2c_add_adapter +EXPORT_SYMBOL vmlinux 0x09b1b619 sync_inode_metadata +EXPORT_SYMBOL vmlinux 0x09c55cec schedule_timeout_interruptible +EXPORT_SYMBOL vmlinux 0x09c8eb55 font_vga_8x16 +EXPORT_SYMBOL vmlinux 0x09d44df9 in_lock_functions +EXPORT_SYMBOL vmlinux 0x09ea3a70 __frontswap_init +EXPORT_SYMBOL vmlinux 0x0a14798c fb_firmware_edid +EXPORT_SYMBOL vmlinux 0x0a2487e0 unblock_all_signals +EXPORT_SYMBOL vmlinux 0x0a319a53 dev_get_flags +EXPORT_SYMBOL vmlinux 0x0a3d33d1 eth_mac_addr +EXPORT_SYMBOL vmlinux 0x0a77a4d3 twl6040_set_bits +EXPORT_SYMBOL vmlinux 0x0a865f1e agp_allocate_memory +EXPORT_SYMBOL vmlinux 0x0a98ff2e max8925_set_bits +EXPORT_SYMBOL vmlinux 0x0aa00965 netlink_unicast +EXPORT_SYMBOL vmlinux 0x0ab0dadd free_mdio_bitbang +EXPORT_SYMBOL vmlinux 0x0acb1a3c __bitmap_shift_right +EXPORT_SYMBOL vmlinux 0x0acf7679 dma_issue_pending_all +EXPORT_SYMBOL vmlinux 0x0af834d8 iw_handler_set_thrspy +EXPORT_SYMBOL vmlinux 0x0b04c1bf bio_put +EXPORT_SYMBOL vmlinux 0x0b0b19f4 phy_register_fixup_for_id +EXPORT_SYMBOL vmlinux 0x0b0d888b icmpv6_err_convert +EXPORT_SYMBOL vmlinux 0x0b1beb31 vmalloc_32_user +EXPORT_SYMBOL vmlinux 0x0b445c2f generic_mii_ioctl +EXPORT_SYMBOL vmlinux 0x0b4a5061 proto_unregister +EXPORT_SYMBOL vmlinux 0x0b702f3b dcache_dir_lseek +EXPORT_SYMBOL vmlinux 0x0b72ac04 pnp_activate_dev +EXPORT_SYMBOL vmlinux 0x0b742fd7 simple_strtol +EXPORT_SYMBOL vmlinux 0x0b81425e netif_carrier_off +EXPORT_SYMBOL vmlinux 0x0b9d81f5 dst_cow_metrics_generic +EXPORT_SYMBOL vmlinux 0x0ba7b911 seq_open +EXPORT_SYMBOL vmlinux 0x0bbdce89 __splice_from_pipe +EXPORT_SYMBOL vmlinux 0x0bc477a2 irq_set_irq_type +EXPORT_SYMBOL vmlinux 0x0bc56ddb tcp_check_req +EXPORT_SYMBOL vmlinux 0x0be47ebc pci_pme_active +EXPORT_SYMBOL vmlinux 0x0beac5ba tcp_close +EXPORT_SYMBOL vmlinux 0x0bf50d31 single_open +EXPORT_SYMBOL vmlinux 0x0c06e7b0 udp_ioctl +EXPORT_SYMBOL vmlinux 0x0c25b82a account_page_redirty +EXPORT_SYMBOL vmlinux 0x0c58a8cd netdev_increment_features +EXPORT_SYMBOL vmlinux 0x0c65e73c scsi_normalize_sense +EXPORT_SYMBOL vmlinux 0x0c81d907 dget_parent +EXPORT_SYMBOL vmlinux 0x0c835f8b x86_hyper_ms_hyperv +EXPORT_SYMBOL vmlinux 0x0c8c9e99 scsi_show_extd_sense +EXPORT_SYMBOL vmlinux 0x0c94a185 bio_clone_bioset +EXPORT_SYMBOL vmlinux 0x0c9ef898 con_set_default_unimap +EXPORT_SYMBOL vmlinux 0x0ca0c882 twl6030_interrupt_mask +EXPORT_SYMBOL vmlinux 0x0ca7b7a8 acpi_check_region +EXPORT_SYMBOL vmlinux 0x0ca89b42 neigh_update +EXPORT_SYMBOL vmlinux 0x0cace7ec xfrm4_rcv_encap +EXPORT_SYMBOL vmlinux 0x0cae232b utf16s_to_utf8s +EXPORT_SYMBOL vmlinux 0x0cb239bb dquot_disable +EXPORT_SYMBOL vmlinux 0x0cd29997 serio_unregister_port +EXPORT_SYMBOL vmlinux 0x0cdb7d12 __kernel_fpu_begin +EXPORT_SYMBOL vmlinux 0x0ce1b5ac __f_setown +EXPORT_SYMBOL vmlinux 0x0ced0999 tcp_v4_md5_lookup +EXPORT_SYMBOL vmlinux 0x0cff4c64 blk_queue_max_discard_sectors +EXPORT_SYMBOL vmlinux 0x0d04a64e pci_bus_add_devices +EXPORT_SYMBOL vmlinux 0x0d0a3116 bitmap_cond_end_sync +EXPORT_SYMBOL vmlinux 0x0d3dda14 acpi_get_type +EXPORT_SYMBOL vmlinux 0x0d41b2d5 agp_enable +EXPORT_SYMBOL vmlinux 0x0d510c10 simple_open +EXPORT_SYMBOL vmlinux 0x0d542439 __ipv6_addr_type +EXPORT_SYMBOL vmlinux 0x0d61a682 agp_copy_info +EXPORT_SYMBOL vmlinux 0x0d652bb4 unregister_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x0d900fc0 pcie_capability_write_dword +EXPORT_SYMBOL vmlinux 0x0d95463b bdi_set_max_ratio +EXPORT_SYMBOL vmlinux 0x0da10ec3 security_sock_graft +EXPORT_SYMBOL vmlinux 0x0da53921 netdev_state_change +EXPORT_SYMBOL vmlinux 0x0db28a7b alloc_fcdev +EXPORT_SYMBOL vmlinux 0x0db72b6f sock_no_recvmsg +EXPORT_SYMBOL vmlinux 0x0dba8fa8 dquot_release +EXPORT_SYMBOL vmlinux 0x0dedd125 acpi_is_video_device +EXPORT_SYMBOL vmlinux 0x0df0788a dquot_quota_on_mount +EXPORT_SYMBOL vmlinux 0x0e0b1e9d block_commit_write +EXPORT_SYMBOL vmlinux 0x0e0d6d68 ipv6_dev_get_saddr +EXPORT_SYMBOL vmlinux 0x0e1d3c6f tcp_md5_hash_header +EXPORT_SYMBOL vmlinux 0x0e1f5f9b inet_stream_connect +EXPORT_SYMBOL vmlinux 0x0e275608 qdisc_watchdog_schedule +EXPORT_SYMBOL vmlinux 0x0e2cea46 skb_copy_and_csum_dev +EXPORT_SYMBOL vmlinux 0x0e3fd545 agp_generic_free_gatt_table +EXPORT_SYMBOL vmlinux 0x0e6da44a set_normalized_timespec +EXPORT_SYMBOL vmlinux 0x0e799157 sock_no_sendpage +EXPORT_SYMBOL vmlinux 0x0e7c2f1d jbd2_journal_begin_ordered_truncate +EXPORT_SYMBOL vmlinux 0x0e839e25 xfrm4_prepare_output +EXPORT_SYMBOL vmlinux 0x0eb4dfa0 xfrm6_rcv +EXPORT_SYMBOL vmlinux 0x0eb9cd28 unbind_con_driver +EXPORT_SYMBOL vmlinux 0x0ed8cc7b acpi_evaluate_object_typed +EXPORT_SYMBOL vmlinux 0x0ef11fcc pci_enable_bridges +EXPORT_SYMBOL vmlinux 0x0f17008c sock_create_lite +EXPORT_SYMBOL vmlinux 0x0f41eecd devfreq_monitor_stop +EXPORT_SYMBOL vmlinux 0x0f4c91ed ns_to_timespec +EXPORT_SYMBOL vmlinux 0x0f534942 generic_block_bmap +EXPORT_SYMBOL vmlinux 0x0f5f89be journal_forget +EXPORT_SYMBOL vmlinux 0x0f6240be dquot_commit +EXPORT_SYMBOL vmlinux 0x0f7f5dbc cap_mmap_file +EXPORT_SYMBOL vmlinux 0x0fa9e794 unlazy_fpu +EXPORT_SYMBOL vmlinux 0x0faef0ed __tasklet_schedule +EXPORT_SYMBOL vmlinux 0x0fd00a68 acpi_clear_event +EXPORT_SYMBOL vmlinux 0x0fd7a32a tty_hangup +EXPORT_SYMBOL vmlinux 0x0fe5a88a tcp_v4_connect +EXPORT_SYMBOL vmlinux 0x0fe5f069 inet6_release +EXPORT_SYMBOL vmlinux 0x0fed0a35 set_pages_wb +EXPORT_SYMBOL vmlinux 0x0ff2b602 slhc_compress +EXPORT_SYMBOL vmlinux 0x0ff6d0f0 scsi_prep_state_check +EXPORT_SYMBOL vmlinux 0x0ff83008 dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x1019573a generic_ro_fops +EXPORT_SYMBOL vmlinux 0x103984e6 inet6_protos +EXPORT_SYMBOL vmlinux 0x103b1d18 mfd_remove_devices +EXPORT_SYMBOL vmlinux 0x103bab04 dquot_quota_off +EXPORT_SYMBOL vmlinux 0x1042aca0 aio_complete +EXPORT_SYMBOL vmlinux 0x104a64c5 md_write_end +EXPORT_SYMBOL vmlinux 0x105d42ad bioset_integrity_free +EXPORT_SYMBOL vmlinux 0x10664a5f devm_request_threaded_irq +EXPORT_SYMBOL vmlinux 0x106edacf tcp_gro_receive +EXPORT_SYMBOL vmlinux 0x1072a394 csum_partial_copy_from_user +EXPORT_SYMBOL vmlinux 0x107e52ff netdev_printk +EXPORT_SYMBOL vmlinux 0x108c03f9 arp_find +EXPORT_SYMBOL vmlinux 0x1095eee3 init_special_inode +EXPORT_SYMBOL vmlinux 0x10be11ae udp_push_pending_frames +EXPORT_SYMBOL vmlinux 0x10e06c95 xfrm_input +EXPORT_SYMBOL vmlinux 0x10eb492f dput +EXPORT_SYMBOL vmlinux 0x10ee20bb default_blu +EXPORT_SYMBOL vmlinux 0x10f5a16b __pci_enable_wake +EXPORT_SYMBOL vmlinux 0x11089ac7 _ctype +EXPORT_SYMBOL vmlinux 0x11267875 scsi_extd_sense_format +EXPORT_SYMBOL vmlinux 0x1163f0a7 blk_max_low_pfn +EXPORT_SYMBOL vmlinux 0x117093be qdisc_class_hash_init +EXPORT_SYMBOL vmlinux 0x1178bd3d gnet_stats_copy_app +EXPORT_SYMBOL vmlinux 0x119fed61 inode_sub_bytes +EXPORT_SYMBOL vmlinux 0x11dc7fff sock_no_socketpair +EXPORT_SYMBOL vmlinux 0x11e2ec12 flex_array_free_parts +EXPORT_SYMBOL vmlinux 0x11e640da unregister_nls +EXPORT_SYMBOL vmlinux 0x11f57a33 inet_del_offload +EXPORT_SYMBOL vmlinux 0x11f7ed4c hex_to_bin +EXPORT_SYMBOL vmlinux 0x11f94b46 pci_find_parent_resource +EXPORT_SYMBOL vmlinux 0x11fc4f4a security_path_chmod +EXPORT_SYMBOL vmlinux 0x1203a770 idr_remove +EXPORT_SYMBOL vmlinux 0x120b336a __rb_insert_augmented +EXPORT_SYMBOL vmlinux 0x1217fb58 pci_scan_bridge +EXPORT_SYMBOL vmlinux 0x1218fb4d neigh_seq_next +EXPORT_SYMBOL vmlinux 0x121f28bf aio_put_req +EXPORT_SYMBOL vmlinux 0x1220a918 free_inode_nonrcu +EXPORT_SYMBOL vmlinux 0x12412623 scsi_add_host_with_dma +EXPORT_SYMBOL vmlinux 0x126d8180 __xfrm_policy_check +EXPORT_SYMBOL vmlinux 0x128b1e89 flush_delayed_work +EXPORT_SYMBOL vmlinux 0x129de341 wrmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x12a38747 usleep_range +EXPORT_SYMBOL vmlinux 0x12b06345 nobh_truncate_page +EXPORT_SYMBOL vmlinux 0x12c894ac tty_port_carrier_raised +EXPORT_SYMBOL vmlinux 0x12dfeb12 vprintk_emit +EXPORT_SYMBOL vmlinux 0x12f99022 inet_frags_init_net +EXPORT_SYMBOL vmlinux 0x13307fde vsscanf +EXPORT_SYMBOL vmlinux 0x137af9b3 __generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x13d0adf7 __kfifo_out +EXPORT_SYMBOL vmlinux 0x13da171b napi_gro_flush +EXPORT_SYMBOL vmlinux 0x13e27a43 skb_free_datagram +EXPORT_SYMBOL vmlinux 0x13f4049d __dquot_free_space +EXPORT_SYMBOL vmlinux 0x13f42152 system_entering_hibernation +EXPORT_SYMBOL vmlinux 0x140713db vfs_read +EXPORT_SYMBOL vmlinux 0x1409ee67 napi_gro_frags +EXPORT_SYMBOL vmlinux 0x1417e9d7 inet_csk_reset_keepalive_timer +EXPORT_SYMBOL vmlinux 0x14261a36 backlight_force_update +EXPORT_SYMBOL vmlinux 0x142c56b6 skb_append_datato_frags +EXPORT_SYMBOL vmlinux 0x1430e6e0 unregister_acpi_notifier +EXPORT_SYMBOL vmlinux 0x1449897f fb_class +EXPORT_SYMBOL vmlinux 0x146d9142 blk_integrity_is_initialized +EXPORT_SYMBOL vmlinux 0x1475f8bb block_invalidatepage +EXPORT_SYMBOL vmlinux 0x147d3415 __cleancache_init_fs +EXPORT_SYMBOL vmlinux 0x14a9c189 uart_remove_one_port +EXPORT_SYMBOL vmlinux 0x14dc64a4 invalidate_mapping_pages +EXPORT_SYMBOL vmlinux 0x14ed1b66 tcf_destroy_chain +EXPORT_SYMBOL vmlinux 0x14f7fb46 sock_no_poll +EXPORT_SYMBOL vmlinux 0x150389d6 acpi_processor_power_init_bm_check +EXPORT_SYMBOL vmlinux 0x154c6338 dm_kcopyd_client_destroy +EXPORT_SYMBOL vmlinux 0x1551dc51 bitmap_find_free_region +EXPORT_SYMBOL vmlinux 0x15667a5a md_flush_request +EXPORT_SYMBOL vmlinux 0x15692c87 param_ops_int +EXPORT_SYMBOL vmlinux 0x1569b0da tcp_v4_do_rcv +EXPORT_SYMBOL vmlinux 0x156e88fe security_mmap_file +EXPORT_SYMBOL vmlinux 0x15832a6a xen_biovec_phys_mergeable +EXPORT_SYMBOL vmlinux 0x15954a93 vm_mmap +EXPORT_SYMBOL vmlinux 0x15974482 sk_run_filter +EXPORT_SYMBOL vmlinux 0x15a74094 mmc_card_awake +EXPORT_SYMBOL vmlinux 0x15c42714 tty_port_block_til_ready +EXPORT_SYMBOL vmlinux 0x15c71e9d genl_register_mc_group +EXPORT_SYMBOL vmlinux 0x15d6ce47 unregister_con_driver +EXPORT_SYMBOL vmlinux 0x15f571ec blk_set_stacking_limits +EXPORT_SYMBOL vmlinux 0x15f6708e compat_sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0x1604bbf5 jbd2_journal_set_triggers +EXPORT_SYMBOL vmlinux 0x160ea4c8 sfi_disabled +EXPORT_SYMBOL vmlinux 0x16154a71 tcp_gro_complete +EXPORT_SYMBOL vmlinux 0x161a9c87 tcp_rcv_established +EXPORT_SYMBOL vmlinux 0x1627ed72 register_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x162b1358 phy_detach +EXPORT_SYMBOL vmlinux 0x16305289 warn_slowpath_null +EXPORT_SYMBOL vmlinux 0x1637ff0f _raw_spin_lock_bh +EXPORT_SYMBOL vmlinux 0x1657176e xfrm6_rcv_spi +EXPORT_SYMBOL vmlinux 0x16662e59 arp_tbl +EXPORT_SYMBOL vmlinux 0x166926ed tcf_hash_new_index +EXPORT_SYMBOL vmlinux 0x166963a7 dev_mc_del_global +EXPORT_SYMBOL vmlinux 0x167c5967 print_hex_dump +EXPORT_SYMBOL vmlinux 0x167e7f9d __get_user_1 +EXPORT_SYMBOL vmlinux 0x1681179b simple_unlink +EXPORT_SYMBOL vmlinux 0x16820c00 read_dev_sector +EXPORT_SYMBOL vmlinux 0x168f1082 _raw_write_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x16a3366a inet6_add_offload +EXPORT_SYMBOL vmlinux 0x16a85d4c compat_mc_getsockopt +EXPORT_SYMBOL vmlinux 0x16f4f078 path_put +EXPORT_SYMBOL vmlinux 0x170c25ee acpi_get_next_object +EXPORT_SYMBOL vmlinux 0x170e9a4b __getblk +EXPORT_SYMBOL vmlinux 0x171c1464 skb_queue_head +EXPORT_SYMBOL vmlinux 0x172d07ca __scsi_alloc_queue +EXPORT_SYMBOL vmlinux 0x175d9859 thermal_zone_unbind_cooling_device +EXPORT_SYMBOL vmlinux 0x1790d76b _raw_read_lock_irqsave +EXPORT_SYMBOL vmlinux 0x179763e1 generic_fillattr +EXPORT_SYMBOL vmlinux 0x17af28f1 acpi_walk_resources +EXPORT_SYMBOL vmlinux 0x17b64d09 dqstats +EXPORT_SYMBOL vmlinux 0x17b7f9d5 dm_unregister_target +EXPORT_SYMBOL vmlinux 0x17c25d56 jbd2_journal_destroy +EXPORT_SYMBOL vmlinux 0x17cd4cc1 check_disk_change +EXPORT_SYMBOL vmlinux 0x17df17bc sysctl_tcp_ecn +EXPORT_SYMBOL vmlinux 0x17e1688b dcache_dir_open +EXPORT_SYMBOL vmlinux 0x17ec9f5b __sk_mem_schedule +EXPORT_SYMBOL vmlinux 0x17f341a0 i8042_lock_chip +EXPORT_SYMBOL vmlinux 0x17fe329b scsi_print_result +EXPORT_SYMBOL vmlinux 0x1802ab98 bd_set_size +EXPORT_SYMBOL vmlinux 0x180b2dc6 ether_setup +EXPORT_SYMBOL vmlinux 0x183aed23 netdev_crit +EXPORT_SYMBOL vmlinux 0x183fa88b mempool_alloc_slab +EXPORT_SYMBOL vmlinux 0x18472f8d mmc_set_data_timeout +EXPORT_SYMBOL vmlinux 0x184b82fb mmc_vddrange_to_ocrmask +EXPORT_SYMBOL vmlinux 0x184e6c85 radix_tree_gang_lookup_slot +EXPORT_SYMBOL vmlinux 0x185cab70 unlock_rename +EXPORT_SYMBOL vmlinux 0x1874d54d dquot_set_dqblk +EXPORT_SYMBOL vmlinux 0x188919a0 lock_fb_info +EXPORT_SYMBOL vmlinux 0x188a3dfb timespec_trunc +EXPORT_SYMBOL vmlinux 0x189868d7 get_random_bytes_arch +EXPORT_SYMBOL vmlinux 0x18a1fc32 send_sig_info +EXPORT_SYMBOL vmlinux 0x18b6c698 mount_bdev +EXPORT_SYMBOL vmlinux 0x18b72573 register_kmmio_probe +EXPORT_SYMBOL vmlinux 0x18dbc26d netpoll_parse_options +EXPORT_SYMBOL vmlinux 0x1902035f vfs_mkdir +EXPORT_SYMBOL vmlinux 0x1917fd7e xfrm_state_walk +EXPORT_SYMBOL vmlinux 0x192a2063 pci_bus_find_capability +EXPORT_SYMBOL vmlinux 0x19444627 memcpy_fromiovecend +EXPORT_SYMBOL vmlinux 0x19451e94 fib_default_rule_pref +EXPORT_SYMBOL vmlinux 0x1966817a skb_copy_expand +EXPORT_SYMBOL vmlinux 0x19696bb3 con_copy_unimap +EXPORT_SYMBOL vmlinux 0x19705e66 padata_register_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x1976aa06 param_ops_bool +EXPORT_SYMBOL vmlinux 0x19941de1 fasync_helper +EXPORT_SYMBOL vmlinux 0x199ed0cd net_disable_timestamp +EXPORT_SYMBOL vmlinux 0x19a8f078 tcp_mtup_init +EXPORT_SYMBOL vmlinux 0x19a90968 dmam_pool_create +EXPORT_SYMBOL vmlinux 0x19ab25c7 dev_warn +EXPORT_SYMBOL vmlinux 0x19bd383b security_secmark_refcount_dec +EXPORT_SYMBOL vmlinux 0x19dc193e jbd2_journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x19ea64be neigh_connected_output +EXPORT_SYMBOL vmlinux 0x19f462aa __inet_stream_connect +EXPORT_SYMBOL vmlinux 0x19f83900 amd_iommu_flush_tlb +EXPORT_SYMBOL vmlinux 0x1a2e7fc8 blk_queue_free_tags +EXPORT_SYMBOL vmlinux 0x1a393a59 neigh_ifdown +EXPORT_SYMBOL vmlinux 0x1a45cb6c acpi_disabled +EXPORT_SYMBOL vmlinux 0x1a63af34 vga_switcheroo_process_delayed_switch +EXPORT_SYMBOL vmlinux 0x1abde9f6 pci_get_subsys +EXPORT_SYMBOL vmlinux 0x1ac5d3cb strcspn +EXPORT_SYMBOL vmlinux 0x1ace138d bitmap_allocate_region +EXPORT_SYMBOL vmlinux 0x1add9a25 bdi_init +EXPORT_SYMBOL vmlinux 0x1ae14ef5 _raw_write_trylock +EXPORT_SYMBOL vmlinux 0x1aeb3a0e acpi_pci_register_driver +EXPORT_SYMBOL vmlinux 0x1aef1bc1 noop_llseek +EXPORT_SYMBOL vmlinux 0x1af164b8 inet_sk_rebuild_header +EXPORT_SYMBOL vmlinux 0x1b015d25 bitmap_parselist +EXPORT_SYMBOL vmlinux 0x1b13bba5 kill_block_super +EXPORT_SYMBOL vmlinux 0x1b146206 framebuffer_release +EXPORT_SYMBOL vmlinux 0x1b1e1088 sg_nents +EXPORT_SYMBOL vmlinux 0x1b4c73c7 i2c_smbus_xfer +EXPORT_SYMBOL vmlinux 0x1b5c7694 phy_find_first +EXPORT_SYMBOL vmlinux 0x1b5dc4ed mmc_detect_card_removed +EXPORT_SYMBOL vmlinux 0x1b6314fd in_aton +EXPORT_SYMBOL vmlinux 0x1b73a652 nf_nat_decode_session_hook +EXPORT_SYMBOL vmlinux 0x1b76c6b1 ab3100_event_register +EXPORT_SYMBOL vmlinux 0x1b82fefa md_unplug +EXPORT_SYMBOL vmlinux 0x1b8b95ad i8042_unlock_chip +EXPORT_SYMBOL vmlinux 0x1b961dae noop_fsync +EXPORT_SYMBOL vmlinux 0x1b9e0ff1 scsilun_to_int +EXPORT_SYMBOL vmlinux 0x1ba0eb1a mb_cache_entry_find_first +EXPORT_SYMBOL vmlinux 0x1bafc0d6 seq_put_decimal_ull +EXPORT_SYMBOL vmlinux 0x1bb9a5c4 devfreq_add_device +EXPORT_SYMBOL vmlinux 0x1bdc26cf sg_copy_from_buffer +EXPORT_SYMBOL vmlinux 0x1be63972 alloc_disk_node +EXPORT_SYMBOL vmlinux 0x1beae7a9 dquot_file_open +EXPORT_SYMBOL vmlinux 0x1bf744dc generic_pipe_buf_confirm +EXPORT_SYMBOL vmlinux 0x1c2e4834 scsi_eh_restore_cmnd +EXPORT_SYMBOL vmlinux 0x1c37e781 tcp_release_cb +EXPORT_SYMBOL vmlinux 0x1c60343a md_register_thread +EXPORT_SYMBOL vmlinux 0x1c76f3a5 inet_getname +EXPORT_SYMBOL vmlinux 0x1c8a04b0 acpi_reset +EXPORT_SYMBOL vmlinux 0x1c9d10bc blk_sync_queue +EXPORT_SYMBOL vmlinux 0x1ca63aeb sk_page_frag_refill +EXPORT_SYMBOL vmlinux 0x1cc3d659 no_llseek +EXPORT_SYMBOL vmlinux 0x1cc6719a register_reboot_notifier +EXPORT_SYMBOL vmlinux 0x1cf641e3 fb_set_suspend +EXPORT_SYMBOL vmlinux 0x1cfadf4a unregister_console +EXPORT_SYMBOL vmlinux 0x1d062742 uart_unregister_driver +EXPORT_SYMBOL vmlinux 0x1d0ac6e0 tcf_em_tree_validate +EXPORT_SYMBOL vmlinux 0x1d11a961 sock_setsockopt +EXPORT_SYMBOL vmlinux 0x1d30bdcc inet_frag_evictor +EXPORT_SYMBOL vmlinux 0x1d3a0011 pci_set_dma_max_seg_size +EXPORT_SYMBOL vmlinux 0x1d43e5c9 inode_set_bytes +EXPORT_SYMBOL vmlinux 0x1d4cc70d serial8250_do_set_termios +EXPORT_SYMBOL vmlinux 0x1d6d7a07 test_set_page_writeback +EXPORT_SYMBOL vmlinux 0x1d8c6218 get_fs_type +EXPORT_SYMBOL vmlinux 0x1db17d86 swiotlb_unmap_sg +EXPORT_SYMBOL vmlinux 0x1db7706b __copy_user_nocache +EXPORT_SYMBOL vmlinux 0x1dba4242 __pci_register_driver +EXPORT_SYMBOL vmlinux 0x1dc0b5ec devfreq_monitor_suspend +EXPORT_SYMBOL vmlinux 0x1dc36131 fb_destroy_modedb +EXPORT_SYMBOL vmlinux 0x1dd571e6 fb_copy_cmap +EXPORT_SYMBOL vmlinux 0x1ddeacd8 mnt_pin +EXPORT_SYMBOL vmlinux 0x1de1a49a page_symlink +EXPORT_SYMBOL vmlinux 0x1df44f14 skb_copy_datagram_iovec +EXPORT_SYMBOL vmlinux 0x1dfba7fe sock_no_ioctl +EXPORT_SYMBOL vmlinux 0x1e047854 warn_slowpath_fmt +EXPORT_SYMBOL vmlinux 0x1e0c2be4 ioremap_wc +EXPORT_SYMBOL vmlinux 0x1e26be3b get_anon_bdev +EXPORT_SYMBOL vmlinux 0x1e3cf56b security_path_rmdir +EXPORT_SYMBOL vmlinux 0x1e6d26a8 strstr +EXPORT_SYMBOL vmlinux 0x1e9edfb7 seq_hlist_start_head_rcu +EXPORT_SYMBOL vmlinux 0x1ec105b8 complete_request_key +EXPORT_SYMBOL vmlinux 0x1ec4eb34 flex_array_prealloc +EXPORT_SYMBOL vmlinux 0x1eed2692 __starget_for_each_device +EXPORT_SYMBOL vmlinux 0x1f043195 blk_integrity_unregister +EXPORT_SYMBOL vmlinux 0x1f109965 update_time +EXPORT_SYMBOL vmlinux 0x1f173a7c iov_iter_copy_from_user_atomic +EXPORT_SYMBOL vmlinux 0x1f4d225f amd_iommu_complete_ppr +EXPORT_SYMBOL vmlinux 0x1f5b350d phy_disconnect +EXPORT_SYMBOL vmlinux 0x1f6d393d agp_backend_acquire +EXPORT_SYMBOL vmlinux 0x1f8207a6 dev_set_promiscuity +EXPORT_SYMBOL vmlinux 0x1f822217 schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x1fa392a6 blk_queue_max_segment_size +EXPORT_SYMBOL vmlinux 0x1fa44abc generic_file_aio_write +EXPORT_SYMBOL vmlinux 0x1fbd16da ip_tos2prio +EXPORT_SYMBOL vmlinux 0x1fcbddb9 block_truncate_page +EXPORT_SYMBOL vmlinux 0x1fd07fff kdb_grepping_flag +EXPORT_SYMBOL vmlinux 0x1fd64f63 swiotlb_free_coherent +EXPORT_SYMBOL vmlinux 0x1fe912f1 netdev_alloc_frag +EXPORT_SYMBOL vmlinux 0x1fec8069 input_free_device +EXPORT_SYMBOL vmlinux 0x1fedf0f4 __request_region +EXPORT_SYMBOL vmlinux 0x1ff775cf set_nlink +EXPORT_SYMBOL vmlinux 0x20000329 simple_strtoul +EXPORT_SYMBOL vmlinux 0x20056746 ifla_policy +EXPORT_SYMBOL vmlinux 0x2005e68a acpi_remove_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x2008bade dev_uc_add +EXPORT_SYMBOL vmlinux 0x20092385 acpi_enter_sleep_state_s4bios +EXPORT_SYMBOL vmlinux 0x200b7313 mmc_free_host +EXPORT_SYMBOL vmlinux 0x200ee8c4 __page_cache_alloc +EXPORT_SYMBOL vmlinux 0x20154deb pci_stop_and_remove_bus_device +EXPORT_SYMBOL vmlinux 0x2072ee9b request_threaded_irq +EXPORT_SYMBOL vmlinux 0x207d3d33 xfrm_cfg_mutex +EXPORT_SYMBOL vmlinux 0x208739f6 acpi_load_table +EXPORT_SYMBOL vmlinux 0x209046f1 kill_pgrp +EXPORT_SYMBOL vmlinux 0x209bae53 phy_register_fixup_for_uid +EXPORT_SYMBOL vmlinux 0x20a789ac irq_set_chip_data +EXPORT_SYMBOL vmlinux 0x20abc15b acpi_processor_register_performance +EXPORT_SYMBOL vmlinux 0x20c55ae0 sscanf +EXPORT_SYMBOL vmlinux 0x20d65616 key_put +EXPORT_SYMBOL vmlinux 0x20d82916 netif_napi_add +EXPORT_SYMBOL vmlinux 0x20eadeb6 ip_compute_csum +EXPORT_SYMBOL vmlinux 0x2102d66d dump_trace +EXPORT_SYMBOL vmlinux 0x21315700 param_get_bool +EXPORT_SYMBOL vmlinux 0x214308f1 tty_port_lower_dtr_rts +EXPORT_SYMBOL vmlinux 0x2158e3d2 mmc_can_trim +EXPORT_SYMBOL vmlinux 0x215a74bc phy_ethtool_gset +EXPORT_SYMBOL vmlinux 0x215ebd78 bitrev16 +EXPORT_SYMBOL vmlinux 0x217dda13 flex_array_get +EXPORT_SYMBOL vmlinux 0x21b983e5 igrab +EXPORT_SYMBOL vmlinux 0x21ba49d0 dquot_enable +EXPORT_SYMBOL vmlinux 0x21e0ea22 acpi_get_id +EXPORT_SYMBOL vmlinux 0x22123f83 led_blink_set +EXPORT_SYMBOL vmlinux 0x22229c22 bdevname +EXPORT_SYMBOL vmlinux 0x222428e1 md_write_start +EXPORT_SYMBOL vmlinux 0x222e7ce2 sysfs_streq +EXPORT_SYMBOL vmlinux 0x225bfd0f scsi_nonblockable_ioctl +EXPORT_SYMBOL vmlinux 0x226b6432 tcp_ioctl +EXPORT_SYMBOL vmlinux 0x2276db98 kstrtoint +EXPORT_SYMBOL vmlinux 0x227874e0 tty_port_close_start +EXPORT_SYMBOL vmlinux 0x227ba176 journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0x22a092b3 dev_vprintk_emit +EXPORT_SYMBOL vmlinux 0x22adc951 serial8250_register_8250_port +EXPORT_SYMBOL vmlinux 0x22b325d5 kd_mksound +EXPORT_SYMBOL vmlinux 0x22bca7ad tcf_hash_create +EXPORT_SYMBOL vmlinux 0x22c86148 vfs_write +EXPORT_SYMBOL vmlinux 0x22e68aa5 padata_alloc_possible +EXPORT_SYMBOL vmlinux 0x22ea672f pnp_device_detach +EXPORT_SYMBOL vmlinux 0x22f96042 xfrm_unregister_km +EXPORT_SYMBOL vmlinux 0x22fd7664 __insert_inode_hash +EXPORT_SYMBOL vmlinux 0x22fd9ad0 sleep_on_timeout +EXPORT_SYMBOL vmlinux 0x230eed3c pci_scan_bus_parented +EXPORT_SYMBOL vmlinux 0x231d129b blk_queue_logical_block_size +EXPORT_SYMBOL vmlinux 0x231d4001 fb_edid_add_monspecs +EXPORT_SYMBOL vmlinux 0x2329b381 frontswap_register_ops +EXPORT_SYMBOL vmlinux 0x232ceb64 uart_resume_port +EXPORT_SYMBOL vmlinux 0x233c01c1 sock_no_mmap +EXPORT_SYMBOL vmlinux 0x234e87a2 tcf_em_tree_dump +EXPORT_SYMBOL vmlinux 0x23532c4d ftrace_print_flags_seq +EXPORT_SYMBOL vmlinux 0x235ec86f sget +EXPORT_SYMBOL vmlinux 0x236720a7 n_tty_compat_ioctl_helper +EXPORT_SYMBOL vmlinux 0x236fa0e0 __inet6_hash +EXPORT_SYMBOL vmlinux 0x23891858 tcf_exts_change +EXPORT_SYMBOL vmlinux 0x239d71fb devfreq_monitor_resume +EXPORT_SYMBOL vmlinux 0x23a1d8c7 scsi_device_put +EXPORT_SYMBOL vmlinux 0x23a574fd security_secmark_relabel_packet +EXPORT_SYMBOL vmlinux 0x23b1fb00 xfrm_state_lookup_byaddr +EXPORT_SYMBOL vmlinux 0x23b9d6e2 mangle_path +EXPORT_SYMBOL vmlinux 0x23c8f257 slhc_uncompress +EXPORT_SYMBOL vmlinux 0x23c9891c kstrtoint_from_user +EXPORT_SYMBOL vmlinux 0x23e0e13e tcp_parse_options +EXPORT_SYMBOL vmlinux 0x23fab956 inet_addr_type +EXPORT_SYMBOL vmlinux 0x23fd3028 vmalloc_node +EXPORT_SYMBOL vmlinux 0x24212d86 __frontswap_invalidate_page +EXPORT_SYMBOL vmlinux 0x2439206e netdev_err +EXPORT_SYMBOL vmlinux 0x24428be5 strncpy_from_user +EXPORT_SYMBOL vmlinux 0x24533539 cpufreq_get_policy +EXPORT_SYMBOL vmlinux 0x2458488d bdev_stack_limits +EXPORT_SYMBOL vmlinux 0x24592df8 phy_ethtool_sset +EXPORT_SYMBOL vmlinux 0x2459bbcc console_set_on_cmdline +EXPORT_SYMBOL vmlinux 0x2473b52c tcf_em_tree_destroy +EXPORT_SYMBOL vmlinux 0x24779fc4 clocksource_register +EXPORT_SYMBOL vmlinux 0x2482e688 vsprintf +EXPORT_SYMBOL vmlinux 0x2484adc3 __kfifo_to_user_r +EXPORT_SYMBOL vmlinux 0x249216cf inet6_getname +EXPORT_SYMBOL vmlinux 0x24b563e9 cont_write_begin +EXPORT_SYMBOL vmlinux 0x24e42030 console_start +EXPORT_SYMBOL vmlinux 0x24fdac79 wake_bit_function +EXPORT_SYMBOL vmlinux 0x250de967 follow_down_one +EXPORT_SYMBOL vmlinux 0x25277497 rfkill_register +EXPORT_SYMBOL vmlinux 0x252cfe53 vfs_readlink +EXPORT_SYMBOL vmlinux 0x25313bf1 vga_client_register +EXPORT_SYMBOL vmlinux 0x253bdb78 param_get_int +EXPORT_SYMBOL vmlinux 0x254f2ca3 override_creds +EXPORT_SYMBOL vmlinux 0x2575690e xfrm6_input_addr +EXPORT_SYMBOL vmlinux 0x2578c781 block_write_full_page +EXPORT_SYMBOL vmlinux 0x25820c64 fs_overflowuid +EXPORT_SYMBOL vmlinux 0x25942518 input_mt_init_slots +EXPORT_SYMBOL vmlinux 0x25a10b1b sock_kfree_s +EXPORT_SYMBOL vmlinux 0x25aef2a8 dm_kcopyd_copy +EXPORT_SYMBOL vmlinux 0x25bce400 skb_kill_datagram +EXPORT_SYMBOL vmlinux 0x25bf7037 tcp_v4_md5_hash_skb +EXPORT_SYMBOL vmlinux 0x25c677c4 mac_pton +EXPORT_SYMBOL vmlinux 0x25d48ac9 xfrm_prepare_input +EXPORT_SYMBOL vmlinux 0x25eecb27 i2c_del_adapter +EXPORT_SYMBOL vmlinux 0x25f2e79c get_write_access +EXPORT_SYMBOL vmlinux 0x25fb5c44 acpi_bus_hot_remove_device +EXPORT_SYMBOL vmlinux 0x263122f8 wait_for_completion_interruptible_timeout +EXPORT_SYMBOL vmlinux 0x2632d7fc __qdisc_calculate_pkt_len +EXPORT_SYMBOL vmlinux 0x26351887 jbd2_log_start_commit +EXPORT_SYMBOL vmlinux 0x263beb75 ecryptfs_get_versions +EXPORT_SYMBOL vmlinux 0x2650d835 sysctl_ip_early_demux +EXPORT_SYMBOL vmlinux 0x2665d53a key_create_or_update +EXPORT_SYMBOL vmlinux 0x266a2d62 mpage_writepage +EXPORT_SYMBOL vmlinux 0x2685c3d7 __sg_alloc_table +EXPORT_SYMBOL vmlinux 0x26948d96 copy_user_enhanced_fast_string +EXPORT_SYMBOL vmlinux 0x26ac969f kmem_cache_create +EXPORT_SYMBOL vmlinux 0x26b1cb13 pci_enable_obff +EXPORT_SYMBOL vmlinux 0x26e76fb8 sysctl_udp_wmem_min +EXPORT_SYMBOL vmlinux 0x26f0453a blk_set_default_limits +EXPORT_SYMBOL vmlinux 0x26f5e89d ppp_register_channel +EXPORT_SYMBOL vmlinux 0x26fd3fd6 scsi_target_resume +EXPORT_SYMBOL vmlinux 0x2701fa9c scsi_put_command +EXPORT_SYMBOL vmlinux 0x27063990 phy_scan_fixups +EXPORT_SYMBOL vmlinux 0x2712c642 bdget +EXPORT_SYMBOL vmlinux 0x271cba95 acpi_bus_private_data_handler +EXPORT_SYMBOL vmlinux 0x272d394e mtrr_del +EXPORT_SYMBOL vmlinux 0x274d08dc __kfifo_dma_out_prepare +EXPORT_SYMBOL vmlinux 0x275ad7d5 vm_insert_pfn +EXPORT_SYMBOL vmlinux 0x2761b692 cpu_sibling_map +EXPORT_SYMBOL vmlinux 0x27810361 acpi_os_wait_events_complete +EXPORT_SYMBOL vmlinux 0x27864d57 memparse +EXPORT_SYMBOL vmlinux 0x279d83e0 dev_set_mtu +EXPORT_SYMBOL vmlinux 0x27a6a1b0 generic_write_sync +EXPORT_SYMBOL vmlinux 0x27ae7d0c ec_transaction +EXPORT_SYMBOL vmlinux 0x27bbf221 disable_irq_nosync +EXPORT_SYMBOL vmlinux 0x27bf4de3 amd_iommu_domain_enable_v2 +EXPORT_SYMBOL vmlinux 0x27c2197f param_set_short +EXPORT_SYMBOL vmlinux 0x27c33efe csum_ipv6_magic +EXPORT_SYMBOL vmlinux 0x27cd907d alloc_fddidev +EXPORT_SYMBOL vmlinux 0x27e1a049 printk +EXPORT_SYMBOL vmlinux 0x27e73f2b pci_scan_slot +EXPORT_SYMBOL vmlinux 0x27eeb73b sk_common_release +EXPORT_SYMBOL vmlinux 0x27fe2d87 udp_flush_pending_frames +EXPORT_SYMBOL vmlinux 0x281823c5 __kfifo_out_peek +EXPORT_SYMBOL vmlinux 0x2819a2f1 flush_signals +EXPORT_SYMBOL vmlinux 0x28318305 snprintf +EXPORT_SYMBOL vmlinux 0x2832b407 jbd2_journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0x283dd23f bio_map_user +EXPORT_SYMBOL vmlinux 0x2846832b xfrm_user_policy +EXPORT_SYMBOL vmlinux 0x284d46b1 sock_no_listen +EXPORT_SYMBOL vmlinux 0x286c70a1 pci_biosrom_size +EXPORT_SYMBOL vmlinux 0x28a2ed02 scsi_build_sense_buffer +EXPORT_SYMBOL vmlinux 0x28abfe6e scsi_kmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x28cf1823 cfb_imageblit +EXPORT_SYMBOL vmlinux 0x28db89f5 uart_add_one_port +EXPORT_SYMBOL vmlinux 0x28e6dfbd read_cache_page_gfp +EXPORT_SYMBOL vmlinux 0x28fa4a8e __get_user_pages +EXPORT_SYMBOL vmlinux 0x2919736a account_page_writeback +EXPORT_SYMBOL vmlinux 0x291c0abd tc_classify_compat +EXPORT_SYMBOL vmlinux 0x294327f2 drop_nlink +EXPORT_SYMBOL vmlinux 0x29537c9e alloc_chrdev_region +EXPORT_SYMBOL vmlinux 0x295468da dev_addr_flush +EXPORT_SYMBOL vmlinux 0x2958ff3c __sb_start_write +EXPORT_SYMBOL vmlinux 0x296455f1 inet6_unregister_protosw +EXPORT_SYMBOL vmlinux 0x297d60a0 __page_symlink +EXPORT_SYMBOL vmlinux 0x29838023 agp_generic_create_gatt_table +EXPORT_SYMBOL vmlinux 0x29aaae17 schedule_work +EXPORT_SYMBOL vmlinux 0x29c16f6c crypto_sha1_update +EXPORT_SYMBOL vmlinux 0x29cb47a8 pci_dev_get +EXPORT_SYMBOL vmlinux 0x29da26ef scsi_host_alloc +EXPORT_SYMBOL vmlinux 0x29f2bea4 compat_nf_getsockopt +EXPORT_SYMBOL vmlinux 0x2a01adf8 phy_start_aneg +EXPORT_SYMBOL vmlinux 0x2a02335a datagram_poll +EXPORT_SYMBOL vmlinux 0x2a303d4d check_signature +EXPORT_SYMBOL vmlinux 0x2a37d074 dma_pool_free +EXPORT_SYMBOL vmlinux 0x2a46d63d pci_bus_type +EXPORT_SYMBOL vmlinux 0x2a4d61ad key_task_permission +EXPORT_SYMBOL vmlinux 0x2a5de90c blk_end_request_cur +EXPORT_SYMBOL vmlinux 0x2a65b193 security_path_rename +EXPORT_SYMBOL vmlinux 0x2a6e6109 __init_rwsem +EXPORT_SYMBOL vmlinux 0x2a72d708 agp_generic_insert_memory +EXPORT_SYMBOL vmlinux 0x2a942c7d unlock_new_inode +EXPORT_SYMBOL vmlinux 0x2aa84e45 notify_thermal_framework +EXPORT_SYMBOL vmlinux 0x2ab368cd seq_path +EXPORT_SYMBOL vmlinux 0x2abbead5 blk_get_request +EXPORT_SYMBOL vmlinux 0x2ac3a324 pci_bus_read_config_dword +EXPORT_SYMBOL vmlinux 0x2ae76ad2 netlink_broadcast +EXPORT_SYMBOL vmlinux 0x2b090a0c dquot_alloc +EXPORT_SYMBOL vmlinux 0x2b0ba2b0 scsi_sense_desc_find +EXPORT_SYMBOL vmlinux 0x2b0e63e3 seq_puts +EXPORT_SYMBOL vmlinux 0x2b14850b blk_rq_unmap_user +EXPORT_SYMBOL vmlinux 0x2b2ce78b kstrtos8 +EXPORT_SYMBOL vmlinux 0x2b445dde abx500_startup_irq_enabled +EXPORT_SYMBOL vmlinux 0x2b450aaa mount_single +EXPORT_SYMBOL vmlinux 0x2b51837e proc_doulongvec_ms_jiffies_minmax +EXPORT_SYMBOL vmlinux 0x2b6302dc inet_frag_find +EXPORT_SYMBOL vmlinux 0x2b73f779 read_cache_pages +EXPORT_SYMBOL vmlinux 0x2b8dbd75 in_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0x2b9da7a4 genl_lock +EXPORT_SYMBOL vmlinux 0x2ba707a8 sysctl_tcp_low_latency +EXPORT_SYMBOL vmlinux 0x2bb55d6e acpi_remove_notify_handler +EXPORT_SYMBOL vmlinux 0x2bba4555 fsync_bdev +EXPORT_SYMBOL vmlinux 0x2bcb471d load_nls +EXPORT_SYMBOL vmlinux 0x2bea98ca tty_name +EXPORT_SYMBOL vmlinux 0x2bfeb410 acpi_get_handle +EXPORT_SYMBOL vmlinux 0x2c1e20cf pci_disable_msi +EXPORT_SYMBOL vmlinux 0x2c1f63ef jbd2_journal_start_commit +EXPORT_SYMBOL vmlinux 0x2c256e1f input_scancode_to_scalar +EXPORT_SYMBOL vmlinux 0x2c5d3a52 ida_simple_get +EXPORT_SYMBOL vmlinux 0x2c67c667 __skb_checksum_complete +EXPORT_SYMBOL vmlinux 0x2cacf67e compat_ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x2cc4b547 iterate_mounts +EXPORT_SYMBOL vmlinux 0x2cf73cb7 kstrtoll_from_user +EXPORT_SYMBOL vmlinux 0x2d140a58 genl_unlock +EXPORT_SYMBOL vmlinux 0x2d37f5da nla_reserve +EXPORT_SYMBOL vmlinux 0x2d4e591c jbd2__journal_restart +EXPORT_SYMBOL vmlinux 0x2d621e0e request_key +EXPORT_SYMBOL vmlinux 0x2d651aa2 i2c_master_send +EXPORT_SYMBOL vmlinux 0x2d8628ff inet_dgram_ops +EXPORT_SYMBOL vmlinux 0x2d89342a scsi_show_sense_hdr +EXPORT_SYMBOL vmlinux 0x2d8b9a10 scsi_eh_prep_cmnd +EXPORT_SYMBOL vmlinux 0x2d9e82be skb_push +EXPORT_SYMBOL vmlinux 0x2dbc268f inode_newsize_ok +EXPORT_SYMBOL vmlinux 0x2dc5dff5 max8925_reg_read +EXPORT_SYMBOL vmlinux 0x2dd16564 arch_register_cpu +EXPORT_SYMBOL vmlinux 0x2ddeaa99 is_bad_inode +EXPORT_SYMBOL vmlinux 0x2deda4a1 security_sk_classify_flow +EXPORT_SYMBOL vmlinux 0x2dedc4c2 acpi_format_exception +EXPORT_SYMBOL vmlinux 0x2def7f76 rtc_cmos_write +EXPORT_SYMBOL vmlinux 0x2df8bae1 mmc_try_claim_host +EXPORT_SYMBOL vmlinux 0x2e088a67 wait_on_sync_kiocb +EXPORT_SYMBOL vmlinux 0x2e1853b8 bitmap_start_sync +EXPORT_SYMBOL vmlinux 0x2e1f47e8 pnp_register_card_driver +EXPORT_SYMBOL vmlinux 0x2e2b40d2 strncat +EXPORT_SYMBOL vmlinux 0x2e2ce9e0 sysctl_tcp_syncookies +EXPORT_SYMBOL vmlinux 0x2e383f6f skb_split +EXPORT_SYMBOL vmlinux 0x2e3ef48c sk_stream_wait_close +EXPORT_SYMBOL vmlinux 0x2e4161c1 submit_bio +EXPORT_SYMBOL vmlinux 0x2e5a704c udp_table +EXPORT_SYMBOL vmlinux 0x2e6d368d __kfree_skb +EXPORT_SYMBOL vmlinux 0x2e70e088 inet_frags_init +EXPORT_SYMBOL vmlinux 0x2e74a9e1 ata_std_end_eh +EXPORT_SYMBOL vmlinux 0x2e8032d3 blk_queue_bounce +EXPORT_SYMBOL vmlinux 0x2e9840e6 twl6040_get_sysclk +EXPORT_SYMBOL vmlinux 0x2e9b2820 freeze_super +EXPORT_SYMBOL vmlinux 0x2e9fcbad mii_ethtool_gset +EXPORT_SYMBOL vmlinux 0x2eae63c0 netif_receive_skb +EXPORT_SYMBOL vmlinux 0x2eb4f019 nf_register_sockopt +EXPORT_SYMBOL vmlinux 0x2ed16397 skb_dst_set_noref +EXPORT_SYMBOL vmlinux 0x2eeceb42 sk_chk_filter +EXPORT_SYMBOL vmlinux 0x2ef63ad6 scsi_dev_info_list_del_keyed +EXPORT_SYMBOL vmlinux 0x2f03fc4b security_secmark_refcount_inc +EXPORT_SYMBOL vmlinux 0x2f064b55 allocate_resource +EXPORT_SYMBOL vmlinux 0x2f505a38 dev_get_stats +EXPORT_SYMBOL vmlinux 0x2f692a11 ip_setsockopt +EXPORT_SYMBOL vmlinux 0x2fab4d32 skb_dequeue +EXPORT_SYMBOL vmlinux 0x2fb35c88 tcp_md5_hash_key +EXPORT_SYMBOL vmlinux 0x2fb3750c on_each_cpu_mask +EXPORT_SYMBOL vmlinux 0x2fb6de5d add_device_randomness +EXPORT_SYMBOL vmlinux 0x2fc18e62 cpufreq_global_kobject +EXPORT_SYMBOL vmlinux 0x2fc52c78 inet_sendmsg +EXPORT_SYMBOL vmlinux 0x2fe11157 jbd2_log_wait_commit +EXPORT_SYMBOL vmlinux 0x2ff063b5 acpi_get_name +EXPORT_SYMBOL vmlinux 0x3008f6ca ata_dev_acpi_handle +EXPORT_SYMBOL vmlinux 0x300900da acpi_bus_get_device +EXPORT_SYMBOL vmlinux 0x301cb527 dev_addr_init +EXPORT_SYMBOL vmlinux 0x301d3061 wait_for_completion_killable_timeout +EXPORT_SYMBOL vmlinux 0x30226ddf agp_device_command +EXPORT_SYMBOL vmlinux 0x30345c1f elv_add_request +EXPORT_SYMBOL vmlinux 0x307bbeeb keyring_clear +EXPORT_SYMBOL vmlinux 0x307c2fd0 generic_check_addressable +EXPORT_SYMBOL vmlinux 0x308252ec cancel_dirty_page +EXPORT_SYMBOL vmlinux 0x30a0564f tcf_register_action +EXPORT_SYMBOL vmlinux 0x30a80826 __kfifo_from_user +EXPORT_SYMBOL vmlinux 0x30cada8f radix_tree_next_hole +EXPORT_SYMBOL vmlinux 0x30e6f37d blk_integrity_register +EXPORT_SYMBOL vmlinux 0x30e74134 tty_termios_copy_hw +EXPORT_SYMBOL vmlinux 0x30f6815e mntput +EXPORT_SYMBOL vmlinux 0x3102d70b frontswap_curr_pages +EXPORT_SYMBOL vmlinux 0x311d9bbe __dev_remove_pack +EXPORT_SYMBOL vmlinux 0x311df493 free_task +EXPORT_SYMBOL vmlinux 0x31397b54 kernel_listen +EXPORT_SYMBOL vmlinux 0x313f9d88 tcf_exts_destroy +EXPORT_SYMBOL vmlinux 0x3145216f pci_dev_present +EXPORT_SYMBOL vmlinux 0x3147857d default_red +EXPORT_SYMBOL vmlinux 0x3151a465 max8925_reg_write +EXPORT_SYMBOL vmlinux 0x3161b296 inet_csk_accept +EXPORT_SYMBOL vmlinux 0x31639271 get_thermal_instance +EXPORT_SYMBOL vmlinux 0x31874750 elevator_exit +EXPORT_SYMBOL vmlinux 0x318cadb1 reciprocal_value +EXPORT_SYMBOL vmlinux 0x319e0726 __tracepoint_kmalloc +EXPORT_SYMBOL vmlinux 0x31b0e428 lro_receive_skb +EXPORT_SYMBOL vmlinux 0x31b198ae eth_header_cache_update +EXPORT_SYMBOL vmlinux 0x31b31f5c csum_partial_copy_nocheck +EXPORT_SYMBOL vmlinux 0x31e76b57 recalibrate_cpu_khz +EXPORT_SYMBOL vmlinux 0x3202435a wrmsr_safe_regs +EXPORT_SYMBOL vmlinux 0x320d94a8 unregister_quota_format +EXPORT_SYMBOL vmlinux 0x32122236 journal_check_available_features +EXPORT_SYMBOL vmlinux 0x3234320c make_bad_inode +EXPORT_SYMBOL vmlinux 0x323d906c generic_file_open +EXPORT_SYMBOL vmlinux 0x326425ca pci_unmap_biosrom +EXPORT_SYMBOL vmlinux 0x327920b8 sync_mapping_buffers +EXPORT_SYMBOL vmlinux 0x32828852 add_disk +EXPORT_SYMBOL vmlinux 0x32906cd5 wait_on_page_bit +EXPORT_SYMBOL vmlinux 0x32b55d22 __i2c_transfer +EXPORT_SYMBOL vmlinux 0x32bb04c8 from_kqid +EXPORT_SYMBOL vmlinux 0x32d3fdd8 pv_cpu_ops +EXPORT_SYMBOL vmlinux 0x32d9b988 eth_validate_addr +EXPORT_SYMBOL vmlinux 0x32dd7a8f phy_stop_interrupts +EXPORT_SYMBOL vmlinux 0x32debb16 cpumask_next_and +EXPORT_SYMBOL vmlinux 0x32eeaded _raw_write_lock_bh +EXPORT_SYMBOL vmlinux 0x32f386b4 generic_file_fsync +EXPORT_SYMBOL vmlinux 0x3332634a request_firmware +EXPORT_SYMBOL vmlinux 0x333bdda3 end_buffer_write_sync +EXPORT_SYMBOL vmlinux 0x333cb37c __kfifo_dma_out_prepare_r +EXPORT_SYMBOL vmlinux 0x333e7ff4 genl_unregister_mc_group +EXPORT_SYMBOL vmlinux 0x33652e9d dm_get_device +EXPORT_SYMBOL vmlinux 0x3366ebce gnet_stats_copy_rate_est +EXPORT_SYMBOL vmlinux 0x338a1c67 seq_release +EXPORT_SYMBOL vmlinux 0x33a030b8 scsi_get_command +EXPORT_SYMBOL vmlinux 0x33ac417f acpi_os_hotplug_execute +EXPORT_SYMBOL vmlinux 0x33afbbea bio_uncopy_user +EXPORT_SYMBOL vmlinux 0x33b7a873 blk_rq_map_user +EXPORT_SYMBOL vmlinux 0x33b84f74 copy_page +EXPORT_SYMBOL vmlinux 0x33c69bb4 fput +EXPORT_SYMBOL vmlinux 0x33c7168c jbd2_journal_get_write_access +EXPORT_SYMBOL vmlinux 0x33d75f66 dma_supported +EXPORT_SYMBOL vmlinux 0x33dae9ba netpoll_print_options +EXPORT_SYMBOL vmlinux 0x33e2d4c3 simple_fill_super +EXPORT_SYMBOL vmlinux 0x33f0768c cpufreq_quick_get_max +EXPORT_SYMBOL vmlinux 0x33f3348d dev_set_mac_address +EXPORT_SYMBOL vmlinux 0x33fcf44a __kfifo_out_r +EXPORT_SYMBOL vmlinux 0x340f995f serio_reconnect +EXPORT_SYMBOL vmlinux 0x3410f255 xfrm_policy_byid +EXPORT_SYMBOL vmlinux 0x34166159 agp_collect_device_status +EXPORT_SYMBOL vmlinux 0x34184afe current_kernel_time +EXPORT_SYMBOL vmlinux 0x341cbed2 cpu_present_mask +EXPORT_SYMBOL vmlinux 0x341ea148 acpi_pm_device_sleep_state +EXPORT_SYMBOL vmlinux 0x3426e114 tcf_action_dump_1 +EXPORT_SYMBOL vmlinux 0x342e63fd pm860x_page_set_bits +EXPORT_SYMBOL vmlinux 0x342ec138 current_task +EXPORT_SYMBOL vmlinux 0x34310750 scsi_reset_provider +EXPORT_SYMBOL vmlinux 0x343b0b7f __lru_cache_add +EXPORT_SYMBOL vmlinux 0x34553767 unregister_key_type +EXPORT_SYMBOL vmlinux 0x346c1fce pipe_to_file +EXPORT_SYMBOL vmlinux 0x347013de nla_validate +EXPORT_SYMBOL vmlinux 0x349133cb dqget +EXPORT_SYMBOL vmlinux 0x34963a0e kernel_getpeername +EXPORT_SYMBOL vmlinux 0x349cba85 strchr +EXPORT_SYMBOL vmlinux 0x34b8fbe4 tcp_syn_ack_timeout +EXPORT_SYMBOL vmlinux 0x34c9582c tty_unthrottle +EXPORT_SYMBOL vmlinux 0x34d38021 inode_dio_wait +EXPORT_SYMBOL vmlinux 0x34dea288 neigh_parms_alloc +EXPORT_SYMBOL vmlinux 0x34e21dc0 register_sysctl +EXPORT_SYMBOL vmlinux 0x34f3484e security_tun_dev_attach_queue +EXPORT_SYMBOL vmlinux 0x3520f548 search_binary_handler +EXPORT_SYMBOL vmlinux 0x35225ea3 down_write_trylock +EXPORT_SYMBOL vmlinux 0x3539f11b match_strlcpy +EXPORT_SYMBOL vmlinux 0x353e0d80 __blk_end_request_all +EXPORT_SYMBOL vmlinux 0x3571cc57 truncate_pagecache +EXPORT_SYMBOL vmlinux 0x35aebd20 __sb_end_write +EXPORT_SYMBOL vmlinux 0x35b6b772 param_ops_charp +EXPORT_SYMBOL vmlinux 0x35bed2f4 __secpath_destroy +EXPORT_SYMBOL vmlinux 0x35ca8cfa dm_kcopyd_client_create +EXPORT_SYMBOL vmlinux 0x35cbe056 dmam_alloc_noncoherent +EXPORT_SYMBOL vmlinux 0x35cdebef vfs_rename +EXPORT_SYMBOL vmlinux 0x35defc50 iov_iter_advance +EXPORT_SYMBOL vmlinux 0x35f5d86c skb_pull +EXPORT_SYMBOL vmlinux 0x36054d37 nf_ip6_checksum +EXPORT_SYMBOL vmlinux 0x3608b5be pci_disable_link_state_locked +EXPORT_SYMBOL vmlinux 0x360b1afe probe_irq_mask +EXPORT_SYMBOL vmlinux 0x360b8d16 x86_cpu_to_apicid +EXPORT_SYMBOL vmlinux 0x3611f130 set_pages_array_wb +EXPORT_SYMBOL vmlinux 0x36305330 pci_map_biosrom +EXPORT_SYMBOL vmlinux 0x365426d1 ___pskb_trim +EXPORT_SYMBOL vmlinux 0x365fb99a acpi_device_hid +EXPORT_SYMBOL vmlinux 0x3686ea09 spi_print_msg +EXPORT_SYMBOL vmlinux 0x3692aeea mark_buffer_dirty_inode +EXPORT_SYMBOL vmlinux 0x369e1115 kstrtou8_from_user +EXPORT_SYMBOL vmlinux 0x36b54165 phy_attach +EXPORT_SYMBOL vmlinux 0x36c04a4f tcp_read_sock +EXPORT_SYMBOL vmlinux 0x36c5d295 __serio_register_driver +EXPORT_SYMBOL vmlinux 0x36e360e3 __hw_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x36f9cd94 rcu_is_cpu_idle +EXPORT_SYMBOL vmlinux 0x3700b548 md_error +EXPORT_SYMBOL vmlinux 0x3701a196 csum_partial_copy_to_user +EXPORT_SYMBOL vmlinux 0x37153dc5 mii_check_link +EXPORT_SYMBOL vmlinux 0x37249cd7 dma_common_mmap +EXPORT_SYMBOL vmlinux 0x3733b8d5 ipv6_chk_prefix +EXPORT_SYMBOL vmlinux 0x3744cf36 vmalloc_to_pfn +EXPORT_SYMBOL vmlinux 0x374f7af8 filp_close +EXPORT_SYMBOL vmlinux 0x37822a19 cdrom_get_media_event +EXPORT_SYMBOL vmlinux 0x37af5f2e pci_enable_msix +EXPORT_SYMBOL vmlinux 0x37b777df param_set_copystring +EXPORT_SYMBOL vmlinux 0x37bacc61 dquot_destroy +EXPORT_SYMBOL vmlinux 0x37befc70 jiffies_to_msecs +EXPORT_SYMBOL vmlinux 0x37d9ca29 netdev_class_remove_file +EXPORT_SYMBOL vmlinux 0x37db8f19 dmi_get_date +EXPORT_SYMBOL vmlinux 0x37e4d272 netlink_rcv_skb +EXPORT_SYMBOL vmlinux 0x37e86bd0 tcp_sendmsg +EXPORT_SYMBOL vmlinux 0x37f730bb vm_insert_page +EXPORT_SYMBOL vmlinux 0x381a798a setup_max_cpus +EXPORT_SYMBOL vmlinux 0x381eb272 devfreq_remove_device +EXPORT_SYMBOL vmlinux 0x386f1d7e mmc_hw_reset_check +EXPORT_SYMBOL vmlinux 0x38869d88 kstat +EXPORT_SYMBOL vmlinux 0x388cd198 set_bh_page +EXPORT_SYMBOL vmlinux 0x388f9128 xfrm_state_walk_done +EXPORT_SYMBOL vmlinux 0x389994e5 console_stop +EXPORT_SYMBOL vmlinux 0x389bfe0d rtc_lock +EXPORT_SYMBOL vmlinux 0x38a71b7e pci_free_resource_list +EXPORT_SYMBOL vmlinux 0x38d92ff3 __nla_reserve +EXPORT_SYMBOL vmlinux 0x38f33bed dump_fpu +EXPORT_SYMBOL vmlinux 0x3908f478 starget_for_each_device +EXPORT_SYMBOL vmlinux 0x390f1d33 security_sb_clone_mnt_opts +EXPORT_SYMBOL vmlinux 0x391fbc1c swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL vmlinux 0x3928efe9 __per_cpu_offset +EXPORT_SYMBOL vmlinux 0x392ade61 ida_init +EXPORT_SYMBOL vmlinux 0x39383e01 devm_ioremap_nocache +EXPORT_SYMBOL vmlinux 0x3939f8f0 rfkill_pause_polling +EXPORT_SYMBOL vmlinux 0x39487a31 filemap_fdatawait_range +EXPORT_SYMBOL vmlinux 0x394bf7e9 ndo_dflt_bridge_getlink +EXPORT_SYMBOL vmlinux 0x3955fcf6 __kfifo_in_r +EXPORT_SYMBOL vmlinux 0x396c0235 xfrm_register_km +EXPORT_SYMBOL vmlinux 0x3976ca5e __dec_zone_page_state +EXPORT_SYMBOL vmlinux 0x3980aac1 unregister_reboot_notifier +EXPORT_SYMBOL vmlinux 0x399a325f pnp_unregister_card_driver +EXPORT_SYMBOL vmlinux 0x399ad043 __kfifo_dma_out_finish_r +EXPORT_SYMBOL vmlinux 0x39a055f3 acpi_remove_gpe_handler +EXPORT_SYMBOL vmlinux 0x39a813a8 mdiobus_unregister +EXPORT_SYMBOL vmlinux 0x39bb372f dq_data_lock +EXPORT_SYMBOL vmlinux 0x39c7d13e create_proc_entry +EXPORT_SYMBOL vmlinux 0x39d82ab9 mem_cgroup_subsys +EXPORT_SYMBOL vmlinux 0x39d864b4 scsi_prep_fn +EXPORT_SYMBOL vmlinux 0x39dd6953 scsi_execute_req +EXPORT_SYMBOL vmlinux 0x39faf925 devm_usb_put_phy +EXPORT_SYMBOL vmlinux 0x3a08475f platform_thermal_notify +EXPORT_SYMBOL vmlinux 0x3a0b170f udp_lib_unhash +EXPORT_SYMBOL vmlinux 0x3a109a0e inet_shutdown +EXPORT_SYMBOL vmlinux 0x3a17e5e4 iov_iter_single_seg_count +EXPORT_SYMBOL vmlinux 0x3a198137 tty_port_open +EXPORT_SYMBOL vmlinux 0x3a20ff73 __crc32c_le +EXPORT_SYMBOL vmlinux 0x3a2a1396 __devcgroup_inode_permission +EXPORT_SYMBOL vmlinux 0x3a32839e intel_gtt_chipset_flush +EXPORT_SYMBOL vmlinux 0x3a3e4853 ip_check_defrag +EXPORT_SYMBOL vmlinux 0x3a521152 register_nls +EXPORT_SYMBOL vmlinux 0x3a869f19 xfrm_state_delete_tunnel +EXPORT_SYMBOL vmlinux 0x3a99d0f5 swiotlb_sync_sg_for_device +EXPORT_SYMBOL vmlinux 0x3a9b6fb9 blk_unregister_region +EXPORT_SYMBOL vmlinux 0x3ad76e1e mmc_request_done +EXPORT_SYMBOL vmlinux 0x3ae9a68c vc_resize +EXPORT_SYMBOL vmlinux 0x3aee612e swiotlb_alloc_coherent +EXPORT_SYMBOL vmlinux 0x3b1f9777 get_super +EXPORT_SYMBOL vmlinux 0x3b2eaac0 inet_frags_exit_net +EXPORT_SYMBOL vmlinux 0x3b3016d3 cpufreq_unregister_notifier +EXPORT_SYMBOL vmlinux 0x3b357dab tcp_make_synack +EXPORT_SYMBOL vmlinux 0x3b3b4e34 spi_dv_device +EXPORT_SYMBOL vmlinux 0x3b4ceb4a up_write +EXPORT_SYMBOL vmlinux 0x3b55c9dd fb_get_mode +EXPORT_SYMBOL vmlinux 0x3b7bb853 pci_get_slot +EXPORT_SYMBOL vmlinux 0x3b820a15 dev_addr_del +EXPORT_SYMBOL vmlinux 0x3b84e95a __cleancache_invalidate_page +EXPORT_SYMBOL vmlinux 0x3b938b2e dentry_update_name_case +EXPORT_SYMBOL vmlinux 0x3baa8583 netdev_change_features +EXPORT_SYMBOL vmlinux 0x3bccae0a blk_run_queue +EXPORT_SYMBOL vmlinux 0x3bd1b1f6 msecs_to_jiffies +EXPORT_SYMBOL vmlinux 0x3bdfac20 mmc_wait_for_app_cmd +EXPORT_SYMBOL vmlinux 0x3beb690b lg_local_unlock +EXPORT_SYMBOL vmlinux 0x3bef03b9 flow_cache_lookup +EXPORT_SYMBOL vmlinux 0x3c0ab47a ip_getsockopt +EXPORT_SYMBOL vmlinux 0x3c3d41fa pagecache_write_begin +EXPORT_SYMBOL vmlinux 0x3c80c06c kstrtoull +EXPORT_SYMBOL vmlinux 0x3c9d1211 string_get_size +EXPORT_SYMBOL vmlinux 0x3ca3e159 thermal_cooling_device_register +EXPORT_SYMBOL vmlinux 0x3ccb16e6 blk_queue_softirq_done +EXPORT_SYMBOL vmlinux 0x3cda2258 block_write_begin +EXPORT_SYMBOL vmlinux 0x3ce20225 scsi_device_get +EXPORT_SYMBOL vmlinux 0x3ce4ca6f disable_irq +EXPORT_SYMBOL vmlinux 0x3d1cd767 tcp_syn_flood_action +EXPORT_SYMBOL vmlinux 0x3d2e5ff3 nf_afinfo +EXPORT_SYMBOL vmlinux 0x3d306481 register_netdev +EXPORT_SYMBOL vmlinux 0x3d307cca scsi_ioctl +EXPORT_SYMBOL vmlinux 0x3d396f0b mmc_start_bkops +EXPORT_SYMBOL vmlinux 0x3d53c162 unlock_page +EXPORT_SYMBOL vmlinux 0x3d5844b3 strnicmp +EXPORT_SYMBOL vmlinux 0x3d7c1ed7 msrs_alloc +EXPORT_SYMBOL vmlinux 0x3d91c67f padata_alloc +EXPORT_SYMBOL vmlinux 0x3d924c50 genl_unregister_family +EXPORT_SYMBOL vmlinux 0x3d97d5db skb_prepare_seq_read +EXPORT_SYMBOL vmlinux 0x3d9ee9f0 clear_page +EXPORT_SYMBOL vmlinux 0x3da171f9 pci_mem_start +EXPORT_SYMBOL vmlinux 0x3da8af9a __bforget +EXPORT_SYMBOL vmlinux 0x3dbb1562 inet_sendpage +EXPORT_SYMBOL vmlinux 0x3dc27f6e blk_end_request +EXPORT_SYMBOL vmlinux 0x3dc33c71 netdev_warn +EXPORT_SYMBOL vmlinux 0x3dcb88a0 irq_set_handler_data +EXPORT_SYMBOL vmlinux 0x3de75de3 dcbnl_cee_notify +EXPORT_SYMBOL vmlinux 0x3dec9c66 address_space_init_once +EXPORT_SYMBOL vmlinux 0x3df8082a jbd2_journal_revoke +EXPORT_SYMBOL vmlinux 0x3dfc897c seq_hlist_start_head +EXPORT_SYMBOL vmlinux 0x3e0737d6 journal_update_format +EXPORT_SYMBOL vmlinux 0x3e2ae3a8 acpi_release_global_lock +EXPORT_SYMBOL vmlinux 0x3e45e9ff register_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x3e491c01 xfrm_init_state +EXPORT_SYMBOL vmlinux 0x3e66adec __scm_destroy +EXPORT_SYMBOL vmlinux 0x3e68519f jbd2_journal_update_sb_errno +EXPORT_SYMBOL vmlinux 0x3e800e06 pci_enable_device +EXPORT_SYMBOL vmlinux 0x3e882943 pcibios_align_resource +EXPORT_SYMBOL vmlinux 0x3e9110fa __hw_addr_unsync +EXPORT_SYMBOL vmlinux 0x3eab8693 ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x3eae292f param_set_byte +EXPORT_SYMBOL vmlinux 0x3eaf291d param_get_string +EXPORT_SYMBOL vmlinux 0x3ec16c3b in_group_p +EXPORT_SYMBOL vmlinux 0x3ec6ef21 xfrm_policy_flush +EXPORT_SYMBOL vmlinux 0x3ed3c590 bio_add_page +EXPORT_SYMBOL vmlinux 0x3ed63055 zlib_inflateReset +EXPORT_SYMBOL vmlinux 0x3ef4dde7 scsi_add_device +EXPORT_SYMBOL vmlinux 0x3f0546a8 ioread32_rep +EXPORT_SYMBOL vmlinux 0x3f0d93ff __napi_complete +EXPORT_SYMBOL vmlinux 0x3f20aa39 usb_get_phy +EXPORT_SYMBOL vmlinux 0x3f4394c1 xfrm_unregister_type +EXPORT_SYMBOL vmlinux 0x3f4547a7 put_unused_fd +EXPORT_SYMBOL vmlinux 0x3f4cfc63 scsi_allocate_command +EXPORT_SYMBOL vmlinux 0x3f4f0748 sock_no_connect +EXPORT_SYMBOL vmlinux 0x3f71faa1 mempool_create +EXPORT_SYMBOL vmlinux 0x3f748ffc i2c_del_driver +EXPORT_SYMBOL vmlinux 0x3f8fb2e0 tcf_em_unregister +EXPORT_SYMBOL vmlinux 0x3f9c7bcb __set_page_dirty_nobuffers +EXPORT_SYMBOL vmlinux 0x3fa08bf5 twl6040_reg_read +EXPORT_SYMBOL vmlinux 0x3fd69315 pcim_pin_device +EXPORT_SYMBOL vmlinux 0x3fe2ccbe memweight +EXPORT_SYMBOL vmlinux 0x3fe72697 fget_light +EXPORT_SYMBOL vmlinux 0x3fe97600 ip_route_me_harder +EXPORT_SYMBOL vmlinux 0x3fec048f sg_next +EXPORT_SYMBOL vmlinux 0x3ff62317 local_bh_disable +EXPORT_SYMBOL vmlinux 0x40069146 ip6_route_me_harder +EXPORT_SYMBOL vmlinux 0x401356c4 xfrm_state_add +EXPORT_SYMBOL vmlinux 0x40256835 complete_all +EXPORT_SYMBOL vmlinux 0x402b8281 __request_module +EXPORT_SYMBOL vmlinux 0x402ded40 mmc_can_reset +EXPORT_SYMBOL vmlinux 0x404f01d7 qdisc_watchdog_init +EXPORT_SYMBOL vmlinux 0x405c1144 get_seconds +EXPORT_SYMBOL vmlinux 0x406abad3 fifo_set_limit +EXPORT_SYMBOL vmlinux 0x4082e903 pnp_register_driver +EXPORT_SYMBOL vmlinux 0x4086fcc8 kernel_recvmsg +EXPORT_SYMBOL vmlinux 0x4096fe37 twl6040_get_pll +EXPORT_SYMBOL vmlinux 0x40973662 sysctl_udp_mem +EXPORT_SYMBOL vmlinux 0x4097fa45 acpi_read_bit_register +EXPORT_SYMBOL vmlinux 0x409873e3 tty_termios_baud_rate +EXPORT_SYMBOL vmlinux 0x40a27c37 scsi_dev_info_remove_list +EXPORT_SYMBOL vmlinux 0x40a9b349 vzalloc +EXPORT_SYMBOL vmlinux 0x40af24f4 mfd_cell_enable +EXPORT_SYMBOL vmlinux 0x40b82e1f do_splice_from +EXPORT_SYMBOL vmlinux 0x40c01859 gen_pool_best_fit +EXPORT_SYMBOL vmlinux 0x40c20c4b gnet_stats_start_copy_compat +EXPORT_SYMBOL vmlinux 0x40c7247c si_meminfo +EXPORT_SYMBOL vmlinux 0x40c89d46 acpi_get_table_by_index +EXPORT_SYMBOL vmlinux 0x40d04664 console_trylock +EXPORT_SYMBOL vmlinux 0x410394d5 tty_set_operations +EXPORT_SYMBOL vmlinux 0x411392d1 phy_ethtool_set_eee +EXPORT_SYMBOL vmlinux 0x411ecb29 netpoll_send_skb_on_dev +EXPORT_SYMBOL vmlinux 0x4122395d jbd2_journal_invalidatepage +EXPORT_SYMBOL vmlinux 0x4127184c rfkill_alloc +EXPORT_SYMBOL vmlinux 0x41482d8b strndup_user +EXPORT_SYMBOL vmlinux 0x4169e882 tty_register_driver +EXPORT_SYMBOL vmlinux 0x4188d439 neigh_rand_reach_time +EXPORT_SYMBOL vmlinux 0x418bd4be phy_stop +EXPORT_SYMBOL vmlinux 0x41a995a8 genphy_suspend +EXPORT_SYMBOL vmlinux 0x41b87164 blk_execute_rq +EXPORT_SYMBOL vmlinux 0x41ca1224 input_mt_report_finger_count +EXPORT_SYMBOL vmlinux 0x41d90b16 find_vma +EXPORT_SYMBOL vmlinux 0x41e703b0 __scsi_put_command +EXPORT_SYMBOL vmlinux 0x4211c3c1 zlib_inflateInit2 +EXPORT_SYMBOL vmlinux 0x42595e58 vgacon_text_force +EXPORT_SYMBOL vmlinux 0x428f24f9 posix_acl_create +EXPORT_SYMBOL vmlinux 0x4294751d xfrm_lookup +EXPORT_SYMBOL vmlinux 0x42977ad4 __hw_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x429dc2d9 __module_put_and_exit +EXPORT_SYMBOL vmlinux 0x42a09cec try_module_get +EXPORT_SYMBOL vmlinux 0x42a1b208 gen_pool_first_fit +EXPORT_SYMBOL vmlinux 0x42b0325e gen_replace_estimator +EXPORT_SYMBOL vmlinux 0x42c0b8fe ata_scsi_cmd_error_handler +EXPORT_SYMBOL vmlinux 0x42c8de35 ioremap_nocache +EXPORT_SYMBOL vmlinux 0x42ec6987 pci_set_master +EXPORT_SYMBOL vmlinux 0x4301070f journal_init_dev +EXPORT_SYMBOL vmlinux 0x43020808 sock_common_recvmsg +EXPORT_SYMBOL vmlinux 0x4302d0eb free_pages +EXPORT_SYMBOL vmlinux 0x4310af0d dst_release +EXPORT_SYMBOL vmlinux 0x43261dca _raw_spin_lock_irq +EXPORT_SYMBOL vmlinux 0x432fe995 __dquot_transfer +EXPORT_SYMBOL vmlinux 0x4346c1d1 unregister_filesystem +EXPORT_SYMBOL vmlinux 0x434f840a scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x4351577a fb_parse_edid +EXPORT_SYMBOL vmlinux 0x436c2179 iowrite32 +EXPORT_SYMBOL vmlinux 0x438610bd security_tun_dev_alloc_security +EXPORT_SYMBOL vmlinux 0x43a0458b blk_start_plug +EXPORT_SYMBOL vmlinux 0x43a2b9eb pci_set_dma_seg_boundary +EXPORT_SYMBOL vmlinux 0x43af9a19 __scsi_iterate_devices +EXPORT_SYMBOL vmlinux 0x43b2cc74 inet6_ioctl +EXPORT_SYMBOL vmlinux 0x43f23311 dm_table_get_md +EXPORT_SYMBOL vmlinux 0x43f828ce pci_release_regions +EXPORT_SYMBOL vmlinux 0x43f9e22d vfs_symlink +EXPORT_SYMBOL vmlinux 0x43fb92d1 inode_add_rsv_space +EXPORT_SYMBOL vmlinux 0x440f6711 ip_defrag +EXPORT_SYMBOL vmlinux 0x4411c503 prandom_seed +EXPORT_SYMBOL vmlinux 0x4420564e generic_file_mmap +EXPORT_SYMBOL vmlinux 0x445565df pcie_capability_read_word +EXPORT_SYMBOL vmlinux 0x4470a79b param_ops_long +EXPORT_SYMBOL vmlinux 0x448e3750 pci_disable_obff +EXPORT_SYMBOL vmlinux 0x448eac3e kmemdup +EXPORT_SYMBOL vmlinux 0x449ad0a7 memcmp +EXPORT_SYMBOL vmlinux 0x44a81d5f acpi_evaluate_object +EXPORT_SYMBOL vmlinux 0x44a94186 scsi_block_when_processing_errors +EXPORT_SYMBOL vmlinux 0x44aaf30f tsc_khz +EXPORT_SYMBOL vmlinux 0x44b1adf1 skb_queue_purge +EXPORT_SYMBOL vmlinux 0x44b2e130 mark_info_dirty +EXPORT_SYMBOL vmlinux 0x44b6069e agp_bind_memory +EXPORT_SYMBOL vmlinux 0x44be195f blk_init_queue +EXPORT_SYMBOL vmlinux 0x44e12f71 scsi_register_interface +EXPORT_SYMBOL vmlinux 0x44e90f30 fb_is_primary_device +EXPORT_SYMBOL vmlinux 0x44e9a829 match_token +EXPORT_SYMBOL vmlinux 0x44ed8810 rtnl_set_sk_err +EXPORT_SYMBOL vmlinux 0x44f27d00 sock_alloc_file +EXPORT_SYMBOL vmlinux 0x44fc0804 pci_scan_single_device +EXPORT_SYMBOL vmlinux 0x45044497 percpu_counter_destroy +EXPORT_SYMBOL vmlinux 0x45081703 ec_get_handle +EXPORT_SYMBOL vmlinux 0x4538016f generic_error_remove_page +EXPORT_SYMBOL vmlinux 0x453c8403 pci_msi_enabled +EXPORT_SYMBOL vmlinux 0x4550ba8a register_cpu_notifier +EXPORT_SYMBOL vmlinux 0x4555aa80 inode_claim_rsv_space +EXPORT_SYMBOL vmlinux 0x4556fdfb sock_rfree +EXPORT_SYMBOL vmlinux 0x4577cb7f pcie_capability_clear_and_set_word +EXPORT_SYMBOL vmlinux 0x4578f528 __kfifo_to_user +EXPORT_SYMBOL vmlinux 0x457b2017 first_ec +EXPORT_SYMBOL vmlinux 0x457cb955 sock_queue_rcv_skb +EXPORT_SYMBOL vmlinux 0x45806ad1 journal_get_undo_access +EXPORT_SYMBOL vmlinux 0x4583d7ce scsi_execute +EXPORT_SYMBOL vmlinux 0x4598dca5 d_set_d_op +EXPORT_SYMBOL vmlinux 0x459bada2 blk_queue_init_tags +EXPORT_SYMBOL vmlinux 0x45a765cf pci_add_resource +EXPORT_SYMBOL vmlinux 0x45b51850 mmc_detect_change +EXPORT_SYMBOL vmlinux 0x45b78c56 scsi_cmd_print_sense_hdr +EXPORT_SYMBOL vmlinux 0x45bd9efd dm_table_put +EXPORT_SYMBOL vmlinux 0x45d216b9 tcp_put_md5sig_pool +EXPORT_SYMBOL vmlinux 0x45d68287 request_key_async +EXPORT_SYMBOL vmlinux 0x45e53b63 kern_unmount +EXPORT_SYMBOL vmlinux 0x461ac773 kstrtol_from_user +EXPORT_SYMBOL vmlinux 0x4625003f ll_rw_block +EXPORT_SYMBOL vmlinux 0x4643a22a set_anon_super +EXPORT_SYMBOL vmlinux 0x4645dffc vc_cons +EXPORT_SYMBOL vmlinux 0x46571a1a dev_get_drvdata +EXPORT_SYMBOL vmlinux 0x465cab34 secure_ipv6_port_ephemeral +EXPORT_SYMBOL vmlinux 0x46608fa0 getnstimeofday +EXPORT_SYMBOL vmlinux 0x466a2694 unlink_framebuffer +EXPORT_SYMBOL vmlinux 0x466c14a7 __delay +EXPORT_SYMBOL vmlinux 0x4684469a bio_integrity_split +EXPORT_SYMBOL vmlinux 0x469412a2 kern_path +EXPORT_SYMBOL vmlinux 0x46c47fb6 __node_distance +EXPORT_SYMBOL vmlinux 0x46feb099 dm_read_arg +EXPORT_SYMBOL vmlinux 0x472a071a set_page_dirty +EXPORT_SYMBOL vmlinux 0x47416e14 cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x474aaf0d pci_bus_write_config_byte +EXPORT_SYMBOL vmlinux 0x475100c2 inet_get_local_port_range +EXPORT_SYMBOL vmlinux 0x4751b037 free_netdev +EXPORT_SYMBOL vmlinux 0x475f010b acpi_purge_cached_objects +EXPORT_SYMBOL vmlinux 0x478d10b2 ht_destroy_irq +EXPORT_SYMBOL vmlinux 0x47939e0d __tasklet_hi_schedule +EXPORT_SYMBOL vmlinux 0x479c3c86 find_next_zero_bit +EXPORT_SYMBOL vmlinux 0x47a486cc abx500_mask_and_set_register_interruptible +EXPORT_SYMBOL vmlinux 0x47b3f862 radix_tree_lookup_slot +EXPORT_SYMBOL vmlinux 0x47b6a10f ftrace_print_symbols_seq +EXPORT_SYMBOL vmlinux 0x47ce79a6 dquot_commit_info +EXPORT_SYMBOL vmlinux 0x47f067cb amd_iommu_unregister_ppr_notifier +EXPORT_SYMBOL vmlinux 0x480e369b ihold +EXPORT_SYMBOL vmlinux 0x48193639 acpi_lid_open +EXPORT_SYMBOL vmlinux 0x481cb9ab acpi_enter_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x4825c68c kernel_sock_shutdown +EXPORT_SYMBOL vmlinux 0x482cab2c pci_find_bus +EXPORT_SYMBOL vmlinux 0x48336969 devm_request_and_ioremap +EXPORT_SYMBOL vmlinux 0x484000bc km_query +EXPORT_SYMBOL vmlinux 0x4841bdee strnchr +EXPORT_SYMBOL vmlinux 0x4845c423 param_array_ops +EXPORT_SYMBOL vmlinux 0x4859b8bb rtc_year_days +EXPORT_SYMBOL vmlinux 0x486042b9 splice_from_pipe_next +EXPORT_SYMBOL vmlinux 0x487d9343 param_ops_ushort +EXPORT_SYMBOL vmlinux 0x48a9ea3e bdi_setup_and_register +EXPORT_SYMBOL vmlinux 0x48ae41fc ppp_output_wakeup +EXPORT_SYMBOL vmlinux 0x48ae977e mfd_add_devices +EXPORT_SYMBOL vmlinux 0x48b566a4 tcp_get_md5sig_pool +EXPORT_SYMBOL vmlinux 0x48c18d7e mmc_hw_reset +EXPORT_SYMBOL vmlinux 0x48daf29e register_cdrom +EXPORT_SYMBOL vmlinux 0x48fb730d __ip_select_ident +EXPORT_SYMBOL vmlinux 0x49045426 icmp_err_convert +EXPORT_SYMBOL vmlinux 0x49361d0d intel_gtt_get +EXPORT_SYMBOL vmlinux 0x4941932d netdev_refcnt_read +EXPORT_SYMBOL vmlinux 0x49427274 dst_alloc +EXPORT_SYMBOL vmlinux 0x494e3393 vm_get_page_prot +EXPORT_SYMBOL vmlinux 0x4954baef unlock_buffer +EXPORT_SYMBOL vmlinux 0x495d03cd account_page_dirtied +EXPORT_SYMBOL vmlinux 0x49603fb8 security_sb_copy_data +EXPORT_SYMBOL vmlinux 0x49a15db5 ip6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0x49a24d54 release_sock +EXPORT_SYMBOL vmlinux 0x49b07aec tcp_select_initial_window +EXPORT_SYMBOL vmlinux 0x49f85ec4 skb_checksum +EXPORT_SYMBOL vmlinux 0x4a017dca ida_pre_get +EXPORT_SYMBOL vmlinux 0x4a0b50cd udp_lib_getsockopt +EXPORT_SYMBOL vmlinux 0x4a2c3865 vfs_readdir +EXPORT_SYMBOL vmlinux 0x4a358252 __bitmap_subset +EXPORT_SYMBOL vmlinux 0x4a41ec9e ipv4_specific +EXPORT_SYMBOL vmlinux 0x4a53194a cdrom_number_of_slots +EXPORT_SYMBOL vmlinux 0x4a957d0f dev_set_drvdata +EXPORT_SYMBOL vmlinux 0x4a9dec25 generic_permission +EXPORT_SYMBOL vmlinux 0x4aa6102b dev_get_by_flags_rcu +EXPORT_SYMBOL vmlinux 0x4aad52d7 mempool_free +EXPORT_SYMBOL vmlinux 0x4aaf638a __locks_copy_lock +EXPORT_SYMBOL vmlinux 0x4abbe3c2 vm_brk +EXPORT_SYMBOL vmlinux 0x4ac1e3a3 genphy_config_aneg +EXPORT_SYMBOL vmlinux 0x4acd93d3 release_resource +EXPORT_SYMBOL vmlinux 0x4ae8b111 mii_check_gmii_support +EXPORT_SYMBOL vmlinux 0x4af3e825 mii_nway_restart +EXPORT_SYMBOL vmlinux 0x4afe9a77 scsi_partsize +EXPORT_SYMBOL vmlinux 0x4b06d2e7 complete +EXPORT_SYMBOL vmlinux 0x4b085dbf agp3_generic_configure +EXPORT_SYMBOL vmlinux 0x4b3857db poll_schedule_timeout +EXPORT_SYMBOL vmlinux 0x4b44cb77 mmc_can_erase +EXPORT_SYMBOL vmlinux 0x4b4e3b5a mii_link_ok +EXPORT_SYMBOL vmlinux 0x4b57a4cb lock_sock_fast +EXPORT_SYMBOL vmlinux 0x4b5836f7 user_path_at +EXPORT_SYMBOL vmlinux 0x4b5fd49e dm_kcopyd_do_callback +EXPORT_SYMBOL vmlinux 0x4b7a8cb8 idr_pre_get +EXPORT_SYMBOL vmlinux 0x4be7e3b5 seq_putc +EXPORT_SYMBOL vmlinux 0x4beb2b9a dev_uc_del +EXPORT_SYMBOL vmlinux 0x4bf675e4 serio_close +EXPORT_SYMBOL vmlinux 0x4c0509d5 pnp_stop_dev +EXPORT_SYMBOL vmlinux 0x4c0f4ca2 dev_disable_lro +EXPORT_SYMBOL vmlinux 0x4c1182cb bitmap_scnprintf +EXPORT_SYMBOL vmlinux 0x4c1d196b __skb_warn_lro_forwarding +EXPORT_SYMBOL vmlinux 0x4c2ccac6 handle_edge_irq +EXPORT_SYMBOL vmlinux 0x4c349aeb fb_set_var +EXPORT_SYMBOL vmlinux 0x4c4fef19 kernel_stack +EXPORT_SYMBOL vmlinux 0x4c67a76d generic_write_end +EXPORT_SYMBOL vmlinux 0x4c68af5c vfs_path_lookup +EXPORT_SYMBOL vmlinux 0x4c7ff2f2 agp_generic_alloc_user +EXPORT_SYMBOL vmlinux 0x4c9756ef thermal_zone_device_register +EXPORT_SYMBOL vmlinux 0x4ca9669f scnprintf +EXPORT_SYMBOL vmlinux 0x4cbbd171 __bitmap_weight +EXPORT_SYMBOL vmlinux 0x4cd05039 alloc_pci_dev +EXPORT_SYMBOL vmlinux 0x4cdb3178 ns_to_timeval +EXPORT_SYMBOL vmlinux 0x4ce3ae76 frontswap_enabled +EXPORT_SYMBOL vmlinux 0x4cf757eb unmap_mapping_range +EXPORT_SYMBOL vmlinux 0x4cfc2e8d kernel_setsockopt +EXPORT_SYMBOL vmlinux 0x4d1023f8 mempool_resize +EXPORT_SYMBOL vmlinux 0x4d1f09a7 deactivate_locked_super +EXPORT_SYMBOL vmlinux 0x4d405db8 param_ops_string +EXPORT_SYMBOL vmlinux 0x4d66af60 dump_write +EXPORT_SYMBOL vmlinux 0x4d71010c tc_classify +EXPORT_SYMBOL vmlinux 0x4d82644d splice_from_pipe_end +EXPORT_SYMBOL vmlinux 0x4d8d006e skb_abort_seq_read +EXPORT_SYMBOL vmlinux 0x4d974b9c register_sysrq_key +EXPORT_SYMBOL vmlinux 0x4d9b652b rb_erase +EXPORT_SYMBOL vmlinux 0x4da2483a __frontswap_load +EXPORT_SYMBOL vmlinux 0x4da84eea rtnl_configure_link +EXPORT_SYMBOL vmlinux 0x4db050a2 do_SAK +EXPORT_SYMBOL vmlinux 0x4dc05731 skb_try_coalesce +EXPORT_SYMBOL vmlinux 0x4dc45be9 nf_log_unbind_pf +EXPORT_SYMBOL vmlinux 0x4dd2f86e mb_cache_entry_free +EXPORT_SYMBOL vmlinux 0x4de34a07 cpu_rmap_put +EXPORT_SYMBOL vmlinux 0x4de7c2fe amd_iommu_register_ppr_notifier +EXPORT_SYMBOL vmlinux 0x4def3ea3 ida_get_new_above +EXPORT_SYMBOL vmlinux 0x4df119fa __bitmap_parse +EXPORT_SYMBOL vmlinux 0x4e0d881e inet6_bind +EXPORT_SYMBOL vmlinux 0x4e1dfa80 dev_printk +EXPORT_SYMBOL vmlinux 0x4e21999c acpi_get_child +EXPORT_SYMBOL vmlinux 0x4e3567f7 match_int +EXPORT_SYMBOL vmlinux 0x4e56a215 seq_vprintf +EXPORT_SYMBOL vmlinux 0x4e6e8ea7 fg_console +EXPORT_SYMBOL vmlinux 0x4e823562 tcf_hash_lookup +EXPORT_SYMBOL vmlinux 0x4ea25709 dql_reset +EXPORT_SYMBOL vmlinux 0x4edd72f7 block_all_signals +EXPORT_SYMBOL vmlinux 0x4f0bbe67 idr_find +EXPORT_SYMBOL vmlinux 0x4f1cd128 security_tun_dev_create +EXPORT_SYMBOL vmlinux 0x4f2631ff tty_throttle +EXPORT_SYMBOL vmlinux 0x4f391d0e nla_parse +EXPORT_SYMBOL vmlinux 0x4f3b7fd6 task_tgid_nr_ns +EXPORT_SYMBOL vmlinux 0x4f3b97f0 tcp_v4_send_check +EXPORT_SYMBOL vmlinux 0x4f408650 unload_nls +EXPORT_SYMBOL vmlinux 0x4f476e96 init_cdrom_command +EXPORT_SYMBOL vmlinux 0x4f4a8444 clear_bdi_congested +EXPORT_SYMBOL vmlinux 0x4f68e5c9 do_gettimeofday +EXPORT_SYMBOL vmlinux 0x4f6b400b _copy_from_user +EXPORT_SYMBOL vmlinux 0x4f783f30 acpi_read +EXPORT_SYMBOL vmlinux 0x4f7e35f6 wireless_send_event +EXPORT_SYMBOL vmlinux 0x4f8b5ddb _copy_to_user +EXPORT_SYMBOL vmlinux 0x4f916e83 input_mt_report_pointer_emulation +EXPORT_SYMBOL vmlinux 0x4fd1edaf twl6040_get_vibralr_status +EXPORT_SYMBOL vmlinux 0x4fdee897 i8042_command +EXPORT_SYMBOL vmlinux 0x4fe7bfb5 dquot_free_inode +EXPORT_SYMBOL vmlinux 0x50097088 security_tun_dev_free_security +EXPORT_SYMBOL vmlinux 0x500d29db journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x500d60a1 netlink_set_err +EXPORT_SYMBOL vmlinux 0x50211ee3 tcp_free_md5sig_pool +EXPORT_SYMBOL vmlinux 0x503ae888 open_exec +EXPORT_SYMBOL vmlinux 0x504cb79e bio_integrity_prep +EXPORT_SYMBOL vmlinux 0x50529870 acpi_get_gpe_status +EXPORT_SYMBOL vmlinux 0x5052d128 xfrm_policy_destroy +EXPORT_SYMBOL vmlinux 0x5086fb26 skb_copy_datagram_from_iovec +EXPORT_SYMBOL vmlinux 0x508ac048 __skb_tx_hash +EXPORT_SYMBOL vmlinux 0x50a8e29a default_llseek +EXPORT_SYMBOL vmlinux 0x50a90e8d bsearch +EXPORT_SYMBOL vmlinux 0x50b91c98 pci_get_class +EXPORT_SYMBOL vmlinux 0x50d2592d hex_dump_to_buffer +EXPORT_SYMBOL vmlinux 0x50e74941 dquot_set_dqinfo +EXPORT_SYMBOL vmlinux 0x50ee4d78 scsi_host_set_state +EXPORT_SYMBOL vmlinux 0x5101db83 padata_set_cpumask +EXPORT_SYMBOL vmlinux 0x510a25eb mmc_erase_group_aligned +EXPORT_SYMBOL vmlinux 0x510f9986 ata_port_printk +EXPORT_SYMBOL vmlinux 0x511489a9 xfrm_stateonly_find +EXPORT_SYMBOL vmlinux 0x5118c382 secure_dccp_sequence_number +EXPORT_SYMBOL vmlinux 0x511ab427 wait_for_completion_killable +EXPORT_SYMBOL vmlinux 0x5122b514 xfrm_state_register_afinfo +EXPORT_SYMBOL vmlinux 0x51253e45 inet_bind +EXPORT_SYMBOL vmlinux 0x512b7c7f proc_dointvec_userhz_jiffies +EXPORT_SYMBOL vmlinux 0x5143c678 param_get_invbool +EXPORT_SYMBOL vmlinux 0x5171d94c tty_chars_in_buffer +EXPORT_SYMBOL vmlinux 0x5185ea5e cfb_copyarea +EXPORT_SYMBOL vmlinux 0x51af3bda ht_create_irq +EXPORT_SYMBOL vmlinux 0x51baa667 d_prune_aliases +EXPORT_SYMBOL vmlinux 0x51bdd753 jbd2_journal_get_create_access +EXPORT_SYMBOL vmlinux 0x51bf5625 sg_miter_start +EXPORT_SYMBOL vmlinux 0x51d12d4e acpi_pci_disabled +EXPORT_SYMBOL vmlinux 0x51d1d99e i2c_smbus_read_byte +EXPORT_SYMBOL vmlinux 0x51dce73b xfrm_state_walk_init +EXPORT_SYMBOL vmlinux 0x51fc8e50 sched_autogroup_create_attach +EXPORT_SYMBOL vmlinux 0x51fca0ac pci_disable_ltr +EXPORT_SYMBOL vmlinux 0x52026cdf security_sb_parse_opts_str +EXPORT_SYMBOL vmlinux 0x52095e19 acpi_get_data +EXPORT_SYMBOL vmlinux 0x52130046 acpi_check_address_range +EXPORT_SYMBOL vmlinux 0x523a359d invalidate_bdev +EXPORT_SYMBOL vmlinux 0x52428cc8 parent_mem_cgroup +EXPORT_SYMBOL vmlinux 0x5253e21c put_tty_driver +EXPORT_SYMBOL vmlinux 0x525bca2e amd_iommu_domain_direct_map +EXPORT_SYMBOL vmlinux 0x525e026f acpi_os_unmap_generic_address +EXPORT_SYMBOL vmlinux 0x5265b1d7 cleancache_register_ops +EXPORT_SYMBOL vmlinux 0x5265db5c ip_options_compile +EXPORT_SYMBOL vmlinux 0x52673f06 mmc_unregister_driver +EXPORT_SYMBOL vmlinux 0x527b11e4 quota_send_warning +EXPORT_SYMBOL vmlinux 0x52c49764 generic_setlease +EXPORT_SYMBOL vmlinux 0x52d42c95 set_current_groups +EXPORT_SYMBOL vmlinux 0x52d73350 scsi_register_driver +EXPORT_SYMBOL vmlinux 0x52d7c85f __scsi_add_device +EXPORT_SYMBOL vmlinux 0x530b1e98 pm_suspend +EXPORT_SYMBOL vmlinux 0x530d2d40 journal_lock_updates +EXPORT_SYMBOL vmlinux 0x531b604e __virt_addr_valid +EXPORT_SYMBOL vmlinux 0x53326531 mempool_alloc_pages +EXPORT_SYMBOL vmlinux 0x53364b99 pnpacpi_protocol +EXPORT_SYMBOL vmlinux 0x533888a3 have_submounts +EXPORT_SYMBOL vmlinux 0x53390a7f agp3_generic_tlbflush +EXPORT_SYMBOL vmlinux 0x536a0d8b inet_frag_kill +EXPORT_SYMBOL vmlinux 0x536ccc7e pcie_capability_read_dword +EXPORT_SYMBOL vmlinux 0x536e9c81 filemap_write_and_wait_range +EXPORT_SYMBOL vmlinux 0x5377e556 hex2bin +EXPORT_SYMBOL vmlinux 0x537830f2 mount_subtree +EXPORT_SYMBOL vmlinux 0x538383c0 unregister_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0x539ce017 __cleancache_invalidate_fs +EXPORT_SYMBOL vmlinux 0x539dd95f alloc_buffer_head +EXPORT_SYMBOL vmlinux 0x53af6a16 __sk_dst_check +EXPORT_SYMBOL vmlinux 0x53c5c29e __block_page_mkwrite +EXPORT_SYMBOL vmlinux 0x53da4273 scsi_is_host_device +EXPORT_SYMBOL vmlinux 0x53efa6ee eth_header_parse +EXPORT_SYMBOL vmlinux 0x53f6ffbc wait_for_completion_timeout +EXPORT_SYMBOL vmlinux 0x53f8c593 cad_pid +EXPORT_SYMBOL vmlinux 0x5407bb37 register_tcf_proto_ops +EXPORT_SYMBOL vmlinux 0x5409775b free_irq_cpu_rmap +EXPORT_SYMBOL vmlinux 0x54245b39 kstrtoull_from_user +EXPORT_SYMBOL vmlinux 0x543ef284 seq_hlist_start +EXPORT_SYMBOL vmlinux 0x5440758d jbd2_journal_ack_err +EXPORT_SYMBOL vmlinux 0x54554948 kobject_put +EXPORT_SYMBOL vmlinux 0x54568b75 register_memory_isolate_notifier +EXPORT_SYMBOL vmlinux 0x54768459 alloc_disk +EXPORT_SYMBOL vmlinux 0x54a9db5f _kstrtoul +EXPORT_SYMBOL vmlinux 0x54c5b08f get_user_pages +EXPORT_SYMBOL vmlinux 0x54e6fcdd net_enable_timestamp +EXPORT_SYMBOL vmlinux 0x54efb5d6 cpu_number +EXPORT_SYMBOL vmlinux 0x5508d362 mb_cache_entry_find_next +EXPORT_SYMBOL vmlinux 0x551bd071 __rb_erase_color +EXPORT_SYMBOL vmlinux 0x551f25cf stop_tty +EXPORT_SYMBOL vmlinux 0x552ad81b fs_bio_set +EXPORT_SYMBOL vmlinux 0x5541ea93 on_each_cpu +EXPORT_SYMBOL vmlinux 0x55587eea nf_getsockopt +EXPORT_SYMBOL vmlinux 0x55671680 lg_lock_init +EXPORT_SYMBOL vmlinux 0x5567c227 kernel_cpustat +EXPORT_SYMBOL vmlinux 0x557c9979 bio_integrity_set_tag +EXPORT_SYMBOL vmlinux 0x557efcf5 i2c_clients_command +EXPORT_SYMBOL vmlinux 0x55905def __sock_create +EXPORT_SYMBOL vmlinux 0x5594be03 bitmap_remap +EXPORT_SYMBOL vmlinux 0x55ac82d1 mpage_writepages +EXPORT_SYMBOL vmlinux 0x55cad19b register_key_type +EXPORT_SYMBOL vmlinux 0x55d36eea inet_ioctl +EXPORT_SYMBOL vmlinux 0x55ddde7d tag_pages_for_writeback +EXPORT_SYMBOL vmlinux 0x55edfcd6 compat_sock_get_timestampns +EXPORT_SYMBOL vmlinux 0x55f4494f pci_dev_driver +EXPORT_SYMBOL vmlinux 0x55f5019b __kmalloc_node +EXPORT_SYMBOL vmlinux 0x55ff0e75 finish_no_open +EXPORT_SYMBOL vmlinux 0x56058db0 would_dump +EXPORT_SYMBOL vmlinux 0x5614b010 xfrm_policy_walk_done +EXPORT_SYMBOL vmlinux 0x561a2460 kmalloc_caches +EXPORT_SYMBOL vmlinux 0x56272b00 scsi_prep_return +EXPORT_SYMBOL vmlinux 0x5635a60a vmalloc_user +EXPORT_SYMBOL vmlinux 0x5642793a radix_tree_tag_clear +EXPORT_SYMBOL vmlinux 0x565196d2 mmc_align_data_size +EXPORT_SYMBOL vmlinux 0x5667e4d7 bio_integrity_advance +EXPORT_SYMBOL vmlinux 0x5679922f inet_frag_destroy +EXPORT_SYMBOL vmlinux 0x5680811f journal_start_commit +EXPORT_SYMBOL vmlinux 0x569b3610 xfrm4_rcv +EXPORT_SYMBOL vmlinux 0x56c09e59 ip_route_input_noref +EXPORT_SYMBOL vmlinux 0x56c8799d scsi_kunmap_atomic_sg +EXPORT_SYMBOL vmlinux 0x56d660e1 cdrom_mode_sense +EXPORT_SYMBOL vmlinux 0x56ee09bd netdev_info +EXPORT_SYMBOL vmlinux 0x56f24e10 blk_queue_segment_boundary +EXPORT_SYMBOL vmlinux 0x570b6c25 fbcon_set_bitops +EXPORT_SYMBOL vmlinux 0x57202aef iw_handler_get_spy +EXPORT_SYMBOL vmlinux 0x572e85d4 blk_lookup_devt +EXPORT_SYMBOL vmlinux 0x573a4c3d scsi_scan_target +EXPORT_SYMBOL vmlinux 0x573d0514 bdev_read_only +EXPORT_SYMBOL vmlinux 0x57545f28 update_region +EXPORT_SYMBOL vmlinux 0x57575f08 dmaengine_put +EXPORT_SYMBOL vmlinux 0x57591dee neigh_changeaddr +EXPORT_SYMBOL vmlinux 0x57674fd7 __sw_hweight16 +EXPORT_SYMBOL vmlinux 0x578c3893 journal_clear_err +EXPORT_SYMBOL vmlinux 0x5792f848 strlcpy +EXPORT_SYMBOL vmlinux 0x579a558f pcim_iounmap +EXPORT_SYMBOL vmlinux 0x57a6ccd0 down_read +EXPORT_SYMBOL vmlinux 0x57b513ff __xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x57b55b24 tcp_valid_rtt_meas +EXPORT_SYMBOL vmlinux 0x57bcd176 padata_remove_cpu +EXPORT_SYMBOL vmlinux 0x57ce2a66 pci_pme_capable +EXPORT_SYMBOL vmlinux 0x57f173d8 uart_get_divisor +EXPORT_SYMBOL vmlinux 0x58051964 journal_set_features +EXPORT_SYMBOL vmlinux 0x5827703f mb_cache_entry_get +EXPORT_SYMBOL vmlinux 0x5838f6c9 rtc_valid_tm +EXPORT_SYMBOL vmlinux 0x5845648b inet_listen +EXPORT_SYMBOL vmlinux 0x584738f9 rdmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x584da542 tcf_exts_dump +EXPORT_SYMBOL vmlinux 0x5857b225 ioread16_rep +EXPORT_SYMBOL vmlinux 0x5860aad4 add_wait_queue +EXPORT_SYMBOL vmlinux 0x586103be acpi_setup_gpe_for_wake +EXPORT_SYMBOL vmlinux 0x58698f21 set_pages_x +EXPORT_SYMBOL vmlinux 0x58796e17 sk_wait_data +EXPORT_SYMBOL vmlinux 0x587d6972 read_cache_page_async +EXPORT_SYMBOL vmlinux 0x588206fe generic_block_fiemap +EXPORT_SYMBOL vmlinux 0x58adf1b8 pci_bus_read_config_word +EXPORT_SYMBOL vmlinux 0x58b0a085 sk_dst_check +EXPORT_SYMBOL vmlinux 0x58bde304 __invalidate_device +EXPORT_SYMBOL vmlinux 0x58c041b8 bitmap_endwrite +EXPORT_SYMBOL vmlinux 0x58e27c95 sk_stream_kill_queues +EXPORT_SYMBOL vmlinux 0x58fb0fc1 pci_reenable_device +EXPORT_SYMBOL vmlinux 0x590af704 build_skb +EXPORT_SYMBOL vmlinux 0x5914387f icmp_send +EXPORT_SYMBOL vmlinux 0x59256b05 ipv6_setsockopt +EXPORT_SYMBOL vmlinux 0x5930f439 dm_get_mapinfo +EXPORT_SYMBOL vmlinux 0x5934392b fb_register_client +EXPORT_SYMBOL vmlinux 0x5945aacd inet_unregister_protosw +EXPORT_SYMBOL vmlinux 0x594bf15b ioport_map +EXPORT_SYMBOL vmlinux 0x595e68d8 scsi_device_quiesce +EXPORT_SYMBOL vmlinux 0x5967c929 __tracepoint_kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x596f5eb5 redirty_page_for_writepage +EXPORT_SYMBOL vmlinux 0x59759b2b vfsmount_lock +EXPORT_SYMBOL vmlinux 0x598ba840 vlan_vids_add_by_dev +EXPORT_SYMBOL vmlinux 0x598c5903 ata_dev_printk +EXPORT_SYMBOL vmlinux 0x59bc9609 acpi_write_bit_register +EXPORT_SYMBOL vmlinux 0x59c04650 nf_unregister_hook +EXPORT_SYMBOL vmlinux 0x59d696b6 register_module_notifier +EXPORT_SYMBOL vmlinux 0x59e327ad kblockd_schedule_delayed_work +EXPORT_SYMBOL vmlinux 0x59e70f93 __send_remote_softirq +EXPORT_SYMBOL vmlinux 0x59ecb462 truncate_setsize +EXPORT_SYMBOL vmlinux 0x5a21a0d5 pnp_get_resource +EXPORT_SYMBOL vmlinux 0x5a4896a8 __put_user_2 +EXPORT_SYMBOL vmlinux 0x5a5064a2 pci_set_power_state +EXPORT_SYMBOL vmlinux 0x5a56a4cd module_refcount +EXPORT_SYMBOL vmlinux 0x5a81b8b7 elv_abort_queue +EXPORT_SYMBOL vmlinux 0x5a921311 strncmp +EXPORT_SYMBOL vmlinux 0x5ac376a5 acpi_install_fixed_event_handler +EXPORT_SYMBOL vmlinux 0x5aeb145f complete_and_exit +EXPORT_SYMBOL vmlinux 0x5af202e2 nf_register_queue_handler +EXPORT_SYMBOL vmlinux 0x5b271d86 acpi_video_dmi_promote_vendor +EXPORT_SYMBOL vmlinux 0x5b3c1254 get_io_context +EXPORT_SYMBOL vmlinux 0x5b56860c vm_munmap +EXPORT_SYMBOL vmlinux 0x5b6123c5 qdisc_warn_nonwc +EXPORT_SYMBOL vmlinux 0x5b6a9849 iunique +EXPORT_SYMBOL vmlinux 0x5ba53020 vfs_fstat +EXPORT_SYMBOL vmlinux 0x5bc10524 printk_emit +EXPORT_SYMBOL vmlinux 0x5bc71e63 scsi_mode_sense +EXPORT_SYMBOL vmlinux 0x5c00b0ee splice_direct_to_actor +EXPORT_SYMBOL vmlinux 0x5c1ca46a tty_devnum +EXPORT_SYMBOL vmlinux 0x5c23bea0 jbd2_journal_file_inode +EXPORT_SYMBOL vmlinux 0x5c3edd59 _raw_write_unlock_bh +EXPORT_SYMBOL vmlinux 0x5c3f9df5 install_exec_creds +EXPORT_SYMBOL vmlinux 0x5c8b5ce8 prepare_to_wait +EXPORT_SYMBOL vmlinux 0x5ca6017a fd_install +EXPORT_SYMBOL vmlinux 0x5cae8b6c update_devfreq +EXPORT_SYMBOL vmlinux 0x5cc571d5 alloc_pages_current +EXPORT_SYMBOL vmlinux 0x5cf53ce2 input_free_minor +EXPORT_SYMBOL vmlinux 0x5cf63f2a ip6_frag_init +EXPORT_SYMBOL vmlinux 0x5d0a2f86 names_cachep +EXPORT_SYMBOL vmlinux 0x5d0b1892 param_set_invbool +EXPORT_SYMBOL vmlinux 0x5d0f1d0f vfs_writev +EXPORT_SYMBOL vmlinux 0x5d33976c fsnotify_put_mark +EXPORT_SYMBOL vmlinux 0x5d4b9c81 try_to_release_page +EXPORT_SYMBOL vmlinux 0x5d4e339c journal_release_buffer +EXPORT_SYMBOL vmlinux 0x5d5b5a16 radix_tree_delete +EXPORT_SYMBOL vmlinux 0x5d698bfb serial8250_set_isa_configurator +EXPORT_SYMBOL vmlinux 0x5d74dbcf pnp_range_reserved +EXPORT_SYMBOL vmlinux 0x5d990855 log_wait_commit +EXPORT_SYMBOL vmlinux 0x5d9a16d9 security_old_inode_init_security +EXPORT_SYMBOL vmlinux 0x5d9b3401 simple_getattr +EXPORT_SYMBOL vmlinux 0x5da00936 dma_async_memcpy_buf_to_buf +EXPORT_SYMBOL vmlinux 0x5e4cde40 dev_addr_del_multiple +EXPORT_SYMBOL vmlinux 0x5e6947f7 unregister_dcbevent_notifier +EXPORT_SYMBOL vmlinux 0x5e6ad6f6 input_unregister_handler +EXPORT_SYMBOL vmlinux 0x5e95b1cd current_umask +EXPORT_SYMBOL vmlinux 0x5e9939a0 key_link +EXPORT_SYMBOL vmlinux 0x5eb24829 dm_shift_arg +EXPORT_SYMBOL vmlinux 0x5eb9077f qdisc_list_del +EXPORT_SYMBOL vmlinux 0x5ebb73e4 __cleancache_invalidate_inode +EXPORT_SYMBOL vmlinux 0x5ed040b0 pm_set_vt_switch +EXPORT_SYMBOL vmlinux 0x5ee94a0f genl_notify +EXPORT_SYMBOL vmlinux 0x5ef7dab4 agp_generic_mask_memory +EXPORT_SYMBOL vmlinux 0x5ef92f57 filemap_flush +EXPORT_SYMBOL vmlinux 0x5f005368 kstrtou8 +EXPORT_SYMBOL vmlinux 0x5f3c8f5c mmc_assume_removable +EXPORT_SYMBOL vmlinux 0x5f45b96b xfrm_find_acq_byseq +EXPORT_SYMBOL vmlinux 0x5f4c7cc2 pcie_port_service_unregister +EXPORT_SYMBOL vmlinux 0x5f557703 acpi_evaluate_hotplug_ost +EXPORT_SYMBOL vmlinux 0x5f58f676 flex_array_get_ptr +EXPORT_SYMBOL vmlinux 0x5f601d6e fb_set_cmap +EXPORT_SYMBOL vmlinux 0x5f8eb667 cdev_add +EXPORT_SYMBOL vmlinux 0x5fbb0c1f tty_hung_up_p +EXPORT_SYMBOL vmlinux 0x5fbd5aa8 pci_disable_msix +EXPORT_SYMBOL vmlinux 0x5fc1bf4e call_usermodehelper_fns +EXPORT_SYMBOL vmlinux 0x5fd9e314 jbd2_inode_cache +EXPORT_SYMBOL vmlinux 0x5fe3e52e genphy_resume +EXPORT_SYMBOL vmlinux 0x5ff42b08 acpi_video_get_capabilities +EXPORT_SYMBOL vmlinux 0x600683d3 do_unblank_screen +EXPORT_SYMBOL vmlinux 0x601f665f dm_io_client_create +EXPORT_SYMBOL vmlinux 0x602ed00d acpi_current_gpe_count +EXPORT_SYMBOL vmlinux 0x6044f321 tty_wait_until_sent +EXPORT_SYMBOL vmlinux 0x605180c7 dev_emerg +EXPORT_SYMBOL vmlinux 0x6058929f max8925_bulk_read +EXPORT_SYMBOL vmlinux 0x606d0b09 secure_tcpv6_sequence_number +EXPORT_SYMBOL vmlinux 0x60811587 simple_rename +EXPORT_SYMBOL vmlinux 0x609cc50d inet_add_protocol +EXPORT_SYMBOL vmlinux 0x609f1c7e synchronize_net +EXPORT_SYMBOL vmlinux 0x60a32ea9 pm_power_off +EXPORT_SYMBOL vmlinux 0x60bcdb2a xfrm_state_flush +EXPORT_SYMBOL vmlinux 0x60f21583 __wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0x610ecde1 input_unregister_device +EXPORT_SYMBOL vmlinux 0x61188741 bio_integrity_tag_size +EXPORT_SYMBOL vmlinux 0x611d6b59 compat_mc_setsockopt +EXPORT_SYMBOL vmlinux 0x612390ad netpoll_set_trap +EXPORT_SYMBOL vmlinux 0x6128b5fc __printk_ratelimit +EXPORT_SYMBOL vmlinux 0x614383c0 acpi_get_object_info +EXPORT_SYMBOL vmlinux 0x6158f34d agp_generic_destroy_page +EXPORT_SYMBOL vmlinux 0x6165becd pci_disable_device +EXPORT_SYMBOL vmlinux 0x617643a2 param_set_long +EXPORT_SYMBOL vmlinux 0x618911fc numa_node +EXPORT_SYMBOL vmlinux 0x619cb7dd simple_read_from_buffer +EXPORT_SYMBOL vmlinux 0x61b4ec3e scsi_rescan_device +EXPORT_SYMBOL vmlinux 0x61b7b126 simple_strtoull +EXPORT_SYMBOL vmlinux 0x61e9f624 posix_unblock_lock +EXPORT_SYMBOL vmlinux 0x61fb248a node_states +EXPORT_SYMBOL vmlinux 0x6202159c scsi_unblock_requests +EXPORT_SYMBOL vmlinux 0x62049256 acpi_disable +EXPORT_SYMBOL vmlinux 0x620fa258 ida_simple_remove +EXPORT_SYMBOL vmlinux 0x621da573 bio_split +EXPORT_SYMBOL vmlinux 0x6225637e md5_transform +EXPORT_SYMBOL vmlinux 0x6226b9fa machine_to_phys_mapping +EXPORT_SYMBOL vmlinux 0x6228c21f smp_call_function_single +EXPORT_SYMBOL vmlinux 0x622acc35 dev_kfree_skb_irq +EXPORT_SYMBOL vmlinux 0x6237f6b5 acpi_enable_event +EXPORT_SYMBOL vmlinux 0x624ba481 blk_queue_max_write_same_sectors +EXPORT_SYMBOL vmlinux 0x625f3a75 i2c_smbus_write_word_data +EXPORT_SYMBOL vmlinux 0x626c43c3 dma_async_device_unregister +EXPORT_SYMBOL vmlinux 0x62737e1d sock_unregister +EXPORT_SYMBOL vmlinux 0x62748e70 acpi_set_current_resources +EXPORT_SYMBOL vmlinux 0x628121e9 register_sysctl_table +EXPORT_SYMBOL vmlinux 0x62827bec security_secctx_to_secid +EXPORT_SYMBOL vmlinux 0x62849ac7 dev_valid_name +EXPORT_SYMBOL vmlinux 0x629bdbaf blk_bio_map_sg +EXPORT_SYMBOL vmlinux 0x62bf48db sk_send_sigurg +EXPORT_SYMBOL vmlinux 0x62ca2e61 devfreq_resume_device +EXPORT_SYMBOL vmlinux 0x62d7c254 pci_clear_mwi +EXPORT_SYMBOL vmlinux 0x62ee1621 sk_stream_write_space +EXPORT_SYMBOL vmlinux 0x62f59afc genphy_read_status +EXPORT_SYMBOL vmlinux 0x62fd6207 param_set_charp +EXPORT_SYMBOL vmlinux 0x63086fbc set_pages_array_wc +EXPORT_SYMBOL vmlinux 0x63187451 pcie_aspm_support_enabled +EXPORT_SYMBOL vmlinux 0x6332cc1a audit_log_start +EXPORT_SYMBOL vmlinux 0x633c08e1 pipe_lock +EXPORT_SYMBOL vmlinux 0x633debee __blockdev_direct_IO +EXPORT_SYMBOL vmlinux 0x636a5691 acpi_register_ioapic +EXPORT_SYMBOL vmlinux 0x63922bbd vfs_stat +EXPORT_SYMBOL vmlinux 0x639d01dd scsi_dma_unmap +EXPORT_SYMBOL vmlinux 0x639fc8f7 inet_accept +EXPORT_SYMBOL vmlinux 0x63a01291 acpi_leave_sleep_state_prep +EXPORT_SYMBOL vmlinux 0x63bd84e3 skb_dequeue_tail +EXPORT_SYMBOL vmlinux 0x63be9c2c posix_test_lock +EXPORT_SYMBOL vmlinux 0x63d16225 dcache_dir_close +EXPORT_SYMBOL vmlinux 0x63dbcae0 __alloc_skb +EXPORT_SYMBOL vmlinux 0x63eb9355 panic_blink +EXPORT_SYMBOL vmlinux 0x63ecad53 register_netdevice_notifier +EXPORT_SYMBOL vmlinux 0x63fc232f strlen_user +EXPORT_SYMBOL vmlinux 0x6403e338 tcp_memory_pressure +EXPORT_SYMBOL vmlinux 0x640f579b iterate_supers_type +EXPORT_SYMBOL vmlinux 0x64197a37 agp_find_bridge +EXPORT_SYMBOL vmlinux 0x6437ea7f fb_find_mode +EXPORT_SYMBOL vmlinux 0x643c151b __neigh_event_send +EXPORT_SYMBOL vmlinux 0x64492cce inet_put_port +EXPORT_SYMBOL vmlinux 0x6449fd41 acpi_install_address_space_handler +EXPORT_SYMBOL vmlinux 0x646344df jbd2_journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0x6478134c ec_burst_enable +EXPORT_SYMBOL vmlinux 0x647bd88c set_blocksize +EXPORT_SYMBOL vmlinux 0x64999478 congestion_wait +EXPORT_SYMBOL vmlinux 0x64d34fcb kmem_cache_destroy +EXPORT_SYMBOL vmlinux 0x64eae7ad set_memory_array_wb +EXPORT_SYMBOL vmlinux 0x650a6767 prandom_u32_state +EXPORT_SYMBOL vmlinux 0x6513a3fa fb_get_color_depth +EXPORT_SYMBOL vmlinux 0x651a4139 test_taint +EXPORT_SYMBOL vmlinux 0x651a866d atomic_dec_and_mutex_lock +EXPORT_SYMBOL vmlinux 0x652ce9aa nla_memcmp +EXPORT_SYMBOL vmlinux 0x65408378 zlib_inflate_blob +EXPORT_SYMBOL vmlinux 0x6544d243 genl_register_family_with_ops +EXPORT_SYMBOL vmlinux 0x654f9a39 generic_read_dir +EXPORT_SYMBOL vmlinux 0x655f1ab0 set_memory_array_wc +EXPORT_SYMBOL vmlinux 0x6583a519 __dst_destroy_metrics_generic +EXPORT_SYMBOL vmlinux 0x65d93157 locks_free_lock +EXPORT_SYMBOL vmlinux 0x65dccf13 xz_dec_end +EXPORT_SYMBOL vmlinux 0x65df8e41 schedule_delayed_work_on +EXPORT_SYMBOL vmlinux 0x65e0d6d7 memory_read_from_buffer +EXPORT_SYMBOL vmlinux 0x65f3ad9a fb_videomode_to_var +EXPORT_SYMBOL vmlinux 0x65f6c012 lease_modify +EXPORT_SYMBOL vmlinux 0x6605f97f flex_array_clear +EXPORT_SYMBOL vmlinux 0x6607c9bc vga_get +EXPORT_SYMBOL vmlinux 0x660b263f neigh_compat_output +EXPORT_SYMBOL vmlinux 0x66108d96 bio_integrity_alloc +EXPORT_SYMBOL vmlinux 0x6614a5c6 dev_err +EXPORT_SYMBOL vmlinux 0x66165e61 iterate_fd +EXPORT_SYMBOL vmlinux 0x6616800b vfs_mknod +EXPORT_SYMBOL vmlinux 0x6619726a uart_register_driver +EXPORT_SYMBOL vmlinux 0x662d3a7b xfrm_state_alloc +EXPORT_SYMBOL vmlinux 0x665f36ee __dev_get_by_name +EXPORT_SYMBOL vmlinux 0x668da8d5 zlib_inflateIncomp +EXPORT_SYMBOL vmlinux 0x66a67dab flex_array_shrink +EXPORT_SYMBOL vmlinux 0x66ac3334 dev_uc_unsync +EXPORT_SYMBOL vmlinux 0x66bef6bd xfrm_state_check_expire +EXPORT_SYMBOL vmlinux 0x66d23858 __nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0x66d8892e ping_prot +EXPORT_SYMBOL vmlinux 0x6729d3df __get_user_4 +EXPORT_SYMBOL vmlinux 0x673f815e agp_bridges +EXPORT_SYMBOL vmlinux 0x6756c8ee arp_send +EXPORT_SYMBOL vmlinux 0x677090ee migrate_page +EXPORT_SYMBOL vmlinux 0x67722bdd amd_iommu_get_v2_domain +EXPORT_SYMBOL vmlinux 0x67a0306a percpu_counter_set +EXPORT_SYMBOL vmlinux 0x67a81070 arp_invalidate +EXPORT_SYMBOL vmlinux 0x67af4c77 pnp_device_attach +EXPORT_SYMBOL vmlinux 0x67b27ec1 tty_std_termios +EXPORT_SYMBOL vmlinux 0x67b78eb3 seq_hlist_next_rcu +EXPORT_SYMBOL vmlinux 0x67bebd1f fb_blank +EXPORT_SYMBOL vmlinux 0x67c4f078 thermal_cooling_device_unregister +EXPORT_SYMBOL vmlinux 0x67d396b0 rwsem_down_read_failed +EXPORT_SYMBOL vmlinux 0x6827ab5e iget_locked +EXPORT_SYMBOL vmlinux 0x683fcf6d do_sync_write +EXPORT_SYMBOL vmlinux 0x684b0bbd __scsi_device_lookup +EXPORT_SYMBOL vmlinux 0x687b6a16 kdbgetsymval +EXPORT_SYMBOL vmlinux 0x68aca4ad down +EXPORT_SYMBOL vmlinux 0x68b9cc06 nla_append +EXPORT_SYMBOL vmlinux 0x68bba7e8 eth_header +EXPORT_SYMBOL vmlinux 0x68bbf180 backlight_device_register +EXPORT_SYMBOL vmlinux 0x68e05d57 getrawmonotonic +EXPORT_SYMBOL vmlinux 0x68f02b5b dma_common_get_sgtable +EXPORT_SYMBOL vmlinux 0x690438f1 journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x691001b5 acpi_evaluate_integer +EXPORT_SYMBOL vmlinux 0x6941f33d skb_seq_read +EXPORT_SYMBOL vmlinux 0x6971447a rtc_month_days +EXPORT_SYMBOL vmlinux 0x69758a91 jbd2_journal_abort +EXPORT_SYMBOL vmlinux 0x6988d0ca cpu_dr7 +EXPORT_SYMBOL vmlinux 0x698b6ad0 serial8250_do_pm +EXPORT_SYMBOL vmlinux 0x698ba97b pci_setup_cardbus +EXPORT_SYMBOL vmlinux 0x69a0ca7d iowrite16be +EXPORT_SYMBOL vmlinux 0x69a358a6 iomem_resource +EXPORT_SYMBOL vmlinux 0x69a616d9 eth_rebuild_header +EXPORT_SYMBOL vmlinux 0x69acdf38 memcpy +EXPORT_SYMBOL vmlinux 0x69ad2f20 kstrtouint +EXPORT_SYMBOL vmlinux 0x69ae3613 locks_copy_lock +EXPORT_SYMBOL vmlinux 0x69b8705d pci_release_selected_regions +EXPORT_SYMBOL vmlinux 0x69bc8342 security_sb_set_mnt_opts +EXPORT_SYMBOL vmlinux 0x69c16b45 journal_get_create_access +EXPORT_SYMBOL vmlinux 0x69c2c8af gen_pool_add_virt +EXPORT_SYMBOL vmlinux 0x69d02810 __put_cred +EXPORT_SYMBOL vmlinux 0x69d38ed9 __scsi_print_sense +EXPORT_SYMBOL vmlinux 0x69e27c7a bitmap_copy_le +EXPORT_SYMBOL vmlinux 0x69e44533 security_inode_readlink +EXPORT_SYMBOL vmlinux 0x69fbc0a2 acpi_get_event_resources +EXPORT_SYMBOL vmlinux 0x6a037cf1 mempool_kfree +EXPORT_SYMBOL vmlinux 0x6a0eb5e9 dev_close +EXPORT_SYMBOL vmlinux 0x6a15dfc9 dquot_mark_dquot_dirty +EXPORT_SYMBOL vmlinux 0x6a262a90 gnet_stats_start_copy +EXPORT_SYMBOL vmlinux 0x6a2b6a41 find_lock_page +EXPORT_SYMBOL vmlinux 0x6a40bb0b keyring_alloc +EXPORT_SYMBOL vmlinux 0x6a418fc0 tcp_alloc_md5sig_pool +EXPORT_SYMBOL vmlinux 0x6a5fa363 sigprocmask +EXPORT_SYMBOL vmlinux 0x6a6a29cc blkdev_issue_discard +EXPORT_SYMBOL vmlinux 0x6a76f3ac blk_iopoll_enable +EXPORT_SYMBOL vmlinux 0x6a7d3b8c pci_fixup_cardbus +EXPORT_SYMBOL vmlinux 0x6a8a4e0c mutex_lock_interruptible +EXPORT_SYMBOL vmlinux 0x6ab672fa __neigh_create +EXPORT_SYMBOL vmlinux 0x6abb65f4 kernel_getsockopt +EXPORT_SYMBOL vmlinux 0x6ac9f255 __netif_schedule +EXPORT_SYMBOL vmlinux 0x6acb973d iowrite32be +EXPORT_SYMBOL vmlinux 0x6acfcf5f generic_file_llseek_size +EXPORT_SYMBOL vmlinux 0x6ad85887 acpi_enable_gpe +EXPORT_SYMBOL vmlinux 0x6add5c9a dmi_find_device +EXPORT_SYMBOL vmlinux 0x6af31f6c __d_drop +EXPORT_SYMBOL vmlinux 0x6af80d31 amd_iommu_domain_set_gcr3 +EXPORT_SYMBOL vmlinux 0x6b055404 devfreq_monitor_start +EXPORT_SYMBOL vmlinux 0x6b06fdce delayed_work_timer_fn +EXPORT_SYMBOL vmlinux 0x6b13b2de inet_csk_init_xmit_timers +EXPORT_SYMBOL vmlinux 0x6b1b67d3 __bdevname +EXPORT_SYMBOL vmlinux 0x6b1e085a writeback_inodes_sb +EXPORT_SYMBOL vmlinux 0x6b2db8ae vfs_lstat +EXPORT_SYMBOL vmlinux 0x6b2dc060 dump_stack +EXPORT_SYMBOL vmlinux 0x6b49eac1 tcf_em_register +EXPORT_SYMBOL vmlinux 0x6b640864 nla_strlcpy +EXPORT_SYMBOL vmlinux 0x6b64fd1e pm860x_reg_read +EXPORT_SYMBOL vmlinux 0x6b7589f4 param_set_bool +EXPORT_SYMBOL vmlinux 0x6b779d59 call_netdevice_notifiers +EXPORT_SYMBOL vmlinux 0x6bac8bd0 register_qdisc +EXPORT_SYMBOL vmlinux 0x6bb14054 tty_mutex +EXPORT_SYMBOL vmlinux 0x6bc3fbc0 __unregister_chrdev +EXPORT_SYMBOL vmlinux 0x6bdcfd99 qdisc_class_hash_remove +EXPORT_SYMBOL vmlinux 0x6be732e8 force_sig +EXPORT_SYMBOL vmlinux 0x6bfec4ff vfs_create +EXPORT_SYMBOL vmlinux 0x6c075f22 gnet_stats_copy_basic +EXPORT_SYMBOL vmlinux 0x6c26e55d ilookup5_nowait +EXPORT_SYMBOL vmlinux 0x6c26e6fe iget5_locked +EXPORT_SYMBOL vmlinux 0x6c389761 acpi_bus_get_private_data +EXPORT_SYMBOL vmlinux 0x6c4fd8a4 write_inode_now +EXPORT_SYMBOL vmlinux 0x6c5101d8 percpu_counter_compare +EXPORT_SYMBOL vmlinux 0x6c54d2fa bio_init +EXPORT_SYMBOL vmlinux 0x6c61ce70 num_registered_fb +EXPORT_SYMBOL vmlinux 0x6c702af7 sysctl_udp_rmem_min +EXPORT_SYMBOL vmlinux 0x6c75c083 seq_put_decimal_ll +EXPORT_SYMBOL vmlinux 0x6c963647 kern_path_create +EXPORT_SYMBOL vmlinux 0x6cca4669 blk_queue_resize_tags +EXPORT_SYMBOL vmlinux 0x6ccabe66 iw_handler_get_thrspy +EXPORT_SYMBOL vmlinux 0x6cd3a93a blk_start_request +EXPORT_SYMBOL vmlinux 0x6ce0197f phy_device_create +EXPORT_SYMBOL vmlinux 0x6d044c26 param_ops_uint +EXPORT_SYMBOL vmlinux 0x6d0aba34 wait_for_completion +EXPORT_SYMBOL vmlinux 0x6d0c8977 sb_set_blocksize +EXPORT_SYMBOL vmlinux 0x6d0f1f89 dm_table_get_mode +EXPORT_SYMBOL vmlinux 0x6d128740 __get_page_tail +EXPORT_SYMBOL vmlinux 0x6d246d53 framebuffer_alloc +EXPORT_SYMBOL vmlinux 0x6d27ef64 __bitmap_empty +EXPORT_SYMBOL vmlinux 0x6d294e43 clock_t_to_jiffies +EXPORT_SYMBOL vmlinux 0x6d33141a dcb_ieee_delapp +EXPORT_SYMBOL vmlinux 0x6d334118 __get_user_8 +EXPORT_SYMBOL vmlinux 0x6d340f64 tty_termios_input_baud_rate +EXPORT_SYMBOL vmlinux 0x6d6818ff gen_pool_alloc +EXPORT_SYMBOL vmlinux 0x6d89a112 d_alloc_name +EXPORT_SYMBOL vmlinux 0x6db81e7b dev_add_offload +EXPORT_SYMBOL vmlinux 0x6def2db2 half_md4_transform +EXPORT_SYMBOL vmlinux 0x6dfa224f rtnl_create_link +EXPORT_SYMBOL vmlinux 0x6e09fbd0 tcp_create_openreq_child +EXPORT_SYMBOL vmlinux 0x6e297a62 __percpu_counter_init +EXPORT_SYMBOL vmlinux 0x6e3139da bh_submit_read +EXPORT_SYMBOL vmlinux 0x6e3412fe __task_pid_nr_ns +EXPORT_SYMBOL vmlinux 0x6e4d1360 ppp_channel_index +EXPORT_SYMBOL vmlinux 0x6e54402b balance_dirty_pages_ratelimited +EXPORT_SYMBOL vmlinux 0x6e720ff2 rtnl_unlock +EXPORT_SYMBOL vmlinux 0x6e774c41 pci_assign_resource +EXPORT_SYMBOL vmlinux 0x6e7d377f tty_port_tty_set +EXPORT_SYMBOL vmlinux 0x6e9dd606 __symbol_put +EXPORT_SYMBOL vmlinux 0x6eabe7fe generic_file_splice_write +EXPORT_SYMBOL vmlinux 0x6ebe0aa1 genlmsg_multicast_allns +EXPORT_SYMBOL vmlinux 0x6ed01847 kick_iocb +EXPORT_SYMBOL vmlinux 0x6f1fa034 cdrom_get_last_written +EXPORT_SYMBOL vmlinux 0x6f20960a full_name_hash +EXPORT_SYMBOL vmlinux 0x6f25c49c generic_pipe_buf_map +EXPORT_SYMBOL vmlinux 0x6f27df72 irq_set_chip +EXPORT_SYMBOL vmlinux 0x6f4c812f __percpu_counter_add +EXPORT_SYMBOL vmlinux 0x6f556bdb acpi_get_gpe_device +EXPORT_SYMBOL vmlinux 0x6f894f86 kernel_bind +EXPORT_SYMBOL vmlinux 0x6fa4a597 ps2_command +EXPORT_SYMBOL vmlinux 0x6fa71ea3 pci_scan_bus +EXPORT_SYMBOL vmlinux 0x6fa971b5 jbd2_journal_unlock_updates +EXPORT_SYMBOL vmlinux 0x6fc4c0be del_gendisk +EXPORT_SYMBOL vmlinux 0x6fcb87a1 touch_softlockup_watchdog +EXPORT_SYMBOL vmlinux 0x6fd040ec generic_segment_checks +EXPORT_SYMBOL vmlinux 0x6fd32ace neigh_lookup_nodev +EXPORT_SYMBOL vmlinux 0x6feb2039 acpi_write +EXPORT_SYMBOL vmlinux 0x702b6c54 udplite_table +EXPORT_SYMBOL vmlinux 0x703b4352 _raw_read_unlock_irqrestore +EXPORT_SYMBOL vmlinux 0x70523a7a __cond_resched_softirq +EXPORT_SYMBOL vmlinux 0x7054a3e4 request_dma +EXPORT_SYMBOL vmlinux 0x70560ce0 jbd2_journal_check_used_features +EXPORT_SYMBOL vmlinux 0x70866635 mutex_lock_killable +EXPORT_SYMBOL vmlinux 0x709b91f3 blk_rq_map_sg +EXPORT_SYMBOL vmlinux 0x70a39872 __alloc_pages_nodemask +EXPORT_SYMBOL vmlinux 0x70afb8e8 __skb_get_rxhash +EXPORT_SYMBOL vmlinux 0x70bc17d7 inode_wait +EXPORT_SYMBOL vmlinux 0x70cec4d7 set_pages_array_uc +EXPORT_SYMBOL vmlinux 0x70d053fd try_to_del_timer_sync +EXPORT_SYMBOL vmlinux 0x70d573ea __dev_remove_offload +EXPORT_SYMBOL vmlinux 0x70d85c9b tty_port_alloc_xmit_buf +EXPORT_SYMBOL vmlinux 0x70d8ab82 acpi_acquire_global_lock +EXPORT_SYMBOL vmlinux 0x70dab31a __xfrm_init_state +EXPORT_SYMBOL vmlinux 0x70f91f1d follow_up +EXPORT_SYMBOL vmlinux 0x7111f356 spi_release_transport +EXPORT_SYMBOL vmlinux 0x71255a59 kernel_getsockname +EXPORT_SYMBOL vmlinux 0x7129e5f8 hex_asc +EXPORT_SYMBOL vmlinux 0x7137c733 __inet6_lookup_established +EXPORT_SYMBOL vmlinux 0x714092bc jbd2_journal_init_jbd_inode +EXPORT_SYMBOL vmlinux 0x7171121c overflowgid +EXPORT_SYMBOL vmlinux 0x718cb851 mntget +EXPORT_SYMBOL vmlinux 0x7191678b dev_alloc_name +EXPORT_SYMBOL vmlinux 0x719735e1 acpi_device_set_power +EXPORT_SYMBOL vmlinux 0x719b6035 tcp_v4_syn_recv_sock +EXPORT_SYMBOL vmlinux 0x71a467d4 skb_checksum_help +EXPORT_SYMBOL vmlinux 0x71a50dbc register_blkdev +EXPORT_SYMBOL vmlinux 0x71a59c70 dma_async_tx_descriptor_init +EXPORT_SYMBOL vmlinux 0x71a672ef dmam_pool_destroy +EXPORT_SYMBOL vmlinux 0x71d47b6b dev_mc_sync +EXPORT_SYMBOL vmlinux 0x71e3cecb up +EXPORT_SYMBOL vmlinux 0x7234eafb otg_state_string +EXPORT_SYMBOL vmlinux 0x72659a14 led_set_brightness +EXPORT_SYMBOL vmlinux 0x7269280a journal_create +EXPORT_SYMBOL vmlinux 0x72a7bf03 pci_set_mwi +EXPORT_SYMBOL vmlinux 0x72a98fdb copy_user_generic_unrolled +EXPORT_SYMBOL vmlinux 0x72b243d4 free_dma +EXPORT_SYMBOL vmlinux 0x72bf2140 mtrr_add +EXPORT_SYMBOL vmlinux 0x72c11bf9 fifo_create_dflt +EXPORT_SYMBOL vmlinux 0x72c9059b pm8606_osc_enable +EXPORT_SYMBOL vmlinux 0x72e10042 xfrm_policy_register_afinfo +EXPORT_SYMBOL vmlinux 0x72e70d51 proc_mkdir_mode +EXPORT_SYMBOL vmlinux 0x72ea7b2d scsi_device_type +EXPORT_SYMBOL vmlinux 0x72f3aa32 acpi_get_physical_device_location +EXPORT_SYMBOL vmlinux 0x72ff31d2 xfrm_policy_delete +EXPORT_SYMBOL vmlinux 0x7315a4e9 twl6030_mmc_card_detect_config +EXPORT_SYMBOL vmlinux 0x7324b541 vmalloc_to_page +EXPORT_SYMBOL vmlinux 0x733abd03 xfrm_policy_insert +EXPORT_SYMBOL vmlinux 0x733c3b54 kasprintf +EXPORT_SYMBOL vmlinux 0x7343211f input_release_device +EXPORT_SYMBOL vmlinux 0x734bc95d blk_free_tags +EXPORT_SYMBOL vmlinux 0x734d5ce1 lock_rename +EXPORT_SYMBOL vmlinux 0x73581e0d journal_restart +EXPORT_SYMBOL vmlinux 0x735a0bd5 native_io_delay +EXPORT_SYMBOL vmlinux 0x737de5e9 radix_tree_tag_get +EXPORT_SYMBOL vmlinux 0x73805472 mdiobus_free +EXPORT_SYMBOL vmlinux 0x73a78bc4 downgrade_write +EXPORT_SYMBOL vmlinux 0x73afb475 __dst_free +EXPORT_SYMBOL vmlinux 0x73bba4a9 revalidate_disk +EXPORT_SYMBOL vmlinux 0x73ccafdc bio_copy_user +EXPORT_SYMBOL vmlinux 0x73dd54eb irq_fpu_usable +EXPORT_SYMBOL vmlinux 0x73ea68e9 __cleancache_get_page +EXPORT_SYMBOL vmlinux 0x740a1b95 reserve_evntsel_nmi +EXPORT_SYMBOL vmlinux 0x740d332f qdisc_watchdog_cancel +EXPORT_SYMBOL vmlinux 0x741fce41 tty_register_ldisc +EXPORT_SYMBOL vmlinux 0x743fe34c max8925_bulk_write +EXPORT_SYMBOL vmlinux 0x744a8aa0 __netdev_alloc_skb +EXPORT_SYMBOL vmlinux 0x74581f12 agp_free_page_array +EXPORT_SYMBOL vmlinux 0x7469fcfe radix_tree_tagged +EXPORT_SYMBOL vmlinux 0x7485e15e unregister_chrdev_region +EXPORT_SYMBOL vmlinux 0x74989dbb arch_debugfs_dir +EXPORT_SYMBOL vmlinux 0x749f4165 irq_stat +EXPORT_SYMBOL vmlinux 0x74a3822f bio_pair_release +EXPORT_SYMBOL vmlinux 0x74b398b2 bio_endio +EXPORT_SYMBOL vmlinux 0x74c134b9 __sw_hweight32 +EXPORT_SYMBOL vmlinux 0x74cb7331 rtnl_unicast +EXPORT_SYMBOL vmlinux 0x74cc1cbe unregister_cpu_notifier +EXPORT_SYMBOL vmlinux 0x74d30cac elevator_change +EXPORT_SYMBOL vmlinux 0x74e5ff1a udpv6_encap_enable +EXPORT_SYMBOL vmlinux 0x75057c31 posix_acl_equiv_mode +EXPORT_SYMBOL vmlinux 0x751297f6 sock_no_shutdown +EXPORT_SYMBOL vmlinux 0x7512f8b5 dmam_free_noncoherent +EXPORT_SYMBOL vmlinux 0x75145029 swiotlb_unmap_sg_attrs +EXPORT_SYMBOL vmlinux 0x752f8491 skb_copy +EXPORT_SYMBOL vmlinux 0x7532588a alloc_pages_exact +EXPORT_SYMBOL vmlinux 0x7538b132 agp_off +EXPORT_SYMBOL vmlinux 0x754d539c strlen +EXPORT_SYMBOL vmlinux 0x754dac78 blk_limits_io_min +EXPORT_SYMBOL vmlinux 0x754f0b34 qdisc_create_dflt +EXPORT_SYMBOL vmlinux 0x7551debc panic_notifier_list +EXPORT_SYMBOL vmlinux 0x757a23bc inode_add_bytes +EXPORT_SYMBOL vmlinux 0x758b422d set_security_override +EXPORT_SYMBOL vmlinux 0x759a5e0c find_or_create_page +EXPORT_SYMBOL vmlinux 0x75b1f1fb kobject_get +EXPORT_SYMBOL vmlinux 0x75bda77a seq_hlist_next +EXPORT_SYMBOL vmlinux 0x75bdea12 iommu_area_alloc +EXPORT_SYMBOL vmlinux 0x75cc809e __mmc_claim_host +EXPORT_SYMBOL vmlinux 0x75e7be12 blk_queue_max_hw_sectors +EXPORT_SYMBOL vmlinux 0x75e96282 inet6_del_protocol +EXPORT_SYMBOL vmlinux 0x75eec179 remove_arg_zero +EXPORT_SYMBOL vmlinux 0x75f73f15 pci_bus_set_ops +EXPORT_SYMBOL vmlinux 0x75fbdefd acpi_remove_address_space_handler +EXPORT_SYMBOL vmlinux 0x75fe5287 mdio_bus_type +EXPORT_SYMBOL vmlinux 0x76074290 simple_link +EXPORT_SYMBOL vmlinux 0x760a0f4f yield +EXPORT_SYMBOL vmlinux 0x760b437a unregister_inetaddr_notifier +EXPORT_SYMBOL vmlinux 0x7628f3c7 this_cpu_off +EXPORT_SYMBOL vmlinux 0x7647726c handle_sysrq +EXPORT_SYMBOL vmlinux 0x764bd77c request_resource +EXPORT_SYMBOL vmlinux 0x765f143d scsi_setup_fs_cmnd +EXPORT_SYMBOL vmlinux 0x767dd8fd acpi_get_irq_routing_table +EXPORT_SYMBOL vmlinux 0x767ddb02 set_memory_wc +EXPORT_SYMBOL vmlinux 0x76869ac8 rdmsr_on_cpus +EXPORT_SYMBOL vmlinux 0x76a415bd udp_prot +EXPORT_SYMBOL vmlinux 0x76a57858 tcp_hashinfo +EXPORT_SYMBOL vmlinux 0x76bf656d __bitmap_shift_left +EXPORT_SYMBOL vmlinux 0x76c9c799 idr_get_new_above +EXPORT_SYMBOL vmlinux 0x76cebd86 d_rehash +EXPORT_SYMBOL vmlinux 0x76d3cd60 laptop_mode +EXPORT_SYMBOL vmlinux 0x76f30f0d mmc_flush_cache +EXPORT_SYMBOL vmlinux 0x77030f31 blk_queue_find_tag +EXPORT_SYMBOL vmlinux 0x7707035f node_data +EXPORT_SYMBOL vmlinux 0x771cf835 dma_pool_alloc +EXPORT_SYMBOL vmlinux 0x7726418d pm860x_page_reg_read +EXPORT_SYMBOL vmlinux 0x77267e5f textsearch_destroy +EXPORT_SYMBOL vmlinux 0x773a9c94 blk_iopoll_enabled +EXPORT_SYMBOL vmlinux 0x773fa409 __kfifo_dma_in_finish_r +EXPORT_SYMBOL vmlinux 0x774be096 tty_insert_flip_string_flags +EXPORT_SYMBOL vmlinux 0x774c846b __ps2_command +EXPORT_SYMBOL vmlinux 0x7756429d key_validate +EXPORT_SYMBOL vmlinux 0x775d3c1f key_payload_reserve +EXPORT_SYMBOL vmlinux 0x776d6e67 twl6040_power +EXPORT_SYMBOL vmlinux 0x7783514e nf_unregister_hooks +EXPORT_SYMBOL vmlinux 0x779a18af kstrtoll +EXPORT_SYMBOL vmlinux 0x77b9fb9c sk_prot_clear_portaddr_nulls +EXPORT_SYMBOL vmlinux 0x77bc13a0 strim +EXPORT_SYMBOL vmlinux 0x77c9cf6b locks_delete_block +EXPORT_SYMBOL vmlinux 0x77ce93b3 qid_lt +EXPORT_SYMBOL vmlinux 0x77df0847 __set_personality +EXPORT_SYMBOL vmlinux 0x77ecac9f zlib_inflateEnd +EXPORT_SYMBOL vmlinux 0x77f53abc acpi_get_vendor_resource +EXPORT_SYMBOL vmlinux 0x77fa672a lookup_one_len +EXPORT_SYMBOL vmlinux 0x780fdfd1 intel_enable_gtt +EXPORT_SYMBOL vmlinux 0x781ca3d6 netdev_update_features +EXPORT_SYMBOL vmlinux 0x7824c0bf pci_iounmap +EXPORT_SYMBOL vmlinux 0x782649b2 d_move +EXPORT_SYMBOL vmlinux 0x782a5e6d register_filesystem +EXPORT_SYMBOL vmlinux 0x782b8c72 scsi_host_lookup +EXPORT_SYMBOL vmlinux 0x783d7a9c pci_save_state +EXPORT_SYMBOL vmlinux 0x7846af3e __kfifo_len_r +EXPORT_SYMBOL vmlinux 0x7848b512 __register_binfmt +EXPORT_SYMBOL vmlinux 0x78764f4e pv_irq_ops +EXPORT_SYMBOL vmlinux 0x7880c781 dm_kcopyd_prepare_callback +EXPORT_SYMBOL vmlinux 0x788960d6 seq_open_private +EXPORT_SYMBOL vmlinux 0x78989269 netpoll_send_udp +EXPORT_SYMBOL vmlinux 0x789affb1 frontswap_tmem_exclusive_gets +EXPORT_SYMBOL vmlinux 0x789bdca3 seq_printf +EXPORT_SYMBOL vmlinux 0x78bb3e24 abort_exclusive_wait +EXPORT_SYMBOL vmlinux 0x78cfaa33 xfrm6_prepare_output +EXPORT_SYMBOL vmlinux 0x78dbd3be ip6_xmit +EXPORT_SYMBOL vmlinux 0x78df6bd7 no_pci_devices +EXPORT_SYMBOL vmlinux 0x78fae328 page_put_link +EXPORT_SYMBOL vmlinux 0x7902859f blk_init_queue_node +EXPORT_SYMBOL vmlinux 0x79068fda acpi_install_method +EXPORT_SYMBOL vmlinux 0x79075379 blk_queue_make_request +EXPORT_SYMBOL vmlinux 0x792008cf dm_kcopyd_zero +EXPORT_SYMBOL vmlinux 0x79338957 tcf_action_exec +EXPORT_SYMBOL vmlinux 0x794e48fa mmc_set_blockcount +EXPORT_SYMBOL vmlinux 0x7966d735 module_put +EXPORT_SYMBOL vmlinux 0x796fc5ce scsi_get_sense_info_fld +EXPORT_SYMBOL vmlinux 0x7975ac11 register_framebuffer +EXPORT_SYMBOL vmlinux 0x7984eefc key_update +EXPORT_SYMBOL vmlinux 0x79945d9f proc_dointvec_ms_jiffies +EXPORT_SYMBOL vmlinux 0x799a3847 find_inode_number +EXPORT_SYMBOL vmlinux 0x79a38e61 ___ratelimit +EXPORT_SYMBOL vmlinux 0x79aa04a2 get_random_bytes +EXPORT_SYMBOL vmlinux 0x79ad3904 phy_driver_unregister +EXPORT_SYMBOL vmlinux 0x79ca0627 sock_kmalloc +EXPORT_SYMBOL vmlinux 0x7a188791 prandom_bytes +EXPORT_SYMBOL vmlinux 0x7a27c184 ewma_init +EXPORT_SYMBOL vmlinux 0x7a321e0a generic_listxattr +EXPORT_SYMBOL vmlinux 0x7a42704e sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x7a4497db kzfree +EXPORT_SYMBOL vmlinux 0x7a497ead tcp_v4_destroy_sock +EXPORT_SYMBOL vmlinux 0x7a4f9312 tcf_generic_walker +EXPORT_SYMBOL vmlinux 0x7a6e76fc inetdev_by_index +EXPORT_SYMBOL vmlinux 0x7a8d2e46 sync_inode +EXPORT_SYMBOL vmlinux 0x7a9c81b4 dev_printk_emit +EXPORT_SYMBOL vmlinux 0x7ab88a45 system_freezing_cnt +EXPORT_SYMBOL vmlinux 0x7ad41bf9 posix_acl_valid +EXPORT_SYMBOL vmlinux 0x7adebccb wait_for_key_construction +EXPORT_SYMBOL vmlinux 0x7aec9089 clear_user +EXPORT_SYMBOL vmlinux 0x7b03848a verify_mem_not_deleted +EXPORT_SYMBOL vmlinux 0x7b09ba18 journal_extend +EXPORT_SYMBOL vmlinux 0x7b0c84c4 acpi_remove_table_handler +EXPORT_SYMBOL vmlinux 0x7b2aef6c __krealloc +EXPORT_SYMBOL vmlinux 0x7b52a859 wrmsr_safe_on_cpu +EXPORT_SYMBOL vmlinux 0x7b533b40 load_nls_default +EXPORT_SYMBOL vmlinux 0x7b56bd05 acpi_lid_notifier_register +EXPORT_SYMBOL vmlinux 0x7b5ac604 vfs_readv +EXPORT_SYMBOL vmlinux 0x7b65146e unregister_cdrom +EXPORT_SYMBOL vmlinux 0x7b67d2da mmc_erase +EXPORT_SYMBOL vmlinux 0x7b9a6116 intel_agp_enabled +EXPORT_SYMBOL vmlinux 0x7ba4ea9a kmem_cache_alloc_node +EXPORT_SYMBOL vmlinux 0x7baa0f9f tcp_proc_unregister +EXPORT_SYMBOL vmlinux 0x7bc65e74 take_over_console +EXPORT_SYMBOL vmlinux 0x7bc79026 cdev_alloc +EXPORT_SYMBOL vmlinux 0x7bcc34f6 mmc_gpio_request_cd +EXPORT_SYMBOL vmlinux 0x7beab23d blk_register_region +EXPORT_SYMBOL vmlinux 0x7c1372e8 panic +EXPORT_SYMBOL vmlinux 0x7c142f98 sg_alloc_table_from_pages +EXPORT_SYMBOL vmlinux 0x7c26f848 pneigh_lookup +EXPORT_SYMBOL vmlinux 0x7c2d098f krealloc +EXPORT_SYMBOL vmlinux 0x7c34b8e3 simple_transaction_release +EXPORT_SYMBOL vmlinux 0x7c3d07a8 blk_init_allocated_queue +EXPORT_SYMBOL vmlinux 0x7c46233a cpufreq_quick_get +EXPORT_SYMBOL vmlinux 0x7c61340c __release_region +EXPORT_SYMBOL vmlinux 0x7c74dd45 security_inode_permission +EXPORT_SYMBOL vmlinux 0x7c904ded unregister_module_notifier +EXPORT_SYMBOL vmlinux 0x7c98845d twl_i2c_read +EXPORT_SYMBOL vmlinux 0x7ca1aef4 pci_dev_put +EXPORT_SYMBOL vmlinux 0x7ca46555 tcp_sockets_allocated +EXPORT_SYMBOL vmlinux 0x7cb1ae69 cpu_down +EXPORT_SYMBOL vmlinux 0x7cbf7081 gen_pool_destroy +EXPORT_SYMBOL vmlinux 0x7cd1b8d7 tty_flip_buffer_push +EXPORT_SYMBOL vmlinux 0x7cdb8d74 fb_validate_mode +EXPORT_SYMBOL vmlinux 0x7ce64944 mmc_set_blocklen +EXPORT_SYMBOL vmlinux 0x7cf3a16b put_cmsg +EXPORT_SYMBOL vmlinux 0x7d01aa17 security_path_truncate +EXPORT_SYMBOL vmlinux 0x7d0db45c jiffies_to_clock_t +EXPORT_SYMBOL vmlinux 0x7d11c268 jiffies +EXPORT_SYMBOL vmlinux 0x7d5753af mmc_can_secure_erase_trim +EXPORT_SYMBOL vmlinux 0x7d7a22ed i2c_transfer +EXPORT_SYMBOL vmlinux 0x7d94f746 acpi_os_write_port +EXPORT_SYMBOL vmlinux 0x7d97cd2c input_flush_device +EXPORT_SYMBOL vmlinux 0x7da9d7b3 sock_queue_err_skb +EXPORT_SYMBOL vmlinux 0x7dbc2e57 mmiotrace_printk +EXPORT_SYMBOL vmlinux 0x7dc26c9e tty_driver_flush_buffer +EXPORT_SYMBOL vmlinux 0x7dd554fc unregister_kmmio_probe +EXPORT_SYMBOL vmlinux 0x7dd76eca dev_queue_xmit +EXPORT_SYMBOL vmlinux 0x7de423a1 scsi_get_host_dev +EXPORT_SYMBOL vmlinux 0x7de9d912 blk_queue_max_segments +EXPORT_SYMBOL vmlinux 0x7deff673 dm_consume_args +EXPORT_SYMBOL vmlinux 0x7df466ef kblockd_schedule_work +EXPORT_SYMBOL vmlinux 0x7e0aa9c9 put_page +EXPORT_SYMBOL vmlinux 0x7e11e053 __wake_up_bit +EXPORT_SYMBOL vmlinux 0x7e1e607f lookup_bdev +EXPORT_SYMBOL vmlinux 0x7e2f6543 generic_setxattr +EXPORT_SYMBOL vmlinux 0x7e38ba86 __brelse +EXPORT_SYMBOL vmlinux 0x7e394c4e sysctl_local_reserved_ports +EXPORT_SYMBOL vmlinux 0x7e87b3a1 mmc_interrupt_hpi +EXPORT_SYMBOL vmlinux 0x7e91f9d6 jbd2_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x7ec8f9a7 x86_hyper_vmware +EXPORT_SYMBOL vmlinux 0x7ecc13f8 blk_put_request +EXPORT_SYMBOL vmlinux 0x7ecde965 mb_cache_shrink +EXPORT_SYMBOL vmlinux 0x7ed914c9 acpi_decode_pld_buffer +EXPORT_SYMBOL vmlinux 0x7f0ea999 generic_writepages +EXPORT_SYMBOL vmlinux 0x7f16ebdf vm_insert_mixed +EXPORT_SYMBOL vmlinux 0x7f18b194 kacpi_hotplug_wq +EXPORT_SYMBOL vmlinux 0x7f24de73 jiffies_to_usecs +EXPORT_SYMBOL vmlinux 0x7f5c0492 thermal_cdev_update +EXPORT_SYMBOL vmlinux 0x7f658e80 _raw_write_lock +EXPORT_SYMBOL vmlinux 0x7f7aefaf mmc_calc_max_discard +EXPORT_SYMBOL vmlinux 0x7fa40c3f pci_wake_from_d3 +EXPORT_SYMBOL vmlinux 0x7fad537a tty_unlock_pair +EXPORT_SYMBOL vmlinux 0x7fb31200 fddi_type_trans +EXPORT_SYMBOL vmlinux 0x7fb87448 netdev_boot_setup_check +EXPORT_SYMBOL vmlinux 0x7fdd75fd blk_queue_physical_block_size +EXPORT_SYMBOL vmlinux 0x7fe32873 rb_replace_node +EXPORT_SYMBOL vmlinux 0x7fe38f48 sg_copy_to_buffer +EXPORT_SYMBOL vmlinux 0x802d0e93 crc32_le +EXPORT_SYMBOL vmlinux 0x80340e41 generic_splice_sendpage +EXPORT_SYMBOL vmlinux 0x803a24f8 elv_rb_del +EXPORT_SYMBOL vmlinux 0x8044026c scsi_cmd_blk_ioctl +EXPORT_SYMBOL vmlinux 0x806370ae blk_queue_invalidate_tags +EXPORT_SYMBOL vmlinux 0x807bb0d6 i2c_smbus_read_byte_data +EXPORT_SYMBOL vmlinux 0x808caf24 get_tz_trend +EXPORT_SYMBOL vmlinux 0x80b452f4 inet_recvmsg +EXPORT_SYMBOL vmlinux 0x80b81282 grab_cache_page_nowait +EXPORT_SYMBOL vmlinux 0x80c478a6 scsi_free_command +EXPORT_SYMBOL vmlinux 0x80ca5026 _bin2bcd +EXPORT_SYMBOL vmlinux 0x80e07abc seq_bitmap +EXPORT_SYMBOL vmlinux 0x80e8cd77 journal_get_write_access +EXPORT_SYMBOL vmlinux 0x810741de input_event +EXPORT_SYMBOL vmlinux 0x8124cdde __ht_create_irq +EXPORT_SYMBOL vmlinux 0x812730c4 xfrm_state_insert +EXPORT_SYMBOL vmlinux 0x81415967 generic_file_readonly_mmap +EXPORT_SYMBOL vmlinux 0x81472677 acpi_get_table +EXPORT_SYMBOL vmlinux 0x814bbc84 ioc_lookup_icq +EXPORT_SYMBOL vmlinux 0x814e7730 nf_ct_destroy +EXPORT_SYMBOL vmlinux 0x81533963 sysfs_format_mac +EXPORT_SYMBOL vmlinux 0x815b5dd4 match_octal +EXPORT_SYMBOL vmlinux 0x815c0f26 bio_integrity_add_page +EXPORT_SYMBOL vmlinux 0x815f2897 empty_zero_page +EXPORT_SYMBOL vmlinux 0x81619fba blk_queue_unprep_rq +EXPORT_SYMBOL vmlinux 0x818200c2 __pagevec_lru_add +EXPORT_SYMBOL vmlinux 0x81a2a3fe ilookup +EXPORT_SYMBOL vmlinux 0x81b7967b genl_unregister_ops +EXPORT_SYMBOL vmlinux 0x81d10f5f trace_seq_putc +EXPORT_SYMBOL vmlinux 0x81db6ebb xz_dec_reset +EXPORT_SYMBOL vmlinux 0x81dd98ef get_phy_device +EXPORT_SYMBOL vmlinux 0x81e54f98 thermal_zone_device_unregister +EXPORT_SYMBOL vmlinux 0x81e6b37f dmi_get_system_info +EXPORT_SYMBOL vmlinux 0x81ec60c1 __dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0x81f2ad5e inode_sub_rsv_space +EXPORT_SYMBOL vmlinux 0x82072614 tasklet_kill +EXPORT_SYMBOL vmlinux 0x82078c34 unregister_binfmt +EXPORT_SYMBOL vmlinux 0x8212721d xenbus_dev_request_and_reply +EXPORT_SYMBOL vmlinux 0x8251bcc3 bitmap_release_region +EXPORT_SYMBOL vmlinux 0x8253ddf3 blk_integrity_merge_bio +EXPORT_SYMBOL vmlinux 0x8260686f bitmap_find_next_zero_area +EXPORT_SYMBOL vmlinux 0x82770007 pnp_possible_config +EXPORT_SYMBOL vmlinux 0x829d4e08 rwsem_down_write_failed +EXPORT_SYMBOL vmlinux 0x82acfb70 blk_iopoll_sched +EXPORT_SYMBOL vmlinux 0x82bbf305 dcb_ieee_getapp_mask +EXPORT_SYMBOL vmlinux 0x82bd3233 d_invalidate +EXPORT_SYMBOL vmlinux 0x830e547b ioremap_prot +EXPORT_SYMBOL vmlinux 0x833c03aa acpi_enable_all_runtime_gpes +EXPORT_SYMBOL vmlinux 0x836571fc xfrm_init_replay +EXPORT_SYMBOL vmlinux 0x836f5e40 fb_show_logo +EXPORT_SYMBOL vmlinux 0x8384f077 ps2_end_command +EXPORT_SYMBOL vmlinux 0x838f70b0 twl_i2c_write_u8 +EXPORT_SYMBOL vmlinux 0x83924c8f dquot_scan_active +EXPORT_SYMBOL vmlinux 0x839f5e38 ppp_unit_number +EXPORT_SYMBOL vmlinux 0x83a476ce bitmap_scnlistprintf +EXPORT_SYMBOL vmlinux 0x83a48a3a scsi_report_bus_reset +EXPORT_SYMBOL vmlinux 0x83a495bd rawv6_mh_filter_unregister +EXPORT_SYMBOL vmlinux 0x83c8a355 param_set_int +EXPORT_SYMBOL vmlinux 0x83d15bb1 file_sb_list_del +EXPORT_SYMBOL vmlinux 0x83f3cdff gen_pool_virt_to_phys +EXPORT_SYMBOL vmlinux 0x83f7b822 cdev_init +EXPORT_SYMBOL vmlinux 0x84060081 xen_poll_irq_timeout +EXPORT_SYMBOL vmlinux 0x84090bbd sk_receive_skb +EXPORT_SYMBOL vmlinux 0x8409c39d writeback_inodes_sb_nr +EXPORT_SYMBOL vmlinux 0x840fe3dd ps2_sendbyte +EXPORT_SYMBOL vmlinux 0x84155d9a dev_uc_flush +EXPORT_SYMBOL vmlinux 0x8417f512 acpi_update_all_gpes +EXPORT_SYMBOL vmlinux 0x843a0bc6 mmc_can_discard +EXPORT_SYMBOL vmlinux 0x84415fa0 journal_trans_will_send_data_barrier +EXPORT_SYMBOL vmlinux 0x844e99be nobh_write_end +EXPORT_SYMBOL vmlinux 0x846bcc01 dm_table_get +EXPORT_SYMBOL vmlinux 0x848237df __register_chrdev +EXPORT_SYMBOL vmlinux 0x84ac6a98 locks_remove_posix +EXPORT_SYMBOL vmlinux 0x84bef85f sock_wake_async +EXPORT_SYMBOL vmlinux 0x84c4cfa2 ata_print_version +EXPORT_SYMBOL vmlinux 0x84d1f62e blk_cleanup_queue +EXPORT_SYMBOL vmlinux 0x84f51092 dma_async_device_register +EXPORT_SYMBOL vmlinux 0x850c68ff bioset_integrity_create +EXPORT_SYMBOL vmlinux 0x85670f1d rtnl_is_locked +EXPORT_SYMBOL vmlinux 0x8569940d task_nice +EXPORT_SYMBOL vmlinux 0x85724113 create_empty_buffers +EXPORT_SYMBOL vmlinux 0x8597d453 pipe_unlock +EXPORT_SYMBOL vmlinux 0x85a49396 i2c_smbus_write_byte +EXPORT_SYMBOL vmlinux 0x85b5e625 rfkill_set_states +EXPORT_SYMBOL vmlinux 0x85dabcd0 skb_flow_dissect +EXPORT_SYMBOL vmlinux 0x85df9b6c strsep +EXPORT_SYMBOL vmlinux 0x8605036c agp_unbind_memory +EXPORT_SYMBOL vmlinux 0x860b7b37 input_get_keycode +EXPORT_SYMBOL vmlinux 0x8615846b sock_no_setsockopt +EXPORT_SYMBOL vmlinux 0x861ade7f mb_cache_entry_release +EXPORT_SYMBOL vmlinux 0x865029ac __hw_addr_sync +EXPORT_SYMBOL vmlinux 0x8664f62e cpufreq_update_policy +EXPORT_SYMBOL vmlinux 0x86675e4c dev_loopback_xmit +EXPORT_SYMBOL vmlinux 0x8667d5e5 inode_owner_or_capable +EXPORT_SYMBOL vmlinux 0x868acba5 get_options +EXPORT_SYMBOL vmlinux 0x8696280a sk_alloc +EXPORT_SYMBOL vmlinux 0x86d5255f _raw_write_lock_irqsave +EXPORT_SYMBOL vmlinux 0x86d940b9 da903x_query_status +EXPORT_SYMBOL vmlinux 0x86e5c81d dquot_get_dqblk +EXPORT_SYMBOL vmlinux 0x86ec0cc1 check_disk_size_change +EXPORT_SYMBOL vmlinux 0x86f3f3d7 journal_init_inode +EXPORT_SYMBOL vmlinux 0x86fb9b05 bitmap_parse_user +EXPORT_SYMBOL vmlinux 0x870bf928 radix_tree_lookup +EXPORT_SYMBOL vmlinux 0x871c0a7e fiemap_check_flags +EXPORT_SYMBOL vmlinux 0x873043b0 led_blink_set_oneshot +EXPORT_SYMBOL vmlinux 0x874fb604 jbd2_journal_flush +EXPORT_SYMBOL vmlinux 0x87568e3d tty_register_device +EXPORT_SYMBOL vmlinux 0x876dafc3 ec_write +EXPORT_SYMBOL vmlinux 0x877f02aa i2c_smbus_write_byte_data +EXPORT_SYMBOL vmlinux 0x8787ebf9 d_add_ci +EXPORT_SYMBOL vmlinux 0x878ab3ce sysctl_tcp_adv_win_scale +EXPORT_SYMBOL vmlinux 0x87904dc0 registered_fb +EXPORT_SYMBOL vmlinux 0x87a4fbcd twl6040_clear_bits +EXPORT_SYMBOL vmlinux 0x87aaddf8 wrmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0x87c4041c generic_file_direct_write +EXPORT_SYMBOL vmlinux 0x87c58a96 smp_call_function_many +EXPORT_SYMBOL vmlinux 0x87dc469a mempool_create_node +EXPORT_SYMBOL vmlinux 0x87f15059 md_wait_for_blocked_rdev +EXPORT_SYMBOL vmlinux 0x87f59097 bdget_disk +EXPORT_SYMBOL vmlinux 0x87f5e7c9 wake_up_process +EXPORT_SYMBOL vmlinux 0x881039d0 zlib_inflate +EXPORT_SYMBOL vmlinux 0x8812b8c7 set_create_files_as +EXPORT_SYMBOL vmlinux 0x882dd30d kthread_stop +EXPORT_SYMBOL vmlinux 0x8834396c mod_timer +EXPORT_SYMBOL vmlinux 0x8837a3ca vm_map_ram +EXPORT_SYMBOL vmlinux 0x883f58f8 mpage_readpages +EXPORT_SYMBOL vmlinux 0x884d53c6 gnet_stats_copy_queue +EXPORT_SYMBOL vmlinux 0x88564aae tcf_unregister_action +EXPORT_SYMBOL vmlinux 0x885c2654 bitmap_close_sync +EXPORT_SYMBOL vmlinux 0x8863ecf4 input_mt_assign_slots +EXPORT_SYMBOL vmlinux 0x887197b3 tcp_v4_conn_request +EXPORT_SYMBOL vmlinux 0x887e9bf9 blk_queue_io_opt +EXPORT_SYMBOL vmlinux 0x889d15fc cancel_delayed_work +EXPORT_SYMBOL vmlinux 0x88af40bd write_cache_pages +EXPORT_SYMBOL vmlinux 0x88b04e39 __register_nmi_handler +EXPORT_SYMBOL vmlinux 0x88f00d18 lg_global_unlock +EXPORT_SYMBOL vmlinux 0x88f3ba5c tty_unlock +EXPORT_SYMBOL vmlinux 0x88fbecca __elv_add_request +EXPORT_SYMBOL vmlinux 0x891a4826 inet6_register_protosw +EXPORT_SYMBOL vmlinux 0x892b26a0 set_memory_nx +EXPORT_SYMBOL vmlinux 0x895f8d1c dcb_setapp +EXPORT_SYMBOL vmlinux 0x897473df mktime +EXPORT_SYMBOL vmlinux 0x89771623 xfrm_dst_ifdown +EXPORT_SYMBOL vmlinux 0x897869d9 dm_io +EXPORT_SYMBOL vmlinux 0x898a4e5c blk_rq_count_integrity_sg +EXPORT_SYMBOL vmlinux 0x898cec38 pci_request_region_exclusive +EXPORT_SYMBOL vmlinux 0x89afe34e __kfifo_dma_in_prepare +EXPORT_SYMBOL vmlinux 0x89b8416e vga_switcheroo_register_client +EXPORT_SYMBOL vmlinux 0x89c0ef1a tcp_proc_register +EXPORT_SYMBOL vmlinux 0x89d5538d fb_pad_aligned_buffer +EXPORT_SYMBOL vmlinux 0x89d66811 build_ehash_secret +EXPORT_SYMBOL vmlinux 0x89e0986c posix_acl_from_xattr +EXPORT_SYMBOL vmlinux 0x89fcaa90 elv_dispatch_sort +EXPORT_SYMBOL vmlinux 0x89ff2fff jbd2_journal_release_jbd_inode +EXPORT_SYMBOL vmlinux 0x8a1ab4ee timeval_to_jiffies +EXPORT_SYMBOL vmlinux 0x8a2d7a00 mmc_can_sanitize +EXPORT_SYMBOL vmlinux 0x8a40aec2 xfrm_policy_walk +EXPORT_SYMBOL vmlinux 0x8a490c90 rfkill_set_sw_state +EXPORT_SYMBOL vmlinux 0x8a6af65c kstrtoul_from_user +EXPORT_SYMBOL vmlinux 0x8a7d1c31 high_memory +EXPORT_SYMBOL vmlinux 0x8a90f2ed scsi_sd_probe_domain +EXPORT_SYMBOL vmlinux 0x8a99a016 mempool_free_slab +EXPORT_SYMBOL vmlinux 0x8aa89f50 alloc_file +EXPORT_SYMBOL vmlinux 0x8ab2fd93 abort_creds +EXPORT_SYMBOL vmlinux 0x8ace8ca3 groups_alloc +EXPORT_SYMBOL vmlinux 0x8aed3cfc __cleancache_put_page +EXPORT_SYMBOL vmlinux 0x8b09c996 pci_add_new_bus +EXPORT_SYMBOL vmlinux 0x8b121ad6 bprm_change_interp +EXPORT_SYMBOL vmlinux 0x8b1a7a66 pcie_aspm_enabled +EXPORT_SYMBOL vmlinux 0x8b1cd972 security_path_mknod +EXPORT_SYMBOL vmlinux 0x8b213eaa phy_drivers_unregister +EXPORT_SYMBOL vmlinux 0x8b226a81 acpi_video_dmi_demote_vendor +EXPORT_SYMBOL vmlinux 0x8b2819fe ndo_dflt_fdb_dump +EXPORT_SYMBOL vmlinux 0x8b285fa7 phy_mii_ioctl +EXPORT_SYMBOL vmlinux 0x8b35e873 sg_last +EXPORT_SYMBOL vmlinux 0x8b57da02 max8998_update_reg +EXPORT_SYMBOL vmlinux 0x8b5f4a2e IO_APIC_get_PCI_irq_vector +EXPORT_SYMBOL vmlinux 0x8b618d08 overflowuid +EXPORT_SYMBOL vmlinux 0x8b6b48c0 input_reset_device +EXPORT_SYMBOL vmlinux 0x8b989cf9 acpi_bus_can_wakeup +EXPORT_SYMBOL vmlinux 0x8ba95f1e vlan_uses_dev +EXPORT_SYMBOL vmlinux 0x8be99072 ipv6_skip_exthdr +EXPORT_SYMBOL vmlinux 0x8bf50f14 inode_permission +EXPORT_SYMBOL vmlinux 0x8bfb696e phy_init_eee +EXPORT_SYMBOL vmlinux 0x8bfe8c57 param_set_uint +EXPORT_SYMBOL vmlinux 0x8c15b513 dev_getbyhwaddr_rcu +EXPORT_SYMBOL vmlinux 0x8c183cbe iowrite16 +EXPORT_SYMBOL vmlinux 0x8c1a561e mnt_unpin +EXPORT_SYMBOL vmlinux 0x8c493ec3 scsi_get_device_flags_keyed +EXPORT_SYMBOL vmlinux 0x8c637d43 irq_cpu_rmap_add +EXPORT_SYMBOL vmlinux 0x8c73776c d_drop +EXPORT_SYMBOL vmlinux 0x8c7eedea agp_generic_enable +EXPORT_SYMBOL vmlinux 0x8ca50dba sdev_enable_disk_events +EXPORT_SYMBOL vmlinux 0x8cbca550 eth_type_trans +EXPORT_SYMBOL vmlinux 0x8cc79cab iowrite16_rep +EXPORT_SYMBOL vmlinux 0x8cd4a880 neigh_seq_stop +EXPORT_SYMBOL vmlinux 0x8cda8029 xen_clear_irq_pending +EXPORT_SYMBOL vmlinux 0x8cfb2cee blk_complete_request +EXPORT_SYMBOL vmlinux 0x8d3c0a7a input_allocate_device +EXPORT_SYMBOL vmlinux 0x8d551bef sysctl_tcp_rmem +EXPORT_SYMBOL vmlinux 0x8d6906d4 unregister_memory_notifier +EXPORT_SYMBOL vmlinux 0x8d8a6940 blk_put_queue +EXPORT_SYMBOL vmlinux 0x8d8d96c6 acpi_get_sleep_type_data +EXPORT_SYMBOL vmlinux 0x8d9dd8e0 pci_bus_read_dev_vendor_id +EXPORT_SYMBOL vmlinux 0x8da1a3cb acpi_remove_interface +EXPORT_SYMBOL vmlinux 0x8daf8c42 dql_init +EXPORT_SYMBOL vmlinux 0x8db78122 sk_stop_timer +EXPORT_SYMBOL vmlinux 0x8dbf6b7e pci_lost_interrupt +EXPORT_SYMBOL vmlinux 0x8ddfa83b pneigh_enqueue +EXPORT_SYMBOL vmlinux 0x8de02154 mmc_fixup_device +EXPORT_SYMBOL vmlinux 0x8df675dd simple_release_fs +EXPORT_SYMBOL vmlinux 0x8df92f66 memchr_inv +EXPORT_SYMBOL vmlinux 0x8e002cda acpi_remove_gpe_block +EXPORT_SYMBOL vmlinux 0x8e0e1a46 jbd2_journal_force_commit +EXPORT_SYMBOL vmlinux 0x8e28cd42 in_egroup_p +EXPORT_SYMBOL vmlinux 0x8e2e0f3b skb_clone +EXPORT_SYMBOL vmlinux 0x8e9c49c7 agp_alloc_bridge +EXPORT_SYMBOL vmlinux 0x8ea694dd intel_gmch_probe +EXPORT_SYMBOL vmlinux 0x8ead3569 devfreq_interval_update +EXPORT_SYMBOL vmlinux 0x8eaf2a5f vga_switcheroo_unregister_handler +EXPORT_SYMBOL vmlinux 0x8ed828fc register_quota_format +EXPORT_SYMBOL vmlinux 0x8efc8f49 bdi_destroy +EXPORT_SYMBOL vmlinux 0x8f095968 freeze_bdev +EXPORT_SYMBOL vmlinux 0x8f242207 input_inject_event +EXPORT_SYMBOL vmlinux 0x8f2703b7 wbinvd_on_all_cpus +EXPORT_SYMBOL vmlinux 0x8f52a40d kobject_set_name +EXPORT_SYMBOL vmlinux 0x8f6d053c netdev_notice +EXPORT_SYMBOL vmlinux 0x8f7014a1 param_set_ulong +EXPORT_SYMBOL vmlinux 0x8f8dad84 devm_iounmap +EXPORT_SYMBOL vmlinux 0x8f9268c6 pci_disable_ido +EXPORT_SYMBOL vmlinux 0x8f9c199c __get_user_2 +EXPORT_SYMBOL vmlinux 0x8fe48b08 register_sysctl_paths +EXPORT_SYMBOL vmlinux 0x8ff70df8 mmc_cache_ctrl +EXPORT_SYMBOL vmlinux 0x90064b62 lease_get_mtime +EXPORT_SYMBOL vmlinux 0x904409c6 acpi_set_firmware_waking_vector +EXPORT_SYMBOL vmlinux 0x905a7937 __find_get_block +EXPORT_SYMBOL vmlinux 0x908c5428 drop_super +EXPORT_SYMBOL vmlinux 0x9094dd9c tty_driver_kref_put +EXPORT_SYMBOL vmlinux 0x90a1601f dmi_check_system +EXPORT_SYMBOL vmlinux 0x90ada006 iov_iter_copy_from_user +EXPORT_SYMBOL vmlinux 0x90c60443 generic_cont_expand_simple +EXPORT_SYMBOL vmlinux 0x90d2cb25 neigh_for_each +EXPORT_SYMBOL vmlinux 0x90d60051 scsi_setup_blk_pc_cmnd +EXPORT_SYMBOL vmlinux 0x90e5d0b8 print_hex_dump_bytes +EXPORT_SYMBOL vmlinux 0x9100938d blkdev_get_by_path +EXPORT_SYMBOL vmlinux 0x912083fd xfrm_state_update +EXPORT_SYMBOL vmlinux 0x9144a8e2 ec_burst_disable +EXPORT_SYMBOL vmlinux 0x91463b1d kstrtos16 +EXPORT_SYMBOL vmlinux 0x91582877 netif_stacked_transfer_operstate +EXPORT_SYMBOL vmlinux 0x91607d95 set_memory_wb +EXPORT_SYMBOL vmlinux 0x916311ae agp_generic_remove_memory +EXPORT_SYMBOL vmlinux 0x9166fada strncpy +EXPORT_SYMBOL vmlinux 0x91715312 sprintf +EXPORT_SYMBOL vmlinux 0x9187ec03 unregister_qdisc +EXPORT_SYMBOL vmlinux 0x91954325 get_gendisk +EXPORT_SYMBOL vmlinux 0x91a1047f mutex_trylock +EXPORT_SYMBOL vmlinux 0x91a1239b netif_set_real_num_rx_queues +EXPORT_SYMBOL vmlinux 0x91a2fdb6 km_state_expired +EXPORT_SYMBOL vmlinux 0x91a3cdf4 down_timeout +EXPORT_SYMBOL vmlinux 0x91a6bdf4 d_validate +EXPORT_SYMBOL vmlinux 0x91ac822f vscnprintf +EXPORT_SYMBOL vmlinux 0x91afb64f __tty_alloc_driver +EXPORT_SYMBOL vmlinux 0x91d304a6 compat_ipv6_getsockopt +EXPORT_SYMBOL vmlinux 0x9201720b pci_enable_ido +EXPORT_SYMBOL vmlinux 0x921201b7 xfrm_state_delete +EXPORT_SYMBOL vmlinux 0x92123a7d pci_request_regions +EXPORT_SYMBOL vmlinux 0x92130575 sock_no_getname +EXPORT_SYMBOL vmlinux 0x9215083e tty_write_room +EXPORT_SYMBOL vmlinux 0x9215824b nla_put_nohdr +EXPORT_SYMBOL vmlinux 0x922c795a dcb_ieee_setapp +EXPORT_SYMBOL vmlinux 0x923099db __mem_cgroup_count_vm_event +EXPORT_SYMBOL vmlinux 0x923705a6 dquot_transfer +EXPORT_SYMBOL vmlinux 0x923a39d5 d_path +EXPORT_SYMBOL vmlinux 0x923b1276 dmaengine_get +EXPORT_SYMBOL vmlinux 0x9247758b ip_mc_join_group +EXPORT_SYMBOL vmlinux 0x926228f8 bioset_create +EXPORT_SYMBOL vmlinux 0x92702b69 pci_select_bars +EXPORT_SYMBOL vmlinux 0x9290ef23 netdev_class_create_file +EXPORT_SYMBOL vmlinux 0x9291cd3b memdup_user +EXPORT_SYMBOL vmlinux 0x92a556d7 abx500_get_chip_id +EXPORT_SYMBOL vmlinux 0x92a9c60c time_to_tm +EXPORT_SYMBOL vmlinux 0x92bb2bf4 module_layout +EXPORT_SYMBOL vmlinux 0x92d8bfa7 blk_integrity_compare +EXPORT_SYMBOL vmlinux 0x9305f8e6 cpufreq_get +EXPORT_SYMBOL vmlinux 0x930aa723 __remove_inode_hash +EXPORT_SYMBOL vmlinux 0x9327f5ce _raw_spin_lock_irqsave +EXPORT_SYMBOL vmlinux 0x9329a9ff mapping_tagged +EXPORT_SYMBOL vmlinux 0x9340732a scsi_print_command +EXPORT_SYMBOL vmlinux 0x93448c57 screen_info +EXPORT_SYMBOL vmlinux 0x93483dfd mutex_lock +EXPORT_SYMBOL vmlinux 0x935544b1 journal_flush +EXPORT_SYMBOL vmlinux 0x9360610b udp_proc_unregister +EXPORT_SYMBOL vmlinux 0x93a3c029 done_path_create +EXPORT_SYMBOL vmlinux 0x93a6e0b2 io_schedule +EXPORT_SYMBOL vmlinux 0x93ac7b0e send_sig +EXPORT_SYMBOL vmlinux 0x93b18aaa bh_uptodate_or_lock +EXPORT_SYMBOL vmlinux 0x93c651be acpi_info +EXPORT_SYMBOL vmlinux 0x93e4b1f8 ps2_cmd_aborted +EXPORT_SYMBOL vmlinux 0x93f3e52b acpi_extract_package +EXPORT_SYMBOL vmlinux 0x93fca811 __get_free_pages +EXPORT_SYMBOL vmlinux 0x93fd51d4 unmap_underlying_metadata +EXPORT_SYMBOL vmlinux 0x94289255 inet_dgram_connect +EXPORT_SYMBOL vmlinux 0x9460de0f pfifo_fast_ops +EXPORT_SYMBOL vmlinux 0x94728c13 inet_csk_delete_keepalive_timer +EXPORT_SYMBOL vmlinux 0x947f87a1 padata_unregister_cpumask_notifier +EXPORT_SYMBOL vmlinux 0x9480dc61 tty_get_baud_rate +EXPORT_SYMBOL vmlinux 0x94839a09 mmc_wait_for_cmd +EXPORT_SYMBOL vmlinux 0x9489649a __sync_dirty_buffer +EXPORT_SYMBOL vmlinux 0x94961283 vunmap +EXPORT_SYMBOL vmlinux 0x94a7287a mmc_card_can_sleep +EXPORT_SYMBOL vmlinux 0x94b17ef6 find_get_page +EXPORT_SYMBOL vmlinux 0x94bbf8d5 cdrom_mode_select +EXPORT_SYMBOL vmlinux 0x94e687de elv_rb_former_request +EXPORT_SYMBOL vmlinux 0x950579a4 tcp_rcv_state_process +EXPORT_SYMBOL vmlinux 0x9518b623 register_shrinker +EXPORT_SYMBOL vmlinux 0x952b3c21 security_inode_getsecctx +EXPORT_SYMBOL vmlinux 0x95369c02 md_wakeup_thread +EXPORT_SYMBOL vmlinux 0x953b330c tcp_seq_open +EXPORT_SYMBOL vmlinux 0x9543faa3 tty_port_close_end +EXPORT_SYMBOL vmlinux 0x954488a4 syncookie_secret +EXPORT_SYMBOL vmlinux 0x9545af6d tasklet_init +EXPORT_SYMBOL vmlinux 0x954f07cb mark_buffer_async_write +EXPORT_SYMBOL vmlinux 0x95bd2e9f genl_register_family +EXPORT_SYMBOL vmlinux 0x95c28783 i2c_master_recv +EXPORT_SYMBOL vmlinux 0x95ceaac3 pcie_set_readrq +EXPORT_SYMBOL vmlinux 0x95e76bd3 dentry_unhash +EXPORT_SYMBOL vmlinux 0x95f89a33 _raw_write_lock_irq +EXPORT_SYMBOL vmlinux 0x9678891f sched_autogroup_detach +EXPORT_SYMBOL vmlinux 0x9692bf5f ip6_frag_match +EXPORT_SYMBOL vmlinux 0x9696535c jbd2_journal_blocks_per_page +EXPORT_SYMBOL vmlinux 0x969c0f35 acpi_processor_unregister_performance +EXPORT_SYMBOL vmlinux 0x96aa7173 acpi_bus_get_status +EXPORT_SYMBOL vmlinux 0x96b29254 strncasecmp +EXPORT_SYMBOL vmlinux 0x96b4dd1c register_gifconf +EXPORT_SYMBOL vmlinux 0x96cd2b04 scsi_sense_key_string +EXPORT_SYMBOL vmlinux 0x96d4b593 ip6_dst_hoplimit +EXPORT_SYMBOL vmlinux 0x96f71040 file_remove_suid +EXPORT_SYMBOL vmlinux 0x97024539 bdgrab +EXPORT_SYMBOL vmlinux 0x970460d1 security_inode_init_security +EXPORT_SYMBOL vmlinux 0x9725b589 proc_doulongvec_minmax +EXPORT_SYMBOL vmlinux 0x9727d4da mdiobus_alloc_size +EXPORT_SYMBOL vmlinux 0x9728040f poll_initwait +EXPORT_SYMBOL vmlinux 0x9754ec10 radix_tree_preload +EXPORT_SYMBOL vmlinux 0x97612da0 inode_init_once +EXPORT_SYMBOL vmlinux 0x97868aef __kfifo_alloc +EXPORT_SYMBOL vmlinux 0x97999817 rfkill_set_hw_state +EXPORT_SYMBOL vmlinux 0x97abdf89 acpi_pci_unregister_driver +EXPORT_SYMBOL vmlinux 0x97c5bd0a acpi_unload_parent_table +EXPORT_SYMBOL vmlinux 0x97dd3a55 register_netdevice +EXPORT_SYMBOL vmlinux 0x97de0ddd acpi_install_gpe_block +EXPORT_SYMBOL vmlinux 0x97e8dc88 jbd2_journal_init_inode +EXPORT_SYMBOL vmlinux 0x981238dd scsi_unregister +EXPORT_SYMBOL vmlinux 0x981549ac bio_integrity_get_tag +EXPORT_SYMBOL vmlinux 0x9820b644 warn_slowpath_fmt_taint +EXPORT_SYMBOL vmlinux 0x9829fc11 __kfifo_out_peek_r +EXPORT_SYMBOL vmlinux 0x982d9925 lock_may_write +EXPORT_SYMBOL vmlinux 0x98353d32 tcp_tso_segment +EXPORT_SYMBOL vmlinux 0x983992fc mmc_power_save_host +EXPORT_SYMBOL vmlinux 0x984eb28d tcf_exts_dump_stats +EXPORT_SYMBOL vmlinux 0x985d52b3 buffer_migrate_page +EXPORT_SYMBOL vmlinux 0x9863478e sock_create +EXPORT_SYMBOL vmlinux 0x986e522d phy_device_register +EXPORT_SYMBOL vmlinux 0x986e6135 fb_pad_unaligned_buffer +EXPORT_SYMBOL vmlinux 0x988ed85d set_memory_x +EXPORT_SYMBOL vmlinux 0x989261c5 abx500_register_ops +EXPORT_SYMBOL vmlinux 0x98a5868d block_write_full_page_endio +EXPORT_SYMBOL vmlinux 0x98a8abf6 secpath_dup +EXPORT_SYMBOL vmlinux 0x98ae2aea mdiobus_write +EXPORT_SYMBOL vmlinux 0x98bebb4f dump_seek +EXPORT_SYMBOL vmlinux 0x98fa21b0 mod_timer_pinned +EXPORT_SYMBOL vmlinux 0x99195078 vsnprintf +EXPORT_SYMBOL vmlinux 0x991abf4c fib_default_rule_add +EXPORT_SYMBOL vmlinux 0x99517682 udp_encap_enable +EXPORT_SYMBOL vmlinux 0x99591a7a ipv6_ext_hdr +EXPORT_SYMBOL vmlinux 0x99904779 do_truncate +EXPORT_SYMBOL vmlinux 0x9994c0ca ps2_is_keyboard_id +EXPORT_SYMBOL vmlinux 0x999b8cff scsi_host_put +EXPORT_SYMBOL vmlinux 0x999e8297 vfree +EXPORT_SYMBOL vmlinux 0x99bcbe3a netdev_set_bond_master +EXPORT_SYMBOL vmlinux 0x99c0270b devm_input_allocate_device +EXPORT_SYMBOL vmlinux 0x99cdc86b sysctl_tcp_reordering +EXPORT_SYMBOL vmlinux 0x99d3a43c dm_table_get_size +EXPORT_SYMBOL vmlinux 0x99d79577 freezing_slow_path +EXPORT_SYMBOL vmlinux 0x99ef9b17 rc5t583_ext_power_req_config +EXPORT_SYMBOL vmlinux 0x99f068d5 x86_cpu_to_node_map +EXPORT_SYMBOL vmlinux 0x99f22da4 mmc_alloc_host +EXPORT_SYMBOL vmlinux 0x9a1959b3 scsi_print_sense +EXPORT_SYMBOL vmlinux 0x9a1dfd65 strpbrk +EXPORT_SYMBOL vmlinux 0x9a1fc4b4 jiffies_to_timeval +EXPORT_SYMBOL vmlinux 0x9a2a2db4 pnp_disable_dev +EXPORT_SYMBOL vmlinux 0x9a2dad06 sock_create_kern +EXPORT_SYMBOL vmlinux 0x9a3cd960 may_umount_tree +EXPORT_SYMBOL vmlinux 0x9a4c4038 acpi_processor_notify_smm +EXPORT_SYMBOL vmlinux 0x9a5b2872 d_splice_alias +EXPORT_SYMBOL vmlinux 0x9a5ead47 vga_set_legacy_decoding +EXPORT_SYMBOL vmlinux 0x9a5ffc64 __tracepoint_kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x9a68c84e udp_proc_register +EXPORT_SYMBOL vmlinux 0x9a8caf43 acpi_root_dir +EXPORT_SYMBOL vmlinux 0x9ad10045 jbd2_journal_start +EXPORT_SYMBOL vmlinux 0x9adf98e8 clear_nlink +EXPORT_SYMBOL vmlinux 0x9ae98043 iw_handler_set_spy +EXPORT_SYMBOL vmlinux 0x9af89f98 memcpy_fromiovec +EXPORT_SYMBOL vmlinux 0x9afb0bde kmem_cache_shrink +EXPORT_SYMBOL vmlinux 0x9b1effba abx500_remove_ops +EXPORT_SYMBOL vmlinux 0x9b388444 get_zeroed_page +EXPORT_SYMBOL vmlinux 0x9b4cbda3 simple_setattr +EXPORT_SYMBOL vmlinux 0x9b5d25b8 net_dma_find_channel +EXPORT_SYMBOL vmlinux 0x9b75cb81 _raw_read_trylock +EXPORT_SYMBOL vmlinux 0x9b7f1f2e xfrm_alloc_spi +EXPORT_SYMBOL vmlinux 0x9b7f697c amd_iommu_enable_device_erratum +EXPORT_SYMBOL vmlinux 0x9b80d351 generic_file_aio_read +EXPORT_SYMBOL vmlinux 0x9b8c373b cpufreq_cooling_register +EXPORT_SYMBOL vmlinux 0x9b921e5e scsi_eh_finish_cmd +EXPORT_SYMBOL vmlinux 0x9b92e6e0 inet_proto_csum_replace16 +EXPORT_SYMBOL vmlinux 0x9b971650 replace_mount_options +EXPORT_SYMBOL vmlinux 0x9b9e05f9 alloc_cpu_rmap +EXPORT_SYMBOL vmlinux 0x9ba7089d argv_split +EXPORT_SYMBOL vmlinux 0x9bad8ec0 md_unregister_thread +EXPORT_SYMBOL vmlinux 0x9be7bde4 security_tun_dev_attach +EXPORT_SYMBOL vmlinux 0x9bf8f600 km_policy_expired +EXPORT_SYMBOL vmlinux 0x9c0dc216 proc_net_netfilter +EXPORT_SYMBOL vmlinux 0x9c3d98d1 sk_reset_txq +EXPORT_SYMBOL vmlinux 0x9c46d06b gen_new_estimator +EXPORT_SYMBOL vmlinux 0x9c491f60 sg_alloc_table +EXPORT_SYMBOL vmlinux 0x9c68f6a4 dev_add_pack +EXPORT_SYMBOL vmlinux 0x9ca4f55a udp_lib_rehash +EXPORT_SYMBOL vmlinux 0x9cab34a6 rfkill_set_led_trigger_name +EXPORT_SYMBOL vmlinux 0x9cb2cc6f ida_remove +EXPORT_SYMBOL vmlinux 0x9cb96e92 qdisc_put_rtab +EXPORT_SYMBOL vmlinux 0x9ce9c66c scsi_track_queue_full +EXPORT_SYMBOL vmlinux 0x9cf6c02c tty_port_hangup +EXPORT_SYMBOL vmlinux 0x9cfa3ddf f_setown +EXPORT_SYMBOL vmlinux 0x9cfd56c5 scsi_print_status +EXPORT_SYMBOL vmlinux 0x9d1a15a1 dev_addr_add_multiple +EXPORT_SYMBOL vmlinux 0x9d1a5e3a __memcpy +EXPORT_SYMBOL vmlinux 0x9d1b821f neigh_sysctl_unregister +EXPORT_SYMBOL vmlinux 0x9d33ef5e acpi_enable +EXPORT_SYMBOL vmlinux 0x9d39d397 acpi_get_hp_hw_control_from_firmware +EXPORT_SYMBOL vmlinux 0x9d3aa376 blk_iopoll_init +EXPORT_SYMBOL vmlinux 0x9d6dbebd kobject_init +EXPORT_SYMBOL vmlinux 0x9d7a7845 dqput +EXPORT_SYMBOL vmlinux 0x9d899dd8 lro_flush_pkt +EXPORT_SYMBOL vmlinux 0x9d902bc8 rtnl_link_get_net +EXPORT_SYMBOL vmlinux 0x9da80c8f agp_alloc_page_array +EXPORT_SYMBOL vmlinux 0x9dc55c0c inet_del_protocol +EXPORT_SYMBOL vmlinux 0x9ded188e kobject_del +EXPORT_SYMBOL vmlinux 0x9e0c711d vzalloc_node +EXPORT_SYMBOL vmlinux 0x9e1efb16 xfrm_register_mode +EXPORT_SYMBOL vmlinux 0x9e20c335 uart_suspend_port +EXPORT_SYMBOL vmlinux 0x9e246474 acpi_notifier_call_chain +EXPORT_SYMBOL vmlinux 0x9e344d37 vga_switcheroo_register_handler +EXPORT_SYMBOL vmlinux 0x9e363b6b acpi_disable_gpe +EXPORT_SYMBOL vmlinux 0x9e38886d __ethtool_get_settings +EXPORT_SYMBOL vmlinux 0x9e41f28f posix_lock_file +EXPORT_SYMBOL vmlinux 0x9e430b7a devm_gpio_request_one +EXPORT_SYMBOL vmlinux 0x9e4faeef dm_io_client_destroy +EXPORT_SYMBOL vmlinux 0x9e5982b2 d_genocide +EXPORT_SYMBOL vmlinux 0x9e607910 audit_log +EXPORT_SYMBOL vmlinux 0x9e61bb05 set_freezable +EXPORT_SYMBOL vmlinux 0x9e64fbfe rtc_cmos_read +EXPORT_SYMBOL vmlinux 0x9e7ccc20 inet_csk_destroy_sock +EXPORT_SYMBOL vmlinux 0x9e7d6bd0 __udelay +EXPORT_SYMBOL vmlinux 0x9e87cacd generic_show_options +EXPORT_SYMBOL vmlinux 0x9e8dcb6f kmem_cache_alloc +EXPORT_SYMBOL vmlinux 0x9e97c0a6 do_sync_read +EXPORT_SYMBOL vmlinux 0x9e9cd575 jbd2_journal_restart +EXPORT_SYMBOL vmlinux 0x9e9f1714 __bitmap_andnot +EXPORT_SYMBOL vmlinux 0x9ea0ad49 __sg_free_table +EXPORT_SYMBOL vmlinux 0x9ebd4c04 adjust_resource +EXPORT_SYMBOL vmlinux 0x9ebdf059 x86_hyper +EXPORT_SYMBOL vmlinux 0x9ed5a461 mb_cache_entry_alloc +EXPORT_SYMBOL vmlinux 0x9f17eea8 vfs_follow_link +EXPORT_SYMBOL vmlinux 0x9f254db5 generic_shutdown_super +EXPORT_SYMBOL vmlinux 0x9f2bdaac __bitmap_or +EXPORT_SYMBOL vmlinux 0x9f46ced8 __sw_hweight64 +EXPORT_SYMBOL vmlinux 0x9f665dc9 scsi_is_target_device +EXPORT_SYMBOL vmlinux 0x9f6970a2 i2c_verify_client +EXPORT_SYMBOL vmlinux 0x9f6e19ab mem_section +EXPORT_SYMBOL vmlinux 0x9f81e3ff pci_map_rom +EXPORT_SYMBOL vmlinux 0x9f984513 strrchr +EXPORT_SYMBOL vmlinux 0x9f9b1e70 vm_stat +EXPORT_SYMBOL vmlinux 0x9fa4870b phy_driver_register +EXPORT_SYMBOL vmlinux 0x9fc16421 nf_ct_attach +EXPORT_SYMBOL vmlinux 0x9fc8e7a0 kmem_cache_free +EXPORT_SYMBOL vmlinux 0x9fdecc31 unregister_netdevice_many +EXPORT_SYMBOL vmlinux 0x9ff15d21 write_dirty_buffer +EXPORT_SYMBOL vmlinux 0x9ff30a30 vlan_vids_del_by_dev +EXPORT_SYMBOL vmlinux 0x9ffa3a75 netdev_max_backlog +EXPORT_SYMBOL vmlinux 0xa00aca2a dql_completed +EXPORT_SYMBOL vmlinux 0xa01657f1 file_update_time +EXPORT_SYMBOL vmlinux 0xa033cff7 textsearch_find_continuous +EXPORT_SYMBOL vmlinux 0xa0402252 bio_integrity_endio +EXPORT_SYMBOL vmlinux 0xa04a01bd qdisc_class_hash_insert +EXPORT_SYMBOL vmlinux 0xa05b260b file_open_root +EXPORT_SYMBOL vmlinux 0xa05c03df mempool_kmalloc +EXPORT_SYMBOL vmlinux 0xa05d7074 user_path_create +EXPORT_SYMBOL vmlinux 0xa07a37f0 memchr +EXPORT_SYMBOL vmlinux 0xa07ed110 xz_dec_init +EXPORT_SYMBOL vmlinux 0xa0834a47 gen_pool_free +EXPORT_SYMBOL vmlinux 0xa0971672 __pskb_copy +EXPORT_SYMBOL vmlinux 0xa0b04675 vmalloc_32 +EXPORT_SYMBOL vmlinux 0xa0b8549a uart_match_port +EXPORT_SYMBOL vmlinux 0xa0ceef51 out_of_line_wait_on_bit +EXPORT_SYMBOL vmlinux 0xa0de7db2 dev_uc_sync +EXPORT_SYMBOL vmlinux 0xa0eeb2f4 compat_tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xa0fbac79 wake_up_bit +EXPORT_SYMBOL vmlinux 0xa0fd96dd mmc_power_restore_host +EXPORT_SYMBOL vmlinux 0xa0ff74d6 udp_memory_allocated +EXPORT_SYMBOL vmlinux 0xa108eb4d sysctl_optmem_max +EXPORT_SYMBOL vmlinux 0xa11ace63 key_alloc +EXPORT_SYMBOL vmlinux 0xa120d33c tty_unregister_ldisc +EXPORT_SYMBOL vmlinux 0xa135664e register_console +EXPORT_SYMBOL vmlinux 0xa1415618 twl6030_interrupt_unmask +EXPORT_SYMBOL vmlinux 0xa14f3d8c ewma_add +EXPORT_SYMBOL vmlinux 0xa1671e49 simple_dir_operations +EXPORT_SYMBOL vmlinux 0xa173918b simple_pin_fs +EXPORT_SYMBOL vmlinux 0xa186d46d dev_get_by_index_rcu +EXPORT_SYMBOL vmlinux 0xa1b759ce fb_add_videomode +EXPORT_SYMBOL vmlinux 0xa1c5a3b3 cleancache_enabled +EXPORT_SYMBOL vmlinux 0xa1c76e0a _cond_resched +EXPORT_SYMBOL vmlinux 0xa1fbb842 netdev_notify_peers +EXPORT_SYMBOL vmlinux 0xa202a8e5 kmalloc_order_trace +EXPORT_SYMBOL vmlinux 0xa2086520 fddi_change_mtu +EXPORT_SYMBOL vmlinux 0xa20ce1b8 net_msg_warn +EXPORT_SYMBOL vmlinux 0xa250c838 param_get_charp +EXPORT_SYMBOL vmlinux 0xa2848c50 ecryptfs_get_auth_tok_key +EXPORT_SYMBOL vmlinux 0xa294764c generic_pipe_buf_get +EXPORT_SYMBOL vmlinux 0xa2a5fd77 inet_ehash_secret +EXPORT_SYMBOL vmlinux 0xa2adce5f vfs_open +EXPORT_SYMBOL vmlinux 0xa2b64a7b genlmsg_put +EXPORT_SYMBOL vmlinux 0xa2c16f8a xfrm_state_lookup +EXPORT_SYMBOL vmlinux 0xa2cb88b4 dst_destroy +EXPORT_SYMBOL vmlinux 0xa2ea5ed2 prepare_creds +EXPORT_SYMBOL vmlinux 0xa2ef34d7 rps_sock_flow_table +EXPORT_SYMBOL vmlinux 0xa3294889 netlink_kernel_release +EXPORT_SYMBOL vmlinux 0xa350a8f8 set_memory_array_uc +EXPORT_SYMBOL vmlinux 0xa35de80f ipv4_config +EXPORT_SYMBOL vmlinux 0xa3a77c69 down_read_trylock +EXPORT_SYMBOL vmlinux 0xa3adb863 tcp_shutdown +EXPORT_SYMBOL vmlinux 0xa3c97a53 journal_invalidatepage +EXPORT_SYMBOL vmlinux 0xa3db4e2e skb_copy_and_csum_bits +EXPORT_SYMBOL vmlinux 0xa3eb29b9 netdev_features_change +EXPORT_SYMBOL vmlinux 0xa3fc3d50 __tracepoint_module_get +EXPORT_SYMBOL vmlinux 0xa400159f crc32_be +EXPORT_SYMBOL vmlinux 0xa41af484 netif_rx_ni +EXPORT_SYMBOL vmlinux 0xa42f8622 __free_pages +EXPORT_SYMBOL vmlinux 0xa4511467 crc16 +EXPORT_SYMBOL vmlinux 0xa4701e9e timekeeping_inject_offset +EXPORT_SYMBOL vmlinux 0xa471df7f blk_recount_segments +EXPORT_SYMBOL vmlinux 0xa4724999 journal_check_used_features +EXPORT_SYMBOL vmlinux 0xa472734f skb_append +EXPORT_SYMBOL vmlinux 0xa484f3e7 dmam_alloc_coherent +EXPORT_SYMBOL vmlinux 0xa48efb38 pm860x_bulk_write +EXPORT_SYMBOL vmlinux 0xa494b221 netlink_broadcast_filtered +EXPORT_SYMBOL vmlinux 0xa49fcac8 d_obtain_alias +EXPORT_SYMBOL vmlinux 0xa4a53bdd twl6030_mmc_card_detect +EXPORT_SYMBOL vmlinux 0xa4a9d41d schedule_work_on +EXPORT_SYMBOL vmlinux 0xa4b94fea iowrite8_rep +EXPORT_SYMBOL vmlinux 0xa4d4f0e6 global_cache_flush +EXPORT_SYMBOL vmlinux 0xa4dbe23d inet_select_addr +EXPORT_SYMBOL vmlinux 0xa4df62de new_inode +EXPORT_SYMBOL vmlinux 0xa51de96c ipv6_chk_addr +EXPORT_SYMBOL vmlinux 0xa51df2b4 down_killable +EXPORT_SYMBOL vmlinux 0xa54cd9c9 md_integrity_register +EXPORT_SYMBOL vmlinux 0xa5526619 rb_insert_color +EXPORT_SYMBOL vmlinux 0xa577a850 param_get_short +EXPORT_SYMBOL vmlinux 0xa57b85b3 __skb_checksum_complete_head +EXPORT_SYMBOL vmlinux 0xa57bfbbf set_pages_nx +EXPORT_SYMBOL vmlinux 0xa58a3166 lg_local_lock +EXPORT_SYMBOL vmlinux 0xa598e29c vesa_modes +EXPORT_SYMBOL vmlinux 0xa5ae208b mii_ethtool_sset +EXPORT_SYMBOL vmlinux 0xa5bd19d6 invalidate_inode_buffers +EXPORT_SYMBOL vmlinux 0xa5dd45f3 prandom_bytes_state +EXPORT_SYMBOL vmlinux 0xa5e4f65c __next_cpu_nr +EXPORT_SYMBOL vmlinux 0xa5f2fcbe blk_queue_stack_limits +EXPORT_SYMBOL vmlinux 0xa5fe4162 bio_unmap_user +EXPORT_SYMBOL vmlinux 0xa61160bd __skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xa6294ded fb_get_buffer_offset +EXPORT_SYMBOL vmlinux 0xa632e6b9 netif_skb_features +EXPORT_SYMBOL vmlinux 0xa63d85ab slhc_remember +EXPORT_SYMBOL vmlinux 0xa6715115 do_settimeofday +EXPORT_SYMBOL vmlinux 0xa675804c utf8s_to_utf16s +EXPORT_SYMBOL vmlinux 0xa681fe88 generate_random_uuid +EXPORT_SYMBOL vmlinux 0xa6b729f5 security_d_instantiate +EXPORT_SYMBOL vmlinux 0xa6dd70bf pci_remove_bus +EXPORT_SYMBOL vmlinux 0xa6f3a600 nla_reserve_nohdr +EXPORT_SYMBOL vmlinux 0xa6fbd9b2 pci_bus_write_config_dword +EXPORT_SYMBOL vmlinux 0xa7076c76 uart_update_timeout +EXPORT_SYMBOL vmlinux 0xa70f77ec __blk_end_request +EXPORT_SYMBOL vmlinux 0xa70fabbe release_evntsel_nmi +EXPORT_SYMBOL vmlinux 0xa72a0f5b nr_online_nodes +EXPORT_SYMBOL vmlinux 0xa735db59 prandom_u32 +EXPORT_SYMBOL vmlinux 0xa74949c0 tcp_simple_retransmit +EXPORT_SYMBOL vmlinux 0xa74c8d67 xfrm_sad_getinfo +EXPORT_SYMBOL vmlinux 0xa79f6793 km_new_mapping +EXPORT_SYMBOL vmlinux 0xa7ae93f5 iput +EXPORT_SYMBOL vmlinux 0xa7bd52d9 misc_deregister +EXPORT_SYMBOL vmlinux 0xa7bebd30 pci_target_state +EXPORT_SYMBOL vmlinux 0xa7e44bdd blk_start_queue +EXPORT_SYMBOL vmlinux 0xa7e5ad33 writeback_inodes_sb_nr_if_idle +EXPORT_SYMBOL vmlinux 0xa7ec9a77 i2c_put_adapter +EXPORT_SYMBOL vmlinux 0xa8078b7b security_path_unlink +EXPORT_SYMBOL vmlinux 0xa80ddf8a dev_change_flags +EXPORT_SYMBOL vmlinux 0xa8232c78 strtobool +EXPORT_SYMBOL vmlinux 0xa843805a get_unused_fd_flags +EXPORT_SYMBOL vmlinux 0xa8721b97 system_state +EXPORT_SYMBOL vmlinux 0xa885e33a scm_fp_dup +EXPORT_SYMBOL vmlinux 0xa8917307 dev_deactivate +EXPORT_SYMBOL vmlinux 0xa8a6f639 __check_region +EXPORT_SYMBOL vmlinux 0xa8bdfc32 mmc_release_host +EXPORT_SYMBOL vmlinux 0xa8c1aec6 skb_unlink +EXPORT_SYMBOL vmlinux 0xa8cf9496 generic_pipe_buf_unmap +EXPORT_SYMBOL vmlinux 0xa8d68abd acpi_warning +EXPORT_SYMBOL vmlinux 0xa8e098c8 ndisc_mc_map +EXPORT_SYMBOL vmlinux 0xa8e62dc9 jbd2_journal_forget +EXPORT_SYMBOL vmlinux 0xa8fef7bb security_unix_may_send +EXPORT_SYMBOL vmlinux 0xa90bb97e dma_sync_wait +EXPORT_SYMBOL vmlinux 0xa90c21e0 blkdev_fsync +EXPORT_SYMBOL vmlinux 0xa916b694 strnlen +EXPORT_SYMBOL vmlinux 0xa91b5561 acpi_video_backlight_support +EXPORT_SYMBOL vmlinux 0xa91d8c19 filemap_fault +EXPORT_SYMBOL vmlinux 0xa9492f6c compat_sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xa95d3cdb gen_pool_for_each_chunk +EXPORT_SYMBOL vmlinux 0xa96fe422 seq_write +EXPORT_SYMBOL vmlinux 0xa981fa2d iov_iter_fault_in_readable +EXPORT_SYMBOL vmlinux 0xa99e6a5a md_check_recovery +EXPORT_SYMBOL vmlinux 0xa9bd2676 __vmalloc +EXPORT_SYMBOL vmlinux 0xa9c894eb idr_replace +EXPORT_SYMBOL vmlinux 0xa9e16354 x86_dma_fallback_dev +EXPORT_SYMBOL vmlinux 0xaa535310 key_instantiate_and_link +EXPORT_SYMBOL vmlinux 0xaa5e1483 mdiobus_scan +EXPORT_SYMBOL vmlinux 0xaa6f23ad rfkill_get_led_trigger_name +EXPORT_SYMBOL vmlinux 0xaa7953d5 sk_reset_timer +EXPORT_SYMBOL vmlinux 0xaa7f07a3 nf_log_register +EXPORT_SYMBOL vmlinux 0xaa84c33b mpage_readpage +EXPORT_SYMBOL vmlinux 0xaac98eb6 scsi_dma_map +EXPORT_SYMBOL vmlinux 0xaaccb79c mmc_gpio_request_ro +EXPORT_SYMBOL vmlinux 0xaad6d92f rfkill_init_sw_state +EXPORT_SYMBOL vmlinux 0xaae8ab0e acpi_bus_power_manageable +EXPORT_SYMBOL vmlinux 0xaaf45875 acpi_lid_notifier_unregister +EXPORT_SYMBOL vmlinux 0xaaf94217 blk_alloc_queue +EXPORT_SYMBOL vmlinux 0xaafa11a3 vga_switcheroo_register_audio_client +EXPORT_SYMBOL vmlinux 0xaafdc258 strcasecmp +EXPORT_SYMBOL vmlinux 0xab08240c dev_set_allmulti +EXPORT_SYMBOL vmlinux 0xab145181 udplite_prot +EXPORT_SYMBOL vmlinux 0xab1d6cc1 param_get_long +EXPORT_SYMBOL vmlinux 0xab1f5bcb request_key_async_with_auxdata +EXPORT_SYMBOL vmlinux 0xab2abddf dma_spin_lock +EXPORT_SYMBOL vmlinux 0xab2d0de1 vsc824x_add_skew +EXPORT_SYMBOL vmlinux 0xab42a446 pfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0xab45c59e ppp_register_compressor +EXPORT_SYMBOL vmlinux 0xab4f28d3 inet_twsk_deschedule +EXPORT_SYMBOL vmlinux 0xab600421 probe_irq_off +EXPORT_SYMBOL vmlinux 0xab64dc82 phy_device_free +EXPORT_SYMBOL vmlinux 0xab65ed80 set_memory_uc +EXPORT_SYMBOL vmlinux 0xab6bde28 sysctl_max_syn_backlog +EXPORT_SYMBOL vmlinux 0xab770678 rdmsr_safe_regs_on_cpu +EXPORT_SYMBOL vmlinux 0xab8e6b88 tty_kref_put +EXPORT_SYMBOL vmlinux 0xabaae929 __blk_end_request_cur +EXPORT_SYMBOL vmlinux 0xabb6d1a2 netdev_rx_csum_fault +EXPORT_SYMBOL vmlinux 0xabcaa577 free_anon_bdev +EXPORT_SYMBOL vmlinux 0xabd0c91c rtc_time_to_tm +EXPORT_SYMBOL vmlinux 0xac05c69f xfrm_state_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xac0ba8c1 blk_iopoll_disable +EXPORT_SYMBOL vmlinux 0xac3d20e2 unregister_sysctl_table +EXPORT_SYMBOL vmlinux 0xac58ea5e acpi_unload_table_id +EXPORT_SYMBOL vmlinux 0xac6855b0 gen_kill_estimator +EXPORT_SYMBOL vmlinux 0xac953c3e security_inode_setsecctx +EXPORT_SYMBOL vmlinux 0xac96ec0d clocksource_change_rating +EXPORT_SYMBOL vmlinux 0xacaa9c7f pid_task +EXPORT_SYMBOL vmlinux 0xacc081d9 da9052_i2c_fix +EXPORT_SYMBOL vmlinux 0xaccabc6a in4_pton +EXPORT_SYMBOL vmlinux 0xacde3ec3 ppp_input +EXPORT_SYMBOL vmlinux 0xacde6340 inet_peer_xrlim_allow +EXPORT_SYMBOL vmlinux 0xacf4d843 match_strdup +EXPORT_SYMBOL vmlinux 0xacfe7ff9 devm_ioport_map +EXPORT_SYMBOL vmlinux 0xad01744f kstrtos8_from_user +EXPORT_SYMBOL vmlinux 0xad0413d4 match_hex +EXPORT_SYMBOL vmlinux 0xad06ab1f sock_recvmsg +EXPORT_SYMBOL vmlinux 0xad0dd6c8 inc_nlink +EXPORT_SYMBOL vmlinux 0xad13c689 acpi_os_execute +EXPORT_SYMBOL vmlinux 0xad164875 kstrtos16_from_user +EXPORT_SYMBOL vmlinux 0xad19a172 skb_make_writable +EXPORT_SYMBOL vmlinux 0xad21e714 brioctl_set +EXPORT_SYMBOL vmlinux 0xad2a8bd2 x86_bios_cpu_apicid +EXPORT_SYMBOL vmlinux 0xad4d253b agp_create_memory +EXPORT_SYMBOL vmlinux 0xad684a97 cdrom_ioctl +EXPORT_SYMBOL vmlinux 0xad766bb6 nf_log_bind_pf +EXPORT_SYMBOL vmlinux 0xad84bef8 dm_table_event +EXPORT_SYMBOL vmlinux 0xad88543a sock_get_timestampns +EXPORT_SYMBOL vmlinux 0xad897fcc skb_insert +EXPORT_SYMBOL vmlinux 0xad9bd5e6 ip_ct_attach +EXPORT_SYMBOL vmlinux 0xada8198b dcb_getapp +EXPORT_SYMBOL vmlinux 0xadaa2657 cpufreq_register_notifier +EXPORT_SYMBOL vmlinux 0xadaabe1b pv_lock_ops +EXPORT_SYMBOL vmlinux 0xadb4b66b blkdev_get_by_dev +EXPORT_SYMBOL vmlinux 0xadb5559d param_ops_byte +EXPORT_SYMBOL vmlinux 0xadbfbae2 alloc_etherdev_mqs +EXPORT_SYMBOL vmlinux 0xae44b11f elv_rb_latter_request +EXPORT_SYMBOL vmlinux 0xae729e59 security_req_classify_flow +EXPORT_SYMBOL vmlinux 0xae7c73a4 xfrm_unregister_mode +EXPORT_SYMBOL vmlinux 0xaea28a7c tty_port_free_xmit_buf +EXPORT_SYMBOL vmlinux 0xaea976a8 acpi_check_resource_conflict +EXPORT_SYMBOL vmlinux 0xaeb02cbb mddev_congested +EXPORT_SYMBOL vmlinux 0xaebb6df5 pm860x_set_bits +EXPORT_SYMBOL vmlinux 0xaed51cf1 generic_getxattr +EXPORT_SYMBOL vmlinux 0xaed6741e skb_copy_and_csum_datagram_iovec +EXPORT_SYMBOL vmlinux 0xaeed2bae mmc_gpio_get_cd +EXPORT_SYMBOL vmlinux 0xaf05a2e7 vga_switcheroo_get_client_state +EXPORT_SYMBOL vmlinux 0xaf3dd7dc scsi_logging_level +EXPORT_SYMBOL vmlinux 0xaf467914 vfs_link +EXPORT_SYMBOL vmlinux 0xaf4ffddb scsi_verify_blk_ioctl +EXPORT_SYMBOL vmlinux 0xaf5fe72a __nla_put_nohdr +EXPORT_SYMBOL vmlinux 0xaf611eac amd_nb_misc_ids +EXPORT_SYMBOL vmlinux 0xaf659b75 blk_rq_map_user_iov +EXPORT_SYMBOL vmlinux 0xaf6ae696 kstrndup +EXPORT_SYMBOL vmlinux 0xaf7ade14 dquot_quota_sync +EXPORT_SYMBOL vmlinux 0xaf7b2fe8 init_net +EXPORT_SYMBOL vmlinux 0xaf88f53e skb_store_bits +EXPORT_SYMBOL vmlinux 0xaf91d89f __kernel_param_lock +EXPORT_SYMBOL vmlinux 0xaf9a74a4 ioctl_by_bdev +EXPORT_SYMBOL vmlinux 0xafb1c4ee bio_integrity_free +EXPORT_SYMBOL vmlinux 0xafb8c6ff copy_user_generic_string +EXPORT_SYMBOL vmlinux 0xafbb5435 grab_cache_page_write_begin +EXPORT_SYMBOL vmlinux 0xafc74950 pci_release_region +EXPORT_SYMBOL vmlinux 0xafcb9f6b block_write_end +EXPORT_SYMBOL vmlinux 0xafd5ff2c amd_iommu_v2_supported +EXPORT_SYMBOL vmlinux 0xafd9e70d d_make_root +EXPORT_SYMBOL vmlinux 0xafef8fa9 register_memory_notifier +EXPORT_SYMBOL vmlinux 0xb007b236 give_up_console +EXPORT_SYMBOL vmlinux 0xb01184d6 pcim_iomap_table +EXPORT_SYMBOL vmlinux 0xb01b1db8 intel_gtt_insert_sg_entries +EXPORT_SYMBOL vmlinux 0xb03e699b kernel_read +EXPORT_SYMBOL vmlinux 0xb049898d get_super_thawed +EXPORT_SYMBOL vmlinux 0xb05fc310 sysctl_rmem_max +EXPORT_SYMBOL vmlinux 0xb060638d tty_unregister_device +EXPORT_SYMBOL vmlinux 0xb07690df pci_enable_device_io +EXPORT_SYMBOL vmlinux 0xb07aa16e sk_filter +EXPORT_SYMBOL vmlinux 0xb0947c60 __mutex_init +EXPORT_SYMBOL vmlinux 0xb0abb5b3 inet6_add_protocol +EXPORT_SYMBOL vmlinux 0xb0abb95c input_set_keycode +EXPORT_SYMBOL vmlinux 0xb0b53c51 i2c_smbus_read_block_data +EXPORT_SYMBOL vmlinux 0xb0b832be twl6040_reg_write +EXPORT_SYMBOL vmlinux 0xb0b847ac __bitmap_full +EXPORT_SYMBOL vmlinux 0xb0c8c405 dev_remove_offload +EXPORT_SYMBOL vmlinux 0xb0e10781 get_option +EXPORT_SYMBOL vmlinux 0xb0e602eb memmove +EXPORT_SYMBOL vmlinux 0xb0ea7333 key_invalidate +EXPORT_SYMBOL vmlinux 0xb0f595ba pci_bus_alloc_resource +EXPORT_SYMBOL vmlinux 0xb0ffda2f blk_limits_max_hw_sectors +EXPORT_SYMBOL vmlinux 0xb104572b textsearch_register +EXPORT_SYMBOL vmlinux 0xb117dfdd sock_i_uid +EXPORT_SYMBOL vmlinux 0xb121390a probe_irq_on +EXPORT_SYMBOL vmlinux 0xb138d0bf dm_ratelimit_state +EXPORT_SYMBOL vmlinux 0xb13b7c16 input_handler_for_each_handle +EXPORT_SYMBOL vmlinux 0xb14504dd dcbnl_ieee_notify +EXPORT_SYMBOL vmlinux 0xb146ef4a sock_sendmsg +EXPORT_SYMBOL vmlinux 0xb1645a2e sg_free_table +EXPORT_SYMBOL vmlinux 0xb1792486 jbd2_journal_errno +EXPORT_SYMBOL vmlinux 0xb18c993c dmam_free_coherent +EXPORT_SYMBOL vmlinux 0xb19760c3 bitmap_onto +EXPORT_SYMBOL vmlinux 0xb1b7b87c tty_vhangup +EXPORT_SYMBOL vmlinux 0xb1b95dff file_ns_capable +EXPORT_SYMBOL vmlinux 0xb1c21023 agp_generic_alloc_pages +EXPORT_SYMBOL vmlinux 0xb1c3a01a oops_in_progress +EXPORT_SYMBOL vmlinux 0xb1c6b4b4 n_tty_ioctl_helper +EXPORT_SYMBOL vmlinux 0xb1cb4840 i2c_smbus_read_i2c_block_data +EXPORT_SYMBOL vmlinux 0xb1cf44df fb_find_best_mode +EXPORT_SYMBOL vmlinux 0xb1cfad22 rdmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xb1e13baa tty_unregister_driver +EXPORT_SYMBOL vmlinux 0xb208c930 amd_iommu_flush_page +EXPORT_SYMBOL vmlinux 0xb20ecf88 acpi_run_osc +EXPORT_SYMBOL vmlinux 0xb21656d7 mmc_gpio_free_ro +EXPORT_SYMBOL vmlinux 0xb219d56c wbinvd_on_cpu +EXPORT_SYMBOL vmlinux 0xb21c3715 scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xb22502d4 pcie_port_service_register +EXPORT_SYMBOL vmlinux 0xb22e84c3 remap_pfn_range +EXPORT_SYMBOL vmlinux 0xb238679c vm_iomap_memory +EXPORT_SYMBOL vmlinux 0xb2656035 d_lookup +EXPORT_SYMBOL vmlinux 0xb266faf0 processors +EXPORT_SYMBOL vmlinux 0xb2682405 utf8_to_utf32 +EXPORT_SYMBOL vmlinux 0xb279422a abx500_get_register_page_interruptible +EXPORT_SYMBOL vmlinux 0xb2a4f2c8 kmem_cache_alloc_node_trace +EXPORT_SYMBOL vmlinux 0xb2a7e1af nonseekable_open +EXPORT_SYMBOL vmlinux 0xb2bce9d0 tty_port_raise_dtr_rts +EXPORT_SYMBOL vmlinux 0xb2be6e92 netdev_stats_to_stats64 +EXPORT_SYMBOL vmlinux 0xb2bf2486 __sk_mem_reclaim +EXPORT_SYMBOL vmlinux 0xb2d307de param_ops_short +EXPORT_SYMBOL vmlinux 0xb2e08e7b lg_local_unlock_cpu +EXPORT_SYMBOL vmlinux 0xb2f74fb6 intel_gmch_remove +EXPORT_SYMBOL vmlinux 0xb2fd5ceb __put_user_4 +EXPORT_SYMBOL vmlinux 0xb30232c2 pagecache_write_end +EXPORT_SYMBOL vmlinux 0xb31341e2 mb_cache_entry_insert +EXPORT_SYMBOL vmlinux 0xb3284531 acpi_dbg_layer +EXPORT_SYMBOL vmlinux 0xb3305d52 send_remote_softirq +EXPORT_SYMBOL vmlinux 0xb33c167e blkdev_issue_zeroout +EXPORT_SYMBOL vmlinux 0xb347c2c5 sock_wmalloc +EXPORT_SYMBOL vmlinux 0xb34d4c2e acpi_terminate +EXPORT_SYMBOL vmlinux 0xb352177e find_first_bit +EXPORT_SYMBOL vmlinux 0xb355cc51 nf_register_hook +EXPORT_SYMBOL vmlinux 0xb384bef1 proc_create_data +EXPORT_SYMBOL vmlinux 0xb38d5964 blk_integrity_merge_rq +EXPORT_SYMBOL vmlinux 0xb3930a5e tty_port_tty_get +EXPORT_SYMBOL vmlinux 0xb3a964d6 pci_back_from_sleep +EXPORT_SYMBOL vmlinux 0xb3f7646e kthread_should_stop +EXPORT_SYMBOL vmlinux 0xb405c509 mmc_suspend_host +EXPORT_SYMBOL vmlinux 0xb423dba1 console_blanked +EXPORT_SYMBOL vmlinux 0xb4354bec dev_mc_del +EXPORT_SYMBOL vmlinux 0xb44e3f0e skb_trim +EXPORT_SYMBOL vmlinux 0xb453b0f5 thaw_bdev +EXPORT_SYMBOL vmlinux 0xb45536c3 path_get +EXPORT_SYMBOL vmlinux 0xb45aaade seq_release_private +EXPORT_SYMBOL vmlinux 0xb4709322 scsi_dev_info_add_list +EXPORT_SYMBOL vmlinux 0xb4996b90 __bread +EXPORT_SYMBOL vmlinux 0xb4aaff35 ip_mc_dec_group +EXPORT_SYMBOL vmlinux 0xb4b7b067 clocksource_unregister +EXPORT_SYMBOL vmlinux 0xb4bb89f5 insert_inode_locked4 +EXPORT_SYMBOL vmlinux 0xb4d392f8 dev_graft_qdisc +EXPORT_SYMBOL vmlinux 0xb4e83185 wait_iff_congested +EXPORT_SYMBOL vmlinux 0xb51a4a3d jbd2__journal_start +EXPORT_SYMBOL vmlinux 0xb52ee8be intel_gtt_clear_range +EXPORT_SYMBOL vmlinux 0xb54088a3 posix_acl_alloc +EXPORT_SYMBOL vmlinux 0xb54533f7 usecs_to_jiffies +EXPORT_SYMBOL vmlinux 0xb57343c2 frontswap_shrink +EXPORT_SYMBOL vmlinux 0xb59a8bb3 elv_rq_merge_ok +EXPORT_SYMBOL vmlinux 0xb5a459dc unregister_blkdev +EXPORT_SYMBOL vmlinux 0xb5aa7165 dma_pool_destroy +EXPORT_SYMBOL vmlinux 0xb5b27cbf dquot_acquire +EXPORT_SYMBOL vmlinux 0xb5c5f5b9 scsi_remove_device +EXPORT_SYMBOL vmlinux 0xb5ca1c46 slhc_free +EXPORT_SYMBOL vmlinux 0xb5dcab5b remove_wait_queue +EXPORT_SYMBOL vmlinux 0xb5e031c8 i2c_smbus_process_call +EXPORT_SYMBOL vmlinux 0xb5f38a10 tcp_init_sock +EXPORT_SYMBOL vmlinux 0xb5f90abb jbd2_journal_init_dev +EXPORT_SYMBOL vmlinux 0xb621728c elv_register_queue +EXPORT_SYMBOL vmlinux 0xb6244511 sg_init_one +EXPORT_SYMBOL vmlinux 0xb647581b loop_register_transfer +EXPORT_SYMBOL vmlinux 0xb64abb77 skb_copy_bits +EXPORT_SYMBOL vmlinux 0xb663f28e __tcf_em_tree_match +EXPORT_SYMBOL vmlinux 0xb678366f int_sqrt +EXPORT_SYMBOL vmlinux 0xb6822a33 radix_tree_gang_lookup_tag +EXPORT_SYMBOL vmlinux 0xb6851ef6 journal_load +EXPORT_SYMBOL vmlinux 0xb689e373 thermal_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xb6936ffe _bcd2bin +EXPORT_SYMBOL vmlinux 0xb6a61a86 qdisc_get_rtab +EXPORT_SYMBOL vmlinux 0xb6a68816 find_last_bit +EXPORT_SYMBOL vmlinux 0xb6c5a973 scsi_show_result +EXPORT_SYMBOL vmlinux 0xb6cbe886 acpi_get_node +EXPORT_SYMBOL vmlinux 0xb6d222bb vga_switcheroo_client_fb_set +EXPORT_SYMBOL vmlinux 0xb6df55e5 blk_queue_merge_bvec +EXPORT_SYMBOL vmlinux 0xb6e58e3f neigh_seq_start +EXPORT_SYMBOL vmlinux 0xb70ab50f blk_requeue_request +EXPORT_SYMBOL vmlinux 0xb712aa80 netdev_emerg +EXPORT_SYMBOL vmlinux 0xb72c25b4 __dquot_alloc_space +EXPORT_SYMBOL vmlinux 0xb758b225 acpi_disable_event +EXPORT_SYMBOL vmlinux 0xb7633c3e icmpv6_send +EXPORT_SYMBOL vmlinux 0xb76c2c55 fsnotify_init_mark +EXPORT_SYMBOL vmlinux 0xb7a1af6f __scsi_device_lookup_by_target +EXPORT_SYMBOL vmlinux 0xb7b4a21a agp_generic_type_to_mask_type +EXPORT_SYMBOL vmlinux 0xb7b8747d pcim_enable_device +EXPORT_SYMBOL vmlinux 0xb7b94cae kill_anon_super +EXPORT_SYMBOL vmlinux 0xb7bfac44 vlan_dev_real_dev +EXPORT_SYMBOL vmlinux 0xb7dc1cc1 default_file_splice_read +EXPORT_SYMBOL vmlinux 0xb7e3f62d __break_lease +EXPORT_SYMBOL vmlinux 0xb7e92711 agp_generic_alloc_by_type +EXPORT_SYMBOL vmlinux 0xb7f47feb inode_sb_list_lock +EXPORT_SYMBOL vmlinux 0xb805a48c set_user_nice +EXPORT_SYMBOL vmlinux 0xb808cdac idr_for_each +EXPORT_SYMBOL vmlinux 0xb835b3e4 radix_tree_prev_hole +EXPORT_SYMBOL vmlinux 0xb86c2e36 agp_put_bridge +EXPORT_SYMBOL vmlinux 0xb88aa9b8 inet_dev_addr_type +EXPORT_SYMBOL vmlinux 0xb89a2579 inet_frag_maybe_warn_overflow +EXPORT_SYMBOL vmlinux 0xb8d9f18a tty_check_change +EXPORT_SYMBOL vmlinux 0xb8e7ce2c __put_user_8 +EXPORT_SYMBOL vmlinux 0xb907513f unpoison_memory +EXPORT_SYMBOL vmlinux 0xb9249d16 cpu_possible_mask +EXPORT_SYMBOL vmlinux 0xb941a523 scsi_target_quiesce +EXPORT_SYMBOL vmlinux 0xb9662583 neigh_event_ns +EXPORT_SYMBOL vmlinux 0xb9686fdb tcp_md5_do_del +EXPORT_SYMBOL vmlinux 0xb9747e51 tty_insert_flip_string_fixed_flag +EXPORT_SYMBOL vmlinux 0xb98a0185 rtc_tm_to_time +EXPORT_SYMBOL vmlinux 0xb9a39fcd inet_release +EXPORT_SYMBOL vmlinux 0xb9a89f67 km_policy_notify +EXPORT_SYMBOL vmlinux 0xb9b4e181 alloc_pages_exact_nid +EXPORT_SYMBOL vmlinux 0xb9c1d3d2 filemap_fdatawait +EXPORT_SYMBOL vmlinux 0xb9e249f6 dev_mc_add_excl +EXPORT_SYMBOL vmlinux 0xb9f008eb __set_page_dirty_buffers +EXPORT_SYMBOL vmlinux 0xb9f32177 ata_link_printk +EXPORT_SYMBOL vmlinux 0xb9fd2205 add_efi_memmap +EXPORT_SYMBOL vmlinux 0xba023e89 __netlink_kernel_create +EXPORT_SYMBOL vmlinux 0xba0e05b3 netif_napi_del +EXPORT_SYMBOL vmlinux 0xba23cf06 kfree_skb +EXPORT_SYMBOL vmlinux 0xba2d8594 ec_read +EXPORT_SYMBOL vmlinux 0xba3040cb ipv6_push_nfrag_opts +EXPORT_SYMBOL vmlinux 0xba39004b pci_request_region +EXPORT_SYMBOL vmlinux 0xba48001d alloc_xenballooned_pages +EXPORT_SYMBOL vmlinux 0xba497f13 loops_per_jiffy +EXPORT_SYMBOL vmlinux 0xba51a4d3 abx500_get_register_interruptible +EXPORT_SYMBOL vmlinux 0xba63339c _raw_spin_unlock_bh +EXPORT_SYMBOL vmlinux 0xba6d2d10 vmap +EXPORT_SYMBOL vmlinux 0xba943b99 clear_page_dirty_for_io +EXPORT_SYMBOL vmlinux 0xbaa89eea dev_remove_pack +EXPORT_SYMBOL vmlinux 0xbaa9e8b7 abx500_event_registers_startup_state_get +EXPORT_SYMBOL vmlinux 0xbae6f511 simple_empty +EXPORT_SYMBOL vmlinux 0xbaeffa05 qid_eq +EXPORT_SYMBOL vmlinux 0xbafecc36 scsi_host_get +EXPORT_SYMBOL vmlinux 0xbb00dd09 __devm_release_region +EXPORT_SYMBOL vmlinux 0xbb189cad disallow_signal +EXPORT_SYMBOL vmlinux 0xbb1e6b55 dma_pool_create +EXPORT_SYMBOL vmlinux 0xbb22cf9a d_instantiate_unique +EXPORT_SYMBOL vmlinux 0xbb27a9ce tcp_initialize_rcv_mss +EXPORT_SYMBOL vmlinux 0xbb32eab2 tcf_hash_search +EXPORT_SYMBOL vmlinux 0xbb34134a iov_shorten +EXPORT_SYMBOL vmlinux 0xbb38de6c kernel_sendpage +EXPORT_SYMBOL vmlinux 0xbb49a3da kernel_connect +EXPORT_SYMBOL vmlinux 0xbb4f4766 simple_write_to_buffer +EXPORT_SYMBOL vmlinux 0xbb5d343d xfrm_get_acqseq +EXPORT_SYMBOL vmlinux 0xbb62be05 key_reject_and_link +EXPORT_SYMBOL vmlinux 0xbb65759b idr_get_next +EXPORT_SYMBOL vmlinux 0xbb6deb4c bio_add_pc_page +EXPORT_SYMBOL vmlinux 0xbb713e6d sk_filter_release_rcu +EXPORT_SYMBOL vmlinux 0xbb796bc1 tty_port_put +EXPORT_SYMBOL vmlinux 0xbb99125c get_default_font +EXPORT_SYMBOL vmlinux 0xbb9f50c4 jbd2_journal_force_commit_nested +EXPORT_SYMBOL vmlinux 0xbbaeb559 memcg_socket_limit_enabled +EXPORT_SYMBOL vmlinux 0xbbaf9049 udp_sendmsg +EXPORT_SYMBOL vmlinux 0xbbc2ffc8 agp_free_memory +EXPORT_SYMBOL vmlinux 0xbbc59100 pci_enable_msi_block +EXPORT_SYMBOL vmlinux 0xbbd64344 kdb_current_task +EXPORT_SYMBOL vmlinux 0xbbfcaca5 bit_waitqueue +EXPORT_SYMBOL vmlinux 0xbc07e4b8 setup_arg_pages +EXPORT_SYMBOL vmlinux 0xbc2031de acpi_processor_get_bios_limit +EXPORT_SYMBOL vmlinux 0xbc2978e9 lg_global_lock +EXPORT_SYMBOL vmlinux 0xbc2fdeb1 agp_generic_free_by_type +EXPORT_SYMBOL vmlinux 0xbc4ed12f pcibios_resource_to_bus +EXPORT_SYMBOL vmlinux 0xbc6599b2 d_instantiate +EXPORT_SYMBOL vmlinux 0xbc8fe0c7 consume_skb +EXPORT_SYMBOL vmlinux 0xbcbdb193 mmc_read_bkops_status +EXPORT_SYMBOL vmlinux 0xbcc308bb strnlen_user +EXPORT_SYMBOL vmlinux 0xbccc56ef do_splice_to +EXPORT_SYMBOL vmlinux 0xbcd0a058 blk_queue_bounce_limit +EXPORT_SYMBOL vmlinux 0xbcd508e6 mnt_set_expiry +EXPORT_SYMBOL vmlinux 0xbd0314ad security_task_getsecid +EXPORT_SYMBOL vmlinux 0xbd100793 cpu_online_mask +EXPORT_SYMBOL vmlinux 0xbd31efcd request_firmware_nowait +EXPORT_SYMBOL vmlinux 0xbd462b55 __kfifo_init +EXPORT_SYMBOL vmlinux 0xbd5c3d70 keyring_search +EXPORT_SYMBOL vmlinux 0xbd9b95b6 phy_start +EXPORT_SYMBOL vmlinux 0xbda0bf93 cdev_del +EXPORT_SYMBOL vmlinux 0xbda6d456 scsi_test_unit_ready +EXPORT_SYMBOL vmlinux 0xbdaf5b07 acpi_os_read_port +EXPORT_SYMBOL vmlinux 0xbdbe7378 cookie_check_timestamp +EXPORT_SYMBOL vmlinux 0xbdc89bea seq_escape +EXPORT_SYMBOL vmlinux 0xbdce0b72 dev_crit +EXPORT_SYMBOL vmlinux 0xbdfb6dbb __fentry__ +EXPORT_SYMBOL vmlinux 0xbdfc10da qdisc_destroy +EXPORT_SYMBOL vmlinux 0xbe08380f md_finish_reshape +EXPORT_SYMBOL vmlinux 0xbe18153d try_wait_for_completion +EXPORT_SYMBOL vmlinux 0xbe254e92 param_set_ushort +EXPORT_SYMBOL vmlinux 0xbe2c0274 add_timer +EXPORT_SYMBOL vmlinux 0xbe2efd52 xfrm_spd_getinfo +EXPORT_SYMBOL vmlinux 0xbe5fcbf5 simple_transaction_set +EXPORT_SYMBOL vmlinux 0xbe656c3c pci_request_selected_regions +EXPORT_SYMBOL vmlinux 0xbe83e4ff kset_unregister +EXPORT_SYMBOL vmlinux 0xbe8c1ff9 agp_generic_destroy_pages +EXPORT_SYMBOL vmlinux 0xbe964291 fsnotify_put_group +EXPORT_SYMBOL vmlinux 0xbe9da44b dma_async_memcpy_buf_to_pg +EXPORT_SYMBOL vmlinux 0xbea9986d sk_stream_wait_memory +EXPORT_SYMBOL vmlinux 0xbeaf3e29 spi_schedule_dv_device +EXPORT_SYMBOL vmlinux 0xbeb262fe in6_dev_finish_destroy +EXPORT_SYMBOL vmlinux 0xbec30d05 x86_match_cpu +EXPORT_SYMBOL vmlinux 0xbecb8510 scsi_block_requests +EXPORT_SYMBOL vmlinux 0xbecc2727 pci_clear_master +EXPORT_SYMBOL vmlinux 0xbecc76fc netif_device_detach +EXPORT_SYMBOL vmlinux 0xbecc79a2 bdi_unregister +EXPORT_SYMBOL vmlinux 0xbedb36dd ns_capable +EXPORT_SYMBOL vmlinux 0xbef43296 console_conditional_schedule +EXPORT_SYMBOL vmlinux 0xbf1180fd dev_load +EXPORT_SYMBOL vmlinux 0xbf16a999 inode_init_owner +EXPORT_SYMBOL vmlinux 0xbf1dd759 genl_register_ops +EXPORT_SYMBOL vmlinux 0xbf285798 tcp_splice_read +EXPORT_SYMBOL vmlinux 0xbf41e641 d_find_alias +EXPORT_SYMBOL vmlinux 0xbf4d4bb9 acpi_bios_error +EXPORT_SYMBOL vmlinux 0xbf7fd2f5 schedule_timeout_killable +EXPORT_SYMBOL vmlinux 0xbf8378c4 __wait_on_buffer +EXPORT_SYMBOL vmlinux 0xbf852cfc I_BDEV +EXPORT_SYMBOL vmlinux 0xbf8ba54a vprintk +EXPORT_SYMBOL vmlinux 0xbf9bcc8d __cap_empty_set +EXPORT_SYMBOL vmlinux 0xbfa45dc5 journal_dirty_data +EXPORT_SYMBOL vmlinux 0xbfb730d6 mnt_drop_write_file +EXPORT_SYMBOL vmlinux 0xbfc177bc iowrite32_rep +EXPORT_SYMBOL vmlinux 0xbfc407b4 param_ops_bint +EXPORT_SYMBOL vmlinux 0xbfc4c0ea inet_stream_ops +EXPORT_SYMBOL vmlinux 0xbfe4784c efi +EXPORT_SYMBOL vmlinux 0xbfee3ad5 loop_unregister_transfer +EXPORT_SYMBOL vmlinux 0xc01cf848 _raw_read_lock +EXPORT_SYMBOL vmlinux 0xc01fe511 scsi_scan_host +EXPORT_SYMBOL vmlinux 0xc02f7e84 skb_tx_error +EXPORT_SYMBOL vmlinux 0xc04ee0df max8998_write_reg +EXPORT_SYMBOL vmlinux 0xc04fc366 sock_no_sendmsg +EXPORT_SYMBOL vmlinux 0xc05a6012 acpi_resource_to_address64 +EXPORT_SYMBOL vmlinux 0xc0763484 rfkill_blocked +EXPORT_SYMBOL vmlinux 0xc0823e4c twl_i2c_write +EXPORT_SYMBOL vmlinux 0xc09e986c alloc_mdio_bitbang +EXPORT_SYMBOL vmlinux 0xc0a3d105 find_next_bit +EXPORT_SYMBOL vmlinux 0xc0a5b0e5 generic_removexattr +EXPORT_SYMBOL vmlinux 0xc0ab59c0 unregister_netdev +EXPORT_SYMBOL vmlinux 0xc0b34503 revert_creds +EXPORT_SYMBOL vmlinux 0xc0eefabf __blk_run_queue +EXPORT_SYMBOL vmlinux 0xc0f08fbc tty_lock +EXPORT_SYMBOL vmlinux 0xc12d6ad5 journal_ack_err +EXPORT_SYMBOL vmlinux 0xc140302f thermal_zone_device_update +EXPORT_SYMBOL vmlinux 0xc1543987 blkdev_get +EXPORT_SYMBOL vmlinux 0xc1615ea2 elv_rb_find +EXPORT_SYMBOL vmlinux 0xc16331d9 create_syslog_header +EXPORT_SYMBOL vmlinux 0xc1647313 __bio_clone +EXPORT_SYMBOL vmlinux 0xc1a3eecb xfrm6_find_1stfragopt +EXPORT_SYMBOL vmlinux 0xc1c2dd09 __hw_addr_flush +EXPORT_SYMBOL vmlinux 0xc1c6616d mmc_gpio_free_cd +EXPORT_SYMBOL vmlinux 0xc1e06e73 ps2_drain +EXPORT_SYMBOL vmlinux 0xc1e80a88 devm_ioport_unmap +EXPORT_SYMBOL vmlinux 0xc1f18431 cpufreq_cooling_unregister +EXPORT_SYMBOL vmlinux 0xc20c115e vfs_statfs +EXPORT_SYMBOL vmlinux 0xc21a882d security_path_symlink +EXPORT_SYMBOL vmlinux 0xc227cd3b key_type_keyring +EXPORT_SYMBOL vmlinux 0xc22b50ad param_set_bint +EXPORT_SYMBOL vmlinux 0xc2424641 agp3_generic_cleanup +EXPORT_SYMBOL vmlinux 0xc2451052 ipv6_select_ident +EXPORT_SYMBOL vmlinux 0xc256e762 __bitmap_equal +EXPORT_SYMBOL vmlinux 0xc274c24e pci_match_id +EXPORT_SYMBOL vmlinux 0xc2777fea vga_tryget +EXPORT_SYMBOL vmlinux 0xc2802cfa sk_stream_wait_connect +EXPORT_SYMBOL vmlinux 0xc289d81a fbcon_set_tileops +EXPORT_SYMBOL vmlinux 0xc297ec33 noop_qdisc +EXPORT_SYMBOL vmlinux 0xc29b56b1 pm860x_page_bulk_write +EXPORT_SYMBOL vmlinux 0xc29bf967 strspn +EXPORT_SYMBOL vmlinux 0xc2abab06 acpi_match_device_ids +EXPORT_SYMBOL vmlinux 0xc2e3ca57 pci_unmap_rom +EXPORT_SYMBOL vmlinux 0xc2e587d1 reset_devices +EXPORT_SYMBOL vmlinux 0xc2eca355 sock_release +EXPORT_SYMBOL vmlinux 0xc2ee0c58 clear_inode +EXPORT_SYMBOL vmlinux 0xc2ee35f0 do_splice_direct +EXPORT_SYMBOL vmlinux 0xc2f0cbb1 __inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xc2f9c045 timespec_to_jiffies +EXPORT_SYMBOL vmlinux 0xc310b981 strnstr +EXPORT_SYMBOL vmlinux 0xc31d8bcc dquot_writeback_dquots +EXPORT_SYMBOL vmlinux 0xc3588a2c pci_enable_ltr +EXPORT_SYMBOL vmlinux 0xc38992f3 thermal_zone_bind_cooling_device +EXPORT_SYMBOL vmlinux 0xc39c729d xfrm_find_acq +EXPORT_SYMBOL vmlinux 0xc3aaf0a9 __put_user_1 +EXPORT_SYMBOL vmlinux 0xc3cd45ab acpi_pm_device_run_wake +EXPORT_SYMBOL vmlinux 0xc3f8e9fc mark_buffer_dirty +EXPORT_SYMBOL vmlinux 0xc402cc99 register_acpi_notifier +EXPORT_SYMBOL vmlinux 0xc4335572 __xfrm_route_forward +EXPORT_SYMBOL vmlinux 0xc43c28f5 vga_put +EXPORT_SYMBOL vmlinux 0xc44466c4 empty_aops +EXPORT_SYMBOL vmlinux 0xc46244f1 bio_integrity_enabled +EXPORT_SYMBOL vmlinux 0xc4651df9 km_report +EXPORT_SYMBOL vmlinux 0xc467b8a4 i2c_smbus_read_word_data +EXPORT_SYMBOL vmlinux 0xc4698d8f pci_request_regions_exclusive +EXPORT_SYMBOL vmlinux 0xc486c9ba touch_atime +EXPORT_SYMBOL vmlinux 0xc499ae1e kstrdup +EXPORT_SYMBOL vmlinux 0xc49a88f0 bitmap_startwrite +EXPORT_SYMBOL vmlinux 0xc4ab6f07 compat_ip_getsockopt +EXPORT_SYMBOL vmlinux 0xc4b32cb2 flush_old_exec +EXPORT_SYMBOL vmlinux 0xc4e7d20c pm860x_page_bulk_read +EXPORT_SYMBOL vmlinux 0xc4f0006f phy_ethtool_get_eee +EXPORT_SYMBOL vmlinux 0xc50bab05 unregister_shrinker +EXPORT_SYMBOL vmlinux 0xc521f7b4 tty_port_close +EXPORT_SYMBOL vmlinux 0xc52e00fa acpi_bus_add +EXPORT_SYMBOL vmlinux 0xc543ef4a tcp_sendpage +EXPORT_SYMBOL vmlinux 0xc551b974 pcie_get_readrq +EXPORT_SYMBOL vmlinux 0xc5534d64 ioread16 +EXPORT_SYMBOL vmlinux 0xc558530d profile_pc +EXPORT_SYMBOL vmlinux 0xc5c89993 kthread_create_on_node +EXPORT_SYMBOL vmlinux 0xc5d79648 serio_interrupt +EXPORT_SYMBOL vmlinux 0xc5d9c46c agp_try_unsupported_boot +EXPORT_SYMBOL vmlinux 0xc5e02d03 files_lglock +EXPORT_SYMBOL vmlinux 0xc5e229dd bio_sector_offset +EXPORT_SYMBOL vmlinux 0xc5ec1172 ppp_input_error +EXPORT_SYMBOL vmlinux 0xc631580a console_unlock +EXPORT_SYMBOL vmlinux 0xc65abeb7 agp3_generic_sizes +EXPORT_SYMBOL vmlinux 0xc666a132 crc_t10dif +EXPORT_SYMBOL vmlinux 0xc66d1998 vlan_vid_add +EXPORT_SYMBOL vmlinux 0xc6936426 pci_choose_state +EXPORT_SYMBOL vmlinux 0xc6a66180 rwsem_wake +EXPORT_SYMBOL vmlinux 0xc6b52240 blk_queue_dma_pad +EXPORT_SYMBOL vmlinux 0xc6cb465a __kfifo_max_r +EXPORT_SYMBOL vmlinux 0xc6cbbc89 capable +EXPORT_SYMBOL vmlinux 0xc6d1f4ee sk_free +EXPORT_SYMBOL vmlinux 0xc6dee43a simple_rmdir +EXPORT_SYMBOL vmlinux 0xc6e3b1a8 acpi_bus_unregister_driver +EXPORT_SYMBOL vmlinux 0xc6f23424 cdrom_media_changed +EXPORT_SYMBOL vmlinux 0xc702156b param_get_ushort +EXPORT_SYMBOL vmlinux 0xc7208c3a serial8250_resume_port +EXPORT_SYMBOL vmlinux 0xc7380f73 scsi_cmd_get_serial +EXPORT_SYMBOL vmlinux 0xc76c8ee8 pcix_get_mmrbc +EXPORT_SYMBOL vmlinux 0xc781bd9f rfkill_resume_polling +EXPORT_SYMBOL vmlinux 0xc78872ae block_is_partially_uptodate +EXPORT_SYMBOL vmlinux 0xc797e9ef sock_common_setsockopt +EXPORT_SYMBOL vmlinux 0xc79bcd36 dm_vcalloc +EXPORT_SYMBOL vmlinux 0xc7a4fbed rtnl_lock +EXPORT_SYMBOL vmlinux 0xc8023cb9 dquot_claim_space_nodirty +EXPORT_SYMBOL vmlinux 0xc807a56d inet_csk_clear_xmit_timers +EXPORT_SYMBOL vmlinux 0xc81f8f64 mmc_card_sleep +EXPORT_SYMBOL vmlinux 0xc822f9b3 dst_discard +EXPORT_SYMBOL vmlinux 0xc83362ca generic_readlink +EXPORT_SYMBOL vmlinux 0xc842791b devm_gpio_request +EXPORT_SYMBOL vmlinux 0xc84513d1 abx500_set_register_interruptible +EXPORT_SYMBOL vmlinux 0xc84a0a7e seq_hlist_start_rcu +EXPORT_SYMBOL vmlinux 0xc8699170 tcf_hash_insert +EXPORT_SYMBOL vmlinux 0xc87823bf twl_i2c_read_u8 +EXPORT_SYMBOL vmlinux 0xc885cdd8 amd_iommu_domain_clear_gcr3 +EXPORT_SYMBOL vmlinux 0xc889dae7 simple_transaction_get +EXPORT_SYMBOL vmlinux 0xc897c382 sg_init_table +EXPORT_SYMBOL vmlinux 0xc8a14504 udp_lib_setsockopt +EXPORT_SYMBOL vmlinux 0xc8ab31f2 sock_from_file +EXPORT_SYMBOL vmlinux 0xc8b57c27 autoremove_wake_function +EXPORT_SYMBOL vmlinux 0xc8eaae86 scm_detach_fds +EXPORT_SYMBOL vmlinux 0xc8f7a48d deactivate_super +EXPORT_SYMBOL vmlinux 0xc8fcf108 dev_activate +EXPORT_SYMBOL vmlinux 0xc91938cc dma_async_memcpy_pg_to_pg +EXPORT_SYMBOL vmlinux 0xc9269c63 locks_mandatory_area +EXPORT_SYMBOL vmlinux 0xc9286f50 input_close_device +EXPORT_SYMBOL vmlinux 0xc92eeba2 pci_iomap +EXPORT_SYMBOL vmlinux 0xc93c3a4e __breadahead +EXPORT_SYMBOL vmlinux 0xc95c980b scsi_is_sdev_device +EXPORT_SYMBOL vmlinux 0xc978479a xz_dec_run +EXPORT_SYMBOL vmlinux 0xc996d097 del_timer +EXPORT_SYMBOL vmlinux 0xc99e1d1b devm_free_irq +EXPORT_SYMBOL vmlinux 0xc99e2a55 twl_rev +EXPORT_SYMBOL vmlinux 0xc9a7e3e7 blk_stack_limits +EXPORT_SYMBOL vmlinux 0xc9ab8834 pci_prepare_to_sleep +EXPORT_SYMBOL vmlinux 0xca03e369 notify_change +EXPORT_SYMBOL vmlinux 0xca0c6766 scsi_init_io +EXPORT_SYMBOL vmlinux 0xca1b03ac dev_mc_flush +EXPORT_SYMBOL vmlinux 0xca21d04e truncate_pagecache_range +EXPORT_SYMBOL vmlinux 0xca22efdb mount_pseudo +EXPORT_SYMBOL vmlinux 0xca2a8a36 setup_new_exec +EXPORT_SYMBOL vmlinux 0xca4ca404 gen_pool_create +EXPORT_SYMBOL vmlinux 0xca54082e scsi_register +EXPORT_SYMBOL vmlinux 0xca5dbc50 scsi_print_sense_hdr +EXPORT_SYMBOL vmlinux 0xca67c6cb seq_read +EXPORT_SYMBOL vmlinux 0xca6b9609 i2c_get_adapter +EXPORT_SYMBOL vmlinux 0xca7a252a remove_proc_entry +EXPORT_SYMBOL vmlinux 0xca8acc78 acpi_dbg_level +EXPORT_SYMBOL vmlinux 0xca9360b5 rb_next +EXPORT_SYMBOL vmlinux 0xcab65ccd __sk_backlog_rcv +EXPORT_SYMBOL vmlinux 0xcac5bfbb bfifo_qdisc_ops +EXPORT_SYMBOL vmlinux 0xcad21c9b blk_peek_request +EXPORT_SYMBOL vmlinux 0xcafa1f40 md_set_array_sectors +EXPORT_SYMBOL vmlinux 0xcb0288ea ledtrig_cpu +EXPORT_SYMBOL vmlinux 0xcb2316fa unregister_exec_domain +EXPORT_SYMBOL vmlinux 0xcb25da8a scsi_bios_ptable +EXPORT_SYMBOL vmlinux 0xcb40e147 write_one_page +EXPORT_SYMBOL vmlinux 0xcb4276c6 pcim_iomap_regions_request_all +EXPORT_SYMBOL vmlinux 0xcb56928c __lock_page +EXPORT_SYMBOL vmlinux 0xcb69c9eb padata_do_parallel +EXPORT_SYMBOL vmlinux 0xcb7131fb fb_get_options +EXPORT_SYMBOL vmlinux 0xcb733bf2 acpi_bus_set_power +EXPORT_SYMBOL vmlinux 0xcbac7f1e generic_file_buffered_write +EXPORT_SYMBOL vmlinux 0xcbae288f blk_queue_update_dma_pad +EXPORT_SYMBOL vmlinux 0xcbb97cc0 generic_delete_inode +EXPORT_SYMBOL vmlinux 0xcbc9557f unregister_sysrq_key +EXPORT_SYMBOL vmlinux 0xcbdbb0b7 fsnotify_add_mark +EXPORT_SYMBOL vmlinux 0xcbeac33d blkdev_put +EXPORT_SYMBOL vmlinux 0xcbeb4ef5 bitmap_end_sync +EXPORT_SYMBOL vmlinux 0xcc100ac2 register_xen_selfballooning +EXPORT_SYMBOL vmlinux 0xcc193092 skb_gso_segment +EXPORT_SYMBOL vmlinux 0xcc248d26 serial8250_suspend_port +EXPORT_SYMBOL vmlinux 0xcc36f32e fb_unregister_client +EXPORT_SYMBOL vmlinux 0xcc37f55c blk_limits_io_opt +EXPORT_SYMBOL vmlinux 0xcc5005fe msleep_interruptible +EXPORT_SYMBOL vmlinux 0xcc64cad1 ip_cmsg_recv +EXPORT_SYMBOL vmlinux 0xcc74304d fsnotify_alloc_group +EXPORT_SYMBOL vmlinux 0xcc783a38 dquot_initialize +EXPORT_SYMBOL vmlinux 0xcc7b9ef1 put_disk +EXPORT_SYMBOL vmlinux 0xcc7fa952 local_bh_enable_ip +EXPORT_SYMBOL vmlinux 0xccc21f5e input_get_new_minor +EXPORT_SYMBOL vmlinux 0xccca4c4b __quota_error +EXPORT_SYMBOL vmlinux 0xccdb5481 pskb_expand_head +EXPORT_SYMBOL vmlinux 0xcce7f013 misc_register +EXPORT_SYMBOL vmlinux 0xccf3e318 dentry_open +EXPORT_SYMBOL vmlinux 0xccf8dd10 pci_get_domain_bus_and_slot +EXPORT_SYMBOL vmlinux 0xccfcbff4 mutex_unlock +EXPORT_SYMBOL vmlinux 0xcd04ee65 end_buffer_read_sync +EXPORT_SYMBOL vmlinux 0xcd20667a kstrtou16_from_user +EXPORT_SYMBOL vmlinux 0xcd279169 nla_find +EXPORT_SYMBOL vmlinux 0xcd339e71 phy_connect +EXPORT_SYMBOL vmlinux 0xcd3bc598 __wait_on_bit +EXPORT_SYMBOL vmlinux 0xcd478ac9 journal_force_commit +EXPORT_SYMBOL vmlinux 0xcd92004c _dev_info +EXPORT_SYMBOL vmlinux 0xcdba84d9 filemap_page_mkwrite +EXPORT_SYMBOL vmlinux 0xcdc5b76f spi_display_xfer_agreement +EXPORT_SYMBOL vmlinux 0xcdd239a9 scsi_remove_host +EXPORT_SYMBOL vmlinux 0xcde172ac radix_tree_gang_lookup_tag_slot +EXPORT_SYMBOL vmlinux 0xce19bac5 register_inet6addr_notifier +EXPORT_SYMBOL vmlinux 0xce2840e7 irq_set_irq_wake +EXPORT_SYMBOL vmlinux 0xce43e552 sdev_disable_disk_events +EXPORT_SYMBOL vmlinux 0xce4904a4 acpi_leave_sleep_state +EXPORT_SYMBOL vmlinux 0xce4b74a4 skb_queue_tail +EXPORT_SYMBOL vmlinux 0xce4e47b6 __kfifo_skip_r +EXPORT_SYMBOL vmlinux 0xce5a54ce tcf_hash_release +EXPORT_SYMBOL vmlinux 0xce5ac24f zlib_inflate_workspacesize +EXPORT_SYMBOL vmlinux 0xce6859b7 bmap +EXPORT_SYMBOL vmlinux 0xceaa5086 nobh_write_begin +EXPORT_SYMBOL vmlinux 0xceb523bc blk_init_tags +EXPORT_SYMBOL vmlinux 0xceb962ea d_alloc +EXPORT_SYMBOL vmlinux 0xcec1da2c devm_gpio_free +EXPORT_SYMBOL vmlinux 0xced32722 put_io_context +EXPORT_SYMBOL vmlinux 0xcef51982 kstrtou16 +EXPORT_SYMBOL vmlinux 0xcefcd99a serial8250_unregister_port +EXPORT_SYMBOL vmlinux 0xcf0abf68 jbd2_journal_check_available_features +EXPORT_SYMBOL vmlinux 0xcf13771a sock_init_data +EXPORT_SYMBOL vmlinux 0xcf1c56e8 vfs_getattr +EXPORT_SYMBOL vmlinux 0xcf1d28ab acpi_error +EXPORT_SYMBOL vmlinux 0xcf21d241 __wake_up +EXPORT_SYMBOL vmlinux 0xcf26cb7d inet_rtx_syn_ack +EXPORT_SYMBOL vmlinux 0xcf3371ab compat_tcp_setsockopt +EXPORT_SYMBOL vmlinux 0xcf5e2c07 try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xcf6cfe1f msrs_free +EXPORT_SYMBOL vmlinux 0xcf8a4bf6 padata_do_serial +EXPORT_SYMBOL vmlinux 0xcfb76c0a idr_init +EXPORT_SYMBOL vmlinux 0xcfcf631d blk_get_queue +EXPORT_SYMBOL vmlinux 0xcfe7777a dentry_path_raw +EXPORT_SYMBOL vmlinux 0xd00174c2 audit_log_task_info +EXPORT_SYMBOL vmlinux 0xd0181f4f __bitmap_xor +EXPORT_SYMBOL vmlinux 0xd0298b8b proc_dointvec_minmax +EXPORT_SYMBOL vmlinux 0xd02af29b __seq_open_private +EXPORT_SYMBOL vmlinux 0xd0348af7 page_follow_link_light +EXPORT_SYMBOL vmlinux 0xd051bc75 pcie_capability_clear_and_set_dword +EXPORT_SYMBOL vmlinux 0xd05a119e proc_symlink +EXPORT_SYMBOL vmlinux 0xd067fc5c proc_dointvec +EXPORT_SYMBOL vmlinux 0xd0720a17 on_each_cpu_cond +EXPORT_SYMBOL vmlinux 0xd07d5a38 init_buffer +EXPORT_SYMBOL vmlinux 0xd08197fa acpi_load_tables +EXPORT_SYMBOL vmlinux 0xd0820dfb jbd2_journal_lock_updates +EXPORT_SYMBOL vmlinux 0xd0a91bab skip_spaces +EXPORT_SYMBOL vmlinux 0xd0b4efe2 elv_rb_add +EXPORT_SYMBOL vmlinux 0xd0bd4602 finish_open +EXPORT_SYMBOL vmlinux 0xd0c59eeb posix_lock_file_wait +EXPORT_SYMBOL vmlinux 0xd0d0aa72 acpi_processor_preregister_performance +EXPORT_SYMBOL vmlinux 0xd0d1b52d tty_free_termios +EXPORT_SYMBOL vmlinux 0xd0d42c42 mod_timer_pending +EXPORT_SYMBOL vmlinux 0xd0dc49e4 blkdev_issue_write_same +EXPORT_SYMBOL vmlinux 0xd0ee38b8 schedule_timeout_uninterruptible +EXPORT_SYMBOL vmlinux 0xd0f36f0d audit_log_format +EXPORT_SYMBOL vmlinux 0xd0fb7cd4 __tasklet_hi_schedule_first +EXPORT_SYMBOL vmlinux 0xd0fef3b2 agp_free_key +EXPORT_SYMBOL vmlinux 0xd11c0dc1 __kernel_param_unlock +EXPORT_SYMBOL vmlinux 0xd130b205 pci_enable_device_mem +EXPORT_SYMBOL vmlinux 0xd1402817 bdi_register +EXPORT_SYMBOL vmlinux 0xd16295fb input_mt_report_slot_state +EXPORT_SYMBOL vmlinux 0xd1816f32 frontswap_writethrough +EXPORT_SYMBOL vmlinux 0xd188c2f3 pci_request_selected_regions_exclusive +EXPORT_SYMBOL vmlinux 0xd18b6eb2 acpi_unmap_lsapic +EXPORT_SYMBOL vmlinux 0xd1a122d5 input_alloc_absinfo +EXPORT_SYMBOL vmlinux 0xd1aad157 simple_readpage +EXPORT_SYMBOL vmlinux 0xd1be9ead swiotlb_map_sg_attrs +EXPORT_SYMBOL vmlinux 0xd1ee4cd0 sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xd1f6c5f3 smp_num_siblings +EXPORT_SYMBOL vmlinux 0xd2105ddf pnp_release_card_device +EXPORT_SYMBOL vmlinux 0xd220cf8a jiffies_to_timespec +EXPORT_SYMBOL vmlinux 0xd227892e sleep_on +EXPORT_SYMBOL vmlinux 0xd251d7b0 security_socket_getpeersec_dgram +EXPORT_SYMBOL vmlinux 0xd2555f19 jiffies_64_to_clock_t +EXPORT_SYMBOL vmlinux 0xd25d4f74 console_blank_hook +EXPORT_SYMBOL vmlinux 0xd272c027 devfreq_suspend_device +EXPORT_SYMBOL vmlinux 0xd27b25dd blk_check_plugged +EXPORT_SYMBOL vmlinux 0xd285feae prepare_kernel_cred +EXPORT_SYMBOL vmlinux 0xd290d7d8 nf_log_packet +EXPORT_SYMBOL vmlinux 0xd2933769 uart_get_baud_rate +EXPORT_SYMBOL vmlinux 0xd29e8427 sk_stream_error +EXPORT_SYMBOL vmlinux 0xd29ebb1d lock_sock_nested +EXPORT_SYMBOL vmlinux 0xd2a0941e unregister_netdevice_queue +EXPORT_SYMBOL vmlinux 0xd2a75ee0 dmi_first_match +EXPORT_SYMBOL vmlinux 0xd2b09ce5 __kmalloc +EXPORT_SYMBOL vmlinux 0xd2c7efe5 block_read_full_page +EXPORT_SYMBOL vmlinux 0xd2d238a6 bitmap_unplug +EXPORT_SYMBOL vmlinux 0xd2d4fbea inode_needs_sync +EXPORT_SYMBOL vmlinux 0xd2d54e4c d_delete +EXPORT_SYMBOL vmlinux 0xd2dc768c pm860x_reg_write +EXPORT_SYMBOL vmlinux 0xd2ef84c3 nla_put +EXPORT_SYMBOL vmlinux 0xd2f1b260 interruptible_sleep_on +EXPORT_SYMBOL vmlinux 0xd30d6b30 amd_northbridges +EXPORT_SYMBOL vmlinux 0xd31b06b2 page_zero_new_buffers +EXPORT_SYMBOL vmlinux 0xd32b160b sock_wfree +EXPORT_SYMBOL vmlinux 0xd3331585 mmc_resume_host +EXPORT_SYMBOL vmlinux 0xd34ce671 shrink_dcache_parent +EXPORT_SYMBOL vmlinux 0xd35e249a _raw_read_lock_irq +EXPORT_SYMBOL vmlinux 0xd36257ba memcpy_toiovecend +EXPORT_SYMBOL vmlinux 0xd36d850e filemap_fdatawrite +EXPORT_SYMBOL vmlinux 0xd36ee784 netif_rx +EXPORT_SYMBOL vmlinux 0xd38d26db blk_queue_update_dma_alignment +EXPORT_SYMBOL vmlinux 0xd3b25924 inode_get_bytes +EXPORT_SYMBOL vmlinux 0xd3c2c8c6 serio_unregister_driver +EXPORT_SYMBOL vmlinux 0xd3c9801c netif_carrier_on +EXPORT_SYMBOL vmlinux 0xd3d3a477 posix_acl_init +EXPORT_SYMBOL vmlinux 0xd3dcab0b flex_array_alloc +EXPORT_SYMBOL vmlinux 0xd412bfc0 blk_queue_start_tag +EXPORT_SYMBOL vmlinux 0xd4328030 pagevec_lookup +EXPORT_SYMBOL vmlinux 0xd439875c devm_usb_get_phy +EXPORT_SYMBOL vmlinux 0xd44918c1 blk_delay_queue +EXPORT_SYMBOL vmlinux 0xd4608d6f dma_ops +EXPORT_SYMBOL vmlinux 0xd467a8eb qdisc_tree_decrease_qlen +EXPORT_SYMBOL vmlinux 0xd46c89ba pcix_set_mmrbc +EXPORT_SYMBOL vmlinux 0xd4711236 cancel_delayed_work_sync +EXPORT_SYMBOL vmlinux 0xd4a23aae journal_stop +EXPORT_SYMBOL vmlinux 0xd4a7d912 ip_fragment +EXPORT_SYMBOL vmlinux 0xd4baff78 compat_ip_setsockopt +EXPORT_SYMBOL vmlinux 0xd4c1011f arp_create +EXPORT_SYMBOL vmlinux 0xd4edeb04 cpu_core_map +EXPORT_SYMBOL vmlinux 0xd4ffa484 acpi_initialize_subsystem +EXPORT_SYMBOL vmlinux 0xd50fef48 acpi_detach_data +EXPORT_SYMBOL vmlinux 0xd51e016f dev_set_group +EXPORT_SYMBOL vmlinux 0xd52bf1ce _raw_spin_lock +EXPORT_SYMBOL vmlinux 0xd549338b inet_sk_rx_dst_set +EXPORT_SYMBOL vmlinux 0xd54a70a2 from_kqid_munged +EXPORT_SYMBOL vmlinux 0xd5583c0a ip4_datagram_connect +EXPORT_SYMBOL vmlinux 0xd5901625 sock_get_timestamp +EXPORT_SYMBOL vmlinux 0xd59b8000 skb_put +EXPORT_SYMBOL vmlinux 0xd59ed6e6 generic_file_splice_read +EXPORT_SYMBOL vmlinux 0xd5cc469a tcp_recvmsg +EXPORT_SYMBOL vmlinux 0xd5f2172f del_timer_sync +EXPORT_SYMBOL vmlinux 0xd60f196b __nlmsg_put +EXPORT_SYMBOL vmlinux 0xd611bca3 completion_done +EXPORT_SYMBOL vmlinux 0xd616683a ecryptfs_fill_auth_tok +EXPORT_SYMBOL vmlinux 0xd62c833f schedule_timeout +EXPORT_SYMBOL vmlinux 0xd6303554 cfb_fillrect +EXPORT_SYMBOL vmlinux 0xd63682b9 tcp_sync_mss +EXPORT_SYMBOL vmlinux 0xd648e564 fb_match_mode +EXPORT_SYMBOL vmlinux 0xd68c9aad mmc_add_host +EXPORT_SYMBOL vmlinux 0xd68dd86f kill_pid +EXPORT_SYMBOL vmlinux 0xd6ab34a4 pci_write_vpd +EXPORT_SYMBOL vmlinux 0xd6b33026 cpu_khz +EXPORT_SYMBOL vmlinux 0xd6b92d85 pci_find_next_bus +EXPORT_SYMBOL vmlinux 0xd6c2ecef init_task +EXPORT_SYMBOL vmlinux 0xd6cfc774 register_exec_domain +EXPORT_SYMBOL vmlinux 0xd6e35576 tty_lock_pair +EXPORT_SYMBOL vmlinux 0xd6ee688f vmalloc +EXPORT_SYMBOL vmlinux 0xd6eeb65c save_mount_options +EXPORT_SYMBOL vmlinux 0xd7007c82 tcf_exts_validate +EXPORT_SYMBOL vmlinux 0xd747f3a0 jbd2_journal_clear_features +EXPORT_SYMBOL vmlinux 0xd75c79df smp_call_function +EXPORT_SYMBOL vmlinux 0xd75d35b9 tcp_prot +EXPORT_SYMBOL vmlinux 0xd764127b seq_lseek +EXPORT_SYMBOL vmlinux 0xd7701e08 sg_miter_next +EXPORT_SYMBOL vmlinux 0xd77191d6 pm860x_bulk_read +EXPORT_SYMBOL vmlinux 0xd77a26ea skb_add_rx_frag +EXPORT_SYMBOL vmlinux 0xd77a5aa5 __bitmap_and +EXPORT_SYMBOL vmlinux 0xd79b5a02 allow_signal +EXPORT_SYMBOL vmlinux 0xd7aaede5 simple_transaction_read +EXPORT_SYMBOL vmlinux 0xd7cbddda memcpy_toiovec +EXPORT_SYMBOL vmlinux 0xd7dd777b reserve_perfctr_nmi +EXPORT_SYMBOL vmlinux 0xd7e56a4e simple_strtoll +EXPORT_SYMBOL vmlinux 0xd7ea7094 nf_unregister_queue_handler +EXPORT_SYMBOL vmlinux 0xd7ef0ddb ppp_unregister_compressor +EXPORT_SYMBOL vmlinux 0xd804e077 netif_device_attach +EXPORT_SYMBOL vmlinux 0xd886a24c commit_creds +EXPORT_SYMBOL vmlinux 0xd89da37f movable_zone +EXPORT_SYMBOL vmlinux 0xd8aece41 nf_hook_slow +EXPORT_SYMBOL vmlinux 0xd8b534c7 sock_alloc_send_skb +EXPORT_SYMBOL vmlinux 0xd8c28c67 gnet_stats_finish_copy +EXPORT_SYMBOL vmlinux 0xd8c9aff5 neigh_resolve_output +EXPORT_SYMBOL vmlinux 0xd8d8e9ab genphy_restart_aneg +EXPORT_SYMBOL vmlinux 0xd8dc5113 blk_stop_queue +EXPORT_SYMBOL vmlinux 0xd8e484f0 register_chrdev_region +EXPORT_SYMBOL vmlinux 0xd8f54ffa copy_strings_kernel +EXPORT_SYMBOL vmlinux 0xd9091363 acpi_install_notify_handler +EXPORT_SYMBOL vmlinux 0xd9133651 kill_fasync +EXPORT_SYMBOL vmlinux 0xd91ea38c x86_hyper_xen_hvm +EXPORT_SYMBOL vmlinux 0xd9219e98 dev_alert +EXPORT_SYMBOL vmlinux 0xd927febe remap_vmalloc_range +EXPORT_SYMBOL vmlinux 0xd92afabe bitmap_clear +EXPORT_SYMBOL vmlinux 0xd92e16ba csum_partial_copy_fromiovecend +EXPORT_SYMBOL vmlinux 0xd94322e7 acpi_evaluate_reference +EXPORT_SYMBOL vmlinux 0xd95a33fd __cleancache_init_shared_fs +EXPORT_SYMBOL vmlinux 0xd969b2c7 amd_e400_c1e_detected +EXPORT_SYMBOL vmlinux 0xd970225c input_grab_device +EXPORT_SYMBOL vmlinux 0xd9710a6b filp_open +EXPORT_SYMBOL vmlinux 0xd985dc99 mempool_free_pages +EXPORT_SYMBOL vmlinux 0xd98c881e devfreq_add_governor +EXPORT_SYMBOL vmlinux 0xd9a9bb30 getname +EXPORT_SYMBOL vmlinux 0xd9b51edf ip6_route_output +EXPORT_SYMBOL vmlinux 0xd9e61fcb qid_valid +EXPORT_SYMBOL vmlinux 0xd9f0138e mfd_cell_disable +EXPORT_SYMBOL vmlinux 0xd9ff306d proc_mkdir +EXPORT_SYMBOL vmlinux 0xda0a6b0e acpi_map_lsapic +EXPORT_SYMBOL vmlinux 0xda23aec0 bio_copy_kern +EXPORT_SYMBOL vmlinux 0xda3d10a8 security_tun_dev_open +EXPORT_SYMBOL vmlinux 0xda4f9e19 kill_bdev +EXPORT_SYMBOL vmlinux 0xda602242 phy_drivers_register +EXPORT_SYMBOL vmlinux 0xda74d57b kill_litter_super +EXPORT_SYMBOL vmlinux 0xda7a3abb xfrm_policy_unregister_afinfo +EXPORT_SYMBOL vmlinux 0xda7ca6cb fb_mode_is_equal +EXPORT_SYMBOL vmlinux 0xda8af7ad fb_find_nearest_mode +EXPORT_SYMBOL vmlinux 0xdaad3595 __napi_schedule +EXPORT_SYMBOL vmlinux 0xdab6d725 dev_get_by_name +EXPORT_SYMBOL vmlinux 0xdac0d64f sock_update_classid +EXPORT_SYMBOL vmlinux 0xdaea6e0d mfd_clone_cell +EXPORT_SYMBOL vmlinux 0xdafaf9d8 scsi_free_host_dev +EXPORT_SYMBOL vmlinux 0xdb50a5a1 textsearch_unregister +EXPORT_SYMBOL vmlinux 0xdb5aef54 spi_attach_transport +EXPORT_SYMBOL vmlinux 0xdb68bbad rfkill_destroy +EXPORT_SYMBOL vmlinux 0xdb6f7eed serio_unregister_child_port +EXPORT_SYMBOL vmlinux 0xdb708b93 mark_page_accessed +EXPORT_SYMBOL vmlinux 0xdb760f52 __kfifo_free +EXPORT_SYMBOL vmlinux 0xdbb56b1f tcp_getsockopt +EXPORT_SYMBOL vmlinux 0xdbcd416e sysctl_ip_nonlocal_bind +EXPORT_SYMBOL vmlinux 0xdbd6731f mmc_stop_bkops +EXPORT_SYMBOL vmlinux 0xdc047fc4 scsi_dev_info_list_add_keyed +EXPORT_SYMBOL vmlinux 0xdc14eda7 pci_pci_problems +EXPORT_SYMBOL vmlinux 0xdc2adb35 add_taint +EXPORT_SYMBOL vmlinux 0xdc3fcbc9 __sw_hweight8 +EXPORT_SYMBOL vmlinux 0xdc435d42 insert_inode_locked +EXPORT_SYMBOL vmlinux 0xdc534793 skb_recv_datagram +EXPORT_SYMBOL vmlinux 0xdc57f532 acpi_install_gpe_handler +EXPORT_SYMBOL vmlinux 0xdc6d41cf vfs_fstatat +EXPORT_SYMBOL vmlinux 0xdc6e9b25 thaw_super +EXPORT_SYMBOL vmlinux 0xdc8110c9 padata_stop +EXPORT_SYMBOL vmlinux 0xdc8d1dde _raw_spin_trylock_bh +EXPORT_SYMBOL vmlinux 0xdcb0349b sys_close +EXPORT_SYMBOL vmlinux 0xdcb385ab input_unregister_handle +EXPORT_SYMBOL vmlinux 0xdccd6a36 ip_options_rcv_srr +EXPORT_SYMBOL vmlinux 0xdcd86e7e simple_write_begin +EXPORT_SYMBOL vmlinux 0xdd003ba3 ata_ap_acpi_handle +EXPORT_SYMBOL vmlinux 0xdd14c0ce con_is_bound +EXPORT_SYMBOL vmlinux 0xdd1c65f6 blk_finish_plug +EXPORT_SYMBOL vmlinux 0xdd332624 fsnotify_destroy_mark +EXPORT_SYMBOL vmlinux 0xdd3d1c14 mmc_gpio_get_ro +EXPORT_SYMBOL vmlinux 0xdd46b1a8 backlight_device_unregister +EXPORT_SYMBOL vmlinux 0xdd4a5569 param_get_byte +EXPORT_SYMBOL vmlinux 0xdd69310f bioset_free +EXPORT_SYMBOL vmlinux 0xdd6aa18b d_find_any_alias +EXPORT_SYMBOL vmlinux 0xdd8f9fb4 tcp_init_xmit_timers +EXPORT_SYMBOL vmlinux 0xdda4f302 nf_reinject +EXPORT_SYMBOL vmlinux 0xddc0bbd4 napi_complete +EXPORT_SYMBOL vmlinux 0xddc6146c input_register_handler +EXPORT_SYMBOL vmlinux 0xddf8dbbc pm8606_osc_disable +EXPORT_SYMBOL vmlinux 0xde16dc16 tboot +EXPORT_SYMBOL vmlinux 0xde236059 splice_from_pipe_feed +EXPORT_SYMBOL vmlinux 0xde37fdd7 pci_scan_root_bus +EXPORT_SYMBOL vmlinux 0xde4bf459 serio_rescan +EXPORT_SYMBOL vmlinux 0xde582b79 __neigh_for_each_release +EXPORT_SYMBOL vmlinux 0xde612288 netif_set_real_num_tx_queues +EXPORT_SYMBOL vmlinux 0xde6151db tcp_memory_allocated +EXPORT_SYMBOL vmlinux 0xde651bc9 follow_pfn +EXPORT_SYMBOL vmlinux 0xde7e0307 amd_iommu_device_info +EXPORT_SYMBOL vmlinux 0xde83ac61 skb_pad +EXPORT_SYMBOL vmlinux 0xde9360ba totalram_pages +EXPORT_SYMBOL vmlinux 0xde95ad4d udp_poll +EXPORT_SYMBOL vmlinux 0xde96988d i2c_verify_adapter +EXPORT_SYMBOL vmlinux 0xde9b17ed agp3_generic_fetch_size +EXPORT_SYMBOL vmlinux 0xdeadd751 find_get_pages_tag +EXPORT_SYMBOL vmlinux 0xdeb1a4c5 blk_fetch_request +EXPORT_SYMBOL vmlinux 0xdecdfb86 fb_pan_display +EXPORT_SYMBOL vmlinux 0xdf0da3cc acpi_get_devices +EXPORT_SYMBOL vmlinux 0xdf2c2742 rb_last +EXPORT_SYMBOL vmlinux 0xdf2d2a09 blk_rq_init +EXPORT_SYMBOL vmlinux 0xdf31ba2b sync_blockdev +EXPORT_SYMBOL vmlinux 0xdf35395d dev_mc_unsync +EXPORT_SYMBOL vmlinux 0xdf38e18b agp_bridge +EXPORT_SYMBOL vmlinux 0xdf48a0eb flex_array_put +EXPORT_SYMBOL vmlinux 0xdf60cc27 __print_symbol +EXPORT_SYMBOL vmlinux 0xdf644556 bio_reset +EXPORT_SYMBOL vmlinux 0xdf6d8afb setattr_copy +EXPORT_SYMBOL vmlinux 0xdf7b216f mmc_register_driver +EXPORT_SYMBOL vmlinux 0xdf8c695a __ndelay +EXPORT_SYMBOL vmlinux 0xdf929370 fs_overflowgid +EXPORT_SYMBOL vmlinux 0xdf9bb24e sock_no_getsockopt +EXPORT_SYMBOL vmlinux 0xdfa5cc6b ip_generic_getfrag +EXPORT_SYMBOL vmlinux 0xdfb1f28c ip_queue_xmit +EXPORT_SYMBOL vmlinux 0xdfc5169b slhc_init +EXPORT_SYMBOL vmlinux 0xdfd6daa8 dev_mc_add +EXPORT_SYMBOL vmlinux 0xe01ce407 vga_switcheroo_unregister_client +EXPORT_SYMBOL vmlinux 0xe04ddd6f udp_lib_get_port +EXPORT_SYMBOL vmlinux 0xe04f7caa dm_read_arg_group +EXPORT_SYMBOL vmlinux 0xe06141e9 security_sk_clone +EXPORT_SYMBOL vmlinux 0xe064eb14 inetpeer_invalidate_tree +EXPORT_SYMBOL vmlinux 0xe0654ed2 dev_uc_add_excl +EXPORT_SYMBOL vmlinux 0xe06e4199 cpu_all_bits +EXPORT_SYMBOL vmlinux 0xe06f7f68 register_con_driver +EXPORT_SYMBOL vmlinux 0xe075d6eb iter_div_u64_rem +EXPORT_SYMBOL vmlinux 0xe0765302 simple_dir_inode_operations +EXPORT_SYMBOL vmlinux 0xe08e371b dev_getfirstbyhwtype +EXPORT_SYMBOL vmlinux 0xe0ac8bd2 acpi_bus_generate_netlink_event +EXPORT_SYMBOL vmlinux 0xe0b13336 argv_free +EXPORT_SYMBOL vmlinux 0xe0ebaf91 fget_raw +EXPORT_SYMBOL vmlinux 0xe0f38583 release_pages +EXPORT_SYMBOL vmlinux 0xe113bbbc csum_partial +EXPORT_SYMBOL vmlinux 0xe11553b2 pcibios_bus_to_resource +EXPORT_SYMBOL vmlinux 0xe121bc12 mii_check_media +EXPORT_SYMBOL vmlinux 0xe1255700 eth_change_mtu +EXPORT_SYMBOL vmlinux 0xe135cc7c tcp_enter_memory_pressure +EXPORT_SYMBOL vmlinux 0xe13cd8a7 dmi_name_in_vendors +EXPORT_SYMBOL vmlinux 0xe147d78e seq_bitmap_list +EXPORT_SYMBOL vmlinux 0xe15de6c7 inet_frags_fini +EXPORT_SYMBOL vmlinux 0xe15f42bb _raw_spin_trylock +EXPORT_SYMBOL vmlinux 0xe1761617 security_inet_conn_request +EXPORT_SYMBOL vmlinux 0xe1796c19 i8042_check_port_owner +EXPORT_SYMBOL vmlinux 0xe186d2f9 __pagevec_release +EXPORT_SYMBOL vmlinux 0xe1976e5d neigh_lookup +EXPORT_SYMBOL vmlinux 0xe1c6ee9b set_page_dirty_lock +EXPORT_SYMBOL vmlinux 0xe200d2d5 param_get_uint +EXPORT_SYMBOL vmlinux 0xe200f872 secure_dccpv6_sequence_number +EXPORT_SYMBOL vmlinux 0xe20f29fc journal_revoke +EXPORT_SYMBOL vmlinux 0xe21625bd usb_put_phy +EXPORT_SYMBOL vmlinux 0xe21634a4 sk_release_kernel +EXPORT_SYMBOL vmlinux 0xe233ecfd mmc_start_req +EXPORT_SYMBOL vmlinux 0xe238723a usb_add_phy +EXPORT_SYMBOL vmlinux 0xe23ae481 blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe24d3a97 jiffies_64 +EXPORT_SYMBOL vmlinux 0xe2554414 input_open_device +EXPORT_SYMBOL vmlinux 0xe25af7a8 sb_min_blocksize +EXPORT_SYMBOL vmlinux 0xe25e980a set_pages_uc +EXPORT_SYMBOL vmlinux 0xe26f3fdd ip_mc_inc_group +EXPORT_SYMBOL vmlinux 0xe28795d7 irq_to_desc +EXPORT_SYMBOL vmlinux 0xe29b04e9 acpi_set_firmware_waking_vector64 +EXPORT_SYMBOL vmlinux 0xe2abc3d9 locks_init_lock +EXPORT_SYMBOL vmlinux 0xe2cfb038 __cond_resched_lock +EXPORT_SYMBOL vmlinux 0xe2d5255a strcmp +EXPORT_SYMBOL vmlinux 0xe2dba07b inet_confirm_addr +EXPORT_SYMBOL vmlinux 0xe2ed8b09 skb_realloc_headroom +EXPORT_SYMBOL vmlinux 0xe3002f6b acpi_bus_start +EXPORT_SYMBOL vmlinux 0xe302be2a jbd2_journal_clear_err +EXPORT_SYMBOL vmlinux 0xe30624b3 devm_ioremap +EXPORT_SYMBOL vmlinux 0xe30a9e99 release_firmware +EXPORT_SYMBOL vmlinux 0xe319eb24 acpi_pci_osc_control_set +EXPORT_SYMBOL vmlinux 0xe3224113 pci_bus_write_config_word +EXPORT_SYMBOL vmlinux 0xe331f180 fail_migrate_page +EXPORT_SYMBOL vmlinux 0xe3479b45 mmc_wait_for_req +EXPORT_SYMBOL vmlinux 0xe357c19e page_symlink_inode_operations +EXPORT_SYMBOL vmlinux 0xe371d488 ip_mc_leave_group +EXPORT_SYMBOL vmlinux 0xe3a53f4c sort +EXPORT_SYMBOL vmlinux 0xe3d6c689 add_to_page_cache_locked +EXPORT_SYMBOL vmlinux 0xe3d6f284 fb_find_mode_cvt +EXPORT_SYMBOL vmlinux 0xe3d7ff51 delete_from_page_cache +EXPORT_SYMBOL vmlinux 0xe3e12008 __first_cpu +EXPORT_SYMBOL vmlinux 0xe3fbe148 acpi_install_table_handler +EXPORT_SYMBOL vmlinux 0xe4182331 dquot_drop +EXPORT_SYMBOL vmlinux 0xe4323074 tcp_poll +EXPORT_SYMBOL vmlinux 0xe4541209 scsi_finish_command +EXPORT_SYMBOL vmlinux 0xe45b7f7c pci_set_ltr +EXPORT_SYMBOL vmlinux 0xe4607dd9 flock_lock_file_wait +EXPORT_SYMBOL vmlinux 0xe463492e blk_rq_map_kern +EXPORT_SYMBOL vmlinux 0xe47626d1 prepare_binprm +EXPORT_SYMBOL vmlinux 0xe484e35f ioread32 +EXPORT_SYMBOL vmlinux 0xe4bc6174 rename_lock +EXPORT_SYMBOL vmlinux 0xe4c0d026 tcp_md5_do_add +EXPORT_SYMBOL vmlinux 0xe4c541b8 md_integrity_add_rdev +EXPORT_SYMBOL vmlinux 0xe4ca7378 neigh_direct_output +EXPORT_SYMBOL vmlinux 0xe50d9377 pci_vpd_truncate +EXPORT_SYMBOL vmlinux 0xe5122890 flow_cache_genid +EXPORT_SYMBOL vmlinux 0xe514d0e9 __ip_dev_find +EXPORT_SYMBOL vmlinux 0xe5208918 acpi_gbl_FADT +EXPORT_SYMBOL vmlinux 0xe521f19d arp_xmit +EXPORT_SYMBOL vmlinux 0xe523ad75 synchronize_irq +EXPORT_SYMBOL vmlinux 0xe52947e7 __phys_addr +EXPORT_SYMBOL vmlinux 0xe530d757 acpi_clear_gpe +EXPORT_SYMBOL vmlinux 0xe5554384 tcp_child_process +EXPORT_SYMBOL vmlinux 0xe559c8b3 sock_alloc_send_pskb +EXPORT_SYMBOL vmlinux 0xe55dd87c kmem_cache_alloc_trace +EXPORT_SYMBOL vmlinux 0xe5733ce5 skb_free_datagram_locked +EXPORT_SYMBOL vmlinux 0xe57878a1 in6_pton +EXPORT_SYMBOL vmlinux 0xe57b286c pci_bus_assign_resources +EXPORT_SYMBOL vmlinux 0xe5867808 dlci_ioctl_set +EXPORT_SYMBOL vmlinux 0xe58e82a6 dev_get_by_index +EXPORT_SYMBOL vmlinux 0xe599d0c8 end_buffer_async_write +EXPORT_SYMBOL vmlinux 0xe59b7e4c fget +EXPORT_SYMBOL vmlinux 0xe5b22e4a jbd2_journal_wipe +EXPORT_SYMBOL vmlinux 0xe5bec95c i8253_lock +EXPORT_SYMBOL vmlinux 0xe5c78a99 do_blank_screen +EXPORT_SYMBOL vmlinux 0xe5cc86bf tcf_hash_check +EXPORT_SYMBOL vmlinux 0xe5d95985 param_ops_ulong +EXPORT_SYMBOL vmlinux 0xe5ed5467 xfrm_policy_walk_init +EXPORT_SYMBOL vmlinux 0xe5f2337c __block_write_begin +EXPORT_SYMBOL vmlinux 0xe617240e md_check_no_bitmap +EXPORT_SYMBOL vmlinux 0xe64d98fe rdmsr_safe_regs +EXPORT_SYMBOL vmlinux 0xe64e44e5 tcp_md5_hash_skb_data +EXPORT_SYMBOL vmlinux 0xe654afd4 __scm_send +EXPORT_SYMBOL vmlinux 0xe67a675f xfrm_input_resume +EXPORT_SYMBOL vmlinux 0xe682afa1 ppp_dev_name +EXPORT_SYMBOL vmlinux 0xe697d108 __blk_iopoll_complete +EXPORT_SYMBOL vmlinux 0xe699c88d scsi_calculate_bounce_limit +EXPORT_SYMBOL vmlinux 0xe6a65602 sock_tx_timestamp +EXPORT_SYMBOL vmlinux 0xe6be7253 compat_sock_common_getsockopt +EXPORT_SYMBOL vmlinux 0xe6c19b11 bio_phys_segments +EXPORT_SYMBOL vmlinux 0xe6c4038a mmc_remove_host +EXPORT_SYMBOL vmlinux 0xe6d3c80a kfree_skb_partial +EXPORT_SYMBOL vmlinux 0xe6dd0ecf md_done_sync +EXPORT_SYMBOL vmlinux 0xe6e3b875 down_write +EXPORT_SYMBOL vmlinux 0xe6e713ba max8998_bulk_read +EXPORT_SYMBOL vmlinux 0xe6ed8340 acpi_bus_generate_proc_event +EXPORT_SYMBOL vmlinux 0xe6fb675c node_to_cpumask_map +EXPORT_SYMBOL vmlinux 0xe6fbe430 can_do_mlock +EXPORT_SYMBOL vmlinux 0xe716baed acpi_unregister_ioapic +EXPORT_SYMBOL vmlinux 0xe7323810 __xfrm_state_destroy +EXPORT_SYMBOL vmlinux 0xe738f2bc bio_integrity_clone +EXPORT_SYMBOL vmlinux 0xe760f979 filemap_write_and_wait +EXPORT_SYMBOL vmlinux 0xe7722171 flex_array_free +EXPORT_SYMBOL vmlinux 0xe789d538 twl6040_set_pll +EXPORT_SYMBOL vmlinux 0xe7a1a26e jbd2_journal_extend +EXPORT_SYMBOL vmlinux 0xe7a664c4 nf_hooks +EXPORT_SYMBOL vmlinux 0xe7a81967 audit_log_secctx +EXPORT_SYMBOL vmlinux 0xe7baac73 dquot_operations +EXPORT_SYMBOL vmlinux 0xe7d4daac seq_list_next +EXPORT_SYMBOL vmlinux 0xe80ce219 sysctl_tcp_dma_copybreak +EXPORT_SYMBOL vmlinux 0xe8262499 dev_addr_add +EXPORT_SYMBOL vmlinux 0xe83fcf94 block_page_mkwrite +EXPORT_SYMBOL vmlinux 0xe8794ce1 slhc_toss +EXPORT_SYMBOL vmlinux 0xe89a3442 posix_acl_to_xattr +EXPORT_SYMBOL vmlinux 0xe8a9cd94 ip6_expire_frag_queue +EXPORT_SYMBOL vmlinux 0xe8b50285 vfs_unlink +EXPORT_SYMBOL vmlinux 0xe8b61e44 nlmsg_notify +EXPORT_SYMBOL vmlinux 0xe8b63ace radix_tree_range_tag_if_tagged +EXPORT_SYMBOL vmlinux 0xe8b8984d dm_register_target +EXPORT_SYMBOL vmlinux 0xe8bea3bc qdisc_put_stab +EXPORT_SYMBOL vmlinux 0xe8c44d82 inet_proto_csum_replace4 +EXPORT_SYMBOL vmlinux 0xe8da34ba sock_no_bind +EXPORT_SYMBOL vmlinux 0xe8dbafef __next_cpu +EXPORT_SYMBOL vmlinux 0xe906f90a sock_register +EXPORT_SYMBOL vmlinux 0xe914e41e strcpy +EXPORT_SYMBOL vmlinux 0xe938a1a6 __generic_block_fiemap +EXPORT_SYMBOL vmlinux 0xe953b21f get_next_ino +EXPORT_SYMBOL vmlinux 0xe97bc399 __module_get +EXPORT_SYMBOL vmlinux 0xe97fd452 swiotlb_dma_supported +EXPORT_SYMBOL vmlinux 0xe985a376 neigh_sysctl_register +EXPORT_SYMBOL vmlinux 0xe9876d51 pnp_start_dev +EXPORT_SYMBOL vmlinux 0xe987fb4e lock_may_read +EXPORT_SYMBOL vmlinux 0xe98fd202 kset_register +EXPORT_SYMBOL vmlinux 0xe997667b wrmsr_on_cpu +EXPORT_SYMBOL vmlinux 0xe99a87e5 pci_find_capability +EXPORT_SYMBOL vmlinux 0xe9c3553d agp_backend_release +EXPORT_SYMBOL vmlinux 0xe9dff136 mempool_alloc +EXPORT_SYMBOL vmlinux 0xea054b22 nla_policy_len +EXPORT_SYMBOL vmlinux 0xea10212a int_to_scsilun +EXPORT_SYMBOL vmlinux 0xea10655a __bitmap_intersects +EXPORT_SYMBOL vmlinux 0xea26e192 journal_start +EXPORT_SYMBOL vmlinux 0xea2dc390 __pskb_pull_tail +EXPORT_SYMBOL vmlinux 0xea515642 ps2_init +EXPORT_SYMBOL vmlinux 0xea7b8a44 acpi_install_interface +EXPORT_SYMBOL vmlinux 0xea8e5ddd soft_cursor +EXPORT_SYMBOL vmlinux 0xea90bdd3 acpi_attach_data +EXPORT_SYMBOL vmlinux 0xea956361 tty_schedule_flip +EXPORT_SYMBOL vmlinux 0xeaacf552 input_set_abs_params +EXPORT_SYMBOL vmlinux 0xeac73847 irq_regs +EXPORT_SYMBOL vmlinux 0xeacad33a lro_receive_frags +EXPORT_SYMBOL vmlinux 0xeacf74f0 dma_set_mask +EXPORT_SYMBOL vmlinux 0xead1ff77 scsi_adjust_queue_depth +EXPORT_SYMBOL vmlinux 0xeae3dfd6 __const_udelay +EXPORT_SYMBOL vmlinux 0xeaf7ad64 ppp_register_net_channel +EXPORT_SYMBOL vmlinux 0xeb37101c audit_log_end +EXPORT_SYMBOL vmlinux 0xeb44339a free_pages_exact +EXPORT_SYMBOL vmlinux 0xeb6755b8 tty_pair_get_tty +EXPORT_SYMBOL vmlinux 0xeb694273 scsi_report_opcode +EXPORT_SYMBOL vmlinux 0xeb85f376 mb_cache_create +EXPORT_SYMBOL vmlinux 0xeb8e4710 log_start_commit +EXPORT_SYMBOL vmlinux 0xeb98ca10 neigh_parms_release +EXPORT_SYMBOL vmlinux 0xeba70789 blk_queue_end_tag +EXPORT_SYMBOL vmlinux 0xebb211a0 poll_freewait +EXPORT_SYMBOL vmlinux 0xebc87d49 free_buffer_head +EXPORT_SYMBOL vmlinux 0xebdbe48c radix_tree_gang_lookup +EXPORT_SYMBOL vmlinux 0xec048b35 __inode_permission +EXPORT_SYMBOL vmlinux 0xec15f00a tcp_cookie_generator +EXPORT_SYMBOL vmlinux 0xec2d9ba4 pnp_is_active +EXPORT_SYMBOL vmlinux 0xec491c62 set_disk_ro +EXPORT_SYMBOL vmlinux 0xec4accb7 compat_nf_setsockopt +EXPORT_SYMBOL vmlinux 0xec730387 _atomic_dec_and_lock +EXPORT_SYMBOL vmlinux 0xec780856 cdrom_check_events +EXPORT_SYMBOL vmlinux 0xec974049 napi_get_frags +EXPORT_SYMBOL vmlinux 0xecc8d8ea invalidate_partition +EXPORT_SYMBOL vmlinux 0xeccd3e0c acpi_handle_printk +EXPORT_SYMBOL vmlinux 0xeccd4997 blk_run_queue_async +EXPORT_SYMBOL vmlinux 0xece34bce __mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xece784c2 rb_first +EXPORT_SYMBOL vmlinux 0xecf5abfb ps2_handle_ack +EXPORT_SYMBOL vmlinux 0xecfba25f rps_may_expire_flow +EXPORT_SYMBOL vmlinux 0xed1f29fe sock_i_ino +EXPORT_SYMBOL vmlinux 0xed38d3c1 swiotlb_sync_single_for_device +EXPORT_SYMBOL vmlinux 0xed43e22e generic_file_llseek +EXPORT_SYMBOL vmlinux 0xed6ad46a netpoll_setup +EXPORT_SYMBOL vmlinux 0xed8d902d set_security_override_from_ctx +EXPORT_SYMBOL vmlinux 0xeda0d76e gen_estimator_active +EXPORT_SYMBOL vmlinux 0xedb0a1cc tty_pair_get_pty +EXPORT_SYMBOL vmlinux 0xedbaee5e nla_strcmp +EXPORT_SYMBOL vmlinux 0xedbb4ec2 journal_dirty_metadata +EXPORT_SYMBOL vmlinux 0xedbba465 tcp_connect +EXPORT_SYMBOL vmlinux 0xedbca9a6 current_fs_time +EXPORT_SYMBOL vmlinux 0xedc03953 iounmap +EXPORT_SYMBOL vmlinux 0xedc71377 mb_cache_destroy +EXPORT_SYMBOL vmlinux 0xedc72714 km_state_notify +EXPORT_SYMBOL vmlinux 0xedee875c dquot_quota_on +EXPORT_SYMBOL vmlinux 0xee0a055c __percpu_counter_sum +EXPORT_SYMBOL vmlinux 0xee114787 swiotlb_map_sg +EXPORT_SYMBOL vmlinux 0xee2d0fc7 _local_bh_enable +EXPORT_SYMBOL vmlinux 0xee37ee1a mdiobus_read +EXPORT_SYMBOL vmlinux 0xee46885d add_wait_queue_exclusive +EXPORT_SYMBOL vmlinux 0xee46a792 vm_event_states +EXPORT_SYMBOL vmlinux 0xee5d2ae4 sock_no_accept +EXPORT_SYMBOL vmlinux 0xee7eb9e1 pnp_platform_devices +EXPORT_SYMBOL vmlinux 0xee8bad5d __dev_get_by_index +EXPORT_SYMBOL vmlinux 0xee95a2ed posix_acl_from_mode +EXPORT_SYMBOL vmlinux 0xeea62c26 bio_map_kern +EXPORT_SYMBOL vmlinux 0xeea9dbaf bitmap_bitremap +EXPORT_SYMBOL vmlinux 0xeeb30cdc dev_notice +EXPORT_SYMBOL vmlinux 0xeeb5b8be inode_change_ok +EXPORT_SYMBOL vmlinux 0xeeb5bd3b __tracepoint_kfree +EXPORT_SYMBOL vmlinux 0xeeb67158 page_readlink +EXPORT_SYMBOL vmlinux 0xeeb6c2af zero_fill_bio +EXPORT_SYMBOL vmlinux 0xeec29288 skb_find_text +EXPORT_SYMBOL vmlinux 0xeee6d202 unregister_md_personality +EXPORT_SYMBOL vmlinux 0xef02573b netdev_set_master +EXPORT_SYMBOL vmlinux 0xef033328 sync_inodes_sb +EXPORT_SYMBOL vmlinux 0xef559635 ipv6_find_hdr +EXPORT_SYMBOL vmlinux 0xef5ae166 journal_errno +EXPORT_SYMBOL vmlinux 0xef5d228c register_md_personality +EXPORT_SYMBOL vmlinux 0xef63c5f3 pcix_get_max_mmrbc +EXPORT_SYMBOL vmlinux 0xef9aedfc boot_option_idle_override +EXPORT_SYMBOL vmlinux 0xefa5e1a2 __nla_put +EXPORT_SYMBOL vmlinux 0xefb6b186 interruptible_sleep_on_timeout +EXPORT_SYMBOL vmlinux 0xefba93e1 mempool_destroy +EXPORT_SYMBOL vmlinux 0xefdcc764 dev_kfree_skb_any +EXPORT_SYMBOL vmlinux 0xefdd70ce security_secid_to_secctx +EXPORT_SYMBOL vmlinux 0xefde5e9c swiotlb_dma_mapping_error +EXPORT_SYMBOL vmlinux 0xefe099c3 acpi_get_event_status +EXPORT_SYMBOL vmlinux 0xeff8897c napi_gro_receive +EXPORT_SYMBOL vmlinux 0xeffa4c69 end_page_writeback +EXPORT_SYMBOL vmlinux 0xf0005134 sg_miter_stop +EXPORT_SYMBOL vmlinux 0xf0009fee put_pages_list +EXPORT_SYMBOL vmlinux 0xf02935d3 __netlink_dump_start +EXPORT_SYMBOL vmlinux 0xf02b95e5 writeback_inodes_sb_if_idle +EXPORT_SYMBOL vmlinux 0xf03360e4 generic_make_request +EXPORT_SYMBOL vmlinux 0xf05ffa15 fb_var_to_videomode +EXPORT_SYMBOL vmlinux 0xf065f629 ioread16be +EXPORT_SYMBOL vmlinux 0xf093639d inet_sock_destruct +EXPORT_SYMBOL vmlinux 0xf0eb09b3 get_disk +EXPORT_SYMBOL vmlinux 0xf0ef15b4 list_sort +EXPORT_SYMBOL vmlinux 0xf0f1246c kvasprintf +EXPORT_SYMBOL vmlinux 0xf0fc838b phy_get_eee_err +EXPORT_SYMBOL vmlinux 0xf0fdf6cb __stack_chk_fail +EXPORT_SYMBOL vmlinux 0xf100416a remove_conflicting_framebuffers +EXPORT_SYMBOL vmlinux 0xf10de535 ioread8 +EXPORT_SYMBOL vmlinux 0xf11543ff find_first_zero_bit +EXPORT_SYMBOL vmlinux 0xf116d4b5 copy_in_user +EXPORT_SYMBOL vmlinux 0xf125f5f5 blk_alloc_queue_node +EXPORT_SYMBOL vmlinux 0xf12e8981 scsi_device_set_state +EXPORT_SYMBOL vmlinux 0xf13afce4 find_get_pages_contig +EXPORT_SYMBOL vmlinux 0xf13feb57 radix_tree_next_chunk +EXPORT_SYMBOL vmlinux 0xf147ecb1 down_trylock +EXPORT_SYMBOL vmlinux 0xf14982cf simple_write_end +EXPORT_SYMBOL vmlinux 0xf154f2a3 ethtool_op_get_ts_info +EXPORT_SYMBOL vmlinux 0xf168ff39 blk_get_backing_dev_info +EXPORT_SYMBOL vmlinux 0xf1837350 __destroy_inode +EXPORT_SYMBOL vmlinux 0xf192d0b1 single_release +EXPORT_SYMBOL vmlinux 0xf1948763 netdev_alert +EXPORT_SYMBOL vmlinux 0xf195c682 fb_invert_cmaps +EXPORT_SYMBOL vmlinux 0xf1a6d9ff padata_start +EXPORT_SYMBOL vmlinux 0xf1ac9014 disk_stack_limits +EXPORT_SYMBOL vmlinux 0xf1db1704 nla_memcpy +EXPORT_SYMBOL vmlinux 0xf1e329e7 input_register_handle +EXPORT_SYMBOL vmlinux 0xf1e98c74 avenrun +EXPORT_SYMBOL vmlinux 0xf1ec689e input_mt_sync_frame +EXPORT_SYMBOL vmlinux 0xf202c5cb radix_tree_insert +EXPORT_SYMBOL vmlinux 0xf20dabd8 free_irq +EXPORT_SYMBOL vmlinux 0xf21632c4 i2c_register_driver +EXPORT_SYMBOL vmlinux 0xf22449ae down_interruptible +EXPORT_SYMBOL vmlinux 0xf2295fa7 phy_start_interrupts +EXPORT_SYMBOL vmlinux 0xf23bc51e pci_unregister_driver +EXPORT_SYMBOL vmlinux 0xf23d0ddc wl12xx_get_platform_data +EXPORT_SYMBOL vmlinux 0xf23fcb99 __kfifo_in +EXPORT_SYMBOL vmlinux 0xf2789fbe key_unlink +EXPORT_SYMBOL vmlinux 0xf28ed6e2 machine_to_phys_nr +EXPORT_SYMBOL vmlinux 0xf2997713 tty_termios_hw_change +EXPORT_SYMBOL vmlinux 0xf29e5026 bdput +EXPORT_SYMBOL vmlinux 0xf2ba93cc tty_port_init +EXPORT_SYMBOL vmlinux 0xf2c5af61 qdisc_class_hash_grow +EXPORT_SYMBOL vmlinux 0xf2caacda inode_init_always +EXPORT_SYMBOL vmlinux 0xf2dc0161 jbd2_complete_transaction +EXPORT_SYMBOL vmlinux 0xf2e5c60a i2c_smbus_write_block_data +EXPORT_SYMBOL vmlinux 0xf2e84434 nf_setsockopt +EXPORT_SYMBOL vmlinux 0xf2f4850d pnp_unregister_driver +EXPORT_SYMBOL vmlinux 0xf313da4e sha_transform +EXPORT_SYMBOL vmlinux 0xf31cef56 i2c_smbus_write_i2c_block_data +EXPORT_SYMBOL vmlinux 0xf32055e7 dev_base_lock +EXPORT_SYMBOL vmlinux 0xf3341268 __clear_user +EXPORT_SYMBOL vmlinux 0xf338d4c3 netlink_unregister_notifier +EXPORT_SYMBOL vmlinux 0xf3443a26 dev_mc_add_global +EXPORT_SYMBOL vmlinux 0xf346231f seq_list_start_head +EXPORT_SYMBOL vmlinux 0xf36c8fbd pcim_iomap +EXPORT_SYMBOL vmlinux 0xf36efa6e dquot_get_dqinfo +EXPORT_SYMBOL vmlinux 0xf37260ab _raw_read_unlock_bh +EXPORT_SYMBOL vmlinux 0xf389fe60 __hw_addr_init +EXPORT_SYMBOL vmlinux 0xf3916987 global_cursor_default +EXPORT_SYMBOL vmlinux 0xf396cd21 tcp_parse_md5sig_option +EXPORT_SYMBOL vmlinux 0xf3986b06 acpi_os_map_generic_address +EXPORT_SYMBOL vmlinux 0xf3b52251 udp_disconnect +EXPORT_SYMBOL vmlinux 0xf3bf0bce __bitmap_complement +EXPORT_SYMBOL vmlinux 0xf3d7cdc0 __serio_register_port +EXPORT_SYMBOL vmlinux 0xf4050b7b truncate_inode_pages_range +EXPORT_SYMBOL vmlinux 0xf432dd3d __init_waitqueue_head +EXPORT_SYMBOL vmlinux 0xf441ac43 ioread8_rep +EXPORT_SYMBOL vmlinux 0xf44f7011 directly_mappable_cdev_bdi +EXPORT_SYMBOL vmlinux 0xf45a4e52 posix_acl_chmod +EXPORT_SYMBOL vmlinux 0xf47b44f6 security_inode_notifysecctx +EXPORT_SYMBOL vmlinux 0xf47e31e7 inc_zone_page_state +EXPORT_SYMBOL vmlinux 0xf4803c26 agp_generic_alloc_page +EXPORT_SYMBOL vmlinux 0xf484047c neigh_destroy +EXPORT_SYMBOL vmlinux 0xf486e0a2 journal_try_to_free_buffers +EXPORT_SYMBOL vmlinux 0xf48c7922 rt6_lookup +EXPORT_SYMBOL vmlinux 0xf48e2ad2 blk_make_request +EXPORT_SYMBOL vmlinux 0xf4a5c213 avail_to_resrv_perfctr_nmi_bit +EXPORT_SYMBOL vmlinux 0xf4b754fd acpi_resources_are_enforced +EXPORT_SYMBOL vmlinux 0xf4bdbeb9 __frontswap_invalidate_area +EXPORT_SYMBOL vmlinux 0xf4c35fd5 blk_queue_alignment_offset +EXPORT_SYMBOL vmlinux 0xf4d94ca8 dma_find_channel +EXPORT_SYMBOL vmlinux 0xf4f14de6 rtnl_trylock +EXPORT_SYMBOL vmlinux 0xf5161c46 unregister_framebuffer +EXPORT_SYMBOL vmlinux 0xf51ae235 touch_nmi_watchdog +EXPORT_SYMBOL vmlinux 0xf51bf88b nf_hooks_needed +EXPORT_SYMBOL vmlinux 0xf52b7cb9 dev_uc_init +EXPORT_SYMBOL vmlinux 0xf536d22e acpi_set_gpe_wake_mask +EXPORT_SYMBOL vmlinux 0xf53d4c26 qdisc_class_hash_destroy +EXPORT_SYMBOL vmlinux 0xf555c922 scsi_command_normalize_sense +EXPORT_SYMBOL vmlinux 0xf5625952 wireless_spy_update +EXPORT_SYMBOL vmlinux 0xf5839dfc jbd2_journal_load +EXPORT_SYMBOL vmlinux 0xf5841662 scsi_device_resume +EXPORT_SYMBOL vmlinux 0xf5893abf up_read +EXPORT_SYMBOL vmlinux 0xf58fb95b kobject_add +EXPORT_SYMBOL vmlinux 0xf598be6a rwsem_downgrade_wake +EXPORT_SYMBOL vmlinux 0xf5a8fd8a get_agp_version +EXPORT_SYMBOL vmlinux 0xf5b10e67 acpi_install_global_event_handler +EXPORT_SYMBOL vmlinux 0xf5bf4990 nf_log_unregister +EXPORT_SYMBOL vmlinux 0xf5c9aa49 may_umount +EXPORT_SYMBOL vmlinux 0xf5d74e9d i8042_install_filter +EXPORT_SYMBOL vmlinux 0xf5eb86ea blk_verify_command +EXPORT_SYMBOL vmlinux 0xf61d9dc7 dev_trans_start +EXPORT_SYMBOL vmlinux 0xf6388c56 sysctl_ip_default_ttl +EXPORT_SYMBOL vmlinux 0xf692f809 nf_ip_checksum +EXPORT_SYMBOL vmlinux 0xf69dec5b input_register_device +EXPORT_SYMBOL vmlinux 0xf6a15b28 vfs_fsync +EXPORT_SYMBOL vmlinux 0xf6bb4729 color_table +EXPORT_SYMBOL vmlinux 0xf6d19add writeback_in_progress +EXPORT_SYMBOL vmlinux 0xf6d1a9ca input_mt_destroy_slots +EXPORT_SYMBOL vmlinux 0xf6d33eb0 pnp_request_card_device +EXPORT_SYMBOL vmlinux 0xf6e0cc93 dev_driver_string +EXPORT_SYMBOL vmlinux 0xf6ebc03b net_ratelimit +EXPORT_SYMBOL vmlinux 0xf702e59b start_tty +EXPORT_SYMBOL vmlinux 0xf709ea09 dquot_resume +EXPORT_SYMBOL vmlinux 0xf7247382 bio_alloc_bioset +EXPORT_SYMBOL vmlinux 0xf7289d14 __tracepoint_kmem_cache_free +EXPORT_SYMBOL vmlinux 0xf738f9ea security_path_link +EXPORT_SYMBOL vmlinux 0xf7584a9c find_font +EXPORT_SYMBOL vmlinux 0xf764e5de pci_fixup_device +EXPORT_SYMBOL vmlinux 0xf76651b7 blk_queue_prep_rq +EXPORT_SYMBOL vmlinux 0xf7782844 lro_flush_all +EXPORT_SYMBOL vmlinux 0xf77e464c xfrm_policy_bysel_ctx +EXPORT_SYMBOL vmlinux 0xf78d04ab netlink_register_notifier +EXPORT_SYMBOL vmlinux 0xf79e66d2 get_task_io_context +EXPORT_SYMBOL vmlinux 0xf7adcaf3 __tracepoint_kmalloc_node +EXPORT_SYMBOL vmlinux 0xf7dd09c9 usb_remove_phy +EXPORT_SYMBOL vmlinux 0xf7e86e53 qdisc_reset +EXPORT_SYMBOL vmlinux 0xf803fe39 bitmap_set +EXPORT_SYMBOL vmlinux 0xf811e69d scsi_eh_flush_done_q +EXPORT_SYMBOL vmlinux 0xf812cff6 memscan +EXPORT_SYMBOL vmlinux 0xf814b3f8 path_is_under +EXPORT_SYMBOL vmlinux 0xf82abc1d isa_dma_bridge_buggy +EXPORT_SYMBOL vmlinux 0xf82cfd1a proc_dostring +EXPORT_SYMBOL vmlinux 0xf82e3d47 acpi_initialize_objects +EXPORT_SYMBOL vmlinux 0xf82ec573 rb_prev +EXPORT_SYMBOL vmlinux 0xf83e6011 proto_register +EXPORT_SYMBOL vmlinux 0xf84f68ef max8998_read_reg +EXPORT_SYMBOL vmlinux 0xf85860d7 security_file_permission +EXPORT_SYMBOL vmlinux 0xf888f16d dquot_alloc_inode +EXPORT_SYMBOL vmlinux 0xf88e0ee2 acpi_get_table_header +EXPORT_SYMBOL vmlinux 0xf8956659 xfrm_policy_alloc +EXPORT_SYMBOL vmlinux 0xf8983de7 prepare_to_wait_exclusive +EXPORT_SYMBOL vmlinux 0xf8b9045e vfs_rmdir +EXPORT_SYMBOL vmlinux 0xf8e1311a pci_disable_link_state +EXPORT_SYMBOL vmlinux 0xf8ea3e24 pci_get_device +EXPORT_SYMBOL vmlinux 0xf9001974 bio_get_nr_vecs +EXPORT_SYMBOL vmlinux 0xf9054027 elevator_init +EXPORT_SYMBOL vmlinux 0xf92101dd blkdev_issue_flush +EXPORT_SYMBOL vmlinux 0xf951ea88 nf_unregister_sockopt +EXPORT_SYMBOL vmlinux 0xf956526b dcache_readdir +EXPORT_SYMBOL vmlinux 0xf97ecea9 inet6_del_offload +EXPORT_SYMBOL vmlinux 0xf9a482f9 msleep +EXPORT_SYMBOL vmlinux 0xf9aff1eb mount_ns +EXPORT_SYMBOL vmlinux 0xf9c0b663 strlcat +EXPORT_SYMBOL vmlinux 0xf9eab61d idr_destroy +EXPORT_SYMBOL vmlinux 0xf9eb8194 generic_write_checks +EXPORT_SYMBOL vmlinux 0xfa0b27c4 i8042_remove_filter +EXPORT_SYMBOL vmlinux 0xfa313521 bio_integrity_trim +EXPORT_SYMBOL vmlinux 0xfa66f77c finish_wait +EXPORT_SYMBOL vmlinux 0xfa6d6692 tcf_hash_destroy +EXPORT_SYMBOL vmlinux 0xfa8b5e8b tcp_md5_do_lookup +EXPORT_SYMBOL vmlinux 0xfa9b46e4 padata_add_cpu +EXPORT_SYMBOL vmlinux 0xfaaa6d48 pcim_iounmap_regions +EXPORT_SYMBOL vmlinux 0xfac8865f sysctl_wmem_max +EXPORT_SYMBOL vmlinux 0xfada87fe key_revoke +EXPORT_SYMBOL vmlinux 0xfade2fcf generic_file_remap_pages +EXPORT_SYMBOL vmlinux 0xfae67b1f cap_mmap_addr +EXPORT_SYMBOL vmlinux 0xfaf98462 bitrev32 +EXPORT_SYMBOL vmlinux 0xfb0443fb acpi_get_parent +EXPORT_SYMBOL vmlinux 0xfb0f703a max8998_bulk_write +EXPORT_SYMBOL vmlinux 0xfb10ebd5 get_unmapped_area +EXPORT_SYMBOL vmlinux 0xfb1bcc87 softnet_data +EXPORT_SYMBOL vmlinux 0xfb348b3b phy_connect_direct +EXPORT_SYMBOL vmlinux 0xfb3db392 iget_failed +EXPORT_SYMBOL vmlinux 0xfb40b4eb kernel_sendmsg +EXPORT_SYMBOL vmlinux 0xfb57381d follow_down +EXPORT_SYMBOL vmlinux 0xfb578fc5 memset +EXPORT_SYMBOL vmlinux 0xfb62b8db read_cache_page +EXPORT_SYMBOL vmlinux 0xfb6af58d recalc_sigpending +EXPORT_SYMBOL vmlinux 0xfb74083d simple_statfs +EXPORT_SYMBOL vmlinux 0xfb80c7a0 acpi_walk_namespace +EXPORT_SYMBOL vmlinux 0xfb8813f3 dquot_quotactl_ops +EXPORT_SYMBOL vmlinux 0xfba2197a pcie_capability_write_word +EXPORT_SYMBOL vmlinux 0xfbaaf01e console_lock +EXPORT_SYMBOL vmlinux 0xfbe1cb01 ilookup5 +EXPORT_SYMBOL vmlinux 0xfc02b7ad sysctl_tcp_wmem +EXPORT_SYMBOL vmlinux 0xfc326ce3 __lock_buffer +EXPORT_SYMBOL vmlinux 0xfc39e32f ioport_unmap +EXPORT_SYMBOL vmlinux 0xfc872fd1 get_ibs_caps +EXPORT_SYMBOL vmlinux 0xfc972938 skb_copy_datagram_const_iovec +EXPORT_SYMBOL vmlinux 0xfcaa04a0 out_of_line_wait_on_bit_lock +EXPORT_SYMBOL vmlinux 0xfcac0d40 acpi_install_interface_handler +EXPORT_SYMBOL vmlinux 0xfcb926cd kstrtouint_from_user +EXPORT_SYMBOL vmlinux 0xfcc2a43c utf32_to_utf8 +EXPORT_SYMBOL vmlinux 0xfcc54f91 lg_local_lock_cpu +EXPORT_SYMBOL vmlinux 0xfcc69241 __devm_request_region +EXPORT_SYMBOL vmlinux 0xfce5136c vlan_vid_del +EXPORT_SYMBOL vmlinux 0xfcec0987 enable_irq +EXPORT_SYMBOL vmlinux 0xfcf2180f ps2_handle_response +EXPORT_SYMBOL vmlinux 0xfcfa03ff fb_videomode_to_modelist +EXPORT_SYMBOL vmlinux 0xfd4ad89a tcp_timewait_state_process +EXPORT_SYMBOL vmlinux 0xfd5b1cf3 inode_dio_done +EXPORT_SYMBOL vmlinux 0xfd6293c2 boot_tvec_bases +EXPORT_SYMBOL vmlinux 0xfd7d7713 acpi_exception +EXPORT_SYMBOL vmlinux 0xfd8dd43f pci_bus_size_bridges +EXPORT_SYMBOL vmlinux 0xfda0dbe8 ftrace_print_hex_seq +EXPORT_SYMBOL vmlinux 0xfdb9b629 ioread32be +EXPORT_SYMBOL vmlinux 0xfdbbc7c3 dm_put_device +EXPORT_SYMBOL vmlinux 0xfdbe0288 pci_add_resource_offset +EXPORT_SYMBOL vmlinux 0xfdc8b4c4 free_xenballooned_pages +EXPORT_SYMBOL vmlinux 0xfdd80015 pcim_iomap_regions +EXPORT_SYMBOL vmlinux 0xfddeadfd tty_port_destroy +EXPORT_SYMBOL vmlinux 0xfdee7d42 _raw_read_lock_bh +EXPORT_SYMBOL vmlinux 0xfdfc0b3b fiemap_fill_next_extent +EXPORT_SYMBOL vmlinux 0xfe047ce6 acpi_enter_sleep_state +EXPORT_SYMBOL vmlinux 0xfe26fc7c nr_node_ids +EXPORT_SYMBOL vmlinux 0xfe2882f0 inet_add_offload +EXPORT_SYMBOL vmlinux 0xfe2cd10e generic_pipe_buf_steal +EXPORT_SYMBOL vmlinux 0xfe422be6 should_remove_suid +EXPORT_SYMBOL vmlinux 0xfe583830 pci_read_vpd +EXPORT_SYMBOL vmlinux 0xfe5d4bb2 sys_tz +EXPORT_SYMBOL vmlinux 0xfe735aeb pagevec_lookup_tag +EXPORT_SYMBOL vmlinux 0xfe75448c vlan_dev_vlan_id +EXPORT_SYMBOL vmlinux 0xfe769456 unregister_netdevice_notifier +EXPORT_SYMBOL vmlinux 0xfe7c4287 nr_cpu_ids +EXPORT_SYMBOL vmlinux 0xfe9803d1 alloc_netdev_mqs +EXPORT_SYMBOL vmlinux 0xfeace138 truncate_inode_pages +EXPORT_SYMBOL vmlinux 0xfebc27eb __mark_inode_dirty +EXPORT_SYMBOL vmlinux 0xfec3f16d blk_dump_rq_flags +EXPORT_SYMBOL vmlinux 0xfec95316 nobh_writepage +EXPORT_SYMBOL vmlinux 0xfecbc2b1 mod_zone_page_state +EXPORT_SYMBOL vmlinux 0xfeebc5f8 jbd2_journal_stop +EXPORT_SYMBOL vmlinux 0xfeebc7c4 __kfifo_from_user_r +EXPORT_SYMBOL vmlinux 0xfef96e23 __scsi_print_command +EXPORT_SYMBOL vmlinux 0xff1e9dd8 seq_list_start +EXPORT_SYMBOL vmlinux 0xff20892a blk_queue_io_min +EXPORT_SYMBOL vmlinux 0xff4447ad netpoll_cleanup +EXPORT_SYMBOL vmlinux 0xff5da97e serio_open +EXPORT_SYMBOL vmlinux 0xff6878cf fb_default_cmap +EXPORT_SYMBOL vmlinux 0xff7559e4 ioport_resource +EXPORT_SYMBOL vmlinux 0xff99ee99 ip_mc_rejoin_groups +EXPORT_SYMBOL vmlinux 0xff9ca065 fb_edid_to_monspecs +EXPORT_SYMBOL vmlinux 0xff9eb78c input_set_capability +EXPORT_SYMBOL vmlinux 0xffb0431a filemap_fdatawrite_range +EXPORT_SYMBOL vmlinux 0xffb61005 ps2_begin_command +EXPORT_SYMBOL vmlinux 0xffd5a395 default_wake_function +EXPORT_SYMBOL vmlinux 0xffe5095d groups_free +EXPORT_SYMBOL vmlinux 0xfff61e5b dev_mc_init +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x0793665b ablk_encrypt +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x1e627746 __ablk_encrypt +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x22e1e59f ablk_init +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x500c0d40 ablk_exit +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x524a74b7 ablk_decrypt +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0x74402346 ablk_set_key +EXPORT_SYMBOL_GPL arch/x86/crypto/ablk_helper 0xf35efc8e ablk_init_common +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0x7060bf0a crypto_aes_encrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/aes-x86_64 0xe409b491 crypto_aes_decrypt_x86 +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x16061d06 __camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x1636abdf __camellia_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x1da0e256 camellia_crypt_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x31bbe42b camellia_crypt_ctr_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x50dc55b6 __camellia_enc_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x894882c7 lrw_camellia_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0x930f687f camellia_decrypt_cbc_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0xa41a5ad3 camellia_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0xaf6cddc4 xts_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0xbc6d25fb lrw_camellia_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/camellia-x86_64 0xf4521fda camellia_dec_blk_2way +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x1f9f6a14 glue_cbc_decrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x20358e74 glue_ecb_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0x211d0794 glue_ctr_crypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0xaaa9404f glue_cbc_encrypt_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/glue_helper 0xfba62a80 glue_ctr_crypt_final_128bit +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x19dc7881 twofish_dec_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64 0x5e752773 twofish_enc_blk +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x1fd77fb1 twofish_dec_blk_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x419c71a9 lrw_twofish_exit_tfm +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x61694b97 twofish_dec_blk_cbc_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x8d75ab44 twofish_enc_blk_ctr +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0x8e856922 twofish_enc_blk_ctr_3way +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0xa6d7501f lrw_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0xcbb73907 xts_twofish_setkey +EXPORT_SYMBOL_GPL arch/x86/crypto/twofish-x86_64-3way 0xf2e80e9c __twofish_enc_blk_3way +EXPORT_SYMBOL_GPL arch/x86/kernel/microcode 0xdf66ca81 ucode_cpu_info +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x00aaf935 kvm_disable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x01e4363d kvm_write_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0b09b292 kvm_read_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x0d4cc959 kvm_vcpu_cache +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1042cf19 kvm_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x105135c6 kvm_require_cpl +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x154318ce kvm_set_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x192791d6 kvm_put_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1cfe78d1 kvm_release_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1e8004a9 fx_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x1f3de701 kvm_mmu_unprotect_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x20de5193 kvm_disable_largepages +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x21033fd6 gfn_to_hva +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x24200b1f kvm_is_linear_rip +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x24bf19ef kvm_x86_ops +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x263a1116 kvm_get_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2674a7e5 kvm_queue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x27046576 kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2ba77fea kvm_mmu_unload +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2ce47b9b kvm_get_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x2d061574 kvm_cpu_has_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x317f9e6b kvm_enable_efer_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x31ce78f2 kvm_read_guest_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x320d79cd kvm_mmu_reset_context +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3265e0e7 kvm_emulate_wbinvd +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x32dead22 handle_mmio_page_fault_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x338d302b kvm_write_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3394ce85 kvm_after_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3593b4be kvm_set_cr0 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x38bcfecc kvm_set_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x39305629 kvm_fast_pio_out +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b45acaa kvm_rdpmc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b5dd35e __tracepoint_kvm_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3b8a2fb0 kvm_mmu_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3c5567c2 kvm_mmu_get_spte_hierarchy +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3d6c5370 kvm_get_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x3de08404 kvm_set_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x40748c99 kvm_vcpu_uninit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4817836c kvm_set_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x485cd7f6 kvm_rebooting +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x48a6d9b8 kvm_emulate_cpuid +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4c51f664 __tracepoint_kvm_exit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4c8039a5 kvm_write_tsc +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4d320ad7 kvm_clear_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x4e0949ca gfn_to_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5152c04f kvm_is_visible_gfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x53a2a3f7 __tracepoint_kvm_inj_virq +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x56262f79 kvm_set_apic_base +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x56def092 kvm_set_dr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x584f2620 gfn_to_pfn_async +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x59db4b5a kvm_mmu_unprotect_page_virt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x5e931c68 kvm_set_cr4 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x602682f7 kvm_emulate_hypercall +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6496f166 kvm_get_msr_common +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x64a34f49 __tracepoint_kvm_nested_vmexit_inject +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x669da1fd kvm_set_pfn_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x681fffbc gfn_to_pfn_prot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6bd12f07 kvm_write_guest_virt_system +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x6d613c66 x86_emulate_instruction +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x709cd8cb kvm_spurious_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x719b4b1c kvm_before_handle_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7705c4a7 load_pdptrs +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x78033024 kvm_requeue_exception +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7aa64803 kvm_release_pfn_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7c406240 kvm_vcpu_yield_to +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7c502ab9 __tracepoint_kvm_nested_intr_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x7f2c1163 __tracepoint_kvm_nested_vmexit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x820bb51a kvm_read_guest_cached +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x827ab67e gfn_to_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x831327da kvm_max_guest_tsc_khz +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x87dd564b kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8a26f7b0 __tracepoint_kvm_nested_intercepts +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ac8b5a5 kvm_inject_realmode_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8ce4f3ab kvm_enable_tdp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8da01274 kvm_get_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8e1cd06f kvm_set_pfn_accessed +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x8f67ada5 kvm_emulate_halt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9a216313 kvm_define_shared_msr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9baf0b15 kvm_cpu_get_interrupt +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0x9ee59155 __tracepoint_kvm_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xa508e36b __tracepoint_kvm_skinit +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaa79cab5 __tracepoint_kvm_cr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xab44e217 kvm_mmu_load +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xac0b4718 kvm_read_guest_page_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaf275715 __tracepoint_kvm_nested_vmrun +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xaf594724 kvm_get_rflags +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb0c6c295 kvm_gfn_to_hva_cache_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb2699a25 kvm_vcpu_on_spin +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb34dd22d kvm_get_cs_db_l_bits +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb4d4bdc2 kvm_read_guest +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb708a786 gfn_to_pfn +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb7e55518 kvm_queue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb7e5b1e6 kvm_resched +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb83793eb kvm_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xb8f6a3e2 gfn_to_pfn_memslot_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xba8216d0 kvm_requeue_exception_e +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xba9ed435 kvm_mmu_set_mmio_spte_mask +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbea43d36 gfn_to_pfn_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xbf8b2f6f kvm_find_cpuid_entry +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc1d06316 kvm_get_kvm +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc1f987cc kvm_set_xcr +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc5cbf30a gfn_to_hva_memslot +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc7eacc53 kvm_complete_insn_gp +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xc8573434 kvm_inject_nmi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xcb3239d0 kvm_vcpu_init +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0459e67 kvm_has_tsc_control +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd0b2727a kvm_mmu_set_mask_ptes +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd26146e1 kvm_release_page_dirty +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd411963b kvm_task_switch +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xd860bb83 kvm_lapic_set_eoi +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdb16011f kvm_lmsw +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdbef7423 kvm_mmu_invlpg +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xdeb9e564 __tracepoint_kvm_invlpga +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe19a4022 kvm_inject_page_fault +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe314ce49 kvm_get_guest_memory_type +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe392e512 kvm_set_cr8 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xe9d5f730 kvm_clear_guest_page +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xeaef0f58 kvm_release_page_clean +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf2140451 kvm_init_shadow_mmu +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf3cada79 __kvm_set_memory_region +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf76b49c0 kvm_set_cr3 +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xf9a43053 gfn_to_page_many_atomic +EXPORT_SYMBOL_GPL arch/x86/kvm/kvm 0xfb8466d0 kvm_inject_pending_timer_irqs +EXPORT_SYMBOL_GPL crypto/af_alg 0x114be3c9 af_alg_accept +EXPORT_SYMBOL_GPL crypto/af_alg 0x289197b2 af_alg_cmsg_send +EXPORT_SYMBOL_GPL crypto/af_alg 0x35f582ca af_alg_register_type +EXPORT_SYMBOL_GPL crypto/af_alg 0x42986d34 af_alg_make_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0x65eef7f4 af_alg_wait_for_completion +EXPORT_SYMBOL_GPL crypto/af_alg 0xa9ed449b af_alg_free_sg +EXPORT_SYMBOL_GPL crypto/af_alg 0xc9dd911b af_alg_complete +EXPORT_SYMBOL_GPL crypto/af_alg 0xe218c38d af_alg_unregister_type +EXPORT_SYMBOL_GPL crypto/af_alg 0xf82798fe af_alg_release +EXPORT_SYMBOL_GPL crypto/async_tx/async_memcpy 0xd93a68a8 async_memcpy +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x3c9b4cde async_syndrome_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_pq 0x8389315a async_gen_syndrome +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0x1b991351 async_raid6_2data_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_raid6_recov 0xd5edaa42 async_raid6_datap_recov +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x16a7d3b9 async_trigger_callback +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x4ae3348b async_tx_quiesce +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0x5d47a677 async_tx_submit +EXPORT_SYMBOL_GPL crypto/async_tx/async_tx 0xc77401d4 __async_tx_find_channel +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xb1b9c9f4 async_xor_val +EXPORT_SYMBOL_GPL crypto/async_tx/async_xor 0xfd0ba5af async_xor +EXPORT_SYMBOL_GPL crypto/blowfish_common 0x6bbf8a53 blowfish_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x0e68088f cast5_setkey +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x27278ca9 __cast5_encrypt +EXPORT_SYMBOL_GPL crypto/cast5_generic 0x4a2a3ca6 __cast5_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x1291971c __cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x1e2c961f __cast6_decrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0x8f04034a __cast6_encrypt +EXPORT_SYMBOL_GPL crypto/cast6_generic 0xb24b0f99 cast6_setkey +EXPORT_SYMBOL_GPL crypto/cast_common 0x08aa6fb7 cast_s1 +EXPORT_SYMBOL_GPL crypto/cast_common 0x0c5fbf8a cast_s3 +EXPORT_SYMBOL_GPL crypto/cast_common 0xe39dd4b4 cast_s2 +EXPORT_SYMBOL_GPL crypto/cast_common 0xee83a4f3 cast_s4 +EXPORT_SYMBOL_GPL crypto/cryptd 0x1c2699bf cryptd_alloc_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0x2bfc9ed4 cryptd_free_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0x342d9c36 cryptd_free_ahash +EXPORT_SYMBOL_GPL crypto/cryptd 0x489d049d cryptd_shash_desc +EXPORT_SYMBOL_GPL crypto/cryptd 0x5482943b cryptd_aead_child +EXPORT_SYMBOL_GPL crypto/cryptd 0x78c20e29 cryptd_ablkcipher_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xa8a7a07b cryptd_alloc_aead +EXPORT_SYMBOL_GPL crypto/cryptd 0xaabe6a7b cryptd_ahash_child +EXPORT_SYMBOL_GPL crypto/cryptd 0xad9a24f5 cryptd_free_ablkcipher +EXPORT_SYMBOL_GPL crypto/cryptd 0xb5833ed0 cryptd_alloc_ahash +EXPORT_SYMBOL_GPL crypto/des_generic 0xcfd9a2c0 des_ekey +EXPORT_SYMBOL_GPL crypto/lrw 0x3864eb66 lrw_free_table +EXPORT_SYMBOL_GPL crypto/lrw 0x9f628355 lrw_crypt +EXPORT_SYMBOL_GPL crypto/lrw 0xcd074900 lrw_init_table +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x5c03aea9 serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x5ddb33e9 __serpent_encrypt +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x77b39cb4 __serpent_setkey +EXPORT_SYMBOL_GPL crypto/serpent_generic 0x8a1a99ad __serpent_decrypt +EXPORT_SYMBOL_GPL crypto/twofish_common 0x6c3229bb __twofish_setkey +EXPORT_SYMBOL_GPL crypto/twofish_common 0xed8df909 twofish_setkey +EXPORT_SYMBOL_GPL crypto/xts 0xb3cbaa34 xts_crypt +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x1c8984c7 acpi_smbus_unregister_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0x87bd07bd acpi_smbus_register_callback +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0xb9a141b0 acpi_smbus_read +EXPORT_SYMBOL_GPL drivers/acpi/sbshc 0xe1372311 acpi_smbus_write +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x29589598 ahci_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x2b04aa5f ahci_pmp_retry_srst_ops +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x4c6b422f ahci_init_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x5eacba1f ahci_interrupt +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x6cf6999f ahci_set_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x875699e6 ahci_kick_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x8c602e39 ahci_sdev_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x8f54133d ahci_reset_em +EXPORT_SYMBOL_GPL drivers/ata/libahci 0x9e3e68d4 ahci_stop_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xab1a8a28 ahci_dev_classify +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xcd8ff047 ahci_print_info +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xddf11547 ahci_fill_cmd_slot +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xe33e39b3 ahci_port_resume +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xe6fc8256 ahci_start_engine +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xe776dc74 ahci_reset_controller +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xea50dad3 ahci_ignore_sss +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xef0d2a44 ahci_save_initial_config +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xf0b6c0de ahci_shost_attrs +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xf6464980 ahci_em_messages +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xf6ae2b42 ahci_do_softreset +EXPORT_SYMBOL_GPL drivers/ata/libahci 0xfbda7b88 ahci_check_ready +EXPORT_SYMBOL_GPL drivers/ata/pata_platform 0x16439aa2 __pata_platform_probe +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x02ff9464 cfag12864b_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x0ecb2e5d cfag12864b_disable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x305dc3c6 cfag12864b_isenabled +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x3389f926 cfag12864b_enable +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0x9522a342 cfag12864b_getrate +EXPORT_SYMBOL_GPL drivers/auxdisplay/cfag12864b 0xc48e9d95 cfag12864b_buffer +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x14102f23 ks0108_displaystate +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x48a70518 ks0108_writedata +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x4f506333 ks0108_startline +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0x6edae968 ks0108_isinited +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xbf4774db ks0108_writecontrol +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xedde6df2 ks0108_page +EXPORT_SYMBOL_GPL drivers/auxdisplay/ks0108 0xfee8ef7b ks0108_address +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-mmio 0x8a5ab7fa devm_regmap_init_mmio +EXPORT_SYMBOL_GPL drivers/base/regmap/regmap-mmio 0xb1dbff0c regmap_init_mmio +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x2352b1fe bcma_core_enable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x25912726 bcma_find_core +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x36f26033 bcma_chipco_regctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x41341b7e bcma_chipco_gpio_control +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x70fe03de __bcma_driver_register +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x71a46192 bcma_chipco_pll_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x73cfeae5 bcma_core_pci_extend_L1timer +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0x756ade4e bcma_core_set_clockmode +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xa2c9be12 bcma_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xa5a55b1f bcma_core_pll_ctl +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xabd6ddb5 bcma_core_disable +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xb618d14c bcma_core_is_enabled +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xbcffeebd bcma_chipco_pll_read +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xc8519842 bcma_chipco_pll_write +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xd5a0ceb1 bcma_chipco_chipctl_maskset +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xd74bd812 bcma_driver_unregister +EXPORT_SYMBOL_GPL drivers/bcma/bcma 0xe300f5ed bcma_core_pci_irq_ctl +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x21816d6d btmrvl_interrupt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x3cbf0e5c btmrvl_register_hdev +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x440b9134 btmrvl_add_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x46192d3c btmrvl_check_evtpkt +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x738b8abc btmrvl_enable_ps +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0x773a2f46 btmrvl_process_event +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xb5a69f1e btmrvl_remove_card +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xbb80a6cc btmrvl_enable_hs +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xbbdab16a btmrvl_send_hscfg_cmd +EXPORT_SYMBOL_GPL drivers/bluetooth/btmrvl 0xe74c3259 btmrvl_send_module_cfg_cmd +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x1b1f2bda speedstep_get_freqs +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0x2b67f096 speedstep_get_frequency +EXPORT_SYMBOL_GPL drivers/cpufreq/speedstep-lib 0xd7ab2c0c speedstep_detect_processor +EXPORT_SYMBOL_GPL drivers/dca/dca 0x2e471f01 dca_register_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x31a2c8df dca_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0x4aec5140 alloc_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x4c752d7d register_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x7c764907 unregister_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0x8006c614 dca_unregister_notify +EXPORT_SYMBOL_GPL drivers/dca/dca 0x940f738c free_dca_provider +EXPORT_SYMBOL_GPL drivers/dca/dca 0xc2af65b3 dca3_get_tag +EXPORT_SYMBOL_GPL drivers/dca/dca 0xe09bd7d6 dca_remove_requester +EXPORT_SYMBOL_GPL drivers/dca/dca 0xe9fbf68d dca_add_requester +EXPORT_SYMBOL_GPL drivers/edac/amd64_edac_mod 0xee783eba amd64_get_dram_hole_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x0c32ff8a edac_pci_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x1f23b7e7 edac_mc_handle_error +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x2ed601d2 edac_pci_release_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3823e879 edac_device_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x3db7e0a9 edac_device_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x5b9bec3f edac_device_handle_ce +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x67b8b4ec edac_pci_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6846c3c4 edac_pci_create_generic_ctl +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x69259f22 edac_mem_types +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x6e3ff83a edac_device_alloc_index +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x8a8143c7 edac_pci_alloc_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0x9565c73d edac_mc_free +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa1b26284 find_mci_by_dev +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xa8e4eb77 edac_mc_alloc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc0dcb59e edac_layer_name +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc2f390f4 edac_device_free_ctl_info +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xc419dd4e edac_mc_del_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xd7b80d52 edac_device_handle_ue +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xddd1e557 edac_pci_reset_delay_period +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe7468a03 edac_mc_add_mc +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xe9b0a1d5 edac_pci_handle_pe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf1e69617 edac_mc_find_csrow_by_page +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf6a6e2ab edac_pci_handle_npe +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf84ecebb edac_pci_add_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xf9236fda edac_pci_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_core 0xfb77101a edac_device_del_device +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x0d38cee6 amd_decode_mce +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x14878009 amd_report_gart_errors +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x1d34e996 pp_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x21626132 amd_register_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x233ce2e4 to_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x3eba1a17 rrrr_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x593ec4b5 ii_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0x737912b3 amd_unregister_ecc_decoder +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xaeeba16b tt_msgs +EXPORT_SYMBOL_GPL drivers/edac/edac_mce_amd 0xb0ca1fe7 ll_msgs +EXPORT_SYMBOL_GPL drivers/firewire/firewire-core 0xf4ade51f fw_card_release +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x013fbdac cs5535_gpio_set +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0x93f8fe67 cs5535_gpio_set_irq +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0xc0bb404a cs5535_gpio_setup_event +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0xd3bd9300 cs5535_gpio_isset +EXPORT_SYMBOL_GPL drivers/gpio/gpio-cs5535 0xe07c0954 cs5535_gpio_clear +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0x498e9352 bgpio_remove +EXPORT_SYMBOL_GPL drivers/gpio/gpio-generic 0xbef577a4 bgpio_init +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0xcfd9aa75 __max730x_remove +EXPORT_SYMBOL_GPL drivers/gpio/gpio-max730x 0xfe202ddb __max730x_probe +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0x15a03387 drm_class_device_unregister +EXPORT_SYMBOL_GPL drivers/gpu/drm/drm 0xaedd590e drm_class_device_register +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x05876c69 i915_gpu_busy +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x08a7896d i915_gpu_raise +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x402468e9 i915_gpu_lower +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0x500858b9 i915_read_mch_val +EXPORT_SYMBOL_GPL drivers/gpu/drm/i915/i915 0xe7237b0b i915_gpu_turbo_disable +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x1e0807ee ttm_dma_populate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0x41f87ce3 ttm_dma_unpopulate +EXPORT_SYMBOL_GPL drivers/gpu/drm/ttm/ttm 0xadc50a13 ttm_dma_page_alloc_debugfs +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0115956d hid_destroy_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0x021d8275 hid_ignore +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0434ae9c hidinput_count_leds +EXPORT_SYMBOL_GPL drivers/hid/hid 0x05495392 hid_debug +EXPORT_SYMBOL_GPL drivers/hid/hid 0x080a8c2f hidinput_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x0c3b6324 hid_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0x15c8847b hidinput_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x1ef59d32 hidinput_get_led_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x30684733 hid_input_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x3ded9e27 hid_debug_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x46018214 hid_dump_input +EXPORT_SYMBOL_GPL drivers/hid/hid 0x4906a967 hid_snto32 +EXPORT_SYMBOL_GPL drivers/hid/hid 0x6e5eb6a3 hid_report_raw_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0x78d7e3b7 hid_output_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7a44363b hid_resolv_usage +EXPORT_SYMBOL_GPL drivers/hid/hid 0x7ba991d2 hidinput_find_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0x891f8dd7 hid_check_keys_pressed +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9d64fae7 hid_parse_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0x9edf86bf hid_open_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xa8bfd7b2 hid_set_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbb9d9ea7 hidinput_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xbdb6556e hidraw_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc3ebf430 hid_allocate_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xc5eb8aec hid_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xcafa7be3 hid_register_report +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd331f5e8 hidraw_connect +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd9519cd4 __hid_register_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd9579b47 hid_dump_field +EXPORT_SYMBOL_GPL drivers/hid/hid 0xd9e6acd2 hidinput_calc_abs_res +EXPORT_SYMBOL_GPL drivers/hid/hid 0xeeedbd5a hidraw_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf00743cb hid_unregister_driver +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf40d8617 hid_dump_device +EXPORT_SYMBOL_GPL drivers/hid/hid 0xf9384636 hid_add_device +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x2f622ea1 roccat_disconnect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0x8c4181ec roccat_report_event +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat 0xdffa7fc7 roccat_connect +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x7e68424f roccat_common2_send_with_status +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0x8488ebd2 roccat_common2_receive +EXPORT_SYMBOL_GPL drivers/hid/hid-roccat-common 0xccfc15b8 roccat_common2_send +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x31f64606 sensor_hub_remove_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x38b47522 sensor_hub_input_attr_get_raw_value +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x493fe354 sensor_hub_input_get_attribute_info +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0x58d70b49 sensor_hub_set_feature +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xbfe04105 sensor_hub_register_callback +EXPORT_SYMBOL_GPL drivers/hid/hid-sensor-hub 0xf3a921c8 sensor_hub_get_feature +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x01fd453e usbhid_lookup_quirk +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x1f0c5d1a usbhid_wait_io +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x63a630dd usbhid_set_leds +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x8a02c0b5 usbhid_submit_report +EXPORT_SYMBOL_GPL drivers/hid/usbhid/usbhid 0x9cdd9e1d hiddev_hid_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x0ade30c3 hsi_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x323cba1c hsi_alloc_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x32ca4642 hsi_register_client_driver +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x45c33cc5 hsi_free_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x61d026e0 hsi_release_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x68641388 hsi_register_port_event +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0x77232df9 hsi_put_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xaa1d4828 hsi_alloc_msg +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xacf58fa4 hsi_unregister_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xd0e59b9c hsi_register_controller +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xe2254e56 hsi_claim_port +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xff26e256 hsi_async +EXPORT_SYMBOL_GPL drivers/hsi/hsi 0xff62ee18 hsi_unregister_port_event +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x20b2e390 vmbus_recvpacket_raw +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x278c28f2 __vmbus_driver_register +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x3070cf94 vmbus_sendpacket_multipagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x4834661a vmbus_close +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x855723f7 vmbus_teardown_gpadl +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0x9844ace7 vmbus_sendpacket_pagebuffer +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0xc3f8d8f1 vmbus_open +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0xc91a78a4 vmbus_prep_negotiate_resp +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0xdc5936af vmbus_driver_unregister +EXPORT_SYMBOL_GPL drivers/hv/hv_vmbus 0xebb28308 vmbus_establish_gpadl +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x1faff12d pmbus_check_byte_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x3d27876a pmbus_do_probe +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x40db9089 pmbus_clear_faults +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x8043dae6 pmbus_set_page +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x86969927 pmbus_do_remove +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x8b80e61e pmbus_get_driver_info +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0x938ce68f pmbus_check_word_register +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xb6228d69 pmbus_read_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xc3fbe5ed pmbus_write_word_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xee766486 pmbus_read_byte_data +EXPORT_SYMBOL_GPL drivers/hwmon/pmbus/pmbus_core 0xfffca6a7 pmbus_write_byte +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x404ec932 i2c_dw_init +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x5bb1170b i2c_dw_isr +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x63cbc2eb i2c_dw_clear_int +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x71d4fa74 i2c_dw_xfer +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0x783f589a i2c_dw_read_comp_param +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xc6cf7f74 i2c_dw_is_enabled +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xcb80fe3c i2c_dw_enable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xe43534c2 i2c_dw_disable_int +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xf0777625 i2c_dw_func +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-designware-core 0xf7b3d82b i2c_dw_disable +EXPORT_SYMBOL_GPL drivers/i2c/busses/i2c-nforce2 0x5de090ac nforce2_smbus +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0xa115a27e i2c_del_mux_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-mux 0xf2b30409 i2c_add_mux_adapter +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x706e0ff5 i2c_setup_smbus_alert +EXPORT_SYMBOL_GPL drivers/i2c/i2c-smbus 0x731a0cc9 i2c_handle_smbus_alert +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x5ffb4b51 ad_sd_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x62a20c55 ad_sigma_delta_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x6f2a09e2 ad_sd_write_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x923886b5 ad_sd_read_reg +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x960edf79 ad_sd_validate_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0x9bfaaf93 ad_sd_init +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xc60e9bf0 ad_sd_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xeb5060e3 ad_sd_calibrate_all +EXPORT_SYMBOL_GPL drivers/iio/adc/ad_sigma_delta 0xfb170dc7 ad_sd_set_comm +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x099abe5f adis_write_reg +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x112fde02 adis_probe_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x18ac0443 adis_update_scan_mode +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x20b40c3d adis_init +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x3376db07 adis_remove_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x532c55f6 adis_check_status +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0x62900e3c adis_initial_startup +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xb0c659f9 adis_setup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xb1c4688b adis_cleanup_buffer_and_trigger +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xbe1885a2 adis_single_conversion +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xc2b19815 adis_reset +EXPORT_SYMBOL_GPL drivers/iio/imu/adis_lib 0xf80e0862 adis_read_reg +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x0a1c3b6d iio_enum_write +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x11d4dce3 iio_map_array_register +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x20ae48da iio_read_channel_raw +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x25400422 iio_get_channel_type +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x267c0508 iio_channel_release_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x26f6b499 iio_str_to_fixpoint +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x2a1fab3c iio_channel_stop_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x347efc62 iio_channel_get +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x3dc19053 iio_convert_raw_to_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x4bdccbbd iio_update_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x61a62e22 iio_channel_get_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x62b3aeca iio_alloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x707e2c94 iio_channel_cb_get_channels +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x763c2d93 iio_map_array_unregister +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x79dd2525 iio_read_channel_processed +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x7a711aef iio_channel_start_all_cb +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x7e6043c8 iio_channel_release_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0x8d9076a5 iio_channel_release +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xa178d9e3 iio_channel_get_all +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xa7832ec4 iio_enum_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xae27d42b iio_scan_mask_query +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xb2f53c01 iio_dealloc_pollfunc +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xb5ad9da4 iio_enum_available_read +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xc751750a iio_update_demux +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xdd66a695 iio_read_channel_scale +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xf314f4e2 iio_validate_scan_mask_onehot +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xf5984241 iio_push_to_buffers +EXPORT_SYMBOL_GPL drivers/iio/industrialio 0xfa560d25 iio_scan_mask_set +EXPORT_SYMBOL_GPL drivers/infiniband/core/ib_core 0xdbd019c4 ib_wq +EXPORT_SYMBOL_GPL drivers/infiniband/hw/ipath/ib_ipath 0x1514b2b2 ipath_debug +EXPORT_SYMBOL_GPL drivers/input/ff-memless 0x2d57b627 input_ff_create_memless +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x49a4fcbd adxl34x_remove +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0x66535a18 adxl34x_suspend +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0xe4586827 adxl34x_resume +EXPORT_SYMBOL_GPL drivers/input/misc/adxl34x 0xf7824a6a adxl34x_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x16b3e3d0 cyttsp_probe +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x5f62ea07 cyttsp_remove +EXPORT_SYMBOL_GPL drivers/input/touchscreen/cyttsp_core 0x9c010ab1 cyttsp_pm_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x00ebabb7 wm97xx_set_suspend_mode +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x0f9cb60c wm9705_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1222ab56 wm9712_codec +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x17204a72 wm97xx_set_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x17a2337d wm97xx_get_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x1836f903 wm97xx_register_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x2832088c wm97xx_read_aux_adc +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x40f576be wm97xx_config_gpio +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0x87515b1f wm97xx_reg_read +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xc55e2738 wm97xx_reg_write +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xc95433aa wm97xx_unregister_mach_ops +EXPORT_SYMBOL_GPL drivers/input/touchscreen/wm97xx-ts 0xde88abc8 wm9713_codec +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x1c5d45c5 ipack_driver_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x48d86b56 ipack_bus_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x59afde1b ipack_driver_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0x8b31de68 ipack_bus_unregister +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0xc87fdf2c ipack_device_register +EXPORT_SYMBOL_GPL drivers/ipack/ipack 0xeec024d3 ipack_device_unregister +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0x4de7b2d0 unregister_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/capi/kernelcapi 0xb17b7c77 register_capictr_notifier +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x12275188 gigaset_skb_rcvd +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x174700c3 gigaset_m10x_input +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x454aa44f gigaset_debuglevel +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x5522e5b8 gigaset_blockdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x56cbf3d0 gigaset_stop +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x685d6151 gigaset_start +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x6b4eaede gigaset_if_receive +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x7251ea9b gigaset_shutdown +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0x7c4558b7 gigaset_freecs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xa3151853 gigaset_dbg_buffer +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xaa1a5998 gigaset_freedriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xb0f32550 gigaset_m10x_send_skb +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xd084fc0d gigaset_initdriver +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xd3d90701 gigaset_isdn_rcv_err +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xdb9053a0 gigaset_fill_inbuf +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xdb992223 gigaset_handle_modem_response +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xdc25a839 gigaset_add_event +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xdf96cc7c gigaset_initcs +EXPORT_SYMBOL_GPL drivers/isdn/gigaset/gigaset 0xe2d148aa gigaset_skb_sent +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x0d6c3f9e dm_cell_release +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x17dd39d6 dm_deferred_set_create +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x2eb01e04 dm_deferred_set_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x52056752 dm_cell_release_no_holder +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x5ec4ee42 dm_bio_detain +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0x6791a44e dm_deferred_entry_dec +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb6d5c65d dm_deferred_set_add_work +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xb70b342a dm_bio_prison_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xca2e3a88 dm_deferred_entry_inc +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xcfa01a18 dm_cell_error +EXPORT_SYMBOL_GPL drivers/md/dm-bio-prison 0xebd06eaf dm_bio_prison_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x0ad0dc4f dm_bufio_mark_buffer_dirty +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x6aba7f5e dm_bufio_get_block_number +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x6d3f57bd dm_bufio_get_client +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x74dcd98c dm_bufio_get_aux_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x7c381a76 dm_bufio_get_block_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x9310ba06 dm_bufio_release_move +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x95b2d56c dm_bufio_client_create +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0x9c256008 dm_bufio_get_device_size +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xa1d2413a dm_bufio_read +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xa448e19f dm_bufio_prefetch +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xa82b2066 dm_bufio_write_dirty_buffers +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xafbda3f3 dm_bufio_new +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xc9a3422d dm_bufio_write_dirty_buffers_async +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xcbb1bae2 dm_bufio_get +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xd4bddf5c dm_bufio_issue_flush +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xe6024e59 dm_bufio_release +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xebcc64a4 dm_bufio_get_block_data +EXPORT_SYMBOL_GPL drivers/md/dm-bufio 0xeca7949e dm_bufio_client_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x55148ebc dm_register_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-multipath 0x76833236 dm_unregister_path_selector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x01d2f9ac dm_rh_recovery_start +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x202a6b9b dm_rh_delay +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x38dee54f dm_rh_bio_to_region +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x38efaf5a dm_region_hash_destroy +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x3a18389a dm_rh_update_states +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x4430764e dm_rh_region_to_sector +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x45ab972a dm_rh_dec +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x539efcae dm_rh_inc_pending +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7774620f dm_rh_stop_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x7d053fc5 dm_rh_start_recovery +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0x92e21ccf dm_rh_mark_nosync +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa1bea54e dm_region_hash_create +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa53387c7 dm_rh_flush +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa68e1f06 dm_rh_get_state +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xa83588eb dm_rh_recovery_end +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xbe38a431 dm_rh_recovery_prepare +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xd8aa4284 dm_rh_region_context +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfad9d53a dm_rh_get_region_size +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfc62ef4e dm_rh_get_region_key +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfd93482e dm_rh_recovery_in_flight +EXPORT_SYMBOL_GPL drivers/md/dm-region-hash 0xfdb72843 dm_rh_dirty_log +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x0054f69d dm_tm_pre_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x03ced457 dm_btree_lookup +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x08a936ca dm_btree_insert_notify +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x09aad4d5 dm_tm_open_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x17c36f29 dm_bm_checksum +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x1e3f728d dm_block_data +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x2c112836 dm_block_location +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x4035149a dm_sm_disk_open +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x40f7bd91 dm_tm_inc +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x42dbdfc3 dm_tm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x63b2ff62 dm_btree_insert +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x688d422d dm_bm_block_size +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x6da18e99 dm_tm_create_with_sm +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x72289260 dm_block_manager_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x74d47993 dm_sm_disk_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7ade1071 dm_tm_destroy +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x7b047bd9 dm_tm_create_non_blocking_clone +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x80c89b3d dm_tm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x98131759 dm_block_manager_create +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0x9e798e22 dm_bm_set_read_only +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xa6aae3ea dm_btree_find_highest_key +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xafeda29f dm_bm_write_lock_zero +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb7bad799 dm_bm_unlock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb967690a dm_btree_remove +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xb9a6ecf8 dm_tm_dec +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xd163cade dm_tm_commit +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xd29923fb dm_tm_shadow_block +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xdb562135 dm_btree_empty +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xf375d009 dm_bm_write_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xf5455120 dm_bm_read_lock +EXPORT_SYMBOL_GPL drivers/md/persistent-data/dm-persistent-data 0xf99dc2cf dm_btree_del +EXPORT_SYMBOL_GPL drivers/md/raid1 0xca8c63c1 md_raid1_congested +EXPORT_SYMBOL_GPL drivers/md/raid10 0x838baefd md_raid10_congested +EXPORT_SYMBOL_GPL drivers/md/raid456 0x0b0b79d4 md_raid5_congested +EXPORT_SYMBOL_GPL drivers/media/common/b2c2/b2c2-flexcop 0x66c0289a b2c2_flexcop_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x1bb3b045 saa7146_wait_for_debi_done +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x46e61b6d saa7146_vfree_destroy_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x4c42f287 saa7146_vmalloc_build_pgtable +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x8eb9897f saa7146_pgtable_free +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0x90c875fa saa7146_pgtable_build_single +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xd17460fd saa7146_unregister_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xd246331e saa7146_i2c_adapter_prepare +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xe3cd9b5c saa7146_debug +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xe85a8ab8 saa7146_pgtable_alloc +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xe9ae3322 saa7146_register_extension +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146 0xf1d665cb saa7146_setgpio +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x436a9ad0 saa7146_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x45010eec saa7146_vv_release +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x50418219 saa7146_register_device +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0x8ee65a73 saa7146_stop_preview +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xdf33a517 saa7146_set_hps_source_and_sync +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xe8e4952b saa7146_vv_init +EXPORT_SYMBOL_GPL drivers/media/common/saa7146/saa7146_vv 0xff439f77 saa7146_start_preview +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x0f557d1d sms_board_setup +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x210b790e smscore_register_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x21e36bf2 smscore_registry_getmode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x2b9bf38b sms_board_event +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x37d91069 smsendian_handle_tx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x45284ae9 smsendian_handle_rx_message +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x5558d6ce smscore_set_board_id +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x69e6e8c7 smscore_unregister_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x74ee9098 sms_board_load_modules +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x7548fb51 sms_board_power +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x76222253 sms_get_board +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x7838f5fa smscore_onresponse +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x7a133c4c smscore_getbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x7c576277 smsendian_handle_message_header +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x90fd7a56 smscore_start_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x9589e730 smscore_register_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0x99a81ab3 smsclient_sendrequest +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xa71f94c7 smscore_unregister_device +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xb3827537 smscore_putbuffer +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xb7db13f8 sms_board_led_feedback +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xbb713990 smscore_register_hotplug +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xbbdb5c42 smscore_unregister_client +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xc35a746a smscore_get_device_mode +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xde3fbc3d sms_board_lna_control +EXPORT_SYMBOL_GPL drivers/media/common/siano/smsmdtv 0xe56ecf12 smscore_get_board_id +EXPORT_SYMBOL_GPL drivers/media/dvb-frontends/tda18271c2dd 0xa03017f6 tda18271c2dd_attach +EXPORT_SYMBOL_GPL drivers/media/pci/cx88/cx88xx 0x2c57177d cx88_setup_xc3028 +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x02a5051d mantis_uart_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x12e6669a mantis_dvb_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x3bbb52de mantis_i2c_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x5c6c49d2 mantis_i2c_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x6ac3d2db mantis_frontend_power +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x75317d96 mantis_dvb_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x815a3855 mantis_dma_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x8c636c51 mantis_uart_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x90f008bf mantis_pci_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0x961d047d mantis_gpio_set_bits +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xa0afcf58 mantis_stream_control +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xa6efee32 mantis_pci_exit +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xb5572cee mantis_get_mac +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xb811dc85 mantis_ca_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xcc80cd70 mantis_frontend_soft_reset +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xe68d2359 mantis_dma_init +EXPORT_SYMBOL_GPL drivers/media/pci/mantis/mantis_core 0xeb4fa6bc mantis_ca_exit +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x17d15dd7 saa7134_queryctrl +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x3e6bc20f saa7134_ts_qops +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0x7cded4b5 saa7134_g_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0xd2e98f54 saa7134_s_ctrl_internal +EXPORT_SYMBOL_GPL drivers/media/pci/saa7134/saa7134 0xe0253081 saa7134_s_std_internal +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x2923c6e9 ttpci_budget_deinit +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x325cc405 ttpci_budget_init +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x33332358 ttpci_budget_init_hooks +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x4280c2ab ttpci_budget_debiwrite +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0x7948c222 budget_debug +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xa4c98d2f ttpci_budget_irq10_handler +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xd40db45a ttpci_budget_set_video_port +EXPORT_SYMBOL_GPL drivers/media/pci/ttpci/budget-core 0xecc130b5 ttpci_budget_debiread +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0x4d361aa1 radio_tea5777_init +EXPORT_SYMBOL_GPL drivers/media/radio/shark2 0xcbdaecdf radio_tea5777_exit +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x111afed5 ir_raw_event_set_idle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x1c4509ae ir_raw_event_store_edge +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x1e4b5852 rc_keyup +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x37c071b0 rc_map_unregister +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x3d4e42f3 rc_g_keycode_from_table +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x4ceee7f9 ir_raw_event_handle +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x553efb91 rc_core_debug +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x67e4b438 rc_allocate_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x73d7dce9 rc_repeat +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x7bc3bf45 rc_free_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x81aac2bf rc_map_register +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x87c46b67 ir_raw_event_store_with_filter +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x8ca705dc rc_register_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0x9ec2ec80 ir_raw_event_store +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xbdbb43b8 rc_unregister_device +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xbeb76c9c rc_map_get +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xeb2d12cb rc_keydown +EXPORT_SYMBOL_GPL drivers/media/rc/rc-core 0xfdf613a8 rc_keydown_notimeout +EXPORT_SYMBOL_GPL drivers/media/tuners/mt2063 0x5f0b2952 mt2063_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mt20xx 0x84a93aaf microtune_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/mxl5007t 0x75c6e507 mxl5007t_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda18271 0x389e1621 tda18271_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda827x 0x46fa70d0 tda827x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0x3bc0cc6d tda829x_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tda8290 0xeff82eb8 tda829x_probe +EXPORT_SYMBOL_GPL drivers/media/tuners/tda9887 0x74f67e90 tda9887_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x24f6b10d tea5761_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5761 0x797ac18e tea5761_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0x0bad6711 tea5767_autodetection +EXPORT_SYMBOL_GPL drivers/media/tuners/tea5767 0xe751a306 tea5767_attach +EXPORT_SYMBOL_GPL drivers/media/tuners/tuner-simple 0x086ac86d simple_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x017ea7c7 cx231xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x1ce022e3 cx231xx_disable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x30fd3ddf cx231xx_send_gpio_cmd +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x41e26884 cx231xx_init_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x52e83ca6 cx231xx_enable656 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x70a77c7a cx231xx_capture_start +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x78acbdef is_fw_load +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x88adad92 cx231xx_dev_init +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x8cb3de92 cx231xx_uninit_vbi_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x91ac27df cx231xx_dev_uninit +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0x97816845 cx231xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xac39827e cx231xx_init_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xb556bcc1 cx231xx_send_usb_command +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xbf8bed2e cx231xx_uninit_bulk +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xce5971e3 cx231xx_unmute_audio +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xcef629c5 cx231xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xcf8b8a2e cx231xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xdb2e24bb cx231xx_set_alt_setting +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xe6dc85da cx231xx_enable_i2c_port_3 +EXPORT_SYMBOL_GPL drivers/media/usb/cx231xx/cx231xx 0xe78c7fe7 cx231xx_demod_reset +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-demod 0x0b481bd5 mxl111sf_demod_attach +EXPORT_SYMBOL_GPL drivers/media/usb/dvb-usb-v2/mxl111sf-tuner 0xb00fc5e9 mxl111sf_tuner_attach +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x0309de76 em28xx_write_regs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x1b9d355b em28xx_write_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x2a41696c em28xx_init_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x2ce4ddc0 em28xx_write_reg_bits +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x5af5eaec em28xx_alloc_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x5c05aa20 em28xx_read_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x635e3515 em28xx_set_mode +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x75e9ab8a em28xx_write_ac97 +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0x7fc8652c em28xx_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xac044f42 em28xx_uninit_isoc +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xbf37e34b em28xx_read_reg +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xda1a60e0 em28xx_gpio_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xe15429d8 em28xx_stop_urbs +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xe9c0d3af em28xx_audio_analog_set +EXPORT_SYMBOL_GPL drivers/media/usb/em28xx/em28xx 0xfa31f96d em28xx_audio_setup +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x2309a6d6 tm6000_xc5000_callback +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x4b507125 tm6000_set_audio_bitrate +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x72b65e13 tm6000_set_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0x89b611dd tm6000_debug +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xa2eab417 tm6000_get_reg +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xbdaaefd0 tm6000_set_reg_mask +EXPORT_SYMBOL_GPL drivers/media/usb/tm6000/tm6000 0xdff8e89d tm6000_tuner_callback +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x2c3ea1a9 v4l2_i2c_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x4ce87d70 v4l2_spi_new_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x53105839 v4l2_detect_cvt +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x5d9d3491 v4l_match_dv_timings +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x6f344bb9 v4l2_calc_aspect_ratio +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x7eaf8e7a v4l2_detect_gtf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x813f3de4 v4l2_find_nearest_format +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x94632f90 v4l_fill_dv_preset_info +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0x97d9adb4 v4l2_i2c_subdev_addr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xc22b482b v4l2_i2c_new_subdev_board +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xe1dbc729 v4l2_i2c_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xec27886f v4l2_spi_subdev_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xf2a353ac v4l2_i2c_tuner_addrs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-common 0xf5ef842e v4l_bound_align_image +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x416137f2 v4l2_int_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x4bf2f4e8 v4l2_int_ioctl_0 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0x64fb8aa4 v4l2_int_ioctl_1 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0xa5228b24 v4l2_int_device_try_attach_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-int-device 0xe589357f v4l2_int_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x376d8c8f v4l2_m2m_buf_remove +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x448d6454 v4l2_m2m_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x4e1597c7 v4l2_m2m_ctx_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x5aa23243 v4l2_m2m_ctx_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x5ee08ff1 v4l2_m2m_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x6197979f v4l2_m2m_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0x776f4ab8 v4l2_m2m_buf_queue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xae260867 v4l2_m2m_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xb5e9469a v4l2_m2m_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xba382d9d v4l2_m2m_next_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xc6fca5ad v4l2_m2m_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xe3f4e740 v4l2_m2m_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xeb1d179b v4l2_m2m_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xfc7e9414 v4l2_m2m_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/v4l2-mem2mem 0xfe4b47e0 v4l2_m2m_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x0eb74d96 videobuf_read_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x1012dbb8 videobuf_read_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x16aa2849 videobuf_read_start +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x17f9a330 videobuf_alloc_vb +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x2f346cde videobuf_stop +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x5602a5e7 videobuf_next_field +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x5cb8e231 videobuf_queue_is_busy +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x62bc5daa __videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x65912ae0 videobuf_waiton +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x6ae471e4 videobuf_read_one +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x6b7a8b06 videobuf_mmap_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x7233c802 videobuf_queue_to_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x73d1980a videobuf_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x97aef5c5 videobuf_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0x99a7caed videobuf_queue_core_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xa3b1fc97 videobuf_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xa4495c65 videobuf_iolock +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xa77272c4 videobuf_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xa983b377 videobuf_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xbf6a69c1 videobuf_poll_stream +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xd889855f videobuf_mmap_mapper +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xeccdc80b videobuf_queue_cancel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xf1543f45 videobuf_mmap_setup +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-core 0xf5af601f videobuf_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x27a33ed8 videobuf_dma_contig_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x430de3f5 videobuf_to_dma_contig +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x579fc357 videobuf_queue_dma_contig_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-contig 0x83614135 videobuf_queue_dma_contig_init_cached +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x04689b74 videobuf_queue_sg_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x0af99d55 videobuf_dma_init_overlay +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x10bc6424 videobuf_to_dma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x2056ed3d videobuf_dma_init_kernel +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x34a908ab videobuf_dma_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x553a86d0 videobuf_sg_alloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x5558797c videobuf_dma_map +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0x8311834d videobuf_dma_unmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0xc382a600 videobuf_dma_init_user +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-dma-sg 0xeefc7422 videobuf_dma_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0x5b82170a videobuf_to_vmalloc +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0xb7942148 videobuf_queue_vmalloc_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf-vmalloc 0xe0c2a667 videobuf_vmalloc_free +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x0274639c vb2_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x0aea27b9 vb2_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x187eaf6e vb2_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x1b79eea7 vb2_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x1bbe1164 vb2_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x1c851393 vb2_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x36328a10 vb2_plane_cookie +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x4c9e3930 vb2_ioctl_querybuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x506d299d vb2_queue_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x53ff58ce vb2_ioctl_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x5d29b433 vb2_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x600d58e7 vb2_ops_wait_prepare +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x64372285 vb2_ioctl_streamoff +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x784f6b74 vb2_fop_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x7a52f186 vb2_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x83da4021 vb2_queue_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x8b197226 vb2_fop_poll +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x8d997a8a vb2_ioctl_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x8e48dfd2 vb2_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x9710ca74 vb2_fop_read +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x97db68e0 vb2_ioctl_create_bufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x9d16f74e vb2_ioctl_dqbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0x9df0c4a0 vb2_plane_vaddr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa08ff4a5 vb2_wait_for_all_buffers +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa3bf5dcc vb2_fop_write +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa66b9a0a vb2_ops_wait_finish +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xa9d09ca7 vb2_ioctl_expbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xb270645b vb2_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xb4437754 vb2_ioctl_streamon +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xc7908d76 vb2_buffer_done +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xd1813c9f vb2_ioctl_prepare_buf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xe9140b5e vb2_qbuf +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xf6ab53e7 vb2_reqbufs +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-core 0xffed0295 vb2_fop_mmap +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0x769ac7e7 vb2_dma_contig_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xc62adc8d vb2_dma_contig_init_ctx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-dma-contig 0xe57f0426 vb2_dma_contig_cleanup_ctx +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x0344f8fd vb2_get_contig_userptr +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x2bb69eba vb2_common_vm_ops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0x5293fc53 vb2_get_vma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-memops 0xb60629f0 vb2_put_vma +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videobuf2-vmalloc 0xe9802cc6 vb2_vmalloc_memops +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x0736f05b v4l2_fh_init +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x07aaf423 v4l2_device_register_subdev_nodes +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x0b0f5f1c v4l2_event_unsubscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x180d443e v4l2_fh_is_singular +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x18c954e3 v4l2_device_put +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x3bd13dd2 v4l2_fh_open +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x485d5d75 v4l2_fh_exit +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x4cf91098 v4l2_event_unsubscribe_all +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x6601d862 v4l2_device_unregister +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x766a9c42 v4l2_fh_del +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x83663108 v4l2_device_disconnect +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0x923f08df v4l2_event_subscribe +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xa6d3d632 v4l2_compat_ioctl32 +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xa99225c8 v4l2_device_set_name +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xc60784ed v4l2_device_unregister_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xcc8dab86 v4l2_fh_add +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xceec0792 v4l2_device_register_subdev +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xd6c39bc2 v4l2_device_register +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xd78fdf40 v4l2_fh_release +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xdfb96544 v4l2_event_dequeue +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xe104c9f5 v4l2_event_pending +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xeb9344aa v4l2_event_queue_fh +EXPORT_SYMBOL_GPL drivers/media/v4l2-core/videodev 0xfe38d243 v4l2_event_queue +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x005440ae i2o_sg_tablesize +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x10a0892e i2o_pool_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x951c563d i2o_dma_realloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0x97c637c0 i2o_dma_alloc +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xac2d0e29 i2o_dma_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xad702d74 i2o_dma_map_single +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xb8f3e2e8 i2o_pool_free +EXPORT_SYMBOL_GPL drivers/message/i2o/i2o_core 0xf935d440 i2o_dma_map_sg +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x205acafc pm80x_deinit +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x2f4bfc43 pm80x_pm_ops +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0x7117efa0 pm80x_regmap_config +EXPORT_SYMBOL_GPL drivers/mfd/88pm80x 0xa74aafec pm80x_init +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x45508267 lm3533_read +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x6002e3cf lm3533_write +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-core 0x69b274a1 lm3533_update +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x390e6e79 lm3533_ctrlbank_set_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x406d5349 lm3533_ctrlbank_set_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x444f3ece lm3533_ctrlbank_set_max_current +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0x48a08ca4 lm3533_ctrlbank_get_brightness +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xa5515f16 lm3533_ctrlbank_disable +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xdb5f10b0 lm3533_ctrlbank_get_pwm +EXPORT_SYMBOL_GPL drivers/mfd/lm3533-ctrlbank 0xf29f21e8 lm3533_ctrlbank_enable +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x0e4a3c69 mc13xxx_variant_mc34708 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x10b9f036 mc13xxx_common_cleanup +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x1c45c901 mc13xxx_variant_mc13783 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x5cff8221 mc13xxx_variant_mc13892 +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0x98318d94 mc13xxx_adc_do_conversion +EXPORT_SYMBOL_GPL drivers/mfd/mc13xxx-core 0xb93c7832 mc13xxx_common_init +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x003f76c8 pcf50633_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x0cb629e3 pcf50633_irq_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x2253bf98 pcf50633_free_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x352473ce pcf50633_write_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x4c4f68c9 pcf50633_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x6a7c3b9f pcf50633_irq_mask_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0x9ca351fb pcf50633_register_irq +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xbb33a31a pcf50633_reg_set_bit_mask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xc80d39bd pcf50633_irq_unmask +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xe498fea9 pcf50633_reg_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633 0xea75c10d pcf50633_read_block +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xa98d42d3 pcf50633_adc_async_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-adc 0xeb649d85 pcf50633_adc_sync_read +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x69c1bc57 pcf50633_gpio_power_supply_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x6fd50285 pcf50633_gpio_invert_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0x8500d008 pcf50633_gpio_get +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xcd9ec17b pcf50633_gpio_invert_set +EXPORT_SYMBOL_GPL drivers/mfd/pcf50633-gpio 0xeb55dbf4 pcf50633_gpio_set +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x01a33234 retu_write +EXPORT_SYMBOL_GPL drivers/mfd/retu-mfd 0x4fca3918 retu_read +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x10260625 rtsx_pci_send_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x3ea2cb09 rtsx_pci_send_cmd_no_wait +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x47e7d3f0 rtsx_pci_stop_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x58aa402a rtsx_pci_add_cmd +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x58b0af42 rtsx_pci_card_pull_ctl_disable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x67073d62 rtsx_pci_card_power_on +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x7e8afe24 rtsx_pci_transfer_data +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x808d1a61 rtsx_pci_switch_output_voltage +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x84dd0f96 rtsx_pci_write_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0x936553b5 rtsx_pci_card_pull_ctl_enable +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xa258f17d rtsx_pci_read_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xa5610e90 rtsx_pci_card_exist +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xa9252914 rtsx_pci_read_phy_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xa99422a2 rtsx_pci_write_ppbuf +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xbced7641 rtsx_pci_card_exclusive_check +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xc5255444 rtsx_pci_card_power_off +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xc98f76e8 rtsx_pci_start_run +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xd247f61a rtsx_pci_switch_clock +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xd6d13d24 rtsx_pci_complete_unfinished_transfer +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xeb95fc15 rtsx_pci_write_register +EXPORT_SYMBOL_GPL drivers/mfd/rtsx_pci 0xfbf5c525 rtsx_pci_read_register +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x12f596a3 sm501_unit_power +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x44609446 sm501_misc_control +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x4884de73 sm501_modify_reg +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0x9a34e6f0 sm501_set_clock +EXPORT_SYMBOL_GPL drivers/mfd/sm501 0xbf9b1f26 sm501_find_clock +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x14679436 tps65217_reg_write +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x3fb082bc tps65217_set_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0x6577abfe tps65217_clear_bits +EXPORT_SYMBOL_GPL drivers/mfd/tps65217 0xf189df12 tps65217_reg_read +EXPORT_SYMBOL_GPL drivers/mfd/twl4030-madc 0x08b8dd2e twl4030_madc_conversion +EXPORT_SYMBOL_GPL drivers/mfd/twl4030-madc 0x4362dc66 twl4030_get_madc_conversion +EXPORT_SYMBOL_GPL drivers/mfd/ucb1400_core 0xf4a68b98 ucb1400_adc_read +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x185efd6e cb710_set_irq_handler +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0x47b403ca cb710_pci_update_config_reg +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xe0899ab2 cb710_sg_dwiter_read_next_block +EXPORT_SYMBOL_GPL drivers/misc/cb710/cb710 0xed81e9f4 cb710_sg_dwiter_write_next_block +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x27cb133b eeprom_93cx6_multiread +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x63d2ff63 eeprom_93cx6_wren +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x822222db eeprom_93cx6_write +EXPORT_SYMBOL_GPL drivers/misc/eeprom/eeprom_93cx6 0x98bb5a22 eeprom_93cx6_read +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x07a83b98 enclosure_component_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x2ab2dcdf enclosure_unregister +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x3e58043e enclosure_register +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x5530e451 enclosure_find +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x5576a912 enclosure_add_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0x8fdbf32b enclosure_remove_device +EXPORT_SYMBOL_GPL drivers/misc/enclosure 0xcf181fb2 enclosure_for_each_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x1438d9bd lis3lv02d_init_device +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x1cac6eeb lis3lv02d_poweroff +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x1f7d9b67 lis3lv02d_joystick_disable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x7402eaf9 lis3lv02d_remove_fs +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0x82cf3c4a lis3lv02d_init_dt +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xda1f1479 lis3lv02d_joystick_enable +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xdd8c155a lis3lv02d_poweron +EXPORT_SYMBOL_GPL drivers/misc/lis3lv02d/lis3lv02d 0xef04a782 lis3_dev +EXPORT_SYMBOL_GPL drivers/misc/pti 0x19f09b98 pti_release_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x23bde487 pti_request_masterchannel +EXPORT_SYMBOL_GPL drivers/misc/pti 0x52a78e81 pti_writedata +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x194f566b st_register +EXPORT_SYMBOL_GPL drivers/misc/ti-st/st_drv 0x4fc7447a st_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x1778fbae sdhci_runtime_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x21042f7b sdhci_remove_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x2922229e sdhci_resume_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x536df285 sdhci_free_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x5cc24434 sdhci_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0x7a252e41 sdhci_runtime_suspend_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xa10d9b46 sdhci_add_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xbab35cf3 sdhci_enable_irq_wakeups +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci 0xcc8a35b9 sdhci_alloc_host +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x22137561 sdhci_get_of_property +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x5825e80e sdhci_pltfm_register +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x72522917 sdhci_pltfm_init +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0x8fb9a67e sdhci_pltfm_pmops +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0xd5ce3664 sdhci_pltfm_unregister +EXPORT_SYMBOL_GPL drivers/mmc/host/sdhci-pltfm 0xed3e5e01 sdhci_pltfm_free +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0x07e47fe3 cfi_cmdset_0200 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xa17e0dfa cfi_cmdset_0001 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0001 0xfe9a174f cfi_cmdset_0003 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x3cd09935 cfi_cmdset_0002 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0x8318ac5f cfi_cmdset_0006 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0002 0xd3dff44e cfi_cmdset_0701 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_cmdset_0020 0xd8602099 cfi_cmdset_0020 +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x1e4ecb91 cfi_qry_mode_off +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x1ef5f24d cfi_qry_present +EXPORT_SYMBOL_GPL drivers/mtd/chips/cfi_util 0x549e0021 cfi_qry_mode_on +EXPORT_SYMBOL_GPL drivers/mtd/devices/doc2001plus 0xe1766213 DoCMilPlus_init +EXPORT_SYMBOL_GPL drivers/mtd/devices/docecc 0x45937659 doc_decode_ecc +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x0ca73bac deregister_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1422c0b4 mtd_lock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x1e64e5da put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x22410625 mtd_lock_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x288a499f mtd_point +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x2bef23b2 __put_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x48d02efd mtd_erase +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x49f31e9d mtd_erase_callback +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x4f279aae register_mtd_parser +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5544f75b mtd_read_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x5577524f mtd_kmalloc_up_to +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x57135931 get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x60c4aa8f mtd_panic_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x6c9b6100 mtd_write_user_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x756f1ac2 __mtd_next_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x762cba4f mtd_read +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x7cd01f9b mtd_block_isbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x849b568e mtd_read_fact_prot_reg +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x85a8a8b9 __get_mtd_device +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8ddf090e mtd_get_fact_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x8ef5959e mtd_get_device_size +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x96c0ff7c register_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0x9e5fd673 mtd_is_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xade8493a mtd_device_unregister +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb37c775d mtd_is_locked +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xb4d8014c mtd_table_mutex +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc0b7bc03 mtd_get_user_prot_info +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc577dc8f mtd_writev +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc5bfc542 mtd_del_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xc5fdc7ff kill_mtd_super +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xcfce4f1e mtd_device_parse_register +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xd02d8d83 mtd_read_oob +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xd64a3cad get_mtd_device_nm +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xdba710e1 mtd_unpoint +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xde92eb53 unregister_mtd_user +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe10f8b9f mtd_write +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe528fba8 mtd_unlock +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe56e62c4 mtd_get_unmapped_area +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xe7f38b10 mtd_add_partition +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xecce8d97 mtd_block_markbad +EXPORT_SYMBOL_GPL drivers/mtd/mtd 0xfca42c65 mount_mtd +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x0977ef3b deregister_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x0baaa329 add_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x8bd177b5 register_mtd_blktrans +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0x8e8c2d6b mtd_blktrans_cease_background +EXPORT_SYMBOL_GPL drivers/mtd/mtd_blkdevs 0xd40f5ef8 del_mtd_blktrans_dev +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x5772f662 nand_update_bbt +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0x604eaa9d nand_release +EXPORT_SYMBOL_GPL drivers/mtd/nand/nand 0xe5e569e2 nand_wait_ready +EXPORT_SYMBOL_GPL drivers/mtd/nand/sm_common 0xd5433d4d sm_register_device +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0x42052189 onenand_release +EXPORT_SYMBOL_GPL drivers/mtd/onenand/onenand 0xaa1004ae onenand_scan +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x37bf63be ubi_leb_map +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x38e10c1d ubi_flush +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x42801d20 ubi_sync +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x4eea5637 ubi_leb_write +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x54329fba ubi_get_volume_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x5cfdd22d ubi_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6a270406 ubi_open_volume_path +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x6f09ba8a ubi_register_volume_notifier +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x770d4127 ubi_leb_change +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0x86e53fe7 ubi_do_get_device_info +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xa0a8ef43 ubi_open_volume_nm +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xcf42c6f2 ubi_leb_unmap +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xd695dd36 ubi_close_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xdadcb0ea ubi_open_volume +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xec6a8b94 ubi_leb_erase +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xf16e649a ubi_leb_read +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfc5d85ec ubi_is_mapped +EXPORT_SYMBOL_GPL drivers/mtd/ubi/ubi 0xfd6f0ef9 ubi_unregister_volume_notifier +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x15ca2d58 register_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x15eed64c unregister_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x2637783c alloc_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x2e1401cb c_can_power_down +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0x72ae87b0 free_c_can_dev +EXPORT_SYMBOL_GPL drivers/net/can/c_can/c_can 0xe7286c7b c_can_power_up +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x17f53113 alloc_can_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x1c03ed28 can_free_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x222c295a can_len2dlc +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2a23be0d free_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x2a331675 can_get_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x69dc9434 can_bus_off +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x71257b1a alloc_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0x7d83a49b register_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xa1360eca open_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb1219078 unregister_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xb346573b can_dlc2len +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xc31fc2d4 close_candev +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xe169aa24 alloc_can_err_skb +EXPORT_SYMBOL_GPL drivers/net/can/can-dev 0xe32941ff can_put_echo_skb +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x11c538a5 alloc_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x4cf59318 register_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0x680e8718 unregister_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/cc770/cc770 0xf515b783 free_cc770dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x49ebd0d2 sja1000_interrupt +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0x755889e0 free_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xc1347786 unregister_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xca7c113d alloc_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/can/sja1000/sja1000 0xdbee8700 register_sja1000dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x1616278f macb_set_rx_mode +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x85e2ac27 macb_get_hwaddr +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0x937a4d40 macb_ioctl +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xb46ee42b macb_mii_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xc32988a0 macb_ethtool_ops +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xc3e040d8 macb_get_stats +EXPORT_SYMBOL_GPL drivers/net/ethernet/cadence/macb 0xdfd2858f macb_set_hwaddr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x0261f4a5 mlx4_fmr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x0b01e691 mlx4_multicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x0d824e61 mlx4_mtt_cleanup +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x1fc867c9 mlx4_qp_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x20b91b13 mlx4_fmr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x2311ecec mlx4_INIT_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x240fb57f mlx4_put_eth_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x2cb00d37 mlx4_mr_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x36ca60c7 mlx4_unicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x38625bfa mlx4_xrcd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x389f40ce mlx4_get_protocol_dev +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x39a821ed mlx4_qp_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x39c84d76 mlx4_pd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3aa8d612 mlx4_fmr_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3b363726 mlx4_srq_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3c334175 mlx4_uar_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3da40fc8 mlx4_find_cached_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3f062028 mlx4_bf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x3f1aac68 mlx4_flow_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x44fa8074 mlx4_register_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x499a9b7b mlx4_uar_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4b674b29 mlx4_multicast_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4dc906f1 mlx4_flow_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x4fdfef39 mlx4_flow_steer_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x50e64968 mlx4_buf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x54d7c83d mlx4_free_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x567618ec mlx4_SYNC_TPT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x5cec3c95 mlx4_srq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x5f792101 mlx4_qp_release_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x6156102a mlx4_unregister_interface +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x66bb7dc4 mlx4_free_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x68c860dd mlx4_db_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x6b7d1336 mlx4_buf_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x6b897b2f mlx4_cq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x6f629d89 mlx4_cq_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x71a8071c __mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x71b8a6ce mlx4_bf_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x78822c7a mlx4_multicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x7a8283f3 mlx4_write_mtt +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x7b31f4e9 __mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x83d7d042 mlx4_mtt_addr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x89dabcc7 mlx4_unregister_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x8ab28710 mlx4_register_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x8c465d32 mlx4_alloc_cmd_mailbox +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9ae409ef mlx4_wol_write +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9b4427c1 mlx4_srq_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0x9c0aa522 mlx4_qp_query +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa3b3bd63 __mlx4_cmd +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa47472e2 mlx4_unregister_vlan +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa56d62c3 mlx4_qp_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xa8a5dca1 mlx4_counter_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb017231a mlx4_srq_arm +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb1ae1ecb mlx4_cq_resize +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb64934d3 mlx4_qp_to_ready +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xb81ba4c8 mlx4_fmr_unmap +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbb335449 mlx4_unicast_promisc_add +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xbc262fe5 mlx4_unicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xc6f723c7 mlx4_cq_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xca1ec725 mlx4_get_eth_qp +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xca5cf1d0 mlx4_mtt_init +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xccbd6564 mlx4_register_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xccbd764b mlx4_xrcd_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xcffa480d mlx4_counter_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xd1300cd6 mlx4_flow_steer_promisc_remove +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xd27bb6f5 mlx4_qp_modify +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xdc1ff0b0 mlx4_buf_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe0eb92c1 mlx4_db_alloc +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe2c886eb mlx4_multicast_detach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe84563c4 mlx4_qp_reserve_range +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xe96aa5cf mlx4_unicast_attach +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xeb43c8c3 mlx4_CLOSE_PORT +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xec1472f6 mlx4_pd_free +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xeeb22a33 mlx4_replace_mac +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf070b8cb mlx4_wol_read +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf40b8869 mlx4_mr_enable +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xf9a6575f mlx4_map_phys_fmr +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xfaa0ac07 mlx4_alloc_hwq_res +EXPORT_SYMBOL_GPL drivers/net/ethernet/mellanox/mlx4/mlx4_core 0xffe97571 mlx4_mr_alloc +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x1e184763 macvlan_common_newlink +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x4178cd9b macvlan_start_xmit +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x4cebf895 macvlan_link_register +EXPORT_SYMBOL_GPL drivers/net/macvlan 0x563ce3bd macvlan_common_setup +EXPORT_SYMBOL_GPL drivers/net/macvlan 0xb5aa22b1 macvlan_dellink +EXPORT_SYMBOL_GPL drivers/net/macvtap 0x637d3778 macvtap_get_socket +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x16688b90 usbnet_cdc_status +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x699f0acd usbnet_cdc_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0x6cd932ae usbnet_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ether 0xbf05950d usbnet_generic_cdc_bind +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x06d0634a cdc_ncm_rx_verify_nth16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x0b6545c5 cdc_ncm_select_altsetting +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x144aabb6 cdc_ncm_fill_tx_frame +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0x5fa422ef cdc_ncm_rx_verify_ndp16 +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xb5226acf cdc_ncm_bind_common +EXPORT_SYMBOL_GPL drivers/net/usb/cdc_ncm 0xc899fe5b cdc_ncm_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x16fe0ad8 rndis_rx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x27ab361a rndis_status +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x3f424dde generic_rndis_bind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0x44afd6d4 rndis_command +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xdbae5afd rndis_unbind +EXPORT_SYMBOL_GPL drivers/net/usb/rndis_host 0xebe84dff rndis_tx_fixup +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0b8d58dc usbnet_start_xmit +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x0bbae358 usbnet_tx_timeout +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x237b2fac usbnet_set_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x32965ed9 usbnet_get_endpoints +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x4014d4f8 usbnet_nway_reset +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x565c3ba9 usbnet_purge_paused_rxq +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x58b7c3d4 usbnet_read_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x5ba4eedb usbnet_get_msglevel +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x676ebcf5 usbnet_write_cmd_async +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x68097160 usbnet_write_cmd_nopm +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x6ba25165 usbnet_get_drvinfo +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x701b9e2d usbnet_disconnect +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9487d289 usbnet_change_mtu +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x980318d2 usbnet_read_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9cfb4334 usbnet_get_ethernet_addr +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0x9e4abe3a usbnet_stop +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xa8f66781 usbnet_write_cmd +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xb00292bc usbnet_get_settings +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbaa5a89b usbnet_resume_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xbcb886ca usbnet_defer_kevent +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc12b0875 usbnet_probe +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xc4e9525c usbnet_pause_rx +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xd072fd24 usbnet_skb_return +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xdf2634b5 usbnet_open +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe2e54975 usbnet_unlink_rx_urbs +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe4a0bfd7 usbnet_get_link +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe5466e05 usbnet_suspend +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xe9155924 usbnet_resume +EXPORT_SYMBOL_GPL drivers/net/usb/usbnet 0xfd01557d usbnet_set_msglevel +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x07a9246b i2400m_cmd_enter_powersave +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x2efc4194 i2400m_tx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x5a22e9c7 i2400m_dev_reset_handle +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x608897d3 i2400m_dev_bootstrap +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x740ef99c i2400m_setup +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x8cb991a1 i2400m_release +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x92707b29 i2400m_is_boot_barker +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0x9fbba2ca i2400m_post_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa2b09d1d i2400m_init +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xa2d58db5 i2400m_error_recovery +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb00b793c i2400m_bm_cmd_prepare +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xb5c60996 i2400m_tx_msg_sent +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xbb91bb50 i2400m_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xbfb31324 i2400m_pre_reset +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xc1f92b04 i2400m_rx +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xcd078e37 i2400m_tx_msg_get +EXPORT_SYMBOL_GPL drivers/net/wimax/i2400m/i2400m 0xcdad6711 i2400m_netdev_setup +EXPORT_SYMBOL_GPL drivers/net/wireless/ipw2x00/libipw 0x845ea4a5 libipw_rx_any +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0x1ee34c3f _il_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0x486d8127 il_dealloc_bcast_stations +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0x84bf7880 il_mac_tx_last_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0xa4ceb0dc il_prep_station +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlegacy/iwlegacy 0xc7017a0d il_remove_station +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x0129e14f iwl_test_parse +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x14745dc8 iwl_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x1fb6cf68 iwl_set_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x2027bb1c iwl_read_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x23b31849 iwl_notification_wait_notify +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x2f6b8fff _iwl_read_targ_mem_dwords +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x3bd594c1 iwl_clear_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x3ee6a39d iwl_set_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x5638c7ea iwl_write_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x59e1abb0 iwl_clear_bits_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x5aeedb6f __iwl_err +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x5c52e109 iwl_opmode_deregister +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x6715334b iwl_init_notification_wait +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x690cb166 iwl_test_init +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x6e10caa5 iwl_parse_eeprom_data +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x7674a7ea iwl_grab_nic_access_silent +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x792b6f81 iwl_opmode_register +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x7b874b33 iwl_write_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x7b953998 iwl_test_handle_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x848a480e __iwl_dbg +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x897cb3dc iwl_nvm_check_version +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x9282f030 iwl_read_targ_mem +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x94a0a617 iwl_release_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x95795c57 iwl_abort_notification_waits +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x95d6f74a iwlwifi_mod_params +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0x9d70da4a iwl_set_bits_mask_prph +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xa70ab48f _iwl_write_targ_mem_dwords +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xb7b47270 iwl_poll_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xb8911bc6 __iwl_warn +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xc592e480 iwl_write_targ_mem +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xca1cc372 iwl_test_dump +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xcb3ea8f1 iwl_test_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xcc2474a9 iwl_set_bits_mask +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xccd8e661 iwl_poll_direct_bit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xce22137a iwl_test_free +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xcf341945 iwl_notification_wait_init +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xd1db77fe iwl_wait_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xdd3e32a4 iwl_remove_notification +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xe4fc9d98 __iwl_crit +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xe8a45d6b __iwl_info +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xf801e198 iwl_grab_nic_access +EXPORT_SYMBOL_GPL drivers/net/wireless/iwlwifi/iwlwifi 0xfed7bfb6 iwl_read_direct32 +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x12437158 lbs_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x12b8c077 lbs_get_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x24734356 lbs_host_to_card_done +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x24ce3e7a lbs_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x24d27c61 lbs_stop_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3c69d6d6 lbs_notify_command_response +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x3f98dae8 lbs_queue_event +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x49184f62 lbs_host_sleep_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x4daf9348 lbs_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5b9cb927 lbs_process_rxed_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x5fdf38b8 lbs_disablemesh +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x76cadaac lbs_get_firmware_async +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0x98537238 lbs_start_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xa66923f4 lbs_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xdd11bd54 lbs_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf3fecde8 __lbs_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf52585a7 lbs_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas/libertas 0xf64277de lbs_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x23043a9f lbtf_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x4e542d2b lbtf_bcn_sent +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x4fd6d5bc lbtf_cmd_response_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0x6584536c lbtf_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xc85e6899 lbtf_debug +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xcbce9778 __lbtf_cmd +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xf647ca2c lbtf_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xf882f9ba lbtf_send_tx_feedback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf 0xfb48f6c3 lbtf_cmd_copyback +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xa036ea00 if_usb_reset_device +EXPORT_SYMBOL_GPL drivers/net/wireless/libertas_tf/libertas_tf_usb 0xfc131ee8 if_usb_prog_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x013db14e mwifiex_disable_auto_ds +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x03206309 mwifiex_add_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x1edd942d mwifiex_handle_rx_packet +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x3d8c5912 mwifiex_process_sleep_confirm_resp +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x5fd24de3 mwifiex_cancel_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x735d0572 mwifiex_deauthenticate +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0x878fc232 mwifiex_process_hs_config +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xa83e05af mwifiex_del_virtual_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xad6e1292 mwifiex_main_process +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xb5732533 mwifiex_remove_card +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xb9b42b9e mwifiex_add_card +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xd98ceb6a mwifiex_enable_hs +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xe1971540 mwifiex_write_data_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/mwifiex/mwifiex 0xf469a26f mwifiex_init_shutdown_fw +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x0bdff141 p54_unregister_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x17aa8259 p54_free_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x4de09b29 p54_rx +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x717a8862 p54_free_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x7eae3f57 p54_parse_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x8b8aed9c p54_init_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0x98fc959d p54_parse_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xd89eefad p54_register_common +EXPORT_SYMBOL_GPL drivers/net/wireless/p54/p54common 0xfd9243cc p54_read_eeprom +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x015929a2 rt2800_config_erp +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x06dbe6ff rt2800_link_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x073a635c rt2800_set_rts_threshold +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x07ac1ea8 rt2800_load_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x113fc64e rt2800_config_ant +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x1146bdb1 rt2800_write_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x27b310de rt2800_efuse_detect +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x2992e60e rt2800_txdone_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x2f8bd125 rt2800_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x3a64081e rt2800_probe_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x3f7037c6 rt2800_check_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x4c7449fe rt2800_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x4e19a061 rt2800_process_rxwi +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x6edb0205 rt2800_enable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x743667ae rt2800_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x771945fc rt2800_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x77ced514 rt2800_ampdu_action +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x7d399adc rt2800_config_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0x984de465 rt2800_get_survey +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xa02fd678 rt2800_gain_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xa3e5bcca rt2800_write_tx_data +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xb934593c rt2800_config_shared_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xba55444d rt2800_clear_beacon +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xbdf8dd9c rt2800_link_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xca8aaee4 rt2800_get_tkip_seq +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xcfd18da3 rt2800_read_eeprom_efuse +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd2fc06a1 rt2800_reset_tuner +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd5a0c225 rt2800_disable_wpdma +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd910e4cb rt2800_config_intf +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xd9221320 rt2800_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xdaa11a75 rt2800_get_tsf +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xe1db77a2 rt2800_vco_calibration +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xe6793367 rt2800_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xf1ac05aa rt2800_mcu_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xf50e50dd rt2800_wait_csr_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xf709460c rt2800_config_pairwise_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2800lib 0xfb146912 rt2800_wait_wpdma_ready +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x00407d84 rt2x00queue_get_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x027aea57 rt2x00queue_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x11301569 rt2x00queue_for_each_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x18ad9657 rt2x00mac_sw_scan_complete +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1b352abb rt2x00mac_sta_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x1c5f6e78 rt2x00mac_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x327a9eaa rt2x00lib_dmadone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3611cd8b rt2x00mac_sta_add +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x39ec770c rt2x00mac_get_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3ae4ed82 rt2x00lib_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x3cb6f911 rt2x00mac_tx_frames_pending +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x41f8037c rt2x00queue_flush_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x4a798d2d rt2x00mac_stop +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x57c66a99 rt2x00mac_configure_filter +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x5eecb01c rt2x00queue_unpause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x61324516 rt2x00mac_bss_info_changed +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x64b4d474 rt2x00queue_map_txskb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x693ee6dd rt2x00mac_rfkill_poll +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x6c516821 rt2x00mac_remove_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7008ed12 rt2x00queue_stop_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x71b37ea0 rt2x00queue_unmap_skb +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x77a8224e rt2x00lib_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x7e43601b rt2x00mac_add_interface +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9752e66d rt2x00lib_pretbtt +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0x9962f75c rt2x00lib_beacondone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa05c74f8 rt2x00mac_get_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa358d8a5 rt2x00mac_get_ringparam +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xa37d96be rt2x00queue_pause_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xb1a511bd rt2x00lib_remove_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbb6cdb83 rt2x00lib_get_bssidx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbc09c814 rt2x00mac_set_antenna +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xbf6d8523 rt2x00mac_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc01acb8b rt2x00mac_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc497aae5 rt2x00lib_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc7afd405 rt2x00lib_probe_dev +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xc7e2a77f rt2x00lib_txdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xca4d8caf rt2x00lib_txdone_noinfo +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd451a532 rt2x00mac_config +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xd51f89a4 rt2x00queue_start_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdac1e8f3 rt2x00queue_start_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xdc0e7119 rt2x00mac_set_tim +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe4c1025f rt2x00mac_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xe61b42a8 rt2x00lib_dmastart +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf448b9d6 rt2x00mac_conf_tx +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xf866e92e rt2x00queue_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00lib 0xff9ac577 rt2x00mac_sw_scan_start +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x15fee5b3 rt2x00pci_rxdone +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x2fb18f86 rt2x00pci_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x426afd29 rt2x00pci_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x488874e3 rt2x00pci_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0x6b3ee17b rt2x00pci_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xa0f4d369 rt2x00pci_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xae4283d2 rt2x00pci_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xb87742f3 rt2x00pci_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00pci 0xbbabd356 rt2x00pci_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x0a19bd1b rt2x00usb_resume +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x1103fd73 rt2x00usb_watchdog +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x194160a6 rt2x00usb_vendor_req_buff_lock +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x39eb99b6 rt2x00usb_suspend +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3b492cfb rt2x00usb_kick_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x3e7a3319 rt2x00usb_clear_entry +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x41f57e6f rt2x00usb_vendor_request_buff +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x45df97b6 rt2x00usb_initialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x740f96a0 rt2x00usb_uninitialize +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9346f58f rt2x00usb_register_read_async +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x939fabcd rt2x00usb_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0x9936a9d3 rt2x00usb_flush_queue +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xbc7022b6 rt2x00usb_vendor_request +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe20fa7c8 rt2x00usb_regbusy_read +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xe5536c64 rt2x00usb_disable_radio +EXPORT_SYMBOL_GPL drivers/net/wireless/rt2x00/rt2x00usb 0xeb85046e rt2x00usb_disconnect +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x356b1276 wl1251_init_ieee80211 +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0x50617ec0 wl1251_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wl1251/wl1251 0xc3211027 wl1251_free_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x02239d12 wlcore_disable_interrupts_nosync +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x075d15bb wl1271_acx_sleep_auth +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x1020f819 wl1271_cmd_data_path +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x147cb36f wlcore_boot_upload_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x2af30b27 wlcore_set_partition +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x39d82498 wlcore_enable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x469a81f1 wlcore_synchronize_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x4c41163e wl12xx_acx_mem_cfg +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x4ef42318 wlcore_disable_interrupts +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x53dff67d wl12xx_debug_level +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x70007a25 wl1271_debugfs_update_stats +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x82745efb wl1271_acx_init_mem_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x9589c340 wlcore_boot_upload_nvs +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x95f269c8 wlcore_stop_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x97f2e7ed wlcore_set_key +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0x98dbbdf9 wl1271_acx_pm_config +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xac619aa9 wlcore_probe +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xaee1ab23 wlcore_boot_run_firmware +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xaee46001 wlcore_wake_queues +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xb7751378 wl1271_tx_flush +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xbc75e4d5 wl1271_cmd_configure +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xc5c3db5f wlcore_translate_addr +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xd39bb505 wl1271_format_buffer +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xd66713db wlcore_remove +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xdd6ac3dc wl1271_cmd_test +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xe8a9cec3 wlcore_alloc_hw +EXPORT_SYMBOL_GPL drivers/net/wireless/ti/wlcore/wlcore 0xeeea92c5 wlcore_free_hw +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0x6a4821c5 acpiphp_register_attention +EXPORT_SYMBOL_GPL drivers/pci/hotplug/acpiphp 0xb69f1d4a acpiphp_unregister_attention +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x1ddadd4c asus_wmi_unregister_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/asus-wmi 0x848670db asus_wmi_register_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/intel_ips 0x46809fa9 ips_link_to_i915_driver +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x232b5238 mxm_wmi_supported +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0x61cdf799 mxm_wmi_call_mxds +EXPORT_SYMBOL_GPL drivers/platform/x86/mxm-wmi 0xe26032eb mxm_wmi_call_mxmx +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x3ecf6cfc wmi_install_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x561c634a wmi_evaluate_method +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0x876d29f1 wmi_get_event_data +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xb5a6ebe2 wmi_remove_notify_handler +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xc9d4d6d1 wmi_has_guid +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xda29f8b0 wmi_set_block +EXPORT_SYMBOL_GPL drivers/platform/x86/wmi 0xfb882fb7 wmi_query_block +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0x394c3ebc pcf50633_mbc_usb_curlim_set +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xbbea2ccc pcf50633_mbc_get_status +EXPORT_SYMBOL_GPL drivers/power/pcf50633-charger 0xe6b13ffb pcf50633_mbc_get_usb_online_status +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0x18efa16c mc13xxx_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0xafd01a22 mc13xxx_fixed_regulator_set_voltage +EXPORT_SYMBOL_GPL drivers/regulator/mc13xxx-regulator-core 0xe24c9c40 mc13xxx_fixed_regulator_ops +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x3a8f3ba9 wm8350_dcdc_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x65544c55 wm8350_dcdc25_set_mode +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x7a21e886 wm8350_register_led +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0x8b5f1573 wm8350_ldo_set_slot +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xa5e4d588 wm8350_isink_set_flash +EXPORT_SYMBOL_GPL drivers/regulator/wm8350-regulator 0xbf964d74 wm8350_register_regulator +EXPORT_SYMBOL_GPL drivers/regulator/wm8400-regulator 0xfabf5a7f wm8400_register_regulator +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x03b87d8a cxgbi_ddp_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x0637e8ea cxgbi_set_conn_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x1d156ef8 cxgbi_ep_connect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x23fb0d3f cxgbi_conn_tx_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x24ff8920 cxgbi_ddp_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x2f82d0ac cxgbi_ddp_ppod_set +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x3031ca3b cxgbi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x32d89c5c cxgbi_conn_pdu_ready +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x33589f71 cxgbi_device_portmap_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x339ec901 cxgbi_sock_select_mss +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x3a5c4389 cxgbi_ddp_page_size_factor +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x3fd814b0 cxgbi_parse_pdu_itt +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x4471164d cxgbi_sock_free_cpl_skbs +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x47df7219 cxgbi_sock_rcv_abort_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x4a3bd0a8 cxgbi_ep_disconnect +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x5209ecde cxgbi_sock_established +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x6692cfd3 cxgbi_sock_purge_wr_queue +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7398d0b0 cxgbi_sock_rcv_close_conn_rpl +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x752d35b2 cxgbi_sock_rcv_peer_close +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x78cd48c0 cxgbi_get_conn_stats +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7929c560 cxgbi_get_ep_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x797da07d cxgbi_sock_check_wr_invariants +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x7fdb6004 cxgbi_device_unregister_all +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x82005648 cxgbi_sock_act_open_req_arp_failure +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x8c2ba369 cxgbi_ddp_ppod_clear +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x917c13bf cxgbi_set_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x918c8d32 cxgbi_sock_fail_act_open +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x93b10cd6 cxgbi_get_host_param +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x9432edf0 cxgbi_hbas_remove +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0x9911db7e cxgbi_device_portmap_create +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xb20ab7f9 cxgbi_sock_skb_entail +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xb3527345 cxgbi_conn_alloc_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xb56294b9 cxgbi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xc0873819 cxgbi_device_register +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xc5e473e3 cxgbi_sock_closed +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xd6953056 cxgbi_ep_poll +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xdf325691 cxgbi_device_unregister +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xe56fbddd cxgbi_sock_rcv_wr_ack +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xe831d9dc cxgbi_bind_conn +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xec22ee00 cxgbi_iscsi_cleanup +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xef346615 cxgbi_attr_is_visible +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf22c0542 cxgbi_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf2d64d27 cxgbi_conn_xmit_pdu +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf308be01 cxgbi_iscsi_init +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf3acefe0 cxgbi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf5f46257 cxgbi_hbas_add +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xf854564e cxgbi_device_find_by_lldev +EXPORT_SYMBOL_GPL drivers/scsi/cxgbi/libcxgbi 0xfecb33fc cxgbi_conn_init_pdu +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x00ec79d4 scsi_dh_attach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x3f387a2f scsi_dh_set_params +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x48329ff7 scsi_unregister_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x593a36c2 scsi_dh_handler_exist +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x64c67d89 scsi_dh_attached_handler_name +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x878fd715 scsi_dh_detach +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0x9bc590cd scsi_dh_activate +EXPORT_SYMBOL_GPL drivers/scsi/device_handler/scsi_dh 0xc0a0d567 scsi_register_device_handler +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x00db34b1 fcoe_fcf_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x08765d96 fcoe_fc_crc +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x0fb51275 fcoe_queue_timer +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x1a3a421d fcoe_start_io +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x374c1e1c fcoe_wwn_from_mac +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x6440d7e6 fcoe_get_paged_crc_eof +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x7b0a04cd fcoe_clean_pending_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x80d122be fcoe_get_wwn +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x84b3d915 fcoe_wwn_to_str +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x8cc48ddd fcoe_check_wait_queue +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x8f8ca089 fcoe_ctlr_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0x9ad5bcfb fcoe_validate_vport_create +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xca0872d6 fcoe_libfc_config +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xdb710ee9 fcoe_ctlr_device_delete +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xdcdf3218 fcoe_fcf_device_add +EXPORT_SYMBOL_GPL drivers/scsi/fcoe/libfcoe 0xf1efd6ec __fcoe_get_lesb +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x5112b2c2 iscsi_boot_create_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x87865934 iscsi_boot_create_ethernet +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x94c896e4 iscsi_boot_create_initiator +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0x9b333f80 iscsi_boot_destroy_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0xa5777cbf iscsi_boot_create_host_kset +EXPORT_SYMBOL_GPL drivers/scsi/iscsi_boot_sysfs 0xc8615a0d iscsi_boot_create_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x007fd4fc iscsi_conn_stop +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x04860cb9 iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x053f7544 iscsi_host_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x05e07fee iscsi_host_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x0b6eb779 iscsi_session_recovery_timedout +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x17b2926a iscsi_conn_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x293fef56 iscsi_verify_itt +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2b2e2bd4 iscsi_suspend_queue +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x2eb88f8b iscsi_pool_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x33c5f908 iscsi_complete_scsi_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3882ae35 iscsi_session_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x3bdf0736 iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4421a2fe iscsi_itt_to_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4c7595a5 iscsi_set_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x4f579774 iscsi_session_get_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x51acef2a iscsi_prep_data_out_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x58d08b38 iscsi_host_add +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x669d6f00 iscsi_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x6bcb38b5 iscsi_conn_queue_work +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x76356feb iscsi_eh_abort +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x763f7b7c iscsi_itt_to_ctask +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x77952f62 iscsi_eh_recover_target +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x7cfd6189 iscsi_suspend_tx +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8a08da2c iscsi_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x8e852068 iscsi_host_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9239d9dc iscsi_session_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9b60cb4e iscsi_session_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0x9f0f79f8 __iscsi_complete_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa2313b82 iscsi_eh_session_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa35d42b1 iscsi_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa4832cf0 iscsi_pool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa6289b6b iscsi_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa82fad2d iscsi_host_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xa8663cda iscsi_conn_start +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xabbb2817 iscsi_requeue_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb017e88d iscsi_host_remove +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xb0a0d7c5 iscsi_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc0566d2f __iscsi_put_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xc0cb02f4 iscsi_conn_get_addr_param +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xcb8b86ea iscsi_conn_bind +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xccb890e9 __iscsi_get_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xda4d24c4 iscsi_eh_target_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xdfb4c49d iscsi_conn_failure +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe15f8071 iscsi_update_cmdsn +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xe7ef365c iscsi_conn_send_pdu +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi 0xf05f77b1 iscsi_eh_device_reset +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0171fc86 iscsi_segment_seek_sg +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x0f60b91d iscsi_tcp_segment_done +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x21e83476 iscsi_tcp_r2tpool_free +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x28be369a iscsi_tcp_conn_teardown +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4c5ebf73 iscsi_tcp_r2tpool_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x4d01df69 iscsi_tcp_task_xmit +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5a036e9d iscsi_tcp_cleanup_task +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x5cea8e4a iscsi_tcp_dgst_header +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x6b950366 iscsi_tcp_recv_skb +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0x6c652f3c iscsi_tcp_set_max_r2t +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xb91b56b1 iscsi_tcp_conn_get_stats +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xbef540fc iscsi_tcp_conn_setup +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdcf48f90 iscsi_tcp_segment_unmap +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xdd3172ec iscsi_tcp_recv_segment_is_hdr +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf3328a40 iscsi_segment_init_linear +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf39037da iscsi_tcp_task_init +EXPORT_SYMBOL_GPL drivers/scsi/libiscsi_tcp 0xf7f252dc iscsi_tcp_hdr_recv_prep +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x1721d94b sas_ata_schedule_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2c4973c1 sas_domain_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x2cc69832 sas_queuecommand +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x365f80a2 sas_eh_abort_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x398ffc82 sas_register_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x39d46594 sas_change_queue_depth +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x47255c66 sas_domain_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x4c84ba9e sas_phy_reset +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x538295b4 sas_free_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x5ec4d92a sas_slave_configure +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x784761ab sas_change_queue_type +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x87d54da1 sas_get_local_phy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8c2e1d08 sas_alloc_slow_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x8e32d2e3 sas_bios_param +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x91d69e61 sas_ioctl +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x91e802c8 sas_eh_device_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x96a4b953 sas_request_addr +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0x970dff4a sas_drain_work +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa92f7c67 sas_ssp_task_response +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xa93b83f4 sas_eh_bus_reset_handler +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xb3cc36cd sas_target_destroy +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xc73cd5b4 sas_unregister_ha +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xcdb7d2f1 sas_alloc_task +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xde0b25e1 sas_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsas/libsas 0xe18ed8e8 sas_task_abort +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x10f6227d srp_iu_get +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x6e0f6043 srp_target_alloc +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0x839dceb1 srp_target_free +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xa709db8b srp_transfer_data +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xbe9e83ec srp_iu_put +EXPORT_SYMBOL_GPL drivers/scsi/libsrp 0xe44f3706 srp_cmd_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x097c7da0 scsi_tgt_queue_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x13d5c671 scsi_host_get_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x1acde7ac scsi_tgt_free_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x4a17e50c scsi_tgt_cmd_to_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x6f661395 scsi_tgt_alloc_queue +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0x7b22bafd scsi_tgt_it_nexus_destroy +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xc6edbf04 scsi_tgt_it_nexus_create +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xc907ce59 scsi_host_put_command +EXPORT_SYMBOL_GPL drivers/scsi/scsi_tgt 0xf5712606 scsi_tgt_tsk_mgmt_request +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x021ef5fc iscsi_block_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x0ce3fc2e iscsi_destroy_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x16d8eca4 iscsi_offload_mesg +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x404a1042 iscsi_host_for_each_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x40f21097 iscsi_ping_comp_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x51c5d29c iscsi_register_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x5d8d7105 iscsi_create_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6493aa6c iscsi_add_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x67b7aa09 iscsi_create_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6b86b04a iscsi_scan_finished +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x6c47e220 iscsi_recv_pdu +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x726981fc iscsi_destroy_iface +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x759c47dd iscsi_get_port_state_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x7d1e1dda iscsi_free_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x8525b4fc iscsi_remove_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x88d06ee1 iscsi_is_session_dev +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0x9ca5aa7e iscsi_session_chkready +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xa3c401a7 iscsi_destroy_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xae7d067c iscsi_unregister_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xafa05440 iscsi_session_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb322465c iscsi_conn_error_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xb91bab6e iscsi_unblock_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xbb4efab2 iscsi_post_host_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xcc587068 iscsi_conn_login_event +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd29ee601 iscsi_is_session_online +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd51004e8 iscsi_get_port_speed_name +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xd731b581 iscsi_create_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xda74a251 iscsi_create_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xdd95804b iscsi_lookup_endpoint +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xee342a45 iscsi_destroy_conn +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xef86a450 iscsi_alloc_session +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_iscsi 0xf82d59d5 iscsi_block_scsi_eh +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x314fb28b sas_is_tlr_enabled +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x3c0fdeeb sas_disable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x4d92d97f sas_enable_tlr +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_sas 0x6e879834 sas_tlr_supported +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x1421e335 srp_remove_host +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0x44e220a9 srp_attach_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xbdbf154b srp_rport_add +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xc774150d srp_release_transport +EXPORT_SYMBOL_GPL drivers/scsi/scsi_transport_srp 0xd647c957 srp_rport_del +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xa780f0ff spi_bitbang_stop +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xd275b58c spi_bitbang_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xdbbb6b51 spi_bitbang_start +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xf6e7dfd0 spi_bitbang_setup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xf965df7e spi_bitbang_cleanup +EXPORT_SYMBOL_GPL drivers/spi/spi-bitbang 0xfd193dce spi_bitbang_setup_transfer +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0x4a0879fe dw_spi_xfer_done +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xbbcc9ee4 dw_spi_remove_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xed0818bc dw_spi_add_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xf1193ee1 dw_spi_resume_host +EXPORT_SYMBOL_GPL drivers/spi/spi-dw 0xf99a3bdb dw_spi_suspend_host +EXPORT_SYMBOL_GPL drivers/ssb/ssb 0x07d0ab08 ssb_pmu_spuravoid_pllupdate +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x2784d184 comedi_pci_enable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x34d35ad6 comedi_pci_disable +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x3731be04 comedi_alloc_subdevices +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x3e4482bd comedi_usb_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x5bebbae4 comedi_usb_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x8fec82b2 comedi_auto_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0x96c59653 comedi_pci_driver_unregister +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xa127c704 comedi_get_device_file_info +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xab08edea comedi_auto_unconfig +EXPORT_SYMBOL_GPL drivers/staging/comedi/comedi 0xc1a89bc4 comedi_pci_driver_register +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0x47413a83 das08_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/das08 0xe11e45ef das08_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x25e55b95 labpc_1200_is_unipolar +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x8285332a range_labpc_1200_ai +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0x92803641 labpc_common_detach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xaf1e4347 labpc_1200_ai_gain_bits +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_labpc 0xb383dd7a labpc_common_attach +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x0595a70b ni_tio_arm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x13d4bca7 ni_tio_winsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x2e9e1720 ni_gpct_device_destroy +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x53b81b36 ni_tio_set_gate_src +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x57c6c566 ni_tio_insn_config +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0x70e79a04 ni_tio_init_counter +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xc802cb08 ni_tio_rinsn +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tio 0xf9871b4e ni_gpct_device_construct +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x5a10e4ab ni_tio_cancel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x60cd681b ni_tio_cmd +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0x624e9209 ni_tio_handle_interrupt +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xa9f6a1cb ni_tio_acknowledge_and_confirm +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xaee978ac ni_tio_set_mite_channel +EXPORT_SYMBOL_GPL drivers/staging/comedi/drivers/ni_tiocmd 0xc49303e1 ni_tio_cmdtest +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x11dc995e CsrMsgConvInsert +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x1bcd5b39 CsrUint32Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x2c03f51f CsrMsgConvInit +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x3247662d CsrWifiEventDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x332b7173 CsrWifiEventCsrUint8Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x3640445a CsrWifiEventCsrUint16CsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x3e1c5710 CsrMsgConvFindEntry +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x424e1416 CsrWifiEventCsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x482415df CsrWifiEventCsrUint32Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x4dab1360 CsrWifiEventSer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x52a1223c CsrMemCpyDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x66a4dfca CsrCharStringDes +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x67a6a33b CsrMemCpySer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x69065e40 CsrWifiEventCsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x71d701be CsrThreadSleep +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x75c9b662 CsrUint8Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x80cc6f40 CsrTimeGet +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x90a86d08 CsrCharStringSer +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0x9bcd90aa CsrUint16Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xb0b1df4c CsrMsgConvCustomLookupRegister +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xc8956c66 CsrWifiEventCsrUint16Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xcbac6a24 CsrWifiEventCsrUint16CsrUint8Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xcfbb603b CsrWifiEventCsrUint16CsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xd37329dd CsrUint16Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xd47785ba CsrWifiEventCsrUint16Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xd7b6c96b CsrUint8Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xdd2fa37c CsrWifiEventCsrUint16Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xf079a8b4 CsrWifiEventCsrUint32Ser +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xf0e11db1 CsrUint32Des +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xf7d1fed4 CsrWifiEventCsrUint32Sizeof +EXPORT_SYMBOL_GPL drivers/staging/csr/csr_helper 0xff373291 CsrWifiEventSizeof +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x12e6177b oslec_adaption_mode +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x14523351 oslec_snapshot +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x14c4b6b0 oslec_hpf_tx +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0x3c6ec396 oslec_flush +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xca667daa oslec_create +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xeb94de18 oslec_update +EXPORT_SYMBOL_GPL drivers/staging/echo/echo 0xeec034fb oslec_free +EXPORT_SYMBOL_GPL drivers/staging/iio/addac/adt7316 0x5b01a415 adt7316_pm_ops +EXPORT_SYMBOL_GPL drivers/staging/rts5139/rts5139 0xbd5a0e51 rts5139_usb_ids +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x0e81c76d spk_serial_out +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x14f06fe7 spk_serial_in_nowait +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x3ee16d94 spk_do_catch_up +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x41a160e5 synth_buffer_empty +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x4449e1dd synth_buffer_clear +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x44e7abd9 synth_remove +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x475e158a synth_request_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x5b381430 spk_synth_is_alive_nop +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x719669b0 spk_synth_flush +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x892d7c77 spk_var_show +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x8e146195 synth_release_region +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x8e8a916a synth_add +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0x9a888082 synth_buffer_getc +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xa9e774de serial_synth_probe +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb48956f8 synth_buffer_peek +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xb73a5748 get_var +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xbbd15a51 speakup_start_ttys +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xc766ae09 synth_printf +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xcda38867 speakup_event +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xcfcc99c7 spk_synth_is_alive_restart +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xd6eada87 spk_synth_immediate +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xde7ae2e8 speakup_info +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe7cd4558 spk_serial_release +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xe7e810f8 spk_serial_in +EXPORT_SYMBOL_GPL drivers/staging/speakup/speakup 0xfb56156d spk_var_store +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x051b0ed4 sockfd_to_socket +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x09063ba5 usbip_dump_urb +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x42404259 usbip_recv_xbuff +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x46907d7d usbip_pack_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x59639c38 usbip_event_add +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x7554a48d usbip_stop_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x78b72f44 usbip_debug_flag +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x7914ecba usbip_alloc_iso_desc_pdu +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x817f2891 usbip_start_eh +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0x9357fac9 usbip_event_happened +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xc0a5e568 dev_attr_usbip_debug +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xd02753dc usbip_header_correct_endian +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xda95042c usbip_pad_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xe1ea0586 usbip_dump_header +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xf87388a3 usbip_recv_iso +EXPORT_SYMBOL_GPL drivers/staging/usbip/usbip-core 0xface2657 usbip_recv +EXPORT_SYMBOL_GPL drivers/tty/n_tracesink 0x585ebaac n_tracesink_datadrain +EXPORT_SYMBOL_GPL drivers/uio/uio 0x8b14fb9e uio_event_notify +EXPORT_SYMBOL_GPL drivers/uio/uio 0x93585476 __uio_register_device +EXPORT_SYMBOL_GPL drivers/uio/uio 0xf810799f uio_unregister_device +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xe3a20ae8 usbatm_usb_disconnect +EXPORT_SYMBOL_GPL drivers/usb/atm/usbatm 0xe985f86b usbatm_usb_probe +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x383e4f98 ci13xxx_remove_device +EXPORT_SYMBOL_GPL drivers/usb/chipidea/ci_hdrc 0x60cd5415 ci13xxx_add_device +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x050cd950 usb_ep_autoconfig +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x0916b233 usb_string_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x18bdd37f usb_ep_autoconfig_ss +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2042a49b usb_composite_probe +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2e09263f usb_copy_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2e5033e0 usb_composite_setup_continue +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x2e625051 usb_function_activate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x3c6be839 usb_composite_unregister +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x5418b255 usb_string_ids_tab +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x595ae37c usb_ep_autoconfig_reset +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x5f3136f8 usb_string_ids_n +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x66e62b4a usb_interface_id +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x827e2766 usb_add_config +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x8e347eee usb_function_deactivate +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x94d7075a usb_gadget_get_string +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x997e9b89 usb_composite_overwrite_options +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x9e942276 usb_assign_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0x9eceb36b usb_add_function +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xbd3e2ef9 config_ep_by_speed +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xbef0b8b8 usb_free_all_descriptors +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xd2ea2134 usb_descriptor_fillbuf +EXPORT_SYMBOL_GPL drivers/usb/gadget/libcomposite 0xf474a207 usb_gadget_config_buf +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x041ec963 usb_gadget_unmap_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x14f0637e usb_gadget_unregister_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x5762b88a usb_add_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x6ec0c4f2 usb_gadget_map_request +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x7632dc54 usb_gadget_probe_driver +EXPORT_SYMBOL_GPL drivers/usb/gadget/udc-core 0x8f48a0a0 usb_del_gadget_udc +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x3ce85a4f ezusb_fx1_set_reset +EXPORT_SYMBOL_GPL drivers/usb/misc/ezusb 0x90fed75f ezusb_fx1_ihex_firmware_download +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x2fb7bcef usb_ftdi_elan_read_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x4f80c1aa usb_ftdi_elan_edset_output +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x741bd172 usb_ftdi_elan_edset_flush +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0x8a504a91 usb_ftdi_elan_write_pcimem +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xa0b36ff9 usb_ftdi_elan_edset_setup +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xb2581efc ftdi_elan_gone_away +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xd6300701 usb_ftdi_elan_edset_single +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xe800de71 usb_ftdi_elan_edset_input +EXPORT_SYMBOL_GPL drivers/usb/misc/ftdi-elan 0xeda83618 usb_ftdi_elan_edset_empty +EXPORT_SYMBOL_GPL drivers/usb/musb/musb_hdrc 0xa952099f musb_interrupt +EXPORT_SYMBOL_GPL drivers/usb/musb/tusb6010 0x2b061f2f tusb_get_revision +EXPORT_SYMBOL_GPL drivers/usb/phy/isp1301 0xb1f5811b isp1301_get_client +EXPORT_SYMBOL_GPL drivers/usb/serial/usb_wwan 0xe69d11b0 usb_wwan_port_probe +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2389766e usb_serial_handle_sysrq_char +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x24bd9e3c usb_serial_register_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x2d64c8ad usb_serial_generic_close +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x34101db2 usb_serial_generic_write_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3d0ffb1f usb_serial_generic_process_read_urb +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x3fc3f777 usb_serial_generic_write +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x4dcf62af usb_serial_generic_submit_read_urbs +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x5b7dc1cd usb_serial_generic_throttle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x605e16df usb_serial_generic_unthrottle +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x7c55aaa8 usb_serial_deregister_drivers +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x926cf5ba usb_serial_generic_disconnect +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0x95f5ae2f usb_serial_generic_resume +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xac19e2e3 usb_serial_handle_break +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xd77db1dd usb_serial_generic_read_bulk_callback +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xe545ff17 usb_serial_generic_open +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xec7fbca4 usb_serial_handle_dcd_change +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf2abfb69 usb_serial_port_softint +EXPORT_SYMBOL_GPL drivers/usb/serial/usbserial 0xf78c9cd9 usb_serial_generic_chars_in_buffer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x0490362a usb_stor_control_msg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x1bc3edc2 usb_stor_sense_invalidCDB +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x282e9f3c usb_stor_clear_halt +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x2fc48816 fill_inquiry_response +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x31eabd0f usb_stor_bulk_srb +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x3bc6d1e1 usb_stor_probe1 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x4fb0ec58 usb_stor_Bulk_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x54666c8e usb_stor_CB_transport +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5988f6fd usb_stor_post_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x5ad38ec7 usb_stor_reset_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x6eba70f5 usb_stor_set_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7a655853 usb_stor_ctrl_transfer +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x7c332041 usb_stor_bulk_transfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x8d99ab74 usb_stor_pre_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0x9e6f17b0 usb_stor_CB_reset +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xa55b31ea usb_stor_resume +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xb241f779 usb_stor_probe2 +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xc600f4bf usb_stor_access_xfer_buf +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdc2fc060 usb_stor_transparent_scsi_command +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdc9fab6f usb_stor_suspend +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xdfae8141 usb_stor_disconnect +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xea985899 usb_stor_bulk_transfer_sg +EXPORT_SYMBOL_GPL drivers/usb/storage/usb-storage 0xfcdf3abc usb_stor_Bulk_transport +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x122f15ac wa_urb_enqueue_run +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x7c2c0dcf wa_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x8efb9d2e wa_urb_enqueue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0x9df3d730 wa_urb_dequeue +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xa470e272 __wa_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xcb55ad58 rpipe_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusb-wa 0xe5528423 rpipe_ep_disable +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x0bb6bf5e wusb_cluster_id_get +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x1942a31f wusbhc_chid_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2a4e9764 wusbhc_b_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x2ea8484c wusbhc_rh_start_port_reset +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x3b7a7175 wusbhc_mmcie_rm +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x61442a97 wusbhc_mmcie_set +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7466ac96 wusbhc_reset_all +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x7f0b7631 wusb_dev_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0x9f0b0dcc wusbhc_giveback_urb +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa57b2096 wusbhc_handle_dn +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xa6f5b411 wusbhc_rh_resume +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb3011281 __wusb_dev_get_by_usb_dev +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xb725d128 wusb_cluster_id_put +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xc076a9eb wusbhc_destroy +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xda3ed1ba wusbhc_rh_control +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe1856b42 wusbhc_b_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xe20eff47 wusbhc_rh_status_data +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf6e9b720 wusbhc_rh_suspend +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xf770a6b4 wusbd +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfc916b53 wusbhc_create +EXPORT_SYMBOL_GPL drivers/usb/wusbcore/wusbcore 0xfe2e17d7 wusb_et_name +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x0c1fc11c i1480_cmd +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x1e672d56 i1480_rceb_check +EXPORT_SYMBOL_GPL drivers/uwb/i1480/dfu/i1480-dfu-usb 0x954d7c8d i1480_fw_upload +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x205b6ea6 umc_match_pci_id +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x4603b237 umc_controller_reset +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x8c3f33c2 umc_bus_type +EXPORT_SYMBOL_GPL drivers/uwb/umc 0x9af2fbbc umc_device_create +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xbf7ee69b __umc_driver_register +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xc9d82e72 umc_driver_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xd9c6a153 umc_device_unregister +EXPORT_SYMBOL_GPL drivers/uwb/umc 0xf134c9ad umc_device_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0d78016e __uwb_addr_print +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0ee596a6 uwb_rc_get_by_dev +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x0fc02440 uwb_est_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x143aa150 uwb_rc_neh_error +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x1c152324 uwb_rc_dev_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2040b302 uwb_rsv_create +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x220f608c uwb_rc_ie_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x26e2391b uwb_rc_pre_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x2d7facc0 uwb_rsv_get_usable_mas +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x315fe1ae uwb_rc_mac_addr_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x35976476 uwb_rc_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x3af77bbf uwb_dev_try_get +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4445f1a4 uwb_rc_neh_grok +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x47546272 uwb_rc_get_by_grandpa +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x4d57ae3c uwb_rsv_type_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x5172bddf uwb_pal_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x72ca10ce uwb_notifs_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x74ae1e17 uwb_rc_cmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x7cdd6908 uwb_pal_unregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x816b9e92 uwb_est_register +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x8b973d1b uwb_pal_init +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x96c3ab0c uwb_rc_post_reset +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x98413234 uwb_rsv_state_str +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0x9eaddf94 uwb_rc_cmd_async +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa08bb83d uwb_rsv_modify +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa2c9f36e uwb_radio_start +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa40c7814 uwb_rc_reset_all +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xa60b358e uwb_dev_for_each +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xac97316b uwb_ie_next +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xb4dd7481 uwb_rsv_accept +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xc8703066 uwb_rsv_destroy +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xceba5ba1 uwb_rc_put +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd17e07d1 uwb_radio_stop +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd5ee2df8 uwb_rc_vcmd +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xd6f42a63 uwb_rc_add +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdb0f71fd uwb_rsv_establish +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xdf996ae9 uwb_notifs_deregister +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xe9c37fee uwb_rc_ie_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xec6e6e14 uwb_rsv_terminate +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf60a161a uwb_rc_alloc +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf873db9e uwb_est_find_size +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xf8b5e8ba uwb_rc_rm +EXPORT_SYMBOL_GPL drivers/uwb/uwb 0xfcfbd9fc __uwb_rc_try_get +EXPORT_SYMBOL_GPL drivers/uwb/whci 0xda20d5ab whci_wait_for +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x351818d9 vfio_unregister_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0x5fa35f27 vfio_register_iommu_driver +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0xee2a296d vfio_add_group_dev +EXPORT_SYMBOL_GPL drivers/vfio/vfio 0xf0f4324e vfio_del_group_dev +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x3ff5bb23 auok190x_read_cmdargs +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x51c66283 auok190x_send_cmdargs +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x696c7a54 auok190x_common_remove +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0x71151336 auok190x_send_command_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xb115a747 auok190x_send_cmdargs_pixels_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xbf8bb8d0 auok190x_send_cmdargs_nowait +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xc8954f1f auok190x_pm +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xd4753edf auok190x_send_command +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xdcdccb0c auok190x_send_cmdargs_pixels +EXPORT_SYMBOL_GPL drivers/video/auo_k190x 0xf38b993c auok190x_common_probe +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0x2c63e051 apple_bl_register +EXPORT_SYMBOL_GPL drivers/video/backlight/apple_bl 0xdab0f892 apple_bl_unregister +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x22c9ec89 ili9320_suspend +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x351d20c8 ili9320_write_regs +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x3f40e88d ili9320_resume +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x6d209f03 ili9320_remove +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0x9d71b29d ili9320_write +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xafcc8f04 ili9320_probe_spi +EXPORT_SYMBOL_GPL drivers/video/backlight/ili9320 0xda41d624 ili9320_shutdown +EXPORT_SYMBOL_GPL drivers/video/fb_ddc 0xf91b7437 fb_ddc_read +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0x2d0844d5 fb_sys_write +EXPORT_SYMBOL_GPL drivers/video/fb_sys_fops 0xc3c153dc fb_sys_read +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x5e342f36 sis_free_new +EXPORT_SYMBOL_GPL drivers/video/sis/sisfb 0x6b669004 sis_malloc_new +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x016e6c20 vmlfb_unregister_subsys +EXPORT_SYMBOL_GPL drivers/video/vermilion/vmlfb 0x90c018c6 vmlfb_register_subsys +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x22a7af24 viafb_dma_copy_out_sg +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x292da7a2 viafb_irq_enable +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x30cc9311 viafb_request_dma +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x31469540 viafb_pm_unregister +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x6cf20c59 viafb_find_i2c_adapter +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0x79e6190a viafb_irq_disable +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0xb4f863e6 viafb_pm_register +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0xcaefb732 viafb_release_dma +EXPORT_SYMBOL_GPL drivers/video/via/viafb 0xfff2dfd2 viafb_gpio_lookup +EXPORT_SYMBOL_GPL drivers/w1/wire 0x1905c452 w1_write_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x1bbeaf6f w1_reset_bus +EXPORT_SYMBOL_GPL drivers/w1/wire 0x49c2c7ec w1_read_8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x5b909870 w1_write_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7c2f2afb w1_calc_crc8 +EXPORT_SYMBOL_GPL drivers/w1/wire 0x7cafc869 w1_reset_select_slave +EXPORT_SYMBOL_GPL drivers/w1/wire 0x8e54dd30 w1_reset_resume_command +EXPORT_SYMBOL_GPL drivers/w1/wire 0xa69b2017 w1_touch_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xd62fb84d w1_read_block +EXPORT_SYMBOL_GPL drivers/w1/wire 0xeec17bc0 w1_next_pullup +EXPORT_SYMBOL_GPL drivers/xen/xen-privcmd 0xb2f2c6cc xen_privcmd_fops +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x7de79eff dlm_posix_unlock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0x9321df95 dlm_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xa6e81878 dlm_posix_lock +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xc6dc8c2f dlm_new_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xcf9f3328 dlm_release_lockspace +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc2167b3 dlm_posix_get +EXPORT_SYMBOL_GPL fs/dlm/dlm 0xdc583c08 dlm_unlock +EXPORT_SYMBOL_GPL fs/fscache/fscache 0x092cf98e fscache_object_sleep_till_congested +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x17ce645d locks_end_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x3cd6b449 nlmclnt_init +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x45c7198e nlmsvc_ops +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x5e2b0106 lockd_up +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x77e35ccc nlmsvc_unlock_all_by_ip +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x8b709e04 nlmclnt_done +EXPORT_SYMBOL_GPL fs/lockd/lockd 0x99266829 lockd_down +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xa5e39bfa locks_in_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xd742b1df nlmsvc_unlock_all_by_sb +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xdc680ed9 locks_start_grace +EXPORT_SYMBOL_GPL fs/lockd/lockd 0xe831c7ef nlmclnt_proc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x016e154c nfs_setattr_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x03a4d77a nfs_rename +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x05103eff get_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x07e893a8 nfs_clone_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x09758156 nfs_file_fsync_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0a0e9bd5 nfs_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0b2ee273 nfs_free_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0b888a8d nfs_fs_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0c58332d nfs_getattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0cfaf38c nfs_lookup +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0e2894b7 nfs_file_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x0f8081e6 nfs_get_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x10d4b9b2 nfs_post_op_update_inode_force_wcc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x12f6f039 nfs_symlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x146632ae nfs_create +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x148c4aa3 nfs_wb_all +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x151194ca nfs_file_mmap +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1639c5dc nfs_refresh_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1a487973 nfs_lock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1ce1b91b nfs_access_add_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1e3f4173 nfs_show_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x1ffffcb4 nfs_put_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x20058107 nfs_remount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x213bfb3d nfs_mark_client_ready +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x23fc0c0a nfs4_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x246f9966 nfs_readhdr_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x25fde840 nfs_initiate_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x26884ff7 nfs_alloc_fhandle +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x2794f239 nfs_flock +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x27fac93d nfs_put_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x28a190b0 nfs_post_op_update_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x328cfc81 nfs_alloc_fattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x34d735c9 nfs_pageio_reset_read_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x38a1d303 nfs_atomic_open +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x39e05ac3 nfs_idmap_cache_timeout +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3ca31f35 nfs_net_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3f2690f2 nfs_check_flags +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x3f9e99c7 alloc_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4226aae1 nfs_sops +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x42ad48fc nfs_alloc_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x42f2c81f nfs4_client_id_uniquifier +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x45005e98 nfs_free_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4a066640 nfs_kill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4c381625 nfs_server_copy_userdata +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x4ed5f6f2 nfs_force_lookup_revalidate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x503e4f03 unregister_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x50454517 nfs_rmdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x51892d61 nfs_callback_set_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x53ed5ef1 nfs_pageio_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x54f8c6cb nfs_initiate_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x54fff577 nfs_file_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x575c8cd4 nfs_path +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x57f3a6f4 nfs_commitdata_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x58903fa6 put_nfs_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5933c407 nfs_request_remove_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x59a28edb nfs_fhget +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5c66d17f nfs_probe_fsinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5cae021d nfs_init_server_rpcclient +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5d55e122 nfs_zap_acl_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5e1d863a nfs_sockaddr_match_ipaddr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x5eb68357 nfs_dns_resolve_name +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x65a7e892 nfs_statfs +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x660c076c nfs_generic_pagein +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x66bafd00 nfs_show_options +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x68ec6f7e nfs_destroy_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6b1380e1 nfs_init_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x6cf59573 nfs_writedata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x745b371d nfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x768a72ef nfs_pageio_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x76a711f8 nfs_file_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7784db2a nfs_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x79a7883a register_nfs_version +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x79c9c523 nfs_instantiate +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x79ccd82e nfs_retry_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7c79c4a7 nfs_server_insert_lists +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7c9722ba nfs_dreq_bytes_left +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x7ed8b158 nfs_show_stats +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x83686031 nfs_try_mount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x83af0397 nfs_readhdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x84bae3cc nfs_commitdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x860cc75a nfs_generic_flush +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x86a4cc83 nfs_clone_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x89bc5a64 nfs_wait_bit_killable +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8f46638f nfs_umount_begin +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8f72f8b5 nfs_alloc_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x8fef02ee nfs_alloc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x909d2611 nfs_pageio_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x90a5530f nfsiod_workqueue +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x91d1fe52 max_session_slots +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x92963bc4 nfs_write_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x981dcae0 nfs_show_devname +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x98c05ffc nfs_fattr_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9a256da1 nfs_writehdr_alloc +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9c86a619 nfs_unlink +EXPORT_SYMBOL_GPL fs/nfs/nfs 0x9df844a3 nfs_access_set_mask +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa0658247 nfs_access_zap_cache +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa18ee4e3 nfs_file_splice_read +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa4b6b597 nfs_file_llseek +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa52c8f03 nfs_clear_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa736a627 nfs_file_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa78bbb08 nfs_permission +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa8d2d1ce nfs_callback_tcpport +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa8e9e1ae send_implementation_id +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xa9436a89 nfs_dentry_operations +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xacb9d864 nfs_create_rpc_client +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xaed228ea nfs_setattr +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb4404fae nfs_sb_deactive +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb4a5a007 nfs_do_submount +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xb8ae4997 nfs_set_sb_security +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xbe3cb424 nfs_commit_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc18be2d7 nfs_close_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc2b4d432 nfs_writehdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc2cae293 nfs_sb_active +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc4ee67b6 nfs_initiate_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc5ef47d5 nfs_init_timeout_values +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc7f2f1c2 nfs_pgheader_init +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc8273805 nfs_pageio_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xc9623a23 nfs_file_set_open_context +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcd8656a5 nfs_drop_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xcf86080b nfs_mknod +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd147dbdd nfs_invalidate_atime +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd8445b3b nfs_fill_super +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xd908bf61 nfs_create_server +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xda63c3f4 nfs4_fs_type +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdae9b5d7 nfs4_disable_idmapping +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdb8527ac nfs_sb_deactive_async +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdbf058d6 nfs_setlease +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdc2a20d2 nfs_pageio_reset_write_mds +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdcbc5f2e nfs_init_cinfo +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdcc06c02 nfs_revalidate_inode +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xddf44291 nfs_file_flush +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xdecffa44 nfs_wait_client_init_complete +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe0a55961 nfs_link +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe1fa0958 nfs_readdata_release +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe29299ed nfs_fscache_set_inode_cookie +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe54039b4 nfs_fs_mount_common +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe81609a0 nfs_pageio_add_request +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xe9daaecb nfs_mkdir +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xef3d44c7 nfs_file_splice_write +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf573655c nfs_request_add_commit_list +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xf815730c nfs_init_commit +EXPORT_SYMBOL_GPL fs/nfs/nfs 0xffd10a7b nfs_may_open +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x06779c8f pnfs_read_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x0cd6c7e8 nfs4_delete_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x0e80233f nfs4_find_get_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x1294bd65 nfs4_proc_getdeviceinfo +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x1b0de5af nfs4_proc_getdevicelist +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x226f3714 pnfs_generic_pg_readpages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x330f6cdf pnfs_ld_write_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x332c2f0a nfs4_init_ds_session +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x3b1a2c25 pnfs_destroy_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x3ef252ea pnfs_generic_pg_writepages +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x582163d0 pnfs_put_lseg +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x5e421cc9 pnfs_write_done_resend_to_mds +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x60547796 nfs_remove_bad_delegation +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x61f89f03 pnfs_unregister_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x65db9c34 pnfs_register_layoutdriver +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x684b0594 nfs4_schedule_session_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x6d69052c pnfs_generic_pg_init_write +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x74d8edf8 _pnfs_return_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x81bb01d3 nfs4_init_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x84480a3a nfs4_set_ds_client +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x8c389885 pnfs_generic_pg_init_read +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x8d1b551d pnfs_update_layout +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0x8d6959e4 nfs41_setup_sequence +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xa52d1c78 nfs4_schedule_lease_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xa896cb8e nfs4_mark_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xade33de6 pnfs_writehdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xae1483ba pnfs_readhdr_free +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb73f8353 pnfs_set_lo_fail +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xb77d7cde nfs4_schedule_stateid_recovery +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xc78f1a77 pnfs_set_layoutcommit +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xd3ea3b96 pnfs_ld_read_done +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xd4ad2206 nfs4_test_deviceid_unavailable +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xda6253c1 nfs4_insert_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xed15fb41 nfs4_print_deviceid +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xf2d7c002 pnfs_generic_pg_test +EXPORT_SYMBOL_GPL fs/nfs/nfsv4 0xffefd963 nfs4_put_deviceid_node +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0x53f4aa15 nfsacl_decode +EXPORT_SYMBOL_GPL fs/nfs_common/nfs_acl 0xd7a5a610 nfsacl_encode +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x004fe0e6 o2nm_get_node_by_num +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1b89c6ee o2hb_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x1d747ce3 o2hb_check_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36418553 o2net_send_message +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x36a28a9e o2net_send_message_vec +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4900035b o2hb_stop_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x49b247a3 o2nm_node_get +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x4d8a2b66 o2hb_register_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x81a17396 mlog_and_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x8247426e o2hb_unregister_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0x9db062d9 o2nm_get_node_by_ip +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa82a8645 o2nm_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xa87bc9e7 o2nm_configured_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xae808bac o2net_register_handler +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xbaeb4700 o2hb_check_node_heartbeating_from_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xc3679d7b o2hb_get_all_regions +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd60f2c6c o2hb_check_local_node_heartbeating +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xd859ac8c o2net_fill_node_map +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xee4becb6 o2hb_setup_callback +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf1a5611d o2net_unregister_handler_list +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xf56c2017 mlog_not_bits +EXPORT_SYMBOL_GPL fs/ocfs2/cluster/ocfs2_nodemanager 0xfd7bc18e o2nm_node_put +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x30bb3031 dlm_unregister_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x7a1211f8 dlm_setup_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x84a9e0f0 dlm_register_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0x95c427a5 dlm_print_one_lock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd3136b45 dlmunlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd7ba575e dlm_errmsg +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xd8fa57a6 dlm_unregister_eviction_cb +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xdbe6b7af dlmlock +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xeb886195 dlm_register_domain +EXPORT_SYMBOL_GPL fs/ocfs2/dlm/ocfs2_dlm 0xfb86b96f dlm_errname +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x025e2d69 ocfs2_cluster_connect_agnostic +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x0562c415 ocfs2_cluster_this_node +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x16b2e575 ocfs2_dlm_unlock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x4d3af7fa ocfs2_cluster_hangup +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x5469ce31 ocfs2_dlm_lvb_valid +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x7083dbd5 ocfs2_dlm_dump_lksb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x74814dab ocfs2_plock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x89502fe7 ocfs2_cluster_connect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0x8e351d96 ocfs2_stack_glue_register +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xb4bd060c ocfs2_dlm_lock_status +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xbbc4ef97 ocfs2_stack_supports_plocks +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xdc823ea4 ocfs2_cluster_disconnect +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe2bd47db ocfs2_dlm_lock +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe40cffce ocfs2_stack_glue_set_max_proto_version +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xe417d940 ocfs2_dlm_lvb +EXPORT_SYMBOL_GPL fs/ocfs2/ocfs2_stackglue 0xf1e19581 ocfs2_stack_glue_unregister +EXPORT_SYMBOL_GPL lib/bch 0x231d70fc encode_bch +EXPORT_SYMBOL_GPL lib/bch 0x6b770f49 decode_bch +EXPORT_SYMBOL_GPL lib/bch 0x9463ff71 init_bch +EXPORT_SYMBOL_GPL lib/bch 0xbdf512de free_bch +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x104c92e5 notifier_err_inject_dir +EXPORT_SYMBOL_GPL lib/notifier-error-inject 0x90f1e5ee notifier_err_inject_init +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0x1803a6ed raid6_2data_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0xe4b051cf raid6_datap_recov +EXPORT_SYMBOL_GPL lib/raid6/raid6_pq 0xfdfcb8cb raid6_call +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x201d8ea3 encode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x29fa419f decode_rs8 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x300d7e57 free_rs +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0x6fbb3bd9 init_rs_non_canonical +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xabda1e2e decode_rs16 +EXPORT_SYMBOL_GPL lib/reed_solomon/reed_solomon 0xb050f329 init_rs +EXPORT_SYMBOL_GPL net/802/garp 0x05d129b1 garp_request_leave +EXPORT_SYMBOL_GPL net/802/garp 0x0969329f garp_register_application +EXPORT_SYMBOL_GPL net/802/garp 0x1e8fb7c7 garp_unregister_application +EXPORT_SYMBOL_GPL net/802/garp 0x4b876b17 garp_request_join +EXPORT_SYMBOL_GPL net/802/garp 0x5623fa1d garp_init_applicant +EXPORT_SYMBOL_GPL net/802/garp 0xae7168f9 garp_uninit_applicant +EXPORT_SYMBOL_GPL net/802/stp 0x0cc5d54f stp_proto_register +EXPORT_SYMBOL_GPL net/802/stp 0x4baa8f92 stp_proto_unregister +EXPORT_SYMBOL_GPL net/9p/9pnet 0xd199647c p9_client_xattrcreate +EXPORT_SYMBOL_GPL net/9p/9pnet 0xe548a5cd p9_client_xattrwalk +EXPORT_SYMBOL_GPL net/atm/atm 0x50754510 register_atmdevice_notifier +EXPORT_SYMBOL_GPL net/atm/atm 0xe2c6bb26 unregister_atmdevice_notifier +EXPORT_SYMBOL_GPL net/ax25/ax25 0xac93ae05 ax25_bcast +EXPORT_SYMBOL_GPL net/ax25/ax25 0xaeb7451e ax25_defaddr +EXPORT_SYMBOL_GPL net/ax25/ax25 0xf10fb3fd ax25_register_pid +EXPORT_SYMBOL_GPL net/bluetooth/bluetooth 0x062e6773 bt_debugfs +EXPORT_SYMBOL_GPL net/dccp/dccp 0x023af0e7 dccp_shutdown +EXPORT_SYMBOL_GPL net/dccp/dccp 0x09112b6a dccp_poll +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0ec311b4 dccp_reqsk_init +EXPORT_SYMBOL_GPL net/dccp/dccp 0x0fd222fb dccp_insert_option +EXPORT_SYMBOL_GPL net/dccp/dccp 0x14080e79 dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1ae2d88e dccp_destroy_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x1d99d49a dccp_timestamp +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3024a5b6 dccp_sendmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x34495cf1 dccp_child_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0x362352ed dccp_init_sock +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3dc955ed dccp_hashinfo +EXPORT_SYMBOL_GPL net/dccp/dccp 0x3f858373 dccp_ctl_make_reset +EXPORT_SYMBOL_GPL net/dccp/dccp 0x44e31dff dccp_rcv_established +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4cdd391d dccp_feat_list_purge +EXPORT_SYMBOL_GPL net/dccp/dccp 0x4ec35231 dccp_ackvec_parsed_add +EXPORT_SYMBOL_GPL net/dccp/dccp 0x5062da35 dccp_check_req +EXPORT_SYMBOL_GPL net/dccp/dccp 0x57d30a22 inet_dccp_listen +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6863629b dccp_insert_option_elapsed_time +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6b83224a dccp_connect +EXPORT_SYMBOL_GPL net/dccp/dccp 0x6f29bcad dccp_create_openreq_child +EXPORT_SYMBOL_GPL net/dccp/dccp 0x85d4bcf6 dccp_recvmsg +EXPORT_SYMBOL_GPL net/dccp/dccp 0x86be7924 dccp_packet_name +EXPORT_SYMBOL_GPL net/dccp/dccp 0x8c086b1b dccp_death_row +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9598d24d dccp_ackvec_parsed_cleanup +EXPORT_SYMBOL_GPL net/dccp/dccp 0x9d9567d3 dccp_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xa1a81470 dccp_send_sync +EXPORT_SYMBOL_GPL net/dccp/dccp 0xafbd71df dccp_reqsk_send_ack +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb54ca73a dccp_feat_signal_nn_change +EXPORT_SYMBOL_GPL net/dccp/dccp 0xb7572b75 dccp_close +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbc71e469 dccp_disconnect +EXPORT_SYMBOL_GPL net/dccp/dccp 0xbd63e0fc dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc1ade859 dccp_rcv_state_process +EXPORT_SYMBOL_GPL net/dccp/dccp 0xc47928ad dccp_set_state +EXPORT_SYMBOL_GPL net/dccp/dccp 0xd1a9c11f dccp_ioctl +EXPORT_SYMBOL_GPL net/dccp/dccp 0xdfab9efd dccp_make_response +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe1b3672f dccp_sync_mss +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe3691b9d dccp_orphan_count +EXPORT_SYMBOL_GPL net/dccp/dccp 0xe3a6ada1 dccp_done +EXPORT_SYMBOL_GPL net/dccp/dccp 0xebd9d531 dccp_parse_options +EXPORT_SYMBOL_GPL net/dccp/dccp 0xee20fc0b compat_dccp_setsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp 0xefb127c3 dccp_feat_nn_get +EXPORT_SYMBOL_GPL net/dccp/dccp 0xf3017e21 dccp_statistics +EXPORT_SYMBOL_GPL net/dccp/dccp 0xfa8db22c compat_dccp_getsockopt +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x38ad6507 dccp_v4_do_rcv +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x4b328026 dccp_invalid_packet +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0x96275a02 dccp_v4_send_check +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xae7ec489 dccp_v4_conn_request +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xd82e50b2 dccp_v4_connect +EXPORT_SYMBOL_GPL net/dccp/dccp_ipv4 0xf13fda2e dccp_v4_request_recv_sock +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0x45e82445 unregister_switch_driver +EXPORT_SYMBOL_GPL net/dsa/dsa_core 0xb826fd6a register_switch_driver +EXPORT_SYMBOL_GPL net/ipv4/gre 0x5e7dfa51 gre_del_protocol +EXPORT_SYMBOL_GPL net/ipv4/gre 0xe51c7efd gre_add_protocol +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x01de6b2a inet_diag_register +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x1c2f3fcc inet_diag_unregister +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x581a523e inet_diag_bc_sk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0x8a14012e inet_diag_dump_icsk +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xa6662a10 inet_sk_diag_fill +EXPORT_SYMBOL_GPL net/ipv4/inet_diag 0xbbb96cd9 inet_diag_dump_one_icsk +EXPORT_SYMBOL_GPL net/ipv4/netfilter/arp_tables 0xd83f50d5 arpt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/ip_tables 0x5ded5687 ipt_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_conntrack_ipv4 0x6d40a921 need_ipv4_conntrack +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_defrag_ipv4 0x6b6c3d10 nf_defrag_ipv4_enable +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_ipv4 0x587c43df nf_nat_icmp_reply_translation +EXPORT_SYMBOL_GPL net/ipv4/netfilter/nf_nat_proto_gre 0x636b12c8 nf_nat_need_gre +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x37093e34 tcp_vegas_pkts_acked +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0x40d65bf1 tcp_vegas_get_info +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xab943dce tcp_vegas_state +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xe6381a2d tcp_vegas_cwnd_event +EXPORT_SYMBOL_GPL net/ipv4/tcp_vegas 0xe79ea75a tcp_vegas_init +EXPORT_SYMBOL_GPL net/ipv4/xfrm4_mode_tunnel 0xbc3617cc xfrm4_mode_tunnel_input_deregister +EXPORT_SYMBOL_GPL net/ipv4/xfrm4_mode_tunnel 0xfb4d33d0 xfrm4_mode_tunnel_input_register +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x0d157452 ip6_tnl_dst_reset +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x10c9700e ip6_tnl_xmit_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x173238ed ip6_tnl_dst_check +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x1fa0600e ip6_tnl_rcv_ctl +EXPORT_SYMBOL_GPL net/ipv6/ip6_tunnel 0x49bb1318 ip6_tnl_dst_store +EXPORT_SYMBOL_GPL net/ipv6/netfilter/ip6_tables 0xa28d6282 ip6t_alloc_initial_table +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_defrag_ipv6 0x6eb85693 nf_defrag_ipv6_enable +EXPORT_SYMBOL_GPL net/ipv6/netfilter/nf_nat_ipv6 0x211442cb nf_nat_icmpv6_reply_translation +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x192ea094 l2tp_tunnel_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x251ee958 l2tp_tunnel_sock_lookup +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x2e1020d2 l2tp_tunnel_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x391d4fa3 l2tp_session_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x5aae21d8 l2tp_xmit_skb +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x5f694c99 l2tp_session_find_nth +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x61527008 l2tp_session_free +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0x7e5df5a8 l2tp_session_find +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xc89683b6 l2tp_session_find_by_ifname +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xd11d0120 l2tp_tunnel_delete +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xd7cab5a1 l2tp_tunnel_sock_put +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xdcc2c510 l2tp_tunnel_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xe52d3442 l2tp_session_create +EXPORT_SYMBOL_GPL net/l2tp/l2tp_core 0xf2ff92c8 l2tp_udp_encap_recv +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x0f4042d1 ieee80211_ave_rssi +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x1896c8d1 ieee80211_iter_chan_contexts_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x403eb247 ieee80211_ready_on_channel +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x555ce793 ieee80211_iterate_active_interfaces +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x6369feed ieee80211_find_sta_by_ifaddr +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x8f8e2554 ieee80211_remain_on_channel_expired +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0x92644890 ieee80211_iterate_active_interfaces_atomic +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xad646d4a ieee80211_gtk_rekey_notify +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xc2457520 ieee80211_resume_disconnect +EXPORT_SYMBOL_GPL net/mac80211/mac80211 0xda8d1eeb ieee80211_request_smps +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x178a3f50 ip_set_get_ip6_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x199a0cf9 ip_set_get_ip4_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x22ec9e73 ip_set_get_ip_port +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x2deac669 ip_set_type_unregister +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x397f6231 ip_set_free +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x3db5e1d2 ip_set_del +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x625fe7e9 ip_set_type_register +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7762965e ip_set_nfnl_put +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x7924b6de ip_set_hostmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x80ee118c ip_set_nfnl_get +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x81fff2d1 ip_set_netmask_map +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x85b796a5 ip_set_add +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x883d6572 ip_set_name_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0x9e98722b ip_set_get_ipaddr6 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa293f8a6 ip_set_get_ipaddr4 +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xa2d623f3 ip_set_range_to_cidr +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xc0868b9b ip_set_get_byname +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xc3b062db ip_set_nfnl_get_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xe91e52b9 ip_set_test +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xf3b4d4ae ip_set_alloc +EXPORT_SYMBOL_GPL net/netfilter/ipset/ip_set 0xfda3ec7a ip_set_put_byindex +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0x0e579af8 ip_vs_conn_out_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xdafda2fc register_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xe5071e06 ip_vs_conn_in_get_proto +EXPORT_SYMBOL_GPL net/netfilter/ipvs/ip_vs 0xf44bec87 unregister_ip_vs_pe +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x045072cd nf_ct_port_nla_policy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x0bbf8b0a seq_print_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1a648bae __nf_ct_expect_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1ac1b829 nf_conntrack_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x1e3b34d0 __nf_ct_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x23222d4e __nf_ct_kill_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x25345910 nf_ct_delete_from_lists +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2635f5f0 nf_conntrack_alter_reply +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x289c3714 nf_ct_alloc_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x2f281a6e nf_conntrack_helper_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x31af0813 nf_ct_helper_ext_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3341de6b nf_conntrack_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x37386cac nf_conntrack_hash_rnd +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x39a93b65 nf_ct_expect_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3bdf7fe4 nf_conntrack_flush_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3dddb2d4 nf_conntrack_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x3f5b1415 nf_ct_port_nlattr_to_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x54d86f35 nf_ct_timeout_find_get_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x577a8b06 nf_ct_l3proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5a0ccb1c nf_conntrack_l4proto_tcp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x5ec39101 nf_ct_expect_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x613f6bbd nf_conntrack_helper_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x62813e5c nf_ct_port_nlattr_tuple_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x680897e4 nf_ct_dying_timeout +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x683aa99e nf_conntrack_l4proto_tcp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x693c3961 nf_ct_helper_hash +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x6e224a7a need_conntrack +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x78f9b710 nf_ct_l3proto_try_module_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x79277ac6 nf_conntrack_l3proto_generic +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x7de7702a __nf_ct_refresh_acct +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8498ce4a nf_ct_l4proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x89656104 nf_conntrack_l4proto_udp4 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8a899754 nf_ct_extend_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8cca777e nf_ct_l3protos +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x8ffe7e89 nf_conntrack_htable_size +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x90ff6c9f nf_ct_invert_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x94b2320a nf_ct_helper_expectfn_find_by_symbol +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x957818be nf_ct_port_tuple_to_nlattr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x973c40d0 nf_ct_expect_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9a130540 nf_conntrack_hash_check_insert +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9c4e569f nf_ct_get_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9d89adee nf_conntrack_helper_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9f38c4fc nf_ct_remove_expectations +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0x9fcb83a3 __nf_ct_try_assign_helper +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa214ee4b nf_ct_expect_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa321dafd nf_ct_iterate_cleanup +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa43027a8 nf_ct_expect_related_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa6db79f2 __nf_conntrack_confirm +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xa8113c59 nf_conntrack_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xab3d1f95 nf_ct_untracked_status_or +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xad1bb027 nf_ct_free_hashtable +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xafbeb60f nf_conntrack_free +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb602c57e nf_ct_l3proto_module_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xb8b175dc nf_conntrack_alloc +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbb530386 nf_conntrack_l4proto_udp6 +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xbf0b9f66 nf_ct_unexpect_related +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc0240dd4 nf_conntrack_set_hashsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc0cd71bf nf_conntrack_lock +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc18ac88d nf_ct_expect_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc1e13b09 nf_ct_expect_init +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc2360fd2 nf_ct_get_tuplepr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc40f284c nf_ct_helper_hsize +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xc4e46568 nf_ct_deliver_cached_events +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xcb1eb1b4 nfnetlink_parse_nat_setup_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xccfbc4c1 nf_ct_helper_expectfn_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd04c7781 nf_conntrack_in +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xd7c8a8cc nf_ct_l3proto_find_get +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdeec4216 nf_ct_helper_expectfn_find_by_name +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xdf5e2c8d nf_conntrack_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe37863c1 __nf_conntrack_helper_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe3cf54ed nf_ct_l4proto_put +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xe7882ca3 nf_ct_timeout_put_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xea559ddc nf_ct_unlink_expect_report +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xeb4f46dd nf_ct_nat_offset +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xece8cef1 nf_ct_helper_expectfn_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xecf86ee8 nf_conntrack_register_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf0689584 nf_ct_invert_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf290a22a nf_ct_expect_unregister_notifier +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xf38bcdf3 nf_conntrack_max +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfb353d1e nf_conntrack_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfc0edab5 nf_ct_extend_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfc860b7a nf_nat_seq_adjust_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfd89e760 __nf_conntrack_find +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack 0xfecb13bb nf_conntrack_tuple_taken +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_amanda 0x8ae8f6a7 nf_nat_amanda_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_broadcast 0xe48ef492 nf_conntrack_broadcast_help +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_ftp 0x47ac37b1 nf_nat_ftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x0b65f6a8 set_h225_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x38950674 nat_h245_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x4d19478f set_ras_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x4d68c30b get_h225_addr +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x82d50629 set_sig_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x860be6f7 nat_rtp_rtcp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0x8764b3dc set_h245_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xa5501281 nat_t120_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xb8694cf4 nat_q931_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_h323 0xceccf4eb nat_callforwarding_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_irc 0x792f5ce9 nf_nat_irc_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x0ac2e1a6 nf_nat_pptp_hook_outbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x1465a4c6 nf_nat_pptp_hook_expectfn +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x67074f4d nf_nat_pptp_hook_exp_gre +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_pptp 0x72b6ced8 nf_nat_pptp_hook_inbound +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0x7c50b458 nf_ct_gre_keymap_destroy +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_proto_gre 0xbe34e9d9 nf_ct_gre_keymap_add +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x18ab155a nf_nat_sip_expect_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x3922c37a nf_nat_sdp_media_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x478f7ee3 ct_sip_get_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x58b8a8e7 ct_sip_parse_numerical_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x60009442 nf_nat_sip_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x64c0057f ct_sip_parse_header_uri +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x786db3c3 ct_sip_parse_address_param +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0x9b9086b4 nf_nat_sdp_addr_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xc650c954 ct_sip_get_sdp_header +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xe60d7471 nf_nat_sip_seq_adjust_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xf040b8e5 nf_nat_sdp_session_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xf18d270c ct_sip_parse_request +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_sip 0xfe3cfb0b nf_nat_sdp_port_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_snmp 0x2cdd7ea3 nf_nat_snmp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_conntrack_tftp 0x23c2b176 nf_nat_tftp_hook +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x0d9bae4b nf_nat_l4proto_nlattr_to_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x131f636c nf_nat_l4proto_in_range +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x1edaecd6 nf_nat_l3proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x22fcd254 nf_nat_l4proto_register +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x44734908 nf_nat_tcp_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0x9979046b nf_nat_l3proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xce828480 __nf_nat_l4proto_find +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xd51201fd nf_nat_l4proto_unregister +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xe642eceb nf_nat_packet +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xe9b8ec2b nf_nat_set_seq_adjust +EXPORT_SYMBOL_GPL net/netfilter/nf_nat 0xf7b74950 nf_nat_l4proto_unique_tuple +EXPORT_SYMBOL_GPL net/netfilter/nf_tproxy_core 0x0dac5b71 nf_tproxy_assign_sock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x1f58e71b nfnl_lock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x3895cd7a nfnl_unlock +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x58b2602c nfnetlink_send +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x736d0400 nfnetlink_subsys_unregister +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x78192917 nfnetlink_subsys_register +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x850abde0 nfnetlink_unicast +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0x86cd1063 nfnetlink_set_err +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink 0xc0965609 nfnetlink_has_listeners +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x18b0aee3 nfnl_acct_update +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0x21f6bba6 nfnl_acct_find_get +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_acct 0xbecf5d14 nfnl_acct_put +EXPORT_SYMBOL_GPL net/netfilter/nfnetlink_log 0x53738783 nfulnl_log_packet +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x0ddbca4a xt_unregister_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x161d1417 xt_compat_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x2a5bf398 xt_proto_init +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x2ca61b1d xt_compat_target_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x3698b641 xt_compat_target_from_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x3f10d002 xt_register_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x40728a63 xt_find_revision +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x46249211 xt_find_table_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x49333553 xt_compat_target_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x512e21d7 xt_table_unlock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x5f82f1f7 xt_compat_flush_offsets +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x691a6d69 xt_compat_calc_jump +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x7e1ee05e xt_request_find_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x807d2b2c xt_recseq +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x813d5ca8 xt_request_find_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x843a99c2 xt_proto_fini +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0x9decc4f3 xt_replace_table +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xbe741ebd xt_check_match +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xc558e26b xt_hook_unlink +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xc84049e6 xt_hook_link +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xd3adcd8c xt_check_target +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xda34ef21 xt_compat_match_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xda564514 xt_compat_match_to_user +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xe0b4971b xt_compat_lock +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xec24fd82 xt_compat_add_offset +EXPORT_SYMBOL_GPL net/netfilter/x_tables 0xf2d5d1e1 xt_compat_match_from_user +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x1d54748c xt_rateest_lookup +EXPORT_SYMBOL_GPL net/netfilter/xt_RATEEST 0x8acf67ae xt_rateest_put +EXPORT_SYMBOL_GPL net/rds/rds 0x0019d555 rds_page_copy_user +EXPORT_SYMBOL_GPL net/rds/rds 0x00a467af rds_wq +EXPORT_SYMBOL_GPL net/rds/rds 0x0bef4936 rds_cong_map_updated +EXPORT_SYMBOL_GPL net/rds/rds 0x11dc2a3d rds_message_unmapped +EXPORT_SYMBOL_GPL net/rds/rds 0x27748293 rds_conn_create +EXPORT_SYMBOL_GPL net/rds/rds 0x2802cf48 rds_conn_drop +EXPORT_SYMBOL_GPL net/rds/rds 0x2c5c5514 rds_message_add_rdma_dest_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x30f00ad3 rds_conn_connect_if_down +EXPORT_SYMBOL_GPL net/rds/rds 0x3101936e rds_message_add_extension +EXPORT_SYMBOL_GPL net/rds/rds 0x3b4fc0fc rds_page_remainder_alloc +EXPORT_SYMBOL_GPL net/rds/rds 0x3b99faca rds_conn_destroy +EXPORT_SYMBOL_GPL net/rds/rds 0x3f20ede9 rds_rdma_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0x50cbe7b3 rds_stats +EXPORT_SYMBOL_GPL net/rds/rds 0x6a09c164 rds_send_drop_acked +EXPORT_SYMBOL_GPL net/rds/rds 0x73aac73d rds_message_populate_header +EXPORT_SYMBOL_GPL net/rds/rds 0x75b924e8 rds_recv_incoming +EXPORT_SYMBOL_GPL net/rds/rds 0x7bc62829 rds_stats_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0x8b0e08c8 rds_info_register_func +EXPORT_SYMBOL_GPL net/rds/rds 0xa796989e rds_trans_unregister +EXPORT_SYMBOL_GPL net/rds/rds 0xa9010fcb rds_trans_register +EXPORT_SYMBOL_GPL net/rds/rds 0xad74e2b2 rds_message_addref +EXPORT_SYMBOL_GPL net/rds/rds 0xb54f015a rds_connect_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xc2dab779 rds_info_copy +EXPORT_SYMBOL_GPL net/rds/rds 0xc829bc97 rds_conn_create_outgoing +EXPORT_SYMBOL_GPL net/rds/rds 0xcad6e52e rds_atomic_send_complete +EXPORT_SYMBOL_GPL net/rds/rds 0xd406bcfb rds_info_deregister_func +EXPORT_SYMBOL_GPL net/rds/rds 0xd70e2720 rds_inc_put +EXPORT_SYMBOL_GPL net/rds/rds 0xd92ee02b rds_inc_init +EXPORT_SYMBOL_GPL net/rds/rds 0xe3059e3f rds_message_put +EXPORT_SYMBOL_GPL net/rds/rds 0xe96abac1 rds_for_each_conn_info +EXPORT_SYMBOL_GPL net/rds/rds 0xf3c83885 rds_send_get_message +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x1f305819 rxrpc_unregister_security +EXPORT_SYMBOL_GPL net/rxrpc/af-rxrpc 0x2ea1bf7d rxrpc_register_security +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x00c52ef5 g_make_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x2f5e231e gss_service_to_auth_domain_name +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x340ccf23 svcauth_gss_flavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x39e1833c gss_mech_get_by_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x5e039566 gss_mech_unregister +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7290973b gss_pseudoflavor_to_service +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x7c8ff8b0 gss_svc_to_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0x8d1a827e svcauth_gss_register_pseudoflavor +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xa522bd00 gss_mech_get +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xb5dea7ef g_token_size +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc4ab3d4f gss_mech_register +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xc8451fa2 gss_mech_get_by_OID +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xd1fc3c23 gss_mech_put +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xf8b2ff6e g_verify_token_header +EXPORT_SYMBOL_GPL net/sunrpc/auth_gss/auth_rpcgss 0xfeccb32c gss_mech_get_by_name +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00a5b5ba rpc_sleep_on +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x00c701ee svc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x014d6894 cache_destroy_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x019e9671 svc_rpcb_cleanup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x02f14a14 rpc_init_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0468e736 rpc_sleep_on_priority +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x05e807a9 xdr_encode_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x065994f1 xdr_encode_opaque_fixed +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x06f71ae4 xs_swapper +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0a15b47f svc_sock_update_bufs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0a5f8ed9 xdr_reserve_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0bf10db7 rpcauth_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0c2a3f11 rpc_uaddr2sockaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0c4c5457 rpc_alloc_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x0f668ba9 svc_auth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x16b31b87 write_bytes_to_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x172d0531 xdr_stream_pos +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x181f0b9f rpc_pipefs_notifier_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1867e162 rpcauth_generic_bind_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1945260e cache_register_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1a8dffe3 sunrpc_destroy_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1cf78585 cache_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x1f2a9970 rpc_ntop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x208d4d37 rpc_init_priority_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x218c8087 auth_domain_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x22f84335 rpc_queue_empty +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x24ecdb2e rpc_peeraddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2532f73f xprt_lookup_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x25becd45 svc_auth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2862d730 svc_exit_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x28d5ef55 xdr_decode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2919b156 xdr_decode_string_inplace +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2a2c6252 rpc_localaddr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2a3e08d5 rpc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2d71bdf8 xdr_inline_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2da37622 xdr_set_scratch_buffer +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x2eec63c9 xdr_encode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x311ca732 rpc_wake_up_first +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31908c63 rpc_destroy_wait_queue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x31a89d59 rpc_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x32e02c84 xprt_release_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x332006a8 cache_create_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x33533e22 svc_unreg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x33846ff7 svc_xprt_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x36437c2c svc_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x37c6d433 rpc_mkpipe_dentry +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3c3f310e sunrpc_cache_register_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3d7cd9bf svc_bind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3de27f6f xprt_set_retrans_timeout_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x3f041fc4 xprt_set_retrans_timeout_def +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x40573f48 xdr_enter_page +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x406cbc7f rpc_lookup_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x40bc35e5 rpc_clone_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x413b63be rpc_wake_up_queued_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4248a06e svc_seq_show +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x48296bdd rpc_force_rebind +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x48413ae5 svc_xprt_init +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4849f326 svc_addsock +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b75f08d xprt_complete_rqst +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4b8f66d5 rpc_restart_call +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d3d7c07 rpc_free_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d54ca46 xdr_inline_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4d950645 xdr_init_decode_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x4e3e89bd svc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x50a513a1 rpc_task_reset_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x53445f68 nlm_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5413dfaa sunrpc_cache_pipe_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x57301e57 xprt_lock_and_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5795c9cb rpc_restart_call_prepare +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x597cd150 xprt_destroy_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5a911c74 svcauth_unix_set_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5b64c84c sunrpc_cache_lookup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x5ed0b890 xprt_disconnect_done +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x641a5320 xprt_alloc_slot +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6545c67e rpc_peeraddr2str +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6592685b xprt_setup_backchannel +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x6771f350 rpc_destroy_pipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x68bd2e07 xdr_buf_subsegment +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x71fa908a cache_flush +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x729cabea rpc_put_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7405bd9f svc_destroy +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7412d2b6 svc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x74c2b699 rpc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x755a3208 svc_recv +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x75e4d0c4 rpc_call_start +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x75fee25f rpc_bind_new_program +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x78e4979f xdr_read_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x79200341 rpc_max_payload +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7a36ddbd rpc_wake_up +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7ab36304 rpc_count_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7cf3e788 svcauth_unix_purge +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x7de53067 rpc_init_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8139f99d svc_drop +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8165f211 svc_rpcb_setup +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8222e46b cache_unregister_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x82bbee95 put_rpccred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x869bde13 svc_close_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x86fa51df rpc_queue_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x87d1007e auth_domain_put +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8a38ec4a rpcauth_lookup_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8acde8f0 rpc_killall_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8c44eeac xdr_decode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8d81fb40 rpcauth_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8e12b454 xprt_reserve_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x8ea9e796 xdr_partial_copy_from_skb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x90de6d6a xprt_wait_for_buffer_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x914f0e97 xprt_release_rqst_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x918e788a svc_xprt_enqueue +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x91fc6ead rpcauth_init_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x923a60e3 rpc_put_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x927855f4 svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9403a814 svc_xprt_copy_addrs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x96f39762 xdr_encode_word +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9799195d xdr_init_encode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x98b75d64 rpcauth_list_flavors +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ccb0a72 svc_set_num_threads +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9d12e22a rpc_setbufsize +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0x9ed191db xdr_shift_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa02d11dc rpc_net_ns +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1debcb6 sunrpc_init_cache_detail +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa1ebd199 rpc_call_null +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa2e48c35 rpcauth_destroy_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa54f9141 rpc_exit +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa570e9d4 svc_create_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa6d8c362 rpc_shutdown_client +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa83f0bc7 xdr_skb_read_bits +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa986b931 cache_check +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xa9f0a00c rpc_call_sync +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaa8689f8 rpc_malloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xab12f207 rpc_rmdir +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xac06b548 xprt_register_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xade29eee rpc_call_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xade56e64 auth_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xaf5bf6ef nfs_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xafe81802 bc_svc_process +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb2cb6712 rpc_delay +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb5631555 svc_proc_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb695b597 xprt_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xb7e7c67a xprt_unregister_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbca707c4 rpc_pipefs_notifier_unregister +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbdafe6ea read_bytes_from_xdr_buf +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbebc2758 svc_reserve +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbf9d1b96 nfsd_debug +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbfc9029e rpc_unlink +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xbfcd445d rpc_d_lookup_sb +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc0a262de xdr_write_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc12435e3 rpc_calc_rto +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc18abb40 xdr_terminate_string +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc1fbc6db sunrpc_cache_unregister_pipefs +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc2223dd4 rpc_pipe_generic_upcall +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc3880471 xdr_decode_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc412bcec xdr_encode_array2 +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc450a89b _copy_from_pages +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc8e96dea qword_addhex +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xc9748905 rpc_get_sb_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce22a556 xdr_init_decode +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xce5b475f csum_partial_copy_to_xdr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcec6c5ff rpc_run_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xcee467f3 xprt_load_transport +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd04ba6be svc_print_addr +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd2264faa xprt_alloc +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd2e3369e rpcauth_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd3cbfcd6 svc_create_pooled +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd445d055 unix_domain_find +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd52fd272 rpc_print_iostats +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd6a3e16b svc_reg_xprt_class +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xd80478b5 xprt_wake_pending_tasks +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdbf77194 xprt_release_xprt_cong +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdc78e033 xprt_write_space +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcb3d317 svc_xprt_names +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcb8e40d rpc_put_task_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdcee7128 svc_shutdown_net +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xdd363650 xdr_buf_from_iov +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xde1cef79 rpc_protocol +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe027362d sunrpc_cache_update +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe1ac2bb8 sunrpc_net_id +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe4a3b691 rpc_pton +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe4cdb1b0 rpc_mkpipe_data +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5919cb1 xdr_encode_opaque +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe5c7e4d0 xprt_adjust_cwnd +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xe97f4ce5 qword_get +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xedcf6be4 qword_add +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xeeacab69 rpc_update_rtt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf38129e1 svc_proc_register +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf45bc564 rpc_wake_up_status +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf5abd65b svc_authenticate +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf67873da svc_find_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf712fb75 __rpc_wait_for_completion_task +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf7484be2 rpc_lookup_machine_cred +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf95eb6c5 rpc_clone_client_set_auth +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d1164c rpc_free +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9d418d9 rpc_create +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xf9e982b9 xdr_buf_read_netobj +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa206821 rpcb_getport_async +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfa52f90c xprt_reserve_xprt +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfc03d65f rpc_wake_up_next +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xfd04c86d rpcauth_init_credcache +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xff57da41 svc_prepare_thread +EXPORT_SYMBOL_GPL net/sunrpc/sunrpc 0xffa7e167 xdr_process_buf +EXPORT_SYMBOL_GPL net/wimax/wimax 0x162cb621 wimax_state_change +EXPORT_SYMBOL_GPL net/wimax/wimax 0x54304da9 wimax_msg_send +EXPORT_SYMBOL_GPL net/wimax/wimax 0x610f98d6 wimax_msg +EXPORT_SYMBOL_GPL net/wimax/wimax 0x65f5663c wimax_msg_alloc +EXPORT_SYMBOL_GPL net/wimax/wimax 0x727c2dcf wimax_dev_init +EXPORT_SYMBOL_GPL net/wimax/wimax 0x7d25a7b3 wimax_dev_add +EXPORT_SYMBOL_GPL net/wimax/wimax 0x850d9d26 wimax_msg_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xa2ca596c wimax_msg_data_len +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb0a40034 wimax_msg_data +EXPORT_SYMBOL_GPL net/wimax/wimax 0xb94e943a wimax_report_rfkill_sw +EXPORT_SYMBOL_GPL net/wimax/wimax 0xbf0a78bb wimax_dev_rm +EXPORT_SYMBOL_GPL net/wimax/wimax 0xcde1a536 wimax_state_get +EXPORT_SYMBOL_GPL net/wimax/wimax 0xd0665018 wimax_report_rfkill_hw +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x0849cbe7 cfg80211_wext_giwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x22cb511f cfg80211_wext_siwscan +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x3bd6adfe cfg80211_wext_giwrange +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x60f1a610 cfg80211_wext_siwrts +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x74d22216 cfg80211_wext_giwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x77fa51a5 cfg80211_wext_giwretry +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0x92fc942d cfg80211_wext_giwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb14d4bff cfg80211_wext_siwfrag +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xb3cc25a7 cfg80211_wext_siwmode +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xc70badcb cfg80211_wext_giwname +EXPORT_SYMBOL_GPL net/wireless/cfg80211 0xecdc5f3b cfg80211_wext_giwscan +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x1c852e7c xfrm_calg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x28e23139 xfrm_probe_algs +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x2e47f677 xfrm_aalg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x3108ea46 xfrm_ealg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x32d5e7fc xfrm_aalg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x4d4fd5f1 xfrm_calg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x5fcdec5d xfrm_ealg_get_byidx +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x686c703f xfrm_count_auth_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x6e7474fc xfrm_ealg_get_byid +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0x9cb8037b xfrm_count_enc_supported +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xaeea3073 xfrm_aead_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xd05dc2a3 xfrm_aalg_get_byname +EXPORT_SYMBOL_GPL net/xfrm/xfrm_algo 0xe5581d5c pskb_put +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0x7cd608a6 ipcomp_destroy +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xab903202 ipcomp_output +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xae55966b ipcomp_input +EXPORT_SYMBOL_GPL net/xfrm/xfrm_ipcomp 0xc141ef31 ipcomp_init_state +EXPORT_SYMBOL_GPL sound/core/snd 0x04a2de70 snd_ctl_activate_id +EXPORT_SYMBOL_GPL sound/core/snd 0x111a808a snd_ctl_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0x5feaf2fb snd_kctl_jack_report +EXPORT_SYMBOL_GPL sound/core/snd 0xed6b0ac7 snd_ctl_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/core/snd 0xefbea4dc snd_kctl_jack_new +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x114b12af snd_compress_deregister +EXPORT_SYMBOL_GPL sound/core/snd-compress 0x84b1c242 snd_compress_register +EXPORT_SYMBOL_GPL sound/core/snd-compress 0xfcea9f2d snd_compress_new +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x04e1b99f snd_pcm_std_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x09e913c1 snd_pcm_alt_chmaps +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0x198730f5 snd_pcm_add_chmap_ctls +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xa286a234 snd_pcm_format_name +EXPORT_SYMBOL_GPL sound/core/snd-pcm 0xd6ce6083 snd_pcm_lib_default_mmap +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x37846996 snd_ak4113_create +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0x74087428 snd_ak4113_external_rate +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0xab48cb65 snd_ak4113_reg_write +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0xf299a451 snd_ak4113_check_rate_and_errors +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0xf54741a0 snd_ak4113_reinit +EXPORT_SYMBOL_GPL sound/i2c/other/snd-ak4113 0xf908325e snd_ak4113_build +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x005d9404 snd_hda_jack_tbl_get_from_tag +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x02812806 snd_hda_codec_set_power_to_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x05a51a37 snd_hda_bind_vol +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x06642a45 snd_hda_mixer_bind_ctls_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0676f5ac snd_hda_get_input_pin_attr +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x07094037 snd_hda_sequence_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0748b2a3 snd_hda_add_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x09377612 snd_hda_mixer_bind_ctls_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0c68ad92 snd_hda_input_mux_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x0d1a3839 snd_hda_multi_out_analog_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x103b617f snd_hda_mixer_bind_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1151778b snd_hda_mixer_amp_switch_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x152a3247 snd_hda_get_connections +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x161a108f snd_hda_jack_poll_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1791575e snd_hda_attach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x195ecbc0 hda_get_autocfg_input_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1bdf126a snd_hda_codec_resume_amp +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1c620e50 snd_hda_add_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1c852a58 snd_hda_parse_pin_defcfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1cce40f1 snd_hda_codec_amp_stereo +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1df1fbe5 snd_hda_codec_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x1e022bdc snd_hda_mixer_amp_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x209f3a56 snd_hda_build_controls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x22647211 snd_hda_spdif_out_of_nid +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x23205f06 snd_hda_enable_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x235c3796 snd_hda_codec_amp_update +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x28432abb snd_hda_codec_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x29e59ca3 snd_hda_multi_out_analog_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2a78755d snd_hda_jack_detect +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2aef03fa snd_hda_multi_out_analog_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b13c365 snd_hda_mixer_amp_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2b48ba9d snd_hda_detach_beep_device +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x2fb8a6b0 snd_hda_override_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3375c2fc snd_hda_mixer_bind_ctls_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x375cacd5 snd_hda_input_mux_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x39ecf769 snd_hda_sync_vmaster_hook +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3a681282 snd_hda_mixer_amp_switch_put_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3b987835 snd_hda_queue_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3bf272ed snd_hda_create_spdif_share_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x3e904f6e snd_hda_suspend +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x414b1df2 snd_hda_bus_reboot_notify +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x45a5e783 __snd_hda_add_vmaster +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4dab1f60 snd_hda_add_imux_item +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x4fdbd386 snd_hda_multi_out_dig_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x519d03c8 snd_hda_bind_sw +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5376769d snd_hda_add_new_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5736425b snd_hda_codec_setup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x5c81fb30 snd_hda_mixer_amp_switch_get_beep +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x646e359f snd_hda_jack_add_kctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65be6959 snd_hda_override_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x65fd902e snd_hda_unlock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x66203ebb snd_hda_get_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x675b9953 snd_hda_apply_pincfgs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x6ab85ecf snd_hda_jack_set_dirty_all +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x714592cd snd_hda_multi_out_dig_close +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x71e45622 snd_hda_is_supported_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7664f9d3 snd_hda_codec_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x76befc28 snd_hda_jack_detect_enable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7896e1d7 snd_hda_codec_cleanup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7a36a7de snd_hda_ch_mode_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7f6dbc76 snd_hda_get_default_vref +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x7fc2cbc8 snd_hda_check_board_codec_sid_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x81d38c9d snd_hda_mixer_amp_volume_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8235e65e query_amp_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e2e2848 snd_hda_codec_amp_read +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e4c6826 snd_hda_calc_stream_format +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8e80d0ca snd_hda_mixer_amp_volume_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x8f4bf7a9 snd_hda_gen_apply_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9030067b snd_hda_jack_add_kctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x916500a7 snd_hda_pick_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x939b9c3a snd_hda_gen_add_verbs +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x970cfc45 snd_hda_codec_update_widgets +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x978c8d65 snd_hda_create_spdif_in_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9a8e1877 snd_array_free +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9c1c569a snd_hda_set_vmaster_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0x9f81c380 snd_hda_apply_fixup +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa0994086 snd_hda_add_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa269d8fc snd_hda_codec_get_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2827d76 snd_hda_get_jack_location +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa2cf2eb2 snd_hda_jack_detect_enable_callback +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa4f7026a snd_hda_resume +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xa832462f snd_hda_ch_mode_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaaf2a26a snd_hda_bus_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaaf37582 snd_hda_load_patch +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaaff4a66 snd_hda_codec_update_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xaea9ca12 snd_hda_delete_codec_preset +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb3c962d1 snd_hda_build_pcms +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xb411a5ad snd_hda_lock_devices +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbb913873 snd_hda_mixer_amp_volume_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe347dd3 snd_hda_codec_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe62e421 snd_hda_jack_set_gating_jack +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xbe7dd7dc snd_array_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc652fd69 snd_hda_get_jack_connectivity +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc67855cf snd_hda_codec_resume_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc6aa89ee snd_hda_check_board_config +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc6d28483 snd_hda_mixer_bind_switch_put +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xc78e08a0 snd_hda_spdif_ctls_unassign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xcb301b6e snd_hda_get_jack_type +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xce29e7a1 snd_hda_multi_out_dig_open +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xce43ecbf snd_hda_ch_mode_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xceb14fd8 snd_hda_pin_sense +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd001b8ac snd_hda_codec_set_pincfg +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd373526d snd_hda_codec_configure +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd3807197 snd_hda_find_mixer_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xd7614f47 snd_hda_ctl_add +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdad0389e snd_hda_check_amp_list_power +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdadfeba5 snd_hda_get_pin_label +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xdbb791d8 _snd_hda_set_pin_ctl +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xddf7cd33 snd_hda_shutup_pins +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe014b519 snd_hda_create_dig_out_ctls +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe057fac5 snd_hda_override_conn_list +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe118de5d snd_pcm_2_1_chmaps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe1f8769f snd_hda_jack_tbl_new +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe3475d62 snd_hda_sequence_write_cache +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe3a1f71a snd_hda_spdif_ctls_assign +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe7411055 snd_hda_get_bool_hint +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xe86170d2 snd_hda_codec_write +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xea7415be snd_hda_multi_out_dig_prepare +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeb37fdb5 snd_hda_mixer_amp_tlv +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xebb0ff96 snd_hda_jack_report_sync +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xec0aa754 snd_hda_power_save +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeccb15dd snd_hda_jack_tbl_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xed7a3dca snd_hda_query_supported_pcm +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xeda3a721 snd_print_pcm_bits +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf246b742 snd_hda_jack_unsol_event +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf3c36c3a snd_hda_mixer_bind_switch_get +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf4154c80 snd_hda_get_sub_nodes +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf41cbf7c is_jack_detectable +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xf604c0d8 snd_hda_enum_helper_info +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfa373c3f snd_hda_query_pin_caps +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xfdefe401 __snd_hda_codec_cleanup_stream +EXPORT_SYMBOL_GPL sound/pci/hda/snd-hda-codec 0xffbc7678 snd_hda_get_conn_index +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-88pm860x 0x9165d569 pm860x_hs_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-88pm860x 0xeb21fb76 pm860x_mic_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ab8500-codec 0x580c06b3 ab8500_audio_setup_mics +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-ab8500-codec 0xd5be89b5 ab8500_audio_set_ear_cmv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x1f8ea94a arizona_out_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x29665fca arizona_dai_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x3b8c01d2 arizona_init_dai +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x5e8e6067 arizona_mixer_texts +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x6040a13a arizona_set_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x73f9f1d5 arizona_lhpf3_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x78355a2b arizona_mixer_values +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x7e59c88a arizona_out_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x93ed4d8b arizona_in_vi_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0x97389c94 arizona_init_fll +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xa1e03abc arizona_in_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xa87595c6 arizona_out_ev +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xb65ecf5b arizona_lhpf4_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xbfb9e9dd arizona_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xc9c29637 arizona_mixer_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xd58efa61 arizona_lhpf2_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xe466e0fc arizona_lhpf1_mode +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-arizona 0xf23a2c4b arizona_in_vd_ramp +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-cx20442 0x27ffca15 v253_ops +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-l3 0x78c84c7e l3_write +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max98095 0xa2fcdeea max98095_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-max9877 0x84850d8f max9877_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tpa6130a2 0x0410632a tpa6130a2_add_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-tpa6130a2 0x75f35000 tpa6130a2_stereo_enable +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x0d152171 twl6040_get_clk_id +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x14945d32 twl6040_hs_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0x8b7b78c0 twl6040_get_hs_step_size +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0xab773bda twl6040_get_dl1_gain +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-twl6040 0xe786dd95 twl6040_get_trim_value +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wl1273 0xe60741ab wl1273_get_format +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x29ef8c3d wm_adsp2_init +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0x333c6cbc wm_adsp1_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-adsp 0xd8916634 wm_adsp2_event +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x0431c02d wm_hubs_set_bias_level +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x10b47fae wm_hubs_update_class_w +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x5cd7eb9b wm_hubs_dcs_done +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x61f289c6 wm_hubs_add_analogue_routes +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x757206d5 wm_hubs_spkmix_tlv +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x895c593b wm_hubs_hpl_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0x8cdc4584 wm_hubs_add_analogue_controls +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xa29ac956 wm_hubs_vmid_ena +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xb0803ad0 wm_hubs_hpr_mux +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm-hubs 0xd8e491ea wm_hubs_handle_analogue_pdata +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x4ed2714d wm8350_hp_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8350 0x61278443 wm8350_mic_jack_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8903 0x64e6d90b wm8903_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8962 0xa0e8fba2 wm8962_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0x18cdeefa wm8994_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8994 0xd9af4169 wm8958_mic_detect +EXPORT_SYMBOL_GPL sound/soc/codecs/snd-soc-wm8996 0x071204a7 wm8996_detect +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0440e13a snd_soc_register_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x05bce641 snd_soc_bytes_put +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0c52b725 snd_soc_dapm_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0dab54e5 snd_soc_dapm_nc_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0e76eca4 snd_soc_default_writable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0fa62501 snd_soc_codec_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0fb7d76a snd_soc_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x0fdf1292 dapm_clock_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1073cb6f snd_soc_bytes_get +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x14bcd145 snd_soc_dapm_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x164a83a8 snd_soc_codec_set_cache_io +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x17e2dd9a snd_soc_free_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1b13eb12 snd_soc_unregister_card +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1ec5ba25 snd_soc_bulk_write_raw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x1f8eef00 snd_soc_dapm_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x20676ffa snd_soc_dpcm_be_set_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2206be84 snd_soc_dapm_weak_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2541a979 snd_soc_calc_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x26887dfa dapm_mark_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x273f617d snd_soc_jack_add_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x27aaa712 snd_soc_register_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x282bd599 snd_soc_dpcm_fe_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x29aef94c snd_soc_dai_set_channel_map +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x2a48d11b snd_soc_dpcm_can_be_free_stop +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x36459c19 snd_soc_dapm_disable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x39a17678 snd_soc_register_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3ca91643 snd_soc_register_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3ed2cc9d snd_soc_info_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x3f231d8c snd_soc_of_parse_card_name +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x43b2d8fa dpcm_be_dai_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x47fa4270 snd_soc_add_codec_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x49c1d729 snd_soc_dpcm_get_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4ddc84bd snd_soc_dapm_new_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4efe835f snd_soc_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x4f50fcd6 snd_soc_dapm_put_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5055ff34 dapm_reg_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x51d16c30 snd_soc_dapm_ignore_suspend +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x527c94bf snd_soc_cache_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x53b42553 snd_soc_dapm_get_pin_status +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5403ff7c snd_soc_get_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x56a9607c snd_soc_put_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x57aba3be snd_soc_dapm_new_widgets +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5b20efb7 snd_soc_dpcm_be_can_update +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5eb44b32 snd_soc_info_enum_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x5f9f95fb snd_soc_limit_volume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x62cfcf66 snd_soc_add_card_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6334af44 snd_soc_default_readable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6437ef44 snd_soc_put_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x643f0148 snd_soc_dapm_mux_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x653e4812 snd_soc_update_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6709318f snd_soc_info_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6717a608 snd_soc_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x6a4e7bc7 snd_soc_platform_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7470ec12 snd_soc_codec_readable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x750f9cfd snd_soc_dapm_get_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7816029d snd_soc_dapm_get_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7a890b11 snd_soc_codec_writable_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7b2b62a6 snd_soc_dapm_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7cb4c490 snd_soc_platform_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7dd6d9b2 snd_soc_unregister_dais +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7e272d26 snd_soc_dpcm_be_get_state +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7e606130 snd_soc_calc_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x7ece4806 snd_soc_info_xr_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8040cc0c snd_soc_put_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x82b3a5d0 snd_soc_jack_get_type +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x83af62d0 snd_soc_jack_notifier_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x83f33138 snd_soc_dai_digital_mute +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x843403bd snd_soc_register_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x850b6f7a dapm_mark_io_dirty +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x8542f858 snd_soc_get_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x86720d54 dapm_regulator_event +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x873062e8 snd_soc_unregister_dai +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x898e9d2a snd_soc_dai_set_fmt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x90d9ff34 snd_soc_dai_set_tdm_slot +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x94b45663 snd_soc_add_dai_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9699e214 snd_soc_dpcm_can_be_params +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x98ee6b06 snd_soc_get_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x99737e0f snd_soc_info_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9a3b59d5 snd_soc_jack_add_pins +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9abfd738 snd_soc_jack_report +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9b949bb7 snd_soc_dapm_mixer_update_power +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9e4ce2da snd_soc_poweroff +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0x9fe3bc4e snd_soc_cache_sync +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa114a681 snd_soc_dapm_info_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa2663c8f snd_soc_dai_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa4647b19 snd_soc_jack_new +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa4843d9a snd_soc_dapm_put_pin_switch +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa4dfd836 snd_soc_add_platform_controls +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa70da5f9 snd_soc_debugfs_root +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xa8447c3c snd_soc_dai_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaa472c1e snd_soc_new_ac97_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaabe0f7f snd_soc_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xab379980 snd_soc_codec_set_pll +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xac2f75fd snd_soc_resume +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xac746348 snd_soc_cache_read +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xad4db4e2 snd_soc_default_volatile_register +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xad6e1763 snd_soc_dai_set_clkdiv +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xae0eaa01 snd_soc_get_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xaef5d36b snd_soc_pm_ops +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xafa384a1 snd_soc_dapm_free +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb0dce788 snd_soc_put_strobe +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb4fc3e2c snd_soc_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb59830a7 snd_soc_dapm_put_enum_virt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xb89f0571 snd_soc_dapm_get_value_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbd270891 snd_soc_get_pcm_runtime +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbdadf8b0 snd_soc_bytes_info +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xbdc4eded snd_soc_update_bits_locked +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc07e0381 snd_soc_get_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc14e9ef0 snd_soc_get_volsw_sx +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc27bf2ff snd_soc_platform_trigger +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc308c2bd snd_soc_write +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc3f2ea35 snd_soc_info_volsw_ext +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc40f72b7 snd_soc_of_parse_audio_routing +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8032547 snd_soc_dapm_force_enable_pin +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xc8269f94 snd_soc_params_to_frame_size +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcc27feac snd_soc_jack_free_gpios +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xcc808bc1 snd_soc_dapm_add_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xce30c364 snd_soc_test_bits +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd21160d1 snd_soc_unregister_platform +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd2b04cce snd_soc_set_runtime_hwparams +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd3f68854 snd_soc_info_volsw_range +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd5e79c64 snd_soc_jack_notifier_unregister +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xd6a0da51 snd_soc_jack_add_zones +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdd308c92 snd_soc_unregister_codec +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xdd465c78 snd_soc_dai_set_tristate +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xde7c9bd0 snd_soc_cnew +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xea6cda99 snd_soc_dapm_del_routes +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xeb711ae7 snd_soc_params_to_bclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xebb79b61 snd_soc_dapm_put_enum_double +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xed68ab4a snd_soc_get_dai_substream +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xee030eaf snd_soc_codec_set_sysclk +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xef00f8fd snd_soc_put_volsw_s8 +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf04a13b9 snd_soc_put_volsw +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xf1aaf889 snd_soc_dapm_get_enum_virt +EXPORT_SYMBOL_GPL sound/soc/snd-soc-core 0xfc4db1cb snd_soc_put_value_enum_double +EXPORT_SYMBOL_GPL vmlinux 0x0067df75 ata_tf_from_fis +EXPORT_SYMBOL_GPL vmlinux 0x006bc072 hwrng_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0070ef14 __tracepoint_rpm_idle +EXPORT_SYMBOL_GPL vmlinux 0x0095aae3 ipv6_find_tlv +EXPORT_SYMBOL_GPL vmlinux 0x00963e68 pcie_update_link_speed +EXPORT_SYMBOL_GPL vmlinux 0x00a0ba9a usb_reset_configuration +EXPORT_SYMBOL_GPL vmlinux 0x00aabfb3 mnt_want_write +EXPORT_SYMBOL_GPL vmlinux 0x00c4dc87 timecounter_init +EXPORT_SYMBOL_GPL vmlinux 0x00dc6478 crypto_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x00ebcb5d ata_id_string +EXPORT_SYMBOL_GPL vmlinux 0x00f94fde register_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x00fc18a8 md_stop_writes +EXPORT_SYMBOL_GPL vmlinux 0x01010c6d klist_add_before +EXPORT_SYMBOL_GPL vmlinux 0x0103156d usb_free_urb +EXPORT_SYMBOL_GPL vmlinux 0x011a4545 fuse_request_send_background +EXPORT_SYMBOL_GPL vmlinux 0x011cf028 regulator_suspend_finish +EXPORT_SYMBOL_GPL vmlinux 0x012495a0 sysfs_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x01330a06 atomic_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x013bc9f8 __inet_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x01848a8e local_apic_timer_c2_ok +EXPORT_SYMBOL_GPL vmlinux 0x01a4ea6d unregister_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x01e1a8de kgdb_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x0201a1c9 usb_deregister_dev +EXPORT_SYMBOL_GPL vmlinux 0x023d4b1a tcp_reno_cong_avoid +EXPORT_SYMBOL_GPL vmlinux 0x02448233 wakeup_source_destroy +EXPORT_SYMBOL_GPL vmlinux 0x025977a7 blk_add_request_payload +EXPORT_SYMBOL_GPL vmlinux 0x026211e2 memory_failure_queue +EXPORT_SYMBOL_GPL vmlinux 0x028e70e4 da903x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x02b11f28 sata_scr_read +EXPORT_SYMBOL_GPL vmlinux 0x02bd435f ata_sff_data_xfer_noirq +EXPORT_SYMBOL_GPL vmlinux 0x0302b807 rio_mport_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x030d6df7 bus_sort_breadthfirst +EXPORT_SYMBOL_GPL vmlinux 0x0343bdf1 __i2c_board_list +EXPORT_SYMBOL_GPL vmlinux 0x03498e08 ehci_setup +EXPORT_SYMBOL_GPL vmlinux 0x037cee78 debugfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x039370b9 pci_user_read_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x03a3f86d unregister_jprobe +EXPORT_SYMBOL_GPL vmlinux 0x03c22206 fuse_request_alloc +EXPORT_SYMBOL_GPL vmlinux 0x03d166ac iommu_group_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x03da01a4 wm831x_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x03e3686c ata_timing_cycle2mode +EXPORT_SYMBOL_GPL vmlinux 0x03eca9a1 btree_get_prev +EXPORT_SYMBOL_GPL vmlinux 0x04029431 tty_ldisc_ref +EXPORT_SYMBOL_GPL vmlinux 0x042db379 inet_getpeer +EXPORT_SYMBOL_GPL vmlinux 0x04486e88 rcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x045455e9 xen_swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x0465a073 regmap_reg_in_ranges +EXPORT_SYMBOL_GPL vmlinux 0x048b5f8d twl4030_audio_get_mclk +EXPORT_SYMBOL_GPL vmlinux 0x04a79848 zs_create_pool +EXPORT_SYMBOL_GPL vmlinux 0x04c3f2c1 gnttab_empty_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x04c4f603 mpi_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x04d75310 pci_hp_deregister +EXPORT_SYMBOL_GPL vmlinux 0x04df8fbc lzo1x_decompress_safe +EXPORT_SYMBOL_GPL vmlinux 0x05003f4e gpiochip_add +EXPORT_SYMBOL_GPL vmlinux 0x0531dcb8 ata_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x053494cb tpm_get_random +EXPORT_SYMBOL_GPL vmlinux 0x054e550b kernel_halt +EXPORT_SYMBOL_GPL vmlinux 0x05593da0 debugfs_create_blob +EXPORT_SYMBOL_GPL vmlinux 0x05656e56 usb_clear_halt +EXPORT_SYMBOL_GPL vmlinux 0x058b582a vt_get_leds +EXPORT_SYMBOL_GPL vmlinux 0x05ae262e regulator_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x05ebaab1 register_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0x060d1064 set_memory_ro +EXPORT_SYMBOL_GPL vmlinux 0x06124592 dma_buf_kunmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0x062fc169 xen_hvm_resume_frames +EXPORT_SYMBOL_GPL vmlinux 0x064306f4 acpi_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x064db9a5 mark_mounts_for_expiry +EXPORT_SYMBOL_GPL vmlinux 0x065c362b perf_event_release_kernel +EXPORT_SYMBOL_GPL vmlinux 0x0683a57a __netpoll_free_rcu +EXPORT_SYMBOL_GPL vmlinux 0x06982379 subsys_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0x06d6e8f9 skcipher_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x06f1ff22 devres_remove_group +EXPORT_SYMBOL_GPL vmlinux 0x06f22ca2 irq_create_mapping +EXPORT_SYMBOL_GPL vmlinux 0x06f613bf da903x_read +EXPORT_SYMBOL_GPL vmlinux 0x06fb5889 pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x07062a84 cpufreq_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x070f233c rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x072523c7 blk_rq_check_limits +EXPORT_SYMBOL_GPL vmlinux 0x0726be0b scsi_register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x072b35e6 platform_driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x073208f4 input_ff_event +EXPORT_SYMBOL_GPL vmlinux 0x0762403c edac_put_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0x07b21f85 kdb_get_kbd_char +EXPORT_SYMBOL_GPL vmlinux 0x07b4e3f8 wm8994_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x07b52e38 rtnl_unregister +EXPORT_SYMBOL_GPL vmlinux 0x07bfbf0e hypervisor_kobj +EXPORT_SYMBOL_GPL vmlinux 0x07c29561 uart_handle_cts_change +EXPORT_SYMBOL_GPL vmlinux 0x07ff5a95 ata_sas_async_probe +EXPORT_SYMBOL_GPL vmlinux 0x07ffce00 elv_unregister +EXPORT_SYMBOL_GPL vmlinux 0x085dd75e ata_bmdma_post_internal_cmd +EXPORT_SYMBOL_GPL vmlinux 0x08834759 sock_update_netprioidx +EXPORT_SYMBOL_GPL vmlinux 0x088bfa7e cancel_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x08b5d2c6 tpm_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x08b81955 arizona_set_irq_wake +EXPORT_SYMBOL_GPL vmlinux 0x08bc0870 compat_put_timespec +EXPORT_SYMBOL_GPL vmlinux 0x08cc310f cpuidle_register_device +EXPORT_SYMBOL_GPL vmlinux 0x08d85784 serial8250_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x091eb9b4 round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0x092c2a7a irq_domain_add_tree +EXPORT_SYMBOL_GPL vmlinux 0x0936d3ac ata_cable_sata +EXPORT_SYMBOL_GPL vmlinux 0x09469482 kfree_call_rcu +EXPORT_SYMBOL_GPL vmlinux 0x09fad0f8 serial8250_tx_chars +EXPORT_SYMBOL_GPL vmlinux 0x0a5b3b22 tpm_store_cancel +EXPORT_SYMBOL_GPL vmlinux 0x0a64fe1f shmem_file_setup +EXPORT_SYMBOL_GPL vmlinux 0x0a7606ee sdio_readl +EXPORT_SYMBOL_GPL vmlinux 0x0a8e83c8 raw_seq_stop +EXPORT_SYMBOL_GPL vmlinux 0x0a9ac77f tty_port_link_device +EXPORT_SYMBOL_GPL vmlinux 0x0ac89d9e kern_mount_data +EXPORT_SYMBOL_GPL vmlinux 0x0acf69e1 driver_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0aeb048e cm_notify_event +EXPORT_SYMBOL_GPL vmlinux 0x0b07abe2 unshare_fs_struct +EXPORT_SYMBOL_GPL vmlinux 0x0b19ed7c apei_estatus_check_header +EXPORT_SYMBOL_GPL vmlinux 0x0b1df035 platform_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0b4db972 blkdev_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x0b52e502 apei_resources_add +EXPORT_SYMBOL_GPL vmlinux 0x0b7145a6 device_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x0b7b9554 wakeup_source_unregister +EXPORT_SYMBOL_GPL vmlinux 0x0b9d039b device_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x0baa55bd ata_host_start +EXPORT_SYMBOL_GPL vmlinux 0x0bae62b1 ktime_get_monotonic_offset +EXPORT_SYMBOL_GPL vmlinux 0x0bb6d988 __blkg_prfill_u64 +EXPORT_SYMBOL_GPL vmlinux 0x0bbeef00 virtqueue_enable_cb +EXPORT_SYMBOL_GPL vmlinux 0x0bc390fb ata_port_desc +EXPORT_SYMBOL_GPL vmlinux 0x0be8cb31 btree_lookup +EXPORT_SYMBOL_GPL vmlinux 0x0bfa3a19 rcu_idle_exit +EXPORT_SYMBOL_GPL vmlinux 0x0c0c015e ring_buffer_swap_cpu +EXPORT_SYMBOL_GPL vmlinux 0x0c2cdbf1 synchronize_sched +EXPORT_SYMBOL_GPL vmlinux 0x0c570627 led_trigger_remove +EXPORT_SYMBOL_GPL vmlinux 0x0c65ca86 pci_reset_pri +EXPORT_SYMBOL_GPL vmlinux 0x0c71a3a3 init_user_ns +EXPORT_SYMBOL_GPL vmlinux 0x0c805f93 clflush_cache_range +EXPORT_SYMBOL_GPL vmlinux 0x0c8fda29 usb_hc_died +EXPORT_SYMBOL_GPL vmlinux 0x0c9b86c9 unregister_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x0cc1e40f crypto_it_tab +EXPORT_SYMBOL_GPL vmlinux 0x0cd10a4e work_cpu +EXPORT_SYMBOL_GPL vmlinux 0x0d0b71e1 __page_file_mapping +EXPORT_SYMBOL_GPL vmlinux 0x0d21d1a5 xfrm_audit_state_replay_overflow +EXPORT_SYMBOL_GPL vmlinux 0x0d2c5359 wm8400_reset_codec_reg_cache +EXPORT_SYMBOL_GPL vmlinux 0x0d447756 fuse_do_open +EXPORT_SYMBOL_GPL vmlinux 0x0d5e6a53 pci_enable_pri +EXPORT_SYMBOL_GPL vmlinux 0x0d60bf82 rio_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x0d6d789a class_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x0dd56492 usb_get_status +EXPORT_SYMBOL_GPL vmlinux 0x0df9ef97 __cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0x0e0e9eac arizona_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x0e13cb4d apei_resources_release +EXPORT_SYMBOL_GPL vmlinux 0x0e27f032 inet6_lookup_listener +EXPORT_SYMBOL_GPL vmlinux 0x0e2bd427 register_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0x0e60e123 stmpe_enable +EXPORT_SYMBOL_GPL vmlinux 0x0e9f8c59 usb_hcd_unlink_urb_from_ep +EXPORT_SYMBOL_GPL vmlinux 0x0ea753ff security_inode_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x0ecdfbf2 bus_set_iommu +EXPORT_SYMBOL_GPL vmlinux 0x0ecf823a static_key_slow_dec +EXPORT_SYMBOL_GPL vmlinux 0x0ed2483f led_classdev_resume +EXPORT_SYMBOL_GPL vmlinux 0x0ef06974 spi_populate_ppr_msg +EXPORT_SYMBOL_GPL vmlinux 0x0f3f1676 noop_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x0f52a811 devres_open_group +EXPORT_SYMBOL_GPL vmlinux 0x0f5612f6 ftrace_set_filter +EXPORT_SYMBOL_GPL vmlinux 0x0f6ac8b9 register_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x0f751aea input_event_from_user +EXPORT_SYMBOL_GPL vmlinux 0x0fa138de xen_hvm_need_lapic +EXPORT_SYMBOL_GPL vmlinux 0x0fb2217f spi_get_next_queued_message +EXPORT_SYMBOL_GPL vmlinux 0x0fbe65ce ata_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x0fcc1969 copy_from_user_nmi +EXPORT_SYMBOL_GPL vmlinux 0x0fe2d570 xenbus_directory +EXPORT_SYMBOL_GPL vmlinux 0x0fee2b9b bitmap_resize +EXPORT_SYMBOL_GPL vmlinux 0x0fee632f sdio_f0_readb +EXPORT_SYMBOL_GPL vmlinux 0x0ff1508e fuse_conn_get +EXPORT_SYMBOL_GPL vmlinux 0x100c48a2 unregister_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x10138352 tracing_on +EXPORT_SYMBOL_GPL vmlinux 0x10194a8e bmp085_remove +EXPORT_SYMBOL_GPL vmlinux 0x10291853 devm_regulator_put +EXPORT_SYMBOL_GPL vmlinux 0x10374c19 da9052_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x103ffabc exportfs_encode_inode_fh +EXPORT_SYMBOL_GPL vmlinux 0x104d1e6a fanout_mutex +EXPORT_SYMBOL_GPL vmlinux 0x10590648 xfrm_audit_state_notfound +EXPORT_SYMBOL_GPL vmlinux 0x1079c42a subsys_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x10c9d678 irq_domain_simple_ops +EXPORT_SYMBOL_GPL vmlinux 0x10d07dea gen_pool_avail +EXPORT_SYMBOL_GPL vmlinux 0x10ecc52c usb_amd_quirk_pll_enable +EXPORT_SYMBOL_GPL vmlinux 0x110106c1 cper_severity_to_aer +EXPORT_SYMBOL_GPL vmlinux 0x111d62b0 ata_host_suspend +EXPORT_SYMBOL_GPL vmlinux 0x114f1a20 balloon_stats +EXPORT_SYMBOL_GPL vmlinux 0x115a9192 invalidate_inode_pages2 +EXPORT_SYMBOL_GPL vmlinux 0x11684a5a spi_bus_lock +EXPORT_SYMBOL_GPL vmlinux 0x1172ce54 rtc_ktime_to_tm +EXPORT_SYMBOL_GPL vmlinux 0x11759668 aead_geniv_free +EXPORT_SYMBOL_GPL vmlinux 0x117c7305 hwpoison_filter_dev_major +EXPORT_SYMBOL_GPL vmlinux 0x119af014 cpu_bit_bitmap +EXPORT_SYMBOL_GPL vmlinux 0x119be3d0 rtc_alarm_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0x119eabc0 wm8350_gpio_config +EXPORT_SYMBOL_GPL vmlinux 0x11f447ce __gpio_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x1200f234 __rtnl_af_register +EXPORT_SYMBOL_GPL vmlinux 0x121ed3f3 add_timer_on +EXPORT_SYMBOL_GPL vmlinux 0x121f3a3d fat_get_dotdot_entry +EXPORT_SYMBOL_GPL vmlinux 0x121f73bb usb_anchor_empty +EXPORT_SYMBOL_GPL vmlinux 0x124c4b12 xen_pci_frontend +EXPORT_SYMBOL_GPL vmlinux 0x124f2056 crypto_get_attr_type +EXPORT_SYMBOL_GPL vmlinux 0x1250f5a0 dev_attr_link_power_management_policy +EXPORT_SYMBOL_GPL vmlinux 0x1258d9d9 regulator_disable +EXPORT_SYMBOL_GPL vmlinux 0x125f6d4d crypto_unregister_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x12657e02 tcp_slow_start +EXPORT_SYMBOL_GPL vmlinux 0x1268f357 resume_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0x1271240f gpiochip_remove +EXPORT_SYMBOL_GPL vmlinux 0x1280153a pwmchip_add +EXPORT_SYMBOL_GPL vmlinux 0x12a0df79 sysfs_create_group +EXPORT_SYMBOL_GPL vmlinux 0x12fcffd5 spi_new_device +EXPORT_SYMBOL_GPL vmlinux 0x131a5ed7 regmap_del_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x131db64a system_long_wq +EXPORT_SYMBOL_GPL vmlinux 0x13213b47 ata_base_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x134713f9 rio_mport_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x1349b84d ip6_push_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x138aff76 gnttab_init +EXPORT_SYMBOL_GPL vmlinux 0x1393f2c3 xenbus_dev_probe +EXPORT_SYMBOL_GPL vmlinux 0x13b2a946 register_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x13cd17f3 device_bind_driver +EXPORT_SYMBOL_GPL vmlinux 0x13ce87e8 asn1_ber_decoder +EXPORT_SYMBOL_GPL vmlinux 0x13ea1c2c adp5520_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x1416c8d6 put_compat_timeval +EXPORT_SYMBOL_GPL vmlinux 0x1426ad26 cpufreq_frequency_table_cpuinfo +EXPORT_SYMBOL_GPL vmlinux 0x144a175d class_compat_create_link +EXPORT_SYMBOL_GPL vmlinux 0x1450f1fa ata_cable_80wire +EXPORT_SYMBOL_GPL vmlinux 0x14582b6a pci_disable_pri +EXPORT_SYMBOL_GPL vmlinux 0x145fd596 kset_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0x146116ed pm_generic_freeze_noirq +EXPORT_SYMBOL_GPL vmlinux 0x148adb7f debugfs_create_x64 +EXPORT_SYMBOL_GPL vmlinux 0x14b721b9 uart_console_write +EXPORT_SYMBOL_GPL vmlinux 0x14d4f822 edac_subsys +EXPORT_SYMBOL_GPL vmlinux 0x14e7363a xen_swiotlb_sync_single_for_device +EXPORT_SYMBOL_GPL vmlinux 0x14f34599 ata_pci_remove_one +EXPORT_SYMBOL_GPL vmlinux 0x14fb6905 rtc_set_time +EXPORT_SYMBOL_GPL vmlinux 0x15010e1f arbitrary_virt_to_machine +EXPORT_SYMBOL_GPL vmlinux 0x1501bf65 __wake_up_sync_key +EXPORT_SYMBOL_GPL vmlinux 0x15026a32 snmp_mib_init +EXPORT_SYMBOL_GPL vmlinux 0x1516306b iommu_domain_has_cap +EXPORT_SYMBOL_GPL vmlinux 0x15657852 da9052_disable_irq +EXPORT_SYMBOL_GPL vmlinux 0x15892417 async_synchronize_cookie +EXPORT_SYMBOL_GPL vmlinux 0x15936592 raw_seq_open +EXPORT_SYMBOL_GPL vmlinux 0x15979ea6 pci_intx_mask_supported +EXPORT_SYMBOL_GPL vmlinux 0x1598dc9d unregister_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x15af65f0 xenbus_register_driver_common +EXPORT_SYMBOL_GPL vmlinux 0x15b0606e e820_any_mapped +EXPORT_SYMBOL_GPL vmlinux 0x15db9cf0 default_backing_dev_info +EXPORT_SYMBOL_GPL vmlinux 0x16000a3c dm_device_name +EXPORT_SYMBOL_GPL vmlinux 0x1607ae01 scsi_unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x161109c8 usb_add_hcd +EXPORT_SYMBOL_GPL vmlinux 0x1642b917 srcu_init_notifier_head +EXPORT_SYMBOL_GPL vmlinux 0x16438cb1 xen_swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x1650bf27 rcutorture_record_progress +EXPORT_SYMBOL_GPL vmlinux 0x1663f221 security_inode_setattr +EXPORT_SYMBOL_GPL vmlinux 0x16716240 m2p_remove_override +EXPORT_SYMBOL_GPL vmlinux 0x167e8c28 rdev_clear_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x16ae5de7 ata_timing_compute +EXPORT_SYMBOL_GPL vmlinux 0x16fcd69f tty_port_install +EXPORT_SYMBOL_GPL vmlinux 0x172da444 cgroup_unload_subsys +EXPORT_SYMBOL_GPL vmlinux 0x17614bf3 apei_resources_sub +EXPORT_SYMBOL_GPL vmlinux 0x177c338d twl_get_version +EXPORT_SYMBOL_GPL vmlinux 0x17acbd5a device_schedule_callback_owner +EXPORT_SYMBOL_GPL vmlinux 0x17f5f87a pci_enable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x1829b9ed hwpoison_filter_memcg +EXPORT_SYMBOL_GPL vmlinux 0x182ea173 fuse_do_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x1848d7d7 __tracepoint_rpm_resume +EXPORT_SYMBOL_GPL vmlinux 0x1853653c btree_alloc +EXPORT_SYMBOL_GPL vmlinux 0x18582826 amd_pmu_disable_virt +EXPORT_SYMBOL_GPL vmlinux 0x186511df pci_hp_create_module_link +EXPORT_SYMBOL_GPL vmlinux 0x1866cec2 ring_buffer_size +EXPORT_SYMBOL_GPL vmlinux 0x1878f62b edac_err_assert +EXPORT_SYMBOL_GPL vmlinux 0x187f1b31 blkg_conf_prep +EXPORT_SYMBOL_GPL vmlinux 0x1885789e fb_deferred_io_fsync +EXPORT_SYMBOL_GPL vmlinux 0x18d8c9a4 usb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0x18e12700 skb_morph +EXPORT_SYMBOL_GPL vmlinux 0x18e2c347 dev_pm_qos_remove_global_notifier +EXPORT_SYMBOL_GPL vmlinux 0x18f83fab gnttab_grant_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0x18fa9a1f pm_runtime_autosuspend_expiration +EXPORT_SYMBOL_GPL vmlinux 0x193d48e0 trace_current_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x196614ce hw_breakpoint_restore +EXPORT_SYMBOL_GPL vmlinux 0x19777033 wm831x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x199c7757 balloon_devinfo_alloc +EXPORT_SYMBOL_GPL vmlinux 0x19a304ba usb_disabled +EXPORT_SYMBOL_GPL vmlinux 0x19ca80d1 save_stack_trace_tsk +EXPORT_SYMBOL_GPL vmlinux 0x19caa8fb sata_scr_valid +EXPORT_SYMBOL_GPL vmlinux 0x19fc7f60 regulator_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x1a082d69 max77693_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x1a323362 __ftrace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x1a6de1d1 pci_walk_bus +EXPORT_SYMBOL_GPL vmlinux 0x1aadbe40 power_supply_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1ad83009 trace_seq_vprintf +EXPORT_SYMBOL_GPL vmlinux 0x1ad94487 arizona_clk32k_enable +EXPORT_SYMBOL_GPL vmlinux 0x1ae0e135 tracing_generic_entry_update +EXPORT_SYMBOL_GPL vmlinux 0x1b23a939 pci_cfg_access_trylock +EXPORT_SYMBOL_GPL vmlinux 0x1b3c9291 tcp_orphan_count +EXPORT_SYMBOL_GPL vmlinux 0x1b3fbebf crypto_alloc_base +EXPORT_SYMBOL_GPL vmlinux 0x1b4b32ee inet_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x1b53aecf iommu_group_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x1b958062 usb_autopm_put_interface_no_suspend +EXPORT_SYMBOL_GPL vmlinux 0x1b9aca3f jprobe_return +EXPORT_SYMBOL_GPL vmlinux 0x1bb767c6 bsg_job_done +EXPORT_SYMBOL_GPL vmlinux 0x1bbff221 inverse_translate +EXPORT_SYMBOL_GPL vmlinux 0x1bfee7ad queue_work +EXPORT_SYMBOL_GPL vmlinux 0x1c2b6944 pci_destroy_slot +EXPORT_SYMBOL_GPL vmlinux 0x1c36837e scsi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x1c426ada rio_request_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x1c4ead7f pm_generic_poweroff_late +EXPORT_SYMBOL_GPL vmlinux 0x1c5b1f28 irq_free_descs +EXPORT_SYMBOL_GPL vmlinux 0x1c60c14c key_type_asymmetric +EXPORT_SYMBOL_GPL vmlinux 0x1c6323cb crypto_unregister_algs +EXPORT_SYMBOL_GPL vmlinux 0x1c70a25a pm_generic_resume_noirq +EXPORT_SYMBOL_GPL vmlinux 0x1c80d27d btree_geo128 +EXPORT_SYMBOL_GPL vmlinux 0x1c87a811 __round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x1c905e97 __fat_fs_error +EXPORT_SYMBOL_GPL vmlinux 0x1c9fbb03 iommu_domain_alloc +EXPORT_SYMBOL_GPL vmlinux 0x1ca14f2b vfs_cancel_lock +EXPORT_SYMBOL_GPL vmlinux 0x1cae411a rdev_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x1caf7140 add_to_page_cache_lru +EXPORT_SYMBOL_GPL vmlinux 0x1cb1c6ad usb_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x1cdb2147 zs_malloc +EXPORT_SYMBOL_GPL vmlinux 0x1cfd95c1 wakeup_source_register +EXPORT_SYMBOL_GPL vmlinux 0x1cffc4df RSA_public_key_algorithm +EXPORT_SYMBOL_GPL vmlinux 0x1d01f34b spi_sync_locked +EXPORT_SYMBOL_GPL vmlinux 0x1d0eae5d pci_user_write_config_dword +EXPORT_SYMBOL_GPL vmlinux 0x1d459685 xstate_size +EXPORT_SYMBOL_GPL vmlinux 0x1d58ae14 lpddr2_jedec_timings +EXPORT_SYMBOL_GPL vmlinux 0x1d71f504 inet_csk_compat_getsockopt +EXPORT_SYMBOL_GPL vmlinux 0x1d739e1c xen_set_callback_via +EXPORT_SYMBOL_GPL vmlinux 0x1d771118 device_attach +EXPORT_SYMBOL_GPL vmlinux 0x1d77b0f8 unix_socket_table +EXPORT_SYMBOL_GPL vmlinux 0x1d7a9563 register_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x1d82028a tasklet_hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x1d82fe4b bus_get_kset +EXPORT_SYMBOL_GPL vmlinux 0x1d86026e get_kernel_page +EXPORT_SYMBOL_GPL vmlinux 0x1d91ec7c ata_port_wait_eh +EXPORT_SYMBOL_GPL vmlinux 0x1dd2b6d5 flush_kthread_worker +EXPORT_SYMBOL_GPL vmlinux 0x1de4db19 sdio_memcpy_fromio +EXPORT_SYMBOL_GPL vmlinux 0x1dfdc8c0 iommu_present +EXPORT_SYMBOL_GPL vmlinux 0x1e000879 hwpoison_filter_enable +EXPORT_SYMBOL_GPL vmlinux 0x1e006b94 usb_hub_find_child +EXPORT_SYMBOL_GPL vmlinux 0x1e03f5d2 ata_pci_device_suspend +EXPORT_SYMBOL_GPL vmlinux 0x1e16633d regmap_exit +EXPORT_SYMBOL_GPL vmlinux 0x1e314b21 regulator_use_dummy_regulator +EXPORT_SYMBOL_GPL vmlinux 0x1e31852c __rio_local_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x1e3a88fb trace_seq_printf +EXPORT_SYMBOL_GPL vmlinux 0x1e3a936b ata_sff_softreset +EXPORT_SYMBOL_GPL vmlinux 0x1e3cea7b get_device +EXPORT_SYMBOL_GPL vmlinux 0x1e4c2c42 usb_put_hcd +EXPORT_SYMBOL_GPL vmlinux 0x1e7bbcb3 kernel_restart +EXPORT_SYMBOL_GPL vmlinux 0x1e825902 tty_set_termios +EXPORT_SYMBOL_GPL vmlinux 0x1e8be836 wm831x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x1eb9516e round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x1ebf6c2a pci_power_names +EXPORT_SYMBOL_GPL vmlinux 0x1edb78d0 blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x1edc21cb hwpoison_filter_flags_mask +EXPORT_SYMBOL_GPL vmlinux 0x1eea9ce8 tpm_show_pcrs +EXPORT_SYMBOL_GPL vmlinux 0x1efc9943 ata_std_postreset +EXPORT_SYMBOL_GPL vmlinux 0x1f0c40f0 generic_fh_to_dentry +EXPORT_SYMBOL_GPL vmlinux 0x1f1988f7 hwpoison_filter_flags_value +EXPORT_SYMBOL_GPL vmlinux 0x1f4ff47f rio_mport_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x1f515dd5 timed_output_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x1f551cc3 relay_close +EXPORT_SYMBOL_GPL vmlinux 0x1f5ed454 fuse_abort_conn +EXPORT_SYMBOL_GPL vmlinux 0x1f8544b8 panic_timeout +EXPORT_SYMBOL_GPL vmlinux 0x1f8db7f9 ring_buffer_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0x1f8ec1b3 acpi_get_pci_rootbridge_handle +EXPORT_SYMBOL_GPL vmlinux 0x1fa5ab31 ata_host_alloc_pinfo +EXPORT_SYMBOL_GPL vmlinux 0x1fcece42 inet_twdr_twcal_tick +EXPORT_SYMBOL_GPL vmlinux 0x1fe1d88f pm_relax +EXPORT_SYMBOL_GPL vmlinux 0x1ffe6800 of_pwm_xlate_with_flags +EXPORT_SYMBOL_GPL vmlinux 0x200e7e04 inet6_sk_rebuild_header +EXPORT_SYMBOL_GPL vmlinux 0x2025564e get_current_tty +EXPORT_SYMBOL_GPL vmlinux 0x2028a174 mod_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x2048f9d0 ata_pci_bmdma_init +EXPORT_SYMBOL_GPL vmlinux 0x2074d025 handle_level_irq +EXPORT_SYMBOL_GPL vmlinux 0x20836a15 device_initialize +EXPORT_SYMBOL_GPL vmlinux 0x20901c05 platform_get_irq +EXPORT_SYMBOL_GPL vmlinux 0x209a0e44 __srcu_read_lock +EXPORT_SYMBOL_GPL vmlinux 0x209b2532 dbs_check_cpu +EXPORT_SYMBOL_GPL vmlinux 0x209ec764 xen_event_channel_op_compat +EXPORT_SYMBOL_GPL vmlinux 0x20a73f99 raw_unhash_sk +EXPORT_SYMBOL_GPL vmlinux 0x20ae5ee5 wm831x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x20b91f00 mddev_init +EXPORT_SYMBOL_GPL vmlinux 0x20bc3470 orderly_poweroff +EXPORT_SYMBOL_GPL vmlinux 0x20c3acf1 cgroup_taskset_cur_cgroup +EXPORT_SYMBOL_GPL vmlinux 0x20c9c0f6 ftrace_set_filter_ip +EXPORT_SYMBOL_GPL vmlinux 0x20ce1a82 usb_block_urb +EXPORT_SYMBOL_GPL vmlinux 0x20ee8ec2 device_del +EXPORT_SYMBOL_GPL vmlinux 0x2108f99c irq_set_chip_and_handler_name +EXPORT_SYMBOL_GPL vmlinux 0x2112a826 relay_reset +EXPORT_SYMBOL_GPL vmlinux 0x2160c796 rt_mutex_lock +EXPORT_SYMBOL_GPL vmlinux 0x2164d33c devres_remove +EXPORT_SYMBOL_GPL vmlinux 0x2168dadc tpm_show_active +EXPORT_SYMBOL_GPL vmlinux 0x226e0c4a dev_attr_em_message +EXPORT_SYMBOL_GPL vmlinux 0x226fb443 rdev_set_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x227282ba blk_queue_dma_drain +EXPORT_SYMBOL_GPL vmlinux 0x2284c24c power_supply_get_by_name +EXPORT_SYMBOL_GPL vmlinux 0x2293f5a5 ata_std_prereset +EXPORT_SYMBOL_GPL vmlinux 0x2296c00d crypto_attr_u32 +EXPORT_SYMBOL_GPL vmlinux 0x231dd471 mmput +EXPORT_SYMBOL_GPL vmlinux 0x2320042c hwmon_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0x235bbd30 tcp_twsk_unique +EXPORT_SYMBOL_GPL vmlinux 0x2378ee98 sysfs_unmerge_group +EXPORT_SYMBOL_GPL vmlinux 0x23864ce7 cpuset_mem_spread_node +EXPORT_SYMBOL_GPL vmlinux 0x238804fd vga_default_device +EXPORT_SYMBOL_GPL vmlinux 0x2393db0a attribute_container_register +EXPORT_SYMBOL_GPL vmlinux 0x23ac9e19 extcon_set_state +EXPORT_SYMBOL_GPL vmlinux 0x23d28cc3 usb_poison_urb +EXPORT_SYMBOL_GPL vmlinux 0x24011e14 vbin_printf +EXPORT_SYMBOL_GPL vmlinux 0x241475c7 eventfd_fget +EXPORT_SYMBOL_GPL vmlinux 0x2447533c ktime_get_real +EXPORT_SYMBOL_GPL vmlinux 0x247ef831 kdb_unregister +EXPORT_SYMBOL_GPL vmlinux 0x24aac4d9 crypto_aes_expand_key +EXPORT_SYMBOL_GPL vmlinux 0x24ab09ae rio_release_outb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x24c0ce5c device_set_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x24c7698a xenbus_write +EXPORT_SYMBOL_GPL vmlinux 0x24d0d5a3 cpci_hp_unregister_controller +EXPORT_SYMBOL_GPL vmlinux 0x24eb7e32 leds_list +EXPORT_SYMBOL_GPL vmlinux 0x24efe978 sec_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x24fc46b6 regulator_bulk_free +EXPORT_SYMBOL_GPL vmlinux 0x2503f360 serial8250_clear_and_reinit_fifos +EXPORT_SYMBOL_GPL vmlinux 0x2545c170 unregister_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x2565090e tpm_remove_hardware +EXPORT_SYMBOL_GPL vmlinux 0x256fb625 sdev_evt_send +EXPORT_SYMBOL_GPL vmlinux 0x2570868c fb_bl_default_curve +EXPORT_SYMBOL_GPL vmlinux 0x25754f41 subsys_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0x257e57d3 usb_match_one_id +EXPORT_SYMBOL_GPL vmlinux 0x25827ecd __class_create +EXPORT_SYMBOL_GPL vmlinux 0x25d36aff blkcg_root +EXPORT_SYMBOL_GPL vmlinux 0x25eb73b5 pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x25fd925c usb_lock_device_for_reset +EXPORT_SYMBOL_GPL vmlinux 0x26071b55 sdio_set_host_pm_flags +EXPORT_SYMBOL_GPL vmlinux 0x260f8fbd crypto_create_tfm +EXPORT_SYMBOL_GPL vmlinux 0x262cc767 extcon_get_cable_state_ +EXPORT_SYMBOL_GPL vmlinux 0x262f20a8 local_clock +EXPORT_SYMBOL_GPL vmlinux 0x26520970 vm_memory_committed +EXPORT_SYMBOL_GPL vmlinux 0x2664afb1 wm5102_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0x266fd8ea ata_eh_thaw_port +EXPORT_SYMBOL_GPL vmlinux 0x268600c7 sysfs_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x269b9225 crypto_attr_alg2 +EXPORT_SYMBOL_GPL vmlinux 0x26b71fb4 ring_buffer_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x26c90ea4 scsi_eh_get_sense +EXPORT_SYMBOL_GPL vmlinux 0x26cab878 debugfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x26ee7ccb tcp_get_info +EXPORT_SYMBOL_GPL vmlinux 0x2702905c usb_sg_wait +EXPORT_SYMBOL_GPL vmlinux 0x270a1eff pci_sriov_migration +EXPORT_SYMBOL_GPL vmlinux 0x271a41e7 __sock_recv_timestamp +EXPORT_SYMBOL_GPL vmlinux 0x2762d26e debugfs_create_u8 +EXPORT_SYMBOL_GPL vmlinux 0x277d98b5 sock_prot_inuse_add +EXPORT_SYMBOL_GPL vmlinux 0x27900709 smpboot_register_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0x279cb985 apei_exec_pre_map_gars +EXPORT_SYMBOL_GPL vmlinux 0x27c0c4be eventfd_ctx_read +EXPORT_SYMBOL_GPL vmlinux 0x27c1e63f usb_amd_find_chipset_info +EXPORT_SYMBOL_GPL vmlinux 0x27c814d1 spi_alloc_master +EXPORT_SYMBOL_GPL vmlinux 0x27f4f029 ftrace_set_global_filter +EXPORT_SYMBOL_GPL vmlinux 0x280c7026 use_mm +EXPORT_SYMBOL_GPL vmlinux 0x281fa608 dev_pm_qos_update_request +EXPORT_SYMBOL_GPL vmlinux 0x284c40e5 ata_port_pbar_desc +EXPORT_SYMBOL_GPL vmlinux 0x2869ebaf regulator_bulk_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x28a634a8 nfq_ct_nat_hook +EXPORT_SYMBOL_GPL vmlinux 0x28a903c8 timerqueue_add +EXPORT_SYMBOL_GPL vmlinux 0x28af122e dm_dispatch_request +EXPORT_SYMBOL_GPL vmlinux 0x28b2d2d8 iommu_domain_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x28d664ff __raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x291853fa iommu_map +EXPORT_SYMBOL_GPL vmlinux 0x29388c31 __pm_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0x2943ec4c uhci_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0x294b19cc ata_sff_data_xfer +EXPORT_SYMBOL_GPL vmlinux 0x295005b5 regmap_add_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x295f13cd tcp_reno_min_cwnd +EXPORT_SYMBOL_GPL vmlinux 0x299090c7 ata_sff_tf_load +EXPORT_SYMBOL_GPL vmlinux 0x29c24f67 __lock_page_killable +EXPORT_SYMBOL_GPL vmlinux 0x29f13556 aead_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x29fdc603 cpuidle_enable_device +EXPORT_SYMBOL_GPL vmlinux 0x2a0e5d8f iommu_detach_group +EXPORT_SYMBOL_GPL vmlinux 0x2a1b8818 blkcipher_walk_virt +EXPORT_SYMBOL_GPL vmlinux 0x2a392ca8 gpiochip_find +EXPORT_SYMBOL_GPL vmlinux 0x2a46398b kick_process +EXPORT_SYMBOL_GPL vmlinux 0x2a5c8e18 tpm_pm_resume +EXPORT_SYMBOL_GPL vmlinux 0x2a678a13 __suspend_report_result +EXPORT_SYMBOL_GPL vmlinux 0x2a6811fa led_trigger_show +EXPORT_SYMBOL_GPL vmlinux 0x2a789d33 fixed_phy_set_link_update +EXPORT_SYMBOL_GPL vmlinux 0x2aa617cf mce_unregister_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x2ad1ece4 zs_get_total_size_bytes +EXPORT_SYMBOL_GPL vmlinux 0x2adcdf4a ata_pci_sff_init_host +EXPORT_SYMBOL_GPL vmlinux 0x2af972c0 tty_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x2aff5bd1 srcu_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x2b4bf2a9 queue_kthread_work +EXPORT_SYMBOL_GPL vmlinux 0x2b83bc84 sk_unattached_filter_create +EXPORT_SYMBOL_GPL vmlinux 0x2ba4f6d4 btree_insert +EXPORT_SYMBOL_GPL vmlinux 0x2bc43777 xenbus_grant_ring +EXPORT_SYMBOL_GPL vmlinux 0x2bcfe205 virtqueue_add_buf +EXPORT_SYMBOL_GPL vmlinux 0x2bd72b76 btree_update +EXPORT_SYMBOL_GPL vmlinux 0x2bdb84dc blk_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x2be21c00 cgroup_path +EXPORT_SYMBOL_GPL vmlinux 0x2bf21853 wm8350_read_auxadc +EXPORT_SYMBOL_GPL vmlinux 0x2c208607 power_supply_is_system_supplied +EXPORT_SYMBOL_GPL vmlinux 0x2c3a6f09 bus_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x2c7d9c64 xen_store_interface +EXPORT_SYMBOL_GPL vmlinux 0x2c7db649 irq_dispose_mapping +EXPORT_SYMBOL_GPL vmlinux 0x2ca4ebcd regulator_set_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x2ccb4d4b md_ack_all_badblocks +EXPORT_SYMBOL_GPL vmlinux 0x2ccfb983 class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2ce98559 kcrypto_wq +EXPORT_SYMBOL_GPL vmlinux 0x2cea32ee unregister_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0x2cff969b dma_release_channel +EXPORT_SYMBOL_GPL vmlinux 0x2d065547 rio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x2d178924 hrtimer_start +EXPORT_SYMBOL_GPL vmlinux 0x2d17a0e1 cgroup_taskset_size +EXPORT_SYMBOL_GPL vmlinux 0x2d1b02d2 usermodehelper_read_lock_wait +EXPORT_SYMBOL_GPL vmlinux 0x2d1f52c7 rt_mutex_trylock +EXPORT_SYMBOL_GPL vmlinux 0x2d20eee3 pm_generic_thaw_early +EXPORT_SYMBOL_GPL vmlinux 0x2d235dee da9052_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x2d2f15ec devres_release +EXPORT_SYMBOL_GPL vmlinux 0x2d3385d3 system_wq +EXPORT_SYMBOL_GPL vmlinux 0x2d59c954 edac_handlers +EXPORT_SYMBOL_GPL vmlinux 0x2d6964e0 ata_pci_bmdma_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0x2d9db561 __rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x2d9f2ce3 sched_clock_idle_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0x2dba276a __iowrite32_copy +EXPORT_SYMBOL_GPL vmlinux 0x2dd5610e crypto_larval_lookup +EXPORT_SYMBOL_GPL vmlinux 0x2ddea4ac driver_remove_file +EXPORT_SYMBOL_GPL vmlinux 0x2df40003 xfrm_audit_policy_delete +EXPORT_SYMBOL_GPL vmlinux 0x2df75ac0 relay_subbufs_consumed +EXPORT_SYMBOL_GPL vmlinux 0x2df7dec2 driver_find_device +EXPORT_SYMBOL_GPL vmlinux 0x2e0d2f7f queue_work_on +EXPORT_SYMBOL_GPL vmlinux 0x2e1bd4f3 ata_port_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0x2e1da9fb probe_kernel_read +EXPORT_SYMBOL_GPL vmlinux 0x2e2360b1 ftrace_set_global_notrace +EXPORT_SYMBOL_GPL vmlinux 0x2e2f1740 ring_buffer_record_disable_cpu +EXPORT_SYMBOL_GPL vmlinux 0x2e39c1c9 init_dummy_netdev +EXPORT_SYMBOL_GPL vmlinux 0x2e45e488 rcu_note_context_switch +EXPORT_SYMBOL_GPL vmlinux 0x2e5384b5 crypto_lookup_aead +EXPORT_SYMBOL_GPL vmlinux 0x2e60f8be spi_busnum_to_master +EXPORT_SYMBOL_GPL vmlinux 0x2e676f8a usb_wakeup_notification +EXPORT_SYMBOL_GPL vmlinux 0x2e7c797a perf_pmu_migrate_context +EXPORT_SYMBOL_GPL vmlinux 0x2e9fa373 device_set_wakeup_capable +EXPORT_SYMBOL_GPL vmlinux 0x2ea17abd led_trigger_set +EXPORT_SYMBOL_GPL vmlinux 0x2eafbcc8 regcache_cache_bypass +EXPORT_SYMBOL_GPL vmlinux 0x2ebe3135 cpu_is_hotpluggable +EXPORT_SYMBOL_GPL vmlinux 0x2edf66c8 netdev_rx_handler_register +EXPORT_SYMBOL_GPL vmlinux 0x2f04fb43 xenbus_unmap_ring_vfree +EXPORT_SYMBOL_GPL vmlinux 0x2f184bef blk_queue_bypass_start +EXPORT_SYMBOL_GPL vmlinux 0x2f4113a2 dcookie_register +EXPORT_SYMBOL_GPL vmlinux 0x2f47d8c7 cpufreq_frequency_get_table +EXPORT_SYMBOL_GPL vmlinux 0x2f61173d part_round_stats +EXPORT_SYMBOL_GPL vmlinux 0x2f857551 machine_check_poll +EXPORT_SYMBOL_GPL vmlinux 0x2f8f7663 scsi_autopm_put_device +EXPORT_SYMBOL_GPL vmlinux 0x2fe1eea1 i2c_probe_func_quick_read +EXPORT_SYMBOL_GPL vmlinux 0x2ff10cb0 da9052_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x2fff1169 ata_std_bios_param +EXPORT_SYMBOL_GPL vmlinux 0x30068199 screen_glyph +EXPORT_SYMBOL_GPL vmlinux 0x30092d00 pci_load_and_free_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x3020d07c dev_pm_qos_add_ancestor_request +EXPORT_SYMBOL_GPL vmlinux 0x302236e5 pci_find_next_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x302402e7 inet6_csk_xmit +EXPORT_SYMBOL_GPL vmlinux 0x3029f3e7 cpu_subsys +EXPORT_SYMBOL_GPL vmlinux 0x3056a492 virtio_check_driver_offered_feature +EXPORT_SYMBOL_GPL vmlinux 0x306f273d bd_unlink_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x3073615c crypto_register_pcomp +EXPORT_SYMBOL_GPL vmlinux 0x307e1258 blocking_notifier_chain_cond_register +EXPORT_SYMBOL_GPL vmlinux 0x308b733a getboottime +EXPORT_SYMBOL_GPL vmlinux 0x30bf3226 xen_swiotlb_unmap_sg_attrs +EXPORT_SYMBOL_GPL vmlinux 0x30edca8e usb_unlocked_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x3109b751 cpu_clock +EXPORT_SYMBOL_GPL vmlinux 0x3109de90 __remove_pages +EXPORT_SYMBOL_GPL vmlinux 0x311ec550 virtqueue_enable_cb_delayed +EXPORT_SYMBOL_GPL vmlinux 0x31266931 con_debug_leave +EXPORT_SYMBOL_GPL vmlinux 0x31300af1 cgroup_load_subsys +EXPORT_SYMBOL_GPL vmlinux 0x31492298 sched_setscheduler +EXPORT_SYMBOL_GPL vmlinux 0x315b6f17 pci_disable_pcie_error_reporting +EXPORT_SYMBOL_GPL vmlinux 0x3168f46b get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0x318077a9 pm_generic_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x318920b1 register_dock_notifier +EXPORT_SYMBOL_GPL vmlinux 0x31ba5708 usb_sg_cancel +EXPORT_SYMBOL_GPL vmlinux 0x31c0c2d1 dm_put +EXPORT_SYMBOL_GPL vmlinux 0x31c7970f pciserial_suspend_ports +EXPORT_SYMBOL_GPL vmlinux 0x31ca7186 device_wakeup_enable +EXPORT_SYMBOL_GPL vmlinux 0x31cdb317 pci_pri_enabled +EXPORT_SYMBOL_GPL vmlinux 0x31ceeaa0 unregister_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x31da21fb xfrm_output +EXPORT_SYMBOL_GPL vmlinux 0x3206ed47 device_store_ulong +EXPORT_SYMBOL_GPL vmlinux 0x321bdbb1 compat_get_timeval +EXPORT_SYMBOL_GPL vmlinux 0x321dc8cc __srcu_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0x322c482b do_take_over_console +EXPORT_SYMBOL_GPL vmlinux 0x324ca524 fib_rules_lookup +EXPORT_SYMBOL_GPL vmlinux 0x3252d62e dma_buf_kmap +EXPORT_SYMBOL_GPL vmlinux 0x32537d59 tty_get_pgrp +EXPORT_SYMBOL_GPL vmlinux 0x325e677c gnttab_grant_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x329bbbde timerqueue_del +EXPORT_SYMBOL_GPL vmlinux 0x32b31a8c ktime_get_boottime +EXPORT_SYMBOL_GPL vmlinux 0x32bded08 __tracepoint_block_bio_remap +EXPORT_SYMBOL_GPL vmlinux 0x32c3cb4e class_compat_register +EXPORT_SYMBOL_GPL vmlinux 0x32fd447a monotonic_to_bootbased +EXPORT_SYMBOL_GPL vmlinux 0x330d1143 apic +EXPORT_SYMBOL_GPL vmlinux 0x336154ca rcutorture_record_test_transition +EXPORT_SYMBOL_GPL vmlinux 0x33712103 kobject_rename +EXPORT_SYMBOL_GPL vmlinux 0x33792291 usb_alloc_urb +EXPORT_SYMBOL_GPL vmlinux 0x33b3852a skb_pull_rcsum +EXPORT_SYMBOL_GPL vmlinux 0x33b96e5d apei_exec_write_register +EXPORT_SYMBOL_GPL vmlinux 0x33ee073d tps65912_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x33f7ab15 get_compat_timespec +EXPORT_SYMBOL_GPL vmlinux 0x3438434f xenbus_probe_devices +EXPORT_SYMBOL_GPL vmlinux 0x3441c3d6 gpio_set_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x344c59ee crypto_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x3465fce6 __tracepoint_block_bio_complete +EXPORT_SYMBOL_GPL vmlinux 0x347fd4b3 eventfd_ctx_get +EXPORT_SYMBOL_GPL vmlinux 0x34a9b732 shash_ahash_update +EXPORT_SYMBOL_GPL vmlinux 0x34a9cdc1 hvc_poll +EXPORT_SYMBOL_GPL vmlinux 0x34e394f4 tty_ldisc_ref_wait +EXPORT_SYMBOL_GPL vmlinux 0x352650ee gnttab_batch_map +EXPORT_SYMBOL_GPL vmlinux 0x358ff60f twl_get_hfclk_rate +EXPORT_SYMBOL_GPL vmlinux 0x35ad033a m2p_add_override +EXPORT_SYMBOL_GPL vmlinux 0x35e97689 show_class_attr_string +EXPORT_SYMBOL_GPL vmlinux 0x35ffbec5 bio_clone_mddev +EXPORT_SYMBOL_GPL vmlinux 0x361e2bcc save_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0x36230938 inet6_csk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x36309986 vfs_getxattr +EXPORT_SYMBOL_GPL vmlinux 0x3646e0af blk_insert_cloned_request +EXPORT_SYMBOL_GPL vmlinux 0x364a36cd perf_tp_event +EXPORT_SYMBOL_GPL vmlinux 0x365ffc84 ata_sff_busy_sleep +EXPORT_SYMBOL_GPL vmlinux 0x366dd26a balloon_page_enqueue +EXPORT_SYMBOL_GPL vmlinux 0x36776d72 crypto_alloc_ahash +EXPORT_SYMBOL_GPL vmlinux 0x367e954e hvc_instantiate +EXPORT_SYMBOL_GPL vmlinux 0x368f1fea static_key_slow_inc +EXPORT_SYMBOL_GPL vmlinux 0x36b5497e intel_iommu_enabled +EXPORT_SYMBOL_GPL vmlinux 0x36c14c85 free_css_id +EXPORT_SYMBOL_GPL vmlinux 0x3700154c pkey_hash_algo +EXPORT_SYMBOL_GPL vmlinux 0x37078605 async_synchronize_cookie_domain +EXPORT_SYMBOL_GPL vmlinux 0x3723e12e debugfs_create_x32 +EXPORT_SYMBOL_GPL vmlinux 0x373bbd3c single_release_net +EXPORT_SYMBOL_GPL vmlinux 0x374acc23 sata_scr_write_flush +EXPORT_SYMBOL_GPL vmlinux 0x37583ec1 pcie_bus_configure_settings +EXPORT_SYMBOL_GPL vmlinux 0x375e512b debugfs_create_u16 +EXPORT_SYMBOL_GPL vmlinux 0x376d66d4 page_cache_async_readahead +EXPORT_SYMBOL_GPL vmlinux 0x37835ef3 vfs_setxattr +EXPORT_SYMBOL_GPL vmlinux 0x37d3dd05 sysfs_schedule_callback +EXPORT_SYMBOL_GPL vmlinux 0x37f1ffbf gdt_page +EXPORT_SYMBOL_GPL vmlinux 0x38620e38 gnttab_grant_foreign_access_trans_ref +EXPORT_SYMBOL_GPL vmlinux 0x389116e7 flush_kthread_work +EXPORT_SYMBOL_GPL vmlinux 0x38d74796 extcon_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x39056d6e sysfs_create_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x390dff9d usb_remove_hcd +EXPORT_SYMBOL_GPL vmlinux 0x39161d3f sata_link_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x39367083 __page_file_index +EXPORT_SYMBOL_GPL vmlinux 0x3959e99a inet_csk_route_child_sock +EXPORT_SYMBOL_GPL vmlinux 0x395bdb6e max8997_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x39930699 pci_ioremap_bar +EXPORT_SYMBOL_GPL vmlinux 0x39a1636d pm_generic_resume +EXPORT_SYMBOL_GPL vmlinux 0x39aa0cbc mddev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x39ab1141 clone_private_mount +EXPORT_SYMBOL_GPL vmlinux 0x39cb7f93 vring_new_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x39d3960a xattr_getsecurity +EXPORT_SYMBOL_GPL vmlinux 0x39e2c72a extcon_get_extcon_dev +EXPORT_SYMBOL_GPL vmlinux 0x39f50c53 crypto_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0x3a00de89 __ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x3a26ed11 sched_clock +EXPORT_SYMBOL_GPL vmlinux 0x3a38dc65 memory_failure +EXPORT_SYMBOL_GPL vmlinux 0x3a4f6a32 ata_sff_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x3a536bd7 ring_buffer_read_finish +EXPORT_SYMBOL_GPL vmlinux 0x3a7c4149 xenbus_dev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x3a81993a irq_create_strict_mappings +EXPORT_SYMBOL_GPL vmlinux 0x3a9ccdb8 perf_event_disable +EXPORT_SYMBOL_GPL vmlinux 0x3aa24773 kobject_get_path +EXPORT_SYMBOL_GPL vmlinux 0x3aa6a375 ata_bmdma_port_start32 +EXPORT_SYMBOL_GPL vmlinux 0x3aabc2e3 replace_page_cache_page +EXPORT_SYMBOL_GPL vmlinux 0x3aba0979 pwm_get +EXPORT_SYMBOL_GPL vmlinux 0x3acdf325 twl4030_audio_enable_resource +EXPORT_SYMBOL_GPL vmlinux 0x3ad0e201 scatterwalk_copychunks +EXPORT_SYMBOL_GPL vmlinux 0x3ad5a7c6 __add_pages +EXPORT_SYMBOL_GPL vmlinux 0x3af8d0f4 usb_hcd_start_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x3b0936af inet_unhash +EXPORT_SYMBOL_GPL vmlinux 0x3b0a8511 ata_dev_set_feature +EXPORT_SYMBOL_GPL vmlinux 0x3b0acf97 crypto_aead_setauthsize +EXPORT_SYMBOL_GPL vmlinux 0x3b130f83 raw_hash_sk +EXPORT_SYMBOL_GPL vmlinux 0x3b232b1b fib_table_lookup +EXPORT_SYMBOL_GPL vmlinux 0x3b4a7b04 tpm_do_selftest +EXPORT_SYMBOL_GPL vmlinux 0x3b7145bb apei_exec_read_register_value +EXPORT_SYMBOL_GPL vmlinux 0x3b8989d8 device_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3bd79f08 __udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x3be89d3c usb_register_notify +EXPORT_SYMBOL_GPL vmlinux 0x3c205a67 swiotlb_unmap_page +EXPORT_SYMBOL_GPL vmlinux 0x3c3facaf dev_pm_qos_hide_flags +EXPORT_SYMBOL_GPL vmlinux 0x3c41b0a9 spi_sync +EXPORT_SYMBOL_GPL vmlinux 0x3c4faa9d led_trigger_set_default +EXPORT_SYMBOL_GPL vmlinux 0x3c58af7b ata_bmdma_dumb_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x3c623ce9 xenbus_map_ring_valloc +EXPORT_SYMBOL_GPL vmlinux 0x3c84837a timed_output_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x3c8bb568 dev_pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0x3c8cc630 __online_page_set_limits +EXPORT_SYMBOL_GPL vmlinux 0x3c9390db pci_vpd_find_tag +EXPORT_SYMBOL_GPL vmlinux 0x3c942368 profile_event_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3ca74c79 fat_scan +EXPORT_SYMBOL_GPL vmlinux 0x3cac21b9 regulator_sync_voltage +EXPORT_SYMBOL_GPL vmlinux 0x3cd06035 add_input_randomness +EXPORT_SYMBOL_GPL vmlinux 0x3cfedb3f register_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3d388324 dpm_resume_end +EXPORT_SYMBOL_GPL vmlinux 0x3d3c9a5a sysfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0x3d502ec1 sysfs_create_link +EXPORT_SYMBOL_GPL vmlinux 0x3d51905c pci_hp_change_slot_info +EXPORT_SYMBOL_GPL vmlinux 0x3d5f392d acpi_os_unmap_memory +EXPORT_SYMBOL_GPL vmlinux 0x3d66d1b2 attribute_container_unregister +EXPORT_SYMBOL_GPL vmlinux 0x3d6aa8ff acpi_subsys_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0x3d7ea99a gnttab_grant_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x3d9cf739 ata_ehi_clear_desc +EXPORT_SYMBOL_GPL vmlinux 0x3dab691c i2c_new_device +EXPORT_SYMBOL_GPL vmlinux 0x3daf000b serial8250_rx_chars +EXPORT_SYMBOL_GPL vmlinux 0x3db5ec60 sata_async_notification +EXPORT_SYMBOL_GPL vmlinux 0x3dc388be sk_unattached_filter_destroy +EXPORT_SYMBOL_GPL vmlinux 0x3dc916b6 crypto_fl_tab +EXPORT_SYMBOL_GPL vmlinux 0x3dce017a ata_bmdma_setup +EXPORT_SYMBOL_GPL vmlinux 0x3dde0e07 amd_get_nb_id +EXPORT_SYMBOL_GPL vmlinux 0x3de9cae1 crypto_remove_final +EXPORT_SYMBOL_GPL vmlinux 0x3e017f1a public_key_subtype +EXPORT_SYMBOL_GPL vmlinux 0x3e4348ba cpuidle_get_cpu_driver +EXPORT_SYMBOL_GPL vmlinux 0x3e561a61 balloon_page_dequeue +EXPORT_SYMBOL_GPL vmlinux 0x3e7080cb mpi_read_from_buffer +EXPORT_SYMBOL_GPL vmlinux 0x3e7f07b6 rio_release_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x3e85ad7d register_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x3ea5196d apei_osc_setup +EXPORT_SYMBOL_GPL vmlinux 0x3ec253ce synchronize_srcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x3efb35c9 get_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0x3f229c4c oops_begin +EXPORT_SYMBOL_GPL vmlinux 0x3f4e3cf3 max8997_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x3f5bf3f4 tpm_open +EXPORT_SYMBOL_GPL vmlinux 0x3f5cfbfd da903x_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x3f84d4c9 gnttab_release_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x3fbafc0a ehci_init_driver +EXPORT_SYMBOL_GPL vmlinux 0x3fc13704 ata_scsi_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0x3fc72d3d __tracepoint_kfree_skb +EXPORT_SYMBOL_GPL vmlinux 0x3fc8144c rtc_read_alarm +EXPORT_SYMBOL_GPL vmlinux 0x3fe92d0a mce_register_decode_chain +EXPORT_SYMBOL_GPL vmlinux 0x4004e2e8 crypto_alg_mod_lookup +EXPORT_SYMBOL_GPL vmlinux 0x402b5b73 input_ff_erase +EXPORT_SYMBOL_GPL vmlinux 0x4035c9e3 xenbus_watch_pathfmt +EXPORT_SYMBOL_GPL vmlinux 0x403b21f3 regulator_list_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0x403b9b02 nf_register_afinfo +EXPORT_SYMBOL_GPL vmlinux 0x403f9529 gpio_request_one +EXPORT_SYMBOL_GPL vmlinux 0x4081f250 rio_request_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x40af0dec ata_xfer_mode2mask +EXPORT_SYMBOL_GPL vmlinux 0x40bdd1b8 crypto_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x40c64780 fsstack_copy_attr_all +EXPORT_SYMBOL_GPL vmlinux 0x40d403ce device_move +EXPORT_SYMBOL_GPL vmlinux 0x40d40c17 sysfs_merge_group +EXPORT_SYMBOL_GPL vmlinux 0x40d46b21 crypto_ft_tab +EXPORT_SYMBOL_GPL vmlinux 0x4102e2dd devm_regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x412938f2 acpi_dev_resource_address_space +EXPORT_SYMBOL_GPL vmlinux 0x4147c3eb md_do_sync +EXPORT_SYMBOL_GPL vmlinux 0x414ff42a ata_acpi_stm +EXPORT_SYMBOL_GPL vmlinux 0x41814cb8 dirty_writeback_interval +EXPORT_SYMBOL_GPL vmlinux 0x41d2db8e blk_rq_prep_clone +EXPORT_SYMBOL_GPL vmlinux 0x41e1064f acpi_get_gpio +EXPORT_SYMBOL_GPL vmlinux 0x42160169 flush_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x421f4bf9 rtnl_link_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4228a549 get_task_pid +EXPORT_SYMBOL_GPL vmlinux 0x424acc6d scatterwalk_done +EXPORT_SYMBOL_GPL vmlinux 0x42586612 pci_cleanup_aer_uncorrect_error_status +EXPORT_SYMBOL_GPL vmlinux 0x427ec17e cpufreq_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x42825ce2 rcu_scheduler_active +EXPORT_SYMBOL_GPL vmlinux 0x4297b25f firmware_kobj +EXPORT_SYMBOL_GPL vmlinux 0x42c0046d ata_pci_sff_init_one +EXPORT_SYMBOL_GPL vmlinux 0x42cd29b5 debugfs_create_size_t +EXPORT_SYMBOL_GPL vmlinux 0x42f36621 wm5110_aod +EXPORT_SYMBOL_GPL vmlinux 0x430f05d1 inet6_destroy_sock +EXPORT_SYMBOL_GPL vmlinux 0x432fd7f6 __gpio_set_value +EXPORT_SYMBOL_GPL vmlinux 0x4342002b cpuidle_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x4343cb98 dev_pm_qos_expose_flags +EXPORT_SYMBOL_GPL vmlinux 0x434b6f00 led_classdev_register +EXPORT_SYMBOL_GPL vmlinux 0x43726389 __init_kthread_worker +EXPORT_SYMBOL_GPL vmlinux 0x438a84a4 dma_buf_fd +EXPORT_SYMBOL_GPL vmlinux 0x4396b273 irq_domain_add_legacy +EXPORT_SYMBOL_GPL vmlinux 0x43a53735 __alloc_workqueue_key +EXPORT_SYMBOL_GPL vmlinux 0x43aab9e2 usb_enable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x43aadc12 dma_buf_detach +EXPORT_SYMBOL_GPL vmlinux 0x43d0650e __ata_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x43f56e82 ata_xfer_mode2shift +EXPORT_SYMBOL_GPL vmlinux 0x4419556c regmap_update_bits +EXPORT_SYMBOL_GPL vmlinux 0x44404f11 kdb_register_repeat +EXPORT_SYMBOL_GPL vmlinux 0x4455e1b3 regulator_disable_deferred +EXPORT_SYMBOL_GPL vmlinux 0x447901bf simple_attr_open +EXPORT_SYMBOL_GPL vmlinux 0x447bd83b subsys_find_device_by_id +EXPORT_SYMBOL_GPL vmlinux 0x4482bf41 ip6_append_data +EXPORT_SYMBOL_GPL vmlinux 0x4484a5a4 wait_for_device_probe +EXPORT_SYMBOL_GPL vmlinux 0x44adabf1 blk_trace_startstop +EXPORT_SYMBOL_GPL vmlinux 0x44bdc467 swiotlb_map_page +EXPORT_SYMBOL_GPL vmlinux 0x44e34218 cpufreq_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0x450a3e5d swiotlb_tbl_unmap_single +EXPORT_SYMBOL_GPL vmlinux 0x450fb522 kmsg_dump_get_buffer +EXPORT_SYMBOL_GPL vmlinux 0x452862df __rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4541fe0d mtrr_state +EXPORT_SYMBOL_GPL vmlinux 0x454734cd device_wakeup_disable +EXPORT_SYMBOL_GPL vmlinux 0x457594fa crypto_alg_list +EXPORT_SYMBOL_GPL vmlinux 0x45840ac1 yield_to +EXPORT_SYMBOL_GPL vmlinux 0x4588c23b setup_irq +EXPORT_SYMBOL_GPL vmlinux 0x45b38b63 ata_bmdma_status +EXPORT_SYMBOL_GPL vmlinux 0x45bf1ff3 crypto_inc +EXPORT_SYMBOL_GPL vmlinux 0x45c513cb irq_remove_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x45d14bdf hypercall_page +EXPORT_SYMBOL_GPL vmlinux 0x45e33f03 pci_restore_ats_state +EXPORT_SYMBOL_GPL vmlinux 0x460333ff debugfs_create_x8 +EXPORT_SYMBOL_GPL vmlinux 0x46074c17 sdev_evt_alloc +EXPORT_SYMBOL_GPL vmlinux 0x460f31aa rodata_test_data +EXPORT_SYMBOL_GPL vmlinux 0x460f7531 wait_rcu_gp +EXPORT_SYMBOL_GPL vmlinux 0x4647255c get_cpu_device +EXPORT_SYMBOL_GPL vmlinux 0x46520af0 __rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0x4672e88b __crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0x468faafb usb_hcd_pci_probe +EXPORT_SYMBOL_GPL vmlinux 0x46d9cd0c vring_transport_features +EXPORT_SYMBOL_GPL vmlinux 0x47229b5c gpio_request +EXPORT_SYMBOL_GPL vmlinux 0x4736516e usb_hcd_poll_rh_status +EXPORT_SYMBOL_GPL vmlinux 0x47395670 tpm_release +EXPORT_SYMBOL_GPL vmlinux 0x474f4639 vfs_lock_file +EXPORT_SYMBOL_GPL vmlinux 0x4753db77 do_unbind_con_driver +EXPORT_SYMBOL_GPL vmlinux 0x475decd8 rio_release_outb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x47695022 __pci_hp_register +EXPORT_SYMBOL_GPL vmlinux 0x47971679 adp5520_write +EXPORT_SYMBOL_GPL vmlinux 0x47b8ad97 vfs_test_lock +EXPORT_SYMBOL_GPL vmlinux 0x47c3716f xen_swiotlb_dma_supported +EXPORT_SYMBOL_GPL vmlinux 0x47d13565 stmpe_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x47ebd62e br_fdb_test_addr_hook +EXPORT_SYMBOL_GPL vmlinux 0x47ed1f64 raw_seq_start +EXPORT_SYMBOL_GPL vmlinux 0x47ef1ded register_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0x47ff399f regulator_is_supported_voltage +EXPORT_SYMBOL_GPL vmlinux 0x48013c91 acpi_dev_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x485af754 acpi_dev_get_resources +EXPORT_SYMBOL_GPL vmlinux 0x48646352 pci_get_hp_params +EXPORT_SYMBOL_GPL vmlinux 0x48682db9 perf_guest_get_msrs +EXPORT_SYMBOL_GPL vmlinux 0x486e69c1 balloon_mapping_alloc +EXPORT_SYMBOL_GPL vmlinux 0x48812e4c sdio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x48a488a0 sysctl_tcp_cookie_size +EXPORT_SYMBOL_GPL vmlinux 0x48a90ec9 device_store_bool +EXPORT_SYMBOL_GPL vmlinux 0x48ab5da7 pkey_algo +EXPORT_SYMBOL_GPL vmlinux 0x497555b8 scsi_get_vpd_page +EXPORT_SYMBOL_GPL vmlinux 0x498d293a trace_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0x499043d3 crypto_init_queue +EXPORT_SYMBOL_GPL vmlinux 0x49d5697b sock_diag_put_meminfo +EXPORT_SYMBOL_GPL vmlinux 0x49f33d6c pci_bus_max_busnr +EXPORT_SYMBOL_GPL vmlinux 0x4a66bd0a page_mkclean +EXPORT_SYMBOL_GPL vmlinux 0x4a90160e bprintf +EXPORT_SYMBOL_GPL vmlinux 0x4aadeb9a ring_buffer_alloc_read_page +EXPORT_SYMBOL_GPL vmlinux 0x4afcddf0 sec_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x4affd08b put_compat_timespec +EXPORT_SYMBOL_GPL vmlinux 0x4b01452e usb_autopm_put_interface_async +EXPORT_SYMBOL_GPL vmlinux 0x4b055251 mmc_app_cmd +EXPORT_SYMBOL_GPL vmlinux 0x4b076147 uncache_firmware +EXPORT_SYMBOL_GPL vmlinux 0x4b278751 skcipher_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0x4b2f8c7a input_class +EXPORT_SYMBOL_GPL vmlinux 0x4b5a7794 device_init_wakeup +EXPORT_SYMBOL_GPL vmlinux 0x4b93df89 async_schedule_domain +EXPORT_SYMBOL_GPL vmlinux 0x4bc62a81 audit_enabled +EXPORT_SYMBOL_GPL vmlinux 0x4bf0d6d1 wakeup_source_prepare +EXPORT_SYMBOL_GPL vmlinux 0x4c0e1f19 crypto_nivaead_type +EXPORT_SYMBOL_GPL vmlinux 0x4c299072 dma_buf_vmap +EXPORT_SYMBOL_GPL vmlinux 0x4c4a82bc sata_set_spd +EXPORT_SYMBOL_GPL vmlinux 0x4c5a315a pm_schedule_suspend +EXPORT_SYMBOL_GPL vmlinux 0x4c5c829c crypto_shash_setkey +EXPORT_SYMBOL_GPL vmlinux 0x4c67294b ata_acpi_cbl_80wire +EXPORT_SYMBOL_GPL vmlinux 0x4c759827 byte_rev_table +EXPORT_SYMBOL_GPL vmlinux 0x4cf5aa4d xenbus_dev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x4d372941 ata_pci_device_do_resume +EXPORT_SYMBOL_GPL vmlinux 0x4d37b964 dev_get_regmap +EXPORT_SYMBOL_GPL vmlinux 0x4d3edc07 css_id +EXPORT_SYMBOL_GPL vmlinux 0x4d429cc0 xen_swiotlb_dma_mapping_error +EXPORT_SYMBOL_GPL vmlinux 0x4d5bc9df led_trigger_register_simple +EXPORT_SYMBOL_GPL vmlinux 0x4d5c37a0 key_type_encrypted +EXPORT_SYMBOL_GPL vmlinux 0x4d77922c regulator_set_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x4d7bf9f8 dma_buf_attach +EXPORT_SYMBOL_GPL vmlinux 0x4d965f27 inet_csk_get_port +EXPORT_SYMBOL_GPL vmlinux 0x4e109192 ring_buffer_entries +EXPORT_SYMBOL_GPL vmlinux 0x4e242f5f pstore_cannot_block_path +EXPORT_SYMBOL_GPL vmlinux 0x4e3151a8 arizona_free_irq +EXPORT_SYMBOL_GPL vmlinux 0x4e57723d apei_read +EXPORT_SYMBOL_GPL vmlinux 0x4e5b0849 cpufreq_get_measured_perf +EXPORT_SYMBOL_GPL vmlinux 0x4e5d2a44 platform_driver_probe +EXPORT_SYMBOL_GPL vmlinux 0x4e74e625 gnttab_batch_copy +EXPORT_SYMBOL_GPL vmlinux 0x4e93ea7e x86_hyper_kvm +EXPORT_SYMBOL_GPL vmlinux 0x4ec3ea5d sdio_readb +EXPORT_SYMBOL_GPL vmlinux 0x4ec7b8e3 tracepoint_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0x4ed5fe20 iommu_set_fault_handler +EXPORT_SYMBOL_GPL vmlinux 0x4ed6927a anon_transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x4ef5bcf4 perf_swevent_get_recursion_context +EXPORT_SYMBOL_GPL vmlinux 0x4f13214d da903x_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4f1ccf7d dev_pm_qos_add_global_notifier +EXPORT_SYMBOL_GPL vmlinux 0x4f3d4fc8 tps6586x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0x4f4f4fe4 sdio_writew +EXPORT_SYMBOL_GPL vmlinux 0x4f6d4fcd __sock_recv_wifi_status +EXPORT_SYMBOL_GPL vmlinux 0x4f764d44 device_add +EXPORT_SYMBOL_GPL vmlinux 0x4f7def0c usb_enable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x4f961fd4 securityfs_create_dir +EXPORT_SYMBOL_GPL vmlinux 0x4fc42975 skb_segment +EXPORT_SYMBOL_GPL vmlinux 0x4fcf71d0 ehci_resume +EXPORT_SYMBOL_GPL vmlinux 0x4fd4e89d ring_buffer_empty_cpu +EXPORT_SYMBOL_GPL vmlinux 0x4fdc945d sata_deb_timing_normal +EXPORT_SYMBOL_GPL vmlinux 0x50040d12 ata_sff_lost_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x50237210 pci_set_pcie_reset_state +EXPORT_SYMBOL_GPL vmlinux 0x5026585c xen_irq_from_gsi +EXPORT_SYMBOL_GPL vmlinux 0x50315689 crypto_register_ahash +EXPORT_SYMBOL_GPL vmlinux 0x503aad96 xenbus_dev_changed +EXPORT_SYMBOL_GPL vmlinux 0x5047ef52 ata_sas_port_alloc +EXPORT_SYMBOL_GPL vmlinux 0x505897ac device_release_driver +EXPORT_SYMBOL_GPL vmlinux 0x506691f1 sock_diag_check_cookie +EXPORT_SYMBOL_GPL vmlinux 0x507de8c6 add_memory +EXPORT_SYMBOL_GPL vmlinux 0x5082a78b crypto_grab_skcipher +EXPORT_SYMBOL_GPL vmlinux 0x5086ac3a alg_test +EXPORT_SYMBOL_GPL vmlinux 0x5091b823 ring_buffer_read_start +EXPORT_SYMBOL_GPL vmlinux 0x50ae6ef0 hrtimer_try_to_cancel +EXPORT_SYMBOL_GPL vmlinux 0x50c71415 inet_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x50d1f870 pgprot_writecombine +EXPORT_SYMBOL_GPL vmlinux 0x50e7193a __i2c_first_dynamic_bus_num +EXPORT_SYMBOL_GPL vmlinux 0x50fad434 round_jiffies_up +EXPORT_SYMBOL_GPL vmlinux 0x50fdf5ea set_cpus_allowed_ptr +EXPORT_SYMBOL_GPL vmlinux 0x512df85e serial8250_rx_dma +EXPORT_SYMBOL_GPL vmlinux 0x5132c610 spi_bus_unlock +EXPORT_SYMBOL_GPL vmlinux 0x5187ac4b xen_store_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x51883fcc cpci_hp_register_controller +EXPORT_SYMBOL_GPL vmlinux 0x518c2fc6 hpet_rtc_dropped_irq +EXPORT_SYMBOL_GPL vmlinux 0x51b230a0 rio_unmap_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x51e730c6 tpm_register_hardware +EXPORT_SYMBOL_GPL vmlinux 0x51f15489 platform_device_alloc +EXPORT_SYMBOL_GPL vmlinux 0x520c88a3 pm_generic_freeze_late +EXPORT_SYMBOL_GPL vmlinux 0x520dad27 usb_hcd_unmap_urb_setup_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x5210a5bf hsi_board_list +EXPORT_SYMBOL_GPL vmlinux 0x522f538b tpm_send +EXPORT_SYMBOL_GPL vmlinux 0x523bd4f9 platform_get_irq_byname +EXPORT_SYMBOL_GPL vmlinux 0x523d9c11 rt_mutex_timed_lock +EXPORT_SYMBOL_GPL vmlinux 0x524cc070 bus_find_device +EXPORT_SYMBOL_GPL vmlinux 0x525b317a rio_mport_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x525b89d5 wakeup_source_add +EXPORT_SYMBOL_GPL vmlinux 0x5274f4a1 regcache_mark_dirty +EXPORT_SYMBOL_GPL vmlinux 0x52871594 usb_get_from_anchor +EXPORT_SYMBOL_GPL vmlinux 0x52ce878b hvc_remove +EXPORT_SYMBOL_GPL vmlinux 0x52df67eb ata_sff_prereset +EXPORT_SYMBOL_GPL vmlinux 0x53036e62 cgroup_taskset_next +EXPORT_SYMBOL_GPL vmlinux 0x5308f995 blkdev_aio_write +EXPORT_SYMBOL_GPL vmlinux 0x53395e09 iommu_unmap +EXPORT_SYMBOL_GPL vmlinux 0x5346bb03 handle_simple_irq +EXPORT_SYMBOL_GPL vmlinux 0x5358fc36 ring_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0x53614269 get_cpu_idle_time_us +EXPORT_SYMBOL_GPL vmlinux 0x5372dede unregister_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x53986488 register_die_notifier +EXPORT_SYMBOL_GPL vmlinux 0x539cecc0 sysfs_rename_link +EXPORT_SYMBOL_GPL vmlinux 0x539f157b pci_xen_swiotlb_init_late +EXPORT_SYMBOL_GPL vmlinux 0x53a3e486 regulator_get_current_limit +EXPORT_SYMBOL_GPL vmlinux 0x53a922aa fat_search_long +EXPORT_SYMBOL_GPL vmlinux 0x53bd3e7c tps65912_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x53e2a83e srcu_batches_completed +EXPORT_SYMBOL_GPL vmlinux 0x53f7c368 acpi_device_power_state +EXPORT_SYMBOL_GPL vmlinux 0x540a5174 platform_add_devices +EXPORT_SYMBOL_GPL vmlinux 0x541bd60a irq_work_run +EXPORT_SYMBOL_GPL vmlinux 0x54215db5 visitor64 +EXPORT_SYMBOL_GPL vmlinux 0x5424cd08 i2c_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x5432174f sdio_align_size +EXPORT_SYMBOL_GPL vmlinux 0x5443b5d8 regmap_raw_write +EXPORT_SYMBOL_GPL vmlinux 0x5447a138 xenbus_dev_fatal +EXPORT_SYMBOL_GPL vmlinux 0x544a58fa fuse_sync_release +EXPORT_SYMBOL_GPL vmlinux 0x5460c8d8 fsnotify_get_cookie +EXPORT_SYMBOL_GPL vmlinux 0x54667196 extcon_dev_unregister +EXPORT_SYMBOL_GPL vmlinux 0x549525ef handle_nested_irq +EXPORT_SYMBOL_GPL vmlinux 0x54d78426 usb_acpi_set_power_state +EXPORT_SYMBOL_GPL vmlinux 0x54ddd6b6 tps6586x_writes +EXPORT_SYMBOL_GPL vmlinux 0x554e4ee4 sk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0x55526907 xen_features +EXPORT_SYMBOL_GPL vmlinux 0x55784228 regmap_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x558a84d3 usb_store_new_id +EXPORT_SYMBOL_GPL vmlinux 0x559d55bd rt_mutex_lock_interruptible +EXPORT_SYMBOL_GPL vmlinux 0x55daae22 dev_pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0x55f1e000 usb_debug_root +EXPORT_SYMBOL_GPL vmlinux 0x561c897a xenbus_switch_state +EXPORT_SYMBOL_GPL vmlinux 0x5622c71b regmap_init +EXPORT_SYMBOL_GPL vmlinux 0x56248cea blk_abort_request +EXPORT_SYMBOL_GPL vmlinux 0x562f0db4 devm_kzalloc +EXPORT_SYMBOL_GPL vmlinux 0x56310925 regulator_mode_to_status +EXPORT_SYMBOL_GPL vmlinux 0x56398615 mark_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5641485b tty_termios_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x564f1dca klist_add_after +EXPORT_SYMBOL_GPL vmlinux 0x5654f836 erst_get_record_id_next +EXPORT_SYMBOL_GPL vmlinux 0x565b6892 uuid_le_gen +EXPORT_SYMBOL_GPL vmlinux 0x566567c2 fuse_get_req +EXPORT_SYMBOL_GPL vmlinux 0x567246c2 page_cache_sync_readahead +EXPORT_SYMBOL_GPL vmlinux 0x56886b19 scatterwalk_map +EXPORT_SYMBOL_GPL vmlinux 0x56947347 dmi_walk +EXPORT_SYMBOL_GPL vmlinux 0x56a6d579 shmem_truncate_range +EXPORT_SYMBOL_GPL vmlinux 0x56a71190 tc3589x_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x56d697ce cpu_up +EXPORT_SYMBOL_GPL vmlinux 0x56e75d47 klist_node_attached +EXPORT_SYMBOL_GPL vmlinux 0x56e7d899 unix_table_lock +EXPORT_SYMBOL_GPL vmlinux 0x56fe6f22 ata_do_dev_read_id +EXPORT_SYMBOL_GPL vmlinux 0x56ff3b40 platform_driver_register +EXPORT_SYMBOL_GPL vmlinux 0x571fdb05 md_stop +EXPORT_SYMBOL_GPL vmlinux 0x57231f45 ring_buffer_record_on +EXPORT_SYMBOL_GPL vmlinux 0x574eb26c usb_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x575c5f94 execute_in_process_context +EXPORT_SYMBOL_GPL vmlinux 0x5779d445 xenbus_exists +EXPORT_SYMBOL_GPL vmlinux 0x57824945 rtc_irq_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5784f0f8 xfrm_audit_state_replay +EXPORT_SYMBOL_GPL vmlinux 0x57863084 regulator_get_voltage_sel_regmap +EXPORT_SYMBOL_GPL vmlinux 0x579e0bf5 rtnl_unregister_all +EXPORT_SYMBOL_GPL vmlinux 0x57aa3f7e blk_execute_rq_nowait +EXPORT_SYMBOL_GPL vmlinux 0x57d03165 led_trigger_register +EXPORT_SYMBOL_GPL vmlinux 0x5802209c __blkg_release +EXPORT_SYMBOL_GPL vmlinux 0x5812abd3 bitmap_load +EXPORT_SYMBOL_GPL vmlinux 0x581e2be1 alloc_page_buffers +EXPORT_SYMBOL_GPL vmlinux 0x5830626d spi_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x583f1c1d fuse_put_request +EXPORT_SYMBOL_GPL vmlinux 0x58413099 ipv6_fixup_options +EXPORT_SYMBOL_GPL vmlinux 0x58544a3b dma_buf_end_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0x588d959a bmp085_probe +EXPORT_SYMBOL_GPL vmlinux 0x58943b0f xenbus_dev_cancel +EXPORT_SYMBOL_GPL vmlinux 0x58d47a61 __pneigh_lookup +EXPORT_SYMBOL_GPL vmlinux 0x58ea3f80 extcon_dev_register +EXPORT_SYMBOL_GPL vmlinux 0x58eb9fc8 ipv6_opt_accepted +EXPORT_SYMBOL_GPL vmlinux 0x58f9e58c perf_event_read_value +EXPORT_SYMBOL_GPL vmlinux 0x58fe9409 rio_inb_pwrite_handler +EXPORT_SYMBOL_GPL vmlinux 0x591d8de3 watchdog_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x5947abbe max77693_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0x5960f82b bus_for_each_drv +EXPORT_SYMBOL_GPL vmlinux 0x59779ad0 pci_msi_off +EXPORT_SYMBOL_GPL vmlinux 0x59907f7a pci_store_saved_state +EXPORT_SYMBOL_GPL vmlinux 0x599b7162 crypto_init_ahash_spawn +EXPORT_SYMBOL_GPL vmlinux 0x59a0dd30 locks_alloc_lock +EXPORT_SYMBOL_GPL vmlinux 0x59b2adbf input_ff_effect_from_user +EXPORT_SYMBOL_GPL vmlinux 0x59be39c7 da903x_update +EXPORT_SYMBOL_GPL vmlinux 0x59c7b1ba disk_map_sector_rcu +EXPORT_SYMBOL_GPL vmlinux 0x59e2743e call_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0x59eae699 ring_buffer_read_prepare +EXPORT_SYMBOL_GPL vmlinux 0x59f61c5a usb_find_interface +EXPORT_SYMBOL_GPL vmlinux 0x59fe36cd clockevents_register_device +EXPORT_SYMBOL_GPL vmlinux 0x59ff6d80 spi_write_then_read +EXPORT_SYMBOL_GPL vmlinux 0x5a0dee33 regulator_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5a2702d7 inet_twsk_put +EXPORT_SYMBOL_GPL vmlinux 0x5a2b1b67 gnttab_free_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5a3debce ip_local_out +EXPORT_SYMBOL_GPL vmlinux 0x5a406093 arizona_clk32k_disable +EXPORT_SYMBOL_GPL vmlinux 0x5a441ebd efi_query_variable_store +EXPORT_SYMBOL_GPL vmlinux 0x5a48534a regulator_count_voltages +EXPORT_SYMBOL_GPL vmlinux 0x5a48fba2 disable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x5a6694ad devres_for_each_res +EXPORT_SYMBOL_GPL vmlinux 0x5a68c56f max8997_update_reg +EXPORT_SYMBOL_GPL vmlinux 0x5a752bc7 pci_max_pasids +EXPORT_SYMBOL_GPL vmlinux 0x5a7bfe41 crypto_probing_notify +EXPORT_SYMBOL_GPL vmlinux 0x5a8dba8f skb_to_sgvec +EXPORT_SYMBOL_GPL vmlinux 0x5ab743b4 rio_mport_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0x5ac2727f smp_call_function_any +EXPORT_SYMBOL_GPL vmlinux 0x5ae48fa6 pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x5af03a28 gnttab_claim_grant_reference +EXPORT_SYMBOL_GPL vmlinux 0x5af3601e blkio_subsys +EXPORT_SYMBOL_GPL vmlinux 0x5af632f8 ata_sg_init +EXPORT_SYMBOL_GPL vmlinux 0x5afa3acc acpi_pci_find_root +EXPORT_SYMBOL_GPL vmlinux 0x5b256235 dm_suspended +EXPORT_SYMBOL_GPL vmlinux 0x5b32ac04 ata_slave_link_init +EXPORT_SYMBOL_GPL vmlinux 0x5b407916 fat_time_unix2fat +EXPORT_SYMBOL_GPL vmlinux 0x5b435139 unregister_jprobes +EXPORT_SYMBOL_GPL vmlinux 0x5bfc03c3 unregister_keyboard_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5c1830af ehci_cf_port_reset_rwsem +EXPORT_SYMBOL_GPL vmlinux 0x5c394073 pci_hp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0x5c6de4a1 crypto_ablkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x5c6e8679 tty_port_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x5c7556cb ipv6_dup_options +EXPORT_SYMBOL_GPL vmlinux 0x5c7f695e ata_do_set_mode +EXPORT_SYMBOL_GPL vmlinux 0x5c8a5ae0 ehci_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5c9cefd2 dev_pm_qos_expose_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0x5c9f7ae7 power_supply_changed +EXPORT_SYMBOL_GPL vmlinux 0x5ca608f7 __mmdrop +EXPORT_SYMBOL_GPL vmlinux 0x5ca93699 tracepoint_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x5cb5a7f3 ip6_datagram_recv_ctl +EXPORT_SYMBOL_GPL vmlinux 0x5ce27f46 __pci_reset_function_locked +EXPORT_SYMBOL_GPL vmlinux 0x5cf8a882 __tracepoint_block_rq_remap +EXPORT_SYMBOL_GPL vmlinux 0x5d127e6d usb_autopm_get_interface_no_resume +EXPORT_SYMBOL_GPL vmlinux 0x5d12e48f input_event_to_user +EXPORT_SYMBOL_GPL vmlinux 0x5d366dec gnttab_cancel_free_callback +EXPORT_SYMBOL_GPL vmlinux 0x5d48a650 m2p_find_override_pfn +EXPORT_SYMBOL_GPL vmlinux 0x5d730e7b raw_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x5d77952d hwrng_register +EXPORT_SYMBOL_GPL vmlinux 0x5d87c067 register_acpi_bus_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5d9177b5 fuse_dev_release +EXPORT_SYMBOL_GPL vmlinux 0x5daafe6c usb_hcd_pci_pm_ops +EXPORT_SYMBOL_GPL vmlinux 0x5dbf1de7 acpi_bus_trim +EXPORT_SYMBOL_GPL vmlinux 0x5dd18380 regulator_get_init_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x5dd1956d spi_master_resume +EXPORT_SYMBOL_GPL vmlinux 0x5dd67618 register_netevent_notifier +EXPORT_SYMBOL_GPL vmlinux 0x5dfca509 virtqueue_get_buf +EXPORT_SYMBOL_GPL vmlinux 0x5dffd830 seq_release_net +EXPORT_SYMBOL_GPL vmlinux 0x5e39557a irq_setup_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0x5e4c2935 do_trace_rcu_torture_read +EXPORT_SYMBOL_GPL vmlinux 0x5e51cd74 swiotlb_nr_tbl +EXPORT_SYMBOL_GPL vmlinux 0x5e5eb2dd tty_register_device_attr +EXPORT_SYMBOL_GPL vmlinux 0x5ed02405 pm_generic_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x5efd64b1 usb_get_urb +EXPORT_SYMBOL_GPL vmlinux 0x5f025029 virtqueue_detach_unused_buf +EXPORT_SYMBOL_GPL vmlinux 0x5f13e24e ip6_flush_pending_frames +EXPORT_SYMBOL_GPL vmlinux 0x5f15b812 __dma_request_channel +EXPORT_SYMBOL_GPL vmlinux 0x5f248f72 set_timer_slack +EXPORT_SYMBOL_GPL vmlinux 0x5f28794b pci_check_and_mask_intx +EXPORT_SYMBOL_GPL vmlinux 0x5f2da8c4 check_tsc_unstable +EXPORT_SYMBOL_GPL vmlinux 0x5f49d56b queue_delayed_work_on +EXPORT_SYMBOL_GPL vmlinux 0x5f79a98b __tracepoint_napi_poll +EXPORT_SYMBOL_GPL vmlinux 0x5f8cb6de ata_sas_port_async_suspend +EXPORT_SYMBOL_GPL vmlinux 0x5f92c6c8 usb_hcd_end_port_resume +EXPORT_SYMBOL_GPL vmlinux 0x5fa67f92 dm_send_uevents +EXPORT_SYMBOL_GPL vmlinux 0x5fc27be9 acpi_dev_irq_flags +EXPORT_SYMBOL_GPL vmlinux 0x5fdb736d usb_enable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x5fdfa2c1 amd_pmu_enable_virt +EXPORT_SYMBOL_GPL vmlinux 0x5fe05f8e regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0x5ff5b691 regcache_sync_region +EXPORT_SYMBOL_GPL vmlinux 0x6005a413 ahash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0x6005f3fb ip6_dst_lookup +EXPORT_SYMBOL_GPL vmlinux 0x6034e952 crypto_init_spawn +EXPORT_SYMBOL_GPL vmlinux 0x60506751 unmap_kernel_range_noflush +EXPORT_SYMBOL_GPL vmlinux 0x6061abf0 usb_enable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x606f998b ata_sff_queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x6084306d dm_underlying_device_busy +EXPORT_SYMBOL_GPL vmlinux 0x60a13e90 rcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0x60c95350 wakeup_source_create +EXPORT_SYMBOL_GPL vmlinux 0x60cd73ed pv_apic_ops +EXPORT_SYMBOL_GPL vmlinux 0x60ce3331 register_pernet_subsys +EXPORT_SYMBOL_GPL vmlinux 0x60dbc952 inet_hash +EXPORT_SYMBOL_GPL vmlinux 0x60dddc5f __ip_route_output_key +EXPORT_SYMBOL_GPL vmlinux 0x60eeb990 cpuidle_get_driver +EXPORT_SYMBOL_GPL vmlinux 0x61091f38 key_type_trusted +EXPORT_SYMBOL_GPL vmlinux 0x6114d8a4 regulator_force_disable +EXPORT_SYMBOL_GPL vmlinux 0x61360f90 rtc_device_register +EXPORT_SYMBOL_GPL vmlinux 0x614ae37d bus_rescan_devices +EXPORT_SYMBOL_GPL vmlinux 0x61507b13 pci_pri_status +EXPORT_SYMBOL_GPL vmlinux 0x615cb574 dma_run_dependencies +EXPORT_SYMBOL_GPL vmlinux 0x61634f05 lock_flocks +EXPORT_SYMBOL_GPL vmlinux 0x616580a0 led_trigger_rename_static +EXPORT_SYMBOL_GPL vmlinux 0x6183ff15 sprint_OID +EXPORT_SYMBOL_GPL vmlinux 0x6194ffea do_machine_check +EXPORT_SYMBOL_GPL vmlinux 0x61a4c250 usb_get_hcd +EXPORT_SYMBOL_GPL vmlinux 0x61a96224 pci_renumber_slot +EXPORT_SYMBOL_GPL vmlinux 0x61b25a81 usb_set_device_state +EXPORT_SYMBOL_GPL vmlinux 0x61c57eaa ip6_datagram_connect +EXPORT_SYMBOL_GPL vmlinux 0x61f0fc45 apply_to_page_range +EXPORT_SYMBOL_GPL vmlinux 0x61f85377 con_debug_enter +EXPORT_SYMBOL_GPL vmlinux 0x620bd33f power_supply_powers +EXPORT_SYMBOL_GPL vmlinux 0x62293739 skb_copy_ubufs +EXPORT_SYMBOL_GPL vmlinux 0x623803c8 hest_disable +EXPORT_SYMBOL_GPL vmlinux 0x6286d9da gen_pool_size +EXPORT_SYMBOL_GPL vmlinux 0x62aae141 ablkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0x62b8e75a rio_request_inb_dbell +EXPORT_SYMBOL_GPL vmlinux 0x62c96cd9 get_pid_task +EXPORT_SYMBOL_GPL vmlinux 0x62df2c11 usb_unpoison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x62ea845d fat_add_entries +EXPORT_SYMBOL_GPL vmlinux 0x62faf474 d_materialise_unique +EXPORT_SYMBOL_GPL vmlinux 0x63116830 usb_init_urb +EXPORT_SYMBOL_GPL vmlinux 0x6314c805 tc3589x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x63205de1 ata_scsi_unlock_native_capacity +EXPORT_SYMBOL_GPL vmlinux 0x635ec980 apei_exec_post_unmap_gars +EXPORT_SYMBOL_GPL vmlinux 0x639795a6 exportfs_decode_fh +EXPORT_SYMBOL_GPL vmlinux 0x63be5bea pm_runtime_forbid +EXPORT_SYMBOL_GPL vmlinux 0x63e63c0a blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0x63ece8ad scsi_nl_sock +EXPORT_SYMBOL_GPL vmlinux 0x63ff62b3 crypto_ahash_final +EXPORT_SYMBOL_GPL vmlinux 0x64860a3f cpci_hp_unregister_bus +EXPORT_SYMBOL_GPL vmlinux 0x648b9f87 usb_reset_endpoint +EXPORT_SYMBOL_GPL vmlinux 0x65104e46 subsys_system_register +EXPORT_SYMBOL_GPL vmlinux 0x651bf593 rtc_set_alarm +EXPORT_SYMBOL_GPL vmlinux 0x6527a231 dbgp_external_startup +EXPORT_SYMBOL_GPL vmlinux 0x655c6efd wm5102_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x65769b66 scsi_internal_device_block +EXPORT_SYMBOL_GPL vmlinux 0x65b899e7 blocking_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x65bbbc78 schedule_hrtimeout_range +EXPORT_SYMBOL_GPL vmlinux 0x65beb450 sdio_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0x65ccb6f0 call_netevent_notifiers +EXPORT_SYMBOL_GPL vmlinux 0x65d6d0f0 gpio_direction_input +EXPORT_SYMBOL_GPL vmlinux 0x661601de sprint_symbol +EXPORT_SYMBOL_GPL vmlinux 0x662d62b0 arizona_request_irq +EXPORT_SYMBOL_GPL vmlinux 0x663c16d6 gnttab_grant_foreign_access_subpage_ref +EXPORT_SYMBOL_GPL vmlinux 0x6646521d sata_pmp_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x6651c50d da903x_writes +EXPORT_SYMBOL_GPL vmlinux 0x66593bcb register_net_sysctl +EXPORT_SYMBOL_GPL vmlinux 0x6662ea77 put_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x666bdc37 crypto_blkcipher_type +EXPORT_SYMBOL_GPL vmlinux 0x666d791c __fsnotify_parent +EXPORT_SYMBOL_GPL vmlinux 0x668402aa crypto_put_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x66872b7e xenbus_map_ring +EXPORT_SYMBOL_GPL vmlinux 0x66b2a859 nr_free_buffer_pages +EXPORT_SYMBOL_GPL vmlinux 0x66ba95fc usb_hcd_link_urb_to_ep +EXPORT_SYMBOL_GPL vmlinux 0x66c78bd2 irq_domain_remove +EXPORT_SYMBOL_GPL vmlinux 0x66d87d38 symbol_put_addr +EXPORT_SYMBOL_GPL vmlinux 0x66ee391d rio_dev_put +EXPORT_SYMBOL_GPL vmlinux 0x6739a503 balloon_set_new_target +EXPORT_SYMBOL_GPL vmlinux 0x673a1863 usb_wait_anchor_empty_timeout +EXPORT_SYMBOL_GPL vmlinux 0x674e13e1 public_key_destroy +EXPORT_SYMBOL_GPL vmlinux 0x675d0207 rio_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x6760da3e fuse_conn_kill +EXPORT_SYMBOL_GPL vmlinux 0x677547f0 da9052_adc_read_temp +EXPORT_SYMBOL_GPL vmlinux 0x678dbd09 atomic_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0x67955ce6 profile_hits +EXPORT_SYMBOL_GPL vmlinux 0x6799d2d7 debugfs_create_regset32 +EXPORT_SYMBOL_GPL vmlinux 0x67da0d24 sdio_f0_writeb +EXPORT_SYMBOL_GPL vmlinux 0x67f1ee6a hrtimer_forward +EXPORT_SYMBOL_GPL vmlinux 0x681159e3 devres_get +EXPORT_SYMBOL_GPL vmlinux 0x6824d4ae acpi_dev_pm_attach +EXPORT_SYMBOL_GPL vmlinux 0x6836e901 anon_inode_getfd +EXPORT_SYMBOL_GPL vmlinux 0x688b56bf transport_class_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6892088c unregister_pm_notifier +EXPORT_SYMBOL_GPL vmlinux 0x68a6d10d fuse_file_poll +EXPORT_SYMBOL_GPL vmlinux 0x68b41569 attribute_container_find_class_device +EXPORT_SYMBOL_GPL vmlinux 0x68c3e5a1 ata_sff_dev_classify +EXPORT_SYMBOL_GPL vmlinux 0x68c6e024 mmc_regulator_set_ocr +EXPORT_SYMBOL_GPL vmlinux 0x68d9fc88 fib_rules_register +EXPORT_SYMBOL_GPL vmlinux 0x68f6ad50 mmu_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0x6921aa34 compat_put_timeval +EXPORT_SYMBOL_GPL vmlinux 0x6923ce63 irq_work_sync +EXPORT_SYMBOL_GPL vmlinux 0x692bf7ce dev_change_net_namespace +EXPORT_SYMBOL_GPL vmlinux 0x692e727b wm831x_auxadc_read_uv +EXPORT_SYMBOL_GPL vmlinux 0x69447467 ring_buffer_write +EXPORT_SYMBOL_GPL vmlinux 0x696c2aa9 cpufreq_governor_dbs +EXPORT_SYMBOL_GPL vmlinux 0x698a899f ring_buffer_peek +EXPORT_SYMBOL_GPL vmlinux 0x698be398 regulator_get_voltage +EXPORT_SYMBOL_GPL vmlinux 0x699037b0 devres_add +EXPORT_SYMBOL_GPL vmlinux 0x69e76066 tcp_done +EXPORT_SYMBOL_GPL vmlinux 0x69e9a2cb ata_scsi_slave_config +EXPORT_SYMBOL_GPL vmlinux 0x69fa9fc6 transport_setup_device +EXPORT_SYMBOL_GPL vmlinux 0x69fc6a7c pvclock_gtod_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x6a04202c regulator_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x6a51d88e debugfs_create_symlink +EXPORT_SYMBOL_GPL vmlinux 0x6a5bb4f8 queue_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0x6a5fb566 rcu_sched_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x6a6cafd2 ring_buffer_read_page +EXPORT_SYMBOL_GPL vmlinux 0x6a74f237 serial8250_request_dma +EXPORT_SYMBOL_GPL vmlinux 0x6a7912c6 console_drivers +EXPORT_SYMBOL_GPL vmlinux 0x6a8441be cpci_hp_start +EXPORT_SYMBOL_GPL vmlinux 0x6a9574a2 device_reprobe +EXPORT_SYMBOL_GPL vmlinux 0x6a9a3074 ata_ehi_push_desc +EXPORT_SYMBOL_GPL vmlinux 0x6ab922b2 regulator_get_drvdata +EXPORT_SYMBOL_GPL vmlinux 0x6aba167a regulator_list_voltage +EXPORT_SYMBOL_GPL vmlinux 0x6acad21f acpi_get_cpuid +EXPORT_SYMBOL_GPL vmlinux 0x6ace63fc ata_link_abort +EXPORT_SYMBOL_GPL vmlinux 0x6ad2d082 klist_add_head +EXPORT_SYMBOL_GPL vmlinux 0x6ae01985 pciserial_init_ports +EXPORT_SYMBOL_GPL vmlinux 0x6b001aee rt_mutex_unlock +EXPORT_SYMBOL_GPL vmlinux 0x6b00dcea __rt_mutex_init +EXPORT_SYMBOL_GPL vmlinux 0x6b20669c wm8400_block_read +EXPORT_SYMBOL_GPL vmlinux 0x6b264960 irq_domain_xlate_twocell +EXPORT_SYMBOL_GPL vmlinux 0x6b29a1fa ring_buffer_event_length +EXPORT_SYMBOL_GPL vmlinux 0x6b379aba regulator_list_voltage_table +EXPORT_SYMBOL_GPL vmlinux 0x6b6c6935 alloc_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x6b879e80 sata_link_debounce +EXPORT_SYMBOL_GPL vmlinux 0x6b8ba176 class_compat_remove_link +EXPORT_SYMBOL_GPL vmlinux 0x6b93bf60 inet_twdr_twkill_work +EXPORT_SYMBOL_GPL vmlinux 0x6bb0186f usb_hcd_check_unlink_urb +EXPORT_SYMBOL_GPL vmlinux 0x6be22b35 cpuidle_register_driver +EXPORT_SYMBOL_GPL vmlinux 0x6bfe6581 rio_map_inb_region +EXPORT_SYMBOL_GPL vmlinux 0x6c0ac318 bus_create_file +EXPORT_SYMBOL_GPL vmlinux 0x6c1251fd apei_exec_read_register +EXPORT_SYMBOL_GPL vmlinux 0x6c385a28 __bus_register +EXPORT_SYMBOL_GPL vmlinux 0x6c49c4f2 clockevents_notify +EXPORT_SYMBOL_GPL vmlinux 0x6c49c806 ata_sff_queue_pio_task +EXPORT_SYMBOL_GPL vmlinux 0x6c7ea486 acpi_subsys_suspend_late +EXPORT_SYMBOL_GPL vmlinux 0x6c8d5ae8 __gpio_get_value +EXPORT_SYMBOL_GPL vmlinux 0x6cc849bb tcp_fetch_timewait_stamp +EXPORT_SYMBOL_GPL vmlinux 0x6cce8079 wm831x_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0x6cf08c98 max8997_write_reg +EXPORT_SYMBOL_GPL vmlinux 0x6d2fc5a6 net_namespace_list +EXPORT_SYMBOL_GPL vmlinux 0x6d496ddb ata_bmdma_port_start +EXPORT_SYMBOL_GPL vmlinux 0x6d50f481 scsi_queue_work +EXPORT_SYMBOL_GPL vmlinux 0x6d6a64a2 shash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0x6da77e4f sysfs_notify_dirent +EXPORT_SYMBOL_GPL vmlinux 0x6db3fcbd key_type_logon +EXPORT_SYMBOL_GPL vmlinux 0x6dbc5971 input_ff_upload +EXPORT_SYMBOL_GPL vmlinux 0x6dc8b3c4 sysfs_add_file_to_group +EXPORT_SYMBOL_GPL vmlinux 0x6de01742 ata_sff_exec_command +EXPORT_SYMBOL_GPL vmlinux 0x6e0ca625 single_open_net +EXPORT_SYMBOL_GPL vmlinux 0x6e1a6a95 acpi_power_resource_register_device +EXPORT_SYMBOL_GPL vmlinux 0x6e58ddf0 gnttab_end_foreign_transfer_ref +EXPORT_SYMBOL_GPL vmlinux 0x6e7943ec iommu_group_id +EXPORT_SYMBOL_GPL vmlinux 0x6e89a560 regmap_irq_chip_get_base +EXPORT_SYMBOL_GPL vmlinux 0x6ea98361 ioremap_page_range +EXPORT_SYMBOL_GPL vmlinux 0x6eae0b8e inet6_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0x6eb20ac7 pwm_disable +EXPORT_SYMBOL_GPL vmlinux 0x6ec31f45 sata_pmp_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x6ec6470b regmap_init_i2c +EXPORT_SYMBOL_GPL vmlinux 0x6f1ee69e kgdb_unregister_io_module +EXPORT_SYMBOL_GPL vmlinux 0x6f61b19c unregister_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x6f6c610b dummy_irq_chip +EXPORT_SYMBOL_GPL vmlinux 0x6f8068bc pm_generic_thaw_noirq +EXPORT_SYMBOL_GPL vmlinux 0x6fa4cf38 irq_setup_alt_chip +EXPORT_SYMBOL_GPL vmlinux 0x6facb5e4 pid_vnr +EXPORT_SYMBOL_GPL vmlinux 0x6fbb313f bio_alloc_mddev +EXPORT_SYMBOL_GPL vmlinux 0x6fc71c0f print_context_stack_bp +EXPORT_SYMBOL_GPL vmlinux 0x6fe3d8cf ktime_add_safe +EXPORT_SYMBOL_GPL vmlinux 0x6ff607b6 crypto_get_default_rng +EXPORT_SYMBOL_GPL vmlinux 0x703189d7 regulator_get_mode +EXPORT_SYMBOL_GPL vmlinux 0x704f299b evm_verifyxattr +EXPORT_SYMBOL_GPL vmlinux 0x70599afd dm_noflush_suspending +EXPORT_SYMBOL_GPL vmlinux 0x706b3a33 cpufreq_frequency_table_get_attr +EXPORT_SYMBOL_GPL vmlinux 0x706ca0fd usb_unpoison_urb +EXPORT_SYMBOL_GPL vmlinux 0x707ff1bb ata_xfer_mask2mode +EXPORT_SYMBOL_GPL vmlinux 0x708bd95d irq_domain_xlate_onetwocell +EXPORT_SYMBOL_GPL vmlinux 0x708bddaa subsys_interface_register +EXPORT_SYMBOL_GPL vmlinux 0x70ad3fc6 remove_memory +EXPORT_SYMBOL_GPL vmlinux 0x70c353c3 subsys_dev_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x70cf032f usb_hcd_irq +EXPORT_SYMBOL_GPL vmlinux 0x70e3f985 md_rdev_clear +EXPORT_SYMBOL_GPL vmlinux 0x70ee31e2 regmap_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x70f3b1ac blkcg_policy_register +EXPORT_SYMBOL_GPL vmlinux 0x714e6dc0 device_destroy +EXPORT_SYMBOL_GPL vmlinux 0x716265c7 debugfs_initialized +EXPORT_SYMBOL_GPL vmlinux 0x717b823a regulator_disable_regmap +EXPORT_SYMBOL_GPL vmlinux 0x7182a0a7 blk_queue_lld_busy +EXPORT_SYMBOL_GPL vmlinux 0x719a4fcf crypto_shash_finup +EXPORT_SYMBOL_GPL vmlinux 0x71c41bd8 pci_set_cacheline_size +EXPORT_SYMBOL_GPL vmlinux 0x71dc9998 crypto_il_tab +EXPORT_SYMBOL_GPL vmlinux 0x720a673f key_set_timeout +EXPORT_SYMBOL_GPL vmlinux 0x721457a4 stmpe_block_read +EXPORT_SYMBOL_GPL vmlinux 0x722fcfeb crypto_alg_sem +EXPORT_SYMBOL_GPL vmlinux 0x72592f21 usb_disable_xhci_ports +EXPORT_SYMBOL_GPL vmlinux 0x726cde22 acpi_match_device +EXPORT_SYMBOL_GPL vmlinux 0x7273b351 hwpoison_filter +EXPORT_SYMBOL_GPL vmlinux 0x72741f25 trace_vbprintk +EXPORT_SYMBOL_GPL vmlinux 0x7278d328 all_vm_events +EXPORT_SYMBOL_GPL vmlinux 0x728529bc transport_remove_device +EXPORT_SYMBOL_GPL vmlinux 0x72938d71 ata_msleep +EXPORT_SYMBOL_GPL vmlinux 0x72b212ff regulator_bulk_enable +EXPORT_SYMBOL_GPL vmlinux 0x72d7700f acpi_kobj +EXPORT_SYMBOL_GPL vmlinux 0x72ff569b shash_ahash_finup +EXPORT_SYMBOL_GPL vmlinux 0x73013896 xenbus_printf +EXPORT_SYMBOL_GPL vmlinux 0x731433ee unregister_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0x731dba7a xen_domain_type +EXPORT_SYMBOL_GPL vmlinux 0x7340aa54 crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0x7372a175 crypto_hash_walk_first +EXPORT_SYMBOL_GPL vmlinux 0x73a48b4a ata_sff_std_ports +EXPORT_SYMBOL_GPL vmlinux 0x73a9a965 pci_find_ext_capability +EXPORT_SYMBOL_GPL vmlinux 0x73b10161 blk_queue_rq_timeout +EXPORT_SYMBOL_GPL vmlinux 0x73c2554f __iowrite64_copy +EXPORT_SYMBOL_GPL vmlinux 0x73d69364 ring_buffer_change_overwrite +EXPORT_SYMBOL_GPL vmlinux 0x73e5ca39 ata_scsi_simulate +EXPORT_SYMBOL_GPL vmlinux 0x743a165e ata_pack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x743f51bc init_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x74457e56 apei_resources_fini +EXPORT_SYMBOL_GPL vmlinux 0x7452adff user_return_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x746ae0f0 pci_assign_unassigned_bridge_resources +EXPORT_SYMBOL_GPL vmlinux 0x746d07aa task_xstate_cachep +EXPORT_SYMBOL_GPL vmlinux 0x747b08a8 __atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x748d801a pcap_adc_sync +EXPORT_SYMBOL_GPL vmlinux 0x74954462 timecounter_read +EXPORT_SYMBOL_GPL vmlinux 0x74987c60 xenbus_dev_error +EXPORT_SYMBOL_GPL vmlinux 0x74a813dc dev_forward_skb +EXPORT_SYMBOL_GPL vmlinux 0x74abdafa task_handoff_register +EXPORT_SYMBOL_GPL vmlinux 0x74baf17a tracing_is_on +EXPORT_SYMBOL_GPL vmlinux 0x74c08941 kvm_async_pf_task_wake +EXPORT_SYMBOL_GPL vmlinux 0x74c657df spi_async_locked +EXPORT_SYMBOL_GPL vmlinux 0x74deb10c used_vectors +EXPORT_SYMBOL_GPL vmlinux 0x74f717eb bmp085_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x75133f6e visitor128 +EXPORT_SYMBOL_GPL vmlinux 0x7521afb6 leave_mm +EXPORT_SYMBOL_GPL vmlinux 0x7522f3ba irq_modify_status +EXPORT_SYMBOL_GPL vmlinux 0x754ee87a tpm_show_caps_1_2 +EXPORT_SYMBOL_GPL vmlinux 0x756862c9 cgroup_next_descendant_post +EXPORT_SYMBOL_GPL vmlinux 0x7569b933 ata_bmdma_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0x75798830 locks_release_private +EXPORT_SYMBOL_GPL vmlinux 0x757b49d2 kmsg_dump_get_line +EXPORT_SYMBOL_GPL vmlinux 0x75803613 pci_find_next_capability +EXPORT_SYMBOL_GPL vmlinux 0x7599e282 pci_disable_ats +EXPORT_SYMBOL_GPL vmlinux 0x75e2d87c pci_bus_resource_n +EXPORT_SYMBOL_GPL vmlinux 0x75e8f3c3 crypto_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x75f0a547 __pci_complete_power_transition +EXPORT_SYMBOL_GPL vmlinux 0x762ee54c unix_outq_len +EXPORT_SYMBOL_GPL vmlinux 0x763fc13a __pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0x766eb1c3 inet_hashinfo_init +EXPORT_SYMBOL_GPL vmlinux 0x767b9037 ata_port_abort +EXPORT_SYMBOL_GPL vmlinux 0x76873239 pci_dev_run_wake +EXPORT_SYMBOL_GPL vmlinux 0x76878d4b get_dcookie +EXPORT_SYMBOL_GPL vmlinux 0x76926d89 usb_put_intf +EXPORT_SYMBOL_GPL vmlinux 0x769d91f9 crypto_spawn_tfm2 +EXPORT_SYMBOL_GPL vmlinux 0x76ce7dee i2c_new_probed_device +EXPORT_SYMBOL_GPL vmlinux 0x76d51d2f kallsyms_on_each_symbol +EXPORT_SYMBOL_GPL vmlinux 0x76d5e799 spi_async +EXPORT_SYMBOL_GPL vmlinux 0x76f21f34 usb_submit_urb +EXPORT_SYMBOL_GPL vmlinux 0x77041fc1 xenbus_watch_path +EXPORT_SYMBOL_GPL vmlinux 0x770f6d96 device_pm_wait_for_dev +EXPORT_SYMBOL_GPL vmlinux 0x770fff03 tpm_show_pubek +EXPORT_SYMBOL_GPL vmlinux 0x7712771a unbind_from_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x772fbcaf trace_buffer_unlock_commit_regs +EXPORT_SYMBOL_GPL vmlinux 0x775a6ef5 kvm_read_and_reset_pf_reason +EXPORT_SYMBOL_GPL vmlinux 0x776ba2b9 device_show_int +EXPORT_SYMBOL_GPL vmlinux 0x77c61038 ata_sff_drain_fifo +EXPORT_SYMBOL_GPL vmlinux 0x77d5dd73 btree_init_mempool +EXPORT_SYMBOL_GPL vmlinux 0x77e78218 regulator_allow_bypass +EXPORT_SYMBOL_GPL vmlinux 0x7800fe93 lp8788_read_multi_bytes +EXPORT_SYMBOL_GPL vmlinux 0x780b65f3 pci_pri_stopped +EXPORT_SYMBOL_GPL vmlinux 0x782adb74 hpet_rtc_interrupt +EXPORT_SYMBOL_GPL vmlinux 0x7853fd22 crypto_grab_aead +EXPORT_SYMBOL_GPL vmlinux 0x785dfa7b regulator_is_enabled_regmap +EXPORT_SYMBOL_GPL vmlinux 0x787c882b lzo1x_1_compress +EXPORT_SYMBOL_GPL vmlinux 0x78a0ae53 tps65912_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x78abdac4 crypto_unregister_shashes +EXPORT_SYMBOL_GPL vmlinux 0x78b05483 arizona_dev_init +EXPORT_SYMBOL_GPL vmlinux 0x78bb832c sk_detach_filter +EXPORT_SYMBOL_GPL vmlinux 0x78dbb76d bus_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x78de06b8 pci_num_vf +EXPORT_SYMBOL_GPL vmlinux 0x78f442b9 klist_add_tail +EXPORT_SYMBOL_GPL vmlinux 0x78ff73ee pci_scan_child_bus +EXPORT_SYMBOL_GPL vmlinux 0x79035262 pci_create_slot +EXPORT_SYMBOL_GPL vmlinux 0x7928987d usb_hcd_pci_remove +EXPORT_SYMBOL_GPL vmlinux 0x7944e0fc tracing_off +EXPORT_SYMBOL_GPL vmlinux 0x79560e5b pcie_port_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x796c2d48 dm_get_md +EXPORT_SYMBOL_GPL vmlinux 0x798ed41c sync_page_io +EXPORT_SYMBOL_GPL vmlinux 0x7991fd8d crash_vmclear_loaded_vmcss +EXPORT_SYMBOL_GPL vmlinux 0x79921f92 inet6_csk_reqsk_queue_hash_add +EXPORT_SYMBOL_GPL vmlinux 0x79937b1e pci_cfg_access_unlock +EXPORT_SYMBOL_GPL vmlinux 0x79c66b09 spi_add_device +EXPORT_SYMBOL_GPL vmlinux 0x79dbb58a skcipher_geniv_alloc +EXPORT_SYMBOL_GPL vmlinux 0x79e69460 intel_iommu_gfx_mapped +EXPORT_SYMBOL_GPL vmlinux 0x7a1e85f2 sata_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x7a29b0ea ata_sff_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x7a2e4b44 ezx_pcap_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x7a3885e3 usb_hcd_resume_root_hub +EXPORT_SYMBOL_GPL vmlinux 0x7a7c5175 amd_erratum_383 +EXPORT_SYMBOL_GPL vmlinux 0x7a8ac456 __online_page_increment_counters +EXPORT_SYMBOL_GPL vmlinux 0x7a944007 rcu_idle_enter +EXPORT_SYMBOL_GPL vmlinux 0x7a97fa6f ata_dummy_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x7a9d2e42 i2c_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0x7ac8e5b0 acpi_gsi_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x7ae1ae8e cpufreq_frequency_table_put_attr +EXPORT_SYMBOL_GPL vmlinux 0x7ae2b567 led_classdev_suspend +EXPORT_SYMBOL_GPL vmlinux 0x7b0ef440 tc3589x_block_read +EXPORT_SYMBOL_GPL vmlinux 0x7b0f1ab3 ring_buffer_free_read_page +EXPORT_SYMBOL_GPL vmlinux 0x7b1662f6 get_task_comm +EXPORT_SYMBOL_GPL vmlinux 0x7b1d544d edac_handler_set +EXPORT_SYMBOL_GPL vmlinux 0x7b46401b crypto_aes_set_key +EXPORT_SYMBOL_GPL vmlinux 0x7b4da633 crypto_drop_spawn +EXPORT_SYMBOL_GPL vmlinux 0x7b70414a aead_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0x7b870f97 usb_create_shared_hcd +EXPORT_SYMBOL_GPL vmlinux 0x7b90d1a9 bind_virq_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x7bc1ef22 key_type_user +EXPORT_SYMBOL_GPL vmlinux 0x7bced0ca dm_set_device_limits +EXPORT_SYMBOL_GPL vmlinux 0x7bcf487a rdev_get_dev +EXPORT_SYMBOL_GPL vmlinux 0x7c0e7a43 fat_flush_inodes +EXPORT_SYMBOL_GPL vmlinux 0x7c2fb032 usb_kill_urb +EXPORT_SYMBOL_GPL vmlinux 0x7c34812c tps65912_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0x7c60bcdf xen_register_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x7caa52ac xen_xenbus_fops +EXPORT_SYMBOL_GPL vmlinux 0x7cc1b7fd max77693_bulk_read +EXPORT_SYMBOL_GPL vmlinux 0x7ceaf0d5 generic_handle_irq +EXPORT_SYMBOL_GPL vmlinux 0x7ceb5a6d wm831x_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x7cee7773 ata_bmdma_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x7d155f9a __blocking_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7d18a811 uart_handle_dcd_change +EXPORT_SYMBOL_GPL vmlinux 0x7d1adde7 ata_bmdma_error_handler +EXPORT_SYMBOL_GPL vmlinux 0x7d2968e4 sdio_get_host_pm_caps +EXPORT_SYMBOL_GPL vmlinux 0x7d2ea9a6 ip6_route_lookup +EXPORT_SYMBOL_GPL vmlinux 0x7d59dd46 pm_wq +EXPORT_SYMBOL_GPL vmlinux 0x7daaac0b blk_rq_unprep_clone +EXPORT_SYMBOL_GPL vmlinux 0x7dab26b6 wm831x_isinkv_values +EXPORT_SYMBOL_GPL vmlinux 0x7db3ecf8 xfrm_output_resume +EXPORT_SYMBOL_GPL vmlinux 0x7db41833 __rio_local_write_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x7dbe032e pci_cfg_access_lock +EXPORT_SYMBOL_GPL vmlinux 0x7dc5034a ata_link_next +EXPORT_SYMBOL_GPL vmlinux 0x7dc5d0b6 crypto_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x7dd07a74 __pm_runtime_use_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0x7e0ef97c regmap_irq_get_domain +EXPORT_SYMBOL_GPL vmlinux 0x7e1183c9 async_schedule +EXPORT_SYMBOL_GPL vmlinux 0x7e199d74 crypto_tfm_in_queue +EXPORT_SYMBOL_GPL vmlinux 0x7e19a348 dequeue_signal +EXPORT_SYMBOL_GPL vmlinux 0x7e1ecdc5 register_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0x7e5e301f unregister_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x7e64181d usb_calc_bus_time +EXPORT_SYMBOL_GPL vmlinux 0x7e85a323 inet_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0x7ea1a2bc probe_kernel_write +EXPORT_SYMBOL_GPL vmlinux 0x7ea720f4 sdio_readw +EXPORT_SYMBOL_GPL vmlinux 0x7ec22f9a apei_estatus_check +EXPORT_SYMBOL_GPL vmlinux 0x7ef18cd2 fat_remove_entries +EXPORT_SYMBOL_GPL vmlinux 0x7f44edcc pci_configure_slot +EXPORT_SYMBOL_GPL vmlinux 0x7f545322 tcp_unregister_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0x7f814694 event_storage_mutex +EXPORT_SYMBOL_GPL vmlinux 0x7fa4d16b bd_link_disk_holder +EXPORT_SYMBOL_GPL vmlinux 0x7faa23f7 xenbus_dev_resume +EXPORT_SYMBOL_GPL vmlinux 0x7fb5c863 pci_rescan_bus +EXPORT_SYMBOL_GPL vmlinux 0x7fd2d808 __netpoll_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x7ff10ccf raw_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x7ff963a1 gpiochip_is_requested +EXPORT_SYMBOL_GPL vmlinux 0x7ffc8718 gpio_set_debounce +EXPORT_SYMBOL_GPL vmlinux 0x803a707a class_dev_iter_init +EXPORT_SYMBOL_GPL vmlinux 0x8055b6bf usb_interrupt_msg +EXPORT_SYMBOL_GPL vmlinux 0x806bb53e ata_host_resume +EXPORT_SYMBOL_GPL vmlinux 0x806e502f btree_destroy +EXPORT_SYMBOL_GPL vmlinux 0x8072841a __class_register +EXPORT_SYMBOL_GPL vmlinux 0x807c6b94 vring_del_virtqueue +EXPORT_SYMBOL_GPL vmlinux 0x807cb380 pci_disable_pasid +EXPORT_SYMBOL_GPL vmlinux 0x8087700a task_active_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x808ec1a3 crypto_alg_tested +EXPORT_SYMBOL_GPL vmlinux 0x80a3a19a pm_generic_restore_noirq +EXPORT_SYMBOL_GPL vmlinux 0x80d3927f __tracepoint_block_unplug +EXPORT_SYMBOL_GPL vmlinux 0x80d5e57a mpi_free +EXPORT_SYMBOL_GPL vmlinux 0x80dcb45c __audit_inode_child +EXPORT_SYMBOL_GPL vmlinux 0x80e2d12d tpm_remove_ppi +EXPORT_SYMBOL_GPL vmlinux 0x80f3268f __trace_printk +EXPORT_SYMBOL_GPL vmlinux 0x80f37284 acpi_subsys_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0x81209401 mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x8125c3b4 hrtimer_init +EXPORT_SYMBOL_GPL vmlinux 0x8132b7ee rio_release_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0x81420755 inet_csk_route_req +EXPORT_SYMBOL_GPL vmlinux 0x81490b1a platform_device_add_resources +EXPORT_SYMBOL_GPL vmlinux 0x8149ea54 ata_timing_find_mode +EXPORT_SYMBOL_GPL vmlinux 0x8155bc3f xenbus_frontend_closed +EXPORT_SYMBOL_GPL vmlinux 0x817a27e0 cpufreq_frequency_table_target +EXPORT_SYMBOL_GPL vmlinux 0x81c732b1 rtc_irq_register +EXPORT_SYMBOL_GPL vmlinux 0x81e86837 xenbus_register_backend +EXPORT_SYMBOL_GPL vmlinux 0x81f65c4f ata_eh_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0x8226642f __gpio_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x826a7053 platform_get_resource +EXPORT_SYMBOL_GPL vmlinux 0x82939ebd rcu_batches_completed_sched +EXPORT_SYMBOL_GPL vmlinux 0x82a1ef62 sata_std_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x82ae3681 scsi_target_unblock +EXPORT_SYMBOL_GPL vmlinux 0x82cd19f3 register_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x82d79b51 sysctl_vfs_cache_pressure +EXPORT_SYMBOL_GPL vmlinux 0x82dbec19 erst_write +EXPORT_SYMBOL_GPL vmlinux 0x82e77864 ata_bmdma32_port_ops +EXPORT_SYMBOL_GPL vmlinux 0x831ba495 rdev_get_id +EXPORT_SYMBOL_GPL vmlinux 0x834e71da crypto_register_shashes +EXPORT_SYMBOL_GPL vmlinux 0x8356591e ata_port_freeze +EXPORT_SYMBOL_GPL vmlinux 0x836da6fd i2c_add_numbered_adapter +EXPORT_SYMBOL_GPL vmlinux 0x8383ac91 blkcg_policy_unregister +EXPORT_SYMBOL_GPL vmlinux 0x838aeea6 mm_kobj +EXPORT_SYMBOL_GPL vmlinux 0x838b13e7 ring_buffer_free +EXPORT_SYMBOL_GPL vmlinux 0x83c50517 ata_dev_disable +EXPORT_SYMBOL_GPL vmlinux 0x83de60d2 unregister_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0x841012c1 proc_net_fops_create +EXPORT_SYMBOL_GPL vmlinux 0x843d70ef acpi_is_root_bridge +EXPORT_SYMBOL_GPL vmlinux 0x845cae41 crypto_find_alg +EXPORT_SYMBOL_GPL vmlinux 0x8487a2b6 flush_work +EXPORT_SYMBOL_GPL vmlinux 0x8492b13e invalidate_inode_pages2_range +EXPORT_SYMBOL_GPL vmlinux 0x84e3eff4 dm_set_target_max_io_len +EXPORT_SYMBOL_GPL vmlinux 0x84f83255 ata_acpi_gtm_xfermask +EXPORT_SYMBOL_GPL vmlinux 0x84fe2f25 __rio_local_write_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x850368c4 ata_acpi_gtm +EXPORT_SYMBOL_GPL vmlinux 0x85050965 __irq_alloc_descs +EXPORT_SYMBOL_GPL vmlinux 0x85216155 ezx_pcap_read +EXPORT_SYMBOL_GPL vmlinux 0x85346e13 xenbus_dev_remove +EXPORT_SYMBOL_GPL vmlinux 0x85478a0b inet6_hash_frag +EXPORT_SYMBOL_GPL vmlinux 0x859aea9a xen_set_domain_pte +EXPORT_SYMBOL_GPL vmlinux 0x85a1826c register_kretprobe +EXPORT_SYMBOL_GPL vmlinux 0x85ad51e4 cpuidle_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0x85b46272 led_trigger_blink_oneshot +EXPORT_SYMBOL_GPL vmlinux 0x85c10896 rcu_batches_completed_bh +EXPORT_SYMBOL_GPL vmlinux 0x85c7f674 ring_buffer_normalize_time_stamp +EXPORT_SYMBOL_GPL vmlinux 0x85d7edfd hpet_set_periodic_freq +EXPORT_SYMBOL_GPL vmlinux 0x85fa44ee __wake_up_locked +EXPORT_SYMBOL_GPL vmlinux 0x8611cffb serial8250_tx_dma +EXPORT_SYMBOL_GPL vmlinux 0x862f98a3 xen_create_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0x863c552c cache_firmware +EXPORT_SYMBOL_GPL vmlinux 0x8656a879 acpi_dev_resource_memory +EXPORT_SYMBOL_GPL vmlinux 0x86623fd7 notify_remote_via_irq +EXPORT_SYMBOL_GPL vmlinux 0x8662cc80 rtc_class_close +EXPORT_SYMBOL_GPL vmlinux 0x86840c2a dm_path_uevent +EXPORT_SYMBOL_GPL vmlinux 0x868784cb __symbol_get +EXPORT_SYMBOL_GPL vmlinux 0x86a37293 scsi_internal_device_unblock +EXPORT_SYMBOL_GPL vmlinux 0x86a51007 gnttab_end_foreign_transfer +EXPORT_SYMBOL_GPL vmlinux 0x86a65421 wm8350_reg_unlock +EXPORT_SYMBOL_GPL vmlinux 0x86f6b99d synchronize_rcu_expedited +EXPORT_SYMBOL_GPL vmlinux 0x86f8c910 pcap_set_ts_bits +EXPORT_SYMBOL_GPL vmlinux 0x8702e548 process_srcu +EXPORT_SYMBOL_GPL vmlinux 0x8704eb06 irq_set_default_host +EXPORT_SYMBOL_GPL vmlinux 0x870e16b7 xen_test_irq_shared +EXPORT_SYMBOL_GPL vmlinux 0x870fc88c __online_page_free +EXPORT_SYMBOL_GPL vmlinux 0x871aafeb usb_unlink_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x871bcaa4 irq_find_host +EXPORT_SYMBOL_GPL vmlinux 0x873fbaea edac_atomic_assert_error +EXPORT_SYMBOL_GPL vmlinux 0x875b7be1 vfs_setlease +EXPORT_SYMBOL_GPL vmlinux 0x87754115 raw_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0x87898eb8 __get_vm_area +EXPORT_SYMBOL_GPL vmlinux 0x8794cd19 btree_visitor +EXPORT_SYMBOL_GPL vmlinux 0x87ae9385 dma_wait_for_async_tx +EXPORT_SYMBOL_GPL vmlinux 0x87b5dbbf add_page_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0x87e0b013 proc_net_mkdir +EXPORT_SYMBOL_GPL vmlinux 0x87edd27f usb_disable_ltm +EXPORT_SYMBOL_GPL vmlinux 0x880959ff debugfs_create_x16 +EXPORT_SYMBOL_GPL vmlinux 0x880ce337 tcp_twsk_destructor +EXPORT_SYMBOL_GPL vmlinux 0x8810ad5e crypto_xor +EXPORT_SYMBOL_GPL vmlinux 0x882b3c1f bus_unregister +EXPORT_SYMBOL_GPL vmlinux 0x882f4a05 xen_unregister_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0x883a34be simple_attr_read +EXPORT_SYMBOL_GPL vmlinux 0x883cc88f usb_get_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x8844e737 trace_event_raw_init +EXPORT_SYMBOL_GPL vmlinux 0x8874e9fa debugfs_create_u32 +EXPORT_SYMBOL_GPL vmlinux 0x887be325 dma_buf_put +EXPORT_SYMBOL_GPL vmlinux 0x8881ab6c crypto_init_spawn2 +EXPORT_SYMBOL_GPL vmlinux 0x88900992 usb_scuttle_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x88a7dab3 set_task_ioprio +EXPORT_SYMBOL_GPL vmlinux 0x88ab6fe3 kgdb_active +EXPORT_SYMBOL_GPL vmlinux 0x88b2c0f8 tps6586x_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x88ce29da crypto_shash_digest +EXPORT_SYMBOL_GPL vmlinux 0x8908584e usb_acpi_power_manageable +EXPORT_SYMBOL_GPL vmlinux 0x89152b00 n_tty_inherit_ops +EXPORT_SYMBOL_GPL vmlinux 0x891a5a7f gnttab_max_grant_frames +EXPORT_SYMBOL_GPL vmlinux 0x891cf43c usb_hcd_giveback_urb +EXPORT_SYMBOL_GPL vmlinux 0x8924eb1e rcu_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0x89485687 iommu_group_put +EXPORT_SYMBOL_GPL vmlinux 0x894a85fb ata_bmdma_qc_issue +EXPORT_SYMBOL_GPL vmlinux 0x894d1a04 rio_release_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x89502f0c gnttab_subpage_grants_available +EXPORT_SYMBOL_GPL vmlinux 0x8956aeae apei_exec_ctx_init +EXPORT_SYMBOL_GPL vmlinux 0x89666d55 unix_inq_len +EXPORT_SYMBOL_GPL vmlinux 0x89ae62e5 disk_part_iter_next +EXPORT_SYMBOL_GPL vmlinux 0x89c60a54 fuse_conn_put +EXPORT_SYMBOL_GPL vmlinux 0x89c9d711 sdio_writel +EXPORT_SYMBOL_GPL vmlinux 0x8a36fb74 devres_release_group +EXPORT_SYMBOL_GPL vmlinux 0x8a4752ec put_pid +EXPORT_SYMBOL_GPL vmlinux 0x8a4eb38d sec_reg_update +EXPORT_SYMBOL_GPL vmlinux 0x8a5970b2 ata_sff_tf_read +EXPORT_SYMBOL_GPL vmlinux 0x8a5c7a80 regulator_enable +EXPORT_SYMBOL_GPL vmlinux 0x8a715372 ata_pci_sff_activate_host +EXPORT_SYMBOL_GPL vmlinux 0x8a78989f irq_from_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x8aaabccf wm8994_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x8ab54e88 rio_request_inb_pwrite +EXPORT_SYMBOL_GPL vmlinux 0x8abacc47 get_max_files +EXPORT_SYMBOL_GPL vmlinux 0x8ac0c334 scsi_flush_work +EXPORT_SYMBOL_GPL vmlinux 0x8ad911a9 tpm_show_enabled +EXPORT_SYMBOL_GPL vmlinux 0x8ae92976 tcp_init_congestion_ops +EXPORT_SYMBOL_GPL vmlinux 0x8af3d760 pci_pasid_features +EXPORT_SYMBOL_GPL vmlinux 0x8af94d16 module_mutex +EXPORT_SYMBOL_GPL vmlinux 0x8afb86b9 xfrm_audit_state_add +EXPORT_SYMBOL_GPL vmlinux 0x8afbf7b1 irq_domain_xlate_onecell +EXPORT_SYMBOL_GPL vmlinux 0x8b04668e bind_interdomain_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0x8b39cf9d unregister_kprobes +EXPORT_SYMBOL_GPL vmlinux 0x8b3ac010 tpm_show_caps +EXPORT_SYMBOL_GPL vmlinux 0x8b66f9e0 xen_platform_pci_unplug +EXPORT_SYMBOL_GPL vmlinux 0x8b68ce9f usb_kill_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0x8b6f00f3 register_ftrace_event +EXPORT_SYMBOL_GPL vmlinux 0x8b752ac1 ata_tf_to_fis +EXPORT_SYMBOL_GPL vmlinux 0x8b861816 iommu_group_get +EXPORT_SYMBOL_GPL vmlinux 0x8b9200fd lookup_address +EXPORT_SYMBOL_GPL vmlinux 0x8bc987d0 vfs_listxattr +EXPORT_SYMBOL_GPL vmlinux 0x8bd4456b ata_sas_port_async_resume +EXPORT_SYMBOL_GPL vmlinux 0x8bfc5fc1 regmap_raw_read +EXPORT_SYMBOL_GPL vmlinux 0x8c03d20c destroy_workqueue +EXPORT_SYMBOL_GPL vmlinux 0x8c06a108 xenbus_transaction_start +EXPORT_SYMBOL_GPL vmlinux 0x8c206d70 pci_add_dynid +EXPORT_SYMBOL_GPL vmlinux 0x8c3418e2 relay_flush +EXPORT_SYMBOL_GPL vmlinux 0x8c38074a unregister_xenstore_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8c423a14 __trace_note_message +EXPORT_SYMBOL_GPL vmlinux 0x8c4e4ae4 devres_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8c4ee07e unregister_acpi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0x8c4f5a8b devm_pwm_put +EXPORT_SYMBOL_GPL vmlinux 0x8c5060db ata_sas_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0x8c68dffa blkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x8c80c869 shash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x8c93eb01 adp5520_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8cd9f935 setup_APIC_eilvt +EXPORT_SYMBOL_GPL vmlinux 0x8cea765f memalloc_socks +EXPORT_SYMBOL_GPL vmlinux 0x8cf8969e pm_runtime_irq_safe +EXPORT_SYMBOL_GPL vmlinux 0x8d10800e tty_encode_baud_rate +EXPORT_SYMBOL_GPL vmlinux 0x8d1983d9 ip_route_output_flow +EXPORT_SYMBOL_GPL vmlinux 0x8d22bb58 iommu_group_alloc +EXPORT_SYMBOL_GPL vmlinux 0x8d36c088 look_up_OID +EXPORT_SYMBOL_GPL vmlinux 0x8d62b265 crypto_alloc_aead +EXPORT_SYMBOL_GPL vmlinux 0x8db4166d vfs_kern_mount +EXPORT_SYMBOL_GPL vmlinux 0x8db7c9cf led_stop_software_blink +EXPORT_SYMBOL_GPL vmlinux 0x8dd0d2f7 dev_attr_unload_heads +EXPORT_SYMBOL_GPL vmlinux 0x8dd257a0 blk_queue_flush +EXPORT_SYMBOL_GPL vmlinux 0x8dd28c4f fat_build_inode +EXPORT_SYMBOL_GPL vmlinux 0x8df1be47 tty_find_polling_driver +EXPORT_SYMBOL_GPL vmlinux 0x8e375136 __inet_twsk_hashdance +EXPORT_SYMBOL_GPL vmlinux 0x8e58e26a sock_diag_register +EXPORT_SYMBOL_GPL vmlinux 0x8e5abfde clockevent_delta2ns +EXPORT_SYMBOL_GPL vmlinux 0x8e709224 bdi_writeout_inc +EXPORT_SYMBOL_GPL vmlinux 0x8e75f9c8 dma_buf_kunmap +EXPORT_SYMBOL_GPL vmlinux 0x8e7c71e1 bus_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0x8ebde701 thermal_register_governor +EXPORT_SYMBOL_GPL vmlinux 0x8ec6f5b0 cred_to_ucred +EXPORT_SYMBOL_GPL vmlinux 0x8ed96960 __scsi_get_command +EXPORT_SYMBOL_GPL vmlinux 0x8edfb574 injectm +EXPORT_SYMBOL_GPL vmlinux 0x8f0d9a99 transport_configure_device +EXPORT_SYMBOL_GPL vmlinux 0x8f12669a irq_linear_revmap +EXPORT_SYMBOL_GPL vmlinux 0x8f178cbb spi_register_master +EXPORT_SYMBOL_GPL vmlinux 0x8f6cee77 __round_jiffies_relative +EXPORT_SYMBOL_GPL vmlinux 0x8f86ee1e __udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0x8f9f7c52 ip6_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0x8fb675a4 wm8350_block_read +EXPORT_SYMBOL_GPL vmlinux 0x9003aa50 klist_iter_init_node +EXPORT_SYMBOL_GPL vmlinux 0x9004dd8f dma_buf_mmap +EXPORT_SYMBOL_GPL vmlinux 0x9009602a acpi_bus_get_ejd +EXPORT_SYMBOL_GPL vmlinux 0x904affb1 da9052_adc_manual_read +EXPORT_SYMBOL_GPL vmlinux 0x9062c322 ring_buffer_consume +EXPORT_SYMBOL_GPL vmlinux 0x9079ef3f pm_runtime_set_autosuspend_delay +EXPORT_SYMBOL_GPL vmlinux 0x909160a0 acpi_subsys_resume_early +EXPORT_SYMBOL_GPL vmlinux 0x90a1004a crypto_has_alg +EXPORT_SYMBOL_GPL vmlinux 0x90c58db0 pci_ats_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0x90dc29df aout_dump_debugregs +EXPORT_SYMBOL_GPL vmlinux 0x90e5e39b get_task_mm +EXPORT_SYMBOL_GPL vmlinux 0x913756a7 stmpe_set_bits +EXPORT_SYMBOL_GPL vmlinux 0x914ed31a da9052_disable_irq_nosync +EXPORT_SYMBOL_GPL vmlinux 0x9159b9d6 profile_event_register +EXPORT_SYMBOL_GPL vmlinux 0x918ad429 ring_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0x918ce5a2 rio_mport_read_config_16 +EXPORT_SYMBOL_GPL vmlinux 0x91bef416 spi_setup +EXPORT_SYMBOL_GPL vmlinux 0x91c6e5b0 pcap_to_irq +EXPORT_SYMBOL_GPL vmlinux 0x91d11aed wm831x_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0x920599df device_register +EXPORT_SYMBOL_GPL vmlinux 0x920c5796 ata_bmdma_port_intr +EXPORT_SYMBOL_GPL vmlinux 0x920cc389 visitorl +EXPORT_SYMBOL_GPL vmlinux 0x921ece0a pci_disable_sriov +EXPORT_SYMBOL_GPL vmlinux 0x9230ac54 find_module +EXPORT_SYMBOL_GPL vmlinux 0x924c46f8 zs_unmap_object +EXPORT_SYMBOL_GPL vmlinux 0x9282b63e crypto_larval_kill +EXPORT_SYMBOL_GPL vmlinux 0x92cab2a3 tps6586x_irq_get_virq +EXPORT_SYMBOL_GPL vmlinux 0x92d31cfb fixed_phy_add +EXPORT_SYMBOL_GPL vmlinux 0x92e72cca regulator_set_voltage_time_sel +EXPORT_SYMBOL_GPL vmlinux 0x92e752db tcp_cong_avoid_ai +EXPORT_SYMBOL_GPL vmlinux 0x930ada8e relay_switch_subbuf +EXPORT_SYMBOL_GPL vmlinux 0x9312d80e evtchn_put +EXPORT_SYMBOL_GPL vmlinux 0x93226faa irq_domain_associate_many +EXPORT_SYMBOL_GPL vmlinux 0x93260715 register_kprobe +EXPORT_SYMBOL_GPL vmlinux 0x9337f692 ata_sff_wait_ready +EXPORT_SYMBOL_GPL vmlinux 0x93419baa tpm_bios_log_teardown +EXPORT_SYMBOL_GPL vmlinux 0x934da3c4 irq_get_irq_data +EXPORT_SYMBOL_GPL vmlinux 0x9351be0d crypto_ahash_type +EXPORT_SYMBOL_GPL vmlinux 0x93551e84 power_supply_class +EXPORT_SYMBOL_GPL vmlinux 0x93572380 usb_reset_device +EXPORT_SYMBOL_GPL vmlinux 0x9357eaa2 usb_ifnum_to_if +EXPORT_SYMBOL_GPL vmlinux 0x9360e8d9 xenbus_probe_node +EXPORT_SYMBOL_GPL vmlinux 0x9399aecc sdio_release_host +EXPORT_SYMBOL_GPL vmlinux 0x93abb1c6 btree_init +EXPORT_SYMBOL_GPL vmlinux 0x93b49dfa dma_buf_vunmap +EXPORT_SYMBOL_GPL vmlinux 0x93d2422d snmp_mib_free +EXPORT_SYMBOL_GPL vmlinux 0x941f2aaa eventfd_ctx_put +EXPORT_SYMBOL_GPL vmlinux 0x943fc708 xen_setup_shutdown_event +EXPORT_SYMBOL_GPL vmlinux 0x9443cd52 ata_sff_pause +EXPORT_SYMBOL_GPL vmlinux 0x9447fceb static_key_slow_dec_deferred +EXPORT_SYMBOL_GPL vmlinux 0x945faea3 regmap_register_patch +EXPORT_SYMBOL_GPL vmlinux 0x9462159c tpm_write +EXPORT_SYMBOL_GPL vmlinux 0x9486b4aa inet_csk_listen_start +EXPORT_SYMBOL_GPL vmlinux 0x949f7342 __alloc_percpu +EXPORT_SYMBOL_GPL vmlinux 0x94a68723 ata_scsi_slave_destroy +EXPORT_SYMBOL_GPL vmlinux 0x94b8f23a crypto_remove_spawns +EXPORT_SYMBOL_GPL vmlinux 0x94c318be apei_exec_collect_resources +EXPORT_SYMBOL_GPL vmlinux 0x94ef4d05 cpci_hp_stop +EXPORT_SYMBOL_GPL vmlinux 0x94f8c555 srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x94fd6a3e attribute_container_classdev_to_container +EXPORT_SYMBOL_GPL vmlinux 0x9512ef5d usb_register_device_driver +EXPORT_SYMBOL_GPL vmlinux 0x952664c5 do_exit +EXPORT_SYMBOL_GPL vmlinux 0x952ad447 __cpufreq_driver_getavg +EXPORT_SYMBOL_GPL vmlinux 0x95396f04 ata_eh_freeze_port +EXPORT_SYMBOL_GPL vmlinux 0x9546b2a7 crypto_unregister_shash +EXPORT_SYMBOL_GPL vmlinux 0x954d31b3 usb_hub_clear_tt_buffer +EXPORT_SYMBOL_GPL vmlinux 0x955b0e2e kthread_worker_fn +EXPORT_SYMBOL_GPL vmlinux 0x956a91ba gpio_get_value_cansleep +EXPORT_SYMBOL_GPL vmlinux 0x958df3ac zs_free +EXPORT_SYMBOL_GPL vmlinux 0x95ac2d5e fib_rules_unregister +EXPORT_SYMBOL_GPL vmlinux 0x95b216ec i2c_unlock_adapter +EXPORT_SYMBOL_GPL vmlinux 0x95bc9078 btree_free +EXPORT_SYMBOL_GPL vmlinux 0x95de5b03 usb_bulk_msg +EXPORT_SYMBOL_GPL vmlinux 0x95efaf37 md_trim_bio +EXPORT_SYMBOL_GPL vmlinux 0x960456ce ip6_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0x96088873 filter_current_check_discard +EXPORT_SYMBOL_GPL vmlinux 0x9621849f ring_buffer_event_data +EXPORT_SYMBOL_GPL vmlinux 0x963678cb crypto_alloc_shash +EXPORT_SYMBOL_GPL vmlinux 0x964add15 xenbus_scanf +EXPORT_SYMBOL_GPL vmlinux 0x964d5c39 acpi_os_map_memory +EXPORT_SYMBOL_GPL vmlinux 0x964ee284 scsi_mode_select +EXPORT_SYMBOL_GPL vmlinux 0x965c7aba ahash_free_instance +EXPORT_SYMBOL_GPL vmlinux 0x96a22790 vmcore_cleanup +EXPORT_SYMBOL_GPL vmlinux 0x96a24cf6 crypto_register_algs +EXPORT_SYMBOL_GPL vmlinux 0x96a5923b fat_dir_empty +EXPORT_SYMBOL_GPL vmlinux 0x96c57a3a pci_bus_add_device +EXPORT_SYMBOL_GPL vmlinux 0x96cbcf31 pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0x96d8d42e usb_unanchor_urb +EXPORT_SYMBOL_GPL vmlinux 0x96ff28bb sata_sff_hardreset +EXPORT_SYMBOL_GPL vmlinux 0x974b4e1e usb_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0x974b5535 pvclock_gtod_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9780502b ata_std_sched_eh +EXPORT_SYMBOL_GPL vmlinux 0x98041dfa blk_queue_bio +EXPORT_SYMBOL_GPL vmlinux 0x980f3ac0 wm5110_spi_regmap +EXPORT_SYMBOL_GPL vmlinux 0x981b534c verify_signature +EXPORT_SYMBOL_GPL vmlinux 0x9833bc0c hvc_kick +EXPORT_SYMBOL_GPL vmlinux 0x98498c57 wm8350_reg_read +EXPORT_SYMBOL_GPL vmlinux 0x98503a63 mpi_alloc +EXPORT_SYMBOL_GPL vmlinux 0x985e1488 sock_diag_unregister_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0x98c36d60 usb_deregister +EXPORT_SYMBOL_GPL vmlinux 0x98cc564a regulator_set_voltage +EXPORT_SYMBOL_GPL vmlinux 0x98ce50d8 unregister_virtio_device +EXPORT_SYMBOL_GPL vmlinux 0x98e68ce8 input_ff_create +EXPORT_SYMBOL_GPL vmlinux 0x9924c496 __usb_get_extra_descriptor +EXPORT_SYMBOL_GPL vmlinux 0x993f264a ftrace_set_notrace +EXPORT_SYMBOL_GPL vmlinux 0x994748ab sata_link_resume +EXPORT_SYMBOL_GPL vmlinux 0x9952d51a ata_sas_port_destroy +EXPORT_SYMBOL_GPL vmlinux 0x995d1071 prof_on +EXPORT_SYMBOL_GPL vmlinux 0x99923400 pwm_set_polarity +EXPORT_SYMBOL_GPL vmlinux 0x99c4b788 usb_hcd_is_primary_hcd +EXPORT_SYMBOL_GPL vmlinux 0x99ffcd8d find_pid_ns +EXPORT_SYMBOL_GPL vmlinux 0x9a11a0fc crypto_attr_alg_name +EXPORT_SYMBOL_GPL vmlinux 0x9a1dc036 nfq_ct_hook +EXPORT_SYMBOL_GPL vmlinux 0x9a24e63c sdio_memcpy_toio +EXPORT_SYMBOL_GPL vmlinux 0x9a4d1034 idle_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x9a541d4e ata_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0x9a89dbf7 lpddr2_jedec_min_tck +EXPORT_SYMBOL_GPL vmlinux 0x9a905a69 bsg_request_fn +EXPORT_SYMBOL_GPL vmlinux 0x9ac11b74 suspend_set_ops +EXPORT_SYMBOL_GPL vmlinux 0x9aca444b get_monotonic_boottime +EXPORT_SYMBOL_GPL vmlinux 0x9aeacb87 ring_buffer_iter_empty +EXPORT_SYMBOL_GPL vmlinux 0x9af26e05 unix_peer_get +EXPORT_SYMBOL_GPL vmlinux 0x9afc584b dm_requeue_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0x9b02918f blk_trace_remove +EXPORT_SYMBOL_GPL vmlinux 0x9b03f6f2 extcon_update_state +EXPORT_SYMBOL_GPL vmlinux 0x9b219f7b devres_close_group +EXPORT_SYMBOL_GPL vmlinux 0x9b3271e0 PageHuge +EXPORT_SYMBOL_GPL vmlinux 0x9b4aca37 pm_generic_poweroff_noirq +EXPORT_SYMBOL_GPL vmlinux 0x9b508d70 ablkcipher_walk_done +EXPORT_SYMBOL_GPL vmlinux 0x9b75584e perf_event_refresh +EXPORT_SYMBOL_GPL vmlinux 0x9b9ef4d6 user_describe +EXPORT_SYMBOL_GPL vmlinux 0x9b9f3648 pcibios_scan_specific_bus +EXPORT_SYMBOL_GPL vmlinux 0x9ba0501e unregister_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0x9ba2bb2b gpio_request_array +EXPORT_SYMBOL_GPL vmlinux 0x9bb0039a tty_prepare_flip_string +EXPORT_SYMBOL_GPL vmlinux 0x9bcf3901 fuse_request_send +EXPORT_SYMBOL_GPL vmlinux 0x9bd72b78 apei_write +EXPORT_SYMBOL_GPL vmlinux 0x9bece81b mpi_cmp_ui +EXPORT_SYMBOL_GPL vmlinux 0x9bf5db68 anon_transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0x9c072daa posix_clock_register +EXPORT_SYMBOL_GPL vmlinux 0x9c2de449 memory_add_physaddr_to_nid +EXPORT_SYMBOL_GPL vmlinux 0x9c2e4b66 acpi_unregister_gsi +EXPORT_SYMBOL_GPL vmlinux 0x9c4e7fe9 fl6_merge_options +EXPORT_SYMBOL_GPL vmlinux 0x9c5e3e1c xenbus_alloc_evtchn +EXPORT_SYMBOL_GPL vmlinux 0x9c6594ed shake_page +EXPORT_SYMBOL_GPL vmlinux 0x9ca4c9c5 preempt_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0x9ccb1788 irq_create_direct_mapping +EXPORT_SYMBOL_GPL vmlinux 0x9cde4596 cpufreq_cpu_get +EXPORT_SYMBOL_GPL vmlinux 0x9cfd8788 pci_test_config_bits +EXPORT_SYMBOL_GPL vmlinux 0x9d06688b register_xenbus_watch +EXPORT_SYMBOL_GPL vmlinux 0x9d311c1d device_show_bool +EXPORT_SYMBOL_GPL vmlinux 0x9d3850e1 gnttab_alloc_grant_references +EXPORT_SYMBOL_GPL vmlinux 0x9d5fa4cf __inet_inherit_port +EXPORT_SYMBOL_GPL vmlinux 0x9d6d5497 ata_common_sdev_attrs +EXPORT_SYMBOL_GPL vmlinux 0x9d78b375 apei_get_debugfs_dir +EXPORT_SYMBOL_GPL vmlinux 0x9d82ee7a ipv4_redirect +EXPORT_SYMBOL_GPL vmlinux 0x9d9e155d pv_info +EXPORT_SYMBOL_GPL vmlinux 0x9dd813a3 sdio_writeb +EXPORT_SYMBOL_GPL vmlinux 0x9df622cb md_run +EXPORT_SYMBOL_GPL vmlinux 0x9e2dae6e pci_check_and_unmask_intx +EXPORT_SYMBOL_GPL vmlinux 0x9e2f29b8 tc3589x_reg_write +EXPORT_SYMBOL_GPL vmlinux 0x9e409f19 pci_enable_ats +EXPORT_SYMBOL_GPL vmlinux 0x9e69d410 blk_queue_bypass_end +EXPORT_SYMBOL_GPL vmlinux 0x9ea7192b __rio_local_read_config_8 +EXPORT_SYMBOL_GPL vmlinux 0x9eca2f20 skb_gro_receive +EXPORT_SYMBOL_GPL vmlinux 0x9ed3143c leds_list_lock +EXPORT_SYMBOL_GPL vmlinux 0x9f199b65 find_get_pid +EXPORT_SYMBOL_GPL vmlinux 0x9f391eaf netdev_set_default_ethtool_ops +EXPORT_SYMBOL_GPL vmlinux 0x9f3a4c0f da903x_write +EXPORT_SYMBOL_GPL vmlinux 0x9f4749da virtqueue_kick +EXPORT_SYMBOL_GPL vmlinux 0x9f7e7c11 usb_hcd_unmap_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0x9f7fc03c ip6_redirect +EXPORT_SYMBOL_GPL vmlinux 0x9f9599e4 sysfs_remove_bin_file +EXPORT_SYMBOL_GPL vmlinux 0x9fce80db fb_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0x9fe939e1 mpi_powm +EXPORT_SYMBOL_GPL vmlinux 0xa0051668 rtnl_af_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa016c6e4 usb_create_hcd +EXPORT_SYMBOL_GPL vmlinux 0xa02a2194 crypto_dequeue_request +EXPORT_SYMBOL_GPL vmlinux 0xa0799a22 unregister_net_sysctl_table +EXPORT_SYMBOL_GPL vmlinux 0xa090ad48 dev_pm_qos_hide_latency_limit +EXPORT_SYMBOL_GPL vmlinux 0xa0c71dac spi_populate_sync_msg +EXPORT_SYMBOL_GPL vmlinux 0xa0fa6712 fat_sync_inode +EXPORT_SYMBOL_GPL vmlinux 0xa1071545 find_symbol +EXPORT_SYMBOL_GPL vmlinux 0xa11900bf iommu_domain_free +EXPORT_SYMBOL_GPL vmlinux 0xa12d4454 usb_bus_list_lock +EXPORT_SYMBOL_GPL vmlinux 0xa1348448 init_fpu +EXPORT_SYMBOL_GPL vmlinux 0xa152fd1b sec_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xa156a1f2 erst_get_record_id_end +EXPORT_SYMBOL_GPL vmlinux 0xa19bacbc power_supply_set_battery_charged +EXPORT_SYMBOL_GPL vmlinux 0xa1a4625c inet_csk_clone_lock +EXPORT_SYMBOL_GPL vmlinux 0xa1ab212c class_interface_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa1c7eaed exportfs_encode_fh +EXPORT_SYMBOL_GPL vmlinux 0xa1e0b0e8 rtnl_link_register +EXPORT_SYMBOL_GPL vmlinux 0xa1fba493 unregister_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xa2083fc3 crypto_register_alg +EXPORT_SYMBOL_GPL vmlinux 0xa217e747 regcache_cache_only +EXPORT_SYMBOL_GPL vmlinux 0xa235c6a1 disk_get_part +EXPORT_SYMBOL_GPL vmlinux 0xa24a3497 xen_swiotlb_sync_sg_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0xa259f4c2 wm831x_auxadc_read +EXPORT_SYMBOL_GPL vmlinux 0xa272ae88 bus_find_device_by_name +EXPORT_SYMBOL_GPL vmlinux 0xa298e85c xfrm_audit_state_notfound_simple +EXPORT_SYMBOL_GPL vmlinux 0xa2da0d23 ata_cable_ignore +EXPORT_SYMBOL_GPL vmlinux 0xa2e67f08 acpi_bus_generate_proc_event4 +EXPORT_SYMBOL_GPL vmlinux 0xa310df8d led_trigger_unregister_simple +EXPORT_SYMBOL_GPL vmlinux 0xa33acdd6 da903x_reads +EXPORT_SYMBOL_GPL vmlinux 0xa353fffc xenbus_rm +EXPORT_SYMBOL_GPL vmlinux 0xa36953d0 ref_module +EXPORT_SYMBOL_GPL vmlinux 0xa38602cd drain_workqueue +EXPORT_SYMBOL_GPL vmlinux 0xa3a04602 btree_geo64 +EXPORT_SYMBOL_GPL vmlinux 0xa3aa5aa5 pid_nr_ns +EXPORT_SYMBOL_GPL vmlinux 0xa3bba6b3 ata_cable_unknown +EXPORT_SYMBOL_GPL vmlinux 0xa3e7c113 ring_buffer_iter_peek +EXPORT_SYMBOL_GPL vmlinux 0xa40c98f9 wm5110_irq +EXPORT_SYMBOL_GPL vmlinux 0xa4300296 acpi_register_gsi +EXPORT_SYMBOL_GPL vmlinux 0xa43e0fab extcon_get_cable_state +EXPORT_SYMBOL_GPL vmlinux 0xa441ad5e ata_eh_analyze_ncq_error +EXPORT_SYMBOL_GPL vmlinux 0xa452c297 hpet_mask_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa452f2a4 xen_pirq_from_irq +EXPORT_SYMBOL_GPL vmlinux 0xa4536749 fat_detach +EXPORT_SYMBOL_GPL vmlinux 0xa466de38 acpi_processor_ffh_cstate_enter +EXPORT_SYMBOL_GPL vmlinux 0xa48196c8 kdb_poll_idx +EXPORT_SYMBOL_GPL vmlinux 0xa49b5a5a dma_buf_unmap_attachment +EXPORT_SYMBOL_GPL vmlinux 0xa4a82f11 crypto_shoot_alg +EXPORT_SYMBOL_GPL vmlinux 0xa4c89e05 platform_device_add +EXPORT_SYMBOL_GPL vmlinux 0xa4ca0d4e unregister_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa4cf8ca2 inet_csk_reqsk_queue_prune +EXPORT_SYMBOL_GPL vmlinux 0xa4d58669 math_state_restore +EXPORT_SYMBOL_GPL vmlinux 0xa4e3877a ata_sas_port_stop +EXPORT_SYMBOL_GPL vmlinux 0xa513ee85 pwm_enable +EXPORT_SYMBOL_GPL vmlinux 0xa521e12e restore_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0xa52cabdf mmc_regulator_get_supply +EXPORT_SYMBOL_GPL vmlinux 0xa547b097 __crypto_alloc_tfm +EXPORT_SYMBOL_GPL vmlinux 0xa552a7f3 init_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xa563c6e9 disk_part_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xa56ca855 tracepoint_iter_stop +EXPORT_SYMBOL_GPL vmlinux 0xa573f6f9 cgroup_lock_live_group +EXPORT_SYMBOL_GPL vmlinux 0xa590f43f uhci_check_and_reset_hc +EXPORT_SYMBOL_GPL vmlinux 0xa5aa92fc regmap_read +EXPORT_SYMBOL_GPL vmlinux 0xa5ae041a usb_ep0_reinit +EXPORT_SYMBOL_GPL vmlinux 0xa5efbf4c async_synchronize_full +EXPORT_SYMBOL_GPL vmlinux 0xa621b2d3 debugfs_create_bool +EXPORT_SYMBOL_GPL vmlinux 0xa625110d kmsg_dump_rewind +EXPORT_SYMBOL_GPL vmlinux 0xa66438e8 erst_read +EXPORT_SYMBOL_GPL vmlinux 0xa69fd76f tpm_show_temp_deactivated +EXPORT_SYMBOL_GPL vmlinux 0xa6a0a273 max77693_write_reg +EXPORT_SYMBOL_GPL vmlinux 0xa6b21ef2 dpm_suspend_end +EXPORT_SYMBOL_GPL vmlinux 0xa6b6972c rtc_class_open +EXPORT_SYMBOL_GPL vmlinux 0xa6b9ac81 __inet_lookup_established +EXPORT_SYMBOL_GPL vmlinux 0xa6e1a69d kick_all_cpus_sync +EXPORT_SYMBOL_GPL vmlinux 0xa722a819 cpu_has_amd_erratum +EXPORT_SYMBOL_GPL vmlinux 0xa724257f init_uts_ns +EXPORT_SYMBOL_GPL vmlinux 0xa75312bc call_rcu_sched +EXPORT_SYMBOL_GPL vmlinux 0xa76e8535 __rio_local_read_config_32 +EXPORT_SYMBOL_GPL vmlinux 0xa76f8ef3 platform_bus +EXPORT_SYMBOL_GPL vmlinux 0xa7779b0e sata_link_scr_lpm +EXPORT_SYMBOL_GPL vmlinux 0xa7be5c9f relay_buf_full +EXPORT_SYMBOL_GPL vmlinux 0xa7c1150b __pm_runtime_disable +EXPORT_SYMBOL_GPL vmlinux 0xa7ca4fc5 smp_ops +EXPORT_SYMBOL_GPL vmlinux 0xa7cf105e __inet_hash_nolisten +EXPORT_SYMBOL_GPL vmlinux 0xa7ddc051 platform_device_del +EXPORT_SYMBOL_GPL vmlinux 0xa7f0fab1 skb_partial_csum_set +EXPORT_SYMBOL_GPL vmlinux 0xa7f92105 add_uevent_var +EXPORT_SYMBOL_GPL vmlinux 0xa8133e13 ata_pio_need_iordy +EXPORT_SYMBOL_GPL vmlinux 0xa829e132 usb_set_interface +EXPORT_SYMBOL_GPL vmlinux 0xa8686647 scsi_schedule_eh +EXPORT_SYMBOL_GPL vmlinux 0xa86e12f4 netdev_rx_handler_unregister +EXPORT_SYMBOL_GPL vmlinux 0xa8b01001 iommu_group_add_device +EXPORT_SYMBOL_GPL vmlinux 0xa8b82a53 xen_destroy_contiguous_region +EXPORT_SYMBOL_GPL vmlinux 0xa8bb15cf pci_find_next_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xa8f59416 gpio_direction_output +EXPORT_SYMBOL_GPL vmlinux 0xa9126bff hpet_set_rtc_irq_bit +EXPORT_SYMBOL_GPL vmlinux 0xa925e478 __tracepoint_rpm_return_int +EXPORT_SYMBOL_GPL vmlinux 0xa943fcd6 tty_ldisc_flush +EXPORT_SYMBOL_GPL vmlinux 0xa94c2018 crypto_alloc_instance2 +EXPORT_SYMBOL_GPL vmlinux 0xa97418ee wm8994_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xa996aa12 pci_user_write_config_byte +EXPORT_SYMBOL_GPL vmlinux 0xa9a82042 gnttab_trans_grants_available +EXPORT_SYMBOL_GPL vmlinux 0xa9c530b8 unregister_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xa9fc3f54 gnttab_grant_foreign_access_trans +EXPORT_SYMBOL_GPL vmlinux 0xa9ffd80d user_update +EXPORT_SYMBOL_GPL vmlinux 0xaa17acd0 __rio_local_write_config_32 +EXPORT_SYMBOL_GPL vmlinux 0xaa26c88a klist_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xaa3f13f7 register_acpi_hed_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa500b7a bus_get_device_klist +EXPORT_SYMBOL_GPL vmlinux 0xaa547e26 get_cpu_idle_time +EXPORT_SYMBOL_GPL vmlinux 0xaa5ea64e inode_sb_list_add +EXPORT_SYMBOL_GPL vmlinux 0xaa852c93 regulator_register_notifier +EXPORT_SYMBOL_GPL vmlinux 0xaa8b2285 watchdog_register_device +EXPORT_SYMBOL_GPL vmlinux 0xaaa918c9 ftrace_dump +EXPORT_SYMBOL_GPL vmlinux 0xaac18223 crypto_lookup_template +EXPORT_SYMBOL_GPL vmlinux 0xaaed0635 device_store_int +EXPORT_SYMBOL_GPL vmlinux 0xab01acbe gnttab_request_free_callback +EXPORT_SYMBOL_GPL vmlinux 0xab0303a8 usb_is_intel_switchable_xhci +EXPORT_SYMBOL_GPL vmlinux 0xab20a62a inet_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xab3b5ef0 device_create_vargs +EXPORT_SYMBOL_GPL vmlinux 0xab434093 iommu_attach_device +EXPORT_SYMBOL_GPL vmlinux 0xab6babaf pm_qos_request +EXPORT_SYMBOL_GPL vmlinux 0xab7e3362 irq_find_mapping +EXPORT_SYMBOL_GPL vmlinux 0xab9ae9ae pm_generic_runtime_idle +EXPORT_SYMBOL_GPL vmlinux 0xaba72f54 bsg_register_queue +EXPORT_SYMBOL_GPL vmlinux 0xabaf71bb tcp_register_congestion_control +EXPORT_SYMBOL_GPL vmlinux 0xabbec631 platform_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xabcf870d pci_intx +EXPORT_SYMBOL_GPL vmlinux 0xabd4e8de inet_csk_listen_stop +EXPORT_SYMBOL_GPL vmlinux 0xabd54e3c rt_mutex_destroy +EXPORT_SYMBOL_GPL vmlinux 0xabddd3ab debugfs_create_u64 +EXPORT_SYMBOL_GPL vmlinux 0xac636687 i2c_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xac807b7f ata_sff_hsm_move +EXPORT_SYMBOL_GPL vmlinux 0xac87a00b class_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xac9ce195 kvm_async_pf_task_wait +EXPORT_SYMBOL_GPL vmlinux 0xacafa8e7 vector_used_by_percpu_irq +EXPORT_SYMBOL_GPL vmlinux 0xacc79b4b usb_get_dev +EXPORT_SYMBOL_GPL vmlinux 0xacc8b78f usb_register_dev +EXPORT_SYMBOL_GPL vmlinux 0xacd97651 debugfs_create_u32_array +EXPORT_SYMBOL_GPL vmlinux 0xacd991bf pm_qos_add_request +EXPORT_SYMBOL_GPL vmlinux 0xace5c0fc usb_bus_list +EXPORT_SYMBOL_GPL vmlinux 0xacefda5c print_context_stack +EXPORT_SYMBOL_GPL vmlinux 0xacf4af34 bus_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xad04f26d sk_set_memalloc +EXPORT_SYMBOL_GPL vmlinux 0xad411e1b led_trigger_blink +EXPORT_SYMBOL_GPL vmlinux 0xad8d8ab0 xen_physdev_op_compat +EXPORT_SYMBOL_GPL vmlinux 0xada38534 regulator_bulk_disable +EXPORT_SYMBOL_GPL vmlinux 0xadb82b1f swiotlb_tbl_sync_single +EXPORT_SYMBOL_GPL vmlinux 0xadc785ec kgdb_register_io_module +EXPORT_SYMBOL_GPL vmlinux 0xadf6aa4d tpm_pcr_read +EXPORT_SYMBOL_GPL vmlinux 0xae0c87ee pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xae39fe04 transport_add_device +EXPORT_SYMBOL_GPL vmlinux 0xae69b1c1 usermodehelper_read_unlock +EXPORT_SYMBOL_GPL vmlinux 0xae6eaf93 hwpoison_filter_dev_minor +EXPORT_SYMBOL_GPL vmlinux 0xae775e14 wm8350_reg_lock +EXPORT_SYMBOL_GPL vmlinux 0xae7a8da6 device_for_each_child +EXPORT_SYMBOL_GPL vmlinux 0xae7c231d mpi_cmp +EXPORT_SYMBOL_GPL vmlinux 0xae7c5411 ms_hyperv +EXPORT_SYMBOL_GPL vmlinux 0xae80f6de ata_sas_queuecmd +EXPORT_SYMBOL_GPL vmlinux 0xae902e9a sysfs_remove_file_from_group +EXPORT_SYMBOL_GPL vmlinux 0xae922e6d platform_get_resource_byname +EXPORT_SYMBOL_GPL vmlinux 0xaea5fa78 crypto_hash_walk_done +EXPORT_SYMBOL_GPL vmlinux 0xaece702d class_create_file +EXPORT_SYMBOL_GPL vmlinux 0xaed767fb skcipher_geniv_exit +EXPORT_SYMBOL_GPL vmlinux 0xaee5565a tcp_set_state +EXPORT_SYMBOL_GPL vmlinux 0xaf19bbab sdio_claim_irq +EXPORT_SYMBOL_GPL vmlinux 0xaf2e4de8 wm8400_reg_read +EXPORT_SYMBOL_GPL vmlinux 0xaf535189 iommu_domain_set_attr +EXPORT_SYMBOL_GPL vmlinux 0xaf73f21a unregister_kretprobes +EXPORT_SYMBOL_GPL vmlinux 0xaf7eb3b6 map_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xaf9ff59f ipv4_sk_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0xafc87dde mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0xb01e65ec debugfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xb0287f76 mddev_resume +EXPORT_SYMBOL_GPL vmlinux 0xb03ec954 xfrm_audit_state_icvfail +EXPORT_SYMBOL_GPL vmlinux 0xb041823d set_online_page_callback +EXPORT_SYMBOL_GPL vmlinux 0xb05d467f srcu_barrier +EXPORT_SYMBOL_GPL vmlinux 0xb077f370 tty_put_char +EXPORT_SYMBOL_GPL vmlinux 0xb0aeb1cb ipv4_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0xb0b85f47 ring_buffer_iter_reset +EXPORT_SYMBOL_GPL vmlinux 0xb0d1656c gpio_free_array +EXPORT_SYMBOL_GPL vmlinux 0xb0d82980 xenbus_dev_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xb0fbedce unregister_efivars +EXPORT_SYMBOL_GPL vmlinux 0xb0fedf33 tpm_gen_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xb10d55bc cn_netlink_send +EXPORT_SYMBOL_GPL vmlinux 0xb10d96db __netpoll_setup +EXPORT_SYMBOL_GPL vmlinux 0xb11c302c blkcg_activate_policy +EXPORT_SYMBOL_GPL vmlinux 0xb1278696 xenbus_dev_is_online +EXPORT_SYMBOL_GPL vmlinux 0xb140d14c ring_buffer_read +EXPORT_SYMBOL_GPL vmlinux 0xb1425b32 dm_table_add_target_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xb18429eb suspend_device_irqs +EXPORT_SYMBOL_GPL vmlinux 0xb1acbcce rcu_barrier_sched +EXPORT_SYMBOL_GPL vmlinux 0xb1af4244 usb_autopm_get_interface +EXPORT_SYMBOL_GPL vmlinux 0xb1b5a547 blk_trace_setup +EXPORT_SYMBOL_GPL vmlinux 0xb1bed25d dpm_resume_start +EXPORT_SYMBOL_GPL vmlinux 0xb1c0ce6a crypto_unregister_template +EXPORT_SYMBOL_GPL vmlinux 0xb1e0e8d9 ata_pci_sff_prepare_host +EXPORT_SYMBOL_GPL vmlinux 0xb1e2b657 __ablkcipher_walk_complete +EXPORT_SYMBOL_GPL vmlinux 0xb1f8a90d inet6_csk_search_req +EXPORT_SYMBOL_GPL vmlinux 0xb2039ec3 hrtimer_start_range_ns +EXPORT_SYMBOL_GPL vmlinux 0xb20d1dc2 crypto_aead_type +EXPORT_SYMBOL_GPL vmlinux 0xb231f07b spi_bus_type +EXPORT_SYMBOL_GPL vmlinux 0xb24a450e ata_host_register +EXPORT_SYMBOL_GPL vmlinux 0xb26b86b6 ata_host_activate +EXPORT_SYMBOL_GPL vmlinux 0xb2e63ad1 usb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0xb2e764e8 suspend_valid_only_mem +EXPORT_SYMBOL_GPL vmlinux 0xb31eb90d md_rdev_init +EXPORT_SYMBOL_GPL vmlinux 0xb3253ed9 hpet_rtc_timer_init +EXPORT_SYMBOL_GPL vmlinux 0xb3386de7 spi_finalize_current_message +EXPORT_SYMBOL_GPL vmlinux 0xb347bb2c work_busy +EXPORT_SYMBOL_GPL vmlinux 0xb34a5462 rio_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xb406a8ee tpm_get_timeouts +EXPORT_SYMBOL_GPL vmlinux 0xb41128ff __clocksource_updatefreq_scale +EXPORT_SYMBOL_GPL vmlinux 0xb41c666d fat_attach +EXPORT_SYMBOL_GPL vmlinux 0xb43c1a2c xen_swiotlb_sync_sg_for_device +EXPORT_SYMBOL_GPL vmlinux 0xb466c621 cgroup_next_descendant_pre +EXPORT_SYMBOL_GPL vmlinux 0xb4759adc stop_machine +EXPORT_SYMBOL_GPL vmlinux 0xb477316f __fsnotify_inode_delete +EXPORT_SYMBOL_GPL vmlinux 0xb4969670 sdio_claim_host +EXPORT_SYMBOL_GPL vmlinux 0xb4aeadd0 usb_driver_set_configuration +EXPORT_SYMBOL_GPL vmlinux 0xb4aeaf50 pci_load_saved_state +EXPORT_SYMBOL_GPL vmlinux 0xb4c551cf ip6_sk_redirect +EXPORT_SYMBOL_GPL vmlinux 0xb4e14553 gnttab_query_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb4e5676e tc3589x_block_write +EXPORT_SYMBOL_GPL vmlinux 0xb4ea7cf7 kgdb_connected +EXPORT_SYMBOL_GPL vmlinux 0xb4eef8b7 acpi_dev_resume_early +EXPORT_SYMBOL_GPL vmlinux 0xb514e16b rio_request_inb_mbox +EXPORT_SYMBOL_GPL vmlinux 0xb51fbd64 edac_op_state +EXPORT_SYMBOL_GPL vmlinux 0xb53620d1 pci_vpd_find_info_keyword +EXPORT_SYMBOL_GPL vmlinux 0xb54d56eb ata_pci_device_resume +EXPORT_SYMBOL_GPL vmlinux 0xb562b401 crypto_register_template +EXPORT_SYMBOL_GPL vmlinux 0xb57696cf pci_disable_rom +EXPORT_SYMBOL_GPL vmlinux 0xb58dcfa2 synchronize_sched_expedited +EXPORT_SYMBOL_GPL vmlinux 0xb5a0e11e lpddr2_jedec_addressing_table +EXPORT_SYMBOL_GPL vmlinux 0xb5b170b9 crypto_register_shash +EXPORT_SYMBOL_GPL vmlinux 0xb5b33ba1 srcu_notifier_chain_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb5b9cc2a kill_pid_info_as_cred +EXPORT_SYMBOL_GPL vmlinux 0xb5cb8145 hrtimer_get_res +EXPORT_SYMBOL_GPL vmlinux 0xb5e349ec ata_cable_40wire +EXPORT_SYMBOL_GPL vmlinux 0xb5f17edf perf_register_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xb5f521dd md_new_event +EXPORT_SYMBOL_GPL vmlinux 0xb6169847 ata_bmdma_stop +EXPORT_SYMBOL_GPL vmlinux 0xb6230f1f gnttab_grant_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xb67b2219 cm_suspend_again +EXPORT_SYMBOL_GPL vmlinux 0xb681a313 rtc_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xb69d191d free_vm_area +EXPORT_SYMBOL_GPL vmlinux 0xb6aeb661 ata_id_c_string +EXPORT_SYMBOL_GPL vmlinux 0xb6c5e46b pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0xb6cef853 acpi_power_resource_unregister_device +EXPORT_SYMBOL_GPL vmlinux 0xb718f2f9 sfi_table_parse +EXPORT_SYMBOL_GPL vmlinux 0xb7364885 pm_generic_poweroff +EXPORT_SYMBOL_GPL vmlinux 0xb771e961 class_dev_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xb787e2e4 usb_get_intf +EXPORT_SYMBOL_GPL vmlinux 0xb79e84bb __fib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb7ae82a8 tty_mode_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xb7b52c7f devm_pwm_get +EXPORT_SYMBOL_GPL vmlinux 0xb7b56f53 modify_user_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xb7bac66c blkg_prfill_stat +EXPORT_SYMBOL_GPL vmlinux 0xb7d7c12e hpet_set_alarm_time +EXPORT_SYMBOL_GPL vmlinux 0xb7ebc0d2 btree_merge +EXPORT_SYMBOL_GPL vmlinux 0xb7f77027 rtc_tm_to_ktime +EXPORT_SYMBOL_GPL vmlinux 0xb813a8b2 virtqueue_disable_cb +EXPORT_SYMBOL_GPL vmlinux 0xb854012d tcp_reno_ssthresh +EXPORT_SYMBOL_GPL vmlinux 0xb88219c7 tpm_pm_suspend +EXPORT_SYMBOL_GPL vmlinux 0xb88f7c94 usb_put_dev +EXPORT_SYMBOL_GPL vmlinux 0xb8ba9375 tty_init_termios +EXPORT_SYMBOL_GPL vmlinux 0xb8d93d09 sdio_release_irq +EXPORT_SYMBOL_GPL vmlinux 0xb903674c scatterwalk_map_and_copy +EXPORT_SYMBOL_GPL vmlinux 0xb90b5f1c fat_alloc_new_dir +EXPORT_SYMBOL_GPL vmlinux 0xb911bb13 crypto_alg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xb94db510 register_jprobe +EXPORT_SYMBOL_GPL vmlinux 0xb9690a25 rtc_update_irq +EXPORT_SYMBOL_GPL vmlinux 0xb98785d3 fat_fill_super +EXPORT_SYMBOL_GPL vmlinux 0xb99d5837 xenbus_read +EXPORT_SYMBOL_GPL vmlinux 0xb9b9df41 usb_amd_dev_put +EXPORT_SYMBOL_GPL vmlinux 0xb9bd7013 dma_buf_map_attachment +EXPORT_SYMBOL_GPL vmlinux 0xb9c425de register_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0xb9d025c9 llist_del_first +EXPORT_SYMBOL_GPL vmlinux 0xb9f5ec97 crypto_spawn_tfm +EXPORT_SYMBOL_GPL vmlinux 0xba217bbd extcon_find_cable_index +EXPORT_SYMBOL_GPL vmlinux 0xba418452 xen_swiotlb_map_sg_attrs +EXPORT_SYMBOL_GPL vmlinux 0xba576414 rio_release_dma +EXPORT_SYMBOL_GPL vmlinux 0xba658017 inet_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xba99fd87 gnttab_map_refs +EXPORT_SYMBOL_GPL vmlinux 0xbabd9979 acpi_get_pci_dev +EXPORT_SYMBOL_GPL vmlinux 0xbacc6d65 usb_sg_init +EXPORT_SYMBOL_GPL vmlinux 0xbb038ce4 perf_unregister_guest_info_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xbb0ab47b debug_locks +EXPORT_SYMBOL_GPL vmlinux 0xbb0bbb82 acpi_dev_resource_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xbb0e29b5 driver_register +EXPORT_SYMBOL_GPL vmlinux 0xbb128381 irq_set_affinity_hint +EXPORT_SYMBOL_GPL vmlinux 0xbb2152c0 fat_getattr +EXPORT_SYMBOL_GPL vmlinux 0xbb2c64f8 unregister_virtio_driver +EXPORT_SYMBOL_GPL vmlinux 0xbb354981 cpci_hp_register_bus +EXPORT_SYMBOL_GPL vmlinux 0xbb40617e pm_generic_thaw +EXPORT_SYMBOL_GPL vmlinux 0xbb78bb39 raw_seq_next +EXPORT_SYMBOL_GPL vmlinux 0xbb7b2fe0 transport_destroy_device +EXPORT_SYMBOL_GPL vmlinux 0xbb882c19 rio_mport_send_doorbell +EXPORT_SYMBOL_GPL vmlinux 0xbba55f51 blkg_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbbb38239 btree_last +EXPORT_SYMBOL_GPL vmlinux 0xbbb98859 edid_info +EXPORT_SYMBOL_GPL vmlinux 0xbbfa61dd tcp_peer_is_proven +EXPORT_SYMBOL_GPL vmlinux 0xbc0f9881 regmap_reinit_cache +EXPORT_SYMBOL_GPL vmlinux 0xbc3fea74 __pm_runtime_set_status +EXPORT_SYMBOL_GPL vmlinux 0xbc4e8d8e tcp_death_row +EXPORT_SYMBOL_GPL vmlinux 0xbc56f7bb vfs_removexattr +EXPORT_SYMBOL_GPL vmlinux 0xbc5da570 scsi_autopm_get_device +EXPORT_SYMBOL_GPL vmlinux 0xbc6f931b workqueue_congested +EXPORT_SYMBOL_GPL vmlinux 0xbc729de0 fl6_sock_lookup +EXPORT_SYMBOL_GPL vmlinux 0xbc7a893e __hvc_resize +EXPORT_SYMBOL_GPL vmlinux 0xbc8774e0 acpi_pci_check_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xbc90f4ed regulator_set_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0xbca3ac23 iommu_group_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xbcb838a1 amd_flush_garts +EXPORT_SYMBOL_GPL vmlinux 0xbccfd4d8 register_oldmem_pfn_is_ram +EXPORT_SYMBOL_GPL vmlinux 0xbcd4b0b0 crypto_alloc_ablkcipher +EXPORT_SYMBOL_GPL vmlinux 0xbcdd5b99 iommu_group_set_name +EXPORT_SYMBOL_GPL vmlinux 0xbcde39fc dev_pm_get_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0xbcf9d28a ip6_sk_dst_lookup_flow +EXPORT_SYMBOL_GPL vmlinux 0xbd03fe16 da9052_enable_irq +EXPORT_SYMBOL_GPL vmlinux 0xbd06c33f cgroup_add_cftypes +EXPORT_SYMBOL_GPL vmlinux 0xbd0ad90e edac_get_sysfs_subsys +EXPORT_SYMBOL_GPL vmlinux 0xbd3b7fb5 ata_eh_qc_retry +EXPORT_SYMBOL_GPL vmlinux 0xbd506a46 unregister_hotplug_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xbd5cb8b9 ring_buffer_resize +EXPORT_SYMBOL_GPL vmlinux 0xbd759df4 stmpe_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xbdaf5686 get_compat_timeval +EXPORT_SYMBOL_GPL vmlinux 0xbdb5cbf9 spi_alloc_device +EXPORT_SYMBOL_GPL vmlinux 0xbdd295f0 trace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xbdd2f42a rcu_bh_force_quiescent_state +EXPORT_SYMBOL_GPL vmlinux 0xbdd5f10f apei_hest_parse +EXPORT_SYMBOL_GPL vmlinux 0xbe10e034 usb_get_current_frame_number +EXPORT_SYMBOL_GPL vmlinux 0xbe1887e4 ata_unpack_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xbe478da0 virtqueue_notify +EXPORT_SYMBOL_GPL vmlinux 0xbe7495c0 regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xbe8c1c31 crypto_rng_type +EXPORT_SYMBOL_GPL vmlinux 0xbe989eaf pci_user_read_config_word +EXPORT_SYMBOL_GPL vmlinux 0xbec0f418 anon_inode_getfile +EXPORT_SYMBOL_GPL vmlinux 0xbed20d9a __wake_up_locked_key +EXPORT_SYMBOL_GPL vmlinux 0xbefded1b trace_define_field +EXPORT_SYMBOL_GPL vmlinux 0xbf199aab register_efivars +EXPORT_SYMBOL_GPL vmlinux 0xbf3e0a04 fuse_conn_init +EXPORT_SYMBOL_GPL vmlinux 0xbf6a38c9 generic_fh_to_parent +EXPORT_SYMBOL_GPL vmlinux 0xbf79dee0 pci_user_write_config_word +EXPORT_SYMBOL_GPL vmlinux 0xbf7b7e0d serial8250_modem_status +EXPORT_SYMBOL_GPL vmlinux 0xbf8001dc inet6_hash_connect +EXPORT_SYMBOL_GPL vmlinux 0xbfbc5434 pciserial_resume_ports +EXPORT_SYMBOL_GPL vmlinux 0xbfc06c9d wait_for_tpm_stat +EXPORT_SYMBOL_GPL vmlinux 0xbfcfdf51 mnt_clone_write +EXPORT_SYMBOL_GPL vmlinux 0xbffde8ec compat_alloc_user_space +EXPORT_SYMBOL_GPL vmlinux 0xc056f9b1 scsi_eh_ready_devs +EXPORT_SYMBOL_GPL vmlinux 0xc08647ff ring_buffer_bytes_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc0900fcf acpi_os_get_iomem +EXPORT_SYMBOL_GPL vmlinux 0xc09c729a mod_delayed_work +EXPORT_SYMBOL_GPL vmlinux 0xc0a97e93 pwm_request +EXPORT_SYMBOL_GPL vmlinux 0xc0b0e6ec btree_grim_visitor +EXPORT_SYMBOL_GPL vmlinux 0xc0bf6ead timecounter_cyc2time +EXPORT_SYMBOL_GPL vmlinux 0xc0d26387 kmsg_dump_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc0df819d crypto_alloc_pcomp +EXPORT_SYMBOL_GPL vmlinux 0xc10f2b8e cgroup_unlock +EXPORT_SYMBOL_GPL vmlinux 0xc11bd00f tracepoint_probe_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc1447070 dma_buf_export +EXPORT_SYMBOL_GPL vmlinux 0xc14c2824 xenbus_probe +EXPORT_SYMBOL_GPL vmlinux 0xc164642e xenbus_otherend_changed +EXPORT_SYMBOL_GPL vmlinux 0xc17515d7 usb_hcds_loaded +EXPORT_SYMBOL_GPL vmlinux 0xc184fc92 sock_diag_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc194126d power_supply_register +EXPORT_SYMBOL_GPL vmlinux 0xc1a44553 usb_alloc_streams +EXPORT_SYMBOL_GPL vmlinux 0xc1b40ef4 wm8350_device_init +EXPORT_SYMBOL_GPL vmlinux 0xc1bbb6e3 usb_altnum_to_altsetting +EXPORT_SYMBOL_GPL vmlinux 0xc1d119c6 __clocksource_register_scale +EXPORT_SYMBOL_GPL vmlinux 0xc1edbc87 dma_buf_get +EXPORT_SYMBOL_GPL vmlinux 0xc20327c5 pm_generic_restore_early +EXPORT_SYMBOL_GPL vmlinux 0xc20399e1 cpufreq_cpu_put +EXPORT_SYMBOL_GPL vmlinux 0xc220207b task_current_syscall +EXPORT_SYMBOL_GPL vmlinux 0xc22a3091 vm_unmap_aliases +EXPORT_SYMBOL_GPL vmlinux 0xc22ebe96 perf_event_create_kernel_counter +EXPORT_SYMBOL_GPL vmlinux 0xc26351f8 bind_evtchn_to_irq +EXPORT_SYMBOL_GPL vmlinux 0xc27448cd acpi_subsys_prepare +EXPORT_SYMBOL_GPL vmlinux 0xc27d9d8e devm_regmap_init +EXPORT_SYMBOL_GPL vmlinux 0xc280fb46 kdb_register +EXPORT_SYMBOL_GPL vmlinux 0xc2830c7f blocking_notifier_chain_register +EXPORT_SYMBOL_GPL vmlinux 0xc2bda0d3 usb_unlocked_disable_lpm +EXPORT_SYMBOL_GPL vmlinux 0xc2d07d10 shash_register_instance +EXPORT_SYMBOL_GPL vmlinux 0xc3192888 shash_ahash_digest +EXPORT_SYMBOL_GPL vmlinux 0xc341ae6d zs_map_object +EXPORT_SYMBOL_GPL vmlinux 0xc34efe27 snmp_fold_field +EXPORT_SYMBOL_GPL vmlinux 0xc37226a5 tpm_pcr_extend +EXPORT_SYMBOL_GPL vmlinux 0xc38cd6e5 md_is_badblock +EXPORT_SYMBOL_GPL vmlinux 0xc3bf2479 virtqueue_get_vring_size +EXPORT_SYMBOL_GPL vmlinux 0xc4034caa enable_kprobe +EXPORT_SYMBOL_GPL vmlinux 0xc404f9e5 sg_scsi_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xc42179a5 pm_runtime_barrier +EXPORT_SYMBOL_GPL vmlinux 0xc428068d sata_deb_timing_long +EXPORT_SYMBOL_GPL vmlinux 0xc454fc7b twl_get_type +EXPORT_SYMBOL_GPL vmlinux 0xc471c67a twl4030_audio_disable_resource +EXPORT_SYMBOL_GPL vmlinux 0xc48b7ccf ata_mode_string +EXPORT_SYMBOL_GPL vmlinux 0xc4ce6189 idle_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4f4628c pwm_request_from_chip +EXPORT_SYMBOL_GPL vmlinux 0xc4f772d5 root_device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc4fe80ea devm_regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0xc501ffd4 da903x_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xc512626a __supported_pte_mask +EXPORT_SYMBOL_GPL vmlinux 0xc514c0bd ata_link_offline +EXPORT_SYMBOL_GPL vmlinux 0xc5287af0 pwmchip_remove +EXPORT_SYMBOL_GPL vmlinux 0xc5397da6 xenbus_mkdir +EXPORT_SYMBOL_GPL vmlinux 0xc55d9aa8 blk_unprep_request +EXPORT_SYMBOL_GPL vmlinux 0xc59beadf swiotlb_tbl_map_single +EXPORT_SYMBOL_GPL vmlinux 0xc5c264a5 amd_erratum_400 +EXPORT_SYMBOL_GPL vmlinux 0xc5d9d8e3 tty_buffer_request_room +EXPORT_SYMBOL_GPL vmlinux 0xc60f75ec __ftrace_vprintk +EXPORT_SYMBOL_GPL vmlinux 0xc617b701 ata_sff_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xc61afe4b sysfs_notify +EXPORT_SYMBOL_GPL vmlinux 0xc622412b __module_address +EXPORT_SYMBOL_GPL vmlinux 0xc63d1360 acpi_dev_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xc64375f9 inet_csk_compat_setsockopt +EXPORT_SYMBOL_GPL vmlinux 0xc64a1797 uart_set_options +EXPORT_SYMBOL_GPL vmlinux 0xc6531cd4 inet_putpeer +EXPORT_SYMBOL_GPL vmlinux 0xc65d3eed ring_buffer_entries_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc66b77b1 iommu_group_set_iommudata +EXPORT_SYMBOL_GPL vmlinux 0xc66b93cd posix_timers_register_clock +EXPORT_SYMBOL_GPL vmlinux 0xc6764a8a iommu_iova_to_phys +EXPORT_SYMBOL_GPL vmlinux 0xc6888635 cpufreq_register_driver +EXPORT_SYMBOL_GPL vmlinux 0xc69b7ee5 zs_destroy_pool +EXPORT_SYMBOL_GPL vmlinux 0xc6a2a4fb posix_clock_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc6ad64c7 regulator_get_bypass_regmap +EXPORT_SYMBOL_GPL vmlinux 0xc6be4e8d blk_queue_rq_timed_out +EXPORT_SYMBOL_GPL vmlinux 0xc6d134ea i2c_lock_adapter +EXPORT_SYMBOL_GPL vmlinux 0xc6d7ad42 wakeup_source_drop +EXPORT_SYMBOL_GPL vmlinux 0xc6e091e0 arizona_dev_exit +EXPORT_SYMBOL_GPL vmlinux 0xc6e25e99 tracepoint_iter_start +EXPORT_SYMBOL_GPL vmlinux 0xc6e2e85e simple_attr_write +EXPORT_SYMBOL_GPL vmlinux 0xc6fa35f1 xenbus_bind_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xc7002ac4 evtchn_make_refcounted +EXPORT_SYMBOL_GPL vmlinux 0xc72a335a md_allow_write +EXPORT_SYMBOL_GPL vmlinux 0xc72e1233 __trace_bprintk +EXPORT_SYMBOL_GPL vmlinux 0xc753a75b crypto_shash_update +EXPORT_SYMBOL_GPL vmlinux 0xc7647b59 jump_label_rate_limit +EXPORT_SYMBOL_GPL vmlinux 0xc768ca86 fuse_direct_io +EXPORT_SYMBOL_GPL vmlinux 0xc7a1840e llist_add_batch +EXPORT_SYMBOL_GPL vmlinux 0xc7a59bf1 __pm_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xc7b7e1aa driver_find +EXPORT_SYMBOL_GPL vmlinux 0xc7c6391c mpi_set_buffer +EXPORT_SYMBOL_GPL vmlinux 0xc7e39bca ring_buffer_dropped_events_cpu +EXPORT_SYMBOL_GPL vmlinux 0xc7fea454 iommu_attach_group +EXPORT_SYMBOL_GPL vmlinux 0xc834abb3 cgroup_attach_task_all +EXPORT_SYMBOL_GPL vmlinux 0xc835559e ata_host_detach +EXPORT_SYMBOL_GPL vmlinux 0xc8411617 preempt_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xc84a3e68 platform_device_register_full +EXPORT_SYMBOL_GPL vmlinux 0xc850c7c8 debugfs_print_regs32 +EXPORT_SYMBOL_GPL vmlinux 0xc85ad4a5 __pm_stay_awake +EXPORT_SYMBOL_GPL vmlinux 0xc87c1f84 ktime_get +EXPORT_SYMBOL_GPL vmlinux 0xc87e487a sched_clock_idle_sleep_event +EXPORT_SYMBOL_GPL vmlinux 0xc88c306e evm_inode_init_security +EXPORT_SYMBOL_GPL vmlinux 0xc899c0f2 wakeup_source_remove +EXPORT_SYMBOL_GPL vmlinux 0xc8add232 ring_buffer_record_disable +EXPORT_SYMBOL_GPL vmlinux 0xc8cb2be4 __css_put +EXPORT_SYMBOL_GPL vmlinux 0xc8da5d1b get_net_ns_by_pid +EXPORT_SYMBOL_GPL vmlinux 0xc906f08c tpm_bios_log_setup +EXPORT_SYMBOL_GPL vmlinux 0xc91277a1 kgdb_schedule_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xc92e8880 fb_deferred_io_open +EXPORT_SYMBOL_GPL vmlinux 0xc9306c6b blkg_prfill_rwstat +EXPORT_SYMBOL_GPL vmlinux 0xc9561772 fb_destroy_modelist +EXPORT_SYMBOL_GPL vmlinux 0xc9641b48 visitor32 +EXPORT_SYMBOL_GPL vmlinux 0xc99e8fc4 ata_sff_port_ops +EXPORT_SYMBOL_GPL vmlinux 0xc9a26ea2 rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xc9c3f176 hpet_register_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xc9dc571f pci_restore_msi_state +EXPORT_SYMBOL_GPL vmlinux 0xc9ec4e21 free_percpu +EXPORT_SYMBOL_GPL vmlinux 0xca1a50ea regulator_register +EXPORT_SYMBOL_GPL vmlinux 0xca4d5669 serial8250_release_dma +EXPORT_SYMBOL_GPL vmlinux 0xca6deb6d perf_event_enable +EXPORT_SYMBOL_GPL vmlinux 0xca7d8764 kthread_freezable_should_stop +EXPORT_SYMBOL_GPL vmlinux 0xca81ea9a xenbus_transaction_end +EXPORT_SYMBOL_GPL vmlinux 0xca85d8cf tracepoint_probe_update_all +EXPORT_SYMBOL_GPL vmlinux 0xca93b559 user_destroy +EXPORT_SYMBOL_GPL vmlinux 0xcabe04de cpuidle_resume_and_unlock +EXPORT_SYMBOL_GPL vmlinux 0xcae036a0 regulator_map_voltage_iterate +EXPORT_SYMBOL_GPL vmlinux 0xcb15eee9 sdhci_pci_get_data +EXPORT_SYMBOL_GPL vmlinux 0xcb20681c ata_host_alloc +EXPORT_SYMBOL_GPL vmlinux 0xcb39fa42 rtc_read_time +EXPORT_SYMBOL_GPL vmlinux 0xcb5ba3b8 pci_reset_function +EXPORT_SYMBOL_GPL vmlinux 0xcb7122d2 sysfs_remove_group +EXPORT_SYMBOL_GPL vmlinux 0xcba5b7d8 led_classdev_unregister +EXPORT_SYMBOL_GPL vmlinux 0xcbde4560 tpm_show_durations +EXPORT_SYMBOL_GPL vmlinux 0xcbee20b2 get_cpu_iowait_time_us +EXPORT_SYMBOL_GPL vmlinux 0xcc01a2b2 i2c_new_dummy +EXPORT_SYMBOL_GPL vmlinux 0xcc140ceb pci_user_read_config_byte +EXPORT_SYMBOL_GPL vmlinux 0xcc182b71 xenbus_unregister_driver +EXPORT_SYMBOL_GPL vmlinux 0xcc1f1c3d inet_twdr_hangman +EXPORT_SYMBOL_GPL vmlinux 0xcc2e8c93 kernel_kobj +EXPORT_SYMBOL_GPL vmlinux 0xcc3b1fc3 tps6586x_read +EXPORT_SYMBOL_GPL vmlinux 0xcc3da32d aer_recover_queue +EXPORT_SYMBOL_GPL vmlinux 0xcc573f8c tpm_read +EXPORT_SYMBOL_GPL vmlinux 0xcc6ab305 is_dock_device +EXPORT_SYMBOL_GPL vmlinux 0xcc805547 tpm_calc_ordinal_duration +EXPORT_SYMBOL_GPL vmlinux 0xccb25ac4 scsi_target_block +EXPORT_SYMBOL_GPL vmlinux 0xcccfb2fa sata_deb_timing_hotplug +EXPORT_SYMBOL_GPL vmlinux 0xccdcc468 debugfs_rename +EXPORT_SYMBOL_GPL vmlinux 0xccea4e34 perf_get_x86_pmu_capability +EXPORT_SYMBOL_GPL vmlinux 0xcd284b71 ata_noop_qc_prep +EXPORT_SYMBOL_GPL vmlinux 0xcd2a67f8 __blk_put_request +EXPORT_SYMBOL_GPL vmlinux 0xcd4d7844 blkcg_deactivate_policy +EXPORT_SYMBOL_GPL vmlinux 0xcd68b567 xfrm_audit_policy_add +EXPORT_SYMBOL_GPL vmlinux 0xcd91b127 system_highpri_wq +EXPORT_SYMBOL_GPL vmlinux 0xcd95fa1e regmap_get_val_bytes +EXPORT_SYMBOL_GPL vmlinux 0xcda799b7 ata_link_online +EXPORT_SYMBOL_GPL vmlinux 0xcdae116b register_pernet_device +EXPORT_SYMBOL_GPL vmlinux 0xcdca3691 nr_irqs +EXPORT_SYMBOL_GPL vmlinux 0xcdd87c94 pci_enable_pasid +EXPORT_SYMBOL_GPL vmlinux 0xcddfcbad ata_sff_freeze +EXPORT_SYMBOL_GPL vmlinux 0xcdfbb3db blkg_lookup_create +EXPORT_SYMBOL_GPL vmlinux 0xce0b9b59 max77693_read_reg +EXPORT_SYMBOL_GPL vmlinux 0xce46e140 ktime_get_ts +EXPORT_SYMBOL_GPL vmlinux 0xce4c1b4c dma_buf_begin_cpu_access +EXPORT_SYMBOL_GPL vmlinux 0xce666878 bsg_setup_queue +EXPORT_SYMBOL_GPL vmlinux 0xce6a9d9a trace_current_buffer_discard_commit +EXPORT_SYMBOL_GPL vmlinux 0xce98d28c xenbus_read_otherend_details +EXPORT_SYMBOL_GPL vmlinux 0xceb1f126 mpi_read_raw_data +EXPORT_SYMBOL_GPL vmlinux 0xcec2d9e9 rio_local_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0xcee1641c kgdb_unregister_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0xceea60f8 dev_pm_qos_remove_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcef1dd0e perf_check_microcode +EXPORT_SYMBOL_GPL vmlinux 0xcf0536ca sysfs_get_dirent +EXPORT_SYMBOL_GPL vmlinux 0xcf16209d wm8994_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xcf21ce92 relay_file_operations +EXPORT_SYMBOL_GPL vmlinux 0xcf223123 shmem_read_mapping_page_gfp +EXPORT_SYMBOL_GPL vmlinux 0xcf6f5d88 synchronize_srcu +EXPORT_SYMBOL_GPL vmlinux 0xcf7a6ae5 hvc_alloc +EXPORT_SYMBOL_GPL vmlinux 0xcf8f5205 remove_irq +EXPORT_SYMBOL_GPL vmlinux 0xcfa39eca __tracepoint_rpm_suspend +EXPORT_SYMBOL_GPL vmlinux 0xcfacf372 kobject_uevent +EXPORT_SYMBOL_GPL vmlinux 0xcfb48802 ata_wait_register +EXPORT_SYMBOL_GPL vmlinux 0xcfb5871c irq_work_queue +EXPORT_SYMBOL_GPL vmlinux 0xcfb72b1e inet6_lookup +EXPORT_SYMBOL_GPL vmlinux 0xcfc5b048 ata_sff_dma_pause +EXPORT_SYMBOL_GPL vmlinux 0xcfc62f27 xen_start_info +EXPORT_SYMBOL_GPL vmlinux 0xcfc68341 synchronize_rcu_bh +EXPORT_SYMBOL_GPL vmlinux 0xcfc7bbf1 xen_swiotlb_alloc_coherent +EXPORT_SYMBOL_GPL vmlinux 0xcfcc83ad register_vt_notifier +EXPORT_SYMBOL_GPL vmlinux 0xcfde5862 __pm_relax +EXPORT_SYMBOL_GPL vmlinux 0xcfe0821f sysfs_update_group +EXPORT_SYMBOL_GPL vmlinux 0xcffa2aff spi_populate_width_msg +EXPORT_SYMBOL_GPL vmlinux 0xd03c7700 secure_ipv4_port_ephemeral +EXPORT_SYMBOL_GPL vmlinux 0xd0458ccb xenbus_strstate +EXPORT_SYMBOL_GPL vmlinux 0xd091ca57 posix_timer_event +EXPORT_SYMBOL_GPL vmlinux 0xd09e0688 wm831x_device_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xd0c05159 emergency_restart +EXPORT_SYMBOL_GPL vmlinux 0xd0d86765 sysfs_create_files +EXPORT_SYMBOL_GPL vmlinux 0xd0e2c081 xenbus_unmap_ring +EXPORT_SYMBOL_GPL vmlinux 0xd1017c18 input_ff_destroy +EXPORT_SYMBOL_GPL vmlinux 0xd1022198 wm5110_patch +EXPORT_SYMBOL_GPL vmlinux 0xd149bf4c pci_hp_remove_module_link +EXPORT_SYMBOL_GPL vmlinux 0xd14bc4d9 sock_diag_save_cookie +EXPORT_SYMBOL_GPL vmlinux 0xd1507e59 erst_clear +EXPORT_SYMBOL_GPL vmlinux 0xd16712f3 crypto_check_attr_type +EXPORT_SYMBOL_GPL vmlinux 0xd1731489 crypto_mod_put +EXPORT_SYMBOL_GPL vmlinux 0xd17fbeca pm_runtime_allow +EXPORT_SYMBOL_GPL vmlinux 0xd1b2db37 tracepoint_probe_register_noupdate +EXPORT_SYMBOL_GPL vmlinux 0xd1bb0ee7 adp5520_read +EXPORT_SYMBOL_GPL vmlinux 0xd1bf7deb zap_vma_ptes +EXPORT_SYMBOL_GPL vmlinux 0xd1cbefcf ata_pci_device_do_suspend +EXPORT_SYMBOL_GPL vmlinux 0xd1d3b5ca user_match +EXPORT_SYMBOL_GPL vmlinux 0xd208f4c5 da9055_regmap_config +EXPORT_SYMBOL_GPL vmlinux 0xd20bf6ba dcookie_unregister +EXPORT_SYMBOL_GPL vmlinux 0xd21022f8 __pm_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xd217e9e6 trace_set_clr_event +EXPORT_SYMBOL_GPL vmlinux 0xd219d44f xen_swiotlb_free_coherent +EXPORT_SYMBOL_GPL vmlinux 0xd23cfd3e fsnotify +EXPORT_SYMBOL_GPL vmlinux 0xd25df54a sock_diag_register_inet_compat +EXPORT_SYMBOL_GPL vmlinux 0xd273b1b1 __round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xd2a8caf0 work_on_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd2b85795 register_ftrace_function +EXPORT_SYMBOL_GPL vmlinux 0xd2c58ab2 apei_exec_noop +EXPORT_SYMBOL_GPL vmlinux 0xd2cbc658 x86_platform +EXPORT_SYMBOL_GPL vmlinux 0xd2dd5eeb ata_sff_port_intr +EXPORT_SYMBOL_GPL vmlinux 0xd3082b8f dev_attr_sw_activity +EXPORT_SYMBOL_GPL vmlinux 0xd32fe193 ata_scsi_change_queue_depth +EXPORT_SYMBOL_GPL vmlinux 0xd3400750 xen_remap_domain_mfn_range +EXPORT_SYMBOL_GPL vmlinux 0xd37e13b4 regulator_set_optimum_mode +EXPORT_SYMBOL_GPL vmlinux 0xd39750f0 tcp_is_cwnd_limited +EXPORT_SYMBOL_GPL vmlinux 0xd3aa2603 ata_sff_wait_after_reset +EXPORT_SYMBOL_GPL vmlinux 0xd3afadb7 regmap_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0xd3c1baf3 xenbus_free_evtchn +EXPORT_SYMBOL_GPL vmlinux 0xd3c47d84 crypto_larval_alloc +EXPORT_SYMBOL_GPL vmlinux 0xd3ce6acc ata_bmdma_start +EXPORT_SYMBOL_GPL vmlinux 0xd4034828 system_freezable_wq +EXPORT_SYMBOL_GPL vmlinux 0xd41aa1a9 tun_get_socket +EXPORT_SYMBOL_GPL vmlinux 0xd426dbc4 erst_get_record_count +EXPORT_SYMBOL_GPL vmlinux 0xd44a5eac kgdb_register_nmi_console +EXPORT_SYMBOL_GPL vmlinux 0xd465931c adp5520_clr_bits +EXPORT_SYMBOL_GPL vmlinux 0xd47af2a5 regmap_update_bits_check +EXPORT_SYMBOL_GPL vmlinux 0xd4c14632 system_unbound_wq +EXPORT_SYMBOL_GPL vmlinux 0xd4e20ada crypto_unregister_alg +EXPORT_SYMBOL_GPL vmlinux 0xd4e98621 pci_sriov_get_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0xd53bc067 atomic_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xd55a37a3 led_trigger_event +EXPORT_SYMBOL_GPL vmlinux 0xd55ad93b iommu_group_get_iommudata +EXPORT_SYMBOL_GPL vmlinux 0xd59668e6 unlock_flocks +EXPORT_SYMBOL_GPL vmlinux 0xd5bd7dac ring_buffer_record_enable_cpu +EXPORT_SYMBOL_GPL vmlinux 0xd5fc206b vfs_truncate +EXPORT_SYMBOL_GPL vmlinux 0xd60d30a2 rtnl_put_cacheinfo +EXPORT_SYMBOL_GPL vmlinux 0xd64e77c3 sdio_disable_func +EXPORT_SYMBOL_GPL vmlinux 0xd66b6dc6 inet_twsk_purge +EXPORT_SYMBOL_GPL vmlinux 0xd67364f7 eventfd_ctx_fdget +EXPORT_SYMBOL_GPL vmlinux 0xd68618d9 ata_do_eh +EXPORT_SYMBOL_GPL vmlinux 0xd6c48cf8 acpi_ec_remove_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xd6da0170 lp8788_read_byte +EXPORT_SYMBOL_GPL vmlinux 0xd6e4c009 sdio_writeb_readb +EXPORT_SYMBOL_GPL vmlinux 0xd6ed3a8e cper_next_record_id +EXPORT_SYMBOL_GPL vmlinux 0xd6feefa5 agp_num_entries +EXPORT_SYMBOL_GPL vmlinux 0xd705b4c7 schedule_hrtimeout +EXPORT_SYMBOL_GPL vmlinux 0xd70c0857 ata_scsi_port_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xd71cd8f8 ata_qc_complete +EXPORT_SYMBOL_GPL vmlinux 0xd72feba2 xenbus_read_driver_state +EXPORT_SYMBOL_GPL vmlinux 0xd768e985 regulator_has_full_constraints +EXPORT_SYMBOL_GPL vmlinux 0xd77142c1 unuse_mm +EXPORT_SYMBOL_GPL vmlinux 0xd77c0bc8 klist_remove +EXPORT_SYMBOL_GPL vmlinux 0xd7826c2c relay_open +EXPORT_SYMBOL_GPL vmlinux 0xd7cfb4d8 device_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xd7d79132 put_online_cpus +EXPORT_SYMBOL_GPL vmlinux 0xd7fa8cb0 net_ns_type_operations +EXPORT_SYMBOL_GPL vmlinux 0xd81de62c ring_buffer_record_enable +EXPORT_SYMBOL_GPL vmlinux 0xd820c283 eventfd_ctx_remove_wait_queue +EXPORT_SYMBOL_GPL vmlinux 0xd83cf545 pm_runtime_no_callbacks +EXPORT_SYMBOL_GPL vmlinux 0xd8525ea7 fl6_update_dst +EXPORT_SYMBOL_GPL vmlinux 0xd85ac634 regulator_put +EXPORT_SYMBOL_GPL vmlinux 0xd87601cc ring_buffer_unlock_commit +EXPORT_SYMBOL_GPL vmlinux 0xd8a0f386 sk_setup_caps +EXPORT_SYMBOL_GPL vmlinux 0xd8a471b8 cpufreq_freq_attr_scaling_available_freqs +EXPORT_SYMBOL_GPL vmlinux 0xd8d15618 __put_task_struct +EXPORT_SYMBOL_GPL vmlinux 0xd8f8bbb1 fb_deferred_io_cleanup +EXPORT_SYMBOL_GPL vmlinux 0xd905be69 cleanup_srcu_struct +EXPORT_SYMBOL_GPL vmlinux 0xd9107d85 agp_add_bridge +EXPORT_SYMBOL_GPL vmlinux 0xd919806a amd_cache_northbridges +EXPORT_SYMBOL_GPL vmlinux 0xd9341e5c iommu_group_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xd942d353 ring_buffer_record_off +EXPORT_SYMBOL_GPL vmlinux 0xd988d7b9 debugfs_remove_recursive +EXPORT_SYMBOL_GPL vmlinux 0xd9bb0d45 nf_unregister_afinfo +EXPORT_SYMBOL_GPL vmlinux 0xd9d7f623 pkey_id_type +EXPORT_SYMBOL_GPL vmlinux 0xd9db3810 css_lookup +EXPORT_SYMBOL_GPL vmlinux 0xd9e223e4 disk_part_iter_exit +EXPORT_SYMBOL_GPL vmlinux 0xd9ecb670 ring_buffer_overruns +EXPORT_SYMBOL_GPL vmlinux 0xd9fbc6f8 ata_bmdma_irq_clear +EXPORT_SYMBOL_GPL vmlinux 0xda050109 irq_domain_add_nomap +EXPORT_SYMBOL_GPL vmlinux 0xda0a8ecb sdio_readsb +EXPORT_SYMBOL_GPL vmlinux 0xda313de6 tps6586x_update +EXPORT_SYMBOL_GPL vmlinux 0xda3a7ca9 regulator_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xda44cb37 setup_charger_manager +EXPORT_SYMBOL_GPL vmlinux 0xda4892ab sis_info133_for_sata +EXPORT_SYMBOL_GPL vmlinux 0xda65d0d6 ipv4_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0xda7ad3c9 sk_attach_filter +EXPORT_SYMBOL_GPL vmlinux 0xdaa528b7 acpi_dev_resource_io +EXPORT_SYMBOL_GPL vmlinux 0xdab50ae7 fpu_finit +EXPORT_SYMBOL_GPL vmlinux 0xdab7f86c securityfs_create_file +EXPORT_SYMBOL_GPL vmlinux 0xdae08a4d ip6_datagram_send_ctl +EXPORT_SYMBOL_GPL vmlinux 0xdaf1618f sdio_set_block_size +EXPORT_SYMBOL_GPL vmlinux 0xdaf4dfb3 fb_mode_option +EXPORT_SYMBOL_GPL vmlinux 0xdb04cacc tracepoint_probe_unregister_noupdate +EXPORT_SYMBOL_GPL vmlinux 0xdb0c11e0 pwm_config +EXPORT_SYMBOL_GPL vmlinux 0xdb2fb2fb smpboot_unregister_percpu_thread +EXPORT_SYMBOL_GPL vmlinux 0xdb361321 get_kernel_pages +EXPORT_SYMBOL_GPL vmlinux 0xdb36afd8 regcache_sync +EXPORT_SYMBOL_GPL vmlinux 0xdb37fb8c wm5110_i2c_regmap +EXPORT_SYMBOL_GPL vmlinux 0xdb4e58eb extcon_set_cable_state +EXPORT_SYMBOL_GPL vmlinux 0xdb57b008 rtc_initialize_alarm +EXPORT_SYMBOL_GPL vmlinux 0xdb7f49ba pm_generic_suspend +EXPORT_SYMBOL_GPL vmlinux 0xdb8a1b3f usermodehelper_read_trylock +EXPORT_SYMBOL_GPL vmlinux 0xdba06469 pci_find_ht_capability +EXPORT_SYMBOL_GPL vmlinux 0xdba52008 sec_bulk_write +EXPORT_SYMBOL_GPL vmlinux 0xdbe4a6ca crypto_shash_final +EXPORT_SYMBOL_GPL vmlinux 0xdbf7cb70 mpi_get_nbits +EXPORT_SYMBOL_GPL vmlinux 0xdc0a04da blk_rq_err_bytes +EXPORT_SYMBOL_GPL vmlinux 0xdc14a211 xen_hvm_evtchn_do_upcall +EXPORT_SYMBOL_GPL vmlinux 0xdc1f8f2e register_timer_hook +EXPORT_SYMBOL_GPL vmlinux 0xdc6699cb acpi_dev_free_resource_list +EXPORT_SYMBOL_GPL vmlinux 0xdc825d6c usb_amd_quirk_pll_disable +EXPORT_SYMBOL_GPL vmlinux 0xdc8d7b45 regulator_get_exclusive +EXPORT_SYMBOL_GPL vmlinux 0xdc933a09 call_srcu +EXPORT_SYMBOL_GPL vmlinux 0xdc97af2e syscore_suspend +EXPORT_SYMBOL_GPL vmlinux 0xdca2b049 mnt_drop_write +EXPORT_SYMBOL_GPL vmlinux 0xdcdd9c0b wm8350_device_exit +EXPORT_SYMBOL_GPL vmlinux 0xdce57037 apei_estatus_print +EXPORT_SYMBOL_GPL vmlinux 0xdce851cd sigset_from_compat +EXPORT_SYMBOL_GPL vmlinux 0xdd1504b2 ata_pci_bmdma_init_one +EXPORT_SYMBOL_GPL vmlinux 0xdd18bc3c blk_update_request +EXPORT_SYMBOL_GPL vmlinux 0xdd2efc0f ring_buffer_reset_cpu +EXPORT_SYMBOL_GPL vmlinux 0xdd6618ba btree_remove +EXPORT_SYMBOL_GPL vmlinux 0xdd6a1d88 rio_get_device +EXPORT_SYMBOL_GPL vmlinux 0xdd6e03ea usb_string +EXPORT_SYMBOL_GPL vmlinux 0xdd6e6bde seq_open_net +EXPORT_SYMBOL_GPL vmlinux 0xdda4f636 file_ra_state_init +EXPORT_SYMBOL_GPL vmlinux 0xddb030f3 ip4_datagram_release_cb +EXPORT_SYMBOL_GPL vmlinux 0xddd58dc0 ring_buffer_reset +EXPORT_SYMBOL_GPL vmlinux 0xddda1e83 spi_master_suspend +EXPORT_SYMBOL_GPL vmlinux 0xde4e19ba klist_next +EXPORT_SYMBOL_GPL vmlinux 0xde6598bf usb_free_streams +EXPORT_SYMBOL_GPL vmlinux 0xdede6e91 usb_control_msg +EXPORT_SYMBOL_GPL vmlinux 0xdee65a00 dm_kill_unmapped_request +EXPORT_SYMBOL_GPL vmlinux 0xdf0f75c6 eventfd_signal +EXPORT_SYMBOL_GPL vmlinux 0xdf1882af dbgp_reset_prep +EXPORT_SYMBOL_GPL vmlinux 0xdf2de7b4 usb_poison_anchored_urbs +EXPORT_SYMBOL_GPL vmlinux 0xdf39b1a4 ata_sas_port_init +EXPORT_SYMBOL_GPL vmlinux 0xdfec0537 pci_enable_rom +EXPORT_SYMBOL_GPL vmlinux 0xe007de41 kallsyms_lookup_name +EXPORT_SYMBOL_GPL vmlinux 0xe026dfb2 sdio_writesb +EXPORT_SYMBOL_GPL vmlinux 0xe02eb6d0 ring_buffer_commit_overrun_cpu +EXPORT_SYMBOL_GPL vmlinux 0xe05dd10b ip6_update_pmtu +EXPORT_SYMBOL_GPL vmlinux 0xe0731393 unregister_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xe07b5ca0 ata_sas_sync_probe +EXPORT_SYMBOL_GPL vmlinux 0xe089cfcc agp_memory_reserved +EXPORT_SYMBOL_GPL vmlinux 0xe08d2789 pm_runtime_enable +EXPORT_SYMBOL_GPL vmlinux 0xe09fde5d ata_sff_data_xfer32 +EXPORT_SYMBOL_GPL vmlinux 0xe0a2651a blk_add_driver_data +EXPORT_SYMBOL_GPL vmlinux 0xe0b8abea acpi_dev_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xe0c77bb5 mce_notify_irq +EXPORT_SYMBOL_GPL vmlinux 0xe0f15f11 put_device +EXPORT_SYMBOL_GPL vmlinux 0xe0fc45f1 udp6_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xe10cd6ad erst_get_record_id_begin +EXPORT_SYMBOL_GPL vmlinux 0xe1383d6a usb_driver_release_interface +EXPORT_SYMBOL_GPL vmlinux 0xe18bfc59 udp4_lib_lookup +EXPORT_SYMBOL_GPL vmlinux 0xe1942bde lp8788_update_bits +EXPORT_SYMBOL_GPL vmlinux 0xe1aa08c3 device_create +EXPORT_SYMBOL_GPL vmlinux 0xe1e5bba3 kobject_uevent_env +EXPORT_SYMBOL_GPL vmlinux 0xe20323db mnt_want_write_file +EXPORT_SYMBOL_GPL vmlinux 0xe2113c2f __blk_end_request_err +EXPORT_SYMBOL_GPL vmlinux 0xe237d34c devm_regulator_get +EXPORT_SYMBOL_GPL vmlinux 0xe29135eb rtc_irq_set_state +EXPORT_SYMBOL_GPL vmlinux 0xe295c0ff is_hpet_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe299915a crypto_givcipher_type +EXPORT_SYMBOL_GPL vmlinux 0xe2a607f5 wm8350_block_write +EXPORT_SYMBOL_GPL vmlinux 0xe2a9ad13 spi_get_device_id +EXPORT_SYMBOL_GPL vmlinux 0xe2bb99b5 ata_sff_qc_fill_rtf +EXPORT_SYMBOL_GPL vmlinux 0xe2cfa06a proc_net_remove +EXPORT_SYMBOL_GPL vmlinux 0xe2dd67e5 regulator_set_current_limit +EXPORT_SYMBOL_GPL vmlinux 0xe2e1281e sata_scr_write +EXPORT_SYMBOL_GPL vmlinux 0xe3043ff9 request_any_context_irq +EXPORT_SYMBOL_GPL vmlinux 0xe30ab151 gnttab_unmap_refs +EXPORT_SYMBOL_GPL vmlinux 0xe3578cdb xenbus_register_frontend +EXPORT_SYMBOL_GPL vmlinux 0xe35aaaa4 extcon_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xe384760b fb_deferred_io_init +EXPORT_SYMBOL_GPL vmlinux 0xe384a102 usb_speed_string +EXPORT_SYMBOL_GPL vmlinux 0xe38dec30 xen_find_device_domain_owner +EXPORT_SYMBOL_GPL vmlinux 0xe3bc7fd4 hpet_unregister_irq_handler +EXPORT_SYMBOL_GPL vmlinux 0xe3d81660 ftrace_event_reg +EXPORT_SYMBOL_GPL vmlinux 0xe3f102d9 kobject_init_and_add +EXPORT_SYMBOL_GPL vmlinux 0xe3f4c476 regmap_write +EXPORT_SYMBOL_GPL vmlinux 0xe3f6262c cpufreq_driver_target +EXPORT_SYMBOL_GPL vmlinux 0xe3fe273f cpufreq_frequency_table_verify +EXPORT_SYMBOL_GPL vmlinux 0xe40a7ca5 stmpe_block_write +EXPORT_SYMBOL_GPL vmlinux 0xe41534ce bind_evtchn_to_irqhandler +EXPORT_SYMBOL_GPL vmlinux 0xe41dd1bf ata_dev_next +EXPORT_SYMBOL_GPL vmlinux 0xe422f2a4 crypto_unregister_instance +EXPORT_SYMBOL_GPL vmlinux 0xe4309905 syscore_resume +EXPORT_SYMBOL_GPL vmlinux 0xe4333994 extcon_set_cable_state_ +EXPORT_SYMBOL_GPL vmlinux 0xe4428977 register_kprobes +EXPORT_SYMBOL_GPL vmlinux 0xe46d4d56 usb_root_hub_lost_power +EXPORT_SYMBOL_GPL vmlinux 0xe48a7bd8 rio_dma_prep_slave_sg +EXPORT_SYMBOL_GPL vmlinux 0xe4afbc87 tty_perform_flush +EXPORT_SYMBOL_GPL vmlinux 0xe4ccffad simple_attr_release +EXPORT_SYMBOL_GPL vmlinux 0xe4e68bc8 apei_map_generic_address +EXPORT_SYMBOL_GPL vmlinux 0xe500f8b9 usb_driver_claim_interface +EXPORT_SYMBOL_GPL vmlinux 0xe548b46d fat_free_clusters +EXPORT_SYMBOL_GPL vmlinux 0xe553976f ip_build_and_send_pkt +EXPORT_SYMBOL_GPL vmlinux 0xe56e6b37 usb_autopm_get_interface_async +EXPORT_SYMBOL_GPL vmlinux 0xe5883bd9 class_compat_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe58fb452 aer_irq +EXPORT_SYMBOL_GPL vmlinux 0xe6041cec ata_std_error_handler +EXPORT_SYMBOL_GPL vmlinux 0xe60b243c ata_qc_complete_multiple +EXPORT_SYMBOL_GPL vmlinux 0xe6488b47 cpufreq_notify_transition +EXPORT_SYMBOL_GPL vmlinux 0xe64ad8ea unregister_nmi_handler +EXPORT_SYMBOL_GPL vmlinux 0xe651f76e selinux_is_enabled +EXPORT_SYMBOL_GPL vmlinux 0xe6602e9f perf_trace_buf_prepare +EXPORT_SYMBOL_GPL vmlinux 0xe67a514b usb_autopm_put_interface +EXPORT_SYMBOL_GPL vmlinux 0xe6caccdd pm_qos_remove_request +EXPORT_SYMBOL_GPL vmlinux 0xe6e1c5fe uuid_be_gen +EXPORT_SYMBOL_GPL vmlinux 0xe7232e0f user_return_notifier_unregister +EXPORT_SYMBOL_GPL vmlinux 0xe76268e6 dma_buf_kmap_atomic +EXPORT_SYMBOL_GPL vmlinux 0xe769232e sprint_symbol_no_offset +EXPORT_SYMBOL_GPL vmlinux 0xe770cd3f crypto_unregister_ahash +EXPORT_SYMBOL_GPL vmlinux 0xe7795951 device_find_child +EXPORT_SYMBOL_GPL vmlinux 0xe77edbcd devm_regulator_bulk_get +EXPORT_SYMBOL_GPL vmlinux 0xe78322d9 __pm_wakeup_event +EXPORT_SYMBOL_GPL vmlinux 0xe7df0a91 xenbus_match +EXPORT_SYMBOL_GPL vmlinux 0xe7e28cd4 ata_sff_thaw +EXPORT_SYMBOL_GPL vmlinux 0xe7e9eaac digsig_verify +EXPORT_SYMBOL_GPL vmlinux 0xe7ffe877 pcpu_base_addr +EXPORT_SYMBOL_GPL vmlinux 0xe818b32b ata_bmdma_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xe84f6e5c pciserial_remove_ports +EXPORT_SYMBOL_GPL vmlinux 0xe8559b01 __get_user_pages_fast +EXPORT_SYMBOL_GPL vmlinux 0xe862c4b7 dpm_suspend_start +EXPORT_SYMBOL_GPL vmlinux 0xe89771c6 lp8788_write_byte +EXPORT_SYMBOL_GPL vmlinux 0xe89bd243 ata_sff_queue_work +EXPORT_SYMBOL_GPL vmlinux 0xe8ca9c62 eventfd_ctx_fileget +EXPORT_SYMBOL_GPL vmlinux 0xe8d83ce6 __root_device_register +EXPORT_SYMBOL_GPL vmlinux 0xe8f4bafe tps6586x_write +EXPORT_SYMBOL_GPL vmlinux 0xe8fd0b3c hrtimer_init_sleeper +EXPORT_SYMBOL_GPL vmlinux 0xe9011563 fs_kobj +EXPORT_SYMBOL_GPL vmlinux 0xe908ce91 bsg_unregister_queue +EXPORT_SYMBOL_GPL vmlinux 0xe9270fcc __mnt_is_readonly +EXPORT_SYMBOL_GPL vmlinux 0xe928fc9e hrtimer_get_remaining +EXPORT_SYMBOL_GPL vmlinux 0xe93e49c3 devres_free +EXPORT_SYMBOL_GPL vmlinux 0xe94f40c3 rtc_irq_set_freq +EXPORT_SYMBOL_GPL vmlinux 0xe9587909 usb_unregister_notify +EXPORT_SYMBOL_GPL vmlinux 0xe95f0037 tpm_dev_vendor_release +EXPORT_SYMBOL_GPL vmlinux 0xe970017e xfrm_inner_extract_output +EXPORT_SYMBOL_GPL vmlinux 0xe9a6a308 crypto_destroy_tfm +EXPORT_SYMBOL_GPL vmlinux 0xe9d1b7cf irq_to_pcap +EXPORT_SYMBOL_GPL vmlinux 0xe9d5fad0 devres_find +EXPORT_SYMBOL_GPL vmlinux 0xea065e01 task_handoff_unregister +EXPORT_SYMBOL_GPL vmlinux 0xea124bd1 gcd +EXPORT_SYMBOL_GPL vmlinux 0xea1c4025 usb_disable_autosuspend +EXPORT_SYMBOL_GPL vmlinux 0xea1cb37e driver_create_file +EXPORT_SYMBOL_GPL vmlinux 0xea418e0f atapi_cmd_type +EXPORT_SYMBOL_GPL vmlinux 0xea628c20 bstr_printf +EXPORT_SYMBOL_GPL vmlinux 0xeaad2c57 adp5520_unregister_notifier +EXPORT_SYMBOL_GPL vmlinux 0xeadf816e klist_init +EXPORT_SYMBOL_GPL vmlinux 0xeaf11431 platform_device_register +EXPORT_SYMBOL_GPL vmlinux 0xeb006f06 xen_unmap_domain_mfn_range +EXPORT_SYMBOL_GPL vmlinux 0xeb0dbf3e skb_complete_wifi_ack +EXPORT_SYMBOL_GPL vmlinux 0xeb1c3628 nf_ipv6_ops +EXPORT_SYMBOL_GPL vmlinux 0xeb370805 __apei_exec_run +EXPORT_SYMBOL_GPL vmlinux 0xeb64196b each_symbol_section +EXPORT_SYMBOL_GPL vmlinux 0xeb68aef3 cpuidle_disable_device +EXPORT_SYMBOL_GPL vmlinux 0xeb79ea6f pm_generic_restore +EXPORT_SYMBOL_GPL vmlinux 0xeb86774b dpm_for_each_dev +EXPORT_SYMBOL_GPL vmlinux 0xeb8865dc __module_text_address +EXPORT_SYMBOL_GPL vmlinux 0xeba745e1 irq_set_affinity_notifier +EXPORT_SYMBOL_GPL vmlinux 0xebb00f87 iommu_detach_device +EXPORT_SYMBOL_GPL vmlinux 0xebd47db1 pci_slots_kset +EXPORT_SYMBOL_GPL vmlinux 0xebe3fc36 elv_register +EXPORT_SYMBOL_GPL vmlinux 0xebec57c4 ring_buffer_oldest_event_ts +EXPORT_SYMBOL_GPL vmlinux 0xebf4ccfc dm_disk +EXPORT_SYMBOL_GPL vmlinux 0xec0db658 fsstack_copy_inode_size +EXPORT_SYMBOL_GPL vmlinux 0xec1b043e regulator_suspend_prepare +EXPORT_SYMBOL_GPL vmlinux 0xec25f967 klist_del +EXPORT_SYMBOL_GPL vmlinux 0xec3f945d crypto_enqueue_request +EXPORT_SYMBOL_GPL vmlinux 0xec486930 dev_attr_em_message_type +EXPORT_SYMBOL_GPL vmlinux 0xec57fe6d agp_remove_bridge +EXPORT_SYMBOL_GPL vmlinux 0xec65f22e i2c_adapter_type +EXPORT_SYMBOL_GPL vmlinux 0xec660a2f ata_host_init +EXPORT_SYMBOL_GPL vmlinux 0xecb132e3 blkg_conf_finish +EXPORT_SYMBOL_GPL vmlinux 0xecc3c7d7 kobject_create_and_add +EXPORT_SYMBOL_GPL vmlinux 0xed0f9f99 do_unregister_con_driver +EXPORT_SYMBOL_GPL vmlinux 0xed14c4f6 pci_bus_sem +EXPORT_SYMBOL_GPL vmlinux 0xed554163 fuse_dev_operations +EXPORT_SYMBOL_GPL vmlinux 0xed82714e ata_pci_bmdma_clear_simplex +EXPORT_SYMBOL_GPL vmlinux 0xed8ac557 usb_match_id +EXPORT_SYMBOL_GPL vmlinux 0xed9449ba sysfs_put +EXPORT_SYMBOL_GPL vmlinux 0xedac30dd vma_kernel_pagesize +EXPORT_SYMBOL_GPL vmlinux 0xedbaf048 hrtimer_cancel +EXPORT_SYMBOL_GPL vmlinux 0xedbc6f67 gnttab_end_foreign_access +EXPORT_SYMBOL_GPL vmlinux 0xedcba9db __sock_recv_ts_and_drops +EXPORT_SYMBOL_GPL vmlinux 0xee13e697 set_personality_ia32 +EXPORT_SYMBOL_GPL vmlinux 0xee190f2f devres_destroy +EXPORT_SYMBOL_GPL vmlinux 0xee4739ad ata_sas_slave_configure +EXPORT_SYMBOL_GPL vmlinux 0xee602312 acpi_ec_add_query_handler +EXPORT_SYMBOL_GPL vmlinux 0xee64e810 class_interface_register +EXPORT_SYMBOL_GPL vmlinux 0xee688498 aead_geniv_init +EXPORT_SYMBOL_GPL vmlinux 0xee7b7843 wm8350_reg_write +EXPORT_SYMBOL_GPL vmlinux 0xee7cd2b5 inet_csk_bind_conflict +EXPORT_SYMBOL_GPL vmlinux 0xee929300 driver_for_each_device +EXPORT_SYMBOL_GPL vmlinux 0xef152060 dma_get_required_mask +EXPORT_SYMBOL_GPL vmlinux 0xef1f6e23 apei_resources_request +EXPORT_SYMBOL_GPL vmlinux 0xef359648 rtc_update_irq_enable +EXPORT_SYMBOL_GPL vmlinux 0xef43b6a1 netlink_has_listeners +EXPORT_SYMBOL_GPL vmlinux 0xef5eccca pstore_register +EXPORT_SYMBOL_GPL vmlinux 0xef62b9c6 sock_prot_inuse_get +EXPORT_SYMBOL_GPL vmlinux 0xef63a80a blkcipher_walk_virt_block +EXPORT_SYMBOL_GPL vmlinux 0xef6c3f70 round_jiffies_up_relative +EXPORT_SYMBOL_GPL vmlinux 0xef782b88 gnttab_grant_foreign_access_subpage +EXPORT_SYMBOL_GPL vmlinux 0xef8c7850 pcap_adc_async +EXPORT_SYMBOL_GPL vmlinux 0xef8f3e16 sdev_evt_send_simple +EXPORT_SYMBOL_GPL vmlinux 0xef9b0162 sk_clear_memalloc +EXPORT_SYMBOL_GPL vmlinux 0xef9dc0a5 uart_insert_char +EXPORT_SYMBOL_GPL vmlinux 0xefb54fed pwm_free +EXPORT_SYMBOL_GPL vmlinux 0xefc91531 irq_create_of_mapping +EXPORT_SYMBOL_GPL vmlinux 0xefcdb4f9 hwmon_device_register +EXPORT_SYMBOL_GPL vmlinux 0xeffa6b8f __tracepoint_cpu_idle +EXPORT_SYMBOL_GPL vmlinux 0xf001dc80 irq_domain_add_linear +EXPORT_SYMBOL_GPL vmlinux 0xf0410ed2 ata_dev_pair +EXPORT_SYMBOL_GPL vmlinux 0xf0696401 acpi_pci_detect_ejectable +EXPORT_SYMBOL_GPL vmlinux 0xf0697089 fat_setattr +EXPORT_SYMBOL_GPL vmlinux 0xf0757e65 ata_sas_port_start +EXPORT_SYMBOL_GPL vmlinux 0xf08fdfea pm_generic_freeze +EXPORT_SYMBOL_GPL vmlinux 0xf09db510 device_rename +EXPORT_SYMBOL_GPL vmlinux 0xf0a03703 regulator_enable_regmap +EXPORT_SYMBOL_GPL vmlinux 0xf0b24316 dio_end_io +EXPORT_SYMBOL_GPL vmlinux 0xf0c0714e regulator_map_voltage_linear +EXPORT_SYMBOL_GPL vmlinux 0xf0c2dbb9 tty_ldisc_deref +EXPORT_SYMBOL_GPL vmlinux 0xf0c3d905 blk_queue_flush_queueable +EXPORT_SYMBOL_GPL vmlinux 0xf0df8937 ipv6_recv_error +EXPORT_SYMBOL_GPL vmlinux 0xf0e19d64 stmpe_set_altfunc +EXPORT_SYMBOL_GPL vmlinux 0xf0f5dbc2 timerqueue_iterate_next +EXPORT_SYMBOL_GPL vmlinux 0xf105b27d usb_show_dynids +EXPORT_SYMBOL_GPL vmlinux 0xf178650b sdio_enable_func +EXPORT_SYMBOL_GPL vmlinux 0xf184d189 kernel_power_off +EXPORT_SYMBOL_GPL vmlinux 0xf1aae32e acpi_dev_resource_ext_address_space +EXPORT_SYMBOL_GPL vmlinux 0xf1b31314 delayacct_on +EXPORT_SYMBOL_GPL vmlinux 0xf1b551d9 ibft_addr +EXPORT_SYMBOL_GPL vmlinux 0xf1b93d46 crypto_alloc_instance +EXPORT_SYMBOL_GPL vmlinux 0xf1e5d80f async_synchronize_full_domain +EXPORT_SYMBOL_GPL vmlinux 0xf2109d45 ata_sff_irq_on +EXPORT_SYMBOL_GPL vmlinux 0xf2264154 __blkdev_driver_ioctl +EXPORT_SYMBOL_GPL vmlinux 0xf2333a25 __mmu_notifier_register +EXPORT_SYMBOL_GPL vmlinux 0xf238bc13 acpi_dev_pm_detach +EXPORT_SYMBOL_GPL vmlinux 0xf268ee32 usb_hcd_platform_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xf2d13919 devm_kfree +EXPORT_SYMBOL_GPL vmlinux 0xf2d22420 wm8350_set_bits +EXPORT_SYMBOL_GPL vmlinux 0xf2fca922 uart_parse_options +EXPORT_SYMBOL_GPL vmlinux 0xf30e105d ezx_pcap_write +EXPORT_SYMBOL_GPL vmlinux 0xf31b3fd1 workqueue_set_max_active +EXPORT_SYMBOL_GPL vmlinux 0xf3219eaa inet_ctl_sock_create +EXPORT_SYMBOL_GPL vmlinux 0xf3248a6e class_destroy +EXPORT_SYMBOL_GPL vmlinux 0xf329c440 cn_add_callback +EXPORT_SYMBOL_GPL vmlinux 0xf32b46e0 rio_dev_get +EXPORT_SYMBOL_GPL vmlinux 0xf331236f btree_geo32 +EXPORT_SYMBOL_GPL vmlinux 0xf35ee759 pm_generic_runtime_resume +EXPORT_SYMBOL_GPL vmlinux 0xf3627c3e platform_device_add_data +EXPORT_SYMBOL_GPL vmlinux 0xf377a2d0 bmp085_detect +EXPORT_SYMBOL_GPL vmlinux 0xf399c8cc ata_dummy_port_info +EXPORT_SYMBOL_GPL vmlinux 0xf3b451ca kdb_poll_funcs +EXPORT_SYMBOL_GPL vmlinux 0xf3b93a97 cgroup_lock_is_held +EXPORT_SYMBOL_GPL vmlinux 0xf3ce90db blkcg_print_blkgs +EXPORT_SYMBOL_GPL vmlinux 0xf3d08f3b css_depth +EXPORT_SYMBOL_GPL vmlinux 0xf3dd036d regulator_set_voltage_time +EXPORT_SYMBOL_GPL vmlinux 0xf3f0fa7f sync_filesystem +EXPORT_SYMBOL_GPL vmlinux 0xf419e46b irq_alloc_generic_chip +EXPORT_SYMBOL_GPL vmlinux 0xf45a1bd9 transport_class_register +EXPORT_SYMBOL_GPL vmlinux 0xf45d1876 pm_qos_request_active +EXPORT_SYMBOL_GPL vmlinux 0xf45ff522 skb_cow_data +EXPORT_SYMBOL_GPL vmlinux 0xf4728875 user_read +EXPORT_SYMBOL_GPL vmlinux 0xf487f92c acpi_i2c_register_devices +EXPORT_SYMBOL_GPL vmlinux 0xf494f618 mmc_regulator_get_ocrmask +EXPORT_SYMBOL_GPL vmlinux 0xf499fdb2 rcu_barrier_bh +EXPORT_SYMBOL_GPL vmlinux 0xf4a763b9 class_find_device +EXPORT_SYMBOL_GPL vmlinux 0xf4cabfcf crypto_lookup_skcipher +EXPORT_SYMBOL_GPL vmlinux 0xf4d7730c pm_generic_suspend_noirq +EXPORT_SYMBOL_GPL vmlinux 0xf4fc2d6c __ring_buffer_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf50a5f95 ahash_attr_alg +EXPORT_SYMBOL_GPL vmlinux 0xf50abeee driver_attach +EXPORT_SYMBOL_GPL vmlinux 0xf5285a10 filter_match_preds +EXPORT_SYMBOL_GPL vmlinux 0xf52ae9ed register_mce_write_callback +EXPORT_SYMBOL_GPL vmlinux 0xf52fd6e1 sata_pmp_qc_defer_cmd_switch +EXPORT_SYMBOL_GPL vmlinux 0xf53a6645 inet_twsk_alloc +EXPORT_SYMBOL_GPL vmlinux 0xf54bd49b lcm +EXPORT_SYMBOL_GPL vmlinux 0xf553318d cpuidle_pause_and_lock +EXPORT_SYMBOL_GPL vmlinux 0xf5785b42 evtchn_get +EXPORT_SYMBOL_GPL vmlinux 0xf5945bac gnttab_free_grant_references +EXPORT_SYMBOL_GPL vmlinux 0xf5a691cd invalidate_bh_lrus +EXPORT_SYMBOL_GPL vmlinux 0xf5d0b7f4 pci_sriov_set_totalvfs +EXPORT_SYMBOL_GPL vmlinux 0xf5dffa09 __put_net +EXPORT_SYMBOL_GPL vmlinux 0xf5f6e6cb regmap_init_spi +EXPORT_SYMBOL_GPL vmlinux 0xf6227ba7 led_trigger_unregister +EXPORT_SYMBOL_GPL vmlinux 0xf63d617f cgroup_taskset_first +EXPORT_SYMBOL_GPL vmlinux 0xf6458447 securityfs_remove +EXPORT_SYMBOL_GPL vmlinux 0xf65ec5e2 tpm_show_timeouts +EXPORT_SYMBOL_GPL vmlinux 0xf66655ef usb_find_alt_setting +EXPORT_SYMBOL_GPL vmlinux 0xf66f49b4 blkcipher_walk_phys +EXPORT_SYMBOL_GPL vmlinux 0xf6748423 __i2c_board_lock +EXPORT_SYMBOL_GPL vmlinux 0xf67b4154 crypto_init_shash_spawn +EXPORT_SYMBOL_GPL vmlinux 0xf6930ea8 unregister_wide_hw_breakpoint +EXPORT_SYMBOL_GPL vmlinux 0xf6de1e48 xen_swiotlb_sync_single_for_cpu +EXPORT_SYMBOL_GPL vmlinux 0xf6e04730 event_storage +EXPORT_SYMBOL_GPL vmlinux 0xf6e874f5 ata_timing_merge +EXPORT_SYMBOL_GPL vmlinux 0xf7016530 xenbus_gather +EXPORT_SYMBOL_GPL vmlinux 0xf7322bc8 pv_time_ops +EXPORT_SYMBOL_GPL vmlinux 0xf74595fa tps6586x_reads +EXPORT_SYMBOL_GPL vmlinux 0xf74656ab regulator_can_change_voltage +EXPORT_SYMBOL_GPL vmlinux 0xf79e4fe6 dev_pm_qos_add_notifier +EXPORT_SYMBOL_GPL vmlinux 0xf7a14f56 apei_mce_report_mem_error +EXPORT_SYMBOL_GPL vmlinux 0xf7cb052c device_show_ulong +EXPORT_SYMBOL_GPL vmlinux 0xf7dcd01f dev_set_name +EXPORT_SYMBOL_GPL vmlinux 0xf835f25e __mmc_switch +EXPORT_SYMBOL_GPL vmlinux 0xf8802492 print_stack_trace +EXPORT_SYMBOL_GPL vmlinux 0xf8a89ec0 class_remove_file +EXPORT_SYMBOL_GPL vmlinux 0xf8aab293 platform_create_bundle +EXPORT_SYMBOL_GPL vmlinux 0xf8ac38c8 ata_platform_remove_one +EXPORT_SYMBOL_GPL vmlinux 0xf8d57bdc __srcu_notifier_call_chain +EXPORT_SYMBOL_GPL vmlinux 0xf8d778f8 max8997_read_reg +EXPORT_SYMBOL_GPL vmlinux 0xf8e7a4f2 power_supply_am_i_supplied +EXPORT_SYMBOL_GPL vmlinux 0xf8f3a0fb ata_ratelimit +EXPORT_SYMBOL_GPL vmlinux 0xf8fe3d0b kmsg_dump_register +EXPORT_SYMBOL_GPL vmlinux 0xf9094e9c ip6_local_out +EXPORT_SYMBOL_GPL vmlinux 0xf917f920 user_instantiate +EXPORT_SYMBOL_GPL vmlinux 0xf9285ddd security_inode_create +EXPORT_SYMBOL_GPL vmlinux 0xf92ce956 kdb_printf +EXPORT_SYMBOL_GPL vmlinux 0xf930a328 inet_peer_base_init +EXPORT_SYMBOL_GPL vmlinux 0xf9765833 dmi_match +EXPORT_SYMBOL_GPL vmlinux 0xf97666a0 set_memory_rw +EXPORT_SYMBOL_GPL vmlinux 0xf9924426 arch_add_memory +EXPORT_SYMBOL_GPL vmlinux 0xf9a054b5 __round_jiffies +EXPORT_SYMBOL_GPL vmlinux 0xf9ca3160 ata_id_xfermask +EXPORT_SYMBOL_GPL vmlinux 0xf9d9264e xen_have_vector_callback +EXPORT_SYMBOL_GPL vmlinux 0xf9db9652 tty_port_register_device +EXPORT_SYMBOL_GPL vmlinux 0xf9e9f333 platform_device_put +EXPORT_SYMBOL_GPL vmlinux 0xfa012fe7 tracepoint_probe_register +EXPORT_SYMBOL_GPL vmlinux 0xfa01428b pm_generic_runtime_suspend +EXPORT_SYMBOL_GPL vmlinux 0xfa1eb910 unregister_syscore_ops +EXPORT_SYMBOL_GPL vmlinux 0xfa1f4662 scatterwalk_start +EXPORT_SYMBOL_GPL vmlinux 0xfa4a647e klist_iter_init +EXPORT_SYMBOL_GPL vmlinux 0xfa835870 sysfs_get +EXPORT_SYMBOL_GPL vmlinux 0xfa901b31 compat_get_timespec +EXPORT_SYMBOL_GPL vmlinux 0xfacac02a led_trigger_store +EXPORT_SYMBOL_GPL vmlinux 0xfad776a1 xfrm_audit_state_delete +EXPORT_SYMBOL_GPL vmlinux 0xfaed2648 skb_tstamp_tx +EXPORT_SYMBOL_GPL vmlinux 0xfb05c9b4 async_unregister_domain +EXPORT_SYMBOL_GPL vmlinux 0xfb17bead usb_anchor_urb +EXPORT_SYMBOL_GPL vmlinux 0xfb17dec1 __wake_up_sync +EXPORT_SYMBOL_GPL vmlinux 0xfb19320c tpm_show_owned +EXPORT_SYMBOL_GPL vmlinux 0xfb32b30f ring_buffer_read_prepare_sync +EXPORT_SYMBOL_GPL vmlinux 0xfb61d296 rtc_set_mmss +EXPORT_SYMBOL_GPL vmlinux 0xfb64b230 acpi_processor_ffh_cstate_probe +EXPORT_SYMBOL_GPL vmlinux 0xfb6eedf9 power_group_name +EXPORT_SYMBOL_GPL vmlinux 0xfb7c9986 inet_twsk_schedule +EXPORT_SYMBOL_GPL vmlinux 0xfb88b874 tps80031_ext_power_req_config +EXPORT_SYMBOL_GPL vmlinux 0xfbf9be5d register_oom_notifier +EXPORT_SYMBOL_GPL vmlinux 0xfbfcf6c3 __irq_set_handler +EXPORT_SYMBOL_GPL vmlinux 0xfc201b66 sprint_oid +EXPORT_SYMBOL_GPL vmlinux 0xfc3b4246 acpi_bus_update_power +EXPORT_SYMBOL_GPL vmlinux 0xfc498323 tty_prepare_flip_string_flags +EXPORT_SYMBOL_GPL vmlinux 0xfc510119 usb_hcd_map_urb_for_dma +EXPORT_SYMBOL_GPL vmlinux 0xfc551b56 spi_unregister_master +EXPORT_SYMBOL_GPL vmlinux 0xfc5ea807 crypto_chain +EXPORT_SYMBOL_GPL vmlinux 0xfc5ff401 ata_std_qc_defer +EXPORT_SYMBOL_GPL vmlinux 0xfc7f15c6 sysfs_remove_files +EXPORT_SYMBOL_GPL vmlinux 0xfc808c99 crypto_mod_get +EXPORT_SYMBOL_GPL vmlinux 0xfc968c8b apei_exec_write_register_value +EXPORT_SYMBOL_GPL vmlinux 0xfcafe7e7 stmpe_disable +EXPORT_SYMBOL_GPL vmlinux 0xfcb1cd7e usb_queue_reset_device +EXPORT_SYMBOL_GPL vmlinux 0xfcbba2df virtqueue_kick_prepare +EXPORT_SYMBOL_GPL vmlinux 0xfcd35717 rio_get_asm +EXPORT_SYMBOL_GPL vmlinux 0xfcd7bc0b ring_buffer_empty +EXPORT_SYMBOL_GPL vmlinux 0xfceba9e8 tpm_add_ppi +EXPORT_SYMBOL_GPL vmlinux 0xfd3c27c2 pci_enable_sriov +EXPORT_SYMBOL_GPL vmlinux 0xfd4199b1 ata_sff_dev_select +EXPORT_SYMBOL_GPL vmlinux 0xfd48beea ata_sff_check_status +EXPORT_SYMBOL_GPL vmlinux 0xfd50140e __css_tryget +EXPORT_SYMBOL_GPL vmlinux 0xfd51b281 gnttab_end_foreign_access_ref +EXPORT_SYMBOL_GPL vmlinux 0xfd6d7a76 wm8350_clear_bits +EXPORT_SYMBOL_GPL vmlinux 0xfd7243c7 erst_disable +EXPORT_SYMBOL_GPL vmlinux 0xfdac579d usb_hcd_pci_shutdown +EXPORT_SYMBOL_GPL vmlinux 0xfdc4d187 dm_get_rq_mapinfo +EXPORT_SYMBOL_GPL vmlinux 0xfdee45ce __rtnl_register +EXPORT_SYMBOL_GPL vmlinux 0xfe03d022 register_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0xfe2602a9 tty_standard_install +EXPORT_SYMBOL_GPL vmlinux 0xfe639ea9 device_unregister +EXPORT_SYMBOL_GPL vmlinux 0xfe727411 get_phys_to_machine +EXPORT_SYMBOL_GPL vmlinux 0xfe7cd6d0 usb_deregister_device_driver +EXPORT_SYMBOL_GPL vmlinux 0xfe98044b dev_pm_put_subsys_data +EXPORT_SYMBOL_GPL vmlinux 0xfe990052 gpio_free +EXPORT_SYMBOL_GPL vmlinux 0xfebb00b1 sysfs_chmod_file +EXPORT_SYMBOL_GPL vmlinux 0xfed11ed1 usb_mon_deregister +EXPORT_SYMBOL_GPL vmlinux 0xfed89cad thermal_unregister_governor +EXPORT_SYMBOL_GPL vmlinux 0xfef01f57 ata_sff_postreset +EXPORT_SYMBOL_GPL vmlinux 0xfef8a166 trace_current_buffer_lock_reserve +EXPORT_SYMBOL_GPL vmlinux 0xff05fa13 vring_interrupt +EXPORT_SYMBOL_GPL vmlinux 0xff073f8b inet6_csk_addr2sockaddr +EXPORT_SYMBOL_GPL vmlinux 0xff5a8cfe cn_del_callback +EXPORT_SYMBOL_GPL vmlinux 0xff6fc1a2 usb_mon_register +EXPORT_SYMBOL_GPL vmlinux 0xffa4c4ec cgroup_lock +EXPORT_SYMBOL_GPL vmlinux 0xffbb01c7 unregister_asymmetric_key_parser +EXPORT_SYMBOL_GPL vmlinux 0xffdaa7a4 find_vpid +EXPORT_SYMBOL_GPL vmlinux 0xffe90911 crypto_ahash_setkey --- linux-lts-raring-3.8.0.orig/debian.master/abi/3.8.0-32.47/amd64/generic.compiler +++ linux-lts-raring-3.8.0/debian.master/abi/3.8.0-32.47/amd64/generic.compiler @@ -0,0 +1 @@ +GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3 --- linux-lts-raring-3.8.0.orig/debian.master/control.d/vars.generic +++ linux-lts-raring-3.8.0/debian.master/control.d/vars.generic @@ -0,0 +1,6 @@ +arch="i386 amd64 armhf" +supported="Generic" +target="Geared toward desktop and server systems." +desc="=HUMAN= SMP" +bootloader="grub-pc [i386 amd64 x32] | grub-efi-amd64 [i386 amd64 x32] | grub-efi-ia32 [i386 amd64 x32] | grub [i386 amd64 x32] | lilo (>= 19.1) [i386 amd64 x32] | flash-kernel [armhf arm64]" +provides="kvm-api-4, redhat-cluster-modules, ivtv-modules" --- linux-lts-raring-3.8.0.orig/debian.master/control.d/flavour-control.stub +++ linux-lts-raring-3.8.0/debian.master/control.d/flavour-control.stub @@ -0,0 +1,98 @@ +# 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 +Architecture: ARCH +Section: kernel +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-3.0, fuse-module, =PROVIDES= +Depends: ${misc:Depends}, ${shlibs:Depends}, initramfs-tools (>= 0.36ubuntu6), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1) +Recommends: BOOTLOADER +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 +Architecture: ARCH +Section: kernel +Priority: optional +Depends: ${misc:Depends}, ${shlibs:Depends}, linux-image-PKGVER-ABINUM-FLAVOUR, crda (>=1.1.1-1ubuntu2) | wireless-crda +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-headers-PKGVER-ABINUM-FLAVOUR +Architecture: ARCH +Section: devel +Priority: optional +Depends: ${misc:Depends}, linux-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 +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. --- linux-lts-raring-3.8.0.orig/debian.master/control.d/generic.inclusion-list +++ linux-lts-raring-3.8.0/debian.master/control.d/generic.inclusion-list @@ -0,0 +1,159 @@ +arch/*/{crypto,kernel,oprofile} +arch/*/kvm/kvm.ko +arch/x86/kvm/kvm-intel.ko +arch/x86/kvm/kvm-amd.ko +crypto/* +drivers/acpi/video.ko +drivers/acpi/sbshc.ko +drivers/acpi/acpi_memhotplug.ko +drivers/acpi/pci_slot.ko +drivers/acpi/apei/einj.ko +drivers/acpi/ec_sys.ko +drivers/acpi/sbs.ko +drivers/acpi/acpi_pad.ko +drivers/ata/ahci_platform.ko +drivers/ata/ahci.ko +drivers/ata/acard-ahci.ko +drivers/ata/libahci.ko +drivers/block/nbd.ko +drivers/block/floppy.ko +drivers/block/cryptoloop.ko +drivers/block/rbd.ko +drivers/char/hangcheck-timer.ko +drivers/char/lp.ko +drivers/char/nvram.ko +drivers/char/ppdev.ko +drivers/char/raw.ko +drivers/hv/* +drivers/input/evbug.ko +drivers/input/gameport/gameport.ko +drivers/input/mouse/psmouse.ko +drivers/input/serio/serio_raw.ko +drivers/input/serio/serport.ko +drivers/input/joydev.ko +drivers/input/touchscreen/usbtouchscreen.ko +drivers/input/misc/xen-kbdfront.ko +drivers/md/* +drivers/message/fusion* +drivers/misc/vmw_balloon.ko +drivers/net/ethernet/8390/8390.ko +drivers/net/ethernet/realtek/8139too.ko +drivers/net/ethernet/realtek/8139cp.ko +drivers/net/appletalk/ipddp.ko +drivers/net/bonding/bonding.ko +drivers/net/ppp/bsd_comp.ko +drivers/net/dummy.ko +drivers/net/ethernet/intel/e1000/e1000.ko +drivers/net/ethernet/intel/e1000e/e1000e.ko +drivers/net/eql.ko +drivers/net/ifb.ko +drivers/net/ethernet/intel/igbvf/igbvf.ko +drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko +drivers/net/macvlan.ko +drivers/net/macvtap.ko +drivers/net/ethernet/8390/ne2k-pci.ko +drivers/net/netconsole.ko +drivers/net/ethernet/amd/pcnet32.ko +drivers/net/hyperv/hv_netvsc.ko +drivers/net/ppp/* +drivers/net/slip/* +drivers/net/veth.ko +drivers/net/vmxnet3/vmxnet3.ko +drivers/net/xen-netback/* +drivers/parport/parport.ko +drivers/parport/parport_pc.ko +drivers/pci/hotplug/acpiphp.ko +drivers/net/ethernet/dec/tulip/* +drivers/scsi/BusLogic.ko +drivers/scsi/iscsi_tcp.ko +drivers/scsi/libiscsi.ko +drivers/scsi/libiscsi_tcp.ko +drivers/scsi/libsas/* +drivers/scsi/qla1280.ko +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_tgt.ko +drivers/scsi/vmw_pvscsi.ko +drivers/scsi/hv_storvsc.ko +drivers/scsi/device_handler/scsi_dh.ko +drivers/usb/storage/usb-storage.ko +drivers/video/cirrusfb.ko +drivers/video/output.ko +drivers/video/syscopyarea.ko +drivers/video/sysfillrect.ko +drivers/video/sysimgblt.ko +drivers/video/vesafb.ko +drivers/video/vga16fb.ko +drivers/video/vgastate.ko +drivers/video/xen-fbfront.ko +drivers/video/fb_sys_fops.ko +drivers/virtio/virtio_balloon.ko +drivers/watchdog/softdog.ko +drivers/xen/* +fs/9p/9p.ko +fs/binfmt_misc.ko +fs/btrfs/* +fs/cachefiles/cachefiles.ko +fs/ceph/* +fs/configfs/* +fs/ext*/* +fs/fat/* +fs/nls/nls_iso8859-1.ko +fs/isofs/* +fs/cifs/* +fs/xfs/* +fs/ufs/* +fs/squashfs/* +fs/nfs/nfsv2.ko +fs/nfs/blocklayout/blocklayoutdriver.ko +fs/nfs/nfs.ko +fs/nfs/nfs_layout_nfsv41_files.ko +fs/nfs/nfsv3.ko +fs/nfs/nfsv4.ko +fs/nfsd/* +fs/nfs_common/* +fs/fscache/* +fs/lockd/* +fs/autofs4/autofs4.ko +fs/overlayfs/* +fs/udf/* +lib/* +net/802/* +net/8021q/* +net/9p/9pnet.ko +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/netrom/* +net/phonet/* +net/rose/* +net/rxrpc/* +net/sched/* +net/sctp/* +net/tipc/* +net/wanrouter/* +net/x25/* +net/xfrm/* +net/sunrpc/auth_gss/auth_rpcgss.ko +net/sunrpc/sunrpc.ko +sound/soundcore.ko +sound/core/* +sound/pci/snd-ens1370.ko +sound/drivers/pcsp/snd-pcsp.ko --- linux-lts-raring-3.8.0.orig/debian.master/d-i/exclude-modules.sparc +++ linux-lts-raring-3.8.0/debian.master/d-i/exclude-modules.sparc @@ -0,0 +1,9 @@ +efi-modules +nic-pcmcia-modules +pcmcia-modules +pcmcia-storage-modules +irda-modules +floppy-modules +fb-modules +acpi-modules +virtio-modules --- linux-lts-raring-3.8.0.orig/debian.master/d-i/exclude-modules.armhf-generic +++ linux-lts-raring-3.8.0/debian.master/d-i/exclude-modules.armhf-generic @@ -0,0 +1,10 @@ +serial-modules +firewire-core-modules +floppy-modules +pcmcia-storage-modules +fb-modules +nic-pcmcia-modules +pcmcia-modules +pata-modules +message-modules +virtio-modules --- linux-lts-raring-3.8.0.orig/debian.master/d-i/package-list +++ linux-lts-raring-3.8.0/debian.master/d-i/package-list @@ -0,0 +1,196 @@ +Package: kernel-image + +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: 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: 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 +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 +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: squashfs-modules +Depends: kernel-image +Priority: extra +Description: squashfs modules + This package contains squashfs modules. + +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-lts-raring-3.8.0.orig/debian.master/d-i/exclude-modules.amd64-virtual +++ linux-lts-raring-3.8.0/debian.master/d-i/exclude-modules.amd64-virtual @@ -0,0 +1,15 @@ +pata-modules +serial-modules +firewire-core-modules +plip-modules +usb-modules +pcmcia-storage-modules +input-modules +nic-pcmcia-modules +pcmcia-modules +nic-usb-modules +nfs-modules +speakup-modules +ppp-modules +sata-modules +ipmi-modules --- linux-lts-raring-3.8.0.orig/debian.master/d-i/exclude-modules.i386-virtual +++ linux-lts-raring-3.8.0/debian.master/d-i/exclude-modules.i386-virtual @@ -0,0 +1,15 @@ +pata-modules +serial-modules +firewire-core-modules +plip-modules +usb-modules +pcmcia-storage-modules +input-modules +nic-pcmcia-modules +pcmcia-modules +nic-usb-modules +nfs-modules +speakup-modules +ppp-modules +sata-modules +ipmi-modules --- linux-lts-raring-3.8.0.orig/debian.master/d-i/kernel-versions.in +++ linux-lts-raring-3.8.0/debian.master/d-i/kernel-versions.in @@ -0,0 +1,9 @@ +# arch version flavour installedname suffix bdep +amd64 PKGVER-ABINUM generic PKGVER-ABINUM-generic - + +i386 PKGVER-ABINUM generic PKGVER-ABINUM-generic - + +armhf PKGVER-ABINUM generic PKGVER-ABINUM-generic - + +# Ports +# arch version flavour installedname suffix bdep --- linux-lts-raring-3.8.0.orig/debian.master/d-i/exclude-modules.ia64 +++ linux-lts-raring-3.8.0/debian.master/d-i/exclude-modules.ia64 @@ -0,0 +1,4 @@ +irda-modules +floppy-modules +fb-modules +virtio-modules --- linux-lts-raring-3.8.0.orig/debian.master/d-i/exclude-firmware.armhf-generic +++ linux-lts-raring-3.8.0/debian.master/d-i/exclude-firmware.armhf-generic @@ -0,0 +1,2 @@ +nic-modules +scsi-modules --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/crypto-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/crypto-modules @@ -0,0 +1,70 @@ +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 ? +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-lts-raring-3.8.0.orig/debian.master/d-i/modules/usb-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/usb-modules @@ -0,0 +1,10 @@ +ehci-hcd ? +isp116x-hcd ? +isp1760 ? +ohci-hcd ? +r8a66597-hcd ? +sl811_cs ? +sl811-hcd ? +u132-hcd ? +uhci-hcd ? +xhci-hcd ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/fat-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/fat-modules @@ -0,0 +1,7 @@ +fat ? +vfat ? + +# Supporting modules ? +nls_cp437 ? +nls_iso8859-1 ? +nls_utf8 ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/virtio-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/virtio-modules @@ -0,0 +1,9 @@ +virtio_balloon ? +virtio_pci ? +virtio_ring ? +virtio-rng ? +hv_vmbus ? +hv_utils ? +hv_netvsc ? +hv_mouse ? +hv_storvsc ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/nic-shared-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/squashfs-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/squashfs-modules @@ -0,0 +1 @@ +squashfs ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/nfs-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/nfs-modules @@ -0,0 +1,6 @@ +nfs ? +nfs_acl ? +nfsv3 ? +lockd ? +sunrpc ? +cifs ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/speakup-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/fb-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/fb-modules @@ -0,0 +1,3 @@ +fbcon ? +vesafb ? +vga16fb ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/parport-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/parport-modules @@ -0,0 +1,2 @@ +parport ? +parport_pc ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/storage-core-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/storage-core-modules @@ -0,0 +1,10 @@ +# Core stacks +usb-storage ? + +# Block level + +# Loop modules +cryptoloop ? + +# Needs to be here for better cdrom initrd layout +isofs ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/pcmcia-storage-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/scsi-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/scsi-modules @@ -0,0 +1,126 @@ +# 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 ? +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 ? +ibmvscsic ? +libsas ? +lpfc ? +megaraid_mm ? +megaraid_mbox ? +megaraid_sas ? +qla2xxx ? +sym53c8xx ? +qla4xxx ? +mvsas ? +vmw_pvscsi ? +ums-cypress ? +be2iscsi ? +3w-sas ? +isci ? + +# device handlers +scsi_dh_alua ? +scsi_dh_emc ? +scsi_dh_rdac ? +scsi_dh_hp_sw ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/plip-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/plip-modules @@ -0,0 +1 @@ +plip ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/fs-secondary-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/fs-secondary-modules @@ -0,0 +1,5 @@ +btrfs ? +fuse ? +ntfs ? +hfs ? +hfsplus ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/nic-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/nic-modules @@ -0,0 +1,171 @@ +3c359 ? +3c501 ? +3c503 ? +3c505 ? +3c507 ? +3c509 ? +3c515 ? +3c523 ? +3c527 ? +3c59x ? +8139cp ? +8139too ? +82596 ? +abyss ? +ac3200 ? +adm8211 ? +airo ? +airport ? +alx ? +amd8111e ? +arc4 ? +arcnet ? +arc-rawmode ? +arc-rimi ? +arlan ? +at1700 ? +ath5k ? +ath9k ? +ath9k_htc ? +atl1 ? +atl1c ? +atl1e ? +atl2 ? +atmel ? +atmel_pci ? +b44 ? +be2net ? +bmac ? +bnx2 ? +bnx2x ? +bonding ? +brcmfmac ? +brcmsmac ? +cassini ? +com20020 ? +com20020-pci ? +com90io ? +com90xx ? +cs89x0 ? +de2104x ? +de4x5 ? +de600 ? +de620 ? +defxx ? +depca ? +dl2k ? +dmfe ? +dummy ? +e100 ? +e1000 ? +e1000e ? +e2100 ? +eepro ? +eepro100 ? +eexpress ? +enic ? +epic100 ? +eql ? +es3210 ? +eth16i ? +ewrk3 ? +fealnx ? +forcedeth ? +igb ? +ps3_gelic ? +hamachi ? +hermes ? +hp ? +hp100 ? +hp-plus ? +ibmtr ? +ipddp ? +ipw2100 ? +ipw2200 ? +iwl3945 ? +iwl4965 ? +iwl-legacy ? +iwldvm ? +iwlwifi ? +ixgb ? +ixgbe ? +lance ? +lanstreamer ? +lasi_82596 ? +lne390 ? +lp486e ? +mace ? +mlx4_core ? +mlx4_en ? +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 ? +r8169 ? +rate_control ? +rfc1051 ? +rfc1201 ? +rrunner ? +rt2400 ? +rt2400pci ? +rt2500 ? +rt2500pci ? +rt2800pci ? +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 ? +vmxnet3 ? +xen-netfront ? +qlcnic ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/nic-pcmcia-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/message-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/message-modules @@ -0,0 +1,14 @@ +mptbase ? +mptctl ? +mptfc ? +mptlan ? +mptsas ? +mpt2sas ? +mptscsih ? +mptspi ? +i2o_block ? +i2o_bus ? +i2o_config ? +i2o_core ? +i2o_proc ? +i2o_scsi ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/serial-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/serial-modules @@ -0,0 +1,3 @@ +generic_serial ? +serial_cs ? +synclink_cs ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/sata-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/sata-modules @@ -0,0 +1,17 @@ +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 ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/vlan-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/vlan-modules @@ -0,0 +1,3 @@ +slp ? +garp ? +8021q ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/md-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/ipmi-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/ipmi-modules @@ -0,0 +1,5 @@ +ipmi_devintf ? +ipmi_msghandler ? +ipmi_poweroff ? +ipmi_si ? +ipmi_watchdog ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/pcmcia-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/pcmcia-modules @@ -0,0 +1,8 @@ +i82092 ? +i82365 ? +pcmcia ? +pcmcia_core ? +pd6729 ? +rsrc_nonstatic ? +tcic ? +yenta_socket ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/ppp-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/ppp-modules @@ -0,0 +1,6 @@ +ppp_async ? +ppp_deflate ? +ppp_mppe ? +pppoe ? +pppox ? +ppp_synctty ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/firewire-core-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/firewire-core-modules @@ -0,0 +1,4 @@ +firewire-core ? +firewire-ohci ? +firewire-sbp2 ? +firewire-net ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/multipath-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/multipath-modules @@ -0,0 +1,2 @@ +dm-multipath ? +dm-round-robin ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/mouse-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/mouse-modules @@ -0,0 +1,2 @@ +psmouse ? +usbmouse ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/irda-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/pata-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/block-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/block-modules @@ -0,0 +1,32 @@ +aoe ? +aten ? +bpck ? +bpck6 ? +cciss ? +comm ? +cpqarray ? +DAC960 ? +dstr ? +epat ? +epia ? +fit2 ? +fit3 ? +friq ? +frpw ? +hpsa ? +kbic ? +ktti ? +nbd ? +on20 ? +on26 ? +paride ? +pcd ? +pd ? +pf ? +pg ? +pt ? +sx8 ? +umem ? +virtio_blk ? +xen-blkfront ? +mtip32xx ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/floppy-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/floppy-modules @@ -0,0 +1 @@ +floppy ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/fs-core-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/fs-core-modules @@ -0,0 +1,4 @@ +ext2 ? +jfs ? +reiserfs ? +xfs ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules/nic-usb-modules +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/modules/input-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules/input-modules @@ -0,0 +1,23 @@ +hid-a4tech ? +hid-apple ? +hid-belkin ? +hid-bright ? +hid-cherry ? +hid-chicony ? +hid-cypress ? +hid-dell ? +hid-ezkey ? +hid-generic ? +hid-gyration ? +hid-logitech ? +hid-logitech-dj ? +hid-microsoft ? +hid-monterey ? +hid-petalynx ? +hid-pl ? +hid-samsung ? +hid-sony ? +hid-sunplus ? +hid-tmff ? +hid-zpff ? +usbhid ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules-sparc/message-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules-sparc/message-modules @@ -0,0 +1,13 @@ +mptbase +mptctl +mptfc +mptlan +mptsas +mptscsih +mptspi +i2o_block +i2o_bus +i2o_config ? +i2o_core +i2o_proc +i2o_scsi --- linux-lts-raring-3.8.0.orig/debian.master/d-i/modules-sparc/block-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/modules-sparc/block-modules @@ -0,0 +1,9 @@ +aoe +cciss +comm +cpqarray ? +DAC960 +nbd +sx8 +umem +virtio_blk ? --- linux-lts-raring-3.8.0.orig/debian.master/d-i/firmware/README.txt +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/debian.master/d-i/firmware/scsi-modules +++ linux-lts-raring-3.8.0/debian.master/d-i/firmware/scsi-modules @@ -0,0 +1,3 @@ +qlogic/1040.bin +qlogic/12160.bin +qlogic/1280.bin --- linux-lts-raring-3.8.0.orig/debian.master/d-i/firmware/nic-modules +++ linux-lts-raring-3.8.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.8.2.0.fw +bnx2x/bnx2x-e1-7.8.2.0.fw +bnx2x/bnx2x-e2-7.8.2.0.fw +tigon/tg3_tso5.bin +tigon/tg3_tso.bin +tigon/tg3.bin --- linux-lts-raring-3.8.0.orig/debian.master/config/annotations +++ linux-lts-raring-3.8.0/debian.master/config/annotations @@ -0,0 +1,2630 @@ +# not a thing +CONFIG_USB_OHCI_HCD_PLATFORM - flag +CONFIG_USB_EHCI_HCD_PLATFORM - flag +CONFIG_USB_OHCI_HCD_PPC_OF_LE - flag +# Overall defaults +set +all !flag EXPERIMENTAL !flag IGNORE ?type tristate = m +# Mark debugging symbols. +# default all debug symbols off +set +pattern '(^|_)DEBUG(_|$)' ?type bool = n flag +set +pattern '(^|_)DEBUG(_|$)' ?type tristate = n flag +# ROOT +CONFIG_64BIT p policy<(arch amd64 &/ value y) | (flavour powerpc64-smp &/ value y) | value n> +CONFIG_RELOCATABLE y +CONFIG_ARM_PATCH_PHYS_VIRT y +CONFIG_PPC64 p policy<(flavour powerpc64-smp &/ value y) | value n> +CONFIG_NR_IRQS 512 +# Advanced setup +CONFIG_ADVANCED_OPTIONS n +CONFIG_LOWMEM_CAM_NUM 3 +CONFIG_DYNAMIC_MEMSTART y +# Boot options +CONFIG_KEXEC y +CONFIG_CRASH_DUMP y +CONFIG_USE_OF y +CONFIG_ATAGS y +CONFIG_DEPRECATED_PARAM_STRUCT n +CONFIG_ARM_APPENDED_DTB n +CONFIG_CMDLINE "" +CONFIG_AUTO_ZRELADDR y +CONFIG_ATAGS_PROC y +# Bus options +CONFIG_ISA p policy<(arch i386 &/ value y) | value n> mark +CONFIG_ISA_DMA_API y +CONFIG_EISA y mark +CONFIG_EISA_VLB_PRIMING y +CONFIG_EISA_PCI_EISA y +CONFIG_EISA_VIRTUAL_ROOT y +CONFIG_EISA_NAMES y +CONFIG_ALIX y +CONFIG_NET5501 y +CONFIG_GEOS y +CONFIG_FSL_LBC y +# Bus options > PCCard (PCMCIA/CardBus) support +CONFIG_PCCARD p policy<(arch armhf &/ value n) | value m> note +CONFIG_PCMCIA m mark +CONFIG_PCMCIA_LOAD_CIS y +CONFIG_CARDBUS y mark +CONFIG_YENTA_O2 y +CONFIG_YENTA_RICOH y +CONFIG_YENTA_TI y +CONFIG_YENTA_ENE_TUNE y +CONFIG_YENTA_TOSHIBA y +# Bus options (PCI etc.) +# Bus options (PCI etc.) > PCCard (PCMCIA/CardBus) support +# Bus options (PCI etc.) > PCI support +CONFIG_PCI y mark +CONFIG_PCI_MMCONFIG y +CONFIG_PCI_CNB20LE_QUIRK n +CONFIG_PCIEPORTBUS y +CONFIG_HOTPLUG_PCI_PCIE y mark +CONFIG_PCIEAER y +CONFIG_PCIE_ECRC n +CONFIG_PCIEAER_INJECT n flag +CONFIG_PCIEASPM y +CONFIG_PCIEASPM_DEFAULT y +CONFIG_PCIEASPM_POWERSAVE n +CONFIG_PCIEASPM_PERFORMANCE n +CONFIG_PCI_MSI y +CONFIG_PCI_REALLOC_ENABLE_AUTO y +CONFIG_HT_IRQ y +CONFIG_PCI_IOV y +CONFIG_PCI_PRI y +CONFIG_PCI_PASID y +CONFIG_PCI_IOAPIC p policy<(arch i386 amd64 &/ value y) | value m> note +CONFIG_RAPIDIO y +CONFIG_RAPIDIO_TSI721 y +CONFIG_RAPIDIO_DISC_TIMEOUT 30 +CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS n +CONFIG_RAPIDIO_DMA_ENGINE y +CONFIG_RAPIDIO_TSI57X y +CONFIG_RAPIDIO_CPS_XX y +CONFIG_RAPIDIO_TSI568 y +CONFIG_RAPIDIO_CPS_GEN2 y +CONFIG_RAPIDIO_TSI500 y +CONFIG_PCI_GOANY y +#CONFIG_FSL_RIO n y +# Bus options (PCI etc.) > PCI support > Support for PCI Hotplug +CONFIG_HOTPLUG_PCI y mark +CONFIG_HOTPLUG_PCI_CPCI y +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM y +# Bus options > PCI support +CONFIG_PCI y mark +CONFIG_HOTPLUG_PCI_PCIE y mark +CONFIG_PCI_IOAPIC p policy<(arch i386 amd64 &/ value y) | value m> note +CONFIG_PCIEAER_INJECT n flag +CONFIG_FSL_RIO p policy<(flavour powerpc-e500mc &/ value y) | value n> +# Bus options > PCI support > Support for PCI Hotplug +# Bus support +# Bus support > PCCard (PCMCIA/CardBus) support +# CPU Power Management +CONFIG_CPU_IDLE y +CONFIG_CPU_IDLE_MULTIPLE_DRIVERS n +CONFIG_CPU_IDLE_CALXEDA n +# CPU Power Management > CPU Frequency scaling +CONFIG_CPU_FREQ y mark +CONFIG_CPU_FREQ p policy<(arch armhf &/ value n) | value y> flag +CONFIG_CPU_FREQ_GOV_CONSERVATIVE y note +CONFIG_CPU_FREQ_GOV_ONDEMAND y note +CONFIG_CPU_FREQ_GOV_PERFORMANCE y note +CONFIG_CPU_FREQ_GOV_POWERSAVE y note +CONFIG_CPU_FREQ_GOV_USERSPACE y note +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y note +CONFIG_GENERIC_CPUFREQ_CPU0 y +CONFIG_CPU_FREQ_STAT p policy<(arch i386 amd64 armhf &/ value y) | value m> note +CONFIG_CPU_FREQ_STAT_DETAILS y +# CPU Power Management > CPU Frequency scaling > ARM CPU frequency scaling drivers +CONFIG_ARM_OMAP2PLUS_CPUFREQ y +# CPU Power Management > CPU Frequency scaling > PowerPC CPU frequency scaling drivers +CONFIG_CPU_FREQ_MAPLE y +# CPU Power Management > CPU Frequency scaling > x86 CPU frequency scaling drivers +CONFIG_X86_ACPI_CPUFREQ y note +CONFIG_X86_ACPI_CPUFREQ_CPB y +CONFIG_X86_POWERNOW_K8 y note +CONFIG_X86_SPEEDSTEP_CENTRINO y note +CONFIG_X86_SPEEDSTEP_ICH y note +CONFIG_X86_SPEEDSTEP_SMI y note +CONFIG_X86_PCC_CPUFREQ y note +CONFIG_X86_CPUFREQ_NFORCE2 y note +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE y +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK y +# Cryptographic API +set +tree 'CRYPTO' ?flag EXPERIMENTAL ?type bool = n +set +tree 'CRYPTO' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_CRYPTO y mark +CONFIG_CRYPTO_CRC32C y note +CONFIG_CRYPTO_CRC32C_INTEL y note +CONFIG_CRYPTO_CRC32C y note +CONFIG_CRYPTO_AES y note +CONFIG_CRYPTO_CBC y note +CONFIG_CRYPTO_ECB y note +CONFIG_CRYPTO_HMAC y note +CONFIG_CRYPTO_MANAGER y note +CONFIG_CRYPTO_MD5 y note +CONFIG_CRYPTO_SHA1 y note +CONFIG_CRYPTO_SHA256 y note +CONFIG_CRYPTO_LZO y note +CONFIG_CRYPTO_SHA512 y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS y flag +CONFIG_CRYPTO_TEST m flag +# Cryptographic API > Asymmetric (public-key cryptographic) key type +CONFIG_ASYMMETRIC_KEY_TYPE y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE y +CONFIG_PUBLIC_KEY_ALGO_RSA y +CONFIG_X509_CERTIFICATE_PARSER y +# Cryptographic API > Hardware crypto devices +CONFIG_CRYPTO_DEV_PADLOCK y note +CONFIG_CRYPTO_HW y +CONFIG_CRYPTO_DEV_NX y +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_RINGSIZE 9 +CONFIG_CRYPTO_DEV_HIFN_795X_RNG y +# Device Drivers +CONFIG_POWER_AVS y +# Device Drivers > 1-wire Bus Masters +# Device Drivers > 1-wire Slaves +CONFIG_W1_SLAVE_DS2433_CRC n +# Device Drivers > Accelerometers +# Device Drivers > Accessibility support +CONFIG_ACCESSIBILITY n flag +# Device Drivers > Active cards +# Device Drivers > Amplifiers +# Device Drivers > Analog to digital converters +CONFIG_LP8788_ADC y +# Device Drivers > Android +CONFIG_ANDROID y +CONFIG_ANDROID_BINDER_IPC y +CONFIG_ASHMEM y +CONFIG_ANDROID_TIMED_OUTPUT y +CONFIG_ANDROID_LOW_MEMORY_KILLER y +CONFIG_ANDROID_INTF_ALARM_DEV y +# Device Drivers > ATA/ATAPI/MFM/RLL support (DEPRECATED) +# Device Drivers > Atmel devices (AVR32 and AT91) +# Device Drivers > Auxiliary Display support +CONFIG_AUXDISPLAY y +CONFIG_KS0108_DELAY 2 +CONFIG_CFAG12864B_RATE 20 +# Device Drivers > Block devices +CONFIG_BLK_DEV y mark mark +CONFIG_BLK_DEV_LOOP y note +CONFIG_BLK_DEV_RAM y note +CONFIG_BLK_DEV_HD n note +CONFIG_BLK_DEV_LOOP_MIN_COUNT 8 +CONFIG_BLK_DEV_RAM_COUNT 16 +CONFIG_BLK_DEV_RAM_SIZE 65536 +CONFIG_XEN_BLKDEV_FRONTEND y note +CONFIG_VIRTIO_BLK p policy<(arch i386 amd64 &/ value y) | (arch armhf &/ value n) | value m> note +CONFIG_BLK_DEV_XD n note +CONFIG_BLK_DEV_UMEM m note +CONFIG_BLK_DEV_RBD m note +CONFIG_BLK_DEV_XIP n note +CONFIG_PARIDE_EPATC8 n +CONFIG_CISS_SCSI_TAPE y +CONFIG_DRBD_FAULT_INJECTION n +CONFIG_CDROM_PKTCDVD_BUFFERS 8 +CONFIG_CDROM_PKTCDVD_WCACHE n +CONFIG_MG_DISK_RES 0 +# Device Drivers > Broadcom specific AMBA +CONFIG_BCMA_HOST_PCI y +CONFIG_BCMA_DRIVER_GMAC_CMN y +CONFIG_BCMA_DRIVER_GPIO y +# Device Drivers > Bus devices +CONFIG_OMAP_INTERCONNECT y note +# Device Drivers > Character devices +set +tree 'Device Drivers,Character devices' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,Character devices' ?flag EXPERIMENTAL ?type tristate = n +set +tree 'Device Drivers,Character devices' !flag EXPERIMENTAL ?type tristate = m +CONFIG_HW_RANDOM y mark +CONFIG_SERIAL_NONSTANDARD y +CONFIG_DEVKMEM n mark +CONFIG_TTY_PRINTK y +CONFIG_VT y +CONFIG_VT_CONSOLE y +CONFIG_VT_HW_CONSOLE_BINDING y +CONFIG_CONSOLE_TRANSLATIONS y +CONFIG_DEVPTS_MULTIPLE_INSTANCES y +CONFIG_LEGACY_PTYS y +CONFIG_LEGACY_PTY_COUNT 0 +CONFIG_UNIX98_PTYS y +CONFIG_HPET y +CONFIG_HPET_MMAP y +CONFIG_HW_RANDOM y +CONFIG_HVC_XEN y +CONFIG_HVC_XEN_FRONTEND y +CONFIG_HVC_DCC y +CONFIG_HVC_CONSOLE n +CONFIG_HVC_OPAL y +CONFIG_HVC_RTAS y +CONFIG_HVC_UDBG y +CONFIG_MAX_RAW_DEVS 256 +CONFIG_LP_CONSOLE n +CONFIG_CYZ_INTR n +CONFIG_STALDRV y +CONFIG_HW_RANDOM_ATMEL n note +CONFIG_NVRAM p policy<(arch powerpc &/ value y) | value m> note +CONFIG_HW_RANDOM_PASEMI p policy<(arch powerpc &/ value y) | value m> note +CONFIG_HVC_CONSOLE y +CONFIG_HVC_OLD_HVSI y +CONFIG_HVCS y +# Device Drivers > Character devices > IPMI top-level message handler +CONFIG_IPMI_PANIC_EVENT n +# Device Drivers > Character devices > PCMCIA character devices +# Device Drivers > Character devices > Serial drivers +CONFIG_SERIAL_8250_CONSOLE y +CONFIG_SERIAL_8250_DETECT_IRQ n +CONFIG_SERIAL_8250_EXTENDED y +CONFIG_SERIAL_8250_MANY_PORTS y +CONFIG_SERIAL_8250_NR_UARTS 48 +CONFIG_SERIAL_8250_RSA y +CONFIG_SERIAL_8250_RUNTIME_UARTS 32 +CONFIG_SERIAL_8250_SHARE_IRQ y +CONFIG_SERIAL_8250_EM n +CONFIG_SERIAL_8250 y note +CONFIG_SERIAL_8250_PCI p policy<(arch i386 amd64 armhf &/ value y) | value m> note +CONFIG_SERIAL_8250_PNP p policy<(arch i386 amd64 armhf &/ value y) | value m> note +CONFIG_SERIAL_ALTERA_UART_BAUDRATE 115200 +CONFIG_SERIAL_ALTERA_UART_MAXPORTS 4 +CONFIG_SERIAL_AMBA_PL011 p policy<(arch armhf &/ value y) | value m> +CONFIG_SERIAL_AMBA_PL011_CONSOLE y +CONFIG_SERIAL_ARC_NR_PORTS 1 +CONFIG_SERIAL_SCCNXP y +CONFIG_SERIAL_SCCNXP_CONSOLE y +CONFIG_SERIAL_PMACZILOG_CONSOLE y +CONFIG_SERIAL_PMACZILOG_TTYS n +CONFIG_SERIAL_KGDB_NMI y +CONFIG_SERIAL_MAX310X y +CONFIG_SERIAL_OMAP_CONSOLE y +CONFIG_SERIAL_OMAP p policy<(arch armhf &/ value y) | value m> note +CONFIG_SERIAL_PMACZILOG p policy<(arch powerpc &/ value y) | value m> note +CONFIG_SERIAL_IMX y +CONFIG_SERIAL_IMX_CONSOLE y +# Device Drivers > Character devices > TPM Hardware Support +CONFIG_TCG_TPM y mark +CONFIG_TCG_TPM y +# Device Drivers > Common Clock Framework +CONFIG_COMMON_CLK_VERSATILE y +# Device Drivers > Connector - unified userspace <- > kernelspace linker +CONFIG_CONNECTOR y mark +CONFIG_PROC_EVENTS y +# Device Drivers > Customise DVB Frontends +CONFIG_DVB_DUMMY_FE n note +# Device Drivers > Dallas's 1-wire support +CONFIG_W1_CON y +# Device Drivers > Device Tree and Open Firmware support +CONFIG_PROC_DEVICETREE y +CONFIG_OF_SELFTEST n flag +# Device Drivers > Digital gyroscope sensors +# Device Drivers > Digital to analog converters +# Device Drivers > Distributed Switch Architecture drivers +# Device Drivers > DMA Engine support +CONFIG_DMADEVICES y +CONFIG_NET_DMA y +CONFIG_DW_DMAC_BIG_ENDIAN_IO n +CONFIG_MX3_IPU y +CONFIG_MX3_IPU_IRQS 4 +CONFIG_MXS_DMA n +CONFIG_PL330_DMA p policy<(arch armhf &/ value m)> note +CONFIG_DMATEST n flag +CONFIG_DMA_OMAP y +CONFIG_AMBA_PL08X y +CONFIG_IMX_SDMA n +CONFIG_IMX_DMA n +CONFIG_ASYNC_TX_DMA p policy<(arch i388 armhf &/ value y) | value n> +# Device Drivers > EDAC (Error Detection And Correction) reporting +set +tree 'Device Drivers,EDAC (Error Detection And Correction) reporting' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,EDAC (Error Detection And Correction) reporting' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_EDAC y +CONFIG_EDAC_LEGACY_SYSFS y +CONFIG_EDAC_AMD64_ERROR_INJECTION n +CONFIG_EDAC_MM_EDAC p policy<(arch armhf &/ value y) | value m> +CONFIG_EDAC_HIGHBANK_MC y +CONFIG_EDAC_HIGHBANK_L2 y +# Device Drivers > Encoders, decoders, sensors and other helper chips +# Device Drivers > External Connector Class (extcon) support +CONFIG_EXTCON y mark +# Device Drivers > Frequency Synthesizers DDS/PLL +# Device Drivers > Frequency Synthesizers DDS/PLL > Clock Generator/Distribution +# Device Drivers > Frequency Synthesizers DDS/PLL > Phase-Locked Loop (PLL) frequency synthesizers +# Device Drivers > Fusion MPT device support +CONFIG_FUSION y +CONFIG_FUSION_MAX_SGE 128 +CONFIG_FUSION_LOGGING y +# Device Drivers > Generic Driver Options +CONFIG_UEVENT_HELPER_PATH "" +CONFIG_DEVTMPFS y note +CONFIG_DEVTMPFS_MOUNT y note +CONFIG_STANDALONE p policy<(arch i386 amd64 &/ value n) | value y> +CONFIG_PREVENT_FIRMWARE_BUILD y +CONFIG_FW_LOADER y note mark +CONFIG_FIRMWARE_IN_KERNEL y +CONFIG_EXTRA_FIRMWARE "" +CONFIG_CMA y +CONFIG_CMA_SIZE_MBYTES 16 +CONFIG_CMA_SIZE_SEL_MBYTES y +CONFIG_CMA_ALIGNMENT 8 +CONFIG_CMA_AREAS 7 +# Device Drivers > Generic Dynamic Voltage and Frequency Scaling (DVFS) support +CONFIG_PM_DEVFREQ y +CONFIG_DEVFREQ_GOV_PERFORMANCE y +CONFIG_DEVFREQ_GOV_POWERSAVE y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND y +CONFIG_DEVFREQ_GOV_USERSPACE y +# Device Drivers > Generic Target Core Mod (TCM) and ConfigFS Infrastructure +# Device Drivers > Generic Thermal sysfs driver +CONFIG_THERMAL y mark +CONFIG_CPU_THERMAL y +CONFIG_FAIR_SHARE y +CONFIG_STEP_WISE y +CONFIG_USER_SPACE y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE y +# Device Drivers > GPIO Support +set +tree 'Device Drivers,GPIO Support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,GPIO Support' ?flag EXPERIMENTAL ?type tristate = n +set +tree 'Device Drivers,GPIO Support' ?pattern ^GPIO_ ?type bool !flag EXPERIMENTAL = y +CONFIG_GPIOLIB y mark +CONFIG_GPIO_TWL4030 p policy<(arch armhf &/ value y) | value m> note +CONFIG_GPIO_CS5535 p policy<(value CONFIG_OLPC_X01_SCI y &/ value y) | value m> note +CONFIG_GPIO_GE_FPGA y +CONFIG_GPIO_EM n note +# Device Drivers > Graphics support +set +tree 'Device Drivers,Graphics support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,Graphics support' ?flag EXPERIMENTAL ?type tristate = m note +set +tree 'Device Drivers,Graphics support' !flag EXPERIMENTAL ?type tristate = m +set +tree 'Device Drivers,Graphics support' ?pattern ^FB_[^_]+$ ?type bool !flag EXPERIMENTAL = y +set +tree 'Device Drivers,Graphics support' ?pattern ^FB_[^_]+$ ?type bool ?flag EXPERIMENTAL = y note +set +tree 'Device Drivers,Graphics support' ?pattern _(KMS|BACKLIGHT|I2C)$ ?type bool !flag EXPERIMENTAL = y +CONFIG_DRM_LOAD_EDID_FIRMWARE y +CONFIG_VGA_ARB y +CONFIG_VGA_ARB_MAX_GPUS 16 +CONFIG_VGA_SWITCHEROO y +CONFIG_STUB_POULSBO n note +# Device Drivers > Graphics support > Backlight & LCD device support +CONFIG_BACKLIGHT_LCD_SUPPORT y +CONFIG_BACKLIGHT_CLASS_DEVICE y +# Device Drivers > Graphics support > Console display driver support +CONFIG_VGA_CONSOLE y +CONFIG_FONTS p policy<(arch armhf &/ value y) | value n> +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION n +CONFIG_VGACON_SOFT_SCROLLBACK n +CONFIG_FONT_10x18 n +CONFIG_FONT_6x11 n +CONFIG_FONT_7x14 n +CONFIG_FONT_8x8 y +CONFIG_FONT_8x16 y +CONFIG_FONT_ACORN_8x8 y +CONFIG_FONT_MINI_4x6 n +CONFIG_FONT_PEARL_8x8 n +CONFIG_FONT_SUN12x22 n +CONFIG_FONT_SUN8x16 n +CONFIG_FRAMEBUFFER_CONSOLE y note +# Device Drivers > Graphics support > /dev/agpgart (AGP Support) +CONFIG_AGP y note mark +CONFIG_AGP_AMD64 y note +CONFIG_AGP_INTEL y note +CONFIG_AGP_VIA y note +CONFIG_AGP_AMD y note +CONFIG_AGP_NVIDIA y note +# Device Drivers > Graphics support > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) +CONFIG_DRM_EXYNOS n flag +#CONFIG_DRM_EXYNOS_FIMC y +#CONFIG_DRM_EXYNOS_IPP y +#CONFIG_DRM_EXYNOS_ROTATOR y +CONFIG_DRM_VMWGFX_FBCON n +CONFIG_DRM_GMA600 y +CONFIG_DRM_GMA3600 y +CONFIG_NOUVEAU_DEBUG 5 +CONFIG_NOUVEAU_DEBUG_DEFAULT 3 +CONFIG_DRM_EXYNOS_DMABUF y +CONFIG_DRM_EXYNOS_FIMD y +CONFIG_DRM_EXYNOS_G2D y +CONFIG_DRM_EXYNOS_HDMI n +CONFIG_DRM_EXYNOS_VIDI y +CONFIG_DRM_MGAG200 n note flag +# Device Drivers > Graphics support > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) > I2C encoder or helper chips +# Device Drivers > Graphics support > Exynos Video driver support +CONFIG_EXYNOS_VIDEO y +# Device Drivers > Graphics support > OMAP2/3 Display Device Drivers +CONFIG_PANEL_GENERIC_DPI y +CONFIG_PANEL_TFP410 y +CONFIG_PANEL_SHARP_LS037V7DW01 y +CONFIG_PANEL_TPO_TD043MTEA1 y +# Device Drivers > Graphics support > OMAP2+ Display Subsystem support +CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS n +CONFIG_OMAP2_DSS_DEBUGFS n +CONFIG_OMAP2_DSS_DPI y +CONFIG_OMAP2_DSS_DSI n +CONFIG_OMAP4_DSS_HDMI y +CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK 0 +CONFIG_OMAP2_DSS_RFBI n +CONFIG_OMAP2_DSS_SDI y +CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET y +CONFIG_OMAP2_DSS_VENC y +CONFIG_OMAP2_DSS p policy<(arch armhf &/ value y) | value m> note +# Device Drivers > Graphics support > Support for frame buffer devices +CONFIG_FB y mark +CONFIG_FB_MODE_HELPERS y +CONFIG_FIRMWARE_EDID y +CONFIG_FB_TILEBLITTING y +CONFIG_FB_CARMINE_DRAM_EVAL y +CONFIG_FB_CYBER2000_DDC y +CONFIG_FB_ATY_CT y +CONFIG_FB_ATY_GX y +CONFIG_FB_MATROX_G y +CONFIG_FB_MATROX_MILLENIUM y +CONFIG_FB_MATROX_MYSTIQUE y +CONFIG_FB_MB862XX_PCI_GDC y +CONFIG_FB_PM2_FIFO_DISCONNECT y +CONFIG_FB_S3_DDC y +CONFIG_FB_SIS_300 y +CONFIG_FB_SIS_315 y +CONFIG_FB_TMIO_ACCELL y +CONFIG_FB_VIA_X_COMPATIBILITY y +CONFIG_FB_PS3_DEFAULT_SIZE_M 9 +CONFIG_FB_VOODOO1 p policy<(arch powerpc &/ value y) | value m> note +CONFIG_FB_3DFX p policy<(arch powerpc &/ value y) | value m> note +CONFIG_FB_PS3 p policy<(arch powerpc &/ value y) | value m> note +CONFIG_FB_ATY128 p policy<(arch powerpc &/ value y) | value m> note +CONFIG_FB_RADEON p policy<(arch powerpc &/ value y) | value m> note +CONFIG_FB_VIRTUAL n flag +CONFIG_FB_ARMCLCD y +CONFIG_FB_MX3 y +# Device Drivers > Graphics support > Support for frame buffer devices > Bootup logo +CONFIG_LOGO n +# Device Drivers > Graphics support > Support for frame buffer devices > Framebuffer foreign endianness support +CONFIG_FB_FOREIGN_ENDIAN n +# Device Drivers > Graphics support > Support for frame buffer devices > OMAP2+ frame buffer support +CONFIG_FB_OMAP2_NUM_FBS 3 +CONFIG_FB_OMAP2 p policy<(arch armhf &/ value y) | value m> note +# Device Drivers > Hardware Monitoring support +CONFIG_HWMON y mark +CONFIG_HWMON y mark mark +# Device Drivers > Hardware Monitoring support > PMBus support +# Device Drivers > Hardware Spinlock drivers +CONFIG_HWSPINLOCK_OMAP y note +# Device Drivers > Hid Sensor IIO Common +CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS n +# Device Drivers > HID support +set +tree 'Device Drivers,HID support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,HID support' ?flag EXPERIMENTAL ?type tristate = m note +set +tree 'Device Drivers,HID support' ?pattern _FF$ ?type bool !flag EXPERIMENTAL = y +# Device Drivers > HID support > HID bus support +CONFIG_HID m mark mark +CONFIG_HIDRAW y +CONFIG_HID_BATTERY_STRENGTH y +# Device Drivers > HID support > HID bus support > Special HID drivers +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_WIIMOTE_EXT y +# Device Drivers > HID support > I2C HID support +# Device Drivers > HID support > USB HID support +CONFIG_HID_PID y +# Device Drivers > HID support > USB HID support > USB HID transport layer +CONFIG_USB_HIDDEV y +# Device Drivers > HID support > USB HID support > USB HID transport layer > USB HID Boot Protocol drivers +# Device Drivers > HSI support +# Device Drivers > I2C Algorithms +CONFIG_I2C_ALGOBIT p policy<(arch powerpc &/ value y) | value m> note +# Device Drivers > I2C Hardware Bus support +set +tree 'Device Drivers,I2C Hardware Bus support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,I2C Hardware Bus support' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_I2C_OMAP p policy<(arch armhf &/ value y) | value m> note +CONFIG_I2C_DESIGNWARE_PLATFORM p policy<(arch armhf &/ value m) | value n> note +CONFIG_I2C_POWERMAC p policy<(arch powerpc &/ value y) | value m> note +CONFIG_I2C_IMX y +# Device Drivers > I2C support +set +tree 'Device Drivers,I2C support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,I2C support' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_I2C y mark mark +CONFIG_I2C_COMPAT y +CONFIG_I2C_HELPER_AUTO y +# Device Drivers > I2C support > I2C bus multiplexing support +# Device Drivers > I2C support > I2C bus multiplexing support > Multiplexer I2C Chip support +# Device Drivers > I2O device support +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES y +CONFIG_I2O_EXT_ADAPTEC y +CONFIG_I2O_EXT_ADAPTEC_DMA64 y +CONFIG_I2O_CONFIG_OLD_IOCTL n +# Device Drivers > IEEE 1394 (FireWire) support +# Device Drivers > IIO staging drivers +CONFIG_IIO_SIMPLE_DUMMY_BUFFER n note +CONFIG_IIO_SIMPLE_DUMMY_EVENTS n note +# Device Drivers > IIO staging drivers > Accelerometers +CONFIG_LIS3L02DQ p policy<(arch armhf &/ value n) | value m> flag +CONFIG_LIS3L02DQ_BUF_KFIFO y +# Device Drivers > IIO staging drivers > Active energy metering IC +# Device Drivers > IIO staging drivers > Analog digital bi-direction converters +# Device Drivers > IIO staging drivers > Analog to digital converters +CONFIG_AD799X_RING_BUFFER y +# Device Drivers > IIO staging drivers > Capacitance to digital converters +# Device Drivers > IIO staging drivers > Digital gyroscope sensors +# Device Drivers > IIO staging drivers > Direct Digital Synthesis +# Device Drivers > IIO staging drivers > Inertial measurement units +# Device Drivers > IIO staging drivers > Light sensors +# Device Drivers > IIO staging drivers > Magnetometer sensors +# Device Drivers > IIO staging drivers > Network Analyzer, Impedance Converters +# Device Drivers > IIO staging drivers > Resolver to digital converters +# Device Drivers > Industrial I/O support +CONFIG_IIO_BUFFER y +CONFIG_IIO_BUFFER_CB y +CONFIG_IIO_TRIGGER y +CONFIG_IIO_CONSUMERS_PER_TRIGGER 2 +# Device Drivers > IndustryPack bus support +# Device Drivers > Inertial measurement units +# Device Drivers > InfiniBand support +CONFIG_INFINIBAND_IPOIB_CM y +# Device Drivers > Input device support +set +tree 'Device Drivers,Input device support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,Input device support' ?flag EXPERIMENTAL ?type tristate = m note` +set +tree 'Device Drivers,Input device support' ?pattern ^MOUSE_PS2_ ?type bool !flag EXPERIMENTAL = y +set +tree 'Device Drivers,Input device support' ?pattern ^TOUCHSCREEN_ ?type bool !flag EXPERIMENTAL = y +set +tree 'Device Drivers,Input device support' ?pattern _FF$ ?type bool !flag EXPERIMENTAL = y +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) +CONFIG_INPUT y mark mark +CONFIG_INPUT_EVDEV y +CONFIG_INPUT_MOUSEDEV y +CONFIG_INPUT_MOUSEDEV_PSAUX y +CONFIG_INPUT_MOUSEDEV_SCREEN_X 1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y 768 +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) > Joysticks/Gamepads +CONFIG_INPUT_JOYSTICK y +CONFIG_JOYSTICK_IFORCE_232 y +CONFIG_JOYSTICK_IFORCE_USB y +CONFIG_JOYSTICK_XPAD_LEDS y +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) > Keyboards +CONFIG_INPUT_KEYBOARD y +CONFIG_KEYBOARD_ATKBD y note +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) > Mice +CONFIG_INPUT_MOUSE y +CONFIG_MOUSE_INPORT n note +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) > Miscellaneous devices +CONFIG_INPUT_MISC y +CONFIG_INPUT_UINPUT y +CONFIG_INPUT_KXTJ9_POLLED_MODE n +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) > Tablets +CONFIG_INPUT_TABLET y +# Device Drivers > Input device support > Generic input layer (needed for keyboard, mouse, ...) > Touchscreens +CONFIG_INPUT_TOUCHSCREEN y +# Device Drivers > Input device support > Hardware I/O ports +CONFIG_SERIO y note +CONFIG_SERIO_I8042 y note +CONFIG_SERIO_LIBPS2 y note +# Device Drivers > IOMMU Hardware Support +CONFIG_IOMMU_SUPPORT y +CONFIG_AMD_IOMMU y +CONFIG_AMD_IOMMU_STATS y +CONFIG_AMD_IOMMU_V2 m +CONFIG_INTEL_IOMMU y +CONFIG_INTEL_IOMMU_DEFAULT_ON n note +CONFIG_IRQ_REMAP y +CONFIG_OMAP_IOMMU y +CONFIG_OMAP_IOVMM n note +# Device Drivers > ISDN feature submodules +# Device Drivers > ISDN support +CONFIG_ISDN y +CONFIG_HYSDN_CAPI y +# Device Drivers > ISDN support > CAPI 2.0 subsystem +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON y +CONFIG_CAPI_TRACE y +CONFIG_ISDN_CAPI_MIDDLEWARE y +# Device Drivers > ISDN support > CAPI 2.0 subsystem > Active AVM cards +CONFIG_CAPI_AVM y +CONFIG_ISDN_DRV_AVMB1_B1PCIV4 y +# Device Drivers > ISDN support > CAPI 2.0 subsystem > Active Eicon DIVA Server cards +CONFIG_CAPI_EICON y +CONFIG_ISDN_DIVAS_BRIPCI y +CONFIG_ISDN_DIVAS_PRIPCI y +# Device Drivers > ISDN support > Modular ISDN driver +# Device Drivers > ISDN support > Old ISDN4Linux (deprecated) +CONFIG_ISDN_I4L - flag +CONFIG_ISDN_PPP y +CONFIG_ISDN_PPP_VJ y +CONFIG_ISDN_MPP y +CONFIG_IPPP_FILTER y +CONFIG_ISDN_AUDIO y +CONFIG_ISDN_TTY_FAX y +CONFIG_ISDN_X25 y +# Device Drivers > ISDN support > Siemens Gigaset support +CONFIG_GIGASET_CAPI n +# Device Drivers > iwl3945 / iwl4965 Debugging Options +CONFIG_IWLEGACY_DEBUGFS y +# Device Drivers > LED Support +CONFIG_NEW_LEDS y mark +CONFIG_LEDS_TRIGGERS y +CONFIG_LEDS_TRIGGER_CPU y +CONFIG_LEDS_CLASS y +CONFIG_LEDS_RENESAS_TPU y +CONFIG_LEDS_ASIC3 y +CONFIG_LEDS_PCA9532 m +CONFIG_LEDS_PCA9532_GPIO y +# Device Drivers > Light sensors +# Device Drivers > Macintosh device drivers +CONFIG_MACINTOSH_DRIVERS y +CONFIG_ADB_PMU y +CONFIG_ADB_PMU_LED y +CONFIG_ADB_PMU_LED_IDE n +CONFIG_PMAC_SMU y +CONFIG_ADB y +CONFIG_ADB_CUDA y +CONFIG_PMAC_MEDIABAY y +CONFIG_PMAC_BACKLIGHT y +CONFIG_PMAC_BACKLIGHT_LEGACY y +CONFIG_ADB_MACIO y +CONFIG_INPUT_ADBHID y +CONFIG_THERM_ADT746X y note +CONFIG_SENSORS_AMS m +CONFIG_SENSORS_AMS_PMU n +CONFIG_SENSORS_AMS_I2C n +# Device Drivers > Magnetometer sensors +# Device Drivers > Memory Controller drivers +CONFIG_MEMORY y mark +# Device Drivers > Memory Technology Device (MTD) support +set +tree 'Device Drivers,Memory Technology Device (MTD) support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,Memory Technology Device (MTD) support' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_MTD p policy<(arch armhf &/ value y) | value m> note +CONFIG_MTD_BLKDEVS p policy<(arch armhf &/ value y) | value m> note +CONFIG_MTD_BLOCK p policy<(arch armhf &/ value y) | value m> note +CONFIG_MTD_CHAR p policy<(arch armhf &/ value y) | value m> note +CONFIG_MTD_OF_PARTS p policy<(arch armhf &/ value y) | value m> note +CONFIG_SM_FTL m note +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK -1 +CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED n +CONFIG_MTD_REDBOOT_PARTS_READONLY n +CONFIG_NFTL_RW y +CONFIG_MTD_NAND_ECC_SMC n +CONFIG_MTD_CMDLINE_PARTS y +# Device Drivers > Memory Technology Device (MTD) support > Enable UBI - Unsorted block images +CONFIG_MTD_UBI_WL_THRESHOLD 4096 +CONFIG_MTD_UBI_BEB_LIMIT 20 +CONFIG_MTD_UBI_FASTMAP y +# Device Drivers > Memory Technology Device (MTD) support > LPDDR flash memory drivers +# Device Drivers > Memory Technology Device (MTD) support > Mapping drivers for chip access +CONFIG_MTD_COMPLEX_MAPPINGS y +CONFIG_MTD_PHYSMAP_COMPAT n +CONFIG_MTD_PCMCIA_ANONYMOUS n +# Device Drivers > Memory Technology Device (MTD) support > NAND Device Support +CONFIG_MTD_NAND p policy<(arch armhf &/ value y) | value m> note +CONFIG_MTD_NAND_OMAP2 p policy<(arch armhf &/ value y) | value m> note +CONFIG_MTD_NAND_ECC_BCH y +CONFIG_MTD_NAND_MUSEUM_IDS n +CONFIG_MTD_NAND_OMAP_BCH y +CONFIG_MTD_NAND_OMAP_BCH8 y +# Device Drivers > Memory Technology Device (MTD) support > OneNAND Device Support +CONFIG_MTD_ONENAND_VERIFY_WRITE y +CONFIG_MTD_ONENAND_OTP n +CONFIG_MTD_ONENAND_2X_PROGRAM y +CONFIG_MTD_ONENAND_SIM n +# Device Drivers > Memory Technology Device (MTD) support > RAM/ROM/Flash chip drivers +CONFIG_MTD_CFI_ADV_OPTIONS n +CONFIG_MTD_MAP_BANK_WIDTH_1 y +CONFIG_MTD_MAP_BANK_WIDTH_2 y +CONFIG_MTD_MAP_BANK_WIDTH_4 y +CONFIG_MTD_MAP_BANK_WIDTH_8 n +CONFIG_MTD_MAP_BANK_WIDTH_16 n +CONFIG_MTD_MAP_BANK_WIDTH_32 n +CONFIG_MTD_CFI_I1 y +CONFIG_MTD_CFI_I2 y +CONFIG_MTD_CFI_I4 n +CONFIG_MTD_CFI_I8 n +# Device Drivers > Memory Technology Device (MTD) support > Self-contained MTD device drivers +CONFIG_MTD_PMC551_BUGFIX n +CONFIG_MTD_DATAFLASH_OTP y +CONFIG_M25PXX_USE_FAST_READ y +CONFIG_MTDRAM_TOTAL_SIZE 4096 +CONFIG_MTDRAM_ERASE_SIZE 128 +CONFIG_MTD_DOCPROBE_ADVANCED n +# Device Drivers > Microsoft Hyper-V guest support +# Device Drivers > Misc devices +CONFIG_CS5535_MFGPT n note +CONFIG_ARM_CHARLCD y +# Device Drivers > Misc devices > EEPROM support +# Device Drivers > Misc devices > Silicon Labs C2 port support +# Device Drivers > Misc devices > Texas Instruments shared transport line discipline +# Device Drivers > MMC/SD/SDIO card support +set +tree 'Device Drivers,MMC/SD/SDIO card support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,MMC/SD/SDIO card support' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_MMC y mark +CONFIG_MMC_BLOCK p policy<(arch armhf &/ value y) | value m> note +CONFIG_MMC_OMAP_HS p policy<(arch armhf &/ value y) | value m> note +CONFIG_MMC_SDHCI_PLTFM p policy<(arch armhf &/ value y) | value m> note +CONFIG_MMC_OMAP p policy<(arch armhf &/ value m)> note +CONFIG_MMC_TEST n flag +CONFIG_MMC_SDHCI p policy<(arch armhf &/ value y) | value m> note +CONFIG_MMC_BLOCK_MINORS 8 +CONFIG_MMC_BLOCK_BOUNCE y +CONFIG_MMC_DW_IDMAC n +CONFIG_MMC_RICOH_MMC y +CONFIG_MMC_ARMMMCI y +CONFIG_MMC_SDHCI_ESDHC_IMX y +CONFIG_MMC_MXC n +# Device Drivers > Mailbox Hardware Support +CONFIG_MAILBOX y mark +CONFIG_PL320_MBOX y +# Device Drivers > Multifunction device drivers +set +tree 'Device Drivers,Multifunction device drivers' ?pattern '^MFD_[^_]+(_SPI|_I2C|_CORE)?$' ?type bool !flag EXPERIMENTAL = y +set +tree 'Device Drivers,Multifunction device drivers' ?pattern '^MFD_[^_]+(_SPI|_I2C|_CORE)?$' ?type bool ?flag EXPERIMENTAL = y note +set +tree 'Device Drivers,Multifunction device drivers' ?pattern '^MFD_[^_]+(_SPI|_I2C|_CORE)?$' ?type tristate ?flag EXPERIMENTAL = y note +CONFIG_MFD_OMAP_USB_HOST y +CONFIG_EZX_PCAP p policy<(arch armhf &/ value n) | value m> flag +CONFIG_MFD_SM501_GPIO n +CONFIG_HTC_I2CPLD y +CONFIG_TWL4030_CORE y +CONFIG_TWL6040_CORE y +CONFIG_PMIC_DA903X y +CONFIG_PMIC_ADP5520 y +CONFIG_ABX500_CORE y +CONFIG_AB3100_CORE y +CONFIG_HTC_EGPIO y +CONFIG_TWL4030_POWER y +CONFIG_MFD_INTEL_MSIC y +# Device Drivers > Multifunction device drivers > Support STMicroelectronics STMPE +CONFIG_STMPE_I2C y +CONFIG_STMPE_SPI y +# Device Drivers > Multifunction device drivers > Support STMicroelectronics STMPE > STMPE Interface Drivers +# Device Drivers > Multimedia Capabilities Port drivers +# Device Drivers > Multimedia support +CONFIG_MEDIA_SUPPORT m mark +CONFIG_MEDIA_ANALOG_TV_SUPPORT y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT y +CONFIG_MEDIA_RC_SUPPORT y +CONFIG_DVB_DYNAMIC_MINORS y +CONFIG_DVB_NET y +CONFIG_DVB_MAX_ADAPTERS 8 +CONFIG_MEDIA_SUBDRV_AUTOSELECT y +CONFIG_SMS_SIANO_RC y +CONFIG_VIDEO_FIXED_MINOR_RANGES n +# Device Drivers > Multimedia support > AM/FM radio receivers/transmitters support +CONFIG_MEDIA_RADIO_SUPPORT y +CONFIG_MEDIA_ATTACH y +# Device Drivers > Multimedia support > AM/FM radio receivers/transmitters support > Customize TV tuners +# Device Drivers > Multimedia support > AM/FM radio receivers/transmitters support > Radio Adapters +CONFIG_RADIO_ADAPTERS y +CONFIG_RADIO_SI470X y +# Device Drivers > Multimedia support > AM/FM radio receivers/transmitters support > Radio Adapters > ISA radio devices +CONFIG_V4L_RADIO_ISA_DRIVERS y +# Device Drivers > Multimedia support > Cameras/video grabbers support +CONFIG_MEDIA_CAMERA_SUPPORT y +CONFIG_MEDIA_CONTROLLER n +# Device Drivers > Multimedia support > Cameras/video grabbers support > ISA and parallel port devices +CONFIG_MEDIA_PARPORT_SUPPORT y +# Device Drivers > Multimedia support > Cameras/video grabbers support > Media test drivers +CONFIG_V4L_TEST_DRIVERS y +# Device Drivers > Multimedia support > Cameras/video grabbers support > Memory-to-memory multimedia devices +CONFIG_V4L_MEM2MEM_DRIVERS y +CONFIG_VIDEO_CODA n +# Device Drivers > Multimedia support > Cameras/video grabbers support > V4L platform devices +CONFIG_V4L_PLATFORM_DRIVERS y +CONFIG_VIDEO_MX3 n +CONFIG_VIDEO_SH_MOBILE_CSI2 p policy<(arch armhf &/ value m) | value n> +CONFIG_VIDEO_SH_MOBILE_CEU p policy<(arch armhf &/ value m) | value n> +# Device Drivers > Multimedia support > Media PCI Adapters +CONFIG_MEDIA_PCI_SUPPORT y +CONFIG_DVB_AV7110_OSD y +CONFIG_VIDEO_SAA7134_RC y +CONFIG_VIDEO_CX25821_ALSA m +# Device Drivers > Multimedia support > Media USB Adapters +CONFIG_MEDIA_USB_SUPPORT y +CONFIG_DVB_USB_DIBUSB_MB_FAULTY n +CONFIG_USB_PWC_INPUT_EVDEV y +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV y +CONFIG_VIDEO_CX231XX_RC y +CONFIG_VIDEO_PVRUSB2_DVB y +CONFIG_VIDEO_PVRUSB2_SYSFS y +CONFIG_VIDEO_STK1160_AC97 y +CONFIG_VIDEO_PVRUSB2_DEBUGIFC n +# Device Drivers > Multimedia support > Media USB Adapters > GSPCA based webcams +# Device Drivers > Multimedia support > Remote controller decoders +CONFIG_RC_DECODERS y +# Device Drivers > Multimedia support > Remote Controller devices +CONFIG_RC_DEVICES y +CONFIG_IR_RX51 n flag +# Device Drivers > Multiple devices driver support (RAID and LVM) +CONFIG_MD y mark mark +CONFIG_BLK_DEV_DM y +CONFIG_BLK_DEV_MD y +CONFIG_DM_UEVENT y +CONFIG_MD_AUTODETECT y +CONFIG_MULTICORE_RAID456 n note +CONFIG_DM_THIN_PROVISIONING m +CONFIG_DM_LOG_USERSPACE m +CONFIG_DM_DELAY m +CONFIG_DM_FLAKEY m +CONFIG_DM_VERITY m +# Device Drivers > Network device support +CONFIG_NETDEVICES y +CONFIG_FDDI y note +CONFIG_PPP y note mark +CONFIG_XEN_NETDEV_FRONTEND y note +CONFIG_CAIF_SPI_SYNC n +CONFIG_DEFXX_MMIO n +CONFIG_HIPPI n +CONFIG_PPP_FILTER y +CONFIG_PPP_MPPE m +CONFIG_PPP_MULTILINK y +CONFIG_PPPOE m +CONFIG_PPTP m +CONFIG_PPPOL2TP m +CONFIG_SLIP_COMPRESSED y +CONFIG_SLIP_SMART y +CONFIG_SLIP_MODE_SLIP6 y +# Device Drivers > Network device support > ARCnet support +# Device Drivers > Network device support > ATM drivers +CONFIG_ATM_DRIVERS y +CONFIG_ATM_ENI_TUNE_BURST n +CONFIG_ATM_NICSTAR_USE_SUNI n +CONFIG_ATM_NICSTAR_USE_IDT77105 n +CONFIG_ATM_IDT77252_RCV_ALL n +CONFIG_ATM_FORE200E_USE_TASKLET n +CONFIG_ATM_FORE200E_TX_RETRY 16 +CONFIG_ATM_FORE200E_DEBUG 0 +CONFIG_ATM_HE_USE_SUNI y +# Device Drivers > Network device support > Ethernet driver support +set +tree 'Device Drivers,Network device support,Ethernet driver support' ?type tristate ?flag EXPERIMENTAL = m note +CONFIG_ETHERNET y +CONFIG_NET_CALXEDA_XGMAC p policy<(arch armhf &/ value y) | value m> note +CONFIG_ACENIC_OMIT_TIGON_I n +CONFIG_NET_CADENCE y +CONFIG_CHELSIO_T1_1G y +CONFIG_NET_TULIP y +CONFIG_DE2104X_DSL 0 +CONFIG_TULIP_MWI n +CONFIG_TULIP_MMIO n +CONFIG_TULIP_NAPI n +CONFIG_SUNDANCE_MMIO n +CONFIG_IGB_DCA y +CONFIG_IXGBE_HWMON y +CONFIG_IXGBE_DCA y +CONFIG_IXGBE_DCB y +CONFIG_SKGE_GENESIS y +CONFIG_MLX4_EN_DCB y +CONFIG_ENC28J60_WRITEVERIFY n +CONFIG_MYRI10GE_DCA y +CONFIG_NET_PACKET_ENGINE y +CONFIG_8139TOO_PIO y +CONFIG_8139TOO_TUNE_TWISTER n +CONFIG_8139TOO_8129 y +CONFIG_8139_OLD_RX_RESET n +CONFIG_SFC_MTD y +CONFIG_SFC_MCDI_MON y +CONFIG_SFC_SRIOV y +CONFIG_STMMAC_PLATFORM y +CONFIG_STMMAC_PCI n +CONFIG_STMMAC_DA n +CONFIG_STMMAC_RING y +CONFIG_VIA_RHINE_MMIO y +CONFIG_WIZNET_BUS_ANY y +CONFIG_CS89x0_PLATFORM y +CONFIG_AX88796_93CX6 n +CONFIG_FEC y +CONFIG_FEC_PTP n +CONFIG_GELIC_WIRELESS y +CONFIG_FS_ENET_HAS_SCC y +CONFIG_FS_ENET_HAS_FCC y +CONFIG_MACE_AAUI_PORT n +#CONFIG_FTGMAC100 n note +#CONFIG_FTMAC100 n note +CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL n +CONFIG_TI_CPSW p policy<(arch armhf &/ value n) | value m> flag +CONFIG_PASEMI_MAC n +CONFIG_XILINX_LL_TEMAC n +CONFIG_XILINX_EMACLITE n +# Device Drivers > Network device support > IEEE 802.15.4 drivers +CONFIG_IEEE802154_FAKEHARD n flag +# Device Drivers > Network device support > Network core driver support +set +tree 'Device Drivers,Network device support,Network core driver support' ?type tristate ?flag EXPERIMENTAL = m note +CONFIG_NET_CORE y +CONFIG_MII y note +CONFIG_TUN y note +CONFIG_VIRTIO_NET p policy<(arch i386 amd64 &/ value y) | (arch armhf &/ value n) | value m> note +CONFIG_NET_FC y +CONFIG_NETCONSOLE_DYNAMIC y +CONFIG_NETPOLL_TRAP n +CONFIG_RIONET_TX_SIZE 128 +CONFIG_RIONET_RX_SIZE 128 +# Device Drivers > Network device support > Network core driver support > Ethernet team driver support (EXPERIMENTAL) +CONFIG_NET_TEAM n +# Device Drivers > Network device support > PHY Device support and infrastructure +set +tree 'Device Drivers,Network device support,PHY Device support and infrastructure' ?pattern '_PHY$' ?type tristate !flag EXPERIMENTAL = y +set +tree 'Device Drivers,Network device support,PHY Device support and infrastructure' ?pattern '_PHY$' ?type tristate ?flag EXPERIMENTAL = y note +CONFIG_PHYLIB y mark mark +CONFIG_FIXED_PHY y +CONFIG_STE10XP y +CONFIG_MDIO_BITBANG y +CONFIG_MDIO_GPIO y +CONFIG_MDIO_BUS_MUX_GPIO y +CONFIG_MDIO_BUS_MUX_MMIOREG y +# Device Drivers > Network device support > S/390 network device drivers +# Device Drivers > Network device support > Wan interfaces support +set +tree 'Device Drivers,Network device support,Wan interfaces support' ?type tristate ?flag EXPERIMENTAL = m note +CONFIG_WAN y +CONFIG_DSCC4_PCISYNC y +CONFIG_DSCC4_PCI_RST y +CONFIG_DLCI_MAX 8 +CONFIG_CYCLOMX_X25 y +CONFIG_SBNI_MULTILINE n +# Device Drivers > Network device support > Wireless LAN +set +tree 'Device Drivers,Network device support,Wireless LAN' ?type tristate ?flag EXPERIMENTAL = m note +CONFIG_WLAN y +CONFIG_BRCMFMAC_USB y +CONFIG_B43_PHY_HT - mark +CONFIG_B43_PHY_N - mark +CONFIG_B43_PHY_HT y +CONFIG_B43_PHY_N y +CONFIG_BRCMDBG - flag +CONFIG_RTL8192DE m note +CONFIG_B43_BCMA_EXTRA n note +CONFIG_B43_BCMA y +CONFIG_B43_PCMCIA n +CONFIG_B43_SDIO n +CONFIG_B43_PHY_LP y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE y +CONFIG_B43LEGACY_DMA_MODE n +CONFIG_B43LEGACY_PIO_MODE n +CONFIG_BRCMFMAC_SDIO y +CONFIG_BRCMFMAC_SDIO_OOB y +CONFIG_BRCM_TRACING y +CONFIG_BRCMDBG n +CONFIG_HOSTAP_FIRMWARE y +CONFIG_HOSTAP_FIRMWARE_NVRAM y +CONFIG_IPW2100_MONITOR y +CONFIG_IPW2200_MONITOR y +CONFIG_IPW2200_RADIOTAP y +CONFIG_IPW2200_PROMISCUOUS y +CONFIG_IPW2200_QOS y +CONFIG_LIBERTAS_MESH y +CONFIG_HERMES_PRISM n +CONFIG_HERMES_CACHE_FW_ON_INIT y +CONFIG_P54_SPI_DEFAULT_EEPROM n +# Device Drivers > Network device support > Wireless LAN > Atheros Wireless Cards +CONFIG_ATH6KL_USB m note +CONFIG_ATH9K_DFS_CERTIFIED n note +CONFIG_ATH5K_TRACER n +CONFIG_ATH5K_PCI y +CONFIG_ATH9K_BTCOEX_SUPPORT y +CONFIG_ATH9K_PCI y +CONFIG_ATH9K_AHB y +CONFIG_ATH9K_DEBUGFS y +CONFIG_ATH9K_RATE_CONTROL y +CONFIG_ATH9K_HTC_DEBUGFS y +CONFIG_CARL9170_LEDS y +CONFIG_CARL9170_DEBUGFS n +CONFIG_CARL9170_HWRNG y +CONFIG_WIL6210_ISR_COR y +# Device Drivers > Network device support > Wireless LAN > Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) +# Device Drivers > Network device support > Wireless LAN > Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) > Debugging Options +CONFIG_IWLWIFI_DEBUGFS y +CONFIG_IWLWIFI_DEVICE_TRACING y +# Device Drivers > Network device support > Wireless LAN > Ralink driver support +CONFIG_RT2800PCI_RT33XX y +CONFIG_RT2800PCI_RT35XX y +CONFIG_RT2800PCI_RT53XX y +CONFIG_RT2800PCI_RT3290 y +CONFIG_RT2800USB_RT33XX y +CONFIG_RT2800USB_RT35XX y +CONFIG_RT2800USB_RT53XX y +CONFIG_RT2800USB_UNKNOWN y +CONFIG_RT2X00_LIB_DEBUGFS n +CONFIG_WL_TI y +# Device Drivers > Network device support > Wireless LAN > TI Wireless LAN support +# Device Drivers > Network device support > Wireless LAN > TI Wireless LAN support > TI wl1251 driver support +# Device Drivers > Parallel port support +CONFIG_PARPORT_PC_FIFO y +CONFIG_PARPORT_PC_SUPERIO n +CONFIG_PARPORT_1284 y +# Device Drivers > Passive cards +set +tree 'Device Drivers,Passive cards' ?type tristate ?flag EXPERIMENTAL = m note +set +tree 'Device Drivers,Passive cards' ?pattern '^HISAX_' ?type bool = y +set +tree 'Device Drivers,Passive cards' ?pattern '^HISAX_NO_' ?type bool = n +CONFIG_HISAX_DEBUG n +CONFIG_DE_AOC y +CONFIG_HISAX_MAX_CARDS 8 +# Device Drivers > Pin controllers +CONFIG_PINMUX y +CONFIG_PINCONF y +CONFIG_PINCTRL_EXYNOS y +CONFIG_PINCTRL_EXYNOS5440 n +CONFIG_PINCTRL_IMX6Q y +# Device Drivers > Plug and Play support +CONFIG_PNP y +CONFIG_PNP_DEBUG_MESSAGES n +CONFIG_ISAPNP y +CONFIG_PNPBIOS y +CONFIG_PNPBIOS_PROC_FS y +# Device Drivers > Power supply class support +CONFIG_POWER_SUPPLY y mark +CONFIG_BATTERY_BQ27X00_I2C y +CONFIG_BATTERY_BQ27X00_PLATFORM y +CONFIG_CHARGER_MANAGER y +# Device Drivers > Power supply class support > Board level reset or power off +CONFIG_POWER_RESET y +CONFIG_POWER_RESET_GPIO y +# Device Drivers > PPS support +CONFIG_PPS_CLIENT_KTIMER n flag +# Device Drivers > PTP clock support +# Device Drivers > Pulse-Width Modulation (PWM) Support +CONFIG_PWM y +# Device Drivers > Real Time Clock +CONFIG_RTC_CLASS y mark mark +CONFIG_RTC_DRV_TWL4030 p policy<(arch armhf &/ value y) | value m> note +CONFIG_RTC_DRV_CMOS p policy<(arch i386 amd64 &/ value y) | value m> note +CONFIG_RTC_DRV_M41T80_WDT y +CONFIG_RTC_HCTOSYS y +CONFIG_RTC_HCTOSYS_DEVICE "rtc0" +CONFIG_RTC_INTF_DEV_UIE_EMUL n +CONFIG_RTC_INTF_DEV y +CONFIG_RTC_INTF_PROC y +CONFIG_RTC_INTF_SYSFS y +CONFIG_RTC_DRV_TEST n flag +CONFIG_RTC_DRV_IMXDI n +CONFIG_RTC_DRV_MXC n +# Device Drivers > Remoteproc drivers (EXPERIMENTAL) +CONFIG_STE_MODEM_RPROC m +CONFIG_OMAP_REMOTEPROC n +# Device Drivers > SCSI device support +set +tree 'Device Drivers,SCSI device support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,SCSI device support' ?type tristate ?flag EXPERIMENTAL = m note +# Device Drivers > SCSI device support > SCSI device support +CONFIG_SCSI y mark +CONFIG_SCSI_CONSTANTS y +CONFIG_SCSI_LOGGING y +CONFIG_SCSI_MULTI_LUN y +CONFIG_SCSI_PROC_FS y +CONFIG_SCSI_SCAN_ASYNC y +CONFIG_SCSI_OSD_DPRINT_SENSE 1 +CONFIG_BLK_DEV_SD y note +CONFIG_BLK_DEV_SR y note +CONFIG_BLK_DEV_SR_VENDOR n note +CONFIG_CHR_DEV_SG y note +CONFIG_SCSI_DEBUG m +CONFIG_SCSI_IBMVFC_TRACE y +CONFIG_SCSI_MESH_SYNC_RATE 5 +CONFIG_SCSI_MESH_RESET_DELAY_MS 4000 +# Device Drivers > SCSI device support > SCSI device support > PCMCIA SCSI adapter support +CONFIG_SCSI_LOWLEVEL_PCMCIA y +# Device Drivers > SCSI device support > SCSI device support > SCSI Device Handlers +# Device Drivers > SCSI device support > SCSI device support > SCSI low-level drivers +CONFIG_SCSI_LOWLEVEL y +CONFIG_SCSI_EATA_LINKED_COMMANDS y +CONFIG_SCSI_EATA_MAX_TAGS 16 +CONFIG_SCSI_EATA_TAGGED_QUEUE y +CONFIG_AIC79XX_CMDS_PER_DEVICE 32 +CONFIG_AIC79XX_DEBUG_MASK 0 +CONFIG_AIC79XX_REG_PRETTY_PRINT y +CONFIG_AIC79XX_RESET_DELAY_MS p policy<(arch powerpc &/ value 15000) | value 5000> +CONFIG_AIC7XXX_CMDS_PER_DEVICE 8 +CONFIG_AIC7XXX_DEBUG_MASK 0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT y +CONFIG_AIC7XXX_RESET_DELAY_MS 15000 +CONFIG_MEGARAID_NEWGEN y +CONFIG_SCSI_IPR_DUMP n +CONFIG_SCSI_IPR_TRACE n +CONFIG_SCSI_IZIP_EPP16 n +CONFIG_SCSI_IZIP_SLOW_CTR n +CONFIG_SCSI_MPT2SAS_LOGGING n +CONFIG_SCSI_MPT2SAS_MAX_SGE 128 +CONFIG_SCSI_MPT3SAS_LOGGING n +CONFIG_SCSI_MPT3SAS_MAX_SGE 128 +CONFIG_SCSI_MVSAS_TASKLET n +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_FLASHPOINT y +CONFIG_SCSI_GENERIC_NCR53C400 y +CONFIG_SCSI_U14_34F_LINKED_COMMANDS y +CONFIG_SCSI_U14_34F_MAX_TAGS 8 +CONFIG_SCSI_U14_34F_TAGGED_QUEUE y +CONFIG_SCSI_VIRTIO m note +CONFIG_SCSI_AIC7XXX_OLD n note +# Device Drivers > SCSI device support > SCSI device support > SCSI Transports +CONFIG_SCSI_FC_TGT_ATTRS y +CONFIG_SCSI_SAS_ATA y +CONFIG_SCSI_SAS_HOST_SMP y +CONFIG_SCSI_SRP_TGT_ATTRS y +CONFIG_SCSI_SPI_ATTRS p policy<(arch i386 amd64 &/ value y) | value m> note +# Device Drivers > Sensors used on soc_camera driver +# Device Drivers > Serial ATA and Parallel ATA drivers +set +tree 'Device Drivers,Serial ATA and Parallel ATA drivers' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Device Drivers,Serial ATA and Parallel ATA drivers' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_ATA y mark +CONFIG_ATA_VERBOSE_ERROR y +CONFIG_SATA_ZPODD y +CONFIG_SATA_PMP y +CONFIG_SATA_HIGHBANK p policy<(arch armhf &/ value y) | value n> note +CONFIG_ATA_ACPI y +CONFIG_ATA_SFF y +CONFIG_ATA_BMDMA y +CONFIG_ATA_GENERIC p policy<(arch i386 amd64 &/ value y) | value m> note +CONFIG_ATA_PIIX p policy<(arch i386 amd64 &/ value y) | value m> note +CONFIG_PATA_ACPI m note +CONFIG_PATA_SIS p policy<(arch i386 amd64 &/ value y) | value m> note +CONFIG_SATA_SVW p policy<(arch powerpc &/ value y) | value m> note +CONFIG_PATA_MACIO y note +CONFIG_PATA_HPT3X3_DMA n note +CONFIG_PATA_IMX n +# Device Drivers > SoC Audio support for SuperH +# Device Drivers > Sonics Silicon Backplane +CONFIG_SSB_PCIHOST y +CONFIG_SSB_PCMCIAHOST n +CONFIG_SSB_SDIOHOST y +CONFIG_SSB_SILENT n +CONFIG_SSB_DEBUG n +CONFIG_SSB_DRIVER_PCICORE y +CONFIG_SSB_DRIVER_GPIO y +# Device Drivers > Sony MemoryStick card support (EXPERIMENTAL) +set +tree 'Device Drivers,Sony MemoryStick card support (EXPERIMENTAL)' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_MEMSTICK m +# Device Drivers > Sound card support +CONFIG_SOUND p policy<(arch armhf &/ value y) | value m> note +# Device Drivers > Sound card support > Advanced Linux Sound Architecture +CONFIG_SND p policy<(arch armhf &/ value y) | value m> note +CONFIG_SND_PCM_OSS n note +CONFIG_SND_MIXER_OSS n +CONFIG_SND_SEQUENCER_OSS n +CONFIG_SND_SEQ_HRTIMER_DEFAULT y +CONFIG_SND_DYNAMIC_MINORS y +CONFIG_SND_SUPPORT_OLD_API y +CONFIG_SND_VERBOSE_PROCFS y +CONFIG_SND_VERBOSE_PRINTK n +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support +CONFIG_SND_OMAP_SOC_OMAP_TWL4030 p policy<(arch armhf &/ value y) | value m> note +CONFIG_SND_SOC p policy<(arch armhf &/ value y) | value m> note +CONFIG_SND_OMAP_SOC p policy<(arch armhf &/ value y) | value m> note +CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040 y +CONFIG_SND_OMAP_SOC_OMAP_HDMI y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > SoC Audio for Freescale i.MX CPUs +CONFIG_SND_IMX_SOC y +CONFIG_SND_SOC_IMX_SGTL5000 y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > SoC Audio for Freescale MXS CPUs +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > SoC Audio for Freescale PowerPC CPUs +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > SoC Audio support for Ux500 platform +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > Apple Onboard Audio driver +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ARM sound devices +CONFIG_SND_ARM y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > FireWire sound devices +CONFIG_SND_FIREWIRE y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > Generic sound devices +CONFIG_SND_DRIVERS y +CONFIG_SND_AC97_POWER_SAVE y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT 0 +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > GSC sound devices +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > ISA sound devices +CONFIG_SND_ISA y +CONFIG_SND_SB16_CSP y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > MIPS sound devices +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > PCI sound devices +CONFIG_SND_PCI y +CONFIG_SND_CS46XX_NEW_DSP y +CONFIG_SND_ES1968_INPUT y +CONFIG_SND_ES1968_RADIO y +CONFIG_SND_FM801_TEA575X_BOOL y +CONFIG_SND_MAESTRO3_INPUT y +CONFIG_SND_BT87X_OVERCLOCK y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > PCI sound devices > Intel HD Audio +set +tree 'Device Drivers,Sound card support,Advanced Linux Sound Architecture,PCI sound devices,Intel HD Audio' ?pattern '^SND_HDA_CODEC_[^_]*$' ?type bool = y +CONFIG_SND_HDA_PREALLOC_SIZE 64 +CONFIG_SND_HDA_HWDEP y +CONFIG_SND_HDA_RECONFIG y +CONFIG_SND_HDA_INPUT_BEEP y +CONFIG_SND_HDA_INPUT_BEEP_MODE 0 +CONFIG_SND_HDA_INPUT_JACK y +CONFIG_SND_HDA_PATCH_LOADER y +CONFIG_SND_HDA_GENERIC y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT 0 +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > PCMCIA sound devices +CONFIG_SND_PCMCIA y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > PowerPC sound devices +CONFIG_SND_PPC y +CONFIG_SND_POWERMAC_AUTO_DRC y +CONFIG_SND_PS3_DEFAULT_START_DELAY 2000 +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > Sparc sound devices +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > SPI sound devices +CONFIG_SND_SPI y +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > SUPERH sound devices +# Device Drivers > Sound card support > Advanced Linux Sound Architecture > USB sound devices +CONFIG_SND_USB y +CONFIG_SND_USB_CAIAQ_INPUT y +# Device Drivers > Sound card support > Open Sound System (DEPRECATED) +# Device Drivers > Sound card support > Open Sound System (DEPRECATED) > OSS sound modules +# Device Drivers > Speakup console speech +# Device Drivers > SPI support +set +tree 'Device Drivers,SPI support' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_SPI y +CONFIG_SPI_XILINX n +CONFIG_SPI_DW_MID_DMA y +CONFIG_SPI_FSL_SPI n +CONFIG_SPI_FSL_ESPI y +# Device Drivers > Staging drivers +CONFIG_STAGING y +CONFIG_ZRAM m mark note +CONFIG_ZCACHE y mark note +CONFIG_PANEL_CHANGE_MESSAGE n +CONFIG_PANEL_PARPORT 0 +CONFIG_PANEL_PROFILE 5 +CONFIG_SBE_PMCC4_NCOMM y +CONFIG_DRM_OMAP n +CONFIG_OMAP_BANDGAP n +CONFIG_ZSMALLOC y note +# Device Drivers > Staging drivers > Data acquisition support (comedi) +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB 20480 +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB 2048 +# Device Drivers > Staging drivers > Data acquisition support (comedi) > Comedi ISA and PC/104 drivers +CONFIG_COMEDI_ISA_DRIVERS y +# Device Drivers > Staging drivers > Data acquisition support (comedi) > Comedi misc drivers +CONFIG_COMEDI_MISC_DRIVERS y +# Device Drivers > Staging drivers > Data acquisition support (comedi) > Comedi PCI drivers +CONFIG_COMEDI_PCI_DRIVERS y +# Device Drivers > Staging drivers > Data acquisition support (comedi) > Comedi PCMCIA drivers +CONFIG_COMEDI_PCMCIA_DRIVERS y +# Device Drivers > Staging drivers > Data acquisition support (comedi) > Comedi USB drivers +CONFIG_COMEDI_USB_DRIVERS y +# Device Drivers > Staging drivers > DSP Bridge driver +CONFIG_TIDSPBRIDGE n mark +#CONFIG_TIDSPBRIDGE_BACKTRACE n mark +#CONFIG_TIDSPBRIDGE_CACHE_LINE_CHECK n +#CONFIG_TIDSPBRIDGE_NTFY_PWRERR n +#CONFIG_TIDSPBRIDGE_RECOVERY y +# Device Drivers > Staging drivers > GCT GDM72xx WiMAX support +CONFIG_WIMAX_GDM72XX_USB_PM y +CONFIG_WIMAX_GDM72XX_USB y +CONFIG_WIMAX_GDM72XX_K_MODE y +CONFIG_WIMAX_GDM72XX_QOS y +CONFIG_WIMAX_GDM72XX_WIMAX2 y +# Device Drivers > Staging drivers > Line6 USB support +CONFIG_LINE6_USB_DUMP_PCM n +CONFIG_LINE6_USB_IMPULSE_RESPONSE n +# Device Drivers > Staging drivers > Media staging drivers +CONFIG_STAGING_MEDIA y +CONFIG_DT3155_CCIR n note +CONFIG_DT3155_STREAMING y +# Device Drivers > Staging drivers > Media staging drivers > Linux Infrared Remote Control IR receiver/transmitter drivers +CONFIG_LIRC_STAGING y +CONFIG_LIRC_SERIAL_TRANSMITTER y +# Device Drivers > Texas Instruments WL128x FM driver (ST based) +# Device Drivers > TI VLYNQ +# Device Drivers > Ultra Wideband devices +# Device Drivers > USB Network Adapters +set +tree 'Device Drivers,USB Network Adapters' ?pattern '^USB_[^_]*$' ?type bool !flag EXPERIMENTAL = y +set +tree 'Device Drivers,USB Network Adapters' ?pattern '^USB_[^_]*$' ?type bool ?flag EXPERIMENTAL = y note +set +tree 'Device Drivers,USB Network Adapters' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_USB_ALI_M5632 y +# Device Drivers > USB Peripheral Controller +CONFIG_USB_DUMMY_HCD n flag +CONFIG_USB_OMAP n note +CONFIG_USB_M66592 n note +CONFIG_USB_NET2272_DMA y +CONFIG_USB_IMX n +CONFIG_USB_FSL_USB2 p policy<(arch armhf &/ value n) | value m> +# Device Drivers > USB support +CONFIG_USB_SUPPORT y +CONFIG_USB_HCD_BCMA p policy<(arch armhf &/ value n) | value m> note +CONFIG_USB_HCD_SSB p policy<(arch armhf &/ value n) | value m> note +CONFIG_USB_SISUSBVGA_CON n +CONFIG_OMAP_USB2 y +# Device Drivers > USB support > Support for Host-side USB +CONFIG_USB y mark +set +pattern '_USB' ?flag EXPERIMENTAL ?type bool = n +set +pattern '_USB' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_USB_ANNOUNCE_NEW_DEVICES y +CONFIG_USB_DYNAMIC_MINORS y +CONFIG_USB_SUSPEND p policy<(arch armhf &/ value n) | value y> +CONFIG_USB_EHCI_HCD y note +CONFIG_USB_OHCI_HCD y note +CONFIG_USB_UHCI_HCD y note +CONFIG_USB_XHCI_HCD y note +CONFIG_USB_OTG p policy<((arch armhf | flavour powerpc-e500 powerpc-e500mc) &/ value y) | value n> +CONFIG_TWL4030_USB y +CONFIG_XPS_USB_HCD_XILINX y +CONFIG_USB_EHCI_ROOT_HUB_TT y +CONFIG_USB_EHCI_TT_NEWSCHED y +CONFIG_USB_SL811_HCD_ISO y +CONFIG_USB_CHIPIDEA p policy<(arch armhf &/ value y) | value m> +CONFIG_USB_CHIPIDEA_UDC y +CONFIG_USB_CHIPIDEA_HOST y +CONFIG_REALTEK_AUTOPM y +CONFIG_USB_EHCI_HCD_OMAP y +CONFIG_USB_OHCI_HCD_OMAP3 y +CONFIG_USB_ULPI y +CONFIG_USB_EHCI_HCD_PPC_OF y +CONFIG_USB_OHCI_HCD_PPC_OF_BE y +CONFIG_USB_OHCI_HCD_PCI y +CONFIG_USB_EHCI_FSL y +CONFIG_FSL_USB2_OTG y +CONFIG_USB_EHCI_MXC n +CONFIG_USB_IMX21_HCD n +CONFIG_USB_MUSB_AM35X n +CONFIG_TWL6030_USB y +CONFIG_USB_MXS_PHY y +# CONFIG_USB_OHCI_HCD_PLATFORM and CONFIG_USB_EHCI_HCD_PLATFORM must be off on omap +CONFIG_NOP_USB_XCEIV p policy<(arch armhf &/ value y) | value m> note +CONFIG_USB_MUSB_OMAP2PLUS y +CONFIG_USB_INVENTRA_DMA p policy<(arch armhf &/ value y) | value n> note +CONFIG_USB_XHCI_HCD_DEBUGGING n flag +CONFIG_USB_OTG_BLACKLIST_HUB n note +CONFIG_USB_OTG_WHITELIST n note +CONFIG_USB_MUSB_TUSB6010 p policy<(arch armhf &/ value n) | value m> note +CONFIG_USB_MUSB_DSPS p policy<(arch armhf &/ value n) | value m> flag +CONFIG_MUSB_PIO_ONLY p policy<(arch armhf &/ value n) | value y> +# Device Drivers > USB support > Support for Host-side USB > USB DSL modem support +# Device Drivers > USB support > Support for Host-side USB > USB Serial Converter support +set +tree 'Device Drivers,USB support,Support for Host-side USB,USB Serial Converter support' !flag EXPERIMENTAL ?type bool ?pattern '^USB_SERIAL_KEYSPAN_' = y note +CONFIG_USB_SERIAL_GENERIC y +CONFIG_USB_SERIAL_DEBUG m note +CONFIG_USB_SERIAL_SAFE_PADDED n +CONFIG_USB_SERIAL_MOS7715_PARPORT y +# Device Drivers > USB support > USB Gadget Support +CONFIG_USB_ZERO_HNPTEST n flag +CONFIG_USB_FUNCTIONFS m note +CONFIG_USB_GADGETFS m note +CONFIG_USB_GADGET p policy<(arch armhf &/ value y) | value m> note +CONFIG_USB_G_MULTI p policy<(arch armhf &/ value m) | value n> note +CONFIG_USB_GADGET_VBUS_DRAW 2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS 2 +CONFIG_USB_ETH_RNDIS y +CONFIG_USB_ETH_EEM y +CONFIG_USB_FUNCTIONFS_ETH y +CONFIG_USB_FUNCTIONFS_RNDIS y +CONFIG_USB_FUNCTIONFS_GENERIC y +CONFIG_USB_G_DBGP_SERIAL y +CONFIG_USB_G_MULTI_RNDIS y +CONFIG_USB_G_MULTI_CDC y +CONFIG_GADGET_UAC1 y +# Device Drivers > Userspace I/O drivers +# Device Drivers > VFIO Non-Privileged userspace driver framework +# Device Drivers > Virtio drivers +CONFIG_VIRTIO_PCI p policy<(arch i386 amd64 &/ value y) | (arch armhf &/ value n) | value m> note +CONFIG_VIRTIO_MMIO p policy<(arch armhf &/ value n) | value m> note +CONFIG_VIRTIO_BALLOON p policy<(arch armhf &/ value n) | value m> note +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES y +# Device Drivers > Virtualization drivers +CONFIG_VIRT_DRIVERS y +# Device Drivers > VME bridge support +# Device Drivers > Voltage and Current Regulator Support +CONFIG_REGULATOR y +CONFIG_REGULATOR_FIXED_VOLTAGE p policy<(arch armhf &/ value y) | value m> note +CONFIG_REGULATOR_DUMMY n +CONFIG_REGULATOR_88PM8607 y +CONFIG_REGULATOR_LP872X y +CONFIG_REGULATOR_LP8788 y +CONFIG_REGULATOR_TWL4030 y +# Device Drivers > Watchdog Timer Support +CONFIG_WATCHDOG y +CONFIG_WATCHDOG_CORE y +CONFIG_WATCHDOG_NOWAYOUT n +CONFIG_ITCO_VENDOR_SUPPORT y +CONFIG_HPWDT_NMI_DECODING y +CONFIG_BOOKE_WDT_DEFAULT_TIMEOUT 38 +CONFIG_IMX2_WDT n +CONFIG_GEF_WDT n +# Device Drivers > WiMAX Wireless Broadband devices +CONFIG_WIMAX_I2400M_DEBUG_LEVEL 8 +# Device Drivers > X86 Platform Specific Device Drivers +CONFIG_X86_PLATFORM_DEVICES y +CONFIG_DELL_LAPTOP m +CONFIG_SONYPI_COMPAT y +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT y +CONFIG_THINKPAD_ACPI_DEBUGFACILITIES y +CONFIG_THINKPAD_ACPI_UNSAFE_LEDS n +CONFIG_THINKPAD_ACPI_VIDEO y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL y +CONFIG_TC1100_WMI m +CONFIG_INTEL_SCU_IPC y +CONFIG_GPIO_INTEL_PMIC y +# Device Drivers > Xen driver support +CONFIG_XEN_BACKEND y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG y +CONFIG_XEN_BALLOON y +CONFIG_XEN_COMPAT_XENFS y +CONFIG_XEN_MCE_LOG y +CONFIG_XEN_SCRUB_PAGES y +CONFIG_XEN_SELFBALLOONING y +CONFIG_XEN_SYS_HYPERVISOR y +CONFIG_XEN_ACPI_PROCESSOR p policy<(arch i386 amd64 &/ value y) | value m> +# Enable loadable module support +CONFIG_MODULES y +CONFIG_MODULE_FORCE_LOAD n +CONFIG_MODULE_UNLOAD y +CONFIG_MODULE_FORCE_UNLOAD n +CONFIG_MODVERSIONS y +CONFIG_MODULE_SRCVERSION_ALL y +CONFIG_MODULE_SIG y +CONFIG_MODULE_SIG_FORCE n +CONFIG_MODULE_SIG_SHA512 y +# Enable the block layer +CONFIG_BLOCK y +CONFIG_BLK_DEV_BSG y +CONFIG_BLK_DEV_BSGLIB y +CONFIG_BLK_DEV_INTEGRITY y +CONFIG_BLK_DEV_THROTTLING y note +CONFIG_LBDAF y +# Executable file formats / Emulations +CONFIG_IA32_AOUT n note +CONFIG_IA32_EMULATION y +CONFIG_X86_X32 y +# File systems +set +tree 'File systems' ?flag EXPERIMENTAL ?type bool = n +set +tree 'File systems' ?flag EXPERIMENTAL ?type tristate = m note +set +tree 'File systems' ?pattern _POSIX_ACL$ !flag EXPERIMENTAL = y +set +tree 'File systems' ?pattern _SECURITY$ !flag EXPERIMENTAL = y +set +tree 'File systems' ?pattern _XATTR$ !flag EXPERIMENTAL = y +CONFIG_EXT3_FS y note mark +CONFIG_EXT4_FS y note mark +CONFIG_FUSE_FS y note +CONFIG_DNOTIFY y +CONFIG_FANOTIFY y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS y +CONFIG_FILE_LOCKING y +CONFIG_INOTIFY_USER y +CONFIG_QUOTA y +CONFIG_QUOTA_NETLINK_INTERFACE y +CONFIG_PRINT_QUOTA_WARNING n +CONFIG_BTRFS_FS_POSIX_ACL y +CONFIG_EXT2_FS_XIP n +CONFIG_EXT3_DEFAULTS_TO_ORDERED y +CONFIG_GFS2_FS_LOCKING_DLM y +CONFIG_JFS_STATISTICS y +CONFIG_OCFS2_FS_STATS y +CONFIG_OCFS2_DEBUG_MASKLOG y +CONFIG_REISERFS_CHECK n +CONFIG_REISERFS_PROC_INFO n +CONFIG_XFS_QUOTA y +CONFIG_XFS_RT y +# File systems > Caches +CONFIG_CACHEFILES_HISTOGRAM n +CONFIG_FSCACHE_HISTOGRAM n +CONFIG_FSCACHE_OBJECT_LIST n +CONFIG_FSCACHE_STATS y +# File systems > CD-ROM/DVD Filesystems +CONFIG_JOLIET y +CONFIG_ZISOFS y +# File systems > Distributed Lock Manager (DLM) +# File systems > DOS/FAT/NT Filesystems +CONFIG_FAT_DEFAULT_CODEPAGE 437 +CONFIG_FAT_DEFAULT_IOCHARSET "iso8859-1" +CONFIG_NTFS_RW n +CONFIG_VFAT_FS p policy<(arch armhf i386 amd64 &/ value y) | value m> note +# File systems > Miscellaneous filesystems +CONFIG_ECRYPT_FS y note +CONFIG_MISC_FILESYSTEMS y +CONFIG_F2FS_STAT_FS y +CONFIG_JFFS2_CMODE_FAVOURLZO y +CONFIG_JFFS2_COMPRESSION_OPTIONS y +CONFIG_JFFS2_FS_DEBUG 0 +CONFIG_JFFS2_FS_WBUF_VERIFY n +CONFIG_JFFS2_FS_WRITEBUFFER y +CONFIG_JFFS2_LZO y +CONFIG_JFFS2_RTIME y +CONFIG_JFFS2_RUBIN n +CONFIG_JFFS2_SUMMARY n +CONFIG_JFFS2_ZLIB y +CONFIG_PSTORE y +CONFIG_PSTORE_CONSOLE n note +CONFIG_PSTORE_FTRACE n +CONFIG_ROMFS_BACKED_BY_BLOCK y +CONFIG_SQUASHFS_4K_DEVBLK_SIZE n +CONFIG_SQUASHFS_EMBEDDED n +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE 3 +CONFIG_SQUASHFS_LZO y +CONFIG_SQUASHFS_XZ y +CONFIG_SQUASHFS_ZLIB y +CONFIG_UBIFS_FS_ADVANCED_COMPR n +CONFIG_UBIFS_FS_LZO y +CONFIG_UBIFS_FS_ZLIB y +CONFIG_LOGFS n note +CONFIG_SQUASHFS_4K_DEVBLK_SIZE n note +# File systems > Native language support +CONFIG_NLS_CODEPAGE_437 p policy<(arch armhf i386 amd64 &/ value y) | value m> note +CONFIG_NLS y note +CONFIG_NLS_DEFAULT "utf8" +# File systems > Network File Systems +CONFIG_NETWORK_FILESYSTEMS y +CONFIG_CIFS_ACL y +CONFIG_CIFS_DEBUG y +CONFIG_CIFS_DEBUG2 n +CONFIG_CIFS_DFS_UPCALL y +CONFIG_CIFS_FSCACHE y +CONFIG_CIFS_POSIX y +CONFIG_CIFS_SMB2 y +CONFIG_CIFS_STATS y +CONFIG_CIFS_STATS2 n +CONFIG_CIFS_UPCALL y +CONFIG_CIFS_WEAK_PW_HASH y +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 n +CONFIG_NCPFS_STRONG y +CONFIG_NFSD_V3_ACL y +CONFIG_NFSD_V3 y +CONFIG_NFSD_V4 y note +CONFIG_NFS_FSCACHE y +CONFIG_NFS_SWAP y +CONFIG_NFS_USE_LEGACY_DNS n +CONFIG_NFS_V3_ACL y +CONFIG_NFS_V4_1 y +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN "kernel.org" +# File systems > Pseudo filesystems +CONFIG_HUGETLBFS y +CONFIG_SYSFS y +CONFIG_PROC_FS y +CONFIG_PROC_KCORE y +CONFIG_PROC_PAGE_MONITOR y +CONFIG_PROC_SYSCTL y +CONFIG_PROC_VMCORE y +CONFIG_TMPFS y +# Firmware Drivers +CONFIG_EDD y note +CONFIG_EDD_OFF y +CONFIG_EFI_VARS y note +CONFIG_EFI_VARS_PSTORE n note +CONFIG_FIRMWARE_MEMMAP y +CONFIG_DMIID y +CONFIG_ISCSI_IBFT_FIND y +# Firmware Drivers > Google Firmware Drivers +CONFIG_GOOGLE_FIRMWARE n +# Firmware Drivers > Google Firmware Drivers > Google Firmware Drivers +# Floating point emulation +CONFIG_FPE_NWFPE y +CONFIG_FPE_FASTFPE n +CONFIG_VFP y +CONFIG_NEON y +CONFIG_FPE_NWFPE_XP n +# General setup +CONFIG_EXPERIMENTAL y +CONFIG_INIT_PASS_ALL_PARAMS y mark note +CONFIG_CROSS_COMPILE "" +CONFIG_LOCALVERSION "" +CONFIG_LOCALVERSION_AUTO n +CONFIG_KERNEL_GZIP y +CONFIG_DEFAULT_HOSTNAME "(none)" +CONFIG_VERSION_SIGNATURE "" +CONFIG_SWAP y +CONFIG_SYSVIPC y +CONFIG_POSIX_MQUEUE y +CONFIG_FHANDLE y +CONFIG_AUDIT y +CONFIG_AUDITSYSCALL y +CONFIG_AUDIT_LOGINUID_IMMUTABLE n note +CONFIG_IKCONFIG n note +CONFIG_LOG_BUF_SHIFT 17 +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED y +CONFIG_NUMA_BALANCING y +CONFIG_CHECKPOINT_RESTORE y +CONFIG_SCHED_AUTOGROUP y +CONFIG_SYSFS_DEPRECATED n +CONFIG_RELAY y +CONFIG_BLK_DEV_INITRD y +CONFIG_INITRAMFS_SOURCE "" +CONFIG_RD_GZIP y +CONFIG_RD_BZIP2 y +CONFIG_RD_LZMA y +CONFIG_RD_XZ y +CONFIG_RD_LZO y +CONFIG_CC_OPTIMIZE_FOR_SIZE n +CONFIG_UID16 y +CONFIG_SYSCTL_SYSCALL y +CONFIG_KALLSYMS y +CONFIG_KALLSYMS_ALL y +CONFIG_PRINTK y +CONFIG_BUG y +CONFIG_ELF_CORE y +CONFIG_PCSPKR_PLATFORM y +CONFIG_BASE_FULL y +CONFIG_FUTEX y +CONFIG_EPOLL y +CONFIG_SIGNALFD y +CONFIG_TIMERFD y +CONFIG_EVENTFD y +CONFIG_SHMEM y +CONFIG_AIO y +CONFIG_EMBEDDED n +CONFIG_VM_EVENT_COUNTERS y +CONFIG_PCI_QUIRKS y +CONFIG_SLUB_DEBUG y +CONFIG_COMPAT_BRK n +CONFIG_SLUB y +CONFIG_PROFILING y +CONFIG_OPROFILE m +CONFIG_OPROFILE_EVENT_MULTIPLEX n +CONFIG_KPROBES y +CONFIG_JUMP_LABEL y +CONFIG_UPROBES y +# General setup > Configure standard kernel features (expert users) +CONFIG_EXPERT y +# General setup > Control Group support +CONFIG_CGROUPS y +CONFIG_CGROUP_FREEZER y +CONFIG_CGROUP_DEVICE y +CONFIG_CPUSETS y +CONFIG_PROC_PID_CPUSET y +CONFIG_CGROUP_CPUACCT y +CONFIG_RESOURCE_COUNTERS y +CONFIG_MEMCG y +CONFIG_MEMCG_SWAP y +CONFIG_MEMCG_SWAP_ENABLED n +CONFIG_MEMCG_KMEM n +CONFIG_CGROUP_HUGETLB y +CONFIG_CGROUP_PERF y +CONFIG_BLK_CGROUP y +# General setup > Control Group support > Group CPU scheduler +CONFIG_CGROUP_SCHED y +CONFIG_FAIR_GROUP_SCHED y +CONFIG_CFS_BANDWIDTH y +CONFIG_RT_GROUP_SCHED y +# General setup > CPU/Task time and stats accounting +CONFIG_TICK_CPU_ACCOUNTING p policy<(flavour powerpc64-smp &/ value n) | value y> +CONFIG_VIRT_CPU_ACCOUNTING p policy<(flavour powerpc64-smp &/ value y) | value n>> +CONFIG_BSD_PROCESS_ACCT y +CONFIG_BSD_PROCESS_ACCT_V3 y +CONFIG_TASKSTATS y +CONFIG_TASK_DELAY_ACCT y +CONFIG_TASK_XACCT y +CONFIG_TASK_IO_ACCOUNTING y +# General setup > GCOV-based kernel profiling +CONFIG_GCOV_KERNEL n +# General setup > IRQ subsystem +CONFIG_SPARSE_IRQ y +# General setup > Kernel Performance Events And Counters +CONFIG_PERF_EVENTS y +# General setup > Namespaces support +CONFIG_NAMESPACES y +CONFIG_UTS_NS y +CONFIG_IPC_NS y +CONFIG_PID_NS y +CONFIG_NET_NS y +# General setup > RCU Subsystem +CONFIG_TREE_RCU y +CONFIG_RCU_USER_QS n +CONFIG_RCU_FANOUT p policy<((arch amd64 | flavour powerpc64-smp) &/ value 64) | value 32> +CONFIG_RCU_FANOUT_LEAF 16 +CONFIG_RCU_FANOUT_EXACT n +CONFIG_RCU_FAST_NO_HZ y +CONFIG_RCU_NOCB_CPU n +CONFIG_RCU_BOOST n +# General setup > Timers subsystem +CONFIG_NO_HZ y +CONFIG_HIGH_RES_TIMERS y +# IO Schedulers +set +tree 'IO Schedulers' ?flag EXPERIMENTAL ?type bool = n +set +tree 'IO Schedulers' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_IOSCHED_CFQ y +CONFIG_IOSCHED_DEADLINE y +CONFIG_DEFAULT_DEADLINE y +CONFIG_CFQ_GROUP_IOSCHED y +# Kernel Features +CONFIG_SMP y +CONFIG_XEN y +CONFIG_NR_CPUS p policy<(flavour powerpc64-smp &/ value 1024) | (arch amd64 &/ value 256) | (arch i386 &/ value 8) | (flavour powerpc-e500 powerpc-e500mc &/ value 8) | value 4> +CONFIG_SCHED_SMT p policy<(arch armhf &/ value n) | value y> +CONFIG_SCHED_MC y +CONFIG_PREEMPT_VOLUNTARY y +CONFIG_SPARSEMEM_MANUAL p policy<((arch amd64 | flavour powerpc64-smp) &/ value y) | value n> +CONFIG_FLATMEM_MANUAL p policy<((arch amd64 | flavour powerpc64-smp) &/ value n) | value y> +CONFIG_SPARSEMEM_VMEMMAP y +CONFIG_MOVABLE_NODE y +CONFIG_MEMORY_HOTPLUG y +CONFIG_MEMORY_HOTREMOVE p policy<(arch amd64 &/ value y) | value n> +CONFIG_BALLOON_COMPACTION y +CONFIG_COMPACTION y +CONFIG_MIGRATION y +CONFIG_KSM p policy<(arch armhf &/ value n) | value y> +CONFIG_DEFAULT_MMAP_MIN_ADDR p policy<(arch armhf &/ value 32768) | value 65536> +CONFIG_MEMORY_FAILURE y +CONFIG_HWPOISON_INJECT m +CONFIG_TRANSPARENT_HUGEPAGE y +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE y +CONFIG_CROSS_MEMORY_ATTACH y +CONFIG_CLEANCACHE y +CONFIG_FRONTSWAP y +CONFIG_SECCOMP y +CONFIG_CC_STACKPROTECTOR y mark +CONFIG_HOTPLUG_CPU y +CONFIG_SMP_ON_UP y +CONFIG_ARM_CPU_TOPOLOGY y +CONFIG_ARM_ARCH_TIMER y +CONFIG_VMSPLIT_3G y +CONFIG_LOCAL_TIMERS y +CONFIG_THUMB2_KERNEL n +CONFIG_AEABI y +CONFIG_OABI_COMPAT y +CONFIG_HIGHMEM y +CONFIG_HIGHPTE y +CONFIG_HW_PERF_EVENTS y +CONFIG_FORCE_MAX_ZONEORDER p policy +CONFIG_UACCESS_WITH_MEMCPY n +# Kernel hacking +CONFIG_PRINTK_TIME y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL 4 +CONFIG_ENABLE_WARN_DEPRECATED n +CONFIG_ENABLE_MUST_CHECK n +CONFIG_FRAME_WARN 1024 +CONFIG_MAGIC_SYSRQ y +CONFIG_STRIP_ASM_SYMS n +CONFIG_READABLE_ASM n +CONFIG_UNUSED_SYMBOLS y +CONFIG_DEBUG_FS y note +CONFIG_HEADERS_CHECK n +CONFIG_DEBUG_SECTION_MISMATCH n +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC n +CONFIG_PANIC_ON_OOPS n note +CONFIG_SLUB_DEBUG_ON n +CONFIG_SLUB_STATS n +CONFIG_SPARSE_RCU_POINTER n +CONFIG_DEBUG_BUGVERBOSE n +CONFIG_DEBUG_MEMORY_INIT n +CONFIG_RCU_CPU_STALL_TIMEOUT 60 +CONFIG_LKDTM n flag +CONFIG_EVENT_POWER_TRACING_DEPRECATED y +CONFIG_PROVIDE_OHCI1394_DMA_INIT n +CONFIG_FIREWIRE_OHCI_REMOTE_DMA n +CONFIG_DYNAMIC_DEBUG n +CONFIG_DMA_API_DEBUG n +CONFIG_ATOMIC64_SELFTEST n +CONFIG_ASYNC_RAID6_TEST m +CONFIG_TEST_KSTRTOX m +CONFIG_STRICT_DEVMEM y +CONFIG_X86_VERBOSE_BOOTUP n +CONFIG_EARLY_PRINTK y +CONFIG_EARLY_PRINTK_DBGP y +CONFIG_DEBUG_STACKOVERFLOW n +CONFIG_X86_PTDUMP n +CONFIG_DEBUG_RODATA y mark +CONFIG_DEBUG_RODATA_TEST n +CONFIG_DEBUG_SET_MODULE_RONX y mark +CONFIG_DEBUG_NX_TEST n flag +CONFIG_DEBUG_TLBFLUSH n +CONFIG_IOMMU_DEBUG n +CONFIG_IOMMU_STRESS n +CONFIG_X86_DECODER_SELFTEST n +CONFIG_IO_DELAY_0XED y +CONFIG_DEBUG_BOOT_PARAMS n +CONFIG_CPA_DEBUG n +CONFIG_OPTIMIZE_INLINING y +CONFIG_DEBUG_STRICT_USER_COPY_CHECKS n +CONFIG_DEBUG_NMI_SELFTEST n +CONFIG_RCU_CPU_STALL_VERBOSE y +CONFIG_ARM_UNWIND y +CONFIG_DEBUG_USER n +CONFIG_DEBUG_LL n +CONFIG_OC_ETM y +CONFIG_ARM_KPROBES_TEST m +CONFIG_PID_IN_CONTEXTIDR n +CONFIG_DEBUG_IMX6Q_UART_PORT 1 +CONFIG_EARLY_PRINTK_INTEL_MID y +CONFIG_DOUBLEFAULT y +CONFIG_PPC_DISABLE_WERROR y +CONFIG_PRINT_STACK_DEPTH 64 +CONFIG_HCALL_STATS n +CONFIG_PPC_EMULATED_STATS n +CONFIG_CODE_PATCHING_SELFTEST n +CONFIG_FTR_FIXUP_SELFTEST n +CONFIG_MSI_BITMAP_SELFTEST n +CONFIG_XMON n +CONFIG_BOOTX_TEXT n +CONFIG_PPC_EARLY_DEBUG n +CONFIG_BDI_SWITCH n +# Kernel hacking > Kernel debugging +CONFIG_DEBUG_KERNEL y +CONFIG_LOCKUP_DETECTOR y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC n +CONFIG_DETECT_HUNG_TASK y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT 120 +CONFIG_BOOTPARAM_HUNG_TASK_PANIC n +CONFIG_SCHED_DEBUG y +CONFIG_SCHEDSTATS y +CONFIG_TIMER_STATS y +CONFIG_RT_MUTEX_TESTER n +CONFIG_PROVE_LOCKING n +CONFIG_LOCK_STAT n +CONFIG_TEST_LIST_SORT n +CONFIG_FRAME_POINTER y +CONFIG_BOOT_PRINTK_DELAY y +CONFIG_RCU_TORTURE_TEST n flag +CONFIG_RCU_CPU_STALL_INFO n +CONFIG_RCU_TRACE n +CONFIG_KPROBES_SANITY_TEST n +CONFIG_BACKTRACE_SELF_TEST n flag +CONFIG_NOTIFIER_ERROR_INJECTION m +CONFIG_CPU_NOTIFIER_ERROR_INJECT m +CONFIG_PM_NOTIFIER_ERROR_INJECT m +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT m +CONFIG_FAULT_INJECTION n +CONFIG_LATENCYTOP y +CONFIG_RBTREE_TEST m +CONFIG_INTERVAL_TREE_TEST m +CONFIG_PROVE_RCU_DELAY n +CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT n +CONFIG_DEBUG_INFO y +# Kernel hacking > Kernel debugging > KGDB: kernel debugger +CONFIG_KGDB y +CONFIG_KGDB_SERIAL_CONSOLE y +CONFIG_KGDB_TESTS n +CONFIG_KGDB_LOW_LEVEL_TRAP y +CONFIG_KGDB_KDB y +CONFIG_KDB_KEYBOARD y +# Kernel hacking > Kernel debugging > kmemcheck: trap use of uninitialized memory +# Kernel hacking > Sample kernel code +CONFIG_SAMPLES n +# Kernel hacking > Tracers +CONFIG_FTRACE y +CONFIG_FUNCTION_TRACER y +CONFIG_FUNCTION_GRAPH_TRACER y +CONFIG_IRQSOFF_TRACER n +CONFIG_SCHED_TRACER y +CONFIG_FTRACE_SYSCALLS y +CONFIG_BRANCH_PROFILE_NONE y +CONFIG_PROFILE_ANNOTATED_BRANCHES n +CONFIG_PROFILE_ALL_BRANCHES n +CONFIG_STACK_TRACER y +CONFIG_BLK_DEV_IO_TRACE y +CONFIG_KPROBE_EVENT y +CONFIG_UPROBE_EVENT y +CONFIG_DYNAMIC_FTRACE y +CONFIG_FUNCTION_PROFILER y +CONFIG_FTRACE_STARTUP_TEST n +CONFIG_MMIOTRACE y +CONFIG_MMIOTRACE_TEST n flag +CONFIG_RING_BUFFER_BENCHMARK n flag +CONFIG_PREEMPT_TRACER y +# Kernel options +CONFIG_APM_EMULATION p policy<(arch armhf &/ value n) | value m> note +CONFIG_SWIOTLB y +CONFIG_NUMA y +CONFIG_HZ_250 y +CONFIG_CMDLINE_BOOL n +CONFIG_SUSPEND y +CONFIG_SUSPEND_FREEZER y +CONFIG_HIBERNATION y +CONFIG_PM_STD_PARTITION "" +CONFIG_PM_AUTOSLEEP n +CONFIG_PM_WAKELOCKS y +CONFIG_PM_RUNTIME y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS n +CONFIG_PM_WAKELOCKS_LIMIT 100 +CONFIG_PM_WAKELOCKS_GC y +CONFIG_PM_OPP y +CONFIG_MATH_EMULATION n +CONFIG_FA_DUMP y +CONFIG_IRQ_ALL_CPUS n +CONFIG_PPC_4K_PAGES y +CONFIG_PPC_DENORMALISATION n +CONFIG_EXTRA_TARGETS "" +# Library routines +CONFIG_CRC16 y note +CONFIG_CRC32 y note +CONFIG_XZ_DEC y note +CONFIG_CRC_T10DIF y note +CONFIG_CRC32_SELFTEST n flag +CONFIG_CRC32_SLICEBY8 y +CONFIG_XZ_DEC_X86 y +CONFIG_XZ_DEC_POWERPC y +CONFIG_XZ_DEC_IA64 y +CONFIG_XZ_DEC_ARM y +CONFIG_XZ_DEC_ARMTHUMB y +CONFIG_XZ_DEC_SPARC y +CONFIG_AVERAGE y +CONFIG_DDR y +# Networking options +CONFIG_UNIX y note +CONFIG_PACKET y note +CONFIG_IEEE802154 m note +CONFIG_LAPB m note +CONFIG_X25 m note +CONFIG_ATM_BR2684_IPFILTER n +CONFIG_ATM_CLIP_NO_ICMP n +CONFIG_BATMAN_ADV_BLA y +CONFIG_BATMAN_ADV_DAT y +CONFIG_BPF_JIT y note +CONFIG_BRIDGE_IGMP_SNOOPING y +CONFIG_DCB y +CONFIG_IPDDP_DECAP y +CONFIG_IPDDP_ENCAP y +CONFIG_IPX_INTERN n +CONFIG_NETWORK_SECMARK y +CONFIG_VLAN_8021Q_GVRP y +CONFIG_COPS_DAYNA y +CONFIG_COPS_TANGENT y +CONFIG_DNS_RESOLVER y note +CONFIG_XFRM_SUB_POLICY n +CONFIG_XFRM_MIGRATE n +CONFIG_XFRM_STATISTICS n +CONFIG_NET_KEY_MIGRATE n +CONFIG_NETWORK_PHY_TIMESTAMPING n +CONFIG_DECNET_ROUTER n +CONFIG_IEEE802154_6LOWPAN m +CONFIG_MAC802154 m note +# Networking options > DCCP CCIDs Configuration (EXPERIMENTAL) +CONFIG_IP_DCCP_CCID3 n +# Networking options > DCCP Kernel Hacking +# Networking options > Network packet filtering framework (Netfilter) +set +tree 'Networking options,Network packet filtering framework (Netfilter)' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_NETFILTER y mark +# Networking options > Network packet filtering framework (Netfilter) > Advanced netfilter configuration +CONFIG_BRIDGE_NETFILTER y +CONFIG_NETFILTER_ADVANCED y +# Networking options > Network packet filtering framework (Netfilter) > Advanced netfilter configuration > DECnet: Netfilter Configuration +# Networking options > Network packet filtering framework (Netfilter) > Core Netfilter Configuration +CONFIG_NETFILTER_NETLINK_QUEUE_CT y +CONFIG_NF_CONNTRACK_EVENTS y +CONFIG_NF_CONNTRACK_MARK y +CONFIG_NF_CONNTRACK_PROCFS n flag +CONFIG_NF_CONNTRACK_SECMARK y +CONFIG_NF_CONNTRACK_TIMEOUT y +CONFIG_NF_CONNTRACK_TIMESTAMP y +CONFIG_NF_CONNTRACK_ZONES y +# Networking options > Network packet filtering framework (Netfilter) > Ethernet Bridge tables (ebtables) support +CONFIG_BRIDGE_EBT_ULOG n flag +# Networking options > Network packet filtering framework (Netfilter) > IP: Netfilter Configuration +CONFIG_IP_NF_QUEUE n flag +# Networking options > Network packet filtering framework (Netfilter) > IP set support +CONFIG_IP_SET_MAX 256 +# Networking options > Network packet filtering framework (Netfilter) > IPv6: Netfilter Configuration +# Networking options > Network packet filtering framework (Netfilter) > IP virtual server support +CONFIG_IP_VS_IPV6 n flag +CONFIG_IP_VS_NFCT y +CONFIG_IP_VS_PROTO_AH 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_SH_TAB_BITS 8 +CONFIG_IP_VS_TAB_BITS 12 +# Networking options > Network testing +CONFIG_NET_DROP_MONITOR n +CONFIG_NET_TCPPROBE m +# Networking options > QoS and/or fair queueing +CONFIG_NET_SCHED y mark +CONFIG_CLS_U32_MARK y +CONFIG_CLS_U32_PERF n +CONFIG_GACT_PROB y +CONFIG_NET_CLS_ACT y +CONFIG_NET_CLS_IND n flag +CONFIG_NET_EMATCH y +CONFIG_NET_EMATCH_STACK 32 +# Networking options > TCP/IP networking +set +tree 'Networking options,TCP/IP networking' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_NETLABEL y mark +CONFIG_INET y note +CONFIG_INET_LRO y note +CONFIG_RDS m note +CONFIG_ARPD n +CONFIG_IP_ADVANCED_ROUTER y +CONFIG_IP_FIB_TRIE_STATS y +CONFIG_IP_MROUTE y +CONFIG_IP_MROUTE_MULTIPLE_TABLES n +CONFIG_IP_MULTICAST y +CONFIG_IP_MULTIPLE_TABLES y +CONFIG_IP_PIMSM_V1 y +CONFIG_IP_PIMSM_V2 y +CONFIG_IP_PNP y +CONFIG_IP_PNP_BOOTP n +CONFIG_IP_PNP_DHCP y +CONFIG_IP_PNP_RARP n +CONFIG_IP_ROUTE_MULTIPATH y +CONFIG_IP_ROUTE_VERBOSE y +CONFIG_NET_IPGRE_BROADCAST y note +CONFIG_SYN_COOKIES y mark +CONFIG_TCP_MD5SIG y mark +# Networking options > TCP/IP networking > Layer Two Tunneling Protocol (L2TP) +CONFIG_L2TP_V3 n +# Networking options > TCP/IP networking > TCP: advanced congestion control +CONFIG_TCP_CONG_ADVANCED y +CONFIG_TCP_CONG_CUBIC y note +CONFIG_DEFAULT_CUBIC y +# Networking options > TCP/IP networking > The IPv6 protocol +CONFIG_IPV6 y note +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION m note +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES y +CONFIG_IPV6_MROUTE y +CONFIG_IPV6_MULTIPLE_TABLES y +CONFIG_IPV6_PIMSM_V2 y +CONFIG_IPV6_PRIVACY y mark +CONFIG_IPV6_ROUTER_PREF y +CONFIG_IPV6_ROUTE_INFO y +CONFIG_IPV6_SIT_6RD y +CONFIG_IPV6_SUBTREES y +CONFIG_IPV6_OPTIMISTIC_DAD n +# Networking options > TCP/IP networking > The SCTP Protocol (EXPERIMENTAL) +CONFIG_SCTP_COOKIE_HMAC_MD5 y +CONFIG_SCTP_COOKIE_HMAC_SHA1 y +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 y +CONFIG_SCTP_DBG_MSG n +CONFIG_SCTP_DBG_OBJCNT n +# Networking options > TCP/IP networking > The TIPC Protocol (EXPERIMENTAL) +CONFIG_TIPC m note +CONFIG_TIPC_PORTS 8191 +# Networking support +set +tree 'Networking support' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Networking support' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_NET y mark +CONFIG_CEPH_LIB_USE_DNS_RESOLVER y +# enable all vendor menus by default +set +pattern '^NET_VENDOR_' = y mark +# Networking support > Amateur Radio support +CONFIG_HAMRADIO y +# Networking support > Amateur Radio support > Amateur Radio AX.25 Level 2 protocol +CONFIG_AX25_DAMA_SLAVE y +# Networking support > Amateur Radio support > Amateur Radio AX.25 Level 2 protocol > AX.25 network device drivers +CONFIG_SCC_DELAY n +CONFIG_SCC_TRXECHO n +# Networking support > Bluetooth subsystem support +CONFIG_BT m mark +CONFIG_BT_RFCOMM_TTY y +CONFIG_BT_BNEP_MC_FILTER y +CONFIG_BT_BNEP_PROTO_FILTER y +# Networking support > Bluetooth subsystem support > Bluetooth device drivers +CONFIG_BT_HCIUART_H4 y +CONFIG_BT_HCIUART_BCSP y +CONFIG_BT_HCIUART_ATH3K y +CONFIG_BT_HCIUART_LL y +CONFIG_BT_HCIUART_3WIRE y +# Networking support > CAIF support +# Networking support > CAN bus subsystem support +# Networking support > CAN bus subsystem support > CAN Device Drivers +# Networking support > CAN bus subsystem support > CAN Device Drivers > Platform CAN drivers with Netlink support +CONFIG_CAN_CALC_BITTIMING y +# Networking support > CAN bus subsystem support > CAN Device Drivers > Platform CAN drivers with Netlink support > Bosch CC770 and Intel AN82527 devices +# Networking support > CAN bus subsystem support > CAN Device Drivers > Platform CAN drivers with Netlink support > Bosch C_CAN/D_CAN devices +# Networking support > CAN bus subsystem support > CAN Device Drivers > Platform CAN drivers with Netlink support > CAN USB interfaces +# Networking support > CAN bus subsystem support > CAN Device Drivers > Platform CAN drivers with Netlink support > Philips/NXP SJA1000 devices +CONFIG_CAN_PEAK_PCIEC y +# Networking support > IrDA (infrared) subsystem support +CONFIG_IRDA_ULTRA y +CONFIG_IRDA_CACHE_LAST_LSAP y +CONFIG_IRDA_FAST_RR y +# Networking support > IrDA (infrared) subsystem support > Infrared-port device drivers +CONFIG_DONGLE y +# Networking support > NFC subsystem support +CONFIG_NFC m note mark +CONFIG_NFC_NCI m note +CONFIG_NFC_SHDLC y +CONFIG_NFC_LLCP y +# Networking support > NFC subsystem support > Near Field Communication (NFC) devices +# Networking support > Plan 9 Resource Sharing Support (9P2000) +# Networking support > RF switch subsystem support +CONFIG_RFKILL y mark +CONFIG_RFKILL_INPUT y +# Networking support > WiMAX Wireless Broadband support +CONFIG_WIMAX_DEBUG_LEVEL 8 +# Networking support > Wireless +CONFIG_WIRELESS y +CONFIG_NL80211_TESTMODE y +CONFIG_CFG80211_DEVELOPER_WARNINGS n +CONFIG_CFG80211_CERTIFICATION_ONUS n +CONFIG_CFG80211_DEFAULT_PS y +CONFIG_CFG80211_DEBUGFS y +CONFIG_CFG80211_INTERNAL_REGDB n +CONFIG_CFG80211_WEXT y +# Networking support > Wireless > Generic IEEE 802.11 Networking Stack (mac80211) +CONFIG_MAC80211_RC_PID y +CONFIG_MAC80211_RC_MINSTREL y +CONFIG_MAC80211_RC_MINSTREL_HT y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL y +CONFIG_MAC80211_MESH y note +CONFIG_MAC80211_LEDS y +CONFIG_MAC80211_DEBUGFS y +CONFIG_MAC80211_MESSAGE_TRACING y +# Networking support > Wireless > Generic IEEE 802.11 Networking Stack (mac80211) > Select mac80211 debugging features +# Partition Types +set +tree 'Partition Types' ?pattern '_(PARTITION|DISKLABEL)$' !flag EXPERIMENTAL ?type bool = y +set +tree 'Partition Types' ?pattern '_(PARTITION|DISKLABEL)$' !flag EXPERIMENTAL ?type tristate = m +set +tree 'Partition Types' ?pattern '_(PARTITION|DISKLABEL)$' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_PARTITION_ADVANCED y +CONFIG_ACORN_PARTITION_CUMANA n +CONFIG_ACORN_PARTITION_EESOX n +CONFIG_ACORN_PARTITION_ICS y +CONFIG_ACORN_PARTITION_ADFS n +CONFIG_ACORN_PARTITION_POWERTEC n +CONFIG_ACORN_PARTITION_RISCIX y +CONFIG_MINIX_SUBPARTITION y +# Platform support +CONFIG_KVM_GUEST y +CONFIG_PPC_POWERNV y +CONFIG_PPC_POWERNV_RTAS y +CONFIG_PPC_PSERIES y +CONFIG_PPC_SPLPAR n +CONFIG_PSERIES_ENERGY m +CONFIG_SCANLOG m +CONFIG_IO_EVENT_IRQ y +CONFIG_LPARCFG n +CONFIG_PPC_SMLPAR n +CONFIG_PSERIES_IDLE y +CONFIG_PPC_PMAC y +CONFIG_PPC_MAPLE y +CONFIG_PPC_IBM_CELL_BLADE n +CONFIG_PPC_CELLEB n +CONFIG_PPC_CELL_QPACE n +CONFIG_EPAPR_PARAVIRT y +CONFIG_PPC_OF_BOOT_TRAMPOLINE y +CONFIG_UDBG_RTAS_CONSOLE y +CONFIG_MPIC_MSGR y +CONFIG_RTAS_PROC y +CONFIG_RTAS_FLASH n note +CONFIG_IBMEBUS n +CONFIG_SIMPLE_GPIO y +CONFIG_QUICC_ENGINE n +CONFIG_CPM2 y +CONFIG_PPC_CHRP y +CONFIG_PPC_MPC512x n +CONFIG_PPC_MPC52xx n +CONFIG_PPC_PMAC32_PSURGE y +CONFIG_PPC601_SYNC_FIX n +CONFIG_TAU y +CONFIG_TAU_AVERAGE n +# Platform support > 82xx-based boards (PQ II) +CONFIG_PPC_82xx n +# Platform support > 83xx-based boards +CONFIG_PPC_83xx n +# Platform support > 86xx-based boards +CONFIG_PPC_86xx n +# Platform support > Cell Broadband Engine options +CONFIG_SPU_FS_64K_LS y +# Platform support > CPU Frequency drivers +CONFIG_CPU_FREQ_PMAC64 y +CONFIG_PPC_PASEMI_CPUFREQ y +CONFIG_CPU_FREQ_PMAC y +# Platform support > CPU Frequency scaling +CONFIG_CPU_FREQ y mark +CONFIG_CPU_FREQ_GOV_CONSERVATIVE y note +CONFIG_CPU_FREQ_GOV_ONDEMAND y note +CONFIG_CPU_FREQ_GOV_PERFORMANCE y note +CONFIG_CPU_FREQ_GOV_POWERSAVE y note +CONFIG_CPU_FREQ_GOV_USERSPACE y note +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y note +CONFIG_GENERIC_CPUFREQ_CPU0 y +CONFIG_CPU_FREQ_STAT p policy<(arch i386 amd64 armhf &/ value y) | value m> note +CONFIG_CPU_FREQ_STAT_DETAILS y +# Platform support > CPU Frequency scaling > ARM CPU frequency scaling drivers +CONFIG_ARM_OMAP2PLUS_CPUFREQ y +# Platform support > CPU Frequency scaling > PowerPC CPU frequency scaling drivers +CONFIG_CPU_FREQ_MAPLE y +# Platform support > CPU Frequency scaling > x86 CPU frequency scaling drivers +CONFIG_X86_ACPI_CPUFREQ y note +CONFIG_X86_ACPI_CPUFREQ_CPB y +CONFIG_X86_POWERNOW_K8 y note +CONFIG_X86_SPEEDSTEP_CENTRINO y note +CONFIG_X86_SPEEDSTEP_ICH y note +CONFIG_X86_SPEEDSTEP_SMI y note +CONFIG_X86_PCC_CPUFREQ y note +CONFIG_X86_CPUFREQ_NFORCE2 y note +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE y +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK y +# Platform support > CPUIdle driver +# Platform support > Freescale Book-E Machine Type +CONFIG_FSL_SOC_BOOKE y +CONFIG_BSC9131_RDB p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC8540_ADS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC8560_ADS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC85xx_CDS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC85xx_MDS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC8536_DS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC85xx_DS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_MPC85xx_RDB p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_P1010_RDB p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_P1022_DS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_P1022_RDK p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_P1023_RDS p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_SOCRATES p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_KSI8560 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_XES_MPC85xx p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_STX_GP3 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_TQM8540 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_TQM8541 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_TQM8548 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_TQM8555 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_TQM8560 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_SBC8548 p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_GE_IMP3A p policy<(flavour powerpc-e500 y/ value y) | value n> +CONFIG_P2041_RDB p policy<(flavour powerpc-e500mc n/ value y) | value n> +CONFIG_P3041_DS p policy<(flavour powerpc-e500mc n/ value y) | value n> +CONFIG_P4080_DS p policy<(flavour powerpc-e500mc n/ value y) | value n> +CONFIG_P5020_DS p policy<(flavour powerpc-e500mc n/ value y) | value n> +CONFIG_P5040_DS p policy<(flavour powerpc-e500mc n/ value y) | value n> +CONFIG_PPC_QEMU_E500 y +# Platform support > Freescale Ethernet driver platform-specific options +# Platform support > MPC8xx CPM Options +# Platform support > PA Semi SoC-based platforms +CONFIG_PPC_PASEMI y +# Platform support > PA Semi SoC-based platforms > PA Semi PWRficient options +CONFIG_PPC_PASEMI_IOMMU y +CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE n +CONFIG_PPC_PASEMI_MDIO y +# Platform support > Sony PS3 +CONFIG_PPC_PS3 y +# Platform support > Sony PS3 > PS3 Platform Options +CONFIG_PS3_PS3AV y +CONFIG_PS3_SYS_MANAGER y +CONFIG_PS3_ADVANCED n +CONFIG_PS3_HTAB_SIZE 20 +CONFIG_PS3_DYNAMIC_DMA n +CONFIG_PS3_REPOSITORY_WRITE n +CONFIG_PS3GELIC_UDBG n +# Platform support > WSP platform selection +# Power management and ACPI options +CONFIG_APM_EMULATION p policy<(arch armhf &/ value n) | value m> note +CONFIG_SFI y +CONFIG_INTEL_IDLE y +# Power management and ACPI options > ACPI (Advanced Configuration and Power Interface) Support +CONFIG_ACPI y mark +CONFIG_ACPI_AC y note +CONFIG_ACPI_BATTERY y note +CONFIG_ACPI_BUTTON y note +CONFIG_ACPI_FAN y note +CONFIG_ACPI_PROCESSOR y note +CONFIG_ACPI_THERMAL y note +CONFIG_ACPI_HED y note +CONFIG_ACPI_CONTAINER y note +CONFIG_ACPI_CUSTOM_METHOD n note +CONFIG_ACPI_PROCFS n +CONFIG_ACPI_PROCFS_POWER n +CONFIG_ACPI_PROC_EVENT y +CONFIG_ACPI_DOCK y +CONFIG_ACPI_IPMI m +CONFIG_ACPI_PROCESSOR_AGGREGATOR m +CONFIG_ACPI_NUMA y +CONFIG_ACPI_CUSTOM_DSDT_FILE "" +CONFIG_ACPI_INITRD_TABLE_OVERRIDE n +CONFIG_ACPI_BLACKLIST_YEAR p policy<(arch i386 &/ value 2000) | value 0> +CONFIG_X86_PM_TIMER y +CONFIG_ACPI_BGRT y +CONFIG_ACPI_APEI y +CONFIG_ACPI_APEI_GHES y +CONFIG_ACPI_APEI_PCIEAER y +CONFIG_ACPI_APEI_MEMORY_FAILURE y +# Power management and ACPI options > APM (Advanced Power Management) BIOS support +CONFIG_APM m mark +CONFIG_APM_IGNORE_USER_SUSPEND n +CONFIG_APM_DO_ENABLE n +CONFIG_APM_CPU_IDLE n +CONFIG_APM_DISPLAY_BLANK n +CONFIG_APM_ALLOW_INTS n +# Power management and ACPI options > CPU Frequency scaling +CONFIG_CPU_FREQ y mark +CONFIG_CPU_FREQ_GOV_CONSERVATIVE y note +CONFIG_CPU_FREQ_GOV_ONDEMAND y note +CONFIG_CPU_FREQ_GOV_PERFORMANCE y note +CONFIG_CPU_FREQ_GOV_POWERSAVE y note +CONFIG_CPU_FREQ_GOV_USERSPACE y note +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE y note +CONFIG_GENERIC_CPUFREQ_CPU0 y +CONFIG_CPU_FREQ_STAT p policy<(arch i386 amd64 armhf &/ value y) | value m> note +CONFIG_CPU_FREQ_STAT_DETAILS y +# Power management and ACPI options > CPU Frequency scaling > ARM CPU frequency scaling drivers +CONFIG_ARM_OMAP2PLUS_CPUFREQ y +# Power management and ACPI options > CPU Frequency scaling > PowerPC CPU frequency scaling drivers +CONFIG_CPU_FREQ_MAPLE y +# Power management and ACPI options > CPU Frequency scaling > x86 CPU frequency scaling drivers +CONFIG_X86_ACPI_CPUFREQ y note +CONFIG_X86_ACPI_CPUFREQ_CPB y +CONFIG_X86_POWERNOW_K8 y note +CONFIG_X86_SPEEDSTEP_CENTRINO y note +CONFIG_X86_SPEEDSTEP_ICH y note +CONFIG_X86_SPEEDSTEP_SMI y note +CONFIG_X86_PCC_CPUFREQ y note +CONFIG_X86_CPUFREQ_NFORCE2 y note +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE y +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK y +# Power management and ACPI options > Memory power savings +CONFIG_I7300_IDLE m +# Power management options +CONFIG_APM_EMULATION p policy<(arch armhf &/ value n) | value m> note +# Processor support +CONFIG_PPC_ICSWX_USE_SIGILL n note +CONFIG_GENERIC_CPU y +CONFIG_PPC_BOOK3S_64 y +CONFIG_TUNE_CELL n +CONFIG_ALTIVEC y +CONFIG_VSX y +CONFIG_PPC_ICSWX y +CONFIG_PPC_ICSWX_PID y +CONFIG_PPC_BOOK3S_32 p policy<(flavour powerpc-smp &/ value y) | value n> +CONFIG_PPC_85xx p policy<(flavour powerpc-e500 powerpc-e500mc &/ value y) | value n> +CONFIG_PPC_E500MC p policy<(flavour powerpc-e500mc &/ value y) | value n> +CONFIG_FSL_EMB_PERFMON y +CONFIG_PHYS_64BIT y +CONFIG_SPE y +# Processor type and features +CONFIG_CC_STACKPROTECTOR y mark +CONFIG_TOSHIBA n note +CONFIG_ZONE_DMA y +CONFIG_X86_X2APIC y +CONFIG_X86_MPPARSE y +CONFIG_X86_EXTENDED_PLATFORM y +CONFIG_X86_NUMACHIP y +CONFIG_X86_VSMP n +CONFIG_X86_UV n +CONFIG_SCHED_OMIT_FRAME_POINTER y +CONFIG_MEMTEST y +CONFIG_GENERIC_CPU y +CONFIG_PROCESSOR_SELECT y +CONFIG_CPU_SUP_INTEL y +CONFIG_CPU_SUP_AMD y +CONFIG_CPU_SUP_CENTAUR y +CONFIG_HPET_TIMER y +CONFIG_DMI y +CONFIG_GART_IOMMU y +CONFIG_CALGARY_IOMMU y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS y +CONFIG_X86_MCE y +CONFIG_X86_MCE_INTEL y +CONFIG_X86_MCE_AMD y +CONFIG_MICROCODE_INTEL y +CONFIG_MICROCODE_AMD y +CONFIG_DIRECT_GBPAGES y +CONFIG_AMD_NUMA y +CONFIG_X86_64_ACPI_NUMA y +CONFIG_NUMA_EMU n +CONFIG_NODES_SHIFT p policy<(arch amd64 &/ value 6) | value 8> +CONFIG_X86_CHECK_BIOS_CORRUPTION y +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK y +CONFIG_X86_RESERVE_LOW 64 +CONFIG_MTRR y +CONFIG_MTRR_SANITIZER y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT 1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT 1 +CONFIG_X86_PAT y +CONFIG_ARCH_RANDOM y +CONFIG_X86_SMAP y +CONFIG_EFI y +CONFIG_EFI_STUB y +CONFIG_KEXEC_JUMP y +CONFIG_BOOTPARAM_HOTPLUG_CPU0 n +CONFIG_COMPAT_VDSO n +CONFIG_X86_BIGSMP n +CONFIG_X86_WANT_INTEL_MID y +CONFIG_X86_MDFLD y +CONFIG_X86_RDC321X n +CONFIG_X86_32_NON_STANDARD n +CONFIG_X86_GENERIC y +CONFIG_X86_PPRO_FENCE y +CONFIG_CPU_SUP_CYRIX_32 y +CONFIG_CPU_SUP_TRANSMETA_32 y +CONFIG_CPU_SUP_UMC_32 y +CONFIG_APB_TIMER y +CONFIG_X86_ANCIENT_MCE n +CONFIG_VM86 y +CONFIG_X86_REBOOTFIXUPS y +CONFIG_HIGHMEM64G y +CONFIG_X86_PAE y +CONFIG_MATH_EMULATION p policy<(arch i386 &/ value n) | value y> +CONFIG_MAXSMP n +CONFIG_M686 y +# Processor type and features > Paravirtualized guest support +CONFIG_KVM_GUEST y +CONFIG_PARAVIRT_GUEST y +CONFIG_PARAVIRT_TIME_ACCOUNTING n +CONFIG_PARAVIRT y +CONFIG_PARAVIRT_SPINLOCKS y +CONFIG_LGUEST_GUEST n +# Security options +CONFIG_ENCRYPTED_KEYS y note +CONFIG_TRUSTED_KEYS y note +CONFIG_SECURITY y mark +CONFIG_SECURITYFS y +CONFIG_DEFAULT_SECURITY_APPARMOR y +CONFIG_SECURITY_APPARMOR y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE 1 +CONFIG_SECURITY_SELINUX y +CONFIG_SECURITY_SELINUX_AVC_STATS y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE 0 +CONFIG_SECURITY_SELINUX_BOOTPARAM y +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE 1 +CONFIG_SECURITY_SELINUX_DEVELOP y +CONFIG_SECURITY_SELINUX_DISABLE y note +CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX n +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 n +CONFIG_SECURITY_TOMOYO_POLICY_LOADER "/sbin/tomoyo-init" +CONFIG_SECURITY_SMACK y +CONFIG_SECURITY_YAMA y +CONFIG_SECURITY_YAMA_STACKED y +CONFIG_EVM y +CONFIG_IMA n note +CONFIG_INTEL_TXT p policy<(arch i386 amd64 &/ value y) | value n)> +CONFIG_INTEGRITY_SIGNATURE y +CONFIG_KEYS y +CONFIG_LSM_MMAP_MIN_ADDR 0 +CONFIG_SECURITY_DMESG_RESTRICT n +CONFIG_SECURITY_NETWORK y +CONFIG_SECURITY_NETWORK_XFRM n +CONFIG_SECURITY_PATH y +# System Type +CONFIG_MMU y +CONFIG_ARCH_MVEBU n +CONFIG_ARCH_BCM y +CONFIG_ARCH_HIGHBANK y +CONFIG_ARCH_OMAP2PLUS y +CONFIG_ARCH_SOCFPGA n +CONFIG_ARCH_SUNXI y +CONFIG_ARCH_VT8500 n +CONFIG_ARCH_ZYNQ n +CONFIG_CPU_V7 y +CONFIG_ARM_LPAE n +CONFIG_ARM_THUMB y +CONFIG_ARM_THUMBEE n +CONFIG_ARM_VIRT_EXT y +CONFIG_SWP_EMULATE n +CONFIG_CPU_ICACHE_DISABLE n +CONFIG_CPU_DCACHE_DISABLE n +CONFIG_CPU_BPREDICT_DISABLE n +CONFIG_CACHE_L2X0 y +CONFIG_ARM_DMA_MEM_BUFFERABLE y +CONFIG_ARM_ERRATA_430973 y +CONFIG_PL310_ERRATA_588369 y +CONFIG_ARM_ERRATA_720789 y +CONFIG_PL310_ERRATA_727915 y +CONFIG_PL310_ERRATA_753970 y +CONFIG_ARM_ERRATA_754322 y +CONFIG_ARM_ERRATA_754327 n +CONFIG_ARM_ERRATA_764369 y +CONFIG_PL310_ERRATA_769419 y +CONFIG_ARM_ERRATA_775420 y +#CONFIG_ARCH_EXYNOS n note +#CONFIG_ARCH_HIGHBANK n note +#CONFIG_ARCH_PICOXCELL n note +#CONFIG_ARCH_ZYNQ n note +CONFIG_ARCH_MULTIPLATFORM p policy<(arch armhf &/ value y) | value n> +# System Type > ARM Ltd. Versatile Express family +CONFIG_ARCH_VEXPRESS y +# System Type > ARM Ltd. Versatile Express family > Versatile Express platform type +CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA y +CONFIG_ARCH_VEXPRESS_CA9X4 y +# System Type > Atmel AT91 System-on-Chip +# System Type > Cirrus EP93xx Implementation Options +# System Type > CLPS711X/EP721X/EP731X Implementations +# System Type > CNS3XXX platform type +# System Type > Cortina Systems Gemini Implementations +# System Type > CSR SiRF primaII/Marco/Polo Specific Features +#CONFIG_ARCH_PRIMA2 n note +# System Type > Footbridge Implementations +# System Type > Freescale i.MX family +CONFIG_ARCH_MXC y +# System Type > Freescale i.MX family > Freescale i.MX support +CONFIG_MXC_IRQ_PRIOR n +CONFIG_MXC_DEBUG_BOARD n +CONFIG_MACH_IMX51_DT n +CONFIG_MACH_MX51_BABBAGE n +CONFIG_MACH_MX51_3DS n +CONFIG_MACH_EUKREA_CPUIMX51SD n +CONFIG_SOC_IMX53 n +CONFIG_SOC_IMX6Q y +# System Type > h720x Implementations +# System Type > Integrator Options +# System Type > Intel IXP4xx Implementation Options +# System Type > Intel PXA2xx/PXA3xx Implementations +# System Type > IOP13XX Implementation Options +# System Type > IOP32x Implementation Options +# System Type > IOP33x Implementation Options +# System Type > Kendin/Micrel KS8695 Implementations +# System Type > Marvell Dove Implementations +# System Type > Marvell Kirkwood Implementations +# System Type > Marvell MV78xx0 Implementations +# System Type > Marvell PXA168/910/MMP2 Implmentations +# System Type > Marvell SOC with device tree +# System Type > Multiple platform selection +CONFIG_ARCH_MULTI_V6 n +CONFIG_ARCH_MULTI_V7 y +# System Type > NetX Implementations +# System Type > Nomadik boards +# System Type > NUC950 Machines +# System Type > NUC960 Machines +# System Type > Orion Implementations +# System Type > Qualcomm MSM Board Type +# System Type > RealView platform type +# System Type > S5PC110 Machines +# System Type > S5PV210 Machines +# System Type > SA11x0 Implementations +# System Type > SAMSUNG EXYNOS SoCs Support +# System Type > SAMSUNG S3C24XX SoCs Support +# System Type > SPEAr13xx Implementations +# System Type > SPEAr3xx Implementations +# System Type > ST-Ericsson AB U300/U335 Platform +# System Type > SuperH / SH-Mobile Driver Options +# System Type > TI DaVinci Implementations +# System Type > Timer and clock configuration +# System Type > TI OMAP1 specific features +CONFIG_MACH_OMAP_GENERIC y +# System Type > TI OMAP2/3/4 Specific Features +CONFIG_MACH_OMAP_GENERIC y +CONFIG_ARCH_OMAP2PLUS_TYPICAL y +CONFIG_SOC_HAS_OMAP2_SDRC y +CONFIG_SOC_HAS_REALTIME_COUNTER y +CONFIG_ARCH_OMAP2 n +CONFIG_ARCH_OMAP3 y +CONFIG_ARCH_OMAP4 y +CONFIG_SOC_OMAP5 y +CONFIG_SOC_OMAP3430 y +CONFIG_SOC_TI81XX y +CONFIG_SOC_AM33XX y +CONFIG_MACH_OMAP3_BEAGLE y +CONFIG_MACH_DEVKIT8000 n +CONFIG_MACH_OMAP_LDP y +CONFIG_MACH_OMAP3530_LV_SOM y +CONFIG_MACH_OMAP3_TORPEDO y +CONFIG_MACH_OVERO y +CONFIG_MACH_OMAP3EVM y +CONFIG_MACH_OMAP3517EVM n +CONFIG_MACH_CRANEBOARD n +CONFIG_MACH_OMAP3_PANDORA y +CONFIG_MACH_TOUCHBOOK y +CONFIG_MACH_OMAP_3430SDP y +CONFIG_MACH_NOKIA_RM680 y +CONFIG_MACH_NOKIA_RX51 n +CONFIG_MACH_OMAP_ZOOM2 y +CONFIG_MACH_OMAP_ZOOM3 y +CONFIG_MACH_CM_T35 n +CONFIG_MACH_CM_T3517 y +CONFIG_MACH_IGEP0020 y +CONFIG_MACH_IGEP0030 y +CONFIG_MACH_SBC3530 y +CONFIG_MACH_OMAP_3630SDP y +CONFIG_MACH_TI8168EVM y +CONFIG_MACH_TI8148EVM y +CONFIG_OMAP3_EMU y +CONFIG_OMAP3_SDRC_AC_TIMING n +CONFIG_MACH_OMAP_4430SDP y +CONFIG_MACH_OMAP4_PANDA y +# System Type > TI OMAP Common Features +CONFIG_POWER_AVS_OMAP y +CONFIG_POWER_AVS_OMAP_CLASS3 y +CONFIG_OMAP_RESET_CLOCKS y +CONFIG_OMAP_MUX y +CONFIG_OMAP_MUX_WARNINGS y +CONFIG_OMAP_32K_TIMER y +CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE n +CONFIG_OMAP_32K_TIMER_HZ 128 +CONFIG_OMAP_DM_TIMER y +CONFIG_OMAP_PM_NOOP y +# System Type > Use 8-bit SDHCI bus width +# System Type > Ux500 target platform (boards) +# System Type > Versatile platform type +# System Type > W90P910 Machines +# Ubuntu Supplied Third-Party Device Drivers +CONFIG_AUFS_FS m +CONFIG_AUFS_EXPORT y +CONFIG_AUFS_BRANCH_MAX_127 y +CONFIG_AUFS_BR_FUSE y +CONFIG_AUFS_BR_HFSPLUS y +CONFIG_AUFS_BR_RAMFS y +CONFIG_AUFS_EXPORT y +CONFIG_AUFS_HNOTIFY n +CONFIG_AUFS_PROC_MAP n note flag +CONFIG_AUFS_RDU n +CONFIG_AUFS_SHWH n +CONFIG_AUFS_SP_IATTR n +CONFIG_DM_RAID45 p policy<(arch i386 amd64 &/ value m) | value n> note mark +CONFIG_ALX p policy<(arch powerpc &/ value n) | value m> flag +# Userspace binary formats +CONFIG_BINFMT_ELF y +CONFIG_COREDUMP y +# Virtualization +set +tree 'Virtualization' ?flag EXPERIMENTAL ?type bool = n +set +tree 'Virtualization' ?flag EXPERIMENTAL ?type tristate = m note +CONFIG_VIRTUALIZATION y mark +CONFIG_KVM p policy<(arch powerpc &/ value y) | value m> +CONFIG_KVM_MMU_AUDIT n +CONFIG_KVM_E500V2 y +CONFIG_KVM_E500MC y +CONFIG_LGUEST n + +# Ensure DEPRECATED options are off. +set +all ?flag DEPRECATED ?type bool = n +set +all ?flag DEPRECATED ?type tristate = n + +# DEPRECATED overrides +CONFIG_NETFILTER_XT_TARGET_NOTRACK m note + +# Ensure DANGEROUS things are turned off. +set +all ?flag DANGEROUS = n --- linux-lts-raring-3.8.0.orig/debian.master/config/config.common.ports +++ linux-lts-raring-3.8.0/debian.master/config/config.common.ports @@ -0,0 +1,3 @@ +# +# Common config options automatically generated by splitconfig.pl +# --- linux-lts-raring-3.8.0.orig/debian.master/config/config.common.ubuntu +++ linux-lts-raring-3.8.0/debian.master/config/config.common.ubuntu @@ -0,0 +1,6745 @@ +# +# Common config options automatically generated by splitconfig.pl +# +CONFIG_3C515=m +CONFIG_60XX_WDT=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_9P_FS=m +# CONFIG_9P_FSCACHE is not set +CONFIG_9P_FS_POSIX_ACL=y +CONFIG_AB3100_CORE=y +CONFIG_AB3100_OTP=m +CONFIG_ABX500_CORE=y +CONFIG_AC3200=m +CONFIG_AC97_BUS=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=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_ACPI=y +CONFIG_ACPI_AC=y +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_BATTERY=y +CONFIG_ACPI_BGRT=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_CMPC=m +CONFIG_ACPI_CONTAINER=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_DOCK=y +CONFIG_ACPI_EC_DEBUGFS=m +CONFIG_ACPI_FAN=y +CONFIG_ACPI_HED=y +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_HOTPLUG_MEMORY=m +CONFIG_ACPI_I2C=y +# CONFIG_ACPI_INITRD_TABLE_OVERRIDE is not set +CONFIG_ACPI_IPMI=m +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_PCI_SLOT=m +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +# CONFIG_ACPI_PROCFS is not set +# CONFIG_ACPI_PROCFS_POWER is not set +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_QUICKSTART=m +CONFIG_ACPI_SBS=m +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_TOSHIBA=m +CONFIG_ACPI_VIDEO=m +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_AD5624R_SPI=m +CONFIG_AD5686=m +CONFIG_AD5755=m +CONFIG_AD5764=m +CONFIG_AD5791=m +CONFIG_AD5930=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_AD7476=m +CONFIG_AD7606=m +CONFIG_AD7606_IFACE_PARALLEL=m +CONFIG_AD7606_IFACE_SPI=m +CONFIG_AD7746=m +CONFIG_AD7780=m +CONFIG_AD7791=m +CONFIG_AD7793=m +CONFIG_AD7816=m +CONFIG_AD7887=m +CONFIG_AD799X=m +CONFIG_AD799X_RING_BUFFER=y +CONFIG_AD8366=m +CONFIG_AD9523=m +CONFIG_AD9832=m +CONFIG_AD9834=m +CONFIG_AD9850=m +CONFIG_AD9852=m +CONFIG_AD9910=m +CONFIG_AD9951=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_ADIS16204=m +CONFIG_ADIS16209=m +CONFIG_ADIS16220=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_ADT7410=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ADXRS450=m +CONFIG_AD_SIGMA_DELTA=m +CONFIG_AEABI=y +CONFIG_AFFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FS=m +# CONFIG_AFS_FSCACHE is not set +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +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_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=15000 +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_AIO=y +CONFIG_AIRO=m +CONFIG_AIRO_CS=m +CONFIG_ALIGNMENT_TRAP=y +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_ALIX=y +CONFIG_ALI_FIR=m +CONFIG_ALTERA_STAPL=m +CONFIG_ALX=m +CONFIG_AMBA_PL08X=y +CONFIG_AMD8111_ETH=m +CONFIG_AMD_IOMMU=y +CONFIG_AMD_IOMMU_STATS=y +CONFIG_AMD_IOMMU_V2=m +CONFIG_AMD_NB=y +CONFIG_AMD_NUMA=y +CONFIG_AMD_PHY=y +CONFIG_AMIGA_PARTITION=y +CONFIG_AMILO_RFKILL=m +CONFIG_ANDROID=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_INTF_ALARM_DEV=y +CONFIG_ANDROID_LOGGER=m +CONFIG_ANDROID_LOW_MEMORY_KILLER=y +CONFIG_ANDROID_TIMED_GPIO=m +CONFIG_ANDROID_TIMED_OUTPUT=y +CONFIG_ANON_INODES=y +CONFIG_APB_TIMER=y +CONFIG_APDS9802ALS=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_APPLE_GMUX=m +CONFIG_APPLICOM=m +CONFIG_APRICOT=m +CONFIG_AR5523=m +# CONFIG_ARCH_AT91 is not set +CONFIG_ARCH_BCM=y +# CONFIG_ARCH_BCM2835 is not set +CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y +CONFIG_ARCH_CLOCKSOURCE_DATA=y +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CNS3XXX is not set +CONFIG_ARCH_CPU_PROBE_RELEASE=y +# CONFIG_ARCH_DAVINCI 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_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_EXYNOS is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_GEMINI is not set +# CONFIG_ARCH_H720X is not set +CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPUFREQ=y +CONFIG_ARCH_HAS_CPU_AUTOPROBE=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y +CONFIG_ARCH_HAS_OPP=y +CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_HIGHBANK=y +# CONFIG_ARCH_INTEGRATOR is not set +# 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_KIRKWOOD is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_LPC32XX is not set +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_ARCH_MEMORY_PROBE=y +# CONFIG_ARCH_MMP is not set +# CONFIG_ARCH_MSM is not set +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_MV78XX0 is not set +# CONFIG_ARCH_MVEBU is not set +CONFIG_ARCH_MXC=y +# CONFIG_ARCH_MXS is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_NOMADIK is not set +CONFIG_ARCH_NR_GPIO=512 +CONFIG_ARCH_OMAP=y +# CONFIG_ARCH_OMAP1 is not set +# CONFIG_ARCH_OMAP2 is not set +CONFIG_ARCH_OMAP2PLUS=y +CONFIG_ARCH_OMAP2PLUS_TYPICAL=y +CONFIG_ARCH_OMAP3=y +CONFIG_ARCH_OMAP4=y +# CONFIG_ARCH_ORION5X is not set +CONFIG_ARCH_PROC_KCORE_TEXT=y +# CONFIG_ARCH_PXA is not set +CONFIG_ARCH_RANDOM=y +# CONFIG_ARCH_REALVIEW is not set +CONFIG_ARCH_REQUIRE_GPIOLIB=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_S3C24XX is not set +# CONFIG_ARCH_S3C64XX is not set +# CONFIG_ARCH_S5P64X0 is not set +# CONFIG_ARCH_S5PC100 is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_SHMOBILE is not set +# CONFIG_ARCH_SIRF is not set +# CONFIG_ARCH_SOCFPGA is not set +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SUNXI=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_ARCH_SUPPORTS_MSI=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_TEGRA is not set +# CONFIG_ARCH_U300 is not set +# CONFIG_ARCH_U8500 is not set +CONFIG_ARCH_USES_NUMA_PROT_NONE=y +CONFIG_ARCH_USES_PG_UNCACHED=y +# CONFIG_ARCH_VERSATILE is not set +CONFIG_ARCH_VEXPRESS=y +CONFIG_ARCH_VEXPRESS_CA9X4=y +CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y +# CONFIG_ARCH_VT8500 is not set +# CONFIG_ARCH_VT8500_SINGLE is not set +# CONFIG_ARCH_W90X900 is not set +CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +# CONFIG_ARCH_ZYNQ is not set +CONFIG_ARCNET=m +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_ARM=y +CONFIG_ARM_AMBA=y +# CONFIG_ARM_APPENDED_DTB is not set +CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_AT91_ETHER=m +CONFIG_ARM_CHARLCD=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_ARM_CPU_TOPOLOGY=y +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARM_ERRATA_430973=y +CONFIG_ARM_ERRATA_643719=y +CONFIG_ARM_ERRATA_720789=y +CONFIG_ARM_ERRATA_754322=y +# CONFIG_ARM_ERRATA_754327 is not set +CONFIG_ARM_ERRATA_764369=y +CONFIG_ARM_ERRATA_775420=y +# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set +# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set +# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set +CONFIG_ARM_GIC=y +CONFIG_ARM_HIGHBANK_CPUFREQ=y +CONFIG_ARM_KPROBES_TEST=m +CONFIG_ARM_L1_CACHE_SHIFT=6 +CONFIG_ARM_L1_CACHE_SHIFT_6=y +# CONFIG_ARM_LPAE is not set +CONFIG_ARM_NR_BANKS=8 +# CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set +CONFIG_ARM_PATCH_PHYS_VIRT=y +CONFIG_ARM_SP805_WATCHDOG=m +CONFIG_ARM_THUMB=y +# CONFIG_ARM_THUMBEE is not set +CONFIG_ARM_TIMER_SP804=y +CONFIG_ARM_UNWIND=y +CONFIG_ARM_VIRT_EXT=y +# CONFIG_ARPD is not set +CONFIG_ASHMEM=y +CONFIG_ASN1=y +CONFIG_ASUS_LAPTOP=m +CONFIG_ASUS_NB_WMI=m +CONFIG_ASUS_OLED=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=m +CONFIG_ASYNC_TX_DISABLE_PQ_VAL_DMA=y +CONFIG_ASYNC_TX_DISABLE_XOR_VAL_DMA=y +CONFIG_ASYNC_XOR=m +CONFIG_AT1700=m +CONFIG_AT76C50X_USB=m +CONFIG_AT803X_PHY=y +CONFIG_ATA=y +CONFIG_ATAGS=y +CONFIG_ATAGS_PROC=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_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_USB=m +CONFIG_ATH9K=m +CONFIG_ATH9K_AHB=y +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_DEBUGFS=y +CONFIG_ATH9K_HTC=m +CONFIG_ATH9K_HTC_DEBUGFS=y +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_LEGACY_RATE_CONTROL=y +# CONFIG_ATH9K_MAC_DEBUG is not set +CONFIG_ATH9K_PCI=y +CONFIG_ATH_CARDS=m +CONFIG_ATH_COMMON=m +# CONFIG_ATH_DEBUG is not set +CONFIG_ATL1=m +CONFIG_ATL1C=m +CONFIG_ATL1E=m +CONFIG_ATL2=m +CONFIG_ATM=m +CONFIG_ATMEL=m +CONFIG_ATMEL_PWM=m +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_GENERIC=y +# CONFIG_AUDIT_LOGINUID_IMMUTABLE 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=y +CONFIG_AUFS_BR_HFSPLUS=y +CONFIG_AUFS_BR_RAMFS=y +# CONFIG_AUFS_DEBUG is not set +CONFIG_AUFS_EXPORT=y +CONFIG_AUFS_FS=m +# CONFIG_AUFS_HNOTIFY is not set +CONFIG_AUFS_INO_T_64=y +CONFIG_AUFS_POLL=y +# CONFIG_AUFS_PROC_MAP is not set +# CONFIG_AUFS_RDU is not set +CONFIG_AUFS_SBILIST=y +# CONFIG_AUFS_SHWH is not set +# CONFIG_AUFS_SP_IATTR is not set +CONFIG_AUTOFS4_FS=m +CONFIG_AUTO_ZRELADDR=y +CONFIG_AUXDISPLAY=y +CONFIG_AVERAGE=y +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_AX88796=m +# CONFIG_AX88796_93CX6 is not set +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_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PIO=y +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_B43_BCMA=y +# CONFIG_B43_BCMA_EXTRA is not set +CONFIG_B43_BCMA_PIO=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43_HWRNG=y +CONFIG_B43_LEDS=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_PCI_AUTOSELECT=y +# CONFIG_B43_PCMCIA is not set +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_B44_PCI=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI_AUTOSELECT=y +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_ATMEL_PWM=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_LCD_SUPPORT=y +CONFIG_BACKLIGHT_LM3533=m +CONFIG_BACKLIGHT_LM3630=m +CONFIG_BACKLIGHT_LM3639=m +CONFIG_BACKLIGHT_LP855X=m +CONFIG_BACKLIGHT_MAX8925=m +CONFIG_BACKLIGHT_PANDORA=m +CONFIG_BACKLIGHT_PCF50633=m +CONFIG_BACKLIGHT_PWM=m +CONFIG_BACKLIGHT_SAHARA=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=m +CONFIG_BATMAN_ADV_BLA=y +CONFIG_BATMAN_ADV_DAT=y +# CONFIG_BATMAN_ADV_DEBUG is not set +CONFIG_BATTERY_88PM860X=m +CONFIG_BATTERY_BQ27X00_I2C=y +CONFIG_BATTERY_BQ27X00_PLATFORM=y +CONFIG_BATTERY_BQ27x00=m +CONFIG_BATTERY_DA9030=m +CONFIG_BATTERY_DA9052=m +CONFIG_BATTERY_DS2760=m +CONFIG_BATTERY_DS2780=m +CONFIG_BATTERY_DS2781=m +CONFIG_BATTERY_DS2782=m +CONFIG_BATTERY_INTEL_MID=m +CONFIG_BATTERY_MAX17040=m +CONFIG_BATTERY_MAX17042=m +CONFIG_BATTERY_RX51=m +CONFIG_BATTERY_SBS=m +CONFIG_BAYCOM_EPP=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BCH_CONST_M=14 +CONFIG_BCH_CONST_PARAMS=y +CONFIG_BCH_CONST_T=4 +CONFIG_BCM87XX_PHY=y +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +# CONFIG_BCMA_DEBUG is not set +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_POSSIBLE=y +CONFIG_BCM_WIMAX=m +CONFIG_BE2ISCSI=m +CONFIG_BE2NET=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BEFS_FS=m +CONFIG_BFS_FS=m +CONFIG_BINARY_PRINTF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m +CONFIG_BITREVERSE=y +CONFIG_BLK_CGROUP=y +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_BLK_CPQ_DA=m +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_DRBD=m +CONFIG_BLK_DEV_FD=m +# CONFIG_BLK_DEV_HD 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_NVME=m +CONFIG_BLK_DEV_OSD=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_BLK_DEV_RAM=y +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_SR_VENDOR is not set +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_THROTTLING=y +CONFIG_BLK_DEV_UMEM=m +# CONFIG_BLK_DEV_XD is not set +# CONFIG_BLK_DEV_XIP is not set +CONFIG_BLOCK=y +CONFIG_BLOCK_COMPAT=y +CONFIG_BMP085=y +CONFIG_BMP085_I2C=m +CONFIG_BMP085_SPI=m +CONFIG_BNA=m +CONFIG_BNX2=m +CONFIG_BNX2X=m +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_BPCTL=m +CONFIG_BPF_JIT=y +CONFIG_BPQETHER=m +CONFIG_BQL=y +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_BRCMDBG is not set +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_SDIO_OOB=y +CONFIG_BRCMFMAC_USB=y +CONFIG_BRCMSMAC=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_ULOG is not set +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_NETFILTER=y +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BROADCOM_PHY=y +CONFIG_BSD_DISKLABEL=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_BT=m +CONFIG_BTREE=y +CONFIG_BTRFS_FS=m +# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +CONFIG_BTRFS_FS_POSIX_ACL=y +CONFIG_BT_ATH3K=m +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +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_HCIDTL1=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIVHCI=m +CONFIG_BT_HIDP=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_WILINK=m +CONFIG_BUG=y +CONFIG_BUILDTIME_EXTABLE_SORT=y +CONFIG_C101=m +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set +CONFIG_CACHE_L2X0=y +CONFIG_CACHE_PL310=y +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_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_CAN=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_GW=m +CONFIG_CAN_JANZ_ICAN3=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_MCP251X=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_PEAK_PCMCIA=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_OF_PLATFORM=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_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_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_CC_STACKPROTECTOR=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_CED1401=m +CONFIG_CEPH_FS=m +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_DEBUGFS=y +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +# CONFIG_CFG80211_REG_DEBUG is not set +CONFIG_CFG80211_WEXT=y +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_CGROUPS=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_PERF=y +CONFIG_CGROUP_SCHED=y +CONFIG_CHARGER_88PM860X=m +CONFIG_CHARGER_BQ2415X=m +CONFIG_CHARGER_GPIO=m +CONFIG_CHARGER_ISP1704=m +CONFIG_CHARGER_LP8727=m +CONFIG_CHARGER_LP8788=m +CONFIG_CHARGER_MANAGER=y +CONFIG_CHARGER_MAX8903=m +CONFIG_CHARGER_MAX8997=m +CONFIG_CHARGER_MAX8998=m +CONFIG_CHARGER_PCF50633=m +CONFIG_CHARGER_SMB347=m +CONFIG_CHARGER_TWL4030=m +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4VF=m +CONFIG_CHR_DEV_OSST=m +CONFIG_CHR_DEV_SCH=m +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_ST=m +CONFIG_CICADA_PHY=y +CONFIG_CIFS=m +CONFIG_CIFS_ACL=y +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_FSCACHE=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_SMB2=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_CISS_SCSI_TAPE=y +CONFIG_CLEANCACHE=y +CONFIG_CLKBLD_I8253=y +CONFIG_CLKDEV_LOOKUP=y +CONFIG_CLKEVT_I8253=y +CONFIG_CLKSRC_I8253=y +CONFIG_CLKSRC_MMIO=y +CONFIG_CLK_TWL6040=m +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_CLS_U32_MARK=y +# CONFIG_CLS_U32_PERF is not set +CONFIG_CLZ_TAB=y +CONFIG_CMA=y +CONFIG_CMA_ALIGNMENT=8 +CONFIG_CMA_AREAS=7 +# CONFIG_CMA_DEBUG 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="" +# CONFIG_CMDLINE_BOOL is not set +CONFIG_CNIC=m +CONFIG_CODA_FS=m +CONFIG_COMEDI=m +CONFIG_COMEDI_8255=m +CONFIG_COMEDI_8255_PCI=m +CONFIG_COMEDI_ACL7225B=m +CONFIG_COMEDI_ADDI_APCI_035=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_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_PCI1723=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=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_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_FC=m +CONFIG_COMEDI_FL512=m +CONFIG_COMEDI_GSC_HPDI=m +CONFIG_COMEDI_ICP_MULTI=m +CONFIG_COMEDI_II_PCI20KC=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_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_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_PARPORT=m +CONFIG_COMEDI_PCI_DRIVERS=y +CONFIG_COMEDI_PCL711=m +CONFIG_COMEDI_PCL724=m +CONFIG_COMEDI_PCL725=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_PCM3730=m +CONFIG_COMEDI_PCMAD=m +CONFIG_COMEDI_PCMCIA_DRIVERS=y +CONFIG_COMEDI_PCMDA12=m +CONFIG_COMEDI_PCMMIO=m +CONFIG_COMEDI_PCMUIO=m +CONFIG_COMEDI_POC=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_SKEL=m +CONFIG_COMEDI_SSV_DNP=m +CONFIG_COMEDI_TEST=m +CONFIG_COMEDI_UNIOXX5=m +CONFIG_COMEDI_USBDUX=m +CONFIG_COMEDI_USBDUXFAST=m +CONFIG_COMEDI_USBDUXSIGMA=m +CONFIG_COMEDI_USB_DRIVERS=y +CONFIG_COMEDI_VMK80XX=m +CONFIG_COMMON_CLK=y +# CONFIG_COMMON_CLK_DEBUG is not set +CONFIG_COMMON_CLK_MAX77686=m +CONFIG_COMMON_CLK_VERSATILE=y +CONFIG_COMMON_CLK_WM831X=m +CONFIG_COMPACTION=y +CONFIG_COMPAL_LAPTOP=m +CONFIG_COMPAT=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_VDSO is not set +CONFIG_CONFIGFS_FS=m +CONFIG_CONNECTOR=y +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_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_COSA=m +# CONFIG_CPA_DEBUG is not set +CONFIG_CPU5_WDT=m +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_DCACHE_DISABLE is not set +CONFIG_CPU_FREQ=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +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_USERSPACE=y +# CONFIG_CPU_FREQ_IMX is not set +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_HAS_ASID=y +# CONFIG_CPU_ICACHE_DISABLE is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_CALXEDA=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_NOTIFIER_ERROR_INJECT=m +CONFIG_CPU_PABRT_V7=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_THERMAL=y +CONFIG_CPU_TLB_V7=y +CONFIG_CPU_V7=y +CONFIG_CRAMFS=m +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_CRC7=m +CONFIG_CRC8=m +CONFIG_CRC_CCITT=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC_T10DIF=y +CONFIG_CROSS_COMPILE="" +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ABLK_HELPER_X86=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_AES_ARM=m +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_AES_X86_64=m +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_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_CRC32C=y +CONFIG_CRYPTO_CRC32C_INTEL=y +CONFIG_CRYPTO_CRC32C_X86_64=y +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_CTR=m +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DEV_GEODE=m +CONFIG_CRYPTO_DEV_OMAP_AES=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_ECB=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +CONFIG_CRYPTO_GLUE_HELPER_X86=m +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_PCOMP=m +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_PCRYPT=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_SALSA20=m +CONFIG_CRYPTO_SALSA20_586=m +CONFIG_CRYPTO_SALSA20_X86_64=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_SERPENT=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_SSSE3=m +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +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_HASH=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=m +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYSTALHD=m +# CONFIG_CS5535_MFGPT is not set +CONFIG_CS89x0=m +CONFIG_CS89x0_PLATFORM=y +CONFIG_CSR_WIFI=m +CONFIG_CUSE=m +CONFIG_CXT1E1=m +CONFIG_CYCLADES=m +CONFIG_CYCLADES_SYNC=m +CONFIG_CYCLOMX_X25=y +# CONFIG_CYZ_INTR is not set +CONFIG_DA9052_WATCHDOG=m +CONFIG_DA9055_WATCHDOG=m +CONFIG_DAVICOM_PHY=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_DE600=m +CONFIG_DE620=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 is not set +# CONFIG_DEBUG_CREDENTIALS is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_DRIVER 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_IMX6Q_UART_PORT=1 +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +CONFIG_DEBUG_KERNEL=y +# 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_NX_TEST is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_PAGEALLOC 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_RODATA=y +# CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_DEBUG_SET_MODULE_RONX=y +# 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_STRICT_USER_COPY_CHECKS is not set +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DECNET=m +CONFIG_DECNET_NF_GRABULATOR=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_XZ=y +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_CUBIC=y +CONFIG_DEFAULT_DEADLINE=y +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +CONFIG_DEFAULT_IOSCHED="deadline" +CONFIG_DEFAULT_IO_DELAY_TYPE=1 +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# 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_SECURITY_YAMA is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_DELL_LAPTOP=m +CONFIG_DELL_RBU=m +CONFIG_DELL_WMI=m +CONFIG_DELL_WMI_AIO=m +CONFIG_DEPCA=m +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +# CONFIG_DEVKMEM is not set +CONFIG_DEVPORT=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEV_APPLETALK=m +CONFIG_DE_AOC=y +CONFIG_DGRP=m +CONFIG_DIRECT_GBPAGES=y +CONFIG_DL2K=m +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_DLM=m +# CONFIG_DLM_DEBUG is not set +CONFIG_DM9000=m +# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set +CONFIG_DM9102=m +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set +CONFIG_DMAR_TABLE=y +# CONFIG_DMATEST is not set +# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMA_ENGINE=y +CONFIG_DMA_OMAP=y +CONFIG_DMA_SHARED_BUFFER=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMI=y +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=m +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_BUFIO=m +CONFIG_DM_CRYPT=m +# CONFIG_DM_DEBUG is not set +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set +CONFIG_DM_DELAY=m +CONFIG_DM_FLAKEY=m +CONFIG_DM_LOG_USERSPACE=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_THIN_PROVISIONING=m +CONFIG_DM_UEVENT=y +CONFIG_DM_VERITY=m +CONFIG_DM_ZERO=m +CONFIG_DNET=m +CONFIG_DNOTIFY=y +CONFIG_DNS_RESOLVER=y +CONFIG_DONGLE=y +CONFIG_DOUBLEFAULT=y +CONFIG_DQL=y +CONFIG_DRAGONRISE_FF=y +# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_DRM=m +CONFIG_DRM_AST=m +CONFIG_DRM_CIRRUS_QEMU=m +# CONFIG_DRM_EXYNOS is not set +CONFIG_DRM_GEM_CMA_HELPER=y +CONFIG_DRM_GMA3600=y +CONFIG_DRM_GMA500=m +CONFIG_DRM_GMA600=y +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +CONFIG_DRM_I810=m +CONFIG_DRM_I915=m +CONFIG_DRM_I915_KMS=y +CONFIG_DRM_IMX=m +CONFIG_DRM_IMX_FB_HELPER=m +CONFIG_DRM_IMX_IPUV3=m +CONFIG_DRM_IMX_IPUV3_CORE=m +CONFIG_DRM_IMX_PARALLEL_DISPLAY=m +CONFIG_DRM_KMS_CMA_HELPER=y +CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +# CONFIG_DRM_MEDFIELD is not set +CONFIG_DRM_MGA=m +# CONFIG_DRM_MGAG200 is not set +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +# CONFIG_DRM_OMAP is not set +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_RADEON_KMS=y +CONFIG_DRM_SAVAGE=m +CONFIG_DRM_SIS=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_TTM=m +CONFIG_DRM_UDL=m +CONFIG_DRM_USB=m +CONFIG_DRM_VIA=m +CONFIG_DRM_VMWGFX=m +# CONFIG_DRM_VMWGFX_FBCON is not set +CONFIG_DS1682=m +CONFIG_DSCC4=m +CONFIG_DSCC4_PCISYNC=y +CONFIG_DSCC4_PCI_RST=y +# CONFIG_DT3155_CCIR is not set +CONFIG_DT3155_STREAMING=y +CONFIG_DTC=y +CONFIG_DTLK=m +CONFIG_DUMMY=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_DVB_A8293=m +CONFIG_DVB_AF9013=m +CONFIG_DVB_AF9033=m +CONFIG_DVB_AS102=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_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_CORE=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_CXD2099=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_DDBRIDGE=m +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_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_HOPPER=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_IT913X_FE=m +CONFIG_DVB_IX2505V=m +CONFIG_DVB_L64781=m +CONFIG_DVB_LG2160=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_MB86A16=m +CONFIG_DVB_MB86A20S=m +CONFIG_DVB_MT312=m +CONFIG_DVB_MT352=m +CONFIG_DVB_NET=y +CONFIG_DVB_NGENE=m +CONFIG_DVB_NXT200X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_PLL=m +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_PT1=m +CONFIG_DVB_RTL2830=m +CONFIG_DVB_RTL2832=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_S5H1411=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_S921=m +CONFIG_DVB_SI21XX=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_STV6110=m +CONFIG_DVB_STV6110x=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_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_CYPRESS_FIRMWARE=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_DIB0700=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_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_IT913X=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_VES1820=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_ZL10353=m +CONFIG_DW_APB_TIMER=y +CONFIG_DW_DMAC=m +# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set +CONFIG_DW_WATCHDOG=m +CONFIG_DX_SEP=m +# CONFIG_DYNAMIC_DEBUG is not set +CONFIG_DYNAMIC_FTRACE=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E2100=m +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DBGP=y +CONFIG_EARLY_PRINTK_INTEL_MID=y +CONFIG_ECHO=m +CONFIG_ECRYPT_FS=y +CONFIG_EDAC=y +CONFIG_EDAC_AMD64=m +# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set +CONFIG_EDAC_AMD76X=m +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_E7XXX=m +CONFIG_EDAC_HIGHBANK_L2=y +CONFIG_EDAC_HIGHBANK_MC=y +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_LEGACY_SYSFS=y +CONFIG_EDAC_MCE_INJ=m +CONFIG_EDAC_R82600=m +CONFIG_EDAC_SBRIDGE=m +CONFIG_EDAC_X38=m +CONFIG_EDD=y +CONFIG_EDD_OFF=y +CONFIG_EEEPC_LAPTOP=m +CONFIG_EEEPC_WMI=m +CONFIG_EEPROM_93CX6=m +CONFIG_EEPROM_93XX46=m +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_EFI=y +CONFIG_EFI_PARTITION=y +CONFIG_EFI_STUB=y +CONFIG_EFI_VARS=y +# CONFIG_EFI_VARS_PSTORE is not set +CONFIG_EFS_FS=m +CONFIG_EISA=y +CONFIG_EISA_NAMES=y +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +CONFIG_EISA_VLB_PRIMING=y +CONFIG_EL1=m +CONFIG_EL16=m +CONFIG_EL2=m +CONFIG_EL3=m +CONFIG_ELF_CORE=y +CONFIG_ELPLUS=m +# CONFIG_EMBEDDED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_ENC28J60=m +# CONFIG_ENC28J60_WRITEVERIFY is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_ENCRYPTED_KEYS=y +CONFIG_ENIC=m +CONFIG_EPIC100=m +CONFIG_EPOLL=y +CONFIG_EQUALIZER=m +CONFIG_ES3210=m +CONFIG_ESI_DONGLE=m +CONFIG_ET131X=m +CONFIG_ETH16I=m +CONFIG_ETHERNET=y +CONFIG_ETHOC=m +CONFIG_EUROTECH_WDT=m +CONFIG_EVENTFD=y +CONFIG_EVENT_POWER_TRACING_DEPRECATED=y +CONFIG_EVENT_TRACING=y +CONFIG_EVM=y +CONFIG_EWRK3=m +# CONFIG_EXOFS_DEBUG is not set +CONFIG_EXOFS_FS=m +CONFIG_EXPERIMENTAL=y +CONFIG_EXPERT=y +CONFIG_EXPORTFS=y +CONFIG_EXT2_FS=m +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_DEFAULTS_TO_ORDERED=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_EXTCON=y +CONFIG_EXTCON_ADC_JACK=m +CONFIG_EXTCON_ARIZONA=m +CONFIG_EXTCON_GPIO=m +CONFIG_EXTCON_MAX77693=m +CONFIG_EXTCON_MAX8997=m +CONFIG_EXTRA_FIRMWARE="" +CONFIG_EXYNOS_VIDEO=y +CONFIG_F2FS_FS=m +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F71808E_WDT=m +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_SHARE=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_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_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_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_CYBER2000=m +CONFIG_FB_CYBER2000_DDC=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_EFI=y +# 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_I740=m +CONFIG_FB_I810=m +# CONFIG_FB_I810_GTF is not set +CONFIG_FB_IMSTT=y +CONFIG_FB_INTEL=m +# CONFIG_FB_INTEL_DEBUG is not set +# CONFIG_FB_INTEL_I2C is not set +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_MX3=y +CONFIG_FB_N411=m +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_BACKLIGHT=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_I2C=y +CONFIG_FB_OMAP2=y +# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set +CONFIG_FB_OMAP2_NUM_FBS=3 +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_S3_DDC=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_ACCEL is not set +# CONFIG_FB_SAVAGE_I2C is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_SM501=m +CONFIG_FB_SM7XX=m +CONFIG_FB_SMSCUFX=m +CONFIG_FB_SSD1307=m +CONFIG_FB_SYS_FOPS=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=m +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_WMT_GE_ROPS is not set +CONFIG_FB_XGI=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_FDDI=y +CONFIG_FEALNX=m +CONFIG_FEC=y +# CONFIG_FEC_PTP is not set +CONFIG_FHANDLE=y +CONFIG_FIB_RULES=y +CONFIG_FILE_LOCKING=y +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_NET=m +CONFIG_FIREWIRE_NOSY=m +CONFIG_FIREWIRE_OHCI=m +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_SERIAL=m +CONFIG_FIRMWARE_EDID=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_FIXED_PHY=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_FLATMEM=y +CONFIG_FLATMEM_MANUAL=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_FONT_10x18 is not set +# 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_FORCEDETH=m +CONFIG_FORCE_MAX_ZONEORDER=12 +# CONFIG_FPE_FASTFPE is not set +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +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_FSNOTIFY=y +CONFIG_FS_MBCACHE=y +CONFIG_FS_POSIX_ACL=y +CONFIG_FT1000=m +CONFIG_FT1000_PCMCIA=m +CONFIG_FT1000_USB=m +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_FUJITSU_LAPTOP=m +# CONFIG_FUJITSU_LAPTOP_DEBUG is not set +CONFIG_FUJITSU_TABLET=m +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_FW_LOADER=y +CONFIG_GACT_PROB=y +CONFIG_GADGET_UAC1=y +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GARP=m +CONFIG_GART_IOMMU=y +# CONFIG_GCOV_KERNEL is not set +CONFIG_GENERIC_ACL=y +CONFIG_GENERIC_ADC_BATTERY=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_BUILD=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_GENERIC_CPU=y +CONFIG_GENERIC_CPUFREQ_CPU0=y +# CONFIG_GENERIC_CPU_DEVICES is not set +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_IO=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_SIGALTSTACK=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_GEOS=y +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +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_GOOGLE_FIRMWARE is not set +CONFIG_GPIOLIB=y +CONFIG_GPIO_74X164=m +CONFIG_GPIO_ACPI=y +CONFIG_GPIO_ADNP=m +CONFIG_GPIO_ADP5520=m +CONFIG_GPIO_ADP5588=m +CONFIG_GPIO_AMD8111=m +CONFIG_GPIO_ARIZONA=m +CONFIG_GPIO_CS5535=m +CONFIG_GPIO_DA9052=m +CONFIG_GPIO_DA9055=m +# CONFIG_GPIO_EM is not set +CONFIG_GPIO_GENERIC_PLATFORM=m +CONFIG_GPIO_ICH=m +CONFIG_GPIO_INTEL_PMIC=y +CONFIG_GPIO_IT8761E=m +CONFIG_GPIO_JANZ_TTL=m +CONFIG_GPIO_LANGWELL=y +CONFIG_GPIO_LYNXPOINT=y +CONFIG_GPIO_MAX7300=m +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MAX730X=m +CONFIG_GPIO_MAX732X=m +CONFIG_GPIO_MC33880=m +CONFIG_GPIO_MCP23S08=m +CONFIG_GPIO_ML_IOH=m +CONFIG_GPIO_MSIC=y +CONFIG_GPIO_MXC=y +CONFIG_GPIO_PCA953X=m +CONFIG_GPIO_PCF857X=m +CONFIG_GPIO_PCH=m +CONFIG_GPIO_PL061=y +CONFIG_GPIO_RC5T583=y +CONFIG_GPIO_RDC321X=m +CONFIG_GPIO_SCH=m +CONFIG_GPIO_STMPE=y +CONFIG_GPIO_SX150X=y +# CONFIG_GPIO_SYSFS is not set +CONFIG_GPIO_TC3589X=y +CONFIG_GPIO_TIMBERDALE=y +CONFIG_GPIO_TPS6586X=y +CONFIG_GPIO_TPS65910=y +CONFIG_GPIO_TPS65912=m +CONFIG_GPIO_TS5500=m +CONFIG_GPIO_TWL6040=m +CONFIG_GPIO_UCB1400=y +CONFIG_GPIO_VIPERBOARD=m +CONFIG_GPIO_VX855=m +CONFIG_GPIO_WM831X=m +CONFIG_GPIO_WM8350=m +CONFIG_GPIO_WM8994=m +CONFIG_GREENASIA_FF=y +CONFIG_HAMACHI=m +CONFIG_HAMRADIO=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_HAPPYMEAL=m +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_HARDLOCKUP_DETECTOR=y +CONFIG_HAS_DMA=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_HAVE_ARCH_KMEMCHECK=y +CONFIG_HAVE_ARCH_PFN_VALID=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARM_SCU=y +CONFIG_HAVE_ARM_TWD=y +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_BPF_JIT=y +CONFIG_HAVE_CAN_FLEXCAN=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_C_RECORDMCOUNT=y +CONFIG_HAVE_DEBUG_KMEMLEAK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_FENTRY=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_GENERIC_HARDIRQS=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_IDE=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_TIME_ACCOUNTING=y +CONFIG_HAVE_IRQ_WORK=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KPROBES=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_MSI=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=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_MTD_OTP=y +CONFIG_HAVE_NET_DSA=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_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_HAVE_SMP=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_HAVE_UID16=y +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +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_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_HFSPLUS_FS=m +CONFIG_HFS_FS=m +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_HID=m +CONFIG_HIDRAW=y +CONFIG_HID_A4TECH=m +CONFIG_HID_ACRUX=m +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_APPLE=m +CONFIG_HID_AUREAL=m +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HID_BELKIN=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_HID_ELECOM=m +CONFIG_HID_EMS_FF=m +CONFIG_HID_EZKEY=m +CONFIG_HID_GENERIC=m +CONFIG_HID_GREENASIA=m +CONFIG_HID_GYRATION=m +CONFIG_HID_HOLTEK=m +CONFIG_HID_HYPERV_MOUSE=m +CONFIG_HID_ICADE=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m +CONFIG_HID_LCPOWER=m +CONFIG_HID_LENOVO_TPKBD=m +CONFIG_HID_LOGITECH=m +CONFIG_HID_LOGITECH_DJ=m +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=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_PRIMAX=m +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_PS3REMOTE=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_ENUM_BASE_QUIRKS is not set +CONFIG_HID_SENSOR_GYRO_3D=m +CONFIG_HID_SENSOR_HUB=m +CONFIG_HID_SENSOR_IIO_COMMON=m +CONFIG_HID_SENSOR_IIO_TRIGGER=m +CONFIG_HID_SENSOR_MAGNETOMETER_3D=m +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_HID_SONY=m +CONFIG_HID_SPEEDLINK=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_THRUSTMASTER=m +CONFIG_HID_TIVO=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WACOM=m +CONFIG_HID_WALTOP=m +CONFIG_HID_WIIMOTE=m +CONFIG_HID_WIIMOTE_EXT=y +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_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_HMC6352=m +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=y +CONFIG_HOTPLUG_CPU=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=m +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_SHPC=m +CONFIG_HP100=m +CONFIG_HPET=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_HPET_MMAP=y +CONFIG_HPET_TIMER=y +CONFIG_HPFS_FS=m +CONFIG_HPLAN=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPWDT_NMI_DECODING=y +CONFIG_HP_ACCEL=m +CONFIG_HP_ILO=m +CONFIG_HP_WATCHDOG=m +CONFIG_HP_WMI=m +CONFIG_HSI=m +CONFIG_HSI_BOARDINFO=y +CONFIG_HSI_CHAR=m +CONFIG_HTC_EGPIO=y +CONFIG_HTC_I2CPLD=y +CONFIG_HTC_PASIC3=m +CONFIG_HT_IRQ=y +CONFIG_HUGETLBFS=y +CONFIG_HVC_DCC=y +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_HWMON_VID=m +CONFIG_HWPOISON_INJECT=m +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_OMAP=y +CONFIG_HW_CONSOLE=y +CONFIG_HW_PERF_EVENTS=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_AMD=m +# CONFIG_HW_RANDOM_ATMEL is not set +CONFIG_HW_RANDOM_EXYNOS=m +CONFIG_HW_RANDOM_GEODE=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_HYPERV_BALLOON=m +CONFIG_HYPERV_NET=m +CONFIG_HYPERV_STORAGE=m +CONFIG_HYPERV_UTILS=m +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +# CONFIG_HZ_100 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +CONFIG_I2C=y +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_CBUS_GPIO=m +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_COMPAT=y +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CORE is not set +CONFIG_I2C_DESIGNWARE_CORE=m +CONFIG_I2C_DESIGNWARE_PCI=m +CONFIG_I2C_DESIGNWARE_PLATFORM=m +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_EG20T=m +CONFIG_I2C_GPIO=m +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_HID=m +CONFIG_I2C_I801=m +CONFIG_I2C_IMX=y +CONFIG_I2C_INTEL_MID=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_ISMT=m +CONFIG_I2C_MUX=m +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_PINCTRL=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_NOMADIK=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_OMAP=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_PCI is not set +CONFIG_I2C_SCMI=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_SMBUS=m +CONFIG_I2C_STUB=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VERSATILE=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VIPERBOARD=m +CONFIG_I2C_XILINX=m +CONFIG_I2O=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_BUS=m +CONFIG_I2O_CONFIG=m +# CONFIG_I2O_CONFIG_OLD_IOCTL is not set +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_EXT_ADAPTEC_DMA64=y +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_PROC=m +CONFIG_I2O_SCSI=m +CONFIG_I6300ESB_WDT=m +CONFIG_I7300_IDLE=m +CONFIG_I7300_IDLE_IOAT_CHANNEL=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_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_IBM_ASM=m +CONFIG_IBM_RTL=m +CONFIG_ICPLUS_PHY=y +CONFIG_ICS932S401=m +CONFIG_ICST=y +# CONFIG_IDE is not set +CONFIG_IDEAPAD_LAPTOP=m +CONFIG_IDE_PHISON=m +CONFIG_IE6XX_WDT=m +CONFIG_IEEE802154=m +CONFIG_IEEE802154_6LOWPAN=m +CONFIG_IEEE802154_AT86RF230=m +CONFIG_IEEE802154_DRIVERS=m +# CONFIG_IEEE802154_FAKEHARD is not set +CONFIG_IEEE802154_FAKELB=m +CONFIG_IEEE802154_MRF24J40=m +CONFIG_IFB=m +CONFIG_IGB=m +CONFIG_IGBVF=m +CONFIG_IGB_DCA=y +CONFIG_IIO=m +CONFIG_IIO_ADIS_LIB=m +CONFIG_IIO_ADIS_LIB_BUFFER=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +CONFIG_IIO_GPIO_TRIGGER=m +CONFIG_IIO_KFIFO_BUF=m +CONFIG_IIO_PERIODIC_RTC_TRIGGER=m +CONFIG_IIO_SIMPLE_DUMMY=m +# CONFIG_IIO_SIMPLE_DUMMY_BUFFER is not set +# CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set +CONFIG_IIO_ST_HWMON=m +CONFIG_IIO_SW_RING=m +CONFIG_IIO_SYSFS_TRIGGER=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_TRIGGERED_BUFFER=m +# CONFIG_IKCONFIG is not set +# CONFIG_IMA is not set +# CONFIG_IMX2_WDT is not set +# CONFIG_IMX_DMA is not set +# CONFIG_IMX_SDMA is not set +CONFIG_INET=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=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_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_LRO=y +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_AMSO1100=m +# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_CXGB4=m +CONFIG_INFINIBAND_IPATH=m +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +# CONFIG_INFINIBAND_IPOIB_DEBUG is not set +CONFIG_INFINIBAND_ISER=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_QIB=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_INFTL=m +CONFIG_INITRAMFS_SOURCE="" +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_INIT_PASS_ALL_PARAMS=y +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_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_BMA150=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_CMA3000=m +CONFIG_INPUT_CMA3000_I2C=m +CONFIG_INPUT_DA9052_ONKEY=m +CONFIG_INPUT_DA9055_ONKEY=m +CONFIG_INPUT_EVBUG=m +CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_GP2A=m +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +CONFIG_INPUT_GPIO_TILT_POLLED=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_MATRIXKMAP=m +CONFIG_INPUT_MAX8925_ONKEY=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_MPU3050=m +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_RETU_PWRBUTTON=m +CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TOUCHSCREEN=y +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_INTEGRITY=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEL_IDLE=y +CONFIG_INTEL_IOATDMA=m +CONFIG_INTEL_IOMMU=y +# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set +CONFIG_INTEL_IOMMU_FLOPPY_WA=y +CONFIG_INTEL_IPS=m +CONFIG_INTEL_MEI=m +CONFIG_INTEL_MENLOW=m +CONFIG_INTEL_MFLD_THERMAL=m +CONFIG_INTEL_MID_DMAC=m +CONFIG_INTEL_MID_POWER_BUTTON=m +CONFIG_INTEL_MID_PTI=m +CONFIG_INTEL_OAKTRAIL=m +CONFIG_INTEL_SCU_IPC=y +CONFIG_INTEL_SCU_IPC_UTIL=m +CONFIG_INTEL_TXT=y +CONFIG_INTERVAL_TREE_TEST=m +CONFIG_IOMMU_API=y +# CONFIG_IOMMU_DEBUG is not set +CONFIG_IOMMU_HELPER=y +# CONFIG_IOMMU_STRESS is not set +CONFIG_IOMMU_SUPPORT=y +CONFIG_IOSCHED_CFQ=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_NOOP=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_IP1000=m +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_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_IPACK_BUS=m +CONFIG_IPC_NS=y +CONFIG_IPDDP=m +CONFIG_IPDDP_DECAP=y +CONFIG_IPDDP_ENCAP=y +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_POWEROFF=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPPP_FILTER=y +CONFIG_IPV6=y +CONFIG_IPV6_GRE=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_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_TUNNEL=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=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_QUEUE is not set +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_TTL=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_BOOTP is not set +CONFIG_IP_PNP_DHCP=y +# CONFIG_IP_PNP_RARP 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_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_HASH_NETPORT=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_FTP=m +# CONFIG_IP_VS_IPV6 is not set +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_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_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_IRQ_REMAP=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_IRQ_WORK=y +CONFIG_IRTTY_SIR=m +CONFIG_IR_ENE=m +CONFIG_IR_FINTEK=m +CONFIG_IR_GPIO_CIR=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_NEC_DECODER=m +CONFIG_IR_NUVOTON=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_STREAMZAP=m +CONFIG_IR_TTUSBIR=m +CONFIG_IR_WINBOND_CIR=m +CONFIG_ISA=y +CONFIG_ISAPNP=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_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_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_ACT2000=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_AVMB1_VERBOSE_REASON=y +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_ISDN_DRV_HISAX=m +CONFIG_ISDN_DRV_ICN=m +CONFIG_ISDN_DRV_PCBIT=m +CONFIG_ISDN_DRV_SC=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_ISO9660_FS=m +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_ITCO_WDT=m +CONFIG_IWL3945=m +CONFIG_IWL4965=m +CONFIG_IWLDVM=m +CONFIG_IWLEGACY=m +# CONFIG_IWLEGACY_DEBUG is not set +CONFIG_IWLEGACY_DEBUGFS=y +CONFIG_IWLWIFI=m +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_DEBUGFS=y +CONFIG_IWLWIFI_DEVICE_TESTMODE=y +CONFIG_IWLWIFI_DEVICE_TRACING=y +# CONFIG_IWLWIFI_P2P is not set +CONFIG_IXGB=m +CONFIG_IXGBE=m +CONFIG_IXGBEVF=m +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBE_HWMON=y +CONFIG_JBD=y +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +# CONFIG_JBD_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_WBUF_VERIFY is not set +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_XATTR is not set +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_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +CONFIG_JFS_STATISTICS=y +CONFIG_JME=m +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_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_JUMP_LABEL=y +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +CONFIG_KARMA_PARTITION=y +CONFIG_KDB_KEYBOARD=y +# CONFIG_KERNEL_BZIP2 is not set +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_XZ is not set +CONFIG_KEXEC=y +CONFIG_KEXEC_JUMP=y +CONFIG_KEYBOARD_ADP5520=m +CONFIG_KEYBOARD_ADP5588=m +CONFIG_KEYBOARD_ADP5589=m +CONFIG_KEYBOARD_ATKBD=y +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_OMAP4=m +CONFIG_KEYBOARD_OPENCORES=m +CONFIG_KEYBOARD_QT1070=m +CONFIG_KEYBOARD_QT2160=m +CONFIG_KEYBOARD_SAMSUNG=m +CONFIG_KEYBOARD_STMPE=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_SUNKBD=m +CONFIG_KEYBOARD_TC3589X=m +CONFIG_KEYBOARD_TCA6416=m +CONFIG_KEYBOARD_TCA8418=m +CONFIG_KEYBOARD_TWL4030=m +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYS=y +CONFIG_KEYS_COMPAT=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +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_KPROBES=y +# CONFIG_KPROBES_SANITY_TEST is not set +CONFIG_KPROBE_EVENT=y +CONFIG_KRETPROBES=y +CONFIG_KS0108=m +CONFIG_KS0108_DELAY=2 +CONFIG_KS0108_PORT=0x378 +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_KS959_DONGLE=m +CONFIG_KSDAZZLE_DONGLE=m +CONFIG_KSZ884X_PCI=m +CONFIG_KTIME_SCALAR=y +CONFIG_KUSER_HELPERS=y +CONFIG_KVM=m +CONFIG_KVM_AMD=m +CONFIG_KVM_APIC_ARCHITECTURE=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_KVM_GUEST=y +CONFIG_KVM_INTEL=m +CONFIG_KVM_MMIO=y +# CONFIG_KVM_MMU_AUDIT is not set +CONFIG_KXSD9=m +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +# CONFIG_L2TP_V3 is not set +CONFIG_LANCE=m +CONFIG_LANMEDIA=m +CONFIG_LAPB=m +CONFIG_LAPBETHER=m +CONFIG_LATENCYTOP=y +CONFIG_LBDAF=y +CONFIG_LCD_AMS369FG06=m +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_ILI9320=m +CONFIG_LCD_L4F00242T03=m +CONFIG_LCD_LD9040=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_PLATFORM=m +CONFIG_LCD_S6E63M0=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +# CONFIG_LDM_DEBUG is not set +CONFIG_LDM_PARTITION=y +CONFIG_LEDS_88PM860X=m +CONFIG_LEDS_ADP5520=m +CONFIG_LEDS_ASIC3=y +CONFIG_LEDS_ATMEL_PWM=m +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_BLINKM=m +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLEVO_MAIL=m +CONFIG_LEDS_DA903X=m +CONFIG_LEDS_DA9052=m +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_DELL_NETBOOKS=m +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_INTEL_SS4200=m +CONFIG_LEDS_LM3530=m +CONFIG_LEDS_LM3533=m +CONFIG_LEDS_LM355x=m +CONFIG_LEDS_LM3642=m +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_LP5521=m +CONFIG_LEDS_LP5523=m +CONFIG_LEDS_LP8788=m +CONFIG_LEDS_LT3593=m +CONFIG_LEDS_MAX8997=m +CONFIG_LEDS_MC13783=m +CONFIG_LEDS_NET48XX=m +CONFIG_LEDS_OT200=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA9532_GPIO=y +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_PCA9633=m +CONFIG_LEDS_REGULATOR=m +CONFIG_LEDS_RENESAS_TPU=y +CONFIG_LEDS_TCA6507=m +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_ONESHOT=m +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_TRANSIENT=m +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_WRAP=m +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=0 +# CONFIG_LGUEST is not set +# CONFIG_LGUEST_GUEST 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_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_LINE6_USB=m +# CONFIG_LINE6_USB_DUMP_PCM is not set +# CONFIG_LINE6_USB_IMPULSE_RESPONSE is not set +CONFIG_LIRC=m +CONFIG_LIRC_BT829=m +CONFIG_LIRC_IGORPLUGUSB=m +CONFIG_LIRC_IMON=m +CONFIG_LIRC_PARALLEL=m +CONFIG_LIRC_SASEM=m +CONFIG_LIRC_SERIAL=m +CONFIG_LIRC_SERIAL_TRANSMITTER=y +CONFIG_LIRC_SIR=m +CONFIG_LIRC_STAGING=y +CONFIG_LIRC_ZILOG=m +CONFIG_LIS3L02DQ_BUF_KFIFO=y +# CONFIG_LIS3L02DQ_BUF_RING_SW is not set +CONFIG_LITELINK_DONGLE=m +# CONFIG_LKDTM is not set +CONFIG_LLC=m +CONFIG_LLC2=m +CONFIG_LNE390=m +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_LOCAL_TIMERS=y +CONFIG_LOCKD=m +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_LOCKD_V4=y +CONFIG_LOCKUP_DETECTOR=y +# CONFIG_LOCK_STAT is not set +# CONFIG_LOGFS 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=17 +CONFIG_LOOPBACK_TARGET=m +CONFIG_LP486E=m +CONFIG_LP8788_ADC=y +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +# CONFIG_LP_CONSOLE is not set +CONFIG_LRU_CACHE=m +CONFIG_LSI_ET1011C_PHY=y +CONFIG_LSM_MMAP_MIN_ADDR=0 +CONFIG_LTPC=m +CONFIG_LXT_PHY=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_M25PXX_USE_FAST_READ=y +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586MMX is not set +# CONFIG_M586TSC is not set +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_DEFAULT_PID is not set +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +CONFIG_MAC80211_RC_PID=y +CONFIG_MAC802154=m +CONFIG_MACB=m +CONFIG_MACHZ_WDT=m +# CONFIG_MACH_CM_T35 is not set +CONFIG_MACH_CM_T3517=y +# CONFIG_MACH_CRANEBOARD is not set +# CONFIG_MACH_DEVKIT8000 is not set +# CONFIG_MACH_EUKREA_CPUIMX51SD is not set +CONFIG_MACH_IGEP0020=y +CONFIG_MACH_IGEP0030=y +# CONFIG_MACH_IMX51_DT is not set +# CONFIG_MACH_MX51_3DS is not set +# CONFIG_MACH_MX51_BABBAGE is not set +CONFIG_MACH_NOKIA_RM680=y +# CONFIG_MACH_NOKIA_RX51 is not set +# CONFIG_MACH_OMAP3517EVM is not set +CONFIG_MACH_OMAP3530_LV_SOM=y +CONFIG_MACH_OMAP3EVM=y +CONFIG_MACH_OMAP3_BEAGLE=y +CONFIG_MACH_OMAP3_PANDORA=y +CONFIG_MACH_OMAP3_TORPEDO=y +CONFIG_MACH_OMAP4_PANDA=y +CONFIG_MACH_OMAP_3430SDP=y +CONFIG_MACH_OMAP_3630SDP=y +CONFIG_MACH_OMAP_4430SDP=y +CONFIG_MACH_OMAP_GENERIC=y +CONFIG_MACH_OMAP_LDP=y +CONFIG_MACH_OMAP_ZOOM2=y +CONFIG_MACH_OMAP_ZOOM3=y +CONFIG_MACH_OVERO=y +CONFIG_MACH_SBC3530=y +CONFIG_MACH_TI8148EVM=y +CONFIG_MACH_TI8168EVM=y +CONFIG_MACH_TOUCHBOOK=y +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_MAC_EMUMOUSEBTN=m +CONFIG_MAC_PARTITION=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAILBOX=y +CONFIG_MANTIS_CORE=m +CONFIG_MARVELL_PHY=y +# CONFIG_MATH_EMULATION is not set +# CONFIG_MATOM is not set +CONFIG_MAX1363=m +CONFIG_MAX517=m +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_MAX8925_POWER=m +# CONFIG_MAXSMP is not set +CONFIG_MAX_RAW_DEVS=256 +# CONFIG_MCORE2 is not set +CONFIG_MCP2120_DONGLE=m +CONFIG_MCP4725=m +# 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_BITBANG=y +CONFIG_MDIO_BUS_MUX=y +CONFIG_MDIO_BUS_MUX_GPIO=y +CONFIG_MDIO_BUS_MUX_MMIOREG=y +CONFIG_MDIO_GPIO=y +CONFIG_MD_AUTODETECT=y +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_ALTERA_CI=m +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_ATTACH=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_COMMON_OPTIONS=y +# CONFIG_MEDIA_CONTROLLER is not set +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_PARPORT_SUPPORT=y +CONFIG_MEDIA_PCI_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_RC_SUPPORT=y +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y +CONFIG_MEDIA_SUPPORT=m +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_MAX2165=m +CONFIG_MEDIA_TUNER_MC44S803=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_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_QT1010=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_LEGACY=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_SAS=m +# CONFIG_MELAN is not set +CONFIG_MEMCG=y +# CONFIG_MEMCG_KMEM is not set +CONFIG_MEMCG_SWAP=y +# CONFIG_MEMCG_SWAP_ENABLED is not set +CONFIG_MEMORY=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=m +# CONFIG_MEMSTICK_DEBUG is not set +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m +CONFIG_MEMSTICK_REALTEK_PCI=m +CONFIG_MEMSTICK_TIFM_MS=m +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MEMTEST=y +CONFIG_MFD_88PM800=m +CONFIG_MFD_88PM805=m +CONFIG_MFD_88PM860X=y +CONFIG_MFD_AAT2870_CORE=y +CONFIG_MFD_ARIZONA=y +CONFIG_MFD_ARIZONA_I2C=m +CONFIG_MFD_ARIZONA_SPI=m +CONFIG_MFD_AS3711=y +CONFIG_MFD_ASIC3=y +CONFIG_MFD_CORE=y +CONFIG_MFD_CS5535=m +CONFIG_MFD_DA9052_I2C=y +CONFIG_MFD_DA9052_SPI=y +CONFIG_MFD_DA9055=y +CONFIG_MFD_INTEL_MSIC=y +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_LM3533=m +CONFIG_MFD_LP8788=y +CONFIG_MFD_MAX77686=y +CONFIG_MFD_MAX77693=y +CONFIG_MFD_MAX8907=m +CONFIG_MFD_MAX8925=y +CONFIG_MFD_MAX8997=y +CONFIG_MFD_MAX8998=y +CONFIG_MFD_MC13783=m +CONFIG_MFD_MC13XXX=m +CONFIG_MFD_MC13XXX_I2C=m +CONFIG_MFD_MC13XXX_SPI=m +CONFIG_MFD_OMAP_USB_HOST=y +CONFIG_MFD_PALMAS=y +CONFIG_MFD_PCF50633=m +CONFIG_MFD_RC5T583=y +CONFIG_MFD_RDC321X=m +CONFIG_MFD_RETU=m +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_SEC_CORE=y +CONFIG_MFD_SM501=m +# CONFIG_MFD_SM501_GPIO is not set +CONFIG_MFD_SMSC=y +CONFIG_MFD_STMPE=y +CONFIG_MFD_SYSCON=y +CONFIG_MFD_T7L66XB=y +CONFIG_MFD_TC3589X=y +CONFIG_MFD_TC6387XB=y +CONFIG_MFD_TC6393XB=y +CONFIG_MFD_TIMBERDALE=m +CONFIG_MFD_TI_AM335X_TSCADC=m +CONFIG_MFD_TPS65090=y +CONFIG_MFD_TPS65217=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_TPS80031=y +CONFIG_MFD_TWL4030_AUDIO=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=y +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +CONFIG_MG_DISK=m +CONFIG_MG_DISK_RES=0 +CONFIG_MICREL_KS8995MA=m +CONFIG_MICREL_PHY=y +CONFIG_MICROCODE=m +CONFIG_MICROCODE_AMD=y +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_MIGHT_HAVE_CACHE_L2X0=y +CONFIG_MIGRATION=y +CONFIG_MII=y +CONFIG_MINIX_FS=m +CONFIG_MINIX_SUBPARTITION=y +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_DEBUG is not set +CONFIG_MLX4_EN=m +CONFIG_MLX4_EN_DCB=y +CONFIG_MLX4_INFINIBAND=m +CONFIG_MMC=y +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_CB710=m +# CONFIG_MMC_CLKGATE is not set +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_DW=m +CONFIG_MMC_DW_EXYNOS=m +# CONFIG_MMC_DW_IDMAC is not set +CONFIG_MMC_DW_PLTFM=m +# CONFIG_MMC_MXC is not set +CONFIG_MMC_OMAP=m +CONFIG_MMC_OMAP_HS=y +CONFIG_MMC_REALTEK_PCI=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_ACPI=m +CONFIG_MMC_SDHCI_ESDHC_IMX=y +CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_SDHCI_PXAV2=m +CONFIG_MMC_SDHCI_PXAV3=m +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_SPI=m +# CONFIG_MMC_TEST is not set +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_TMIO=m +CONFIG_MMC_TMIO_CORE=m +# CONFIG_MMC_UNSAFE_RESUME is not set +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_MM_OWNER=y +CONFIG_MODULES=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_MODULES_USE_ELF_RELA=y +# CONFIG_MODULE_FORCE_LOAD is not set +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_SIG=y +# CONFIG_MODULE_SIG_FORCE is not set +# 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=y +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +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_CYPRESS=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SENTELIC=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_TOUCHKIT=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_MOUSE_SYNAPTICS_USB=m +CONFIG_MOUSE_VSXXXAA=m +CONFIG_MOVABLE_NODE=y +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +CONFIG_MPCORE_WATCHDOG=m +# CONFIG_MPENTIUM4 is not set +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +CONFIG_MPILIB=y +# CONFIG_MPSC is not set +CONFIG_MSDOS_FS=m +CONFIG_MSDOS_PARTITION=y +CONFIG_MSI_LAPTOP=m +CONFIG_MSI_WMI=m +CONFIG_MSPRO_BLOCK=m +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTD_ABSENT=m +CONFIG_MTD_AFS_PARTS=m +CONFIG_MTD_ALAUDA=m +CONFIG_MTD_AMD76XROM=m +CONFIG_MTD_AR7_PARTS=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_CMDLINE_PARTS=y +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_DATAFLASH_OTP=y +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_DOCECC=m +CONFIG_MTD_DOCG3=m +CONFIG_MTD_DOCPROBE=m +CONFIG_MTD_DOCPROBE_ADDRESS=0x0 +# CONFIG_MTD_DOCPROBE_ADVANCED is not set +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_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_MTDRAM=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_DENALI_SCRATCH_REG_ADDR=0xFF108018 +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_GPIO=m +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_MXC=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_OMAP2=y +CONFIG_MTD_NAND_OMAP_BCH=y +# CONFIG_MTD_NAND_OMAP_BCH4 is not set +CONFIG_MTD_NAND_OMAP_BCH8=y +CONFIG_MTD_NAND_PLATFORM=m +CONFIG_MTD_NAND_RICOH=m +CONFIG_MTD_NAND_TMIO=m +CONFIG_MTD_NETSC520=m +CONFIG_MTD_NETtel=m +CONFIG_MTD_OF_PARTS=y +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_SIM is not set +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_OOPS=m +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_PLATRAM=m +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +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_SC520CDP=m +CONFIG_MTD_SCB2_FLASH=m +CONFIG_MTD_SCx200_DOCFLASH=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_SST25L=m +CONFIG_MTD_SWAP=m +# CONFIG_MTD_TESTS is not set +CONFIG_MTD_TS5500=m +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_BEB_LIMIT=20 +CONFIG_MTD_UBI_FASTMAP=y +CONFIG_MTD_UBI_GLUEBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +# CONFIG_MULTICORE_RAID456 is not set +CONFIG_MULTI_IRQ_HANDLER=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +CONFIG_MVMDIO=m +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_MXC_DEBUG_BOARD is not set +# CONFIG_MXC_IRQ_PRIOR is not set +CONFIG_MXM_WMI=m +# CONFIG_MXS_DMA is not set +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_N2=m +CONFIG_NAMESPACES=y +CONFIG_NATIONAL_PHY=y +CONFIG_NATSEMI=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_NE2000=m +CONFIG_NE2K_PCI=m +CONFIG_NE3210=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_NEON=y +CONFIG_NET=y +CONFIG_NET5501=y +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETDEVICES=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_ACCT=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_QUEUE_CT=y +CONFIG_NETFILTER_TPROXY=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_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=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_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=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_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=m +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_NETPOLL=y +# CONFIG_NETPOLL_TRAP is not set +CONFIG_NETPRIO_CGROUP=m +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_ACT_CSUM=m +CONFIG_NET_ACT_GACT=m +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_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_CADENCE=y +CONFIG_NET_CLS=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_FW=m +# CONFIG_NET_CLS_IND is not set +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_DMA=y +# CONFIG_NET_DROP_MONITOR is not set +CONFIG_NET_DSA=m +CONFIG_NET_DSA_MV88E6060=m +CONFIG_NET_DSA_MV88E6123_61_65=m +CONFIG_NET_DSA_MV88E6131=m +CONFIG_NET_DSA_MV88E6XXX=m +CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y +CONFIG_NET_DSA_TAG_DSA=y +CONFIG_NET_DSA_TAG_EDSA=y +CONFIG_NET_DSA_TAG_TRAILER=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_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IPIP=m +CONFIG_NET_IPVTI=m +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_NET_NS=y +CONFIG_NET_PACKET_ENGINE=y +CONFIG_NET_PKTGEN=m +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_NET_SB1000=m +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_FIFO=y +CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_HFSC=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_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 is not set +CONFIG_NET_TULIP=y +CONFIG_NET_VENDOR_3COM=y +CONFIG_NET_VENDOR_8390=y +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_NET_VENDOR_AMD=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_NET_VENDOR_CIRRUS=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_FARADAY=y +CONFIG_NET_VENDOR_FREESCALE=y +CONFIG_NET_VENDOR_FUJITSU=y +CONFIG_NET_VENDOR_HP=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_NVIDIA=y +CONFIG_NET_VENDOR_OKI=y +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NET_VENDOR_RDC=y +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_NET_VENDOR_SILICOM=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_NET_VENDOR_XIRCOM=y +CONFIG_NEW_LEDS=y +CONFIG_NFC=m +CONFIG_NFC_HCI=m +CONFIG_NFC_LLCP=y +CONFIG_NFC_NCI=m +CONFIG_NFC_PN533=m +CONFIG_NFC_SHDLC=y +CONFIG_NFC_WILINK=m +CONFIG_NFSD=m +# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=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_NFTL=m +CONFIG_NFTL_RW=y +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_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=m +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_DEFRAG_IPV6=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_NEEDED=y +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_PROTO_DCCP=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PROTO_SCTP=m +CONFIG_NF_NAT_PROTO_UDPLITE=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NI52=m +CONFIG_NI65=m +CONFIG_NILFS2_FS=m +CONFIG_NIU=m +CONFIG_NL80211_TESTMODE=y +CONFIG_NLATTR=y +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=6 +CONFIG_NODES_SPAN_OTHER_NODES=y +# CONFIG_NOHIGHMEM is not set +CONFIG_NOP_TRACER=y +CONFIG_NORTEL_HERMES=m +CONFIG_NOTIFIER_ERROR_INJECTION=m +CONFIG_NOUVEAU_DEBUG=5 +CONFIG_NOUVEAU_DEBUG_DEFAULT=3 +CONFIG_NOZOMI=m +CONFIG_NO_BOOTMEM=y +CONFIG_NO_HZ=y +CONFIG_NO_IOPORT=y +CONFIG_NS83820=m +CONFIG_NSC_FIR=m +CONFIG_NSC_GPIO=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_NVRAM=m +CONFIG_NV_TCO=m +# CONFIG_N_GSM is not set +CONFIG_N_HDLC=m +CONFIG_OABI_COMPAT=y +# 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_OC_ETM=y +CONFIG_OF=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_DEVICE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_FLATTREE=y +CONFIG_OF_GPIO=y +CONFIG_OF_I2C=y +CONFIG_OF_IOMMU=y +CONFIG_OF_IRQ=y +CONFIG_OF_MDIO=y +CONFIG_OF_MTD=y +CONFIG_OF_NET=y +# CONFIG_OF_SELFTEST is not set +CONFIG_OID_REGISTRY=y +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_OLD_MCOUNT=y +CONFIG_OMAP2_DSS=y +# CONFIG_OMAP2_DSS_DEBUG is not set +# CONFIG_OMAP2_DSS_DEBUGFS is not set +CONFIG_OMAP2_DSS_DPI=y +# CONFIG_OMAP2_DSS_DSI is not set +CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0 +# CONFIG_OMAP2_DSS_RFBI is not set +CONFIG_OMAP2_DSS_SDI=y +CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y +CONFIG_OMAP2_DSS_VENC=y +CONFIG_OMAP2_VRFB=y +CONFIG_OMAP3_EMU=y +# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set +# CONFIG_OMAP3_SDRC_AC_TIMING is not set +CONFIG_OMAP4_DSS_HDMI=y +CONFIG_OMAP4_DSS_HDMI_AUDIO=y +CONFIG_OMAP_32K_TIMER=y +CONFIG_OMAP_32K_TIMER_HZ=128 +# CONFIG_OMAP_BANDGAP is not set +CONFIG_OMAP_DM_TIMER=y +CONFIG_OMAP_INTERCONNECT=y +CONFIG_OMAP_IOMMU=y +# CONFIG_OMAP_IOVMM is not set +CONFIG_OMAP_MUX=y +# CONFIG_OMAP_MUX_DEBUG is not set +CONFIG_OMAP_MUX_WARNINGS=y +CONFIG_OMAP_OCP2SCP=m +CONFIG_OMAP_PACKAGE_CBB=y +CONFIG_OMAP_PACKAGE_CBL=y +CONFIG_OMAP_PACKAGE_CBP=y +CONFIG_OMAP_PACKAGE_CBS=y +CONFIG_OMAP_PACKAGE_CUS=y +CONFIG_OMAP_PM_NOOP=y +# CONFIG_OMAP_REMOTEPROC is not set +CONFIG_OMAP_RESET_CLOCKS=y +CONFIG_OMAP_USB2=y +CONFIG_OMAP_WATCHDOG=m +CONFIG_OMFS_FS=m +CONFIG_OPENVSWITCH=m +CONFIG_OPROFILE=m +# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set +CONFIG_OPROFILE_NMI_TIMER=y +CONFIG_OPTIMIZE_INLINING=y +CONFIG_OPTPROBES=y +CONFIG_ORE=m +CONFIG_ORINOCO_USB=m +CONFIG_OSF_PARTITION=y +CONFIG_OUTER_CACHE=y +CONFIG_OUTER_CACHE_SYNC=y +CONFIG_OVERLAYFS_FS=m +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_PACKET=y +CONFIG_PACKET_DIAG=m +CONFIG_PADATA=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_PANASONIC_LAPTOP=m +CONFIG_PANEL=m +CONFIG_PANEL_ACX565AKM=m +# CONFIG_PANEL_CHANGE_MESSAGE is not set +CONFIG_PANEL_GENERIC_DPI=y +CONFIG_PANEL_LGPHILIPS_LB035Q02=m +CONFIG_PANEL_NEC_NL8048HL11_01B=m +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PICODLP=m +CONFIG_PANEL_PROFILE=5 +CONFIG_PANEL_SHARP_LS037V7DW01=y +CONFIG_PANEL_TFP410=y +CONFIG_PANEL_TPO_TD043MTEA1=y +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANTHERLORD_FF=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_GUEST=y +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 is not set +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_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 is not set +CONFIG_PARPORT_PC_PCMCIA=m +# 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_ARASAN_CF=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 is not set +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_SIS=y +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_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 is not set +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_PERFORMANCE is not set +# CONFIG_PCIEASPM_POWERSAVE is not set +CONFIG_PCIEPORTBUS=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIE_PME=y +CONFIG_PCIPCWATCHDOG=m +CONFIG_PCI_ATMEL=m +CONFIG_PCI_ATS=y +CONFIG_PCI_BIOS=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_DIRECT=y +CONFIG_PCI_DOMAINS=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_IOAPIC=y +CONFIG_PCI_IOV=y +CONFIG_PCI_LABEL=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_MSI=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_SYSCALL is not set +CONFIG_PCI_XEN=y +CONFIG_PCMCIA=m +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_PERCPU_RWSEM=y +CONFIG_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y +CONFIG_PHANTOM=m +CONFIG_PHONET=m +CONFIG_PHYLIB=y +CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_PHYSICAL_START=0x1000000 +# CONFIG_PID_IN_CONTEXTIDR is not set +CONFIG_PID_NS=y +CONFIG_PINCONF=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_EXYNOS=y +# CONFIG_PINCTRL_EXYNOS5440 is not set +CONFIG_PINCTRL_IMX=y +CONFIG_PINCTRL_IMX6Q=y +CONFIG_PINCTRL_SAMSUNG=y +CONFIG_PINCTRL_SINGLE=m +CONFIG_PINMUX=y +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 is not set +# CONFIG_PLAT_SPEAR is not set +CONFIG_PLAT_VERSATILE=y +CONFIG_PLAT_VERSATILE_CLCD=y +CONFIG_PLAT_VERSATILE_SCHED_CLOCK=y +CONFIG_PLIP=m +CONFIG_PLX_HERMES=m +CONFIG_PM=y +CONFIG_PMBUS=m +CONFIG_PMIC_ADP5520=y +CONFIG_PMIC_DA903X=y +CONFIG_PMIC_DA9052=y +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_CLK=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_DEVFREQ=y +CONFIG_PM_NOTIFIER_ERROR_INJECT=m +CONFIG_PM_OPP=y +CONFIG_PM_RUNTIME=y +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PN544_HCI_NFC=m +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_OBJLAYOUT=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_POWER_AVS=y +CONFIG_POWER_AVS_OMAP=y +CONFIG_POWER_AVS_OMAP_CLASS3=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_GPIO=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_PREEMPT_NONE is not set +CONFIG_PREEMPT_NOTIFIERS=y +# CONFIG_PREEMPT_RCU is not set +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_PRINTER=m +CONFIG_PRINTK=y +CONFIG_PRINTK_TIME=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_PRISM2_USB=m +# CONFIG_PRISM54 is not set +CONFIG_PROBE_EVENTS=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_PROC_DEVICETREE=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_PROVIDE_OHCI1394_DMA_INIT is not set +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +# CONFIG_PSTORE_FTRACE is not set +CONFIG_PSTORE_RAM=m +CONFIG_PTP_1588_CLOCK=m +CONFIG_PTP_1588_CLOCK_PCH=m +CONFIG_PUBLIC_KEY_ALGO_RSA=y +CONFIG_PWM=y +CONFIG_PWM_IMX=m +CONFIG_PWM_TIECAP=m +CONFIG_PWM_TIEHRPWM=m +CONFIG_PWM_TIPWMSS=y +CONFIG_PWM_TWL=m +CONFIG_PWM_TWL_LED=m +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m +CONFIG_QLA3XXX=m +CONFIG_QLCNIC=m +CONFIG_QLGE=m +CONFIG_QNX4FS_FS=m +# CONFIG_QNX6FS_DEBUG is not set +CONFIG_QNX6FS_FS=m +CONFIG_QSEMI_PHY=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_R8187SE=m +CONFIG_R8712U=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_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_RAID6_PQ=m +CONFIG_RAID_ATTRS=m +CONFIG_RAPIDIO=y +CONFIG_RAPIDIO_CPS_GEN2=y +CONFIG_RAPIDIO_CPS_XX=y +# 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_TSI500=y +CONFIG_RAPIDIO_TSI568=y +CONFIG_RAPIDIO_TSI57X=y +CONFIG_RAPIDIO_TSI721=y +CONFIG_RATIONAL=y +CONFIG_RAW_DRIVER=m +CONFIG_RBTREE_TEST=m +# CONFIG_RCU_CPU_STALL_INFO is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +# CONFIG_RCU_FANOUT_EXACT is not set +CONFIG_RCU_FANOUT_LEAF=16 +CONFIG_RCU_FAST_NO_HZ=y +# CONFIG_RCU_NOCB_CPU is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_RCU_USER_QS 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_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_LZMA=y +CONFIG_RD_LZO=y +CONFIG_RD_XZ=y +# CONFIG_READABLE_ASM is not set +CONFIG_REALTEK_AUTOPM=y +CONFIG_REALTEK_PHY=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_IRQ=y +CONFIG_REGMAP_SPI=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_88PM8607=y +CONFIG_REGULATOR_AAT2870=m +CONFIG_REGULATOR_AB3100=m +CONFIG_REGULATOR_AD5398=m +CONFIG_REGULATOR_ANATOP=m +CONFIG_REGULATOR_ARIZONA=m +CONFIG_REGULATOR_AS3711=m +CONFIG_REGULATOR_DA903X=m +CONFIG_REGULATOR_DA9052=m +CONFIG_REGULATOR_DA9055=m +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_DUMMY is not set +CONFIG_REGULATOR_FAN53555=m +CONFIG_REGULATOR_GPIO=m +CONFIG_REGULATOR_ISL6271A=m +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_LP3972=m +CONFIG_REGULATOR_LP872X=y +CONFIG_REGULATOR_LP8788=y +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MAX77686=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_PALMAS=m +CONFIG_REGULATOR_PCAP=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_RC5T583=m +CONFIG_REGULATOR_S2MPS11=m +CONFIG_REGULATOR_S5M8767=m +CONFIG_REGULATOR_TPS51632=m +CONFIG_REGULATOR_TPS6105X=m +CONFIG_REGULATOR_TPS62360=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TPS65090=m +CONFIG_REGULATOR_TPS65217=m +CONFIG_REGULATOR_TPS6524X=m +CONFIG_REGULATOR_TPS6586X=m +CONFIG_REGULATOR_TPS65910=m +CONFIG_REGULATOR_TPS65912=m +CONFIG_REGULATOR_TPS80031=m +CONFIG_REGULATOR_TWL4030=y +CONFIG_REGULATOR_USERSPACE_CONSUMER=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=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_RESOURCE_COUNTERS=y +CONFIG_RFD_FTL=m +CONFIG_RFKILL=y +CONFIG_RFKILL_GPIO=m +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_REGULATOR=m +CONFIG_RFS_ACCEL=y +CONFIG_RING_BUFFER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +# CONFIG_RING_BUFFER_BENCHMARK is not set +CONFIG_RIONET=m +CONFIG_RIONET_RX_SIZE=128 +CONFIG_RIONET_TX_SIZE=128 +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_FS=m +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_ROSE=m +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_RPS=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_RT35XX=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RT2800_LIB=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_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT61PCI=m +CONFIG_RT73USB=m +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_BQ32K=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_DA9052=m +CONFIG_RTC_DRV_DA9055=m +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_DS2404=m +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_DS3234=m +CONFIG_RTC_DRV_EM3027=m +CONFIG_RTC_DRV_FM3130=m +# CONFIG_RTC_DRV_IMXDI is not set +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_MAX8907=m +CONFIG_RTC_DRV_MAX8925=m +CONFIG_RTC_DRV_MAX8998=m +CONFIG_RTC_DRV_MC13XXX=m +CONFIG_RTC_DRV_MSM6242=m +# CONFIG_RTC_DRV_MXC is not set +CONFIG_RTC_DRV_OMAP=m +CONFIG_RTC_DRV_PCAP=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_PL030=m +CONFIG_RTC_DRV_PL031=y +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RC5T583=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_SNVS=m +CONFIG_RTC_DRV_STK17TA8=m +# CONFIG_RTC_DRV_TEST is not set +CONFIG_RTC_DRV_TPS6586X=m +CONFIG_RTC_DRV_TPS65910=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_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +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_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL8192CE=m +CONFIG_RTL8192CU=m +CONFIG_RTL8192C_COMMON=m +CONFIG_RTL8192DE=m +CONFIG_RTL8192E=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192U=m +CONFIG_RTL8723AE=m +CONFIG_RTLLIB=m +CONFIG_RTLLIB_CRYPTO_CCMP=m +CONFIG_RTLLIB_CRYPTO_TKIP=m +CONFIG_RTLLIB_CRYPTO_WEP=m +CONFIG_RTLWIFI=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTS5139=m +# CONFIG_RTS5139_DEBUG is not set +CONFIG_RT_GROUP_SCHED=y +CONFIG_RT_MUTEXES=y +# CONFIG_RT_MUTEX_TESTER is not set +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_RXKAD=m +CONFIG_S2IO=m +# CONFIG_SAMPLES is not set +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_SAMSUNG_Q10=m +CONFIG_SATA_ACARD_AHCI=m +CONFIG_SATA_AHCI=m +CONFIG_SATA_AHCI_PLATFORM=m +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_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_SB105X=m +CONFIG_SBC7240_WDT=m +CONFIG_SBC8360_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_SBE_2T3E3=m +CONFIG_SBE_PMCC4_NCOMM=y +CONFIG_SBNI=m +# CONFIG_SBNI_MULTILINE is not set +CONFIG_SBP_TARGET=m +CONFIG_SBYPASS=m +CONFIG_SC1200_WDT=m +CONFIG_SC520_WDT=m +CONFIG_SC92031=m +CONFIG_SCA3000=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_DEBUG=y +CONFIG_SCHED_HRTICK=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_SCHED_TRACER=y +CONFIG_SCSI=y +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_7000FASST=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AHA1740=m +CONFIG_SCSI_AIC79XX=m +CONFIG_SCSI_AIC7XXX=m +# CONFIG_SCSI_AIC7XXX_OLD is not set +CONFIG_SCSI_AIC94XX=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_DC390T=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_DH=m +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_DTC3280=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_FC_ATTRS=m +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_FLASHPOINT=y +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_GENERIC_NCR5380=m +CONFIG_SCSI_GENERIC_NCR5380_MMIO=m +CONFIG_SCSI_GENERIC_NCR53C400=y +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_IMM=m +CONFIG_SCSI_IN2000=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_DUMP is not set +# CONFIG_SCSI_IPR_TRACE is not set +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_LOWLEVEL_PCMCIA=y +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SCSI_MOD=y +CONFIG_SCSI_MPT2SAS=m +# CONFIG_SCSI_MPT2SAS_LOGGING is not set +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT3SAS=m +# CONFIG_SCSI_MPT3SAS_LOGGING is not set +CONFIG_SCSI_MPT3SAS_MAX_SGE=128 +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +# CONFIG_SCSI_MVSAS_TASKLET is not set +CONFIG_SCSI_MVUMI=m +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_PAS16=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_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_SRP=m +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C416=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_T128=m +CONFIG_SCSI_TGT=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_VIRTIO=m +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DBG_MSG is not set +# 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_I2C is not set +CONFIG_SCx200_WDT=m +CONFIG_SDIO_UART=m +CONFIG_SDLA=m +CONFIG_SEALEVEL_4021=m +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +CONFIG_SECURITY_PATH=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=y +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +CONFIG_SECURITY_SMACK=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_YAMA=y +CONFIG_SECURITY_YAMA_STACKED=y +CONFIG_SEEQ8005=m +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_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_ADT7410=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_AK8975=m +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_APDS990X=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ASC7621=m +CONFIG_SENSORS_ATK0110=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_BH1780=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_DA9052_ADC=m +CONFIG_SENSORS_DA9055=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_G760A=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_I5K_AMB=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_INA2XX=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_LM95241=m +CONFIG_SENSORS_LM95245=m +CONFIG_SENSORS_LTC2978=m +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4245=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_MAX34440=m +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_MAX6642=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_MAX8688=m +CONFIG_SENSORS_MC13783_ADC=m +CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_NTC_THERMISTOR=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_PMBUS=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_SCH5636=m +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_SMM665=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_TSL2563=m +CONFIG_SENSORS_TWL4030_MADC=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_ZL6100=m +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_ACCENT=m +CONFIG_SERIAL_8250_BOCA=m +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_CS=m +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_DW=m +# CONFIG_SERIAL_8250_EM is not set +CONFIG_SERIAL_8250_EXAR_ST16C554=m +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_FOURPORT=m +CONFIG_SERIAL_8250_HUB6=m +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_RUNTIME_UARTS=32 +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_AMBA_PL010=m +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_ARC_NR_PORTS=1 +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_IFX6X60 is not set +CONFIG_SERIAL_IMX=y +CONFIG_SERIAL_IMX_CONSOLE=y +CONFIG_SERIAL_IPOCTAL=m +CONFIG_SERIAL_JSM=m +CONFIG_SERIAL_KGDB_NMI=y +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_MAX310X=y +CONFIG_SERIAL_MFD_HSU=m +CONFIG_SERIAL_MRST_MAX3110=m +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_OF_PLATFORM=m +CONFIG_SERIAL_OMAP=y +CONFIG_SERIAL_OMAP_CONSOLE=y +CONFIG_SERIAL_PCH_UART=m +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIAL_SCCNXP_CONSOLE=y +CONFIG_SERIAL_TIMBERDALE=m +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIAL_XILINX_PS_UART=m +CONFIG_SERIO=y +CONFIG_SERIO_ALTERA_PS2=m +CONFIG_SERIO_AMBAKMI=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_MCDI_MON=y +CONFIG_SFC_MTD=y +CONFIG_SFC_SRIOV=y +CONFIG_SFI=y +CONFIG_SGI_IOC4=m +CONFIG_SGI_PARTITION=y +CONFIG_SHMEM=y +CONFIG_SIGMATEL_FIR=m +CONFIG_SIGNALFD=y +CONFIG_SIGNATURE=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_SLABINFO=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_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_SMC911X=m +CONFIG_SMC9194=m +CONFIG_SMC91X=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=y +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMS_SDIO_DRV=m +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_ARM=y +CONFIG_SND_ARMAACI=m +CONFIG_SND_ASIHPI=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AW2=m +CONFIG_SND_AZT1605=m +CONFIG_SND_AZT2316=m +CONFIG_SND_AZT2320=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +CONFIG_SND_BT87X_OVERCLOCK=y +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_DEBUG is not set +CONFIG_SND_DESIGNWARE_I2S=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_FIREWIRE=y +CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_FIREWIRE_SPEAKERS=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_CODEC_ANALOG=y +CONFIG_SND_HDA_CODEC_CA0110=y +CONFIG_SND_HDA_CODEC_CA0132=y +CONFIG_SND_HDA_CODEC_CIRRUS=y +CONFIG_SND_HDA_CODEC_CMEDIA=y +CONFIG_SND_HDA_CODEC_CONEXANT=y +CONFIG_SND_HDA_CODEC_HDMI=y +CONFIG_SND_HDA_CODEC_REALTEK=y +CONFIG_SND_HDA_CODEC_SI3054=y +CONFIG_SND_HDA_CODEC_SIGMATEL=y +CONFIG_SND_HDA_CODEC_VIA=y +CONFIG_SND_HDA_GENERIC=y +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_BEEP_MODE=0 +CONFIG_SND_HDA_INPUT_JACK=y +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_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_HRTIMER=m +CONFIG_SND_HWDEP=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_JAZZ16=m +CONFIG_SND_KCTL_JACK=y +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_MFLD_MACHINE=m +CONFIG_SND_MIA=m +CONFIG_SND_MIRO=m +CONFIG_SND_MIXART=m +# CONFIG_SND_MIXER_OSS is not set +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=y +CONFIG_SND_OMAP_SOC_HDMI=y +CONFIG_SND_OMAP_SOC_MCBSP=y +CONFIG_SND_OMAP_SOC_MCPDM=y +CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m +CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=y +CONFIG_SND_OMAP_SOC_OMAP_HDMI=y +CONFIG_SND_OMAP_SOC_OMAP_TWL4030=y +CONFIG_SND_OMAP_SOC_SDP3430=m +CONFIG_SND_OMAP_SOC_ZOOM2=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL4_LIB=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_OXYGEN=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_PCI=y +CONFIG_SND_PCMCIA=y +# CONFIG_SND_PCM_OSS is not set +CONFIG_SND_PCSP=m +CONFIG_SND_PCXHR=m +CONFIG_SND_PDAUDIOCF=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_RAWMIDI_SEQ=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=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_SB_COMMON=m +CONFIG_SND_SC6000=m +CONFIG_SND_SCS1X=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQUENCER_OSS is not set +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_SIMPLE_CARD=m +CONFIG_SND_SIS7019=m +CONFIG_SND_SOC_88PM860X=m +CONFIG_SND_SOC_AB8500_CODEC=m +CONFIG_SND_SOC_AD1836=m +CONFIG_SND_SOC_AD193X=m +CONFIG_SND_SOC_AD73311=m +CONFIG_SND_SOC_ADAU1373=m +CONFIG_SND_SOC_ADAV80X=m +CONFIG_SND_SOC_ADS117X=m +CONFIG_SND_SOC_AK4104=m +CONFIG_SND_SOC_AK4535=m +CONFIG_SND_SOC_AK4641=m +CONFIG_SND_SOC_AK4642=m +CONFIG_SND_SOC_AK4671=m +CONFIG_SND_SOC_ALC5623=m +CONFIG_SND_SOC_ALC5632=m +CONFIG_SND_SOC_ALL_CODECS=m +CONFIG_SND_SOC_ARIZONA=m +CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_CS4271=m +CONFIG_SND_SOC_CS42L51=m +CONFIG_SND_SOC_CS42L52=m +CONFIG_SND_SOC_CS42L73=m +CONFIG_SND_SOC_CX20442=m +CONFIG_SND_SOC_DA7210=m +CONFIG_SND_SOC_DA732X=m +CONFIG_SND_SOC_DA9055=m +CONFIG_SND_SOC_DFBMCS320=m +CONFIG_SND_SOC_DMAENGINE_PCM=y +CONFIG_SND_SOC_DMIC=y +CONFIG_SND_SOC_FSL_SSI=y +CONFIG_SND_SOC_FSL_UTILS=y +CONFIG_SND_SOC_IMX_AUDMUX=y +CONFIG_SND_SOC_IMX_MC13783=m +CONFIG_SND_SOC_IMX_PCM=y +CONFIG_SND_SOC_IMX_PCM_DMA=y +CONFIG_SND_SOC_IMX_SGTL5000=y +CONFIG_SND_SOC_IMX_SSI=m +CONFIG_SND_SOC_ISABELLE=m +CONFIG_SND_SOC_JZ4740_CODEC=m +CONFIG_SND_SOC_L3=m +CONFIG_SND_SOC_LM4857=m +CONFIG_SND_SOC_LM49453=m +CONFIG_SND_SOC_MAX9768=m +CONFIG_SND_SOC_MAX98088=m +CONFIG_SND_SOC_MAX98090=m +CONFIG_SND_SOC_MAX98095=m +CONFIG_SND_SOC_MAX9850=m +CONFIG_SND_SOC_MAX9877=m +CONFIG_SND_SOC_MC13783=m +CONFIG_SND_SOC_ML26124=m +CONFIG_SND_SOC_OMAP_HDMI_CODEC=y +CONFIG_SND_SOC_PCM3008=m +CONFIG_SND_SOC_RT5631=m +CONFIG_SND_SOC_SN95031=m +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_STA32X=m +CONFIG_SND_SOC_STA529=m +CONFIG_SND_SOC_TLV320AIC23=m +CONFIG_SND_SOC_TLV320AIC26=m +CONFIG_SND_SOC_TLV320AIC32X4=m +CONFIG_SND_SOC_TLV320AIC3X=m +CONFIG_SND_SOC_TLV320DAC33=m +CONFIG_SND_SOC_TPA6130A2=m +CONFIG_SND_SOC_UDA134X=m +CONFIG_SND_SOC_UDA1380=m +CONFIG_SND_SOC_WL1273=m +CONFIG_SND_SOC_WM0010=m +CONFIG_SND_SOC_WM1250_EV1=m +CONFIG_SND_SOC_WM2000=m +CONFIG_SND_SOC_WM2200=m +CONFIG_SND_SOC_WM5100=m +CONFIG_SND_SOC_WM5102=m +CONFIG_SND_SOC_WM5110=m +CONFIG_SND_SOC_WM8350=m +CONFIG_SND_SOC_WM8400=m +CONFIG_SND_SOC_WM8510=m +CONFIG_SND_SOC_WM8523=m +CONFIG_SND_SOC_WM8580=m +CONFIG_SND_SOC_WM8711=m +CONFIG_SND_SOC_WM8727=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_WM8782=m +CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8900=m +CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8904=m +CONFIG_SND_SOC_WM8940=m +CONFIG_SND_SOC_WM8955=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8961=m +CONFIG_SND_SOC_WM8962=m +CONFIG_SND_SOC_WM8971=m +CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8978=m +CONFIG_SND_SOC_WM8983=m +CONFIG_SND_SOC_WM8985=m +CONFIG_SND_SOC_WM8988=m +CONFIG_SND_SOC_WM8990=m +CONFIG_SND_SOC_WM8991=m +CONFIG_SND_SOC_WM8993=m +CONFIG_SND_SOC_WM8994=m +CONFIG_SND_SOC_WM8995=m +CONFIG_SND_SOC_WM8996=m +CONFIG_SND_SOC_WM9081=m +CONFIG_SND_SOC_WM9090=m +CONFIG_SND_SOC_WM_ADSP=m +CONFIG_SND_SOC_WM_HUBS=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_SPI=y +CONFIG_SND_SSCAPE=m +CONFIG_SND_SST_PLATFORM=m +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_TEA575X=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_UA101=m +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_USX2Y=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_YMFPCI=m +CONFIG_SOC_AM33XX=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_OV2640=m +CONFIG_SOC_CAMERA_OV5642=m +CONFIG_SOC_CAMERA_OV6650=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_TW9910=m +CONFIG_SOC_HAS_OMAP2_SDRC=y +CONFIG_SOC_HAS_REALTIME_COUNTER=y +# CONFIG_SOC_IMX53 is not set +CONFIG_SOC_IMX6Q=y +CONFIG_SOC_OMAP3430=y +CONFIG_SOC_OMAP5=y +CONFIG_SOC_TI81XX=y +CONFIG_SOFT_WATCHDOG=m +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_SOLO6X10=m +CONFIG_SONYPI=m +CONFIG_SONYPI_COMPAT=y +CONFIG_SONY_LAPTOP=m +# CONFIG_SOUND_OSS_CORE is not set +# CONFIG_SOUND_PRIME is not set +CONFIG_SP5100_TCO=m +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSE_IRQ=y +# CONFIG_SPARSE_RCU_POINTER is not set +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=y +CONFIG_SPI_ALTERA=m +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_DESIGNWARE=m +CONFIG_SPI_DW_MID_DMA=y +CONFIG_SPI_DW_MMIO=m +CONFIG_SPI_DW_PCI=m +CONFIG_SPI_GPIO=m +CONFIG_SPI_IMX=m +CONFIG_SPI_LM70_LLP=m +CONFIG_SPI_MASTER=y +CONFIG_SPI_OC_TINY=m +CONFIG_SPI_OMAP24XX=m +CONFIG_SPI_PL022=m +CONFIG_SPI_PXA2XX=m +CONFIG_SPI_PXA2XX_DMA=y +CONFIG_SPI_SC18IS602=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +CONFIG_SPI_TOPCLIFF_PCH=m +CONFIG_SPI_XCOMM=m +# CONFIG_SPI_XILINX is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SSB=m +CONFIG_SSB_B43_PCI_BRIDGE=y +CONFIG_SSB_BLOCKIO=y +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_GPIO=y +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_PCIHOST_POSSIBLE=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_SSB_SPROM=y +CONFIG_SSFDC=m +CONFIG_STACKTRACE=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_STACK_TRACER=y +CONFIG_STAGING=y +CONFIG_STAGING_MEDIA=y +CONFIG_STALDRV=y +CONFIG_STE10XP=y +CONFIG_STEP_WISE=y +CONFIG_STE_MODEM_RPROC=m +# CONFIG_STMMAC_CHAINED is not set +# CONFIG_STMMAC_DA is not set +# CONFIG_STMMAC_DEBUG_FS is not set +CONFIG_STMMAC_ETH=m +# CONFIG_STMMAC_PCI is not set +CONFIG_STMMAC_PLATFORM=y +CONFIG_STMMAC_RING=y +CONFIG_STMPE_I2C=y +CONFIG_STMPE_SPI=y +CONFIG_STMP_DEVICE=y +CONFIG_STOP_MACHINE=y +CONFIG_STP=m +CONFIG_STRICT_DEVMEM=y +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_STUB_POULSBO 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_TIMER=y +CONFIG_SUN_PARTITION=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_SWAP=y +CONFIG_SWIOTLB=y +CONFIG_SWIOTLB_XEN=y +CONFIG_SWP_EMULATE=y +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_CS=m +CONFIG_SYNCLINK_GT=m +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_SYSV68_PARTITION=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSV_FS=m +CONFIG_SYS_HYPERVISOR=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +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_WACOM=m +CONFIG_TARGET_CORE=m +CONFIG_TASKSTATS=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_INFINEON=m +CONFIG_TCG_NSC=m +CONFIG_TCG_TIS=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TPM=y +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_VHOST=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +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_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_TEHUTI=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TELCLOCK=m +CONFIG_TEST_KSTRTOX=m +# CONFIG_TEST_LIST_SORT is not set +CONFIG_TEST_POWER=m +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_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +CONFIG_THERMAL_HWMON=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_THRUSTMASTER_FF=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_TICK_CPU_ACCOUNTING=y +CONFIG_TICK_ONESHOT=y +CONFIG_TIFM_7XX1=m +CONFIG_TIFM_CORE=m +CONFIG_TIGON3=m +CONFIG_TIMB_DMA=m +CONFIG_TIMERFD=y +CONFIG_TIMER_STATS=y +CONFIG_TIPC=m +CONFIG_TIPC_PORTS=8191 +CONFIG_TI_ADC081C=m +CONFIG_TI_AM335X_ADC=m +# CONFIG_TI_CPSW is not set +CONFIG_TI_DAC7512=m +CONFIG_TI_DAVINCI_CPDMA=m +CONFIG_TI_DAVINCI_EMAC=m +CONFIG_TI_DAVINCI_MDIO=m +CONFIG_TI_EMIF=m +CONFIG_TI_ST=m +CONFIG_TLAN=m +CONFIG_TMD_HERMES=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_TOIM3232_DONGLE=m +CONFIG_TOPSTAR_LAPTOP=m +# CONFIG_TOSHIBA is not set +CONFIG_TOSHIBA_BT_RFKILL=m +CONFIG_TOSHIBA_FIR=m +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_ATMEL_MXT=m +CONFIG_TOUCHSCREEN_AUO_PIXCIR=m +CONFIG_TOUCHSCREEN_BU21013=m +CONFIG_TOUCHSCREEN_CLEARPAD_TM1217=m +CONFIG_TOUCHSCREEN_CY8CTMG110=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_ELO=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_HAMPSHIRE=m +CONFIG_TOUCHSCREEN_HTCPEN=m +CONFIG_TOUCHSCREEN_ILI210X=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_INTEL_MID=m +CONFIG_TOUCHSCREEN_MAX11801=m +CONFIG_TOUCHSCREEN_MC13783=m +CONFIG_TOUCHSCREEN_MCS5000=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_ST1232=m +CONFIG_TOUCHSCREEN_STMPE=m +CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=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_TSC2005=m +CONFIG_TOUCHSCREEN_TSC2007=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_W90X900=m +CONFIG_TOUCHSCREEN_WACOM_I2C=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WM831X=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TPS6105X=m +CONFIG_TPS65010=m +CONFIG_TPS6507X=m +CONFIG_TRACEPOINTS=y +CONFIG_TRACER_MAX_TRACE=y +CONFIG_TRACE_CLOCK=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_ROUTER=m +CONFIG_TRACE_SINK=m +CONFIG_TRACING=y +CONFIG_TRACING_SUPPORT=y +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +CONFIG_TRANZPORT=m +CONFIG_TREE_RCU=y +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_TRUSTED_KEYS=y +CONFIG_TSL2583=m +CONFIG_TSL2x7x=m +CONFIG_TTPCI_EEPROM=m +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_TWL4030_CORE=y +CONFIG_TWL4030_MADC=m +CONFIG_TWL4030_POWER=y +CONFIG_TWL4030_USB=m +CONFIG_TWL4030_WATCHDOG=m +CONFIG_TWL6030_USB=m +CONFIG_TWL6040_CORE=y +CONFIG_TYPHOON=m +# CONFIG_UACCESS_WITH_MEMCPY is not set +CONFIG_UBIFS_FS=m +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_UCB1400_CORE=m +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=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_NETX=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_SERCOS3=m +CONFIG_ULI526X=m +CONFIG_ULTRA=m +CONFIG_ULTRA32=m +CONFIG_ULTRIX_PARTITION=y +CONFIG_UNIX=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_UNIX_DIAG=m +CONFIG_UNUSED_SYMBOLS=y +CONFIG_UPROBES=y +CONFIG_UPROBE_EVENT=y +CONFIG_USB=y +CONFIG_USBIP_CORE=m +# CONFIG_USBIP_DEBUG is not set +CONFIG_USBIP_HOST=m +CONFIG_USBIP_VHCI_HCD=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_EHCI=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_ATM=m +CONFIG_USB_AUDIO=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_CHIPIDEA_DEBUG is not set +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_COMMON=y +CONFIG_USB_CXACRU=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DSBR=m +# CONFIG_USB_DUMMY_HCD is not set +CONFIG_USB_DWC3=m +# CONFIG_USB_DWC3_DEBUG is not set +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_EG20T=m +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_HCD_OMAP=y +# CONFIG_USB_EHCI_MXC is not set +CONFIG_USB_EHCI_PCI=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EMI26=m +CONFIG_USB_EMI62=m +CONFIG_USB_ENESTORAGE=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_FSL_USB2 is not set +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_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_MUSB_HDRC=m +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +CONFIG_USB_GADGET_TARGET=m +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GL860=m +CONFIG_USB_GOKU=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_USB_GSPCA=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=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_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TOPRO=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_HID=m +CONFIG_USB_HIDDEV=y +CONFIG_USB_HSO=m +CONFIG_USB_HWA_HCD=m +CONFIG_USB_IDMOUSE=m +# CONFIG_USB_IMX is not set +# CONFIG_USB_IMX21_HCD is not set +CONFIG_USB_INVENTRA_DMA=y +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_HCD=m +CONFIG_USB_KAWETH=m +CONFIG_USB_KBD=m +CONFIG_USB_KC2190=y +CONFIG_USB_KEENE=m +CONFIG_USB_LCD=m +CONFIG_USB_LD=m +CONFIG_USB_LED=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_M5602=m +# CONFIG_USB_M66592 is not set +CONFIG_USB_MASS_STORAGE=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_MUSB_AM35X is not set +# CONFIG_USB_MUSB_DSPS is not set +CONFIG_USB_MUSB_HDRC=m +CONFIG_USB_MUSB_OMAP2PLUS=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_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_CX82310_ETH=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=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_ZAURUS=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_OMAP3=y +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +CONFIG_USB_OTG_UTILS=y +# CONFIG_USB_OTG_WHITELIST is not set +CONFIG_USB_OXU210HP_HCD=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_PRINTER=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_USB_R8A66597=m +CONFIG_USB_R8A66597_HCD=m +CONFIG_USB_RCAR_PHY=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_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_FTDI_SIO=m +CONFIG_USB_SERIAL_FUNSOFT=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_HP4X=m +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_MOTOROLA=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_QUATECH2=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIEMENS_MPI=m +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_ZIO=m +CONFIG_USB_SERIAL_ZTE=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_SI470X=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_SN9C102 is not set +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_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_UEAGLEATM=m +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_ULPI=y +CONFIG_USB_USBNET=m +CONFIG_USB_USS720=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_WPAN_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_HCD_DEBUGGING is not set +CONFIG_USB_XHCI_PLATFORM=m +CONFIG_USB_XUSBATM=m +CONFIG_USB_YUREX=m +CONFIG_USB_ZD1201=m +CONFIG_USB_ZERO=m +CONFIG_USB_ZR364XX=m +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_USER_SPACE=y +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_USE_OF=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y +CONFIG_UTS_NS=y +CONFIG_UWB=m +CONFIG_UWB_HWA=m +CONFIG_UWB_I1480U=m +CONFIG_UWB_WHCI=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_VECTORS_BASE=0xffff0000 +CONFIG_VERSION_SIGNATURE="" +CONFIG_VETH=m +CONFIG_VEXPRESS_CONFIG=y +CONFIG_VFAT_FS=y +CONFIG_VFIO=m +CONFIG_VFIO_PCI=m +CONFIG_VFP=y +CONFIG_VFPv3=y +# 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_NET=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_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_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_ADV7180=m +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CAFE_CCIC=m +# CONFIG_VIDEO_CODA is not set +CONFIG_VIDEO_CPIA2=m +CONFIG_VIDEO_CQCAM=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_MPEG=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_DM6446_CCDC=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_FB_IVTV=m +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_OV7640=m +CONFIG_VIDEO_GO7007_SAA7113=m +CONFIG_VIDEO_GO7007_SAA7115=m +CONFIG_VIDEO_GO7007_SONY_TUNER=m +CONFIG_VIDEO_GO7007_TW2804=m +CONFIG_VIDEO_GO7007_TW9903=m +CONFIG_VIDEO_GO7007_UDA1342=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_IR_I2C=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_IVTV_ALSA=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m +CONFIG_VIDEO_MEM2MEM_TESTDEV=m +CONFIG_VIDEO_MEYE=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_MT9V011=m +# CONFIG_VIDEO_MX3 is not set +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_OMAP2_VOUT=m +CONFIG_VIDEO_OMAP2_VOUT_VRFB=y +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_PVRUSB2=m +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_PVRUSB2_DVB=y +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_SAA6588=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_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_SH_MOBILE_CEU=m +CONFIG_VIDEO_SH_MOBILE_CSI2=m +CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_AC97=y +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_TIMBERDALE=m +CONFIG_VIDEO_TLG2300=m +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_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_VIA_CAMERA=m +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_VP27SMPX=m +CONFIG_VIDEO_VPFE_CAPTURE=m +CONFIG_VIDEO_VPSS_SYSTEM=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_W9966=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_WM8775=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_CONSOLE=m +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTUALIZATION=y +CONFIG_VIRT_DRIVERS=y +CONFIG_VIRT_TO_BUS=y +CONFIG_VITESSE_PHY=y +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLSI_FIR=m +CONFIG_VM86=y +CONFIG_VME_BUS=m +CONFIG_VME_CA91CX42=m +CONFIG_VME_PIO2=m +CONFIG_VME_TSI148=m +CONFIG_VME_USER=m +CONFIG_VMIVME_7805=m +# CONFIG_VMSPLIT_1G is not set +# CONFIG_VMSPLIT_2G is not set +CONFIG_VMSPLIT_3G=y +CONFIG_VMWARE_BALLOON=m +CONFIG_VMWARE_PVSCSI=m +CONFIG_VMXNET3=m +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_VORTEX=m +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_VXFS_FS=m +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_VXLAN=m +CONFIG_W1=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_BQ27000=m +CONFIG_W1_SLAVE_DS2408=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_DS2760=m +CONFIG_W1_SLAVE_DS2780=m +CONFIG_W1_SLAVE_DS2781=m +CONFIG_W1_SLAVE_DS28E04=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_THERM=m +CONFIG_W35UND=m +CONFIG_W83627HF_WDT=m +CONFIG_W83697HF_WDT=m +CONFIG_W83697UG_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_WAFER_WDT=m +CONFIG_WAN=y +CONFIG_WANXL=m +CONFIG_WAN_ROUTER_DRIVERS=m +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WD80x3=m +CONFIG_WDT=m +CONFIG_WDTPCI=m +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PRIV=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WIL6210=m +CONFIG_WIL6210_ISR_COR=y +CONFIG_WIMAX=m +CONFIG_WIMAX_DEBUG_LEVEL=8 +CONFIG_WIMAX_GDM72XX=m +CONFIG_WIMAX_GDM72XX_K_MODE=y +CONFIG_WIMAX_GDM72XX_QOS=y +# CONFIG_WIMAX_GDM72XX_SDIO is not set +CONFIG_WIMAX_GDM72XX_USB=y +CONFIG_WIMAX_GDM72XX_USB_PM=y +CONFIG_WIMAX_GDM72XX_WIMAX2=y +CONFIG_WIMAX_I2400M=m +CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 +CONFIG_WIMAX_I2400M_USB=m +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_W5300=m +CONFIG_WL1251=m +CONFIG_WL1251_SDIO=m +CONFIG_WL1251_SPI=m +CONFIG_WL12XX=m +CONFIG_WL12XX_PLATFORM_DATA=y +CONFIG_WL18XX=m +CONFIG_WLAGS49_H2=m +CONFIG_WLAGS49_H25=m +CONFIG_WLAN=y +CONFIG_WLCORE=m +CONFIG_WLCORE_SDIO=m +CONFIG_WLCORE_SPI=m +CONFIG_WL_TI=y +CONFIG_WM831X_BACKUP=m +CONFIG_WM831X_POWER=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WM8350_POWER=m +CONFIG_WM8350_WATCHDOG=m +CONFIG_X25=m +CONFIG_X25_ASY=m +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_X86=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_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_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_DECODER_SELFTEST is not set +CONFIG_X86_DEV_DMA_OPS=y +CONFIG_X86_EXTENDED_PLATFORM=y +# CONFIG_X86_E_POWERSAVER is not set +CONFIG_X86_GENERIC=y +CONFIG_X86_GX_SUSPMOD=m +CONFIG_X86_HT=y +CONFIG_X86_INTEL_MID=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_LOCAL_APIC=y +CONFIG_X86_LONGHAUL=m +CONFIG_X86_LONGRUN=m +CONFIG_X86_MCE=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_INJECT=m +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MDFLD=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_PLATFORM_DEVICES=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_RDC321X is not set +CONFIG_X86_REBOOTFIXUPS=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_RESERVE_LOW=64 +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_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_WANT_INTEL_MID=y +CONFIG_X86_X2APIC=y +CONFIG_X86_X32=y +CONFIG_XEN=y +CONFIG_XENFS=m +CONFIG_XEN_ACPI_PROCESSOR=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_FBDEV_FRONTEND=m +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +CONFIG_XEN_HAVE_PVMMU=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_PRIVILEGED_GUEST=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_SAVE_RESTORE=y +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_SELFBALLOONING=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_TMEM=y +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_STATISTICS is not set +# CONFIG_XFRM_SUB_POLICY is not set +CONFIG_XFRM_USER=m +# CONFIG_XFS_DEBUG is not set +CONFIG_XFS_FS=m +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_RT=y +CONFIG_XO15_EBOOK=m +CONFIG_XOR_BLOCKS=m +CONFIG_XPS=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_ZBOOT_ROM_BSS=0x0 +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZCACHE=y +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +CONFIG_ZEROPLUS_FF=y +CONFIG_ZISOFS=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZNET=m +CONFIG_ZONE_DMA=y +CONFIG_ZRAM=m +# CONFIG_ZRAM_DEBUG is not set +CONFIG_ZSMALLOC=y --- linux-lts-raring-3.8.0.orig/debian.master/config/enforce +++ linux-lts-raring-3.8.0/debian.master/config/enforce @@ -0,0 +1,131 @@ +# +# SECURITY items +# +# Ensure this option is enabled. +value CONFIG_COMPAT_BRK n +value CONFIG_DEVKMEM n +value CONFIG_LSM_MMAP_MIN_ADDR 0 +value CONFIG_SECURITY y +!exists CONFIG_SECURITY_FILE_CAPABILITIES | value CONFIG_SECURITY_FILE_CAPABILITIES y +value CONFIG_SECURITY_SELINUX y +value CONFIG_SECURITY_SMACK y +value CONFIG_SECURITY_YAMA y +value CONFIG_SYN_COOKIES y +value CONFIG_DEFAULT_SECURITY_APPARMOR y +# For architectures which support this option ensure it is enabled. +!exists CONFIG_XEN_ACPI_PROCESSOR | value CONFIG_XEN_ACPI_PROCESSOR y +!exists CONFIG_SECCOMP | value CONFIG_SECCOMP y +!exists CONFIG_HAVE_ARCH_SECCOMP_FILTER | value CONFIG_SECCOMP_FILTER y +!exists CONFIG_CC_STACKPROTECTOR | value CONFIG_CC_STACKPROTECTOR y +!exists CONFIG_DEBUG_RODATA | value CONFIG_DEBUG_RODATA y +!exists CONFIG_DEBUG_SET_MODULE_RONX | value CONFIG_DEBUG_SET_MODULE_RONX y +!exists CONFIG_STRICT_DEVMEM | value CONFIG_STRICT_DEVMEM y +# For architectures which support this option ensure it is disabled. +!exists CONFIG_COMPAT_VDSO | value CONFIG_COMPAT_VDSO n +!exists CONFIG_ACPI_CUSTOM_METHOD | value CONFIG_ACPI_CUSTOM_METHOD n +# Default to 32768 on ARM, 65536 for everything else. +(arch armel armhf &/ value CONFIG_DEFAULT_MMAP_MIN_ADDR 32768) | \ + value CONFIG_DEFAULT_MMAP_MIN_ADDR 65536 + +# upstart requires DEVTMPFS be enabled and mounted by default. +value CONFIG_DEVTMPFS y +value CONFIG_DEVTMPFS_MOUNT y + +# some /dev nodes require POSIX ACLs, like /dev/dsp +value CONFIG_TMPFS_POSIX_ACL y + +# Ramdisk size should be a minimum of 64M +value CONFIG_BLK_DEV_RAM_SIZE 65536 + +# LVM requires dm_mod built in to activate correctly (LP: #560717) +value CONFIG_BLK_DEV_DM y + +# sysfs: ensure all DEPRECATED items are off +!exists CONFIG_SYSFS_DEPRECATED_V2 | value CONFIG_SYSFS_DEPRECATED_V2 n +!exists CONFIG_SYSFS_DEPRECATED | value CONFIG_SYSFS_DEPRECATED n + +# automatically add local version will cause packaging failure +value CONFIG_LOCALVERSION_AUTO n + +# provide framebuffer console form the start +# UbuntuSpec:foundations-m-grub2-boot-framebuffer +value CONFIG_FRAMEBUFFER_CONSOLE y + +# GRUB changes will rely on built in vesafb on x86, +# UbuntuSpec:foundations-m-grub2-boot-framebuffer +#(( arch i386 | arch amd64 ) & value CONFIG_FB_VESA y) | \ +# value CONFIG_FB_VESA m | !exists CONFIG_FB_VESA +value CONFIG_FB_VESA m | !exists CONFIG_FB_VESA + +# Build in uinput module so that it's always available (LP: 584812) +value CONFIG_INPUT_UINPUT y + +# upstart relies on getting all of the kernel arguments +value CONFIG_INIT_PASS_ALL_PARAMS y + +# Enabling CONFIG_IMA is vastly expensive, ensure it is off +value CONFIG_IMA n + +# Ensure CONFIG_IPV6 is y, if this is a module we get a module load for +# every ipv6 packet, bad. +value CONFIG_IPV6 y + +# Ensure ECRYPT_FS is y as it cannot be autoloaded and it has complex +# dependancies which can pull it =m at a whim. +value CONFIG_ECRYPT_FS y + +# Ensure CONFIG_EFI_VARS is y as debian-installer relies on having +# access to efivars when installing in EFI mode. See LP:837332 +value CONFIG_EFI_VARS y | !exists CONFIG_EFI_VARS + +# Ensure CONFIG_VFAT_FS is y for arm, needed to ensure we able to replace +# a kernel with the same version. Also needed for EFI based systems. +(arch armel armhf i386 amd64 &/ value CONFIG_VFAT_FS y) | \ + value CONFIG_VFAT_FS m + +# Ensure CONFIG_GPIO_TWL4030 is y for arm, LP:921934 +(arch armel armhf &/ value CONFIG_GPIO_TWL4030 y) | \ + value CONFIG_GPIO_TWL4030 m | \ + !exists CONFIG_GPIO_TWL4030 + +# Ensure CONFIG_THERM_ADT746X is y for powerpc-smp flavours. +# See LP:923094 +(flavour powerpc-smp &/ value CONFIG_THERM_ADT746X y) | \ + !exists CONFIG_THERM_ADT746X + +# Ensure CONFIG_NVRAM is y for powerpc-smp, LP:942193 +(flavour powerpc-smp powerpc-e500 powerpc-e500mc &/ value CONFIG_NVRAM y) | \ + (flavour powerpc-e500 powerpc-e500mc) | \ + value CONFIG_NVRAM m | \ + !exists CONFIG_NVRAM + +# Ensure CONFIG_STUB_POULSBO is disabled if CONFIG_DRM_PSB is enabled +# See LP:899244 +(!exists CONFIG_DRM_PSB | value CONFIG_DRM_PSB n) | \ +((value CONFIG_DRM_PSB y | value CONFIG_DRM_PSB m) & (value CONFIG_STUB_POULSBO n | !exists CONFIG_STUB_POULSBO)) + +# Ensure CONFIG_B43_BCMA_EXTRA is disabled if CONFIG_BRCMSMAC is enabled. +# Otherwise b43 and brcmsmac will overlap in the hardware they claim to +# support. +(!exists CONFIG_BRCMSMAC | value CONFIG_BRCMSMAC n) | \ +((value CONFIG_BRCMSMAC y | value CONFIG_BRCMSMAC m) & (value CONFIG_B43_BCMA_EXTRA n | !exists CONFIG_B43_BCMA_EXTRA)) + +# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not compatible with upstart +value CONFIG_AUDIT_LOGINUID_IMMUTABLE n + +# CONFIG_I2C_DESIGNWARE_PLATFORM is required by Calxeda Highbank +(flavour generic & arch armhf &/ value CONFIG_I2C_DESIGNWARE_PLATFORM m) | \ +value CONFIG_I2C_DESIGNWARE_PLATFORM m | \ +!exists CONFIG_I2C_DESIGNWARE_PLATFORM + +# Don't use the generic ehci/ohci code on omap, it doesn't work +(flavour generic & arch armhf &/ value CONFIG_USB_EHCI_HCD_PLATFORM n & value CONFIG_USB_OHCI_HCD_PLATFORM n) | \ + !exists MISSING + +# CONFIG_DRM_MGAG200, experimental driver hangs boot on HP Proliant Gen8 +# See LP:1042903 +(!exists CONFIG_DRM_MGAG200 | value CONFIG_DRM_MGAG200 n) + +# CONFIG_PARPORT_PC_FIFO, causes slow/stutter printing on parallel port +# See LP:339752 +(!exists CONFIG_PARPORT_PC_FIFO | value CONFIG_PARPORT_PC_FIFO n) --- linux-lts-raring-3.8.0.orig/debian.master/config/armhf/config.common.armhf +++ linux-lts-raring-3.8.0/debian.master/config/armhf/config.common.armhf @@ -0,0 +1,95 @@ +# +# Config options for config.common.armhf automatically generated by splitconfig.pl +# +CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +CONFIG_ASYNC_TX_DMA=y +CONFIG_BCH=y +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +# CONFIG_DM_RAID45 is not set +CONFIG_EDAC_MM_EDAC=y +# CONFIG_EZX_PCAP is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_BOOT_VESA_SUPPORT is not set +# CONFIG_FB_DDC is not set +# CONFIG_FB_SVGALIB is not set +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_IMAGEBLIT=y +CONFIG_FONTS=y +CONFIG_GPIO_GENERIC=y +CONFIG_GPIO_TWL4030=y +# CONFIG_HAVE_AOUT is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +# CONFIG_HUGETLB_PAGE is not set +CONFIG_HZ=128 +# CONFIG_KSM is not set +# CONFIG_LIS3L02DQ is not set +CONFIG_MFD_TMIO=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_CHAR=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_BCH=y +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_SM_COMMON is not set +# CONFIG_MUSB_PIO_ONLY is not set +CONFIG_NET_CALXEDA_XGMAC=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_NR_CPUS=4 +# CONFIG_PCCARD is not set +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_RCU_FANOUT=32 +CONFIG_REGMAP_MMIO=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_TWL4030=y +CONFIG_SATA_HIGHBANK=y +# CONFIG_SCHED_SMT is not set +CONFIG_SCSI_SPI_ATTRS=m +# CONFIG_SERIAL_8250_DMA is not set +CONFIG_SND=y +CONFIG_SND_COMPRESS_OFFLOAD=y +# CONFIG_SND_EMU10K1_SEQ is not set +# CONFIG_SND_OPL3_LIB_SEQ is not set +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_PCM=y +# CONFIG_SND_SBAWE_SEQ is not set +CONFIG_SND_SOC=y +CONFIG_SND_SOC_I2C_AND_SPI=y +CONFIG_SND_SOC_SGTL5000=y +CONFIG_SND_SOC_TWL4030=y +CONFIG_SND_SOC_TWL6040=y +CONFIG_SND_TIMER=y +CONFIG_SOUND=y +# CONFIG_SPI_PXA2XX_PCI is not set +CONFIG_STANDALONE=y +# CONFIG_USB_ARCH_HAS_XHCI is not set +CONFIG_USB_CHIPIDEA=y +# CONFIG_USB_EHCI_HCD_PLATFORM is not set +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_TUSB6010 is not set +# CONFIG_USB_OHCI_HCD_PLATFORM is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_VFIO_IOMMU_TYPE1 is not set +# CONFIG_VGASTATE is not set +CONFIG_VIRTIO=m +# CONFIG_VIRTIO_BALLOON is not set +# CONFIG_VIRTIO_BLK is not set +# CONFIG_VIRTIO_MMIO is not set +# CONFIG_VIRTIO_NET is not set +# CONFIG_WAN_ROUTER is not set +CONFIG_ZONE_DMA_FLAG=0 --- linux-lts-raring-3.8.0.orig/debian.master/config/armhf/config.flavour.generic +++ linux-lts-raring-3.8.0/debian.master/config/armhf/config.flavour.generic @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# --- linux-lts-raring-3.8.0.orig/debian.master/config/i386/config.flavour.generic +++ linux-lts-raring-3.8.0/debian.master/config/i386/config.flavour.generic @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# --- linux-lts-raring-3.8.0.orig/debian.master/config/i386/config.common.i386 +++ linux-lts-raring-3.8.0/debian.master/config/i386/config.common.i386 @@ -0,0 +1,106 @@ +# +# Config options for config.common.i386 automatically generated by splitconfig.pl +# +# CONFIG_64BIT is not set +CONFIG_ACPI_BLACKLIST_YEAR=2000 +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_AUDIT_ARCH is not set +CONFIG_BCH=m +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DM_RAID45=m +CONFIG_EDAC_MM_EDAC=m +CONFIG_EZX_PCAP=y +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_DDC=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FONTS is not set +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_TWL4030=m +CONFIG_HAVE_AOUT=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HZ=250 +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_KSM=y +CONFIG_LIS3L02DQ=m +# CONFIG_MFD_TMIO is not set +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_CHAR=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_BCH=m +CONFIG_MTD_NAND_ECC=m +CONFIG_MTD_NAND_IDS=m +CONFIG_MTD_SM_COMMON=m +CONFIG_MUSB_PIO_ONLY=y +CONFIG_NET_CALXEDA_XGMAC=m +CONFIG_NOP_USB_XCEIV=m +CONFIG_NR_CPUS=8 +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_PCCARD=m +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_RCU_FANOUT=32 +CONFIG_REGMAP_MMIO=m +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_TWL4030=m +# CONFIG_SATA_HIGHBANK is not set +CONFIG_SCHED_SMT=y +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SND=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_OPL4_LIB_SEQ=m +CONFIG_SND_PCM=m +CONFIG_SND_SBAWE_SEQ=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_SOC_TWL4030=m +CONFIG_SND_SOC_TWL6040=m +CONFIG_SND_TIMER=m +CONFIG_SOUND=m +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_STANDALONE is not set +CONFIG_USB_ARCH_HAS_XHCI=y +CONFIG_USB_CHIPIDEA=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_TUSB6010=m +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_SUSPEND=y +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VGASTATE=m +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_MMIO=m +CONFIG_VIRTIO_NET=y +CONFIG_WAN_ROUTER=m +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_SPEEDSTEP_LIB=y +CONFIG_XEN_MAX_DOMAIN_MEMORY=64 +# CONFIG_ZONE_DMA32 is not set +CONFIG_ZONE_DMA_FLAG=1 --- linux-lts-raring-3.8.0.orig/debian.master/config/amd64/config.common.amd64 +++ linux-lts-raring-3.8.0/debian.master/config/amd64/config.common.amd64 @@ -0,0 +1,107 @@ +# +# Config options for config.common.amd64 automatically generated by splitconfig.pl +# +CONFIG_64BIT=y +CONFIG_ACPI_BLACKLIST_YEAR=0 +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +# CONFIG_ASYNC_TX_DMA is not set +CONFIG_AUDIT_ARCH=y +CONFIG_BCH=m +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_DM_RAID45=m +CONFIG_EDAC_MM_EDAC=m +CONFIG_EZX_PCAP=y +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_DDC=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FONTS is not set +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_TWL4030=m +# CONFIG_HAVE_AOUT is not set +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_HUGETLB_PAGE=y +CONFIG_HZ=250 +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_KSM=y +CONFIG_LIS3L02DQ=m +# CONFIG_MFD_TMIO is not set +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_CHAR=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_BCH=m +CONFIG_MTD_NAND_ECC=m +CONFIG_MTD_NAND_IDS=m +CONFIG_MTD_SM_COMMON=m +CONFIG_MUSB_PIO_ONLY=y +CONFIG_NET_CALXEDA_XGMAC=m +CONFIG_NOP_USB_XCEIV=m +CONFIG_NR_CPUS=256 +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_PCCARD=m +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_RCU_FANOUT=64 +CONFIG_REGMAP_MMIO=m +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_TWL4030=m +# CONFIG_SATA_HIGHBANK is not set +CONFIG_SCHED_SMT=y +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SND=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_OPL3_LIB_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +CONFIG_SND_PCM=m +# CONFIG_SND_SBAWE_SEQ is not set +CONFIG_SND_SOC=m +CONFIG_SND_SOC_I2C_AND_SPI=m +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_SOC_TWL4030=m +CONFIG_SND_SOC_TWL6040=m +CONFIG_SND_TIMER=m +CONFIG_SOUND=m +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_STANDALONE is not set +CONFIG_USB_ARCH_HAS_XHCI=y +CONFIG_USB_CHIPIDEA=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_TUSB6010=m +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_SUSPEND=y +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VGASTATE=m +CONFIG_VIRTIO=y +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_BLK=y +CONFIG_VIRTIO_MMIO=m +CONFIG_VIRTIO_NET=y +CONFIG_WAN_ROUTER=m +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_XEN_MAX_DOMAIN_MEMORY=500 +CONFIG_ZONE_DMA32=y +CONFIG_ZONE_DMA_FLAG=1 --- linux-lts-raring-3.8.0.orig/debian.master/config/amd64/config.flavour.generic +++ linux-lts-raring-3.8.0/debian.master/config/amd64/config.flavour.generic @@ -0,0 +1,3 @@ +# +# Config options for config.flavour.generic automatically generated by splitconfig.pl +# --- linux-lts-raring-3.8.0.orig/debian.master/config/x32/config.flavour.generic +++ linux-lts-raring-3.8.0/debian.master/config/x32/config.flavour.generic @@ -0,0 +1 @@ +# nothing here yet --- linux-lts-raring-3.8.0.orig/debian.master/config/x32/config.common.x32 +++ linux-lts-raring-3.8.0/debian.master/config/x32/config.common.x32 @@ -0,0 +1 @@ +# nothing here yet --- linux-lts-raring-3.8.0.orig/debian.master/config/arm64/config.common.arm64 +++ linux-lts-raring-3.8.0/debian.master/config/arm64/config.common.arm64 @@ -0,0 +1 @@ +# nothing here yet --- linux-lts-raring-3.8.0.orig/debian.master/config/arm64/config.flavour.linaro-SOCFLAVOUR +++ linux-lts-raring-3.8.0/debian.master/config/arm64/config.flavour.linaro-SOCFLAVOUR @@ -0,0 +1 @@ +# nothing here yet --- linux-lts-raring-3.8.0.orig/debian.master/rules.d/armhf.mk +++ linux-lts-raring-3.8.0/debian.master/rules.d/armhf.mk @@ -0,0 +1,16 @@ +human_arch = ARM (hard float) +build_arch = arm +header_arch = arm +defconfig = defconfig +flavours = generic +build_image = zImage +kernel_file = arch/$(build_arch)/boot/zImage +install_file = vmlinuz +no_dumpfile = true + +loader = grub +do_tools = true +do_tools_perf = true + +# Flavour specific configuration. +dtb_files_generic = imx6q-sabrelite.dtb omap3-beagle-xm.dtb omap4-panda.dtb omap4-panda-es.dtb highbank.dtb --- linux-lts-raring-3.8.0.orig/debian.master/rules.d/amd64.mk +++ linux-lts-raring-3.8.0/debian.master/rules.d/amd64.mk @@ -0,0 +1,14 @@ +human_arch = 64 bit x86 +build_arch = x86_64 +header_arch = $(build_arch) +defconfig = defconfig +flavours = generic +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +no_dumpfile = true +uefi_signed = true +do_hyperv = true +do_tools_perf = true +do_extras_package = true --- linux-lts-raring-3.8.0.orig/debian.master/rules.d/i386.mk +++ linux-lts-raring-3.8.0/debian.master/rules.d/i386.mk @@ -0,0 +1,12 @@ +human_arch = 32 bit x86 +build_arch = i386 +header_arch = x86_64 +defconfig = defconfig +flavours = generic +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +no_dumpfile = true +do_tools_perf = true +do_extras_package = true --- linux-lts-raring-3.8.0.orig/debian.master/rules.d/arm64.mk +++ linux-lts-raring-3.8.0/debian.master/rules.d/arm64.mk @@ -0,0 +1,12 @@ +human_arch = ARMv8 +build_arch = arm64 +header_arch = arm64 +defconfig = defconfig +flavours = generic +build_image = zImage +kernel_file = arch/$(build_arch)/boot/zImage +install_file = vmlinuz +no_dumpfile = true + +loader = grub +do_tools = false --- linux-lts-raring-3.8.0.orig/debian.master/rules.d/x32.mk +++ linux-lts-raring-3.8.0/debian.master/rules.d/x32.mk @@ -0,0 +1,12 @@ +human_arch = 64 bit x86 (32 bit userspace) +build_arch = x86_64 +header_arch = $(build_arch) +defconfig = defconfig +flavours = generic +build_image = bzImage +kernel_file = arch/$(build_arch)/boot/bzImage +install_file = vmlinuz +loader = grub +no_dumpfile = true +uefi_signed = true +do_tools_perf = true --- linux-lts-raring-3.8.0.orig/debian.master/rules.d/powerpc.mk +++ linux-lts-raring-3.8.0/debian.master/rules.d/powerpc.mk @@ -0,0 +1,12 @@ +human_arch = PowerPC +build_arch = powerpc +header_arch = $(build_arch) +defconfig = pmac32_defconfig +flavours = +build_image = vmlinux +kernel_file = $(build_image) +install_file = $(build_image) +no_dumpfile = true +do_tools = false +loader = yaboot +do_flavour_image_package = false --- linux-lts-raring-3.8.0.orig/scripts/Makefile.headersinst +++ linux-lts-raring-3.8.0/scripts/Makefile.headersinst @@ -8,7 +8,7 @@ # ========================================================================== # called may set destination dir (when installing to asm/) -_dst := $(or $(destination-y),$(dst),$(obj)) +_dst := $(if $(destination-y),$(destination-y),$(if $(dst),$(dst),$(obj))) # generated header directory gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) @@ -48,13 +48,14 @@ output-files := $(addprefix $(installdir)/, $(all-files)) input-files := $(foreach hdr, $(header-y), \ - $(or \ + $(if $(wildcard $(srcdir)/$(hdr)), \ $(wildcard $(srcdir)/$(hdr)), \ - $(wildcard $(oldsrcdir)/$(hdr)), \ - $(error Missing UAPI file $(srcdir)/$(hdr)) \ + $(if $(wildcard $(oldsrcdir)/$(hdr)), \ + $(wildcard $(oldsrcdir)/$(hdr)), \ + $(error Missing UAPI file $(srcdir)/$(hdr))) \ )) \ $(foreach hdr, $(genhdr-y), \ - $(or \ + $(if $(wildcard $(gendir)/$(hdr)), \ $(wildcard $(gendir)/$(hdr)), \ $(error Missing generated UAPI file $(gendir)/$(hdr)) \ )) --- linux-lts-raring-3.8.0.orig/scripts/kconfig/streamline_config.pl +++ linux-lts-raring-3.8.0/scripts/kconfig/streamline_config.pl @@ -156,7 +156,6 @@ my $state = "NONE"; my $config; - my @kconfigs; my $cont = 0; my $line; @@ -190,7 +189,13 @@ # collect any Kconfig sources if (/^source\s*"(.*)"/) { - $kconfigs[$#kconfigs+1] = $1; + my $kconfig = $1; + # prevent reading twice. + if (!defined($read_kconfigs{$kconfig})) { + $read_kconfigs{$kconfig} = 1; + read_kconfig($kconfig); + } + next; } # configs found @@ -250,14 +255,6 @@ } } close($kinfile); - - # read in any configs that were found. - foreach my $kconfig (@kconfigs) { - if (!defined($read_kconfigs{$kconfig})) { - $read_kconfigs{$kconfig} = 1; - read_kconfig($kconfig); - } - } } if ($kconfig) { --- linux-lts-raring-3.8.0.orig/scripts/kconfig/mconf.c +++ linux-lts-raring-3.8.0/scripts/kconfig/mconf.c @@ -383,6 +383,7 @@ .targets = targets, .keys = keys, }; + struct jump_key *pos, *tmp; res = get_relations_str(sym_arr, &head); dres = show_textbox_ext(_("Search Results"), (char *) @@ -396,6 +397,8 @@ again = true; } str_free(&res); + list_for_each_entry_safe(pos, tmp, &head, entries) + free(pos); } while (again); free(sym_arr); } --- linux-lts-raring-3.8.0.orig/scripts/kconfig/list.h +++ linux-lts-raring-3.8.0/scripts/kconfig/list.h @@ -51,6 +51,19 @@ pos = list_entry(pos->member.next, typeof(*pos), member)) /** + * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @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. + */ +#define list_for_each_entry_safe(pos, n, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** * list_empty - tests whether a list is empty * @head: the list to test. */ --- linux-lts-raring-3.8.0.orig/scripts/kconfig/lkc.h +++ linux-lts-raring-3.8.0/scripts/kconfig/lkc.h @@ -90,7 +90,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-lts-raring-3.8.0.orig/include/xen/interface/physdev.h +++ linux-lts-raring-3.8.0/include/xen/interface/physdev.h @@ -251,6 +251,12 @@ #define PHYSDEVOP_pci_device_remove 26 #define PHYSDEVOP_restore_msi_ext 27 +/* + * Dom0 should use these two to announce MMIO resources assigned to + * MSI-X capable devices won't (prepare) or may (release) change. + */ +#define PHYSDEVOP_prepare_msix 30 +#define PHYSDEVOP_release_msix 31 struct physdev_pci_device { /* IN */ uint16_t seg; --- linux-lts-raring-3.8.0.orig/include/xen/interface/io/netif.h +++ linux-lts-raring-3.8.0/include/xen/interface/io/netif.h @@ -13,6 +13,24 @@ #include /* + * Older implementation of Xen network frontend / backend has an + * implicit dependency on the MAX_SKB_FRAGS as the maximum number of + * ring slots a skb can use. Netfront / netback may not work as + * expected when frontend and backend have different MAX_SKB_FRAGS. + * + * A better approach is to add mechanism for netfront / netback to + * negotiate this value. However we cannot fix all possible + * frontends, so we need to define a value which states the minimum + * slots backend must support. + * + * The minimum value derives from older Linux kernel's MAX_SKB_FRAGS + * (18), which is proved to work with most frontends. Any new backend + * which doesn't negotiate with frontend should expect frontend to + * send a valid packet using slots up to this value. + */ +#define XEN_NETIF_NR_SLOTS_MIN 18 + +/* * Notifications after enqueuing any type of message should be conditional on * the appropriate req_event or rsp_event field in the shared ring. * If the client sends notification for rx requests then it should specify @@ -47,6 +65,7 @@ #define _XEN_NETTXF_extra_info (3) #define XEN_NETTXF_extra_info (1U<<_XEN_NETTXF_extra_info) +#define XEN_NETIF_MAX_TX_SIZE 0xFFFF struct xen_netif_tx_request { grant_ref_t gref; /* Reference to buffer page */ uint16_t offset; /* Offset within buffer page */ --- linux-lts-raring-3.8.0.orig/include/xen/interface/io/blkif.h +++ linux-lts-raring-3.8.0/include/xen/interface/io/blkif.h @@ -138,11 +138,21 @@ uint8_t _pad3; } __attribute__((__packed__)); +struct blkif_request_other { + uint8_t _pad1; + blkif_vdev_t _pad2; /* only for read/write requests */ +#ifdef CONFIG_X86_64 + uint32_t _pad3; /* offsetof(blkif_req..,u.other.id)==8*/ +#endif + uint64_t id; /* private guest value, echoed in resp */ +} __attribute__((__packed__)); + struct blkif_request { uint8_t operation; /* BLKIF_OP_??? */ union { struct blkif_request_rw rw; struct blkif_request_discard discard; + struct blkif_request_other other; } u; } __attribute__((__packed__)); --- linux-lts-raring-3.8.0.orig/include/net/sock.h +++ linux-lts-raring-3.8.0/include/net/sock.h @@ -862,6 +862,18 @@ struct raw_hashinfo; struct module; +/* + * caches using SLAB_DESTROY_BY_RCU should let .next pointer from nulls nodes + * un-modified. Special care is taken when initializing object to zero. + */ +static inline void sk_prot_clear_nulls(struct sock *sk, int size) +{ + if (offsetof(struct sock, sk_node.next) != 0) + memset(sk, 0, offsetof(struct sock, sk_node.next)); + memset(&sk->sk_node.pprev, 0, + size - offsetof(struct sock, sk_node.pprev)); +} + /* Networking protocol blocks we attach to sockets. * socket layer -> transport layer interface * transport -> network interface is defined by struct inet_proto @@ -1037,7 +1049,7 @@ sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks)); } -inline void sk_refcnt_debug_release(const struct sock *sk) +static inline void sk_refcnt_debug_release(const struct sock *sk) { if (atomic_read(&sk->sk_refcnt) != 1) printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n", --- linux-lts-raring-3.8.0.orig/include/net/ndisc.h +++ linux-lts-raring-3.8.0/include/net/ndisc.h @@ -119,7 +119,7 @@ * if RFC 3831 IPv6-over-Fibre Channel is ever implemented it may * also need a pad of 2. */ -static int ndisc_addr_option_pad(unsigned short type) +static inline int ndisc_addr_option_pad(unsigned short type) { switch (type) { case ARPHRD_INFINIBAND: return 2; --- linux-lts-raring-3.8.0.orig/include/net/ip6_fib.h +++ linux-lts-raring-3.8.0/include/net/ip6_fib.h @@ -166,50 +166,35 @@ static inline void rt6_clean_expires(struct rt6_info *rt) { - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from) - dst_release(rt->dst.from); - rt->rt6i_flags &= ~RTF_EXPIRES; - rt->dst.from = NULL; } static inline void rt6_set_expires(struct rt6_info *rt, unsigned long expires) { - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from) - dst_release(rt->dst.from); - - rt->rt6i_flags |= RTF_EXPIRES; rt->dst.expires = expires; + rt->rt6i_flags |= RTF_EXPIRES; } -static inline void rt6_update_expires(struct rt6_info *rt, int timeout) +static inline void rt6_update_expires(struct rt6_info *rt0, int timeout) { - if (!(rt->rt6i_flags & RTF_EXPIRES)) { - if (rt->dst.from) - dst_release(rt->dst.from); - /* dst_set_expires relies on expires == 0 - * if it has not been set previously. - */ - rt->dst.expires = 0; - } + struct rt6_info *rt; - dst_set_expires(&rt->dst, timeout); - rt->rt6i_flags |= RTF_EXPIRES; + for (rt = rt0; rt && !(rt->rt6i_flags & RTF_EXPIRES); + rt = (struct rt6_info *)rt->dst.from); + if (rt && rt != rt0) + rt0->dst.expires = rt->dst.expires; + + dst_set_expires(&rt0->dst, timeout); + rt0->rt6i_flags |= RTF_EXPIRES; } static inline void rt6_set_from(struct rt6_info *rt, struct rt6_info *from) { struct dst_entry *new = (struct dst_entry *) from; - if (!(rt->rt6i_flags & RTF_EXPIRES) && rt->dst.from) { - if (new == rt->dst.from) - return; - dst_release(rt->dst.from); - } - rt->rt6i_flags &= ~RTF_EXPIRES; - rt->dst.from = new; dst_hold(new); + rt->dst.from = new; } static inline void ip6_rt_put(struct rt6_info *rt) --- linux-lts-raring-3.8.0.orig/include/net/scm.h +++ linux-lts-raring-3.8.0/include/net/scm.h @@ -56,8 +56,8 @@ scm->pid = get_pid(pid); scm->cred = cred ? get_cred(cred) : NULL; scm->creds.pid = pid_vnr(pid); - scm->creds.uid = cred ? cred->euid : INVALID_UID; - scm->creds.gid = cred ? cred->egid : INVALID_GID; + scm->creds.uid = cred ? cred->uid : INVALID_UID; + scm->creds.gid = cred ? cred->gid : INVALID_GID; } static __inline__ void scm_destroy_cred(struct scm_cookie *scm) --- linux-lts-raring-3.8.0.orig/include/net/ipv6.h +++ linux-lts-raring-3.8.0/include/net/ipv6.h @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -473,6 +474,17 @@ #endif } +/* more secured version of ipv6_addr_hash() */ +static inline u32 ipv6_addr_jhash(const struct in6_addr *a) +{ + u32 v = (__force u32)a->s6_addr32[0] ^ (__force u32)a->s6_addr32[1]; + + return jhash_3words(v, + (__force u32)a->s6_addr32[2], + (__force u32)a->s6_addr32[3], + ipv6_hash_secret); +} + static inline bool ipv6_addr_loopback(const struct in6_addr *a) { return (a->s6_addr32[0] | a->s6_addr32[1] | --- linux-lts-raring-3.8.0.orig/include/net/inet_frag.h +++ linux-lts-raring-3.8.0/include/net/inet_frag.h @@ -35,6 +35,13 @@ #define INETFRAGS_HASHSZ 64 +/* averaged: + * max_depth = default ipfrag_high_thresh / INETFRAGS_HASHSZ / + * rounded up (SKB_TRUELEN(0) + sizeof(struct ipq or + * struct frag_queue)) + */ +#define INETFRAGS_MAXDEPTH 128 + struct inet_frags { struct hlist_head hash[INETFRAGS_HASHSZ]; rwlock_t lock; @@ -65,6 +72,8 @@ struct inet_frag_queue *inet_frag_find(struct netns_frags *nf, struct inet_frags *f, void *key, unsigned int hash) __releases(&f->lock); +void inet_frag_maybe_warn_overflow(struct inet_frag_queue *q, + const char *prefix); static inline void inet_frag_put(struct inet_frag_queue *q, struct inet_frags *f) { --- linux-lts-raring-3.8.0.orig/include/net/ip_vs.h +++ linux-lts-raring-3.8.0/include/net/ip_vs.h @@ -976,6 +976,7 @@ int sysctl_sync_retries; int sysctl_nat_icmp_send; int sysctl_pmtu_disc; + int sysctl_backup_only; /* ip_vs_lblc */ int sysctl_lblc_expiration; @@ -1067,6 +1068,12 @@ return ipvs->sysctl_pmtu_disc; } +static inline int sysctl_backup_only(struct netns_ipvs *ipvs) +{ + return ipvs->sync_state & IP_VS_STATE_BACKUP && + ipvs->sysctl_backup_only; +} + #else static inline int sysctl_sync_threshold(struct netns_ipvs *ipvs) @@ -1114,6 +1121,11 @@ return 1; } +static inline int sysctl_backup_only(struct netns_ipvs *ipvs) +{ + return 0; +} + #endif /* --- linux-lts-raring-3.8.0.orig/include/net/udp.h +++ linux-lts-raring-3.8.0/include/net/udp.h @@ -181,6 +181,7 @@ extern void udp_err(struct sk_buff *, u32); extern int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len); +extern int udp_push_pending_frames(struct sock *sk); extern void udp_flush_pending_frames(struct sock *sk); extern int udp_rcv(struct sk_buff *skb); extern int udp_ioctl(struct sock *sk, int cmd, unsigned long arg); --- linux-lts-raring-3.8.0.orig/include/net/inet_sock.h +++ linux-lts-raring-3.8.0/include/net/inet_sock.h @@ -203,6 +203,7 @@ extern int inet_sk_rebuild_header(struct sock *sk); extern u32 inet_ehash_secret; +extern u32 ipv6_hash_secret; extern void build_ehash_secret(void); static inline unsigned int inet_ehashfn(struct net *net, --- linux-lts-raring-3.8.0.orig/include/net/inet6_hashtables.h +++ linux-lts-raring-3.8.0/include/net/inet6_hashtables.h @@ -28,16 +28,16 @@ struct inet_hashinfo; -/* I have no idea if this is a good hash for v6 or not. -DaveM */ static inline unsigned int inet6_ehashfn(struct net *net, const struct in6_addr *laddr, const u16 lport, const struct in6_addr *faddr, const __be16 fport) { - u32 ports = (lport ^ (__force u16)fport); + u32 ports = (((u32)lport) << 16) | (__force u32)fport; return jhash_3words((__force u32)laddr->s6_addr32[3], - (__force u32)faddr->s6_addr32[3], - ports, inet_ehash_secret + net_hash_mix(net)); + ipv6_addr_jhash(faddr), + ports, + inet_ehash_secret + net_hash_mix(net)); } static inline int inet6_sk_ehashfn(const struct sock *sk) --- linux-lts-raring-3.8.0.orig/include/net/dst.h +++ linux-lts-raring-3.8.0/include/net/dst.h @@ -36,13 +36,9 @@ struct net_device *dev; struct dst_ops *ops; unsigned long _metrics; - union { - unsigned long expires; - /* point to where the dst_entry copied from */ - struct dst_entry *from; - }; + unsigned long expires; struct dst_entry *path; - void *__pad0; + struct dst_entry *from; #ifdef CONFIG_XFRM struct xfrm_state *xfrm; #else --- linux-lts-raring-3.8.0.orig/include/net/icmp.h +++ linux-lts-raring-3.8.0/include/net/icmp.h @@ -41,6 +41,7 @@ extern void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info); extern int icmp_rcv(struct sk_buff *skb); +extern void icmp_err(struct sk_buff *, u32 info); extern int icmp_init(void); extern void icmp_out_count(struct net *net, unsigned char type); --- linux-lts-raring-3.8.0.orig/include/net/tcp.h +++ linux-lts-raring-3.8.0/include/net/tcp.h @@ -1045,6 +1045,7 @@ if (sysctl_tcp_low_latency || !tp->ucopy.task) return false; + skb_dst_force(skb); __skb_queue_tail(&tp->ucopy.prequeue, skb); tp->ucopy.memory += skb->truesize; if (tp->ucopy.memory > sk->sk_rcvbuf) { --- linux-lts-raring-3.8.0.orig/include/net/ip_fib.h +++ linux-lts-raring-3.8.0/include/net/ip_fib.h @@ -152,18 +152,16 @@ }; #ifdef CONFIG_IP_ROUTE_MULTIPATH - #define FIB_RES_NH(res) ((res).fi->fib_nh[(res).nh_sel]) - -#define FIB_TABLE_HASHSZ 2 - #else /* CONFIG_IP_ROUTE_MULTIPATH */ - #define FIB_RES_NH(res) ((res).fi->fib_nh[0]) +#endif /* CONFIG_IP_ROUTE_MULTIPATH */ +#ifdef CONFIG_IP_MULTIPLE_TABLES #define FIB_TABLE_HASHSZ 256 - -#endif /* CONFIG_IP_ROUTE_MULTIPATH */ +#else +#define FIB_TABLE_HASHSZ 2 +#endif extern __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh); --- linux-lts-raring-3.8.0.orig/include/net/addrconf.h +++ linux-lts-raring-3.8.0/include/net/addrconf.h @@ -61,7 +61,7 @@ extern int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, - struct net_device *dev, + const struct net_device *dev, int strict); #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) @@ -82,6 +82,9 @@ const struct in6_addr *daddr, unsigned int srcprefs, struct in6_addr *saddr); +extern int __ipv6_get_lladdr(struct inet6_dev *idev, + struct in6_addr *addr, + unsigned char banned_flags); extern int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, unsigned char banned_flags); --- linux-lts-raring-3.8.0.orig/include/net/bluetooth/hci.h +++ linux-lts-raring-3.8.0/include/net/bluetooth/hci.h @@ -104,6 +104,7 @@ enum { HCI_SETUP, HCI_AUTO_OFF, + HCI_RFKILLED, HCI_MGMT, HCI_PAIRABLE, HCI_SERVICE_CACHE, --- linux-lts-raring-3.8.0.orig/include/net/bluetooth/mgmt.h +++ linux-lts-raring-3.8.0/include/net/bluetooth/mgmt.h @@ -42,6 +42,7 @@ #define MGMT_STATUS_NOT_POWERED 0x0f #define MGMT_STATUS_CANCELLED 0x10 #define MGMT_STATUS_INVALID_INDEX 0x11 +#define MGMT_STATUS_RFKILLED 0x12 struct mgmt_hdr { __le16 opcode; --- linux-lts-raring-3.8.0.orig/include/net/bluetooth/hci_core.h +++ linux-lts-raring-3.8.0/include/net/bluetooth/hci_core.h @@ -288,6 +288,7 @@ int (*send)(struct sk_buff *skb); void (*notify)(struct hci_dev *hdev, unsigned int evt); int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg); + void (*load_firmware)(struct hci_dev *hdev); }; #define HCI_PHY_HANDLE(handle) (handle & 0xff) @@ -1060,6 +1061,7 @@ int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len); int mgmt_index_added(struct hci_dev *hdev); int mgmt_index_removed(struct hci_dev *hdev); +int mgmt_set_powered_failed(struct hci_dev *hdev, int err); int mgmt_powered(struct hci_dev *hdev, u8 powered); int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable); int mgmt_connectable(struct hci_dev *hdev, u8 connectable); --- linux-lts-raring-3.8.0.orig/include/net/nfc/hci.h +++ linux-lts-raring-3.8.0/include/net/nfc/hci.h @@ -57,8 +57,8 @@ int (*tm_send)(struct nfc_hci_dev *hdev, struct sk_buff *skb); int (*check_presence)(struct nfc_hci_dev *hdev, struct nfc_target *target); - void (*event_received)(struct nfc_hci_dev *hdev, u8 gate, u8 event, - struct sk_buff *skb); + int (*event_received)(struct nfc_hci_dev *hdev, u8 gate, u8 event, + struct sk_buff *skb); }; /* Pipes */ @@ -82,11 +82,23 @@ #define NFC_HCI_MAX_GATES 256 +/* + * These values can be specified by a driver to indicate it requires some + * adaptation of the HCI standard. + * + * NFC_HCI_QUIRK_SHORT_CLEAR - send HCI_ADM_CLEAR_ALL_PIPE cmd with no params + */ +enum { + NFC_HCI_QUIRK_SHORT_CLEAR = 0, +}; + struct nfc_hci_dev { struct nfc_dev *ndev; u32 max_data_link_payload; + bool shutting_down; + struct mutex msg_tx_mutex; struct list_head msg_tx_queue; @@ -129,11 +141,14 @@ u8 *gb; size_t gb_len; + + unsigned long quirks; }; /* hci device allocation */ struct nfc_hci_dev *nfc_hci_allocate_device(struct nfc_hci_ops *ops, struct nfc_hci_init_data *init_data, + unsigned long quirks, u32 protocols, const char *llc_name, int tx_headroom, --- linux-lts-raring-3.8.0.orig/include/net/nfc/nfc.h +++ linux-lts-raring-3.8.0/include/net/nfc/nfc.h @@ -115,6 +115,8 @@ struct timer_list check_pres_timer; struct work_struct check_pres_work; + bool shutting_down; + struct nfc_ops *ops; }; #define to_nfc_dev(_dev) container_of(_dev, struct nfc_dev, dev) --- linux-lts-raring-3.8.0.orig/include/linux/pps_kernel.h +++ linux-lts-raring-3.8.0/include/linux/pps_kernel.h @@ -43,7 +43,7 @@ int event, void *data); /* PPS echo function */ struct module *owner; - struct device *dev; + struct device *dev; /* Parent device for device_create */ }; struct pps_event_time { @@ -69,6 +69,7 @@ wait_queue_head_t queue; /* PPS event queue */ unsigned int id; /* PPS source unique ID */ + void const *lookup_cookie; /* pps_lookup_dev only */ struct cdev cdev; struct device *dev; struct fasync_struct *async_queue; /* fasync method */ @@ -82,16 +83,26 @@ extern struct device_attribute pps_attrs[]; /* + * Internal functions. + * + * These are not actually part of the exported API, but this is a + * convenient header file to put them in. + */ + +extern int pps_register_cdev(struct pps_device *pps); +extern void pps_unregister_cdev(struct pps_device *pps); + +/* * Exported functions */ extern struct pps_device *pps_register_source( struct pps_source_info *info, int default_params); extern void pps_unregister_source(struct pps_device *pps); -extern int pps_register_cdev(struct pps_device *pps); -extern void pps_unregister_cdev(struct pps_device *pps); extern void pps_event(struct pps_device *pps, struct pps_event_time *ts, int event, void *data); +/* Look up a pps device by magic cookie */ +struct pps_device *pps_lookup_dev(void const *cookie); static inline void timespec_to_pps_ktime(struct pps_ktime *kt, struct timespec ts) --- linux-lts-raring-3.8.0.orig/include/linux/tick.h +++ linux-lts-raring-3.8.0/include/linux/tick.h @@ -142,10 +142,4 @@ static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; } # endif /* !NO_HZ */ -# ifdef CONFIG_CPU_IDLE_GOV_MENU -extern void menu_hrtimer_cancel(void); -# else -static inline void menu_hrtimer_cancel(void) {} -# endif /* CONFIG_CPU_IDLE_GOV_MENU */ - #endif --- linux-lts-raring-3.8.0.orig/include/linux/audit.h +++ linux-lts-raring-3.8.0/include/linux/audit.h @@ -120,7 +120,7 @@ unsigned long a1, unsigned long a2, unsigned long a3) { - if (unlikely(!audit_dummy_context())) + if (unlikely(current->audit_context)) __audit_syscall_entry(arch, major, a0, a1, a2, a3); } static inline void audit_syscall_exit(void *pt_regs) --- linux-lts-raring-3.8.0.orig/include/linux/mm_types.h +++ linux-lts-raring-3.8.0/include/linux/mm_types.h @@ -332,6 +332,7 @@ void (*unmap_area) (struct mm_struct *mm, unsigned long addr); #endif unsigned long mmap_base; /* base of mmap area */ + unsigned long mmap_legacy_base; /* base of mmap area in bottom-up allocations */ unsigned long task_size; /* size of task vm space */ unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */ unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */ --- linux-lts-raring-3.8.0.orig/include/linux/ftrace.h +++ linux-lts-raring-3.8.0/include/linux/ftrace.h @@ -394,7 +394,6 @@ size_t cnt, loff_t *ppos); ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf, size_t cnt, loff_t *ppos); -loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int whence); int ftrace_regex_release(struct inode *inode, struct file *file); void __init @@ -567,6 +566,8 @@ ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; } #endif /* CONFIG_DYNAMIC_FTRACE */ +loff_t ftrace_filter_lseek(struct file *file, loff_t offset, int whence); + /* totally disable ftrace - can not re-enable after this */ void ftrace_kill(void); --- linux-lts-raring-3.8.0.orig/include/linux/blkdev.h +++ linux-lts-raring-3.8.0/include/linux/blkdev.h @@ -836,7 +836,7 @@ unsigned int cmd_flags) { if (unlikely(cmd_flags & REQ_DISCARD)) - return q->limits.max_discard_sectors; + return min(q->limits.max_discard_sectors, UINT_MAX >> 9); if (unlikely(cmd_flags & REQ_WRITE_SAME)) return q->limits.max_write_same_sectors; --- linux-lts-raring-3.8.0.orig/include/linux/rmap.h +++ linux-lts-raring-3.8.0/include/linux/rmap.h @@ -123,7 +123,7 @@ down_write(&anon_vma->root->rwsem); } -static inline void anon_vma_unlock(struct anon_vma *anon_vma) +static inline void anon_vma_unlock_write(struct anon_vma *anon_vma) { up_write(&anon_vma->root->rwsem); } --- linux-lts-raring-3.8.0.orig/include/linux/hid.h +++ linux-lts-raring-3.8.0/include/linux/hid.h @@ -392,10 +392,12 @@ struct hid_device *device; /* associated device */ }; +#define HID_MAX_IDS 256 + struct hid_report_enum { unsigned numbered; struct list_head report_list; - struct hid_report *report_id_hash[256]; + struct hid_report *report_id_hash[HID_MAX_IDS]; }; #define HID_REPORT_TYPES 3 @@ -715,6 +717,10 @@ struct hid_device *hid_allocate_device(void); struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); int hid_parse_report(struct hid_device *hid, __u8 *start, unsigned size); +struct hid_report *hid_validate_values(struct hid_device *hid, + unsigned int type, unsigned int id, + unsigned int field_index, + unsigned int report_counts); int hid_open_report(struct hid_device *device); int hid_check_keys_pressed(struct hid_device *hid); int hid_connect(struct hid_device *hid, unsigned int connect_mask); --- linux-lts-raring-3.8.0.orig/include/linux/dmaengine.h +++ linux-lts-raring-3.8.0/include/linux/dmaengine.h @@ -618,6 +618,11 @@ (unsigned long)config); } +static inline bool is_slave_direction(enum dma_transfer_direction direction) +{ + return (direction == DMA_MEM_TO_DEV) || (direction == DMA_DEV_TO_MEM); +} + static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single( struct dma_chan *chan, dma_addr_t buf, size_t len, enum dma_transfer_direction dir, unsigned long flags) --- linux-lts-raring-3.8.0.orig/include/linux/spinlock_up.h +++ linux-lts-raring-3.8.0/include/linux/spinlock_up.h @@ -16,7 +16,10 @@ * In the debug case, 1 means unlocked, 0 means locked. (the values * are inverted, to catch initialization bugs) * - * No atomicity anywhere, we are on UP. + * No atomicity anywhere, we are on UP. However, we still need + * the compiler barriers, because we do not want the compiler to + * move potentially faulting instructions (notably user accesses) + * into the locked sequence, resulting in non-atomic execution. */ #ifdef CONFIG_DEBUG_SPINLOCK @@ -25,6 +28,7 @@ static inline void arch_spin_lock(arch_spinlock_t *lock) { lock->slock = 0; + barrier(); } static inline void @@ -32,6 +36,7 @@ { local_irq_save(flags); lock->slock = 0; + barrier(); } static inline int arch_spin_trylock(arch_spinlock_t *lock) @@ -39,32 +44,34 @@ char oldval = lock->slock; lock->slock = 0; + barrier(); return oldval > 0; } static inline void arch_spin_unlock(arch_spinlock_t *lock) { + barrier(); lock->slock = 1; } /* * Read-write spinlocks. No debug version. */ -#define arch_read_lock(lock) do { (void)(lock); } while (0) -#define arch_write_lock(lock) do { (void)(lock); } while (0) -#define arch_read_trylock(lock) ({ (void)(lock); 1; }) -#define arch_write_trylock(lock) ({ (void)(lock); 1; }) -#define arch_read_unlock(lock) do { (void)(lock); } while (0) -#define arch_write_unlock(lock) do { (void)(lock); } while (0) +#define arch_read_lock(lock) do { barrier(); (void)(lock); } while (0) +#define arch_write_lock(lock) do { barrier(); (void)(lock); } while (0) +#define arch_read_trylock(lock) ({ barrier(); (void)(lock); 1; }) +#define arch_write_trylock(lock) ({ barrier(); (void)(lock); 1; }) +#define arch_read_unlock(lock) do { barrier(); (void)(lock); } while (0) +#define arch_write_unlock(lock) do { barrier(); (void)(lock); } while (0) #else /* DEBUG_SPINLOCK */ #define arch_spin_is_locked(lock) ((void)(lock), 0) /* for sched.c and kernel_lock.c: */ -# define arch_spin_lock(lock) do { (void)(lock); } while (0) -# define arch_spin_lock_flags(lock, flags) do { (void)(lock); } while (0) -# define arch_spin_unlock(lock) do { (void)(lock); } while (0) -# define arch_spin_trylock(lock) ({ (void)(lock); 1; }) +# define arch_spin_lock(lock) do { barrier(); (void)(lock); } while (0) +# define arch_spin_lock_flags(lock, flags) do { barrier(); (void)(lock); } while (0) +# define arch_spin_unlock(lock) do { barrier(); (void)(lock); } while (0) +# define arch_spin_trylock(lock) ({ barrier(); (void)(lock); 1; }) #endif /* DEBUG_SPINLOCK */ #define arch_spin_is_contended(lock) (((void)(lock), 0)) --- linux-lts-raring-3.8.0.orig/include/linux/efi.h +++ linux-lts-raring-3.8.0/include/linux/efi.h @@ -333,6 +333,7 @@ unsigned long count, u64 *max_size, int *reset_type); +typedef efi_status_t efi_query_variable_store_t(u32 attributes, unsigned long size); /* * EFI Configuration Table and GUID definitions @@ -575,9 +576,15 @@ #ifdef CONFIG_X86 extern void efi_late_init(void); extern void efi_free_boot_services(void); +extern efi_status_t efi_query_variable_store(u32 attributes, unsigned long size); #else static inline void efi_late_init(void) {} static inline void efi_free_boot_services(void) {} + +static inline efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) +{ + return EFI_SUCCESS; +} #endif extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr); extern u64 efi_get_iobase (void); @@ -731,7 +738,7 @@ efi_get_variable_t *get_variable; efi_get_next_variable_t *get_next_variable; efi_set_variable_t *set_variable; - efi_query_variable_info_t *query_variable_info; + efi_query_variable_store_t *query_variable_store; }; struct efivars { --- linux-lts-raring-3.8.0.orig/include/linux/dynamic_debug.h +++ linux-lts-raring-3.8.0/include/linux/dynamic_debug.h @@ -45,7 +45,7 @@ int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...); extern int ddebug_dyndbg_module_param_cb(char *param, char *val, - const char *modname); + const char *modname, int all); struct device; @@ -106,7 +106,7 @@ } static inline int ddebug_dyndbg_module_param_cb(char *param, char *val, - const char *modname) + const char *modname, int all) { if (strstr(param, "dyndbg")) { /* avoid pr_warn(), which wants pr_fmt() fully defined */ @@ -114,7 +114,11 @@ "CONFIG_DYNAMIC_DEBUG builds\n"); return 0; /* allow and ignore */ } - return -EINVAL; + + if (!all) + return -EINVAL; + + return 0; } #define dynamic_pr_debug(fmt, ...) \ --- linux-lts-raring-3.8.0.orig/include/linux/libata.h +++ linux-lts-raring-3.8.0/include/linux/libata.h @@ -398,6 +398,7 @@ ATA_HORKAGE_NOSETXFER = (1 << 14), /* skip SETXFER, SATA only */ ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15), /* skip AA */ ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */ + ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */ /* DMA mask for user DMA control: User visible values; DO NOT renumber */ @@ -620,6 +621,9 @@ union acpi_object *gtf_cache; unsigned int gtf_filter; #endif +#ifdef CONFIG_SATA_ZPODD + void *zpodd; +#endif struct device tdev; /* n_sector is CLEAR_BEGIN, read comment above CLEAR_BEGIN */ u64 n_sectors; /* size of device, if ATA */ --- linux-lts-raring-3.8.0.orig/include/linux/fs.h +++ linux-lts-raring-3.8.0/include/linux/fs.h @@ -244,6 +244,12 @@ */ #include +/* + * Maximum number of layers of fs stack. Needs to be limited to + * prevent kernel stack overflow + */ +#define FILESYSTEM_MAX_STACK_DEPTH 2 + /** * enum positive_aop_returns - aop return codes with specific semantics * @@ -1320,6 +1326,11 @@ /* Being remounted read-only */ int s_readonly_remount; + + /* + * Indicates how deep in a filesystem stack this SB is + */ + int s_stack_depth; }; /* superblock cache pruning functions */ @@ -1573,6 +1584,7 @@ int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned open_flag, umode_t create_mode, int *opened); + int (*dentry_open)(struct dentry *, struct file *, const struct cred *); } ____cacheline_aligned; ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, @@ -2005,6 +2017,7 @@ extern struct file *filp_open(const char *, int, umode_t); extern struct file *file_open_root(struct dentry *, struct vfsmount *, const char *, int); +extern int vfs_open(const struct path *, struct file *, const struct cred *); extern struct file * dentry_open(const struct path *, int, const struct cred *); extern int filp_close(struct file *, fl_owner_t id); @@ -2210,6 +2223,7 @@ #endif extern int notify_change(struct dentry *, struct iattr *); extern int inode_permission(struct inode *, int); +extern int __inode_permission(struct inode *, int); extern int generic_permission(struct inode *, int); static inline bool execute_ok(struct inode *inode) @@ -2551,6 +2565,7 @@ extern int inode_newsize_ok(const struct inode *, loff_t offset); extern void setattr_copy(struct inode *inode, const struct iattr *attr); +extern int update_time(struct inode *, struct timespec *, int); extern int file_update_time(struct file *file); extern int generic_show_options(struct seq_file *m, struct dentry *root); --- linux-lts-raring-3.8.0.orig/include/linux/quota.h +++ linux-lts-raring-3.8.0/include/linux/quota.h @@ -405,6 +405,7 @@ #define INIT_QUOTA_MODULE_NAMES {\ {QFMT_VFS_OLD, "quota_v1"},\ {QFMT_VFS_V0, "quota_v2"},\ + {QFMT_VFS_V1, "quota_v2"},\ {0, NULL}} #endif /* _QUOTA_ */ --- linux-lts-raring-3.8.0.orig/include/linux/ipv6.h +++ linux-lts-raring-3.8.0/include/linux/ipv6.h @@ -89,7 +89,7 @@ struct inet6_skb_parm { int iif; - __u16 ra; + __be16 ra; __u16 hop; __u16 dst0; __u16 srcrt; @@ -105,6 +105,8 @@ #define IP6SKB_XFRM_TRANSFORMED 1 #define IP6SKB_FORWARDED 2 #define IP6SKB_REROUTED 4 +#define IP6SKB_ROUTERALERT 8 +#define IP6SKB_FRAGMENTED 16 }; #define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb)) --- linux-lts-raring-3.8.0.orig/include/linux/preempt.h +++ linux-lts-raring-3.8.0/include/linux/preempt.h @@ -93,14 +93,20 @@ #else /* !CONFIG_PREEMPT_COUNT */ -#define preempt_disable() do { } while (0) -#define sched_preempt_enable_no_resched() do { } while (0) -#define preempt_enable_no_resched() do { } while (0) -#define preempt_enable() do { } while (0) +/* + * Even if we don't have any preemption, we need preempt disable/enable + * to be barriers, so that we don't have things like get_user/put_user + * that can cause faults and scheduling migrate into our preempt-protected + * region. + */ +#define preempt_disable() barrier() +#define sched_preempt_enable_no_resched() barrier() +#define preempt_enable_no_resched() barrier() +#define preempt_enable() barrier() -#define preempt_disable_notrace() do { } while (0) -#define preempt_enable_no_resched_notrace() do { } while (0) -#define preempt_enable_notrace() do { } while (0) +#define preempt_disable_notrace() barrier() +#define preempt_enable_no_resched_notrace() barrier() +#define preempt_enable_notrace() barrier() #endif /* CONFIG_PREEMPT_COUNT */ --- linux-lts-raring-3.8.0.orig/include/linux/kvm_host.h +++ linux-lts-raring-3.8.0/include/linux/kvm_host.h @@ -511,7 +511,7 @@ int kvm_write_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc, void *data, unsigned long len); int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc, - gpa_t gpa); + gpa_t gpa, unsigned long len); int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len); int kvm_clear_guest(struct kvm *kvm, gpa_t gpa, unsigned long len); struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); --- linux-lts-raring-3.8.0.orig/include/linux/netfilter_ipv6.h +++ linux-lts-raring-3.8.0/include/linux/netfilter_ipv6.h @@ -17,6 +17,22 @@ extern int ipv6_netfilter_init(void); extern void ipv6_netfilter_fini(void); + +/* + * Hook functions for ipv6 to allow xt_* modules to be built-in even + * if IPv6 is a module. + */ +struct nf_ipv6_ops { + int (*chk_addr)(struct net *net, const struct in6_addr *addr, + const struct net_device *dev, int strict); +}; + +extern const struct nf_ipv6_ops __rcu *nf_ipv6_ops; +static inline const struct nf_ipv6_ops *nf_get_ipv6_ops(void) +{ + return rcu_dereference(nf_ipv6_ops); +} + #else /* CONFIG_NETFILTER */ static inline int ipv6_netfilter_init(void) { return 0; } static inline void ipv6_netfilter_fini(void) { return; } --- linux-lts-raring-3.8.0.orig/include/linux/fs_struct.h +++ linux-lts-raring-3.8.0/include/linux/fs_struct.h @@ -50,4 +50,6 @@ spin_unlock(&fs->lock); } +extern bool current_chrooted(void); + #endif /* _LINUX_FS_STRUCT_H */ --- linux-lts-raring-3.8.0.orig/include/linux/balloon_compaction.h +++ linux-lts-raring-3.8.0/include/linux/balloon_compaction.h @@ -159,6 +159,26 @@ } /* + * isolated_balloon_page - identify an isolated balloon page on private + * compaction/migration page lists. + * + * After a compaction thread isolates a balloon page for migration, it raises + * the page refcount to prevent concurrent compaction threads from re-isolating + * the same page. For that reason putback_movable_pages(), or other routines + * that need to identify isolated balloon pages on private pagelists, cannot + * rely on balloon_page_movable() to accomplish the task. + */ +static inline bool isolated_balloon_page(struct page *page) +{ + /* Already isolated balloon pages, by default, have a raised refcount */ + if (page_flags_cleared(page) && !page_mapped(page) && + page_count(page) >= 2) + return __is_movable_balloon_page(page); + + return false; +} + +/* * balloon_page_insert - insert a page into the balloon's page list and make * the page->mapping assignment accordingly. * @page : page to be assigned as a 'balloon page' @@ -242,6 +262,11 @@ { return false; } + +static inline bool isolated_balloon_page(struct page *page) +{ + return false; +} static inline bool balloon_page_isolate(struct page *page) { --- linux-lts-raring-3.8.0.orig/include/linux/moduleparam.h +++ linux-lts-raring-3.8.0/include/linux/moduleparam.h @@ -318,8 +318,8 @@ unsigned num, s16 level_min, s16 level_max, - int (*unknown)(char *param, char *val, - const char *doing)); + int (*handle_arg)(char *param, char *val, + const char *doing, int known)); /* Called by module remove. */ #ifdef CONFIG_SYSFS --- linux-lts-raring-3.8.0.orig/include/linux/syscalls.h +++ linux-lts-raring-3.8.0/include/linux/syscalls.h @@ -839,9 +839,14 @@ asmlinkage long sys_clone(unsigned long, unsigned long, int __user *, int, int __user *); #else +#ifdef CONFIG_CLONE_BACKWARDS3 +asmlinkage long sys_clone(unsigned long, unsigned long, int, int __user *, + int __user *, int); +#else asmlinkage long sys_clone(unsigned long, unsigned long, int __user *, int __user *, int); #endif +#endif asmlinkage long sys_execve(const char __user *filename, const char __user *const __user *argv, --- linux-lts-raring-3.8.0.orig/include/linux/page-flags.h +++ linux-lts-raring-3.8.0/include/linux/page-flags.h @@ -109,6 +109,7 @@ #ifdef CONFIG_TRANSPARENT_HUGEPAGE PG_compound_lock, #endif + PG_readaheadunused, /* user oriented readahead as yet unused*/ __NR_PAGEFLAGS, /* Filesystems */ @@ -232,6 +233,8 @@ PAGEFLAG(Reclaim, reclaim) TESTCLEARFLAG(Reclaim, reclaim) PAGEFLAG(Readahead, reclaim) /* Reminder to do async read-ahead */ +PAGEFLAG(ReadaheadUnused, readaheadunused) + #ifdef CONFIG_HIGHMEM /* * Must use a macro here due to header dependency issues. page_zone() is not --- linux-lts-raring-3.8.0.orig/include/linux/cpu.h +++ linux-lts-raring-3.8.0/include/linux/cpu.h @@ -175,6 +175,8 @@ extern void get_online_cpus(void); extern void put_online_cpus(void); +extern void cpu_hotplug_disable(void); +extern void cpu_hotplug_enable(void); #define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) #define register_hotcpu_notifier(nb) register_cpu_notifier(nb) #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) @@ -198,6 +200,8 @@ #define get_online_cpus() do { } while (0) #define put_online_cpus() do { } while (0) +#define cpu_hotplug_disable() do { } while (0) +#define cpu_hotplug_enable() do { } while (0) #define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) /* These aren't inline functions due to a GCC bug. */ #define register_hotcpu_notifier(nb) ({ (void)(nb); 0; }) --- linux-lts-raring-3.8.0.orig/include/linux/ata.h +++ linux-lts-raring-3.8.0/include/linux/ata.h @@ -954,7 +954,7 @@ } } -static inline bool atapi_command_packet_set(const u16 *dev_id) +static inline int atapi_command_packet_set(const u16 *dev_id) { return (dev_id[ATA_ID_CONFIG] >> 8) & 0x1f; } --- linux-lts-raring-3.8.0.orig/include/linux/swapops.h +++ linux-lts-raring-3.8.0/include/linux/swapops.h @@ -137,6 +137,7 @@ extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, unsigned long address); +extern void migration_entry_wait_huge(struct mm_struct *mm, pte_t *pte); #else #define make_migration_entry(page, write) swp_entry(0, 0) @@ -148,6 +149,8 @@ static inline void make_migration_entry_read(swp_entry_t *entryp) { } static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, unsigned long address) { } +static inline void migration_entry_wait_huge(struct mm_struct *mm, + pte_t *pte) { } static inline int is_write_migration_entry(swp_entry_t entry) { return 0; --- linux-lts-raring-3.8.0.orig/include/linux/skbuff.h +++ linux-lts-raring-3.8.0/include/linux/skbuff.h @@ -491,7 +491,7 @@ union { __u32 mark; __u32 dropcount; - __u32 avail_size; + __u32 reserved_tailroom; }; sk_buff_data_t inner_transport_header; @@ -1269,11 +1269,13 @@ * do not lose pfmemalloc information as the pages would not be * allocated using __GFP_MEMALLOC. */ - if (page->pfmemalloc && !page->mapping) - skb->pfmemalloc = true; frag->page.p = page; frag->page_offset = off; skb_frag_size_set(frag, size); + + page = compound_head(page); + if (page->pfmemalloc && !page->mapping) + skb->pfmemalloc = true; } /** @@ -1428,7 +1430,10 @@ */ static inline int skb_availroom(const struct sk_buff *skb) { - return skb_is_nonlinear(skb) ? 0 : skb->avail_size - skb->len; + if (skb_is_nonlinear(skb)) + return 0; + + return skb->end - skb->tail - skb->reserved_tailroom; } /** @@ -2592,6 +2597,13 @@ #endif } +static inline void nf_reset_trace(struct sk_buff *skb) +{ +#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) + skb->nf_trace = 0; +#endif +} + /* Note: This doesn't put any conntrack and bridge info in dst. */ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src) { --- linux-lts-raring-3.8.0.orig/include/linux/bio.h +++ linux-lts-raring-3.8.0/include/linux/bio.h @@ -136,16 +136,27 @@ #define bio_io_error(bio) bio_endio((bio), -EIO) /* - * drivers should not use the __ version unless they _really_ want to - * run through the entire bio and not just pending pieces + * drivers should not use the __ version unless they _really_ know what + * they're doing */ #define __bio_for_each_segment(bvl, bio, i, start_idx) \ for (bvl = bio_iovec_idx((bio), (start_idx)), i = (start_idx); \ i < (bio)->bi_vcnt; \ bvl++, i++) +/* + * drivers should _never_ use the all version - the bio may have been split + * before it got to the driver and the driver won't own all of it + */ +#define bio_for_each_segment_all(bvl, bio, i) \ + for (i = 0; \ + bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \ + i++) + #define bio_for_each_segment(bvl, bio, i) \ - __bio_for_each_segment(bvl, bio, i, (bio)->bi_idx) + for (i = (bio)->bi_idx; \ + bvl = bio_iovec_idx((bio), (i)), i < (bio)->bi_vcnt; \ + i++) /* * get a reference to a bio, so it won't disappear. the intended use is --- linux-lts-raring-3.8.0.orig/include/linux/huge_mm.h +++ linux-lts-raring-3.8.0/include/linux/huge_mm.h @@ -113,7 +113,7 @@ do { \ pmd_t *____pmd = (__pmd); \ anon_vma_lock_write(__anon_vma); \ - anon_vma_unlock(__anon_vma); \ + anon_vma_unlock_write(__anon_vma); \ BUG_ON(pmd_trans_splitting(*____pmd) || \ pmd_trans_huge(*____pmd)); \ } while (0) --- linux-lts-raring-3.8.0.orig/include/linux/signal.h +++ linux-lts-raring-3.8.0/include/linux/signal.h @@ -388,4 +388,12 @@ int restore_altstack(const stack_t __user *); int __save_altstack(stack_t __user *, unsigned long); +#define save_altstack_ex(uss, sp) do { \ + stack_t __user *__uss = uss; \ + struct task_struct *t = current; \ + put_user_ex((void __user *)t->sas_ss_sp, &__uss->ss_sp); \ + put_user_ex(sas_ss_flags(sp), &__uss->ss_flags); \ + put_user_ex(t->sas_ss_size, &__uss->ss_size); \ +} while (0); + #endif /* _LINUX_SIGNAL_H */ --- linux-lts-raring-3.8.0.orig/include/linux/mount.h +++ linux-lts-raring-3.8.0/include/linux/mount.h @@ -47,6 +47,8 @@ #define MNT_INTERNAL 0x4000 +#define MNT_LOCK_READONLY 0x400000 + struct vfsmount { struct dentry *mnt_root; /* root of the mounted tree */ struct super_block *mnt_sb; /* pointer to superblock */ @@ -66,6 +68,9 @@ extern void mnt_unpin(struct vfsmount *mnt); extern int __mnt_is_readonly(struct vfsmount *mnt); +struct path; +extern struct vfsmount *clone_private_mount(struct path *path); + struct file_system_type; extern struct vfsmount *vfs_kern_mount(struct file_system_type *type, int flags, const char *name, --- linux-lts-raring-3.8.0.orig/include/linux/if_vlan.h +++ linux-lts-raring-3.8.0/include/linux/if_vlan.h @@ -331,7 +331,7 @@ struct vlan_hdr *vhdr) { __be16 proto; - unsigned char *rawp; + unsigned short *rawp; /* * Was a VLAN packet, grab the encapsulated protocol, which the layer @@ -344,8 +344,8 @@ return; } - rawp = skb->data; - if (*(unsigned short *) rawp == 0xFFFF) + rawp = (unsigned short *)(vhdr + 1); + if (*rawp == 0xFFFF) /* * This is a magic hack to spot IPX packets. Older Novell * breaks the protocol design and runs IPX over 802.3 without --- linux-lts-raring-3.8.0.orig/include/linux/llist.h +++ linux-lts-raring-3.8.0/include/linux/llist.h @@ -125,31 +125,6 @@ (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member)) /** - * llist_for_each_entry_safe - iterate safely against remove over some entries - * of lock-less list of given type. - * @pos: the type * to use as a loop cursor. - * @n: another type * to use as a temporary storage. - * @node: the fist entry of deleted list entries. - * @member: the name of the llist_node with the struct. - * - * In general, some entries of the lock-less list can be traversed - * safely only after being removed from list, so start with an entry - * instead of list head. This variant allows removal of entries - * as we iterate. - * - * If being used on entries deleted from lock-less list directly, the - * traverse order is from the newest to the oldest added entry. If - * you want to traverse from the oldest to the newest, you must - * reverse the order by yourself before traversing. - */ -#define llist_for_each_entry_safe(pos, n, node, member) \ - for ((pos) = llist_entry((node), typeof(*(pos)), member), \ - (n) = (pos)->member.next; \ - &(pos)->member != NULL; \ - (pos) = llist_entry(n, typeof(*(pos)), member), \ - (n) = (&(pos)->member != NULL) ? (pos)->member.next : NULL) - -/** * llist_empty - tests whether a lock-less list is empty * @head: the list to test * --- linux-lts-raring-3.8.0.orig/include/linux/ipc_namespace.h +++ linux-lts-raring-3.8.0/include/linux/ipc_namespace.h @@ -43,8 +43,8 @@ size_t shm_ctlmax; size_t shm_ctlall; + unsigned long shm_tot; int shm_ctlmni; - int shm_tot; /* * Defines whether IPC_RMID is forced for _all_ shm segments regardless * of shmctl() --- linux-lts-raring-3.8.0.orig/include/linux/cgroup.h +++ linux-lts-raring-3.8.0/include/linux/cgroup.h @@ -303,9 +303,6 @@ /* CFTYPE_* flags */ unsigned int flags; - /* file xattrs */ - struct simple_xattrs xattrs; - int (*open)(struct inode *inode, struct file *file); ssize_t (*read)(struct cgroup *cgrp, struct cftype *cft, struct file *file, @@ -571,7 +568,7 @@ * * If a subsystem synchronizes against the parent in its ->css_online() and * before starting iterating, and synchronizes against @pos on each - * iteration, any descendant cgroup which finished ->css_offline() is + * iteration, any descendant cgroup which finished ->css_online() is * guaranteed to be visible in the future iterations. * * In other words, the following guarantees that a descendant can't escape --- linux-lts-raring-3.8.0.orig/include/linux/serial_8250.h +++ linux-lts-raring-3.8.0/include/linux/serial_8250.h @@ -59,6 +59,8 @@ PLAT8250_DEV_SM501, }; +struct uart_8250_dma; + /* * This should be used by drivers which want to register * their own 8250 ports without registering their own @@ -91,6 +93,8 @@ #define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA unsigned char msr_saved_flags; + struct uart_8250_dma *dma; + /* 8250 specific callbacks */ int (*dl_read)(struct uart_8250_port *); void (*dl_write)(struct uart_8250_port *, int); --- linux-lts-raring-3.8.0.orig/include/linux/mailbox.h +++ linux-lts-raring-3.8.0/include/linux/mailbox.h @@ -0,0 +1,17 @@ +/* + * 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. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +int pl320_ipc_transmit(u32 *data); +int pl320_ipc_register_notifier(struct notifier_block *nb); +int pl320_ipc_unregister_notifier(struct notifier_block *nb); --- linux-lts-raring-3.8.0.orig/include/linux/kvm_types.h +++ linux-lts-raring-3.8.0/include/linux/kvm_types.h @@ -71,6 +71,7 @@ u64 generation; gpa_t gpa; unsigned long hva; + unsigned long len; struct kvm_memory_slot *memslot; }; --- linux-lts-raring-3.8.0.orig/include/linux/syslog.h +++ linux-lts-raring-3.8.0/include/linux/syslog.h @@ -44,8 +44,8 @@ /* Return size of the log buffer */ #define SYSLOG_ACTION_SIZE_BUFFER 10 -#define SYSLOG_FROM_CALL 0 -#define SYSLOG_FROM_FILE 1 +#define SYSLOG_FROM_READER 0 +#define SYSLOG_FROM_PROC 1 int do_syslog(int type, char __user *buf, int count, bool from_file); --- linux-lts-raring-3.8.0.orig/include/linux/rculist.h +++ linux-lts-raring-3.8.0/include/linux/rculist.h @@ -267,8 +267,9 @@ */ #define list_first_or_null_rcu(ptr, type, member) \ ({struct list_head *__ptr = (ptr); \ - struct list_head __rcu *__next = list_next_rcu(__ptr); \ - likely(__ptr != __next) ? container_of(__next, type, member) : NULL; \ + struct list_head *__next = ACCESS_ONCE(__ptr->next); \ + likely(__ptr != __next) ? \ + list_entry_rcu(__next, type, member) : NULL; \ }) /** --- linux-lts-raring-3.8.0.orig/include/linux/pci_ids.h +++ linux-lts-raring-3.8.0/include/linux/pci_ids.h @@ -1604,6 +1604,7 @@ #define PCI_SUBDEVICE_ID_KEYSPAN_SX2 0x5334 #define PCI_VENDOR_ID_MARVELL 0x11ab +#define PCI_VENDOR_ID_MARVELL_EXT 0x1b4b #define PCI_DEVICE_ID_MARVELL_GT64111 0x4146 #define PCI_DEVICE_ID_MARVELL_GT64260 0x6430 #define PCI_DEVICE_ID_MARVELL_MV64360 0x6460 @@ -1868,8 +1869,23 @@ #define PCI_VENDOR_ID_QUATECH 0x135C #define PCI_DEVICE_ID_QUATECH_QSC100 0x0010 #define PCI_DEVICE_ID_QUATECH_DSC100 0x0020 +#define PCI_DEVICE_ID_QUATECH_DSC200 0x0030 +#define PCI_DEVICE_ID_QUATECH_QSC200 0x0040 #define PCI_DEVICE_ID_QUATECH_ESC100D 0x0050 #define PCI_DEVICE_ID_QUATECH_ESC100M 0x0060 +#define PCI_DEVICE_ID_QUATECH_QSCP100 0x0120 +#define PCI_DEVICE_ID_QUATECH_DSCP100 0x0130 +#define PCI_DEVICE_ID_QUATECH_QSCP200 0x0140 +#define PCI_DEVICE_ID_QUATECH_DSCP200 0x0150 +#define PCI_DEVICE_ID_QUATECH_QSCLP100 0x0170 +#define PCI_DEVICE_ID_QUATECH_DSCLP100 0x0180 +#define PCI_DEVICE_ID_QUATECH_DSC100E 0x0181 +#define PCI_DEVICE_ID_QUATECH_SSCLP100 0x0190 +#define PCI_DEVICE_ID_QUATECH_QSCLP200 0x01A0 +#define PCI_DEVICE_ID_QUATECH_DSCLP200 0x01B0 +#define PCI_DEVICE_ID_QUATECH_DSC200E 0x01B1 +#define PCI_DEVICE_ID_QUATECH_SSCLP200 0x01C0 +#define PCI_DEVICE_ID_QUATECH_ESCLP100 0x01E0 #define PCI_DEVICE_ID_QUATECH_SPPXP_100 0x0278 #define PCI_VENDOR_ID_SEALEVEL 0x135e --- linux-lts-raring-3.8.0.orig/include/linux/firewire.h +++ linux-lts-raring-3.8.0/include/linux/firewire.h @@ -434,6 +434,7 @@ int type; int channel; int speed; + bool drop_overflow_headers; size_t header_size; union { fw_iso_callback_t sc; --- linux-lts-raring-3.8.0.orig/include/linux/pstore.h +++ linux-lts-raring-3.8.0/include/linux/pstore.h @@ -68,12 +68,18 @@ #ifdef CONFIG_PSTORE extern int pstore_register(struct pstore_info *); +extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason); #else static inline int pstore_register(struct pstore_info *psi) { return -ENODEV; } +static inline bool +pstore_cannot_block_path(enum kmsg_dump_reason reason) +{ + return false; +} #endif #endif /*_LINUX_PSTORE_H*/ --- linux-lts-raring-3.8.0.orig/include/linux/thermal.h +++ linux-lts-raring-3.8.0/include/linux/thermal.h @@ -44,7 +44,7 @@ /* Adding event notification support elements */ #define THERMAL_GENL_FAMILY_NAME "thermal_event" #define THERMAL_GENL_VERSION 0x01 -#define THERMAL_GENL_MCAST_GROUP_NAME "thermal_mc_group" +#define THERMAL_GENL_MCAST_GROUP_NAME "thermal_mc_grp" /* Default Thermal Governor */ #if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE) --- linux-lts-raring-3.8.0.orig/include/linux/rculist_nulls.h +++ linux-lts-raring-3.8.0/include/linux/rculist_nulls.h @@ -105,9 +105,14 @@ * @head: the head for your list. * @member: the name of the hlist_nulls_node within the struct. * + * The barrier() is needed to make sure compiler doesn't cache first element [1], + * as this loop can be restarted [2] + * [1] Documentation/atomic_ops.txt around line 114 + * [2] Documentation/RCU/rculist_nulls.txt around line 146 */ #define hlist_nulls_for_each_entry_rcu(tpos, pos, head, member) \ - for (pos = rcu_dereference_raw(hlist_nulls_first_rcu(head)); \ + for (({barrier();}), \ + pos = rcu_dereference_raw(hlist_nulls_first_rcu(head)); \ (!is_a_nulls(pos)) && \ ({ tpos = hlist_nulls_entry(pos, typeof(*tpos), member); 1; }); \ pos = rcu_dereference_raw(hlist_nulls_next_rcu(pos))) --- linux-lts-raring-3.8.0.orig/include/linux/splice.h +++ linux-lts-raring-3.8.0/include/linux/splice.h @@ -91,4 +91,10 @@ extern void spd_release_page(struct splice_pipe_desc *, unsigned int); extern const struct pipe_buf_operations page_cache_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-lts-raring-3.8.0.orig/include/linux/nbd.h +++ linux-lts-raring-3.8.0/include/linux/nbd.h @@ -41,6 +41,7 @@ u64 bytesize; pid_t pid; /* pid of nbd-client, if attached */ int xmit_timeout; + int disconnect; /* a disconnect has been requested by user */ }; #endif --- linux-lts-raring-3.8.0.orig/include/linux/perf_event.h +++ linux-lts-raring-3.8.0/include/linux/perf_event.h @@ -794,6 +794,12 @@ static inline void perf_event_task_tick(void) { } #endif +#if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL) +extern void perf_restore_debug_store(void); +#else +static inline void perf_restore_debug_store(void) { } +#endif + #define perf_output_put(handle, x) perf_output_copy((handle), &(x), sizeof(x)) /* --- linux-lts-raring-3.8.0.orig/include/linux/mm.h +++ linux-lts-raring-3.8.0/include/linux/mm.h @@ -1623,6 +1623,8 @@ unsigned long pfn); int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); +int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len); + struct page *follow_page(struct vm_area_struct *, unsigned long address, unsigned int foll_flags); --- linux-lts-raring-3.8.0.orig/include/linux/jbd2.h +++ linux-lts-raring-3.8.0/include/linux/jbd2.h @@ -498,6 +498,7 @@ T_COMMIT, T_COMMIT_DFLUSH, T_COMMIT_JFLUSH, + T_COMMIT_CALLBACK, T_FINISHED } t_state; @@ -1210,6 +1211,7 @@ int jbd2_journal_start_commit(journal_t *journal, tid_t *tid); int jbd2_journal_force_commit_nested(journal_t *journal); int jbd2_log_wait_commit(journal_t *journal, tid_t tid); +int jbd2_complete_transaction(journal_t *journal, tid_t tid); int jbd2_log_do_checkpoint(journal_t *journal); int jbd2_trans_will_send_data_barrier(journal_t *journal, tid_t tid); --- linux-lts-raring-3.8.0.orig/include/linux/wait.h +++ linux-lts-raring-3.8.0/include/linux/wait.h @@ -217,6 +217,8 @@ if (!ret) \ break; \ } \ + if (!ret && (condition)) \ + ret = 1; \ finish_wait(&wq, &__wait); \ } while (0) @@ -233,8 +235,9 @@ * wake_up() has to be called after changing any variable that could * change the result of the wait condition. * - * The function returns 0 if the @timeout elapsed, and the remaining - * jiffies if the condition evaluated to true before the timeout elapsed. + * The function returns 0 if the @timeout elapsed, or the remaining + * jiffies (at least 1) if the @condition evaluated to %true before + * the @timeout elapsed. */ #define wait_event_timeout(wq, condition, timeout) \ ({ \ @@ -302,6 +305,8 @@ ret = -ERESTARTSYS; \ break; \ } \ + if (!ret && (condition)) \ + ret = 1; \ finish_wait(&wq, &__wait); \ } while (0) @@ -318,9 +323,10 @@ * wake_up() has to be called after changing any variable that could * change the result of the wait condition. * - * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it - * was interrupted by a signal, and the remaining jiffies otherwise - * if the condition evaluated to true before the timeout elapsed. + * Returns: + * 0 if the @timeout elapsed, -%ERESTARTSYS if it was interrupted by + * a signal, or the remaining jiffies (at least 1) if the @condition + * evaluated to %true before the @timeout elapsed. */ #define wait_event_interruptible_timeout(wq, condition, timeout) \ ({ \ @@ -713,6 +719,63 @@ __ret; \ }) +#define __wait_event_interruptible_lock_irq_timeout(wq, condition, \ + lock, ret) \ +do { \ + DEFINE_WAIT(__wait); \ + \ + for (;;) { \ + prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ + if (condition) \ + break; \ + if (signal_pending(current)) { \ + ret = -ERESTARTSYS; \ + break; \ + } \ + spin_unlock_irq(&lock); \ + ret = schedule_timeout(ret); \ + spin_lock_irq(&lock); \ + if (!ret) \ + break; \ + } \ + finish_wait(&wq, &__wait); \ +} while (0) + +/** + * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets true or a timeout elapses. + * The condition is checked under the lock. This is expected + * to be called with the lock taken. + * @wq: the waitqueue to wait on + * @condition: a C expression for the event to wait for + * @lock: a locked spinlock_t, which will be released before schedule() + * and reacquired afterwards. + * @timeout: timeout, in jiffies + * + * The process is put to sleep (TASK_INTERRUPTIBLE) until the + * @condition evaluates to true or signal is received. The @condition is + * checked each time the waitqueue @wq is woken up. + * + * wake_up() has to be called after changing any variable that could + * change the result of the wait condition. + * + * This is supposed to be called while holding the lock. The lock is + * dropped before going to sleep and is reacquired afterwards. + * + * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it + * was interrupted by a signal, and the remaining jiffies otherwise + * if the condition evaluated to true before the timeout elapsed. + */ +#define wait_event_interruptible_lock_irq_timeout(wq, condition, lock, \ + timeout) \ +({ \ + int __ret = timeout; \ + \ + if (!(condition)) \ + __wait_event_interruptible_lock_irq_timeout( \ + wq, condition, lock, __ret); \ + __ret; \ +}) + /* * These are the old interfaces to sleep waiting for an event. --- linux-lts-raring-3.8.0.orig/include/linux/pxa2xx_ssp.h +++ linux-lts-raring-3.8.0/include/linux/pxa2xx_ssp.h @@ -155,6 +155,14 @@ #define SSACD_ACDS(x) ((x) << 0) /* Audio clock divider select */ #define SSACD_SCDX8 (1 << 7) /* SYSCLK division ratio select */ +/* LPSS SSP */ +#define SSITF 0x44 /* TX FIFO trigger level */ +#define SSITF_TxLoThresh(x) (((x) - 1) << 8) +#define SSITF_TxHiThresh(x) ((x) - 1) + +#define SSIRF 0x48 /* RX FIFO trigger level */ +#define SSIRF_RxThresh(x) ((x) - 1) + enum pxa_ssp_type { SSP_UNDEFINED = 0, PXA25x_SSP, /* pxa 210, 250, 255, 26x */ @@ -164,6 +172,7 @@ PXA168_SSP, PXA910_SSP, CE4100_SSP, + LPSS_SSP, }; struct ssp_device { @@ -206,6 +215,15 @@ return __raw_readl(dev->mmio_base + reg); } +#ifdef CONFIG_ARCH_PXA struct ssp_device *pxa_ssp_request(int port, const char *label); void pxa_ssp_free(struct ssp_device *); +#else +static inline struct ssp_device *pxa_ssp_request(int port, const char *label) +{ + return NULL; +} +static inline void pxa_ssp_free(struct ssp_device *ssp) {} +#endif + #endif --- linux-lts-raring-3.8.0.orig/include/linux/netdevice.h +++ linux-lts-raring-3.8.0/include/linux/netdevice.h @@ -208,9 +208,9 @@ #define NETDEV_HW_ADDR_T_SLAVE 3 #define NETDEV_HW_ADDR_T_UNICAST 4 #define NETDEV_HW_ADDR_T_MULTICAST 5 - bool synced; bool global_use; int refcount; + int synced; struct rcu_head rcu_head; }; @@ -1277,6 +1277,7 @@ struct pcpu_lstats __percpu *lstats; /* loopback stats */ struct pcpu_tstats __percpu *tstats; /* tunnel stats */ struct pcpu_dstats __percpu *dstats; /* dummy stats */ + struct pcpu_vstats __percpu *vstats; /* veth stats */ }; /* GARP */ struct garp_port __rcu *garp_port; --- linux-lts-raring-3.8.0.orig/include/linux/kref.h +++ linux-lts-raring-3.8.0/include/linux/kref.h @@ -19,6 +19,7 @@ #include #include #include +#include struct kref { atomic_t refcount; @@ -95,6 +96,38 @@ return kref_sub(kref, 1, release); } +/** + * kref_put_spinlock_irqsave - decrement refcount for object. + * @kref: object. + * @release: pointer to the function that will clean up the object when the + * last reference to the object is released. + * This pointer is required, and it is not acceptable to pass kfree + * in as this function. + * @lock: lock to take in release case + * + * Behaves identical to kref_put with one exception. If the reference count + * drops to zero, the lock will be taken atomically wrt dropping the reference + * count. The release function has to call spin_unlock() without _irqrestore. + */ +static inline int kref_put_spinlock_irqsave(struct kref *kref, + void (*release)(struct kref *kref), + spinlock_t *lock) +{ + unsigned long flags; + + WARN_ON(release == NULL); + if (atomic_add_unless(&kref->refcount, -1, 1)) + return 0; + spin_lock_irqsave(lock, flags); + if (atomic_dec_and_test(&kref->refcount)) { + release(kref); + local_irq_restore(flags); + return 1; + } + spin_unlock_irqrestore(lock, flags); + return 0; +} + static inline int kref_put_mutex(struct kref *kref, void (*release)(struct kref *kref), struct mutex *lock) --- linux-lts-raring-3.8.0.orig/include/linux/regmap.h +++ linux-lts-raring-3.8.0/include/linux/regmap.h @@ -15,6 +15,8 @@ #include #include +#include +#include struct module; struct device; --- linux-lts-raring-3.8.0.orig/include/linux/libps2.h +++ linux-lts-raring-3.8.0/include/linux/libps2.h @@ -36,7 +36,7 @@ wait_queue_head_t wait; unsigned long flags; - unsigned char cmdbuf[6]; + unsigned char cmdbuf[8]; unsigned char cmdcnt; unsigned char nak; }; --- linux-lts-raring-3.8.0.orig/include/linux/user_namespace.h +++ linux-lts-raring-3.8.0/include/linux/user_namespace.h @@ -23,9 +23,12 @@ struct uid_gid_map projid_map; struct kref kref; struct user_namespace *parent; + int level; kuid_t owner; kgid_t group; unsigned int proc_inum; + bool may_mount_sysfs; + bool may_mount_proc; }; extern struct user_namespace init_user_ns; @@ -82,4 +85,6 @@ #endif +void update_mnt_policy(struct user_namespace *userns); + #endif /* _LINUX_USER_H */ --- linux-lts-raring-3.8.0.orig/include/linux/compat.h +++ linux-lts-raring-3.8.0/include/linux/compat.h @@ -648,6 +648,13 @@ int compat_restore_altstack(const compat_stack_t __user *uss); int __compat_save_altstack(compat_stack_t __user *, unsigned long); +#define compat_save_altstack_ex(uss, sp) do { \ + compat_stack_t __user *__uss = uss; \ + struct task_struct *t = current; \ + put_user_ex(ptr_to_compat((void __user *)t->sas_ss_sp), &__uss->ss_sp); \ + put_user_ex(sas_ss_flags(sp), &__uss->ss_flags); \ + put_user_ex(t->sas_ss_size, &__uss->ss_size); \ +} while (0); #endif asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, --- linux-lts-raring-3.8.0.orig/include/linux/device-mapper.h +++ linux-lts-raring-3.8.0/include/linux/device-mapper.h @@ -68,8 +68,8 @@ typedef int (*dm_preresume_fn) (struct dm_target *ti); typedef void (*dm_resume_fn) (struct dm_target *ti); -typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type, - unsigned status_flags, char *result, unsigned maxlen); +typedef void (*dm_status_fn) (struct dm_target *ti, status_type_t status_type, + unsigned status_flags, char *result, unsigned maxlen); typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv); --- linux-lts-raring-3.8.0.orig/include/linux/console.h +++ linux-lts-raring-3.8.0/include/linux/console.h @@ -77,7 +77,9 @@ int con_is_bound(const struct consw *csw); int register_con_driver(const struct consw *csw, int first, int last); int unregister_con_driver(const struct consw *csw); +int do_unregister_con_driver(const struct consw *csw); int take_over_console(const struct consw *sw, int first, int last, int deflt); +int do_take_over_console(const struct consw *sw, int first, int last, int deflt); void give_up_console(const struct consw *sw); #ifdef CONFIG_HW_CONSOLE int con_debug_enter(struct vc_data *vc); --- linux-lts-raring-3.8.0.orig/include/linux/serial_core.h +++ linux-lts-raring-3.8.0/include/linux/serial_core.h @@ -136,7 +136,6 @@ #define UPIO_MEM32 (3) #define UPIO_AU (4) /* Au1x00 type IO */ #define UPIO_TSI (5) /* Tsi108/109 type IO */ -#define UPIO_RM9000 (6) /* RM9000 type IO */ unsigned int read_status_mask; /* driver specific */ unsigned int ignore_status_mask; /* driver specific */ --- linux-lts-raring-3.8.0.orig/include/linux/sched.h +++ linux-lts-raring-3.8.0/include/linux/sched.h @@ -51,6 +51,7 @@ #include #include #include +#include #include @@ -163,9 +164,10 @@ #define TASK_DEAD 64 #define TASK_WAKEKILL 128 #define TASK_WAKING 256 -#define TASK_STATE_MAX 512 +#define TASK_PARKED 512 +#define TASK_STATE_MAX 1024 -#define TASK_STATE_TO_CHAR_STR "RSDTtZXxKW" +#define TASK_STATE_TO_CHAR_STR "RSDTtZXxKWP" extern char ___assert_task_state[1 - 2*!!( sizeof(TASK_STATE_TO_CHAR_STR)-1 != ilog2(TASK_STATE_MAX)+1)]; @@ -1815,6 +1817,7 @@ #define PF_FROZEN 0x00010000 /* frozen for system suspend */ #define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */ #define PF_KSWAPD 0x00040000 /* I am kswapd */ +#define PF_MEMALLOC_NOIO 0x00080000 /* Allocating memory without IO involved */ #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */ #define PF_KTHREAD 0x00200000 /* I am a kernel thread */ #define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */ @@ -1852,6 +1855,26 @@ #define tsk_used_math(p) ((p)->flags & PF_USED_MATH) #define used_math() tsk_used_math(current) +/* __GFP_IO isn't allowed if PF_MEMALLOC_NOIO is set in current->flags */ +static inline gfp_t memalloc_noio_flags(gfp_t flags) +{ + if (unlikely(current->flags & PF_MEMALLOC_NOIO)) + flags &= ~__GFP_IO; + return flags; +} + +static inline unsigned int memalloc_noio_save(void) +{ + unsigned int flags = current->flags & PF_MEMALLOC_NOIO; + current->flags |= PF_MEMALLOC_NOIO; + return flags; +} + +static inline void memalloc_noio_restore(unsigned int flags) +{ + current->flags = (current->flags & ~PF_MEMALLOC_NOIO) | flags; +} + /* * task->jobctl flags */ @@ -2485,27 +2508,18 @@ * * Lock the threadgroup @tsk belongs to. No new task is allowed to enter * and member tasks aren't allowed to exit (as indicated by PF_EXITING) or - * perform exec. This is useful for cases where the threadgroup needs to - * stay stable across blockable operations. + * change ->group_leader/pid. This is useful for cases where the threadgroup + * needs to stay stable across blockable operations. * * fork and exit paths explicitly call threadgroup_change_{begin|end}() for * synchronization. While held, no new task will be added to threadgroup * and no existing live task will have its PF_EXITING set. * - * During exec, a task goes and puts its thread group through unusual - * changes. After de-threading, exclusive access is assumed to resources - * which are usually shared by tasks in the same group - e.g. sighand may - * be replaced with a new one. Also, the exec'ing task takes over group - * leader role including its pid. Exclude these changes while locked by - * grabbing cred_guard_mutex which is used to synchronize exec path. + * de_thread() does threadgroup_change_{begin|end}() when a non-leader + * sub-thread becomes a new leader. */ static inline void threadgroup_lock(struct task_struct *tsk) { - /* - * exec uses exit for de-threading nesting group_rwsem inside - * cred_guard_mutex. Grab cred_guard_mutex first. - */ - mutex_lock(&tsk->signal->cred_guard_mutex); down_write(&tsk->signal->group_rwsem); } @@ -2518,7 +2532,6 @@ static inline void threadgroup_unlock(struct task_struct *tsk) { up_write(&tsk->signal->group_rwsem); - mutex_unlock(&tsk->signal->cred_guard_mutex); } #else static inline void threadgroup_change_begin(struct task_struct *tsk) {} --- linux-lts-raring-3.8.0.orig/include/linux/capability.h +++ linux-lts-raring-3.8.0/include/linux/capability.h @@ -35,6 +35,7 @@ #define _KERNEL_CAP_T_SIZE (sizeof(kernel_cap_t)) +struct file; struct inode; struct dentry; struct user_namespace; @@ -211,6 +212,7 @@ extern bool ns_capable(struct user_namespace *ns, int cap); extern bool nsown_capable(int cap); extern bool inode_capable(const struct inode *inode, int cap); +extern bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap); /* audit system wants to get cap info from files as well */ extern int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data *cpu_caps); --- linux-lts-raring-3.8.0.orig/include/linux/hugetlb.h +++ linux-lts-raring-3.8.0/include/linux/hugetlb.h @@ -185,8 +185,7 @@ extern const struct file_operations hugetlbfs_file_operations; extern const struct vm_operations_struct hugetlb_vm_ops; -struct file *hugetlb_file_setup(const char *name, unsigned long addr, - size_t size, vm_flags_t acct, +struct file *hugetlb_file_setup(const char *name, size_t size, vm_flags_t acct, struct user_struct **user, int creat_flags, int page_size_log); @@ -205,8 +204,8 @@ #define is_file_hugepages(file) 0 static inline struct file * -hugetlb_file_setup(const char *name, unsigned long addr, size_t size, - vm_flags_t acctflag, struct user_struct **user, int creat_flags, +hugetlb_file_setup(const char *name, size_t size, vm_flags_t acctflag, + struct user_struct **user, int creat_flags, int page_size_log) { return ERR_PTR(-ENOSYS); @@ -284,6 +283,13 @@ return hstate_inode(f->f_dentry->d_inode); } +static inline struct hstate *hstate_sizelog(int page_size_log) +{ + if (!page_size_log) + return &default_hstate; + return size_to_hstate(1 << page_size_log); +} + static inline struct hstate *hstate_vma(struct vm_area_struct *vma) { return hstate_file(vma->vm_file); @@ -348,11 +354,23 @@ return h - hstates; } -#else +pgoff_t __basepage_index(struct page *page); + +/* Return page->index in PAGE_SIZE units */ +static inline pgoff_t basepage_index(struct page *page) +{ + if (!PageCompound(page)) + return page->index; + + return __basepage_index(page); +} + +#else /* CONFIG_HUGETLB_PAGE */ struct hstate {}; #define alloc_huge_page_node(h, nid) NULL #define alloc_bootmem_huge_page(h) NULL #define hstate_file(f) NULL +#define hstate_sizelog(s) NULL #define hstate_vma(v) NULL #define hstate_inode(i) NULL #define huge_page_size(h) PAGE_SIZE @@ -367,6 +385,11 @@ } #define hstate_index_to_shift(index) 0 #define hstate_index(h) 0 -#endif + +static inline pgoff_t basepage_index(struct page *page) +{ + return page->index; +} +#endif /* CONFIG_HUGETLB_PAGE */ #endif /* _LINUX_HUGETLB_H */ --- linux-lts-raring-3.8.0.orig/include/linux/socket.h +++ linux-lts-raring-3.8.0/include/linux/socket.h @@ -319,6 +319,9 @@ struct timespec; +/* The __sys_...msg variants allow MSG_CMSG_COMPAT */ +extern long __sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); +extern long __sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags); extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, --- linux-lts-raring-3.8.0.orig/include/linux/dw_dmac.h +++ linux-lts-raring-3.8.0/include/linux/dw_dmac.h @@ -15,6 +15,26 @@ #include /** + * struct dw_dma_slave - Controller-specific information about a slave + * + * @dma_dev: required DMA master device. Depricated. + * @bus_id: name of this device channel, not just a device name since + * devices may have more than one channel e.g. "foo_tx" + * @cfg_hi: Platform-specific initializer for the CFG_HI register + * @cfg_lo: Platform-specific initializer for the CFG_LO register + * @src_master: src master for transfers on allocated channel. + * @dst_master: dest master for transfers on allocated channel. + */ +struct dw_dma_slave { + struct device *dma_dev; + const char *bus_id; + u32 cfg_hi; + u32 cfg_lo; + u8 src_master; + u8 dst_master; +}; + +/** * struct dw_dma_platform_data - Controller configuration parameters * @nr_channels: Number of channels supported by hardware (max 8) * @is_private: The device channels should be marked as private and not for @@ -23,6 +43,8 @@ * @nr_masters: Number of AHB masters supported by the controller * @data_width: Maximum data width supported by hardware per AHB master * (0 - 8bits, 1 - 16bits, ..., 5 - 256bits) + * @sd: slave specific data. Used for configuring channels + * @sd_count: count of slave data structures passed. */ struct dw_dma_platform_data { unsigned int nr_channels; @@ -36,6 +58,9 @@ unsigned short block_size; unsigned char nr_masters; unsigned char data_width[4]; + + struct dw_dma_slave *sd; + unsigned int sd_count; }; /* bursts size */ @@ -50,23 +75,6 @@ DW_DMA_MSIZE_256, }; -/** - * struct dw_dma_slave - Controller-specific information about a slave - * - * @dma_dev: required DMA master device - * @cfg_hi: Platform-specific initializer for the CFG_HI register - * @cfg_lo: Platform-specific initializer for the CFG_LO register - * @src_master: src master for transfers on allocated channel. - * @dst_master: dest master for transfers on allocated channel. - */ -struct dw_dma_slave { - struct device *dma_dev; - u32 cfg_hi; - u32 cfg_lo; - u8 src_master; - u8 dst_master; -}; - /* Platform-configurable bits in CFG_HI */ #define DWC_CFGH_FCMODE (1 << 0) #define DWC_CFGH_FIFO_MODE (1 << 1) @@ -104,5 +112,6 @@ dma_addr_t dw_dma_get_src_addr(struct dma_chan *chan); dma_addr_t dw_dma_get_dst_addr(struct dma_chan *chan); +bool dw_dma_generic_filter(struct dma_chan *chan, void *param); #endif /* DW_DMAC_H */ --- linux-lts-raring-3.8.0.orig/include/linux/vt_kern.h +++ linux-lts-raring-3.8.0/include/linux/vt_kern.h @@ -47,6 +47,7 @@ int con_get_cmap(unsigned char __user *cmap); void scrollback(struct vc_data *vc, int lines); void scrollfront(struct vc_data *vc, int lines); +void clear_buffer_attributes(struct vc_data *vc); void update_region(struct vc_data *vc, unsigned long start, int count); void redraw_screen(struct vc_data *vc, int is_switch); #define update_screen(x) redraw_screen(x, 0) @@ -130,6 +131,8 @@ int vt_waitactive(int n); void change_console(struct vc_data *new_vc); void reset_vc(struct vc_data *vc); +extern int do_unbind_con_driver(const struct consw *csw, int first, int last, + int deflt); extern int unbind_con_driver(const struct consw *csw, int first, int last, int deflt); int vty_init(const struct file_operations *console_fops); --- linux-lts-raring-3.8.0.orig/include/linux/usb/serial.h +++ linux-lts-raring-3.8.0/include/linux/usb/serial.h @@ -66,6 +66,7 @@ * port. * @flags: usb serial port flags * @write_wait: a wait_queue_head_t used by the port. + * @delta_msr_wait: modem-status-change wait queue * @work: work queue entry for the line discipline waking up. * @throttled: nonzero if the read urb is inactive to throttle the device * @throttle_req: nonzero if the tty wants to throttle us @@ -112,6 +113,7 @@ unsigned long flags; wait_queue_head_t write_wait; + wait_queue_head_t delta_msr_wait; struct work_struct work; char throttled; char throttle_req; --- linux-lts-raring-3.8.0.orig/include/linux/usb/hcd.h +++ linux-lts-raring-3.8.0/include/linux/usb/hcd.h @@ -408,7 +408,7 @@ extern void usb_hcd_pci_remove(struct pci_dev *dev); extern void usb_hcd_pci_shutdown(struct pci_dev *dev); -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_PM extern const struct dev_pm_ops usb_hcd_pci_pm_ops; #endif #endif /* CONFIG_PCI */ --- linux-lts-raring-3.8.0.orig/include/linux/usb/cdc_ncm.h +++ linux-lts-raring-3.8.0/include/linux/usb/cdc_ncm.h @@ -127,6 +127,7 @@ u16 connected; }; +extern u8 cdc_ncm_select_altsetting(struct usbnet *dev, struct usb_interface *intf); extern int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_altsetting); extern void cdc_ncm_unbind(struct usbnet *dev, struct usb_interface *intf); extern struct sk_buff *cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb, __le32 sign); --- linux-lts-raring-3.8.0.orig/include/linux/mfd/rtsx_pci.h +++ linux-lts-raring-3.8.0/include/linux/mfd/rtsx_pci.h @@ -184,11 +184,26 @@ #define CARD_SHARE_BAROSSA_SD 0x01 #define CARD_SHARE_BAROSSA_MS 0x02 +/* CARD_DRIVE_SEL */ +#define MS_DRIVE_8mA (0x01 << 6) +#define MMC_DRIVE_8mA (0x01 << 4) +#define XD_DRIVE_8mA (0x01 << 2) +#define GPIO_DRIVE_8mA 0x01 +#define RTS5209_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | MMC_DRIVE_8mA |\ + XD_DRIVE_8mA | GPIO_DRIVE_8mA) +#define RTL8411_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | MMC_DRIVE_8mA |\ + XD_DRIVE_8mA) +#define RTSX_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | GPIO_DRIVE_8mA) + /* SD30_DRIVE_SEL */ #define DRIVER_TYPE_A 0x05 #define DRIVER_TYPE_B 0x03 #define DRIVER_TYPE_C 0x02 #define DRIVER_TYPE_D 0x01 +#define CFG_DRIVER_TYPE_A 0x02 +#define CFG_DRIVER_TYPE_B 0x03 +#define CFG_DRIVER_TYPE_C 0x01 +#define CFG_DRIVER_TYPE_D 0x00 /* FPDCTL */ #define SSC_POWER_DOWN 0x01 @@ -573,6 +588,7 @@ #define CARD_PWR_CTL 0xFD50 #define CARD_CLK_SWITCH 0xFD51 +#define RTL8411B_PACKAGE_MODE 0xFD51 #define CARD_SHARE_MODE 0xFD52 #define CARD_DRIVE_SEL 0xFD53 #define CARD_STOP 0xFD54 @@ -581,8 +597,11 @@ #define CARD_GPIO_DIR 0xFD57 #define CARD_GPIO 0xFD58 #define CARD_DATA_SOURCE 0xFD5B +#define SD30_CLK_DRIVE_SEL 0xFD5A #define CARD_SELECT 0xFD5C #define SD30_DRIVE_SEL 0xFD5E +#define SD30_CMD_DRIVE_SEL 0xFD5E +#define SD30_DAT_DRIVE_SEL 0xFD5F #define CARD_CLK_EN 0xFD69 #define SDIO_CTRL 0xFD6B #define CD_PAD_CTL 0xFD73 @@ -655,6 +674,8 @@ #define MSGTXDATA3 0xFE47 #define MSGTXCTL 0xFE48 #define PETXCFG 0xFE49 +#define LTR_CTL 0xFE4A +#define OBFF_CFG 0xFE4C #define CDRESUMECTL 0xFE52 #define WAKE_SEL_CTL 0xFE54 @@ -676,6 +697,8 @@ #define DUMMY_REG_RESET_0 0xFE90 +#define AUTOLOAD_CFG_BASE 0xFF00 + /* Memory mapping */ #define SRAM_BASE 0xE600 #define RBUF_BASE 0xF400 @@ -684,6 +707,45 @@ #define IMAGE_FLAG_ADDR0 0xCE80 #define IMAGE_FLAG_ADDR1 0xCE81 +/* Phy register */ +#define PHY_PCR 0x00 +#define PHY_RCR0 0x01 +#define PHY_RCR1 0x02 +#define PHY_RCR2 0x03 +#define PHY_RTCR 0x04 +#define PHY_RDR 0x05 +#define PHY_TCR0 0x06 +#define PHY_TCR1 0x07 +#define PHY_TUNE 0x08 +#define PHY_IMR 0x09 +#define PHY_BPCR 0x0A +#define PHY_BIST 0x0B +#define PHY_RAW_L 0x0C +#define PHY_RAW_H 0x0D +#define PHY_RAW_DATA 0x0E +#define PHY_HOST_CLK_CTRL 0x0F +#define PHY_DMR 0x10 +#define PHY_BACR 0x11 +#define PHY_IER 0x12 +#define PHY_BCSR 0x13 +#define PHY_BPR 0x14 +#define PHY_BPNR2 0x15 +#define PHY_BPNR 0x16 +#define PHY_BRNR2 0x17 +#define PHY_BENR 0x18 +#define PHY_REG_REV 0x19 +#define PHY_FLD0 0x1A +#define PHY_FLD1 0x1B +#define PHY_FLD2 0x1C +#define PHY_FLD3 0x1D +#define PHY_FLD4 0x1E +#define PHY_DUM_REG 0x1F + +#define LCTLR 0x80 +#define PCR_SETTING_REG1 0x724 +#define PCR_SETTING_REG2 0x814 +#define PCR_SETTING_REG3 0x747 + #define rtsx_pci_init_cmd(pcr) ((pcr)->ci = 0) struct rtsx_pcr; @@ -705,6 +767,7 @@ u8 voltage); unsigned int (*cd_deglitch)(struct rtsx_pcr *pcr); int (*conv_clk_and_div_n)(int clk, int dir); + void (*fetch_vendor_settings)(struct rtsx_pcr *pcr); }; enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN}; @@ -735,6 +798,7 @@ unsigned int card_inserted; unsigned int card_removed; + unsigned int card_exist; struct delayed_work carddet_work; struct delayed_work idle_work; @@ -745,7 +809,6 @@ struct completion *finish_me; unsigned int cur_clock; - bool ms_pmos; bool remove_pci; bool msi_en; @@ -763,6 +826,16 @@ #define IC_VER_D 3 u8 ic_version; + u8 sd30_drive_sel_1v8; + u8 sd30_drive_sel_3v3; + u8 card_drive_sel; +#define ASPM_L1_EN 0x02 + u8 aspm_en; + +#define PCR_MS_PMOS (1 << 0) +#define PCR_REVERSE_SOCKET (1 << 1) + u32 flags; + const u32 *sd_pull_ctl_enable_tbl; const u32 *sd_pull_ctl_disable_tbl; const u32 *ms_pull_ctl_enable_tbl; @@ -799,6 +872,7 @@ u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk); int rtsx_pci_card_power_on(struct rtsx_pcr *pcr, int card); int rtsx_pci_card_power_off(struct rtsx_pcr *pcr, int card); +int rtsx_pci_card_exclusive_check(struct rtsx_pcr *pcr, int card); int rtsx_pci_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage); unsigned int rtsx_pci_card_exist(struct rtsx_pcr *pcr); void rtsx_pci_complete_unfinished_transfer(struct rtsx_pcr *pcr); --- linux-lts-raring-3.8.0.orig/include/linux/ceph/auth.h +++ linux-lts-raring-3.8.0/include/linux/ceph/auth.h @@ -52,6 +52,9 @@ */ int (*create_authorizer)(struct ceph_auth_client *ac, int peer_type, struct ceph_auth_handshake *auth); + /* ensure that an existing authorizer is up to date */ + int (*update_authorizer)(struct ceph_auth_client *ac, int peer_type, + struct ceph_auth_handshake *auth); int (*verify_authorizer_reply)(struct ceph_auth_client *ac, struct ceph_authorizer *a, size_t len); void (*destroy_authorizer)(struct ceph_auth_client *ac, @@ -75,6 +78,8 @@ u64 global_id; /* our unique id in system */ const struct ceph_crypto_key *key; /* our secret key */ unsigned want_keys; /* which services we want */ + + struct mutex mutex; }; extern struct ceph_auth_client *ceph_auth_init(const char *name, @@ -94,5 +99,18 @@ void *msg_buf, size_t msg_len); extern int ceph_auth_is_authenticated(struct ceph_auth_client *ac); +extern int ceph_auth_create_authorizer(struct ceph_auth_client *ac, + int peer_type, + struct ceph_auth_handshake *auth); +extern void ceph_auth_destroy_authorizer(struct ceph_auth_client *ac, + struct ceph_authorizer *a); +extern int ceph_auth_update_authorizer(struct ceph_auth_client *ac, + int peer_type, + struct ceph_auth_handshake *a); +extern int ceph_auth_verify_authorizer_reply(struct ceph_auth_client *ac, + struct ceph_authorizer *a, + size_t len); +extern void ceph_auth_invalidate_authorizer(struct ceph_auth_client *ac, + int peer_type); #endif --- linux-lts-raring-3.8.0.orig/include/linux/ssb/ssb_driver_chipcommon.h +++ linux-lts-raring-3.8.0/include/linux/ssb/ssb_driver_chipcommon.h @@ -219,6 +219,7 @@ #define SSB_CHIPCO_PMU_CTL 0x0600 /* PMU control */ #define SSB_CHIPCO_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */ #define SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT 16 +#define SSB_CHIPCO_PMU_CTL_PLL_UPD 0x00000400 #define SSB_CHIPCO_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */ #define SSB_CHIPCO_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */ #define SSB_CHIPCO_PMU_CTL_ALPREQEN 0x00000080 /* ALP req enable */ @@ -667,5 +668,6 @@ void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, enum ssb_pmu_ldo_volt_id id, u32 voltage); void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); +void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid); #endif /* LINUX_SSB_CHIPCO_H_ */ --- linux-lts-raring-3.8.0.orig/include/linux/mtd/nand.h +++ linux-lts-raring-3.8.0/include/linux/mtd/nand.h @@ -187,6 +187,13 @@ * This happens with the Renesas AG-AND chips, possibly others. */ #define BBT_AUTO_REFRESH 0x00000080 +/* + * Chip requires ready check on read (for auto-incremented sequential read). + * True only for small page devices; large page devices do not support + * autoincrement. + */ +#define NAND_NEED_READRDY 0x00000100 + /* Chip does not allow subpage writes */ #define NAND_NO_SUBPAGE_WRITE 0x00000200 --- linux-lts-raring-3.8.0.orig/include/linux/spi/pxa2xx_spi.h +++ linux-lts-raring-3.8.0/include/linux/spi/pxa2xx_spi.h @@ -28,6 +28,15 @@ u32 clock_enable; u16 num_chipselect; u8 enable_dma; + + /* DMA engine specific config */ + int rx_chan_id; + int tx_chan_id; + int rx_slave_id; + int tx_slave_id; + + /* For non-PXA arches */ + struct ssp_device ssp; }; /* spi_board_info.controller_data for SPI slave devices, @@ -35,6 +44,7 @@ */ struct pxa2xx_spi_chip { u8 tx_threshold; + u8 tx_hi_threshold; u8 rx_threshold; u8 dma_burst_size; u32 timeout; @@ -50,103 +60,5 @@ extern void pxa2xx_set_spi_info(unsigned id, struct pxa2xx_spi_master *info); -#else -/* - * This is the implemtation for CE4100 on x86. ARM defines them in mach/ or - * plat/ include path. - * The CE4100 does not provide DMA support. This bits are here to let the driver - * compile and will never be used. Maybe we get DMA support at a later point in - * time. - */ - -#define DCSR(n) (n) -#define DSADR(n) (n) -#define DTADR(n) (n) -#define DCMD(n) (n) -#define DRCMR(n) (n) - -#define DCSR_RUN (1 << 31) /* Run Bit */ -#define DCSR_NODESC (1 << 30) /* No-Descriptor Fetch */ -#define DCSR_STOPIRQEN (1 << 29) /* Stop Interrupt Enable */ -#define DCSR_REQPEND (1 << 8) /* Request Pending (read-only) */ -#define DCSR_STOPSTATE (1 << 3) /* Stop State (read-only) */ -#define DCSR_ENDINTR (1 << 2) /* End Interrupt */ -#define DCSR_STARTINTR (1 << 1) /* Start Interrupt */ -#define DCSR_BUSERR (1 << 0) /* Bus Error Interrupt */ - -#define DCSR_EORIRQEN (1 << 28) /* End of Receive Interrupt Enable */ -#define DCSR_EORJMPEN (1 << 27) /* Jump to next descriptor on EOR */ -#define DCSR_EORSTOPEN (1 << 26) /* STOP on an EOR */ -#define DCSR_SETCMPST (1 << 25) /* Set Descriptor Compare Status */ -#define DCSR_CLRCMPST (1 << 24) /* Clear Descriptor Compare Status */ -#define DCSR_CMPST (1 << 10) /* The Descriptor Compare Status */ -#define DCSR_EORINTR (1 << 9) /* The end of Receive */ - -#define DRCMR_MAPVLD (1 << 7) /* Map Valid */ -#define DRCMR_CHLNUM 0x1f /* mask for Channel Number */ - -#define DDADR_DESCADDR 0xfffffff0 /* Address of next descriptor */ -#define DDADR_STOP (1 << 0) /* Stop */ - -#define DCMD_INCSRCADDR (1 << 31) /* Source Address Increment Setting. */ -#define DCMD_INCTRGADDR (1 << 30) /* Target Address Increment Setting. */ -#define DCMD_FLOWSRC (1 << 29) /* Flow Control by the source. */ -#define DCMD_FLOWTRG (1 << 28) /* Flow Control by the target. */ -#define DCMD_STARTIRQEN (1 << 22) /* Start Interrupt Enable */ -#define DCMD_ENDIRQEN (1 << 21) /* End Interrupt Enable */ -#define DCMD_ENDIAN (1 << 18) /* Device Endian-ness. */ -#define DCMD_BURST8 (1 << 16) /* 8 byte burst */ -#define DCMD_BURST16 (2 << 16) /* 16 byte burst */ -#define DCMD_BURST32 (3 << 16) /* 32 byte burst */ -#define DCMD_WIDTH1 (1 << 14) /* 1 byte width */ -#define DCMD_WIDTH2 (2 << 14) /* 2 byte width (HalfWord) */ -#define DCMD_WIDTH4 (3 << 14) /* 4 byte width (Word) */ -#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */ - -/* - * Descriptor structure for PXA's DMA engine - * Note: this structure must always be aligned to a 16-byte boundary. - */ - -typedef enum { - DMA_PRIO_HIGH = 0, - DMA_PRIO_MEDIUM = 1, - DMA_PRIO_LOW = 2 -} pxa_dma_prio; - -/* - * DMA registration - */ - -static inline int pxa_request_dma(char *name, - pxa_dma_prio prio, - void (*irq_handler)(int, void *), - void *data) -{ - return -ENODEV; -} - -static inline void pxa_free_dma(int dma_ch) -{ -} - -/* - * The CE4100 does not have the clk framework implemented and SPI clock can - * not be switched on/off or the divider changed. - */ -static inline void clk_disable(struct clk *clk) -{ -} - -static inline int clk_enable(struct clk *clk) -{ - return 0; -} - -static inline unsigned long clk_get_rate(struct clk *clk) -{ - return 3686400; -} - #endif #endif --- linux-lts-raring-3.8.0.orig/include/uapi/linux/cdrom.h +++ linux-lts-raring-3.8.0/include/uapi/linux/cdrom.h @@ -908,5 +908,39 @@ __be16 desc_length; }; +/* removable medium feature descriptor */ +struct rm_feature_desc { + __be16 feature_code; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved1:2; + __u8 feature_version:4; + __u8 persistent:1; + __u8 curr:1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 curr:1; + __u8 persistent:1; + __u8 feature_version:4; + __u8 reserved1:2; +#endif + __u8 add_len; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 mech_type:3; + __u8 load:1; + __u8 eject:1; + __u8 pvnt_jmpr:1; + __u8 dbml:1; + __u8 lock:1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 lock:1; + __u8 dbml:1; + __u8 pvnt_jmpr:1; + __u8 eject:1; + __u8 load:1; + __u8 mech_type:3; +#endif + __u8 reserved2; + __u8 reserved3; + __u8 reserved4; +}; #endif /* _UAPI_LINUX_CDROM_H */ --- linux-lts-raring-3.8.0.orig/include/uapi/linux/virtio_net.h +++ linux-lts-raring-3.8.0/include/uapi/linux/virtio_net.h @@ -185,7 +185,7 @@ * specified. */ struct virtio_net_ctrl_mq { - u16 virtqueue_pairs; + __u16 virtqueue_pairs; }; #define VIRTIO_NET_CTRL_MQ 4 --- linux-lts-raring-3.8.0.orig/include/uapi/linux/virtio_console.h +++ linux-lts-raring-3.8.0/include/uapi/linux/virtio_console.h @@ -39,7 +39,7 @@ #define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ #define VIRTIO_CONSOLE_F_MULTIPORT 1 /* Does host provide multiple ports? */ -#define VIRTIO_CONSOLE_BAD_ID (~(u32)0) +#define VIRTIO_CONSOLE_BAD_ID (~(__u32)0) struct virtio_console_config { /* colums of the screens */ --- linux-lts-raring-3.8.0.orig/include/uapi/linux/if_cablemodem.h +++ linux-lts-raring-3.8.0/include/uapi/linux/if_cablemodem.h @@ -12,11 +12,11 @@ */ /* some useful defines for sb1000.c e cmconfig.c - fv */ -#define SIOCGCMSTATS SIOCDEVPRIVATE+0 /* get cable modem stats */ -#define SIOCGCMFIRMWARE SIOCDEVPRIVATE+1 /* get cm firmware version */ -#define SIOCGCMFREQUENCY SIOCDEVPRIVATE+2 /* get cable modem frequency */ -#define SIOCSCMFREQUENCY SIOCDEVPRIVATE+3 /* set cable modem frequency */ -#define SIOCGCMPIDS SIOCDEVPRIVATE+4 /* get cable modem PIDs */ -#define SIOCSCMPIDS SIOCDEVPRIVATE+5 /* set cable modem PIDs */ +#define SIOCGCMSTATS (SIOCDEVPRIVATE+0) /* get cable modem stats */ +#define SIOCGCMFIRMWARE (SIOCDEVPRIVATE+1) /* get cm firmware version */ +#define SIOCGCMFREQUENCY (SIOCDEVPRIVATE+2) /* get cable modem frequency */ +#define SIOCSCMFREQUENCY (SIOCDEVPRIVATE+3) /* set cable modem frequency */ +#define SIOCGCMPIDS (SIOCDEVPRIVATE+4) /* get cable modem PIDs */ +#define SIOCSCMPIDS (SIOCDEVPRIVATE+5) /* set cable modem PIDs */ #endif --- linux-lts-raring-3.8.0.orig/include/uapi/linux/ipv6.h +++ linux-lts-raring-3.8.0/include/uapi/linux/ipv6.h @@ -63,6 +63,8 @@ #define ipv6_destopt_hdr ipv6_opt_hdr #define ipv6_hopopt_hdr ipv6_opt_hdr +/* Router Alert option values (RFC2711) */ +#define IPV6_OPT_ROUTERALERT_MLD 0x0000 /* MLD(RFC2710) */ /* * routing header type 0 (used in cmsghdr struct) --- linux-lts-raring-3.8.0.orig/include/uapi/linux/icmpv6.h +++ linux-lts-raring-3.8.0/include/uapi/linux/icmpv6.h @@ -115,6 +115,8 @@ #define ICMPV6_NOT_NEIGHBOUR 2 #define ICMPV6_ADDR_UNREACH 3 #define ICMPV6_PORT_UNREACH 4 +#define ICMPV6_POLICY_FAIL 5 +#define ICMPV6_REJECT_ROUTE 6 /* * Codes for Time Exceeded --- linux-lts-raring-3.8.0.orig/include/uapi/linux/firewire-cdev.h +++ linux-lts-raring-3.8.0/include/uapi/linux/firewire-cdev.h @@ -215,8 +215,8 @@ * with the %FW_CDEV_ISO_INTERRUPT bit set, when explicitly requested with * %FW_CDEV_IOC_FLUSH_ISO, or when there have been so many completed packets * without the interrupt bit set that the kernel's internal buffer for @header - * is about to overflow. (In the last case, kernels with ABI version < 5 drop - * header data up to the next interrupt packet.) + * is about to overflow. (In the last case, ABI versions < 5 drop header data + * up to the next interrupt packet.) * * Isochronous transmit events (context type %FW_CDEV_ISO_CONTEXT_TRANSMIT): * --- linux-lts-raring-3.8.0.orig/include/uapi/linux/serial_core.h +++ linux-lts-raring-3.8.0/include/uapi/linux/serial_core.h @@ -50,8 +50,11 @@ #define PORT_LPC3220 22 /* NXP LPC32xx SoC "Standard" UART */ #define PORT_8250_CIR 23 /* CIR infrared port, has its own driver */ #define PORT_XR17V35X 24 /* Exar XR17V35x UARTs */ -#define PORT_BRCM_TRUMANAGE 24 -#define PORT_MAX_8250 25 /* max port ID */ +#define PORT_BRCM_TRUMANAGE 25 +#define PORT_ALTR_16550_F32 26 /* Altera 16550 UART with 32 FIFOs */ +#define PORT_ALTR_16550_F64 27 /* Altera 16550 UART with 64 FIFOs */ +#define PORT_ALTR_16550_F128 28 /* Altera 16550 UART with 128 FIFOs */ +#define PORT_MAX_8250 28 /* max port ID */ /* * ARM specific type numbers. These are not currently guaranteed --- linux-lts-raring-3.8.0.orig/include/uapi/linux/packet_diag.h +++ linux-lts-raring-3.8.0/include/uapi/linux/packet_diag.h @@ -33,9 +33,11 @@ PACKET_DIAG_TX_RING, PACKET_DIAG_FANOUT, - PACKET_DIAG_MAX, + __PACKET_DIAG_MAX, }; +#define PACKET_DIAG_MAX (__PACKET_DIAG_MAX - 1) + struct packet_diag_info { __u32 pdi_index; __u32 pdi_version; --- linux-lts-raring-3.8.0.orig/include/uapi/linux/if_pppox.h +++ linux-lts-raring-3.8.0/include/uapi/linux/if_pppox.h @@ -135,11 +135,11 @@ struct pppoe_hdr { #if defined(__LITTLE_ENDIAN_BITFIELD) - __u8 ver : 4; __u8 type : 4; + __u8 ver : 4; #elif defined(__BIG_ENDIAN_BITFIELD) - __u8 type : 4; __u8 ver : 4; + __u8 type : 4; #else #error "Please fix " #endif --- linux-lts-raring-3.8.0.orig/include/uapi/linux/unix_diag.h +++ linux-lts-raring-3.8.0/include/uapi/linux/unix_diag.h @@ -39,9 +39,11 @@ UNIX_DIAG_MEMINFO, UNIX_DIAG_SHUTDOWN, - UNIX_DIAG_MAX, + __UNIX_DIAG_MAX, }; +#define UNIX_DIAG_MAX (__UNIX_DIAG_MAX - 1) + struct unix_diag_vfs { __u32 udiag_vfs_ino; __u32 udiag_vfs_dev; --- linux-lts-raring-3.8.0.orig/include/uapi/linux/usb/audio.h +++ linux-lts-raring-3.8.0/include/uapi/linux/usb/audio.h @@ -384,14 +384,16 @@ int protocol) { __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); - return desc->baSourceID[desc->bNrInPins + control_size]; + return *(uac_processing_unit_bmControls(desc, protocol) + + control_size); } static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc, int protocol) { __u8 control_size = uac_processing_unit_bControlSize(desc, protocol); - return &desc->baSourceID[desc->bNrInPins + control_size + 1]; + return uac_processing_unit_bmControls(desc, protocol) + + control_size + 1; } /* 4.5.2 Class-Specific AS Interface Descriptor */ --- linux-lts-raring-3.8.0.orig/include/uapi/drm/radeon_drm.h +++ linux-lts-raring-3.8.0/include/uapi/drm/radeon_drm.h @@ -972,6 +972,9 @@ #define RADEON_INFO_MAX_SE 0x12 /* max SH per SE */ #define RADEON_INFO_MAX_SH_PER_SE 0x13 +/* query if CP DMA is supported on the compute ring */ +#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17 + struct drm_radeon_info { uint32_t request; --- linux-lts-raring-3.8.0.orig/include/uapi/asm-generic/signal.h +++ linux-lts-raring-3.8.0/include/uapi/asm-generic/signal.h @@ -93,6 +93,10 @@ #include +#ifdef SA_RESTORER +#define __ARCH_HAS_SA_RESTORER +#endif + struct sigaction { __sighandler_t sa_handler; unsigned long sa_flags; --- linux-lts-raring-3.8.0.orig/include/sound/emu10k1.h +++ linux-lts-raring-3.8.0/include/sound/emu10k1.h @@ -1787,6 +1787,7 @@ unsigned int next_free_voice; const struct firmware *firmware; + const struct firmware *dock_fw; #ifdef CONFIG_PM_SLEEP unsigned int *saved_ptr; --- linux-lts-raring-3.8.0.orig/include/video/atmel_lcdc.h +++ linux-lts-raring-3.8.0/include/video/atmel_lcdc.h @@ -62,6 +62,7 @@ void (*atmel_lcdfb_power_control)(int on); struct fb_monspecs *default_monspecs; u32 pseudo_palette[16]; + bool have_intensity_bit; }; #define ATMEL_LCDC_DMABADDR1 0x00 --- linux-lts-raring-3.8.0.orig/include/scsi/scsi_device.h +++ linux-lts-raring-3.8.0/include/scsi/scsi_device.h @@ -157,10 +157,11 @@ unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */ unsigned try_rc_10_first:1; /* Try READ_CAPACACITY_10 first */ unsigned is_visible:1; /* is the device visible in sysfs */ - unsigned can_power_off:1; /* Device supports runtime power off */ unsigned wce_default_on:1; /* Cache is ON by default */ unsigned no_dif:1; /* T10 PI (DIF) should be disabled */ + atomic_t disk_events_disable_depth; /* disable depth for disk events */ + DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */ struct list_head event_list; /* asserted events */ struct work_struct event_work; @@ -397,6 +398,8 @@ int data_direction, void *buffer, unsigned bufflen, struct scsi_sense_hdr *, int timeout, int retries, int *resid); +extern void sdev_disable_disk_events(struct scsi_device *sdev); +extern void sdev_enable_disk_events(struct scsi_device *sdev); #ifdef CONFIG_PM_RUNTIME extern int scsi_autopm_get_device(struct scsi_device *); --- linux-lts-raring-3.8.0.orig/include/media/v4l2-ctrls.h +++ linux-lts-raring-3.8.0/include/media/v4l2-ctrls.h @@ -22,6 +22,7 @@ #define _V4L2_CTRLS_H #include +#include #include /* forward references */ --- linux-lts-raring-3.8.0.orig/include/trace/events/fs.h +++ linux-lts-raring-3.8.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(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(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-lts-raring-3.8.0.orig/include/trace/events/vfs.h +++ linux-lts-raring-3.8.0/include/trace/events/vfs.h @@ -0,0 +1,55 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM vfs + +#include + +#if !defined(_TRACE_VFS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_VFS_H + +/* + * Tracepoint for dirtying an inode: + */ +TRACE_EVENT(dirty_inode, + + TP_PROTO(struct inode *inode, struct task_struct *task), + + TP_ARGS(inode, task), + + TP_STRUCT__entry( + __array( char, comm, TASK_COMM_LEN ) + __field( pid_t, pid ) + __array( char, dev, 16 ) + __array( char, file, 32 ) + ), + + TP_fast_assign( + if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { + struct dentry *dentry; + const char *name = "?"; + + dentry = d_find_alias(inode); + if (dentry) { + spin_lock(&dentry->d_lock); + name = (const char *) dentry->d_name.name; + } + + memcpy(__entry->comm, task->comm, TASK_COMM_LEN); + __entry->pid = task->pid; + strlcpy(__entry->file, name, 32); + strlcpy(__entry->dev, inode->i_sb->s_id, 16); + + if (dentry) { + spin_unlock(&dentry->d_lock); + dput(dentry); + } + } + ), + + TP_printk("task=%i (%s) file=%s dev=%s", + __entry->pid, __entry->comm, __entry->file, __entry->dev) +); + +#endif /* _TRACE_VFS_H */ + +/* This part must be outside protection */ +#include --- linux-lts-raring-3.8.0.orig/include/trace/events/sched.h +++ linux-lts-raring-3.8.0/include/trace/events/sched.h @@ -147,7 +147,7 @@ __print_flags(__entry->prev_state & (TASK_STATE_MAX-1), "|", { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" }, { 16, "Z" }, { 32, "X" }, { 64, "x" }, - { 128, "W" }) : "R", + { 128, "K" }, { 256, "W" }, { 512, "P" }) : "R", __entry->prev_state & TASK_STATE_MAX ? "+" : "", __entry->next_comm, __entry->next_pid, __entry->next_prio) ); --- linux-lts-raring-3.8.0.orig/include/drm/drm_pciids.h +++ linux-lts-raring-3.8.0/include/drm/drm_pciids.h @@ -227,6 +227,7 @@ {0x1002, 0x6819, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PITCAIRN|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6821, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x6822, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6823, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6824, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ @@ -234,11 +235,13 @@ {0x1002, 0x6827, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6829, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x682A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x682B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x682D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x682F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6830, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6831, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x6835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6837, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6838, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6839, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VERDE|RADEON_NEW_MEMMAP}, \ @@ -568,7 +571,11 @@ {0x1002, 0x9908, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9909, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x990A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ - {0x1002, 0x990F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x990B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x990C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x990D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x990E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x990F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9910, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9913, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9917, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ @@ -579,6 +586,15 @@ {0x1002, 0x9992, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9993, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x9994, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9995, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9996, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9997, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9998, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x9999, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x999A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x999B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x999C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ + {0x1002, 0x999D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x99A0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x99A2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ {0x1002, 0x99A4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ --- linux-lts-raring-3.8.0.orig/include/drm/drmP.h +++ linux-lts-raring-3.8.0/include/drm/drmP.h @@ -919,6 +919,14 @@ /* import dmabuf -> GEM */ struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, struct dma_buf *dma_buf); + /* low-level interface used by drm_gem_prime_{import,export} */ + int (*gem_prime_pin)(struct drm_gem_object *obj); + struct sg_table *(*gem_prime_get_sg_table)(struct drm_gem_object *obj); + struct drm_gem_object *(*gem_prime_import_sg_table)( + struct drm_device *dev, size_t size, + struct sg_table *sgt); + void *(*gem_prime_vmap)(struct drm_gem_object *obj); + void (*gem_prime_vunmap)(struct drm_gem_object *obj, void *vaddr); /* vga arb irq handler */ void (*vgaarb_irq)(struct drm_device *dev, bool state); @@ -1540,9 +1548,13 @@ extern int drm_gem_name_info(struct seq_file *m, void *data); +extern struct dma_buf *drm_gem_prime_export(struct drm_device *dev, + struct drm_gem_object *obj, int flags); extern int drm_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, uint32_t handle, uint32_t flags, int *prime_fd); +extern struct drm_gem_object *drm_gem_prime_import(struct drm_device *dev, + struct dma_buf *dma_buf); extern int drm_gem_prime_fd_to_handle(struct drm_device *dev, struct drm_file *file_priv, int prime_fd, uint32_t *handle); @@ -1559,9 +1571,8 @@ void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv); void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv); -int drm_prime_add_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle); -int drm_prime_lookup_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle); -void drm_prime_remove_imported_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf); +int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t *handle); +void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf); int drm_prime_add_dma_buf(struct drm_device *dev, struct drm_gem_object *obj); int drm_prime_lookup_obj(struct drm_device *dev, struct dma_buf *buf, --- linux-lts-raring-3.8.0.orig/include/asm-generic/tlb.h +++ linux-lts-raring-3.8.0/include/asm-generic/tlb.h @@ -97,9 +97,12 @@ unsigned long start; unsigned long end; unsigned int need_flush : 1, /* Did free PTEs */ - fast_mode : 1; /* No batching */ - - unsigned int fullmm; + /* we are in the middle of an operation to clear + * a full mm and can make some optimizations */ + fullmm : 1, + /* we have performed an operation which + * requires a complete flush of the tlb */ + need_flush_all : 1; struct mmu_gather_batch *active; struct mmu_gather_batch local; @@ -109,20 +112,7 @@ #define HAVE_GENERIC_MMU_GATHER -static inline int tlb_fast_mode(struct mmu_gather *tlb) -{ -#ifdef CONFIG_SMP - return tlb->fast_mode; -#else - /* - * For UP we don't need to worry about TLB flush - * and page free order so much.. - */ - return 1; -#endif -} - -void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm); +void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end); void tlb_flush_mmu(struct mmu_gather *tlb); void tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end); --- linux-lts-raring-3.8.0.orig/include/asm-generic/pgtable.h +++ linux-lts-raring-3.8.0/include/asm-generic/pgtable.h @@ -7,6 +7,16 @@ #include #include +/* + * On almost all architectures and configurations, 0 can be used as the + * upper ceiling to free_pgtables(): on many architectures it has the same + * effect as using TASK_SIZE. However, there is one configuration which + * must impose a more careful limit, to avoid freeing kernel pgtables. + */ +#ifndef USER_PGTABLES_CEILING +#define USER_PGTABLES_CEILING 0UL +#endif + #ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS extern int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address, pte_t *ptep, --- linux-lts-raring-3.8.0.orig/mm/bounce.c +++ linux-lts-raring-3.8.0/mm/bounce.c @@ -134,7 +134,7 @@ /* * free up bounce indirect pages used */ - __bio_for_each_segment(bvec, bio, i, 0) { + bio_for_each_segment_all(bvec, bio, i) { org_vec = bio_orig->bi_io_vec + i; if (bvec->bv_page == org_vec->bv_page) continue; --- linux-lts-raring-3.8.0.orig/mm/mremap.c +++ linux-lts-raring-3.8.0/mm/mremap.c @@ -134,7 +134,7 @@ pte_unmap(new_pte - 1); pte_unmap_unlock(old_pte - 1, old_ptl); if (anon_vma) - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); if (mapping) mutex_unlock(&mapping->i_mmap_mutex); } --- linux-lts-raring-3.8.0.orig/mm/mempolicy.c +++ linux-lts-raring-3.8.0/mm/mempolicy.c @@ -745,7 +745,10 @@ if (prev) { vma = prev; next = vma->vm_next; - continue; + if (mpol_equal(vma_policy(vma), new_pol)) + continue; + /* vma_merge() joined vma && vma->next, case 8 */ + goto replace; } if (vma->vm_start != vmstart) { err = split_vma(vma->vm_mm, vma, vmstart, 1); @@ -757,6 +760,7 @@ if (err) goto out; } + replace: err = vma_replace_policy(vma, new_pol); if (err) goto out; @@ -2386,8 +2390,8 @@ *mpol_new = *n->policy; atomic_set(&mpol_new->refcnt, 1); sp_node_init(n_new, n->end, end, mpol_new); - sp_insert(sp, n_new); n->end = start; + sp_insert(sp, n_new); n_new = NULL; mpol_new = NULL; break; --- linux-lts-raring-3.8.0.orig/mm/mmu_notifier.c +++ linux-lts-raring-3.8.0/mm/mmu_notifier.c @@ -47,11 +47,10 @@ id = srcu_read_lock(&srcu); hlist_for_each_entry_rcu(mn, n, &mm->mmu_notifier_mm->list, hlist) /* - * if ->release runs before mmu_notifier_unregister it - * must be handled as it's the only way for the driver - * to flush all existing sptes and stop the driver - * from establishing any more sptes before all the - * pages in the mm are freed. + * If ->release runs before mmu_notifier_unregister it must be + * handled, as it's the only way for the driver to flush all + * existing sptes and stop the driver from establishing any more + * sptes before all the pages in the mm are freed. */ if (mn->ops->release) mn->ops->release(mn, mm); @@ -64,22 +63,22 @@ hlist); /* * We arrived before mmu_notifier_unregister so - * mmu_notifier_unregister will do nothing other than - * to wait ->release to finish and - * mmu_notifier_unregister to return. + * mmu_notifier_unregister will do nothing other than to wait + * for ->release to finish and for mmu_notifier_unregister to + * return. */ hlist_del_init_rcu(&mn->hlist); } spin_unlock(&mm->mmu_notifier_mm->lock); /* - * synchronize_srcu here prevents mmu_notifier_release to - * return to exit_mmap (which would proceed freeing all pages - * in the mm) until the ->release method returns, if it was - * invoked by mmu_notifier_unregister. + * synchronize_srcu here prevents mmu_notifier_release from returning to + * exit_mmap (which would proceed with freeing all pages in the mm) + * until the ->release method returns, if it was invoked by + * mmu_notifier_unregister. * - * The mmu_notifier_mm can't go away from under us because one - * mm_count is hold by exit_mmap. + * The mmu_notifier_mm can't go away from under us because one mm_count + * is held by exit_mmap. */ synchronize_srcu(&srcu); } @@ -296,28 +295,31 @@ if (!hlist_unhashed(&mn->hlist)) { /* - * SRCU here will force exit_mmap to wait ->release to finish - * before freeing the pages. + * SRCU here will force exit_mmap to wait for ->release to + * finish before freeing the pages. */ int id; id = srcu_read_lock(&srcu); /* - * exit_mmap will block in mmu_notifier_release to - * guarantee ->release is called before freeing the - * pages. + * exit_mmap will block in mmu_notifier_release to guarantee + * that ->release is called before freeing the pages. */ if (mn->ops->release) mn->ops->release(mn, mm); srcu_read_unlock(&srcu, id); spin_lock(&mm->mmu_notifier_mm->lock); - hlist_del_rcu(&mn->hlist); + /* + * Can not use list_del_rcu() since __mmu_notifier_release + * can delete it before we hold the lock. + */ + hlist_del_init_rcu(&mn->hlist); spin_unlock(&mm->mmu_notifier_mm->lock); } /* - * Wait any running method to finish, of course including + * Wait for any running method to finish, of course including * ->release if it was run by mmu_notifier_relase instead of us. */ synchronize_srcu(&srcu); --- linux-lts-raring-3.8.0.orig/mm/rmap.c +++ linux-lts-raring-3.8.0/mm/rmap.c @@ -105,7 +105,7 @@ */ if (rwsem_is_locked(&anon_vma->root->rwsem)) { anon_vma_lock_write(anon_vma); - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); } kmem_cache_free(anon_vma_cachep, anon_vma); @@ -191,7 +191,7 @@ avc = NULL; } spin_unlock(&mm->page_table_lock); - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); if (unlikely(allocated)) put_anon_vma(allocated); @@ -308,7 +308,7 @@ vma->anon_vma = anon_vma; anon_vma_lock_write(anon_vma); anon_vma_chain_link(vma, avc, anon_vma); - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); return 0; --- linux-lts-raring-3.8.0.orig/mm/page_alloc.c +++ linux-lts-raring-3.8.0/mm/page_alloc.c @@ -1616,6 +1616,7 @@ long min = mark; long lowmem_reserve = z->lowmem_reserve[classzone_idx]; int o; + long free_cma = 0; free_pages -= (1 << order) - 1; if (alloc_flags & ALLOC_HIGH) @@ -1625,9 +1626,10 @@ #ifdef CONFIG_CMA /* If allocation can't use CMA areas don't use free CMA pages */ if (!(alloc_flags & ALLOC_CMA)) - free_pages -= zone_page_state(z, NR_FREE_CMA_PAGES); + free_cma = zone_page_state(z, NR_FREE_CMA_PAGES); #endif - if (free_pages <= min + lowmem_reserve) + + if (free_pages - free_cma <= min + lowmem_reserve) return false; for (o = 0; o < order; o++) { /* At the next order, this order's pages become unavailable */ @@ -2614,10 +2616,17 @@ page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order, zonelist, high_zoneidx, alloc_flags, preferred_zone, migratetype); - if (unlikely(!page)) + if (unlikely(!page)) { + /* + * Runtime PM, block IO and its error handling path + * can deadlock because I/O on the device might not + * complete. + */ + gfp_mask = memalloc_noio_flags(gfp_mask); page = __alloc_pages_slowpath(gfp_mask, order, zonelist, high_zoneidx, nodemask, preferred_zone, migratetype); + } trace_mm_page_alloc(page, order, gfp_mask, migratetype); @@ -6047,6 +6056,10 @@ list_del(&page->lru); rmv_page_order(page); zone->free_area[order].nr_free--; +#ifdef CONFIG_HIGHMEM + if (PageHighMem(page)) + totalhigh_pages -= 1 << order; +#endif for (i = 0; i < (1 << order); i++) SetPageReserved((page+i)); pfn += (1 << order); @@ -6114,6 +6127,7 @@ #ifdef CONFIG_TRANSPARENT_HUGEPAGE {1UL << PG_compound_lock, "compound_lock" }, #endif + {1UL << PG_readaheadunused, "readaheadunused"}, }; static void dump_page_flags(unsigned long flags) --- linux-lts-raring-3.8.0.orig/mm/migrate.c +++ linux-lts-raring-3.8.0/mm/migrate.c @@ -103,7 +103,7 @@ list_del(&page->lru); dec_zone_page_state(page, NR_ISOLATED_ANON + page_is_file_cache(page)); - if (unlikely(balloon_page_movable(page))) + if (unlikely(isolated_balloon_page(page))) balloon_page_putback(page); else putback_lru_page(page); @@ -165,7 +165,7 @@ pte = arch_make_huge_pte(pte, vma, new, 0); } #endif - flush_cache_page(vma, addr, pte_pfn(pte)); + flush_dcache_page(new); set_pte_at(mm, addr, ptep, pte); if (PageHuge(new)) { @@ -200,15 +200,14 @@ * get to the page and wait until migration is finished. * When we return from this function the fault will be retried. */ -void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, - unsigned long address) +static void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep, + spinlock_t *ptl) { - pte_t *ptep, pte; - spinlock_t *ptl; + pte_t pte; swp_entry_t entry; struct page *page; - ptep = pte_offset_map_lock(mm, pmd, address, &ptl); + spin_lock(ptl); pte = *ptep; if (!is_swap_pte(pte)) goto out; @@ -236,6 +235,20 @@ pte_unmap_unlock(ptep, ptl); } +void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, + unsigned long address) +{ + spinlock_t *ptl = pte_lockptr(mm, pmd); + pte_t *ptep = pte_offset_map(pmd, address); + __migration_entry_wait(mm, ptep, ptl); +} + +void migration_entry_wait_huge(struct mm_struct *mm, pte_t *pte) +{ + spinlock_t *ptl = &(mm)->page_table_lock; + __migration_entry_wait(mm, pte, ptl); +} + #ifdef CONFIG_BLOCK /* Returns true if all buffers are successfully locked */ static bool buffer_migrate_lock_buffers(struct buffer_head *head, --- linux-lts-raring-3.8.0.orig/mm/fadvise.c +++ linux-lts-raring-3.8.0/mm/fadvise.c @@ -17,6 +17,7 @@ #include #include #include +#include #include @@ -120,9 +121,22 @@ start_index = (offset+(PAGE_CACHE_SIZE-1)) >> PAGE_CACHE_SHIFT; end_index = (endbyte >> PAGE_CACHE_SHIFT); - if (end_index >= start_index) - invalidate_mapping_pages(mapping, start_index, + if (end_index >= start_index) { + unsigned long count = invalidate_mapping_pages(mapping, + start_index, end_index); + + /* + * If fewer pages were invalidated than expected then + * it is possible that some of the pages were on + * a per-cpu pagevec for a remote CPU. Drain all + * pagevecs and try again. + */ + if (count < (end_index - start_index + 1)) { + lru_add_drain_all(); + invalidate_mapping_pages(mapping, start_index, end_index); + } + } break; default: ret = -EINVAL; --- linux-lts-raring-3.8.0.orig/mm/swap.c +++ linux-lts-raring-3.8.0/mm/swap.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "internal.h" @@ -77,6 +78,19 @@ static void put_compound_page(struct page *page) { + /* + * hugetlbfs pages cannot be split from under us. If this is a + * hugetlbfs page, check refcount on head page and release the page if + * the refcount becomes zero. + */ + if (PageHuge(page)) { + page = compound_head(page); + if (put_page_testzero(page)) + __put_compound_page(page); + + return; + } + if (unlikely(PageTail(page))) { /* __split_huge_page_refcount can run under us */ struct page *page_head = compound_trans_head(page); @@ -180,38 +194,51 @@ * proper PT lock that already serializes against * split_huge_page(). */ - unsigned long flags; bool got = false; - struct page *page_head = compound_trans_head(page); + struct page *page_head; - if (likely(page != page_head && get_page_unless_zero(page_head))) { + /* + * If this is a hugetlbfs page it cannot be split under us. Simply + * increment refcount for the head page. + */ + if (PageHuge(page)) { + page_head = compound_head(page); + atomic_inc(&page_head->_count); + got = true; + } else { + unsigned long flags; + + page_head = compound_trans_head(page); + if (likely(page != page_head && + get_page_unless_zero(page_head))) { + + /* Ref to put_compound_page() comment. */ + if (PageSlab(page_head)) { + if (likely(PageTail(page))) { + __get_page_tail_foll(page, false); + return true; + } else { + put_page(page_head); + return false; + } + } - /* Ref to put_compound_page() comment. */ - if (PageSlab(page_head)) { + /* + * page_head wasn't a dangling pointer but it + * may not be a head page anymore by the time + * we obtain the lock. That is ok as long as it + * can't be freed from under us. + */ + flags = compound_lock_irqsave(page_head); + /* here __split_huge_page_refcount won't run anymore */ if (likely(PageTail(page))) { __get_page_tail_foll(page, false); - return true; - } else { - put_page(page_head); - return false; + got = true; } + compound_unlock_irqrestore(page_head, flags); + if (unlikely(!got)) + put_page(page_head); } - - /* - * page_head wasn't a dangling pointer but it - * may not be a head page anymore by the time - * we obtain the lock. That is ok as long as it - * can't be freed from under us. - */ - flags = compound_lock_irqsave(page_head); - /* here __split_huge_page_refcount won't run anymore */ - if (likely(PageTail(page))) { - __get_page_tail_foll(page, false); - got = true; - } - compound_unlock_irqrestore(page_head, flags); - if (unlikely(!got)) - put_page(page_head); } return got; } --- linux-lts-raring-3.8.0.orig/mm/readahead.c +++ linux-lts-raring-3.8.0/mm/readahead.c @@ -189,6 +189,7 @@ list_add(&page->lru, &page_pool); if (page_idx == nr_to_read - lookahead_size) SetPageReadahead(page); + SetPageReadaheadUnused(page); ret++; } --- linux-lts-raring-3.8.0.orig/mm/hugetlb.c +++ linux-lts-raring-3.8.0/mm/hugetlb.c @@ -690,6 +690,23 @@ } EXPORT_SYMBOL_GPL(PageHuge); +pgoff_t __basepage_index(struct page *page) +{ + struct page *page_head = compound_head(page); + pgoff_t index = page_index(page_head); + unsigned long compound_idx; + + if (!PageHuge(page_head)) + return page_index(page); + + if (compound_order(page_head) >= MAX_ORDER) + compound_idx = page_to_pfn(page) - page_to_pfn(page_head); + else + compound_idx = page - page_head; + + return (index << compound_order(page_head)) + compound_idx; +} + static struct page *alloc_fresh_huge_page_node(struct hstate *h, int nid) { struct page *page; @@ -2127,8 +2144,12 @@ /* Return the number pages of memory we physically have, in PAGE_SIZE units. */ unsigned long hugetlb_total_pages(void) { - struct hstate *h = &default_hstate; - return h->nr_huge_pages * pages_per_huge_page(h); + struct hstate *h; + unsigned long nr_total_pages = 0; + + for_each_hstate(h) + nr_total_pages += h->nr_huge_pages * pages_per_huge_page(h); + return nr_total_pages; } static int hugetlb_acct_memory(struct hstate *h, long delta) @@ -2456,7 +2477,7 @@ mm = vma->vm_mm; - tlb_gather_mmu(&tlb, mm, 0); + tlb_gather_mmu(&tlb, mm, start, end); __unmap_hugepage_range(&tlb, vma, start, end, ref_page); tlb_finish_mmu(&tlb, start, end); } @@ -2823,7 +2844,7 @@ if (ptep) { entry = huge_ptep_get(ptep); if (unlikely(is_hugetlb_entry_migration(entry))) { - migration_entry_wait(mm, (pmd_t *)ptep, address); + migration_entry_wait_huge(mm, ptep); return 0; } else if (unlikely(is_hugetlb_entry_hwpoisoned(entry))) return VM_FAULT_HWPOISON_LARGE | @@ -2961,7 +2982,17 @@ break; } - if (absent || + /* + * We need call hugetlb_fault for both hugepages under migration + * (in which case hugetlb_fault waits for the migration,) and + * hwpoisoned hugepages (in which case we need to prevent the + * caller from accessing to them.) In order to do this, we use + * here is_swap_pte instead of is_hugetlb_entry_migration and + * is_hugetlb_entry_hwpoisoned. This is because it simply covers + * both cases, and because we can't follow correct pages + * directly from any kind of swap entries. + */ + if (absent || is_swap_pte(huge_ptep_get(pte)) || ((flags & FOLL_WRITE) && !pte_write(huge_ptep_get(pte)))) { int ret; --- linux-lts-raring-3.8.0.orig/mm/memory.c +++ linux-lts-raring-3.8.0/mm/memory.c @@ -207,15 +207,16 @@ * tear-down from @mm. The @fullmm argument is used when @mm is without * users and we're going to destroy the full address space (exit/execve). */ -void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, bool fullmm) +void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) { tlb->mm = mm; - tlb->fullmm = fullmm; - tlb->start = -1UL; - tlb->end = 0; + /* Is it from 0 to ~0? */ + tlb->fullmm = !(start | (end+1)); + tlb->need_flush_all = 0; + tlb->start = start; + tlb->end = end; tlb->need_flush = 0; - tlb->fast_mode = (num_possible_cpus() == 1); tlb->local.next = NULL; tlb->local.nr = 0; tlb->local.max = ARRAY_SIZE(tlb->__pages); @@ -239,9 +240,6 @@ tlb_table_flush(tlb); #endif - if (tlb_fast_mode(tlb)) - return; - for (batch = &tlb->local; batch; batch = batch->next) { free_pages_and_swap_cache(batch->pages, batch->nr); batch->nr = 0; @@ -257,8 +255,6 @@ { struct mmu_gather_batch *batch, *next; - tlb->start = start; - tlb->end = end; tlb_flush_mmu(tlb); /* keep the page table cache within bounds */ @@ -283,11 +279,6 @@ VM_BUG_ON(!tlb->need_flush); - if (tlb_fast_mode(tlb)) { - free_page_and_swap_cache(page); - return 1; /* avoid calling tlb_flush_mmu() */ - } - batch = tlb->active; batch->pages[batch->nr++] = page; if (batch->nr == batch->max) { @@ -1207,13 +1198,23 @@ * and page-free while holding it. */ if (force_flush) { + unsigned long old_end; + force_flush = 0; -#ifdef HAVE_GENERIC_MMU_GATHER - tlb->start = addr; - tlb->end = end; -#endif + /* + * Flush the TLB just for the previous segment, + * then update the range to be the remaining + * TLB range. + */ + old_end = tlb->end; + tlb->end = addr; + tlb_flush_mmu(tlb); + + tlb->start = addr; + tlb->end = old_end; + if (addr != end) goto again; } @@ -1400,7 +1401,7 @@ unsigned long end = start + size; lru_add_drain(); - tlb_gather_mmu(&tlb, mm, 0); + tlb_gather_mmu(&tlb, mm, start, end); update_hiwater_rss(mm); mmu_notifier_invalidate_range_start(mm, start, end); for ( ; vma && vma->vm_start < end; vma = vma->vm_next) @@ -1426,7 +1427,7 @@ unsigned long end = address + size; lru_add_drain(); - tlb_gather_mmu(&tlb, mm, 0); + tlb_gather_mmu(&tlb, mm, address, end); update_hiwater_rss(mm); mmu_notifier_invalidate_range_start(mm, address, end); unmap_single_vma(&tlb, vma, address, end, details); @@ -2357,6 +2358,53 @@ } EXPORT_SYMBOL(remap_pfn_range); +/** + * vm_iomap_memory - remap memory to userspace + * @vma: user vma to map to + * @start: start of area + * @len: size of area + * + * This is a simplified io_remap_pfn_range() for common driver use. The + * driver just needs to give us the physical memory range to be mapped, + * we'll figure out the rest from the vma information. + * + * NOTE! Some drivers might want to tweak vma->vm_page_prot first to get + * whatever write-combining details or similar. + */ +int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len) +{ + unsigned long vm_len, pfn, pages; + + /* Check that the physical memory area passed in looks valid */ + if (start + len < start) + return -EINVAL; + /* + * You *really* shouldn't map things that aren't page-aligned, + * but we've historically allowed it because IO memory might + * just have smaller alignment. + */ + len += start & ~PAGE_MASK; + pfn = start >> PAGE_SHIFT; + pages = (len + ~PAGE_MASK) >> PAGE_SHIFT; + if (pfn + pages < pfn) + return -EINVAL; + + /* We start the mapping 'vm_pgoff' pages into the area */ + if (vma->vm_pgoff > pages) + return -EINVAL; + pfn += vma->vm_pgoff; + pages -= vma->vm_pgoff; + + /* Can we fit all of the mapping? */ + vm_len = vma->vm_end - vma->vm_start; + if (vm_len >> PAGE_SHIFT > pages) + return -EINVAL; + + /* Ok, let it rip */ + return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot); +} +EXPORT_SYMBOL(vm_iomap_memory); + static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd, unsigned long addr, unsigned long end, pte_fn_t fn, void *data) @@ -3268,10 +3316,15 @@ else VM_BUG_ON(!PageLocked(vmf.page)); + page = vmf.page; + + /* Mark the page as used on fault. */ + if (PageReadaheadUnused(page)) + ClearPageReadaheadUnused(page); + /* * Should we do an early C-O-W break? */ - page = vmf.page; if (flags & FAULT_FLAG_WRITE) { if (!(vma->vm_flags & VM_SHARED)) { page = cow_page; --- linux-lts-raring-3.8.0.orig/mm/vmscan.c +++ linux-lts-raring-3.8.0/mm/vmscan.c @@ -47,6 +47,7 @@ #include #include +#include #include "internal.h" @@ -977,7 +978,8 @@ LIST_HEAD(clean_pages); list_for_each_entry_safe(page, next, page_list, lru) { - if (page_is_file_cache(page) && !PageDirty(page)) { + if (page_is_file_cache(page) && !PageDirty(page) && + !isolated_balloon_page(page)) { ClearPageActive(page); list_move(&page->lru, &clean_pages); } @@ -2300,7 +2302,7 @@ { unsigned long nr_reclaimed; struct scan_control sc = { - .gfp_mask = gfp_mask, + .gfp_mask = (gfp_mask = memalloc_noio_flags(gfp_mask)), .may_writepage = !laptop_mode, .nr_to_reclaim = SWAP_CLUSTER_MAX, .may_unmap = 1, @@ -3282,7 +3284,7 @@ .may_swap = 1, .nr_to_reclaim = max_t(unsigned long, nr_pages, SWAP_CLUSTER_MAX), - .gfp_mask = gfp_mask, + .gfp_mask = (gfp_mask = memalloc_noio_flags(gfp_mask)), .order = order, .priority = ZONE_RECLAIM_PRIORITY, }; --- linux-lts-raring-3.8.0.orig/mm/process_vm_access.c +++ linux-lts-raring-3.8.0/mm/process_vm_access.c @@ -429,12 +429,6 @@ if (flags != 0) return -EINVAL; - if (!access_ok(VERIFY_READ, lvec, liovcnt * sizeof(*lvec))) - goto out; - - if (!access_ok(VERIFY_READ, rvec, riovcnt * sizeof(*rvec))) - goto out; - if (vm_write) rc = compat_rw_copy_check_uvector(WRITE, lvec, liovcnt, UIO_FASTIOV, iovstack_l, @@ -459,8 +453,6 @@ kfree(iov_r); if (iov_l != iovstack_l) kfree(iov_l); - -out: return rc; } --- linux-lts-raring-3.8.0.orig/mm/filemap.c +++ linux-lts-raring-3.8.0/mm/filemap.c @@ -1304,6 +1304,9 @@ if (size > count) size = count; + if (PageReadaheadUnused(page)) + ClearPageReadaheadUnused(page); + /* * Faults on the destination of a read are common, so do it before * taking the kmap. --- linux-lts-raring-3.8.0.orig/mm/huge_memory.c +++ linux-lts-raring-3.8.0/mm/huge_memory.c @@ -1846,7 +1846,7 @@ BUG_ON(PageCompound(page)); out_unlock: - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); put_anon_vma(anon_vma); out: return ret; @@ -2327,6 +2327,8 @@ goto out; vma = find_vma(mm, address); + if (!vma) + goto out; hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK; hend = vma->vm_end & HPAGE_PMD_MASK; if (address < hstart || address + HPAGE_PMD_SIZE > hend) @@ -2366,9 +2368,14 @@ pte_unmap(pte); spin_lock(&mm->page_table_lock); BUG_ON(!pmd_none(*pmd)); - set_pmd_at(mm, address, pmd, _pmd); + /* + * We can only use set_pmd_at when establishing + * hugepmds and never for establishing regular pmds that + * points to regular pagetables. Use pmd_populate for that + */ + pmd_populate(mm, pmd, pmd_pgtable(_pmd)); spin_unlock(&mm->page_table_lock); - anon_vma_unlock(vma->anon_vma); + anon_vma_unlock_write(vma->anon_vma); goto out; } @@ -2376,7 +2383,7 @@ * All pages are isolated and locked so anon_vma rmap * can't run anymore. */ - anon_vma_unlock(vma->anon_vma); + anon_vma_unlock_write(vma->anon_vma); __collapse_huge_page_copy(pte, new_page, vma, address, ptl); pte_unmap(pte); --- linux-lts-raring-3.8.0.orig/mm/memcontrol.c +++ linux-lts-raring-3.8.0/mm/memcontrol.c @@ -3936,8 +3936,6 @@ if (mem_cgroup_disabled()) return NULL; - VM_BUG_ON(PageSwapCache(page)); - if (PageTransHuge(page)) { nr_pages <<= compound_order(page); VM_BUG_ON(!PageTransHuge(page)); @@ -4033,6 +4031,18 @@ if (page_mapped(page)) return; VM_BUG_ON(page->mapping && !PageAnon(page)); + /* + * If the page is in swap cache, uncharge should be deferred + * to the swap path, which also properly accounts swap usage + * and handles memcg lifetime. + * + * Note that this check is not stable and reclaim may add the + * page to swap cache at any time after this. However, if the + * page is not in swap cache by the time page->mapcount hits + * 0, there won't be any page table references to the swap + * slot, and reclaim will free it and not actually write the + * page to disk. + */ if (PageSwapCache(page)) return; __mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_ANON, false); @@ -5418,7 +5428,13 @@ const struct mem_cgroup_threshold *_a = a; const struct mem_cgroup_threshold *_b = b; - return _a->threshold - _b->threshold; + if (_a->threshold > _b->threshold) + return 1; + + if (_a->threshold < _b->threshold) + return -1; + + return 0; } static int mem_cgroup_oom_notify_cb(struct mem_cgroup *memcg) --- linux-lts-raring-3.8.0.orig/mm/mmap.c +++ linux-lts-raring-3.8.0/mm/mmap.c @@ -800,7 +800,7 @@ anon_vma_interval_tree_post_update_vma(vma); if (adjust_next) anon_vma_interval_tree_post_update_vma(next); - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); } if (mapping) mutex_unlock(&mapping->i_mmap_mutex); @@ -1296,15 +1296,24 @@ file = fget(fd); if (!file) goto out; + if (is_file_hugepages(file)) + len = ALIGN(len, huge_page_size(hstate_file(file))); } else if (flags & MAP_HUGETLB) { struct user_struct *user = NULL; + struct hstate *hs = hstate_sizelog((flags >> MAP_HUGE_SHIFT) & + SHM_HUGE_MASK); + + if (!hs) + return -EINVAL; + + len = ALIGN(len, huge_page_size(hs)); /* * VM_NORESERVE is used because the reservations will be * taken when vm_ops->mmap() is called * A dummy user value is used because we are not locking * memory so no accounting is necessary */ - file = hugetlb_file_setup(HUGETLB_ANON_FILE, addr, len, + file = hugetlb_file_setup(HUGETLB_ANON_FILE, len, VM_NORESERVE, &user, HUGETLB_ANONHUGE_INODE, (flags >> MAP_HUGE_SHIFT) & MAP_HUGE_MASK); @@ -1922,7 +1931,7 @@ /* Check the cache first. */ /* (Cache hit rate is typically around 35%.) */ - vma = mm->mmap_cache; + vma = ACCESS_ONCE(mm->mmap_cache); if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) { struct rb_node *rb_node; @@ -2169,9 +2178,28 @@ return error; } +/* + * Note how expand_stack() refuses to expand the stack all the way to + * abut the next virtual mapping, *unless* that mapping itself is also + * a stack mapping. We want to leave room for a guard page, after all + * (the guard page itself is not added here, that is done by the + * actual page faulting logic) + * + * This matches the behavior of the guard page logic (see mm/memory.c: + * check_stack_guard_page()), which only allows the guard page to be + * removed under these circumstances. + */ #ifdef CONFIG_STACK_GROWSUP int expand_stack(struct vm_area_struct *vma, unsigned long address) { + struct vm_area_struct *next; + + address &= PAGE_MASK; + next = vma->vm_next; + if (next && next->vm_start == address + PAGE_SIZE) { + if (!(next->vm_flags & VM_GROWSUP)) + return -ENOMEM; + } return expand_upwards(vma, address); } @@ -2194,6 +2222,14 @@ #else int expand_stack(struct vm_area_struct *vma, unsigned long address) { + struct vm_area_struct *prev; + + address &= PAGE_MASK; + prev = vma->vm_prev; + if (prev && prev->vm_end == address) { + if (!(prev->vm_flags & VM_GROWSDOWN)) + return -ENOMEM; + } return expand_downwards(vma, address); } @@ -2258,11 +2294,11 @@ struct mmu_gather tlb; lru_add_drain(); - tlb_gather_mmu(&tlb, mm, 0); + tlb_gather_mmu(&tlb, mm, start, end); update_hiwater_rss(mm); unmap_vmas(&tlb, vma, start, end); free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS, - next ? next->vm_start : 0); + next ? next->vm_start : USER_PGTABLES_CEILING); tlb_finish_mmu(&tlb, start, end); } @@ -2635,12 +2671,12 @@ lru_add_drain(); flush_cache_mm(mm); - tlb_gather_mmu(&tlb, mm, 1); + tlb_gather_mmu(&tlb, mm, 0, -1); /* update_hiwater_rss(mm) here? but nobody should be looking */ /* Use -1 here to ensure all VMAs in the mm are unmapped */ unmap_vmas(&tlb, vma, 0, -1); - free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0); + free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, USER_PGTABLES_CEILING); tlb_finish_mmu(&tlb, 0, -1); /* @@ -3001,7 +3037,7 @@ if (!__test_and_clear_bit(0, (unsigned long *) &anon_vma->root->rb_root.rb_node)) BUG(); - anon_vma_unlock(anon_vma); + anon_vma_unlock_write(anon_vma); } } --- linux-lts-raring-3.8.0.orig/mm/shmem.c +++ linux-lts-raring-3.8.0/mm/shmem.c @@ -2487,6 +2487,7 @@ unsigned long inodes; int error = -EINVAL; + config.mpol = NULL; if (shmem_parse_options(data, &config, true)) return error; @@ -2511,8 +2512,13 @@ sbinfo->max_inodes = config.max_inodes; sbinfo->free_inodes = config.max_inodes - inodes; - mpol_put(sbinfo->mpol); - sbinfo->mpol = config.mpol; /* transfers initial ref */ + /* + * Preserve previous mempolicy unless mpol remount option was specified. + */ + if (config.mpol) { + mpol_put(sbinfo->mpol); + sbinfo->mpol = config.mpol; /* transfers initial ref */ + } out: spin_unlock(&sbinfo->stat_lock); return error; --- linux-lts-raring-3.8.0.orig/mm/swap_state.c +++ linux-lts-raring-3.8.0/mm/swap_state.c @@ -314,8 +314,24 @@ * Swap entry may have been freed since our caller observed it. */ err = swapcache_prepare(entry); - if (err == -EEXIST) { /* seems racy */ + if (err == -EEXIST) { radix_tree_preload_end(); + /* + * We might race against get_swap_page() and stumble + * across a SWAP_HAS_CACHE swap_map entry whose page + * has not been brought into the swapcache yet, while + * the other end is scheduled away waiting on discard + * I/O completion at scan_swap_map(). + * + * In order to avoid turning this transitory state + * into a permanent loop around this -EEXIST case + * if !CONFIG_PREEMPT and the I/O completion happens + * to be waiting on the CPU waitqueue where we are now + * busy looping, we just conditionally invoke the + * scheduler here, if there are some more important + * tasks to run. + */ + cond_resched(); continue; } if (err) { /* swp entry is obsolete ? */ --- linux-lts-raring-3.8.0.orig/mm/slab.h +++ linux-lts-raring-3.8.0/mm/slab.h @@ -153,6 +153,8 @@ static inline struct kmem_cache *cache_from_memcg(struct kmem_cache *s, int idx) { + if (!s->memcg_params) + return NULL; return s->memcg_params->memcg_caches[idx]; } --- linux-lts-raring-3.8.0.orig/mm/pagewalk.c +++ linux-lts-raring-3.8.0/mm/pagewalk.c @@ -127,28 +127,7 @@ return 0; } -static struct vm_area_struct* hugetlb_vma(unsigned long addr, struct mm_walk *walk) -{ - struct vm_area_struct *vma; - - /* We don't need vma lookup at all. */ - if (!walk->hugetlb_entry) - return NULL; - - VM_BUG_ON(!rwsem_is_locked(&walk->mm->mmap_sem)); - vma = find_vma(walk->mm, addr); - if (vma && vma->vm_start <= addr && is_vm_hugetlb_page(vma)) - return vma; - - return NULL; -} - #else /* CONFIG_HUGETLB_PAGE */ -static struct vm_area_struct* hugetlb_vma(unsigned long addr, struct mm_walk *walk) -{ - return NULL; -} - static int walk_hugetlb_range(struct vm_area_struct *vma, unsigned long addr, unsigned long end, struct mm_walk *walk) @@ -198,30 +177,53 @@ if (!walk->mm) return -EINVAL; + VM_BUG_ON(!rwsem_is_locked(&walk->mm->mmap_sem)); + pgd = pgd_offset(walk->mm, addr); do { - struct vm_area_struct *vma; + struct vm_area_struct *vma = NULL; next = pgd_addr_end(addr, end); /* - * handle hugetlb vma individually because pagetable walk for - * the hugetlb page is dependent on the architecture and - * we can't handled it in the same manner as non-huge pages. + * This function was not intended to be vma based. + * But there are vma special cases to be handled: + * - hugetlb vma's + * - VM_PFNMAP vma's */ - vma = hugetlb_vma(addr, walk); + vma = find_vma(walk->mm, addr); if (vma) { - if (vma->vm_end < next) + /* + * There are no page structures backing a VM_PFNMAP + * range, so do not allow split_huge_page_pmd(). + */ + if ((vma->vm_start <= addr) && + (vma->vm_flags & VM_PFNMAP)) { next = vma->vm_end; + pgd = pgd_offset(walk->mm, next); + continue; + } /* - * Hugepage is very tightly coupled with vma, so - * walk through hugetlb entries within a given vma. + * Handle hugetlb vma individually because pagetable + * walk for the hugetlb page is dependent on the + * architecture and we can't handled it in the same + * manner as non-huge pages. */ - err = walk_hugetlb_range(vma, addr, next, walk); - if (err) - break; - pgd = pgd_offset(walk->mm, next); - continue; + if (walk->hugetlb_entry && (vma->vm_start <= addr) && + is_vm_hugetlb_page(vma)) { + if (vma->vm_end < next) + next = vma->vm_end; + /* + * Hugepage is very tightly coupled with vma, + * so walk through hugetlb entries within a + * given vma. + */ + err = walk_hugetlb_range(vma, addr, next, walk); + if (err) + break; + pgd = pgd_offset(walk->mm, next); + continue; + } } if (pgd_none_or_clear_bad(pgd)) { --- linux-lts-raring-3.8.0.orig/mm/nommu.c +++ linux-lts-raring-3.8.0/mm/nommu.c @@ -819,7 +819,7 @@ struct vm_area_struct *vma; /* check the cache first */ - vma = mm->mmap_cache; + vma = ACCESS_ONCE(mm->mmap_cache); if (vma && vma->vm_start <= addr && vma->vm_end > addr) return vma; --- linux-lts-raring-3.8.0.orig/mm/page_io.c +++ linux-lts-raring-3.8.0/mm/page_io.c @@ -214,6 +214,7 @@ kiocb.ki_left = PAGE_SIZE; kiocb.ki_nbytes = PAGE_SIZE; + set_page_writeback(page); unlock_page(page); ret = mapping->a_ops->direct_IO(KERNEL_WRITE, &kiocb, &iov, @@ -222,7 +223,23 @@ if (ret == PAGE_SIZE) { count_vm_event(PSWPOUT); ret = 0; + } else { + /* + * In the case of swap-over-nfs, this can be a + * temporary failure if the system has limited + * memory for allocating transmit buffers. + * Mark the page dirty and avoid + * rotate_reclaimable_page but rate-limit the + * messages but do not flag PageError like + * the normal direct-to-bio case as it could + * be temporary. + */ + set_page_dirty(page); + ClearPageReclaim(page); + pr_err_ratelimited("Write error on dio swapfile (%Lu)\n", + page_file_offset(page)); } + end_page_writeback(page); return ret; } --- linux-lts-raring-3.8.0.orig/mm/mincore.c +++ linux-lts-raring-3.8.0/mm/mincore.c @@ -80,6 +80,8 @@ #endif if (page) { present = PageUptodate(page); + if (present) + present |= (PageReadaheadUnused(page) << 7); page_cache_release(page); } --- linux-lts-raring-3.8.0.orig/kernel/rcutree_trace.c +++ linux-lts-raring-3.8.0/kernel/rcutree_trace.c @@ -97,7 +97,7 @@ .open = rcubarrier_open, .read = seq_read, .llseek = no_llseek, - .release = seq_release, + .release = single_release, }; #ifdef CONFIG_RCU_BOOST @@ -208,7 +208,7 @@ .open = rcuexp_open, .read = seq_read, .llseek = no_llseek, - .release = seq_release, + .release = single_release, }; #ifdef CONFIG_RCU_BOOST @@ -308,7 +308,7 @@ .open = rcuhier_open, .read = seq_read, .llseek = no_llseek, - .release = seq_release, + .release = single_release, }; static void show_one_rcugp(struct seq_file *m, struct rcu_state *rsp) @@ -350,7 +350,7 @@ .open = rcugp_open, .read = seq_read, .llseek = no_llseek, - .release = seq_release, + .release = single_release, }; static void print_one_rcu_pending(struct seq_file *m, struct rcu_data *rdp) --- linux-lts-raring-3.8.0.orig/kernel/printk.c +++ linux-lts-raring-3.8.0/kernel/printk.c @@ -362,6 +362,53 @@ log_next_seq++; } +#ifdef CONFIG_SECURITY_DMESG_RESTRICT +int dmesg_restrict = 1; +#else +int dmesg_restrict; +#endif + +static int syslog_action_restricted(int type) +{ + if (dmesg_restrict) + return 1; + /* + * Unless restricted, we allow "read all" and "get buffer size" + * for everybody. + */ + return type != SYSLOG_ACTION_READ_ALL && + type != SYSLOG_ACTION_SIZE_BUFFER; +} + +static int check_syslog_permissions(int type, bool from_file) +{ + /* + * If this is from /proc/kmsg and we've already opened it, then we've + * already done the capabilities checks at open time. + */ + if (from_file && type != SYSLOG_ACTION_OPEN) + return 0; + + if (syslog_action_restricted(type)) { + if (capable(CAP_SYSLOG)) + return 0; + /* + * For historical reasons, accept CAP_SYS_ADMIN too, with + * a warning. + */ + if (capable(CAP_SYS_ADMIN)) { + pr_warn_once("%s (%d): Attempt to access syslog with " + "CAP_SYS_ADMIN but no CAP_SYSLOG " + "(deprecated).\n", + current->comm, task_pid_nr(current)); + return 0; + } + return -EPERM; + } + return security_syslog(type); +} + + /* /dev/kmsg - userspace message inject/listen interface */ struct devkmsg_user { u64 seq; @@ -618,7 +665,8 @@ if ((file->f_flags & O_ACCMODE) == O_WRONLY) return 0; - err = security_syslog(SYSLOG_ACTION_READ_ALL); + err = check_syslog_permissions(SYSLOG_ACTION_READ_ALL, + SYSLOG_FROM_READER); if (err) return err; @@ -811,45 +859,6 @@ } #endif -#ifdef CONFIG_SECURITY_DMESG_RESTRICT -int dmesg_restrict = 1; -#else -int dmesg_restrict; -#endif - -static int syslog_action_restricted(int type) -{ - if (dmesg_restrict) - return 1; - /* Unless restricted, we allow "read all" and "get buffer size" for everybody */ - return type != SYSLOG_ACTION_READ_ALL && type != SYSLOG_ACTION_SIZE_BUFFER; -} - -static int check_syslog_permissions(int type, bool from_file) -{ - /* - * If this is from /proc/kmsg and we've already opened it, then we've - * already done the capabilities checks at open time. - */ - if (from_file && type != SYSLOG_ACTION_OPEN) - return 0; - - if (syslog_action_restricted(type)) { - if (capable(CAP_SYSLOG)) - return 0; - /* For historical reasons, accept CAP_SYS_ADMIN too, with a warning */ - if (capable(CAP_SYS_ADMIN)) { - printk_once(KERN_WARNING "%s (%d): " - "Attempt to access syslog with CAP_SYS_ADMIN " - "but no CAP_SYSLOG (deprecated).\n", - current->comm, task_pid_nr(current)); - return 0; - } - return -EPERM; - } - return 0; -} - #if defined(CONFIG_PRINTK_TIME) static bool printk_time = 1; #else @@ -1247,7 +1256,7 @@ SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) { - return do_syslog(type, buf, len, SYSLOG_FROM_CALL); + return do_syslog(type, buf, len, SYSLOG_FROM_READER); } /* @@ -1358,9 +1367,9 @@ } } logbuf_cpu = UINT_MAX; + raw_spin_unlock(&logbuf_lock); if (wake) up(&console_sem); - raw_spin_unlock(&logbuf_lock); return retval; } --- linux-lts-raring-3.8.0.orig/kernel/sys.c +++ linux-lts-raring-3.8.0/kernel/sys.c @@ -323,7 +323,6 @@ system_state = SYSTEM_RESTART; usermodehelper_disable(); device_shutdown(); - syscore_shutdown(); } /** @@ -357,6 +356,29 @@ } EXPORT_SYMBOL(unregister_reboot_notifier); +/* Add backwards compatibility for stable trees. */ +#ifndef PF_NO_SETAFFINITY +#define PF_NO_SETAFFINITY PF_THREAD_BOUND +#endif + +static void migrate_to_reboot_cpu(void) +{ + /* The boot cpu is always logical cpu 0 */ + int cpu = 0; + + cpu_hotplug_disable(); + + /* Make certain the cpu I'm about to reboot on is online */ + if (!cpu_online(cpu)) + cpu = cpumask_first(cpu_online_mask); + + /* Prevent races with other tasks migrating this task */ + current->flags |= PF_NO_SETAFFINITY; + + /* Make certain I only run on the appropriate processor */ + set_cpus_allowed_ptr(current, cpumask_of(cpu)); +} + /** * kernel_restart - reboot the system * @cmd: pointer to buffer containing command to execute for restart @@ -368,7 +390,8 @@ void kernel_restart(char *cmd) { kernel_restart_prepare(cmd); - disable_nonboot_cpus(); + migrate_to_reboot_cpu(); + syscore_shutdown(); if (!cmd) printk(KERN_EMERG "Restarting system.\n"); else @@ -394,6 +417,7 @@ void kernel_halt(void) { kernel_shutdown_prepare(SYSTEM_HALT); + migrate_to_reboot_cpu(); syscore_shutdown(); printk(KERN_EMERG "System halted.\n"); kmsg_dump(KMSG_DUMP_HALT); @@ -412,7 +436,7 @@ kernel_shutdown_prepare(SYSTEM_POWER_OFF); if (pm_power_off_prepare) pm_power_off_prepare(); - disable_nonboot_cpus(); + migrate_to_reboot_cpu(); syscore_shutdown(); printk(KERN_EMERG "Power down.\n"); kmsg_dump(KMSG_DUMP_POWEROFF); --- linux-lts-raring-3.8.0.orig/kernel/pid.c +++ linux-lts-raring-3.8.0/kernel/pid.c @@ -262,6 +262,7 @@ struct pid_namespace *ns = upid->ns; hlist_del_rcu(&upid->pid_chain); switch(--ns->nr_hashed) { + case 2: case 1: /* When all that is left in the pid namespace * is the reaper wake up the reaper. The reaper --- linux-lts-raring-3.8.0.orig/kernel/cgroup.c +++ linux-lts-raring-3.8.0/kernel/cgroup.c @@ -162,6 +162,9 @@ struct list_head node; struct dentry *dentry; struct cftype *type; + + /* file xattrs */ + struct simple_xattrs xattrs; }; /* @@ -426,12 +429,20 @@ struct cgroup *cgrp = link->cgrp; list_del(&link->cg_link_list); list_del(&link->cgrp_link_list); + + /* + * We may not be holding cgroup_mutex, and if cgrp->count is + * dropped to 0 the cgroup can be destroyed at any time, hence + * rcu_read_lock is used to keep it alive. + */ + rcu_read_lock(); if (atomic_dec_and_test(&cgrp->count) && notify_on_release(cgrp)) { if (taskexit) set_bit(CGRP_RELEASABLE, &cgrp->flags); check_for_release(cgrp); } + rcu_read_unlock(); kfree(link); } @@ -900,13 +911,12 @@ } else { struct cfent *cfe = __d_cfe(dentry); struct cgroup *cgrp = dentry->d_parent->d_fsdata; - struct cftype *cft = cfe->type; WARN_ONCE(!list_empty(&cfe->node) && cgrp != &cgrp->root->top_cgroup, "cfe still linked for %s\n", cfe->type->name); + simple_xattrs_free(&cfe->xattrs); kfree(cfe); - simple_xattrs_free(&cft->xattrs); } iput(inode); } @@ -2058,7 +2068,7 @@ if (!group) return -ENOMEM; /* pre-allocate to guarantee space while iterating in rcu read-side. */ - retval = flex_array_prealloc(group, 0, group_size - 1, GFP_KERNEL); + retval = flex_array_prealloc(group, 0, group_size, GFP_KERNEL); if (retval) goto out_free_group_list; @@ -2545,7 +2555,7 @@ if (S_ISDIR(dentry->d_inode->i_mode)) return &__d_cgrp(dentry)->xattrs; else - return &__d_cft(dentry)->xattrs; + return &__d_cfe(dentry)->xattrs; } static inline int xattr_enabled(struct dentry *dentry) @@ -2721,8 +2731,6 @@ umode_t mode; char name[MAX_CGROUP_TYPE_NAMELEN + MAX_CFTYPE_NAME + 2] = { 0 }; - simple_xattrs_init(&cft->xattrs); - if (subsys && !test_bit(ROOT_NOPREFIX, &cgrp->root->flags)) { strcpy(name, subsys->name); strcat(name, "."); @@ -2747,6 +2755,7 @@ cfe->type = (void *)cft; cfe->dentry = dentry; dentry->d_fsdata = cfe; + simple_xattrs_init(&cfe->xattrs); list_add_tail(&cfe->node, &parent->files); cfe = NULL; } @@ -2804,13 +2813,17 @@ { LIST_HEAD(pending); struct cgroup *cgrp, *n; + struct super_block *sb = ss->root->sb; /* %NULL @cfts indicates abort and don't bother if @ss isn't attached */ - if (cfts && ss->root != &rootnode) { + if (cfts && ss->root != &rootnode && + atomic_inc_not_zero(&sb->s_active)) { list_for_each_entry(cgrp, &ss->root->allcg_list, allcg_node) { dget(cgrp->dentry); list_add_tail(&cgrp->cft_q_node, &pending); } + } else { + sb = NULL; } mutex_unlock(&cgroup_mutex); @@ -2833,6 +2846,9 @@ dput(cgrp->dentry); } + if (sb) + deactivate_super(sb); + mutex_unlock(&cgroup_cft_mutex); } @@ -2992,11 +3008,8 @@ WARN_ON_ONCE(!rcu_read_lock_held()); /* if first iteration, pretend we just visited @cgroup */ - if (!pos) { - if (list_empty(&cgroup->children)) - return NULL; + if (!pos) pos = cgroup; - } /* visit the first child if exists */ next = list_first_or_null_rcu(&pos->children, struct cgroup, sibling); @@ -3004,14 +3017,14 @@ return next; /* no child, visit my or the closest ancestor's next sibling */ - do { + while (pos != cgroup) { next = list_entry_rcu(pos->sibling.next, struct cgroup, sibling); if (&next->sibling != &pos->parent->children) return next; pos = pos->parent; - } while (pos != cgroup); + } return NULL; } @@ -3742,6 +3755,23 @@ } /* + * When dput() is called asynchronously, if umount has been done and + * then deactivate_super() in cgroup_free_fn() kills the superblock, + * there's a small window that vfs will see the root dentry with non-zero + * refcnt and trigger BUG(). + * + * That's why we hold a reference before dput() and drop it right after. + */ +static void cgroup_dput(struct cgroup *cgrp) +{ + struct super_block *sb = cgrp->root->sb; + + atomic_inc(&sb->s_active); + dput(cgrp->dentry); + deactivate_super(sb); +} + +/* * Unregister event and free resources. * * Gets called from workqueue. @@ -3756,7 +3786,7 @@ eventfd_ctx_put(event->eventfd); kfree(event); - dput(cgrp->dentry); + cgroup_dput(cgrp); } /* @@ -4018,12 +4048,8 @@ { struct cgroup_subsys_state *css = container_of(work, struct cgroup_subsys_state, dput_work); - struct dentry *dentry = css->cgroup->dentry; - struct super_block *sb = dentry->d_sb; - atomic_inc(&sb->s_active); - dput(dentry); - deactivate_super(sb); + cgroup_dput(css->cgroup); } static void init_cgroup_css(struct cgroup_subsys_state *css, --- linux-lts-raring-3.8.0.orig/kernel/sysctl_binary.c +++ linux-lts-raring-3.8.0/kernel/sysctl_binary.c @@ -1194,9 +1194,10 @@ /* Convert the decnet address to binary */ result = -EIO; - nodep = strchr(buf, '.') + 1; + nodep = strchr(buf, '.'); if (!nodep) goto out; + ++nodep; area = simple_strtoul(buf, NULL, 10); node = simple_strtoul(nodep, NULL, 10); --- linux-lts-raring-3.8.0.orig/kernel/posix-cpu-timers.c +++ linux-lts-raring-3.8.0/kernel/posix-cpu-timers.c @@ -1401,8 +1401,10 @@ while (!signal_pending(current)) { if (timer.it.cpu.expires.sched == 0) { /* - * Our timer fired and was reset. + * Our timer fired and was reset, below + * deletion can not fail. */ + posix_cpu_timer_del(&timer); spin_unlock_irq(&timer.it_lock); return 0; } @@ -1420,9 +1422,26 @@ * We were interrupted by a signal. */ sample_to_timespec(which_clock, timer.it.cpu.expires, rqtp); - posix_cpu_timer_set(&timer, 0, &zero_it, it); + error = posix_cpu_timer_set(&timer, 0, &zero_it, it); + if (!error) { + /* + * Timer is now unarmed, deletion can not fail. + */ + posix_cpu_timer_del(&timer); + } spin_unlock_irq(&timer.it_lock); + while (error == TIMER_RETRY) { + /* + * We need to handle case when timer was or is in the + * middle of firing. In other cases we already freed + * resources. + */ + spin_lock_irq(&timer.it_lock); + error = posix_cpu_timer_del(&timer); + spin_unlock_irq(&timer.it_lock); + } + if ((it->it_value.tv_sec | it->it_value.tv_nsec) == 0) { /* * It actually did fire already. --- linux-lts-raring-3.8.0.orig/kernel/kmod.c +++ linux-lts-raring-3.8.0/kernel/kmod.c @@ -561,6 +561,11 @@ int retval = 0; helper_lock(); + if (!sub_info->path) { + retval = -EINVAL; + goto out; + } + if (sub_info->path[0] == '\0') goto out; --- linux-lts-raring-3.8.0.orig/kernel/posix-timers.c +++ linux-lts-raring-3.8.0/kernel/posix-timers.c @@ -639,6 +639,13 @@ { struct k_itimer *timr; + /* + * timer_t could be any type >= int and we want to make sure any + * @timer_id outside positive int range fails lookup. + */ + if ((unsigned long long)timer_id > INT_MAX) + return NULL; + rcu_read_lock(); timr = idr_find(&posix_timers_id, (int)timer_id); if (timr) { --- linux-lts-raring-3.8.0.orig/kernel/workqueue.c +++ linux-lts-raring-3.8.0/kernel/workqueue.c @@ -138,6 +138,7 @@ }; struct work_struct *current_work; /* L: work being processed */ + work_func_t current_func; /* L: current_work's fn */ struct cpu_workqueue_struct *current_cwq; /* L: current_work's cwq */ struct list_head scheduled; /* L: scheduled works */ struct task_struct *task; /* I: worker task */ @@ -910,7 +911,8 @@ struct hlist_node *tmp; hlist_for_each_entry(worker, tmp, bwh, hentry) - if (worker->current_work == work) + if (worker->current_work == work && + worker->current_func == work->func) return worker; return NULL; } @@ -920,9 +922,27 @@ * @gcwq: gcwq of interest * @work: work to find worker for * - * Find a worker which is executing @work on @gcwq. This function is - * identical to __find_worker_executing_work() except that this - * function calculates @bwh itself. + * Find a worker which is executing @work on @gcwq by searching + * @gcwq->busy_hash which is keyed by the address of @work. For a worker + * to match, its current execution should match the address of @work and + * its work function. This is to avoid unwanted dependency between + * unrelated work executions through a work item being recycled while still + * being executed. + * + * This is a bit tricky. A work item may be freed once its execution + * starts and nothing prevents the freed area from being recycled for + * another work item. If the same work item address ends up being reused + * before the original execution finishes, workqueue will identify the + * recycled work item as currently executing and make it wait until the + * current execution finishes, introducing an unwanted dependency. + * + * This function checks the work item address, work function and workqueue + * to avoid false positives. Note that this isn't complete as one may + * construct a work function which can introduce dependency onto itself + * through a recycled work item. Well, if somebody wants to shoot oneself + * in the foot that badly, there's only so much we can do, and if such + * deadlock actually occurs, it should be easy to locate the culprit work + * function. * * CONTEXT: * spin_lock_irq(gcwq->lock). @@ -1352,7 +1372,7 @@ /* should have been called from irqsafe timer with irq already off */ __queue_work(dwork->cpu, cwq->wq, &dwork->work); } -EXPORT_SYMBOL_GPL(delayed_work_timer_fn); +EXPORT_SYMBOL(delayed_work_timer_fn); static void __queue_delayed_work(int cpu, struct workqueue_struct *wq, struct delayed_work *dwork, unsigned long delay) @@ -2168,7 +2188,6 @@ struct global_cwq *gcwq = pool->gcwq; struct hlist_head *bwh = busy_worker_head(gcwq, work); bool cpu_intensive = cwq->wq->flags & WQ_CPU_INTENSIVE; - work_func_t f = work->func; int work_color; struct worker *collision; #ifdef CONFIG_LOCKDEP @@ -2208,6 +2227,7 @@ debug_work_deactivate(work); hlist_add_head(&worker->hentry, bwh); worker->current_work = work; + worker->current_func = work->func; worker->current_cwq = cwq; work_color = get_work_color(work); @@ -2240,7 +2260,7 @@ lock_map_acquire_read(&cwq->wq->lockdep_map); lock_map_acquire(&lockdep_map); trace_workqueue_execute_start(work); - f(work); + worker->current_func(work); /* * While we must be careful to not use "work" after this, the trace * point will only record its address. @@ -2252,11 +2272,21 @@ if (unlikely(in_atomic() || lockdep_depth(current) > 0)) { pr_err("BUG: workqueue leaked lock or atomic: %s/0x%08x/%d\n" " last function: %pf\n", - current->comm, preempt_count(), task_pid_nr(current), f); + current->comm, preempt_count(), task_pid_nr(current), + worker->current_func); debug_show_held_locks(current); dump_stack(); } + /* + * The following prevents a kworker from hogging CPU on !PREEMPT + * kernels, where a requeueing work item waiting for something to + * happen could deadlock with stop_machine as such work item could + * indefinitely requeue itself while all other CPUs are trapped in + * stop_machine. + */ + cond_resched(); + spin_lock_irq(&gcwq->lock); /* clear cpu intensive status */ @@ -2266,6 +2296,7 @@ /* we're done with it, release */ hlist_del_init(&worker->hentry); worker->current_work = NULL; + worker->current_func = NULL; worker->current_cwq = NULL; cwq_dec_nr_in_flight(cwq, work_color); } --- linux-lts-raring-3.8.0.orig/kernel/user.c +++ linux-lts-raring-3.8.0/kernel/user.c @@ -53,6 +53,8 @@ .owner = GLOBAL_ROOT_UID, .group = GLOBAL_ROOT_GID, .proc_inum = PROC_USER_INIT_INO, + .may_mount_sysfs = true, + .may_mount_proc = true, }; EXPORT_SYMBOL_GPL(init_user_ns); --- linux-lts-raring-3.8.0.orig/kernel/Makefile +++ linux-lts-raring-3.8.0/kernel/Makefile @@ -185,7 +185,7 @@ openssl req -new -nodes -utf8 $(sign_key_with_hash) -days 36500 -batch \ -x509 -config x509.genkey \ -outform DER -out signing_key.x509 \ - -keyout signing_key.priv + -keyout signing_key.priv 2>&1 @echo "###" @echo "### Key pair generated." @echo "###" --- linux-lts-raring-3.8.0.orig/kernel/module.c +++ linux-lts-raring-3.8.0/kernel/module.c @@ -2930,7 +2930,6 @@ { /* Module within temporary copy. */ struct module *mod; - Elf_Shdr *pcpusec; int err; mod = setup_load_info(info, flags); @@ -2945,17 +2944,10 @@ err = module_frob_arch_sections(info->hdr, info->sechdrs, info->secstrings, mod); if (err < 0) - goto out; + return ERR_PTR(err); - pcpusec = &info->sechdrs[info->index.pcpu]; - if (pcpusec->sh_size) { - /* We have a special allocation for this section. */ - err = percpu_modalloc(mod, - pcpusec->sh_size, pcpusec->sh_addralign); - if (err) - goto out; - pcpusec->sh_flags &= ~(unsigned long)SHF_ALLOC; - } + /* We will do a special allocation for per-cpu sections later. */ + info->sechdrs[info->index.pcpu].sh_flags &= ~(unsigned long)SHF_ALLOC; /* Determine total sizes, and put offsets in sh_entsize. For now this is done generically; there doesn't appear to be any @@ -2966,17 +2958,22 @@ /* Allocate and move to the final place */ err = move_module(mod, info); if (err) - goto free_percpu; + return ERR_PTR(err); /* Module has been copied to its final place now: return it. */ mod = (void *)info->sechdrs[info->index.mod].sh_addr; kmemleak_load_module(mod, info); return mod; +} -free_percpu: - percpu_modfree(mod); -out: - return ERR_PTR(err); +static int alloc_module_percpu(struct module *mod, struct load_info *info) +{ + Elf_Shdr *pcpusec = &info->sechdrs[info->index.pcpu]; + if (!pcpusec->sh_size) + return 0; + + /* We have a special allocation for this section. */ + return percpu_modalloc(mod, pcpusec->sh_size, pcpusec->sh_addralign); } /* mod is no longer valid after this! */ @@ -3196,6 +3193,11 @@ add_taint_module(mod, TAINT_FORCED_MODULE); #endif + /* To avoid stressing percpu allocator, do this once we're unique. */ + err = alloc_module_percpu(mod, info); + if (err) + goto unlink_mod; + /* Now module is in final location, initialize linked lists, etc. */ err = module_unload_init(mod); if (err) --- linux-lts-raring-3.8.0.orig/kernel/signal.c +++ linux-lts-raring-3.8.0/kernel/signal.c @@ -485,6 +485,9 @@ if (force_default || ka->sa.sa_handler != SIG_IGN) ka->sa.sa_handler = SIG_DFL; ka->sa.sa_flags = 0; +#ifdef __ARCH_HAS_SA_RESTORER + ka->sa.sa_restorer = NULL; +#endif sigemptyset(&ka->sa.sa_mask); ka++; } @@ -2877,7 +2880,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig) { - struct siginfo info; + struct siginfo info = {}; info.si_signo = sig; info.si_errno = 0; --- linux-lts-raring-3.8.0.orig/kernel/futex_compat.c +++ linux-lts-raring-3.8.0/kernel/futex_compat.c @@ -142,8 +142,6 @@ if (!futex_cmpxchg_enabled) return -ENOSYS; - WARN_ONCE(1, "deprecated: get_robust_list will be deleted in 2013.\n"); - rcu_read_lock(); ret = -ESRCH; --- linux-lts-raring-3.8.0.orig/kernel/capability.c +++ linux-lts-raring-3.8.0/kernel/capability.c @@ -393,6 +393,30 @@ EXPORT_SYMBOL(ns_capable); /** + * file_ns_capable - Determine if the file's opener had a capability in effect + * @file: The file we want to check + * @ns: The usernamespace we want the capability in + * @cap: The capability to be tested for + * + * Return true if task that opened the file had a capability in effect + * when the file was opened. + * + * This does not set PF_SUPERPRIV because the caller may not + * actually be privileged. + */ +bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap) +{ + if (WARN_ON_ONCE(!cap_valid(cap))) + return false; + + if (security_capable(file->f_cred, ns, cap) == 0) + return true; + + return false; +} +EXPORT_SYMBOL(file_ns_capable); + +/** * capable - Determine if the current task has a superior capability in effect * @cap: The capability to be tested for * --- linux-lts-raring-3.8.0.orig/kernel/cpuset.c +++ linux-lts-raring-3.8.0/kernel/cpuset.c @@ -2511,8 +2511,16 @@ dentry = task_cs(tsk)->css.cgroup->dentry; spin_lock(&cpuset_buffer_lock); - snprintf(cpuset_name, CPUSET_NAME_LEN, - dentry ? (const char *)dentry->d_name.name : "/"); + + if (!dentry) { + strcpy(cpuset_name, "/"); + } else { + spin_lock(&dentry->d_lock); + strlcpy(cpuset_name, (const char *)dentry->d_name.name, + CPUSET_NAME_LEN); + spin_unlock(&dentry->d_lock); + } + nodelist_scnprintf(cpuset_nodelist, CPUSET_NODELIST_LEN, tsk->mems_allowed); printk(KERN_INFO "%s cpuset=%s mems_allowed=%s\n", --- linux-lts-raring-3.8.0.orig/kernel/kthread.c +++ linux-lts-raring-3.8.0/kernel/kthread.c @@ -124,12 +124,12 @@ static void __kthread_parkme(struct kthread *self) { - __set_current_state(TASK_INTERRUPTIBLE); + __set_current_state(TASK_PARKED); while (test_bit(KTHREAD_SHOULD_PARK, &self->flags)) { if (!test_and_set_bit(KTHREAD_IS_PARKED, &self->flags)) complete(&self->parked); schedule(); - __set_current_state(TASK_INTERRUPTIBLE); + __set_current_state(TASK_PARKED); } clear_bit(KTHREAD_IS_PARKED, &self->flags); __set_current_state(TASK_RUNNING); @@ -256,8 +256,13 @@ } EXPORT_SYMBOL(kthread_create_on_node); -static void __kthread_bind(struct task_struct *p, unsigned int cpu) +static void __kthread_bind(struct task_struct *p, unsigned int cpu, long state) { + /* Must have done schedule() in kthread() before we set_task_cpu */ + if (!wait_task_inactive(p, state)) { + WARN_ON(1); + return; + } /* It's safe because the task is inactive. */ do_set_cpus_allowed(p, cpumask_of(cpu)); p->flags |= PF_THREAD_BOUND; @@ -274,12 +279,7 @@ */ void kthread_bind(struct task_struct *p, unsigned int cpu) { - /* Must have done schedule() in kthread() before we set_task_cpu */ - if (!wait_task_inactive(p, TASK_UNINTERRUPTIBLE)) { - WARN_ON(1); - return; - } - __kthread_bind(p, cpu); + __kthread_bind(p, cpu, TASK_UNINTERRUPTIBLE); } EXPORT_SYMBOL(kthread_bind); @@ -324,6 +324,22 @@ return NULL; } +static void __kthread_unpark(struct task_struct *k, struct kthread *kthread) +{ + clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags); + /* + * We clear the IS_PARKED bit here as we don't wait + * until the task has left the park code. So if we'd + * park before that happens we'd see the IS_PARKED bit + * which might be about to be cleared. + */ + if (test_and_clear_bit(KTHREAD_IS_PARKED, &kthread->flags)) { + if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags)) + __kthread_bind(k, kthread->cpu, TASK_PARKED); + wake_up_state(k, TASK_PARKED); + } +} + /** * kthread_unpark - unpark a thread created by kthread_create(). * @k: thread created by kthread_create(). @@ -336,20 +352,8 @@ { struct kthread *kthread = task_get_live_kthread(k); - if (kthread) { - clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags); - /* - * We clear the IS_PARKED bit here as we don't wait - * until the task has left the park code. So if we'd - * park before that happens we'd see the IS_PARKED bit - * which might be about to be cleared. - */ - if (test_and_clear_bit(KTHREAD_IS_PARKED, &kthread->flags)) { - if (test_bit(KTHREAD_IS_PER_CPU, &kthread->flags)) - __kthread_bind(k, kthread->cpu); - wake_up_process(k); - } - } + if (kthread) + __kthread_unpark(k, kthread); put_task_struct(k); } @@ -407,7 +411,7 @@ trace_sched_kthread_stop(k); if (kthread) { set_bit(KTHREAD_SHOULD_STOP, &kthread->flags); - clear_bit(KTHREAD_SHOULD_PARK, &kthread->flags); + __kthread_unpark(k, kthread); wake_up_process(k); wait_for_completion(&kthread->exited); } --- linux-lts-raring-3.8.0.orig/kernel/timer.c +++ linux-lts-raring-3.8.0/kernel/timer.c @@ -147,9 +147,11 @@ /* now that we have rounded, subtract the extra skew again */ j -= cpu * 3; - if (j <= jiffies) /* rounding ate our timeout entirely; */ - return original; - return j; + /* + * Make sure j is still in the future. Otherwise return the + * unmodified value. + */ + return time_is_after_jiffies(j) ? j : original; } /** @@ -1678,12 +1680,12 @@ boot_done = 1; base = &boot_tvec_bases; } + spin_lock_init(&base->lock); tvec_base_done[cpu] = 1; } else { base = per_cpu(tvec_bases, cpu); } - spin_lock_init(&base->lock); for (j = 0; j < TVN_SIZE; j++) { INIT_LIST_HEAD(base->tv5.vec + j); --- linux-lts-raring-3.8.0.orig/kernel/user_namespace.c +++ linux-lts-raring-3.8.0/kernel/user_namespace.c @@ -21,10 +21,12 @@ #include #include #include +#include static struct kmem_cache *user_ns_cachep __read_mostly; -static bool new_idmap_permitted(struct user_namespace *ns, int cap_setid, +static bool new_idmap_permitted(const struct file *file, + struct user_namespace *ns, int cap_setid, struct uid_gid_map *map); static void set_cred_user_ns(struct cred *cred, struct user_namespace *user_ns) @@ -60,6 +62,18 @@ kgid_t group = new->egid; int ret; + if (parent_ns->level > 32) + return -EUSERS; + + /* + * Verify that we can not violate the policy of which files + * may be accessed that is specified by the root directory, + * by verifing that the root directory is at the root of the + * mount namespace which allows all files to be accessed. + */ + if (current_chrooted()) + return -EPERM; + /* The creator needs a mapping in the parent user namespace * or else we won't be able to reasonably tell userspace who * created a user_namespace. @@ -81,27 +95,35 @@ kref_init(&ns->kref); /* Leave the new->user_ns reference with the new user namespace. */ ns->parent = parent_ns; + ns->level = parent_ns->level + 1; ns->owner = owner; ns->group = group; set_cred_user_ns(new, ns); + update_mnt_policy(ns); + return 0; } int unshare_userns(unsigned long unshare_flags, struct cred **new_cred) { struct cred *cred; + int err = -ENOMEM; if (!(unshare_flags & CLONE_NEWUSER)) return 0; cred = prepare_creds(); - if (!cred) - return -ENOMEM; + if (cred) { + err = create_user_ns(cred); + if (err) + put_cred(cred); + else + *new_cred = cred; + } - *new_cred = cred; - return create_user_ns(cred); + return err; } void free_user_ns(struct kref *kref) @@ -563,10 +585,10 @@ if (map->nr_extents != 0) goto out; - /* Require the appropriate privilege CAP_SETUID or CAP_SETGID - * over the user namespace in order to set the id mapping. + /* + * Adjusting namespace settings requires capabilities on the target. */ - if (cap_valid(cap_setid) && !ns_capable(ns, cap_setid)) + if (cap_valid(cap_setid) && !file_ns_capable(file, ns, CAP_SYS_ADMIN)) goto out; /* Get a buffer */ @@ -654,7 +676,7 @@ ret = -EPERM; /* Validate the user is allowed to use user id's mapped to. */ - if (!new_idmap_permitted(ns, cap_setid, &new_map)) + if (!new_idmap_permitted(file, ns, cap_setid, &new_map)) goto out; /* Map the lower ids from the parent user namespace to the @@ -741,7 +763,8 @@ &ns->projid_map, &ns->parent->projid_map); } -static bool new_idmap_permitted(struct user_namespace *ns, int cap_setid, +static bool new_idmap_permitted(const struct file *file, + struct user_namespace *ns, int cap_setid, struct uid_gid_map *new_map) { /* Allow mapping to your own filesystem ids */ @@ -749,12 +772,12 @@ u32 id = new_map->extent[0].lower_first; if (cap_setid == CAP_SETUID) { kuid_t uid = make_kuid(ns->parent, id); - if (uid_eq(uid, current_fsuid())) + if (uid_eq(uid, file->f_cred->fsuid)) return true; } else if (cap_setid == CAP_SETGID) { kgid_t gid = make_kgid(ns->parent, id); - if (gid_eq(gid, current_fsgid())) + if (gid_eq(gid, file->f_cred->fsgid)) return true; } } @@ -765,8 +788,10 @@ /* Allow the specified ids if we have the appropriate capability * (CAP_SETUID or CAP_SETGID) over the parent user namespace. + * And the opener of the id file also had the approprpiate capability. */ - if (ns_capable(ns->parent, cap_setid)) + if (ns_capable(ns->parent, cap_setid) && + file_ns_capable(file, ns->parent, cap_setid)) return true; return false; @@ -803,6 +828,9 @@ if (atomic_read(¤t->mm->mm_users) > 1) return -EINVAL; + if (current->fs->users != 1) + return -EINVAL; + if (!ns_capable(user_ns, CAP_SYS_ADMIN)) return -EPERM; --- linux-lts-raring-3.8.0.orig/kernel/audit_tree.c +++ linux-lts-raring-3.8.0/kernel/audit_tree.c @@ -617,9 +617,9 @@ } spin_unlock(&hash_lock); trim_marked(tree); - put_tree(tree); drop_collected_mounts(root_mnt); skip_it: + put_tree(tree); mutex_lock(&audit_filter_mutex); } list_del(&cursor); --- linux-lts-raring-3.8.0.orig/kernel/timeconst.pl +++ linux-lts-raring-3.8.0/kernel/timeconst.pl @@ -369,10 +369,8 @@ die "Usage: $0 HZ\n"; } - @val = @{$canned_values{$hz}}; - if (!defined(@val)) { - @val = compute_values($hz); - } + $cv = $canned_values{$hz}; + @val = defined($cv) ? @$cv : compute_values($hz); output($hz, @val); } exit 0; --- linux-lts-raring-3.8.0.orig/kernel/pid_namespace.c +++ linux-lts-raring-3.8.0/kernel/pid_namespace.c @@ -181,6 +181,7 @@ int nr; int rc; struct task_struct *task, *me = current; + int init_pids = thread_group_leader(me) ? 1 : 2; /* Don't allow any more processes into the pid namespace */ disable_pid_allocation(pid_ns); @@ -230,7 +231,7 @@ */ for (;;) { set_current_state(TASK_UNINTERRUPTIBLE); - if (pid_ns->nr_hashed == 1) + if (pid_ns->nr_hashed == init_pids) break; schedule(); } --- linux-lts-raring-3.8.0.orig/kernel/futex.c +++ linux-lts-raring-3.8.0/kernel/futex.c @@ -60,6 +60,7 @@ #include #include #include +#include #include @@ -363,7 +364,7 @@ } else { key->both.offset |= FUT_OFF_INODE; /* inode-based key */ key->shared.inode = page_head->mapping->host; - key->shared.pgoff = page_head->index; + key->shared.pgoff = basepage_index(page); } get_futex_key_refs(key); @@ -2471,8 +2472,6 @@ if (!futex_cmpxchg_enabled) return -ENOSYS; - WARN_ONCE(1, "deprecated: get_robust_list will be deleted in 2013.\n"); - rcu_read_lock(); ret = -ESRCH; --- linux-lts-raring-3.8.0.orig/kernel/cpu.c +++ linux-lts-raring-3.8.0/kernel/cpu.c @@ -133,6 +133,27 @@ mutex_unlock(&cpu_hotplug.lock); } +/* + * Wait for currently running CPU hotplug operations to complete (if any) and + * disable future CPU hotplug (from sysfs). The 'cpu_add_remove_lock' protects + * the 'cpu_hotplug_disabled' flag. The same lock is also acquired by the + * hotplug path before performing hotplug operations. So acquiring that lock + * guarantees mutual exclusion from any currently running hotplug operations. + */ +void cpu_hotplug_disable(void) +{ + cpu_maps_update_begin(); + cpu_hotplug_disabled = 1; + cpu_maps_update_done(); +} + +void cpu_hotplug_enable(void) +{ + cpu_maps_update_begin(); + cpu_hotplug_disabled = 0; + cpu_maps_update_done(); +} + #else /* #if CONFIG_HOTPLUG_CPU */ static void cpu_hotplug_begin(void) {} static void cpu_hotplug_done(void) {} @@ -537,36 +558,6 @@ core_initcall(alloc_frozen_cpus); /* - * Prevent regular CPU hotplug from racing with the freezer, by disabling CPU - * hotplug when tasks are about to be frozen. Also, don't allow the freezer - * to continue until any currently running CPU hotplug operation gets - * completed. - * To modify the 'cpu_hotplug_disabled' flag, we need to acquire the - * 'cpu_add_remove_lock'. And this same lock is also taken by the regular - * CPU hotplug path and released only after it is complete. Thus, we - * (and hence the freezer) will block here until any currently running CPU - * hotplug operation gets completed. - */ -void cpu_hotplug_disable_before_freeze(void) -{ - cpu_maps_update_begin(); - cpu_hotplug_disabled = 1; - cpu_maps_update_done(); -} - - -/* - * When tasks have been thawed, re-enable regular CPU hotplug (which had been - * disabled while beginning to freeze tasks). - */ -void cpu_hotplug_enable_after_thaw(void) -{ - cpu_maps_update_begin(); - cpu_hotplug_disabled = 0; - cpu_maps_update_done(); -} - -/* * When callbacks for CPU hotplug notifications are being executed, we must * ensure that the state of the system with respect to the tasks being frozen * or not, as reported by the notification, remains unchanged *throughout the @@ -585,12 +576,12 @@ case PM_SUSPEND_PREPARE: case PM_HIBERNATION_PREPARE: - cpu_hotplug_disable_before_freeze(); + cpu_hotplug_disable(); break; case PM_POST_SUSPEND: case PM_POST_HIBERNATION: - cpu_hotplug_enable_after_thaw(); + cpu_hotplug_enable(); break; default: --- linux-lts-raring-3.8.0.orig/kernel/params.c +++ linux-lts-raring-3.8.0/kernel/params.c @@ -90,8 +90,8 @@ unsigned num_params, s16 min_level, s16 max_level, - int (*handle_unknown)(char *param, char *val, - const char *doing)) + int (*handle_arg)(char *param, char *val, + const char *doing, int known)) { unsigned int i; int err; @@ -106,6 +106,14 @@ if (!val && params[i].ops->set != param_set_bool && params[i].ops->set != param_set_bint) return -EINVAL; + if (handle_arg) { + int ret; + pr_debug("Valid argument: calling %p\n", + handle_arg); + ret = handle_arg(param, val, doing, 1); + if (ret) + return ret; + } pr_debug("handling %s with %p\n", param, params[i].ops->set); mutex_lock(¶m_lock); @@ -115,9 +123,9 @@ } } - if (handle_unknown) { + if (handle_arg) { pr_debug("doing %s: %s='%s'\n", doing, param, val); - return handle_unknown(param, val, doing); + return handle_arg(param, val, doing, 0); } pr_debug("Unknown argument '%s'\n", param); @@ -183,7 +191,7 @@ unsigned num, s16 min_level, s16 max_level, - int (*unknown)(char *param, char *val, const char *doing)) + int (*handle_arg)(char *param, char *val, const char *doing, int arg)) { char *param, *val; @@ -200,7 +208,7 @@ args = next_arg(args, ¶m, &val); irq_was_disabled = irqs_disabled(); ret = parse_one(param, val, doing, params, num, - min_level, max_level, unknown); + min_level, max_level, handle_arg); if (irq_was_disabled && !irqs_disabled()) pr_warn("%s: option '%s' enabled irq's!\n", doing, param); --- linux-lts-raring-3.8.0.orig/kernel/audit.c +++ linux-lts-raring-3.8.0/kernel/audit.c @@ -1107,7 +1107,7 @@ static void wait_for_auditd(unsigned long sleep_time) { DECLARE_WAITQUEUE(wait, current); - set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_UNINTERRUPTIBLE); add_wait_queue(&audit_backlog_wait, &wait); if (audit_backlog_limit && --- linux-lts-raring-3.8.0.orig/kernel/hrtimer.c +++ linux-lts-raring-3.8.0/kernel/hrtimer.c @@ -61,6 +61,7 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) = { + .lock = __RAW_SPIN_LOCK_UNLOCKED(hrtimer_bases.lock), .clock_base = { { @@ -297,6 +298,10 @@ } else { unsigned long rem = do_div(nsec, NSEC_PER_SEC); + /* Make sure nsec fits into long */ + if (unlikely(nsec > KTIME_SEC_MAX)) + return (ktime_t){ .tv64 = KTIME_MAX }; + tmp = ktime_set((long)nsec, rem); } @@ -640,21 +645,9 @@ * and expiry check is done in the hrtimer_interrupt or in the softirq. */ static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, - struct hrtimer_clock_base *base, - int wakeup) + struct hrtimer_clock_base *base) { - if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) { - if (wakeup) { - raw_spin_unlock(&base->cpu_base->lock); - raise_softirq_irqoff(HRTIMER_SOFTIRQ); - raw_spin_lock(&base->cpu_base->lock); - } else - __raise_softirq_irqoff(HRTIMER_SOFTIRQ); - - return 1; - } - - return 0; + return base->cpu_base->hres_active && hrtimer_reprogram(timer, base); } static inline ktime_t hrtimer_update_base(struct hrtimer_cpu_base *base) @@ -735,8 +728,7 @@ static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base, int skip_equal) { } static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer, - struct hrtimer_clock_base *base, - int wakeup) + struct hrtimer_clock_base *base) { return 0; } @@ -995,8 +987,21 @@ * * XXX send_remote_softirq() ? */ - if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases)) - hrtimer_enqueue_reprogram(timer, new_base, wakeup); + if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases) + && hrtimer_enqueue_reprogram(timer, new_base)) { + if (wakeup) { + /* + * We need to drop cpu_base->lock to avoid a + * lock ordering issue vs. rq->lock. + */ + raw_spin_unlock(&new_base->cpu_base->lock); + raise_softirq_irqoff(HRTIMER_SOFTIRQ); + local_irq_restore(flags); + return ret; + } else { + __raise_softirq_irqoff(HRTIMER_SOFTIRQ); + } + } unlock_hrtimer_base(timer, &flags); @@ -1307,6 +1312,8 @@ expires = ktime_sub(hrtimer_get_expires(timer), base->offset); + if (expires.tv64 < 0) + expires.tv64 = KTIME_MAX; if (expires.tv64 < expires_next.tv64) expires_next = expires; break; @@ -1640,8 +1647,6 @@ struct hrtimer_cpu_base *cpu_base = &per_cpu(hrtimer_bases, cpu); int i; - raw_spin_lock_init(&cpu_base->lock); - for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { cpu_base->clock_base[i].cpu_base = cpu_base; timerqueue_init_head(&cpu_base->clock_base[i].active); --- linux-lts-raring-3.8.0.orig/kernel/fork.c +++ linux-lts-raring-3.8.0/kernel/fork.c @@ -1141,6 +1141,9 @@ if ((clone_flags & (CLONE_NEWNS|CLONE_FS)) == (CLONE_NEWNS|CLONE_FS)) return ERR_PTR(-EINVAL); + if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS)) + return ERR_PTR(-EINVAL); + /* * Thread groups must share signals as well, and detached threads * can only be started up within the thread group. @@ -1167,10 +1170,11 @@ return ERR_PTR(-EINVAL); /* - * If the new process will be in a different pid namespace - * don't allow the creation of threads. + * If the new process will be in a different pid namespace don't + * allow it to share a thread group or signal handlers with the + * forking task. */ - if ((clone_flags & (CLONE_VM|CLONE_NEWPID)) && + if ((clone_flags & (CLONE_SIGHAND | CLONE_NEWPID)) && (task_active_pid_ns(current) != current->nsproxy->pid_ns)) return ERR_PTR(-EINVAL); @@ -1661,6 +1665,12 @@ int __user *, parent_tidptr, int __user *, child_tidptr, int, tls_val) +#elif defined(CONFIG_CLONE_BACKWARDS3) +SYSCALL_DEFINE6(clone, unsigned long, clone_flags, unsigned long, newsp, + int, stack_size, + int __user *, parent_tidptr, + int __user *, child_tidptr, + int, tls_val) #else SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, int __user *, parent_tidptr, @@ -1801,7 +1811,7 @@ * If unsharing a user namespace must also unshare the thread. */ if (unshare_flags & CLONE_NEWUSER) - unshare_flags |= CLONE_THREAD; + unshare_flags |= CLONE_THREAD | CLONE_FS; /* * If unsharing a pid namespace must also unshare the thread. */ --- linux-lts-raring-3.8.0.orig/kernel/power/autosleep.c +++ linux-lts-raring-3.8.0/kernel/power/autosleep.c @@ -32,7 +32,8 @@ mutex_lock(&autosleep_lock); - if (!pm_save_wakeup_count(initial_count)) { + if (!pm_save_wakeup_count(initial_count) || + system_state != SYSTEM_RUNNING) { mutex_unlock(&autosleep_lock); goto out; } --- linux-lts-raring-3.8.0.orig/kernel/events/core.c +++ linux-lts-raring-3.8.0/kernel/events/core.c @@ -729,8 +729,18 @@ { struct perf_event_context *ctx; - rcu_read_lock(); retry: + /* + * One of the few rules of preemptible RCU is that one cannot do + * rcu_read_unlock() while holding a scheduler (or nested) lock when + * part of the read side critical section was preemptible -- see + * rcu_read_unlock_special(). + * + * Since ctx->lock nests under rq->lock we must ensure the entire read + * side critical section is non-preemptible. + */ + preempt_disable(); + rcu_read_lock(); ctx = rcu_dereference(task->perf_event_ctxp[ctxn]); if (ctx) { /* @@ -746,6 +756,8 @@ raw_spin_lock_irqsave(&ctx->lock, *flags); if (ctx != rcu_dereference(task->perf_event_ctxp[ctxn])) { raw_spin_unlock_irqrestore(&ctx->lock, *flags); + rcu_read_unlock(); + preempt_enable(); goto retry; } @@ -755,6 +767,7 @@ } } rcu_read_unlock(); + preempt_enable(); return ctx; } @@ -1723,7 +1736,16 @@ struct perf_cpu_context *cpuctx = __get_cpu_context(ctx); int err; - if (WARN_ON_ONCE(!ctx->is_active)) + /* + * There's a time window between 'ctx->is_active' check + * in perf_event_enable function and this place having: + * - IRQs on + * - ctx->lock unlocked + * + * where the task could be killed and 'ctx' deactivated + * by perf_event_exit_task. + */ + if (!ctx->is_active) return -EINVAL; raw_spin_lock(&ctx->lock); @@ -5328,7 +5350,7 @@ static int perf_swevent_init(struct perf_event *event) { - int event_id = event->attr.config; + u64 event_id = event->attr.config; if (event->attr.type != PERF_TYPE_SOFTWARE) return -ENOENT; @@ -5988,6 +6010,7 @@ if (pmu->pmu_cpu_context) goto got_cpu_context; + ret = -ENOMEM; pmu->pmu_cpu_context = alloc_percpu(struct perf_cpu_context); if (!pmu->pmu_cpu_context) goto free_dev; @@ -7136,7 +7159,7 @@ * child. */ - child_ctx = alloc_perf_context(event->pmu, child); + child_ctx = alloc_perf_context(parent_ctx->pmu, child); if (!child_ctx) return -ENOMEM; --- linux-lts-raring-3.8.0.orig/kernel/events/hw_breakpoint.c +++ linux-lts-raring-3.8.0/kernel/events/hw_breakpoint.c @@ -120,7 +120,7 @@ list_for_each_entry(iter, &bp_task_head, hw.bp_list) { if (iter->hw.bp_target == tsk && find_slot_idx(iter) == type && - cpu == iter->cpu) + (iter->cpu < 0 || cpu == iter->cpu)) count += hw_breakpoint_weight(iter); } @@ -149,7 +149,7 @@ return; } - for_each_online_cpu(cpu) { + for_each_possible_cpu(cpu) { unsigned int nr; nr = per_cpu(nr_cpu_bp_pinned[type], cpu); @@ -235,7 +235,7 @@ if (cpu >= 0) { toggle_bp_task_slot(bp, cpu, enable, type, weight); } else { - for_each_online_cpu(cpu) + for_each_possible_cpu(cpu) toggle_bp_task_slot(bp, cpu, enable, type, weight); } --- linux-lts-raring-3.8.0.orig/kernel/sched/clock.c +++ linux-lts-raring-3.8.0/kernel/sched/clock.c @@ -176,10 +176,36 @@ u64 this_clock, remote_clock; u64 *ptr, old_val, val; +#if BITS_PER_LONG != 64 +again: + /* + * Careful here: The local and the remote clock values need to + * be read out atomic as we need to compare the values and + * then update either the local or the remote side. So the + * cmpxchg64 below only protects one readout. + * + * We must reread via sched_clock_local() in the retry case on + * 32bit as an NMI could use sched_clock_local() via the + * tracer and hit between the readout of + * the low32bit and the high 32bit portion. + */ + this_clock = sched_clock_local(my_scd); + /* + * We must enforce atomic readout on 32bit, otherwise the + * update on the remote cpu can hit inbetween the readout of + * the low32bit and the high 32bit portion. + */ + remote_clock = cmpxchg64(&scd->clock, 0, 0); +#else + /* + * On 64bit the read of [my]scd->clock is atomic versus the + * update, so we can avoid the above 32bit dance. + */ sched_clock_local(my_scd); again: this_clock = my_scd->clock; remote_clock = scd->clock; +#endif /* * Use the opportunity that we have both locks --- linux-lts-raring-3.8.0.orig/kernel/sched/core.c +++ linux-lts-raring-3.8.0/kernel/sched/core.c @@ -1488,8 +1488,10 @@ { struct rq *rq = task_rq(p); - BUG_ON(rq != this_rq()); - BUG_ON(p == current); + if (WARN_ON_ONCE(rq != this_rq()) || + WARN_ON_ONCE(p == current)) + return; + lockdep_assert_held(&rq->lock); if (!raw_spin_trylock(&p->pi_lock)) { @@ -4948,7 +4950,7 @@ } static int min_load_idx = 0; -static int max_load_idx = CPU_LOAD_IDX_MAX; +static int max_load_idx = CPU_LOAD_IDX_MAX-1; static void set_table_entry(struct ctl_table *entry, --- linux-lts-raring-3.8.0.orig/kernel/sched/fair.c +++ linux-lts-raring-3.8.0/kernel/sched/fair.c @@ -1964,6 +1964,7 @@ */ update_entity_load_avg(curr, 1); update_cfs_rq_blocked_load(cfs_rq, 1); + update_cfs_shares(cfs_rq); #ifdef CONFIG_SCHED_HRTICK /* @@ -5754,11 +5755,15 @@ cfs_rq = task_cfs_rq(current); curr = cfs_rq->curr; - if (unlikely(task_cpu(p) != this_cpu)) { - rcu_read_lock(); - __set_task_cpu(p, this_cpu); - rcu_read_unlock(); - } + /* + * Not only the cpu but also the task_group of the parent might have + * been changed after parent->se.parent,cfs_rq were copied to + * child->se.parent,cfs_rq. So call __set_task_cpu() to make those + * of child point to valid ones. + */ + rcu_read_lock(); + __set_task_cpu(p, this_cpu); + rcu_read_unlock(); update_curr(cfs_rq); --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_sched_wakeup.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_sched_wakeup.c @@ -36,7 +36,7 @@ static int wakeup_graph_entry(struct ftrace_graph_ent *trace); static void wakeup_graph_return(struct ftrace_graph_ret *trace); -static int save_lat_flag; +static int save_flags; #define TRACE_DISPLAY_GRAPH 1 @@ -540,8 +540,11 @@ static int __wakeup_tracer_init(struct trace_array *tr) { - save_lat_flag = trace_flags & TRACE_ITER_LATENCY_FMT; - trace_flags |= TRACE_ITER_LATENCY_FMT; + save_flags = trace_flags; + + /* non overwrite screws up the latency tracers */ + set_tracer_flag(TRACE_ITER_OVERWRITE, 1); + set_tracer_flag(TRACE_ITER_LATENCY_FMT, 1); tracing_max_latency = 0; wakeup_trace = tr; @@ -563,12 +566,15 @@ static void wakeup_tracer_reset(struct trace_array *tr) { + int lat_flag = save_flags & TRACE_ITER_LATENCY_FMT; + int overwrite_flag = save_flags & TRACE_ITER_OVERWRITE; + stop_wakeup_tracer(tr); /* make sure we put back any tasks we are tracing */ wakeup_reset(tr); - if (!save_lat_flag) - trace_flags &= ~TRACE_ITER_LATENCY_FMT; + set_tracer_flag(TRACE_ITER_LATENCY_FMT, lat_flag); + set_tracer_flag(TRACE_ITER_OVERWRITE, overwrite_flag); } static void wakeup_tracer_start(struct trace_array *tr) @@ -594,6 +600,7 @@ .print_line = wakeup_print_line, .flags = &tracer_flags, .set_flag = wakeup_set_flag, + .flag_changed = trace_keep_overwrite, #ifdef CONFIG_FTRACE_SELFTEST .selftest = trace_selftest_startup_wakeup, #endif @@ -615,6 +622,7 @@ .print_line = wakeup_print_line, .flags = &tracer_flags, .set_flag = wakeup_set_flag, + .flag_changed = trace_keep_overwrite, #ifdef CONFIG_FTRACE_SELFTEST .selftest = trace_selftest_startup_wakeup, #endif --- linux-lts-raring-3.8.0.orig/kernel/trace/Kconfig +++ linux-lts-raring-3.8.0/kernel/trace/Kconfig @@ -416,24 +416,28 @@ def_bool n config DYNAMIC_FTRACE - bool "enable/disable ftrace tracepoints dynamically" + bool "enable/disable function tracing dynamically" depends on FUNCTION_TRACER depends on HAVE_DYNAMIC_FTRACE default y help - This option will modify all the calls to ftrace dynamically - (will patch them out of the binary image and replace them - with a No-Op instruction) as they are called. A table is - created to dynamically enable them again. + This option will modify all the calls to function tracing + dynamically (will patch them out of the binary image and + replace them with a No-Op instruction) on boot up. During + compile time, a table is made of all the locations that ftrace + can function trace, and this table is linked into the kernel + image. When this is enabled, functions can be individually + enabled, and the functions not enabled will not affect + performance of the system. + + See the files in /sys/kernel/debug/tracing: + available_filter_functions + set_ftrace_filter + set_ftrace_notrace This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but otherwise has native performance as long as no tracing is active. - The changes to the code are done by a kernel thread that - wakes up once a second and checks to see if any ftrace calls - were made. If so, it runs stop_machine (stops all CPUS) - and modifies the code to jump over the call to ftrace. - config FUNCTION_PROFILER bool "Kernel function profiler" depends on FUNCTION_TRACER --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_events_filter.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_events_filter.c @@ -777,7 +777,11 @@ static void __free_preds(struct event_filter *filter) { + int i; + if (filter->preds) { + for (i = 0; i < filter->n_preds; i++) + kfree(filter->preds[i].ops); kfree(filter->preds); filter->preds = NULL; } --- linux-lts-raring-3.8.0.orig/kernel/trace/trace.c +++ linux-lts-raring-3.8.0/kernel/trace/trace.c @@ -682,7 +682,15 @@ memcpy(max_data->comm, tsk->comm, TASK_COMM_LEN); max_data->pid = tsk->pid; - max_data->uid = task_uid(tsk); + /* + * If tsk == current, then use current_uid(), as that does not use + * RCU. The irq tracer can be called out of RCU scope. + */ + if (tsk == current) + max_data->uid = current_uid(); + else + max_data->uid = task_uid(tsk); + max_data->nice = tsk->static_prio - 20 - MAX_RT_PRIO; max_data->policy = tsk->policy; max_data->rt_priority = tsk->rt_priority; @@ -703,7 +711,7 @@ void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu) { - struct ring_buffer *buf = tr->buffer; + struct ring_buffer *buf; if (trace_stop_count) return; @@ -715,6 +723,7 @@ } arch_spin_lock(&ftrace_max_lock); + buf = tr->buffer; tr->buffer = max_tr.buffer; max_tr.buffer = buf; @@ -2835,11 +2844,25 @@ return -EINVAL; } -static void set_tracer_flags(unsigned int mask, int enabled) +/* Some tracers require overwrite to stay enabled */ +int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) +{ + if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set) + return -1; + + return 0; +} + +int set_tracer_flag(unsigned int mask, int enabled) { /* do nothing if flag is already set */ if (!!(trace_flags & mask) == !!enabled) - return; + return 0; + + /* Give the tracer a chance to approve the change */ + if (current_trace->flag_changed) + if (current_trace->flag_changed(current_trace, mask, !!enabled)) + return -EINVAL; if (enabled) trace_flags |= mask; @@ -2849,18 +2872,24 @@ if (mask == TRACE_ITER_RECORD_CMD) trace_event_enable_cmd_record(enabled); - if (mask == TRACE_ITER_OVERWRITE) + if (mask == TRACE_ITER_OVERWRITE) { ring_buffer_change_overwrite(global_trace.buffer, enabled); +#ifdef CONFIG_TRACER_MAX_TRACE + ring_buffer_change_overwrite(max_tr.buffer, enabled); +#endif + } if (mask == TRACE_ITER_PRINTK) trace_printk_start_stop_comm(enabled); + + return 0; } static int trace_set_options(char *option) { char *cmp; int neg = 0; - int ret = 0; + int ret = -ENODEV; int i; cmp = strstrip(option); @@ -2870,19 +2899,20 @@ cmp += 2; } + mutex_lock(&trace_types_lock); + for (i = 0; trace_options[i]; i++) { if (strcmp(cmp, trace_options[i]) == 0) { - set_tracer_flags(1 << i, !neg); + ret = set_tracer_flag(1 << i, !neg); break; } } /* If no option could be set, test the specific tracer options */ - if (!trace_options[i]) { - mutex_lock(&trace_types_lock); + if (!trace_options[i]) ret = set_tracer_option(current_trace, cmp, neg); - mutex_unlock(&trace_types_lock); - } + + mutex_unlock(&trace_types_lock); return ret; } @@ -2892,6 +2922,7 @@ size_t cnt, loff_t *ppos) { char buf[64]; + int ret; if (cnt >= sizeof(buf)) return -EINVAL; @@ -2901,7 +2932,9 @@ buf[cnt] = 0; - trace_set_options(buf); + ret = trace_set_options(buf); + if (ret < 0) + return ret; *ppos += cnt; @@ -3207,6 +3240,9 @@ goto out; trace_branch_disable(); + + current_trace->enabled = false; + if (current_trace && current_trace->reset) current_trace->reset(tr); if (current_trace && current_trace->use_max_tr) { @@ -3238,6 +3274,7 @@ } current_trace = t; + current_trace->enabled = true; trace_branch_enable(tr); out: mutex_unlock(&trace_types_lock); @@ -4640,7 +4677,13 @@ if (val != 0 && val != 1) return -EINVAL; - set_tracer_flags(1 << index, val); + + mutex_lock(&trace_types_lock); + ret = set_tracer_flag(1 << index, val); + mutex_unlock(&trace_types_lock); + + if (ret < 0) + return ret; *ppos += cnt; @@ -4850,6 +4893,8 @@ trace_access_lock_init(); d_tracer = tracing_init_dentry(); + if (!d_tracer) + return 0; trace_create_file("trace_options", 0644, d_tracer, NULL, &tracing_iter_fops); @@ -4983,36 +5028,32 @@ iter->cpu_file = TRACE_PIPE_ALL_CPU; } -static void -__ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode) +void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { - static arch_spinlock_t ftrace_dump_lock = - (arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED; /* use static because iter can be a bit big for the stack */ static struct trace_iterator iter; + static atomic_t dump_running; unsigned int old_userobj; - static int dump_ran; unsigned long flags; int cnt = 0, cpu; - /* only one dump */ - local_irq_save(flags); - arch_spin_lock(&ftrace_dump_lock); - if (dump_ran) - goto out; - - dump_ran = 1; + /* Only allow one dump user at a time. */ + if (atomic_inc_return(&dump_running) != 1) { + atomic_dec(&dump_running); + return; + } + /* + * Always turn off tracing when we dump. + * We don't need to show trace output of what happens + * between multiple crashes. + * + * If the user does a sysrq-z, then they can re-enable + * tracing with echo 1 > tracing_on. + */ tracing_off(); - /* Did function tracer already get disabled? */ - if (ftrace_is_dead()) { - printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n"); - printk("# MAY BE MISSING FUNCTION EVENTS\n"); - } - - if (disable_tracing) - ftrace_kill(); + local_irq_save(flags); trace_init_global_iter(&iter); @@ -5045,6 +5086,12 @@ printk(KERN_TRACE "Dumping ftrace buffer:\n"); + /* Did function tracer already get disabled? */ + if (ftrace_is_dead()) { + printk("# WARNING: FUNCTION TRACING IS CORRUPTED\n"); + printk("# MAY BE MISSING FUNCTION EVENTS\n"); + } + /* * We need to stop all tracing on all CPUS to read the * the next buffer. This is a bit expensive, but is @@ -5084,26 +5131,14 @@ printk(KERN_TRACE "---------------------------------\n"); out_enable: - /* Re-enable tracing if requested */ - if (!disable_tracing) { - trace_flags |= old_userobj; + trace_flags |= old_userobj; - for_each_tracing_cpu(cpu) { - atomic_dec(&iter.tr->data[cpu]->disabled); - } - tracing_on(); + for_each_tracing_cpu(cpu) { + atomic_dec(&iter.tr->data[cpu]->disabled); } - - out: - arch_spin_unlock(&ftrace_dump_lock); + atomic_dec(&dump_running); local_irq_restore(flags); } - -/* By default: disable tracing after the dump */ -void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) -{ - __ftrace_dump(true, oops_dump_mode); -} EXPORT_SYMBOL_GPL(ftrace_dump); __init static int tracer_alloc_buffers(void) --- linux-lts-raring-3.8.0.orig/kernel/trace/ftrace.c +++ linux-lts-raring-3.8.0/kernel/trace/ftrace.c @@ -650,7 +650,7 @@ pages = DIV_ROUND_UP(functions, PROFILES_PER_PAGE); - for (i = 0; i < pages; i++) { + for (i = 1; i < pages; i++) { pg->next = (void *)get_zeroed_page(GFP_KERNEL); if (!pg->next) goto out_free; @@ -668,7 +668,6 @@ free_page(tmp); } - free_page((unsigned long)stat->pages); stat->pages = NULL; stat->start = NULL; @@ -1028,6 +1027,19 @@ static struct pid * const ftrace_swapper_pid = &init_struct_pid; +loff_t +ftrace_filter_lseek(struct file *file, loff_t offset, int whence) +{ + loff_t ret; + + if (file->f_mode & FMODE_READ) + ret = seq_lseek(file, offset, whence); + else + file->f_pos = ret = 1; + + return ret; +} + #ifdef CONFIG_DYNAMIC_FTRACE #ifndef CONFIG_FTRACE_MCOUNT_RECORD @@ -2590,7 +2602,7 @@ * routine, you can use ftrace_filter_write() for the write * routine if @flag has FTRACE_ITER_FILTER set, or * ftrace_notrace_write() if @flag has FTRACE_ITER_NOTRACE set. - * ftrace_regex_lseek() should be used as the lseek routine, and + * ftrace_filter_lseek() should be used as the lseek routine, and * release must call ftrace_regex_release(). */ int @@ -2674,19 +2686,6 @@ inode, file); } -loff_t -ftrace_regex_lseek(struct file *file, loff_t offset, int whence) -{ - loff_t ret; - - if (file->f_mode & FMODE_READ) - ret = seq_lseek(file, offset, whence); - else - file->f_pos = ret = 1; - - return ret; -} - static int ftrace_match(char *str, char *regex, int len, int type) { int matched = 0; @@ -3082,8 +3081,8 @@ continue; } - hlist_del(&entry->node); - call_rcu(&entry->rcu, ftrace_free_entry_rcu); + hlist_del_rcu(&entry->node); + call_rcu_sched(&entry->rcu, ftrace_free_entry_rcu); } } __disable_ftrace_function_probe(); @@ -3549,7 +3548,7 @@ .open = ftrace_filter_open, .read = seq_read, .write = ftrace_filter_write, - .llseek = ftrace_regex_lseek, + .llseek = ftrace_filter_lseek, .release = ftrace_regex_release, }; @@ -3557,7 +3556,7 @@ .open = ftrace_notrace_open, .read = seq_read, .write = ftrace_notrace_write, - .llseek = ftrace_regex_lseek, + .llseek = ftrace_filter_lseek, .release = ftrace_regex_release, }; @@ -3715,7 +3714,8 @@ if (fail) return -EINVAL; - ftrace_graph_filter_enabled = 1; + ftrace_graph_filter_enabled = !!(*idx); + return 0; } @@ -3762,8 +3762,8 @@ .open = ftrace_graph_open, .read = seq_read, .write = ftrace_graph_write, + .llseek = ftrace_filter_lseek, .release = ftrace_graph_release, - .llseek = seq_lseek, }; #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ @@ -3970,37 +3970,51 @@ ftrace_process_locs(mod, start, end); } -static int ftrace_module_notify(struct notifier_block *self, - unsigned long val, void *data) +static int ftrace_module_notify_enter(struct notifier_block *self, + unsigned long val, void *data) { struct module *mod = data; - switch (val) { - case MODULE_STATE_COMING: + if (val == MODULE_STATE_COMING) ftrace_init_module(mod, mod->ftrace_callsites, mod->ftrace_callsites + mod->num_ftrace_callsites); - break; - case MODULE_STATE_GOING: + return 0; +} + +static int ftrace_module_notify_exit(struct notifier_block *self, + unsigned long val, void *data) +{ + struct module *mod = data; + + if (val == MODULE_STATE_GOING) ftrace_release_mod(mod); - break; - } return 0; } #else -static int ftrace_module_notify(struct notifier_block *self, - unsigned long val, void *data) +static int ftrace_module_notify_enter(struct notifier_block *self, + unsigned long val, void *data) +{ + return 0; +} +static int ftrace_module_notify_exit(struct notifier_block *self, + unsigned long val, void *data) { return 0; } #endif /* CONFIG_MODULES */ -struct notifier_block ftrace_module_nb = { - .notifier_call = ftrace_module_notify, +struct notifier_block ftrace_module_enter_nb = { + .notifier_call = ftrace_module_notify_enter, .priority = INT_MAX, /* Run before anything that can use kprobes */ }; +struct notifier_block ftrace_module_exit_nb = { + .notifier_call = ftrace_module_notify_exit, + .priority = INT_MIN, /* Run after anything that can remove kprobes */ +}; + extern unsigned long __start_mcount_loc[]; extern unsigned long __stop_mcount_loc[]; @@ -4032,9 +4046,13 @@ __start_mcount_loc, __stop_mcount_loc); - ret = register_module_notifier(&ftrace_module_nb); + ret = register_module_notifier(&ftrace_module_enter_nb); + if (ret) + pr_warning("Failed to register trace ftrace module enter notifier\n"); + + ret = register_module_notifier(&ftrace_module_exit_nb); if (ret) - pr_warning("Failed to register trace ftrace module notifier\n"); + pr_warning("Failed to register trace ftrace module exit notifier\n"); set_ftrace_early_filters(); @@ -4403,7 +4421,7 @@ .open = ftrace_pid_open, .write = ftrace_pid_write, .read = seq_read, - .llseek = seq_lseek, + .llseek = ftrace_filter_lseek, .release = ftrace_pid_release, }; @@ -4519,12 +4537,8 @@ ftrace_startup_sysctl(); /* we are starting ftrace again */ - if (ftrace_ops_list != &ftrace_list_end) { - if (ftrace_ops_list->next == &ftrace_list_end) - ftrace_trace_function = ftrace_ops_list->func; - else - ftrace_trace_function = ftrace_ops_list_func; - } + if (ftrace_ops_list != &ftrace_list_end) + update_ftrace_function(); } else { /* stopping ftrace calls (just send to ftrace_stub) */ --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_uprobe.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_uprobe.c @@ -244,8 +244,10 @@ return -EINVAL; } arg = strchr(argv[1], ':'); - if (!arg) + if (!arg) { + ret = -EINVAL; goto fail_address_parse; + } *arg++ = '\0'; filename = argv[1]; --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_irqsoff.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_irqsoff.c @@ -32,7 +32,7 @@ static int trace_type __read_mostly; -static int save_lat_flag; +static int save_flags; static void stop_irqsoff_tracer(struct trace_array *tr, int graph); static int start_irqsoff_tracer(struct trace_array *tr, int graph); @@ -558,8 +558,11 @@ static void __irqsoff_tracer_init(struct trace_array *tr) { - save_lat_flag = trace_flags & TRACE_ITER_LATENCY_FMT; - trace_flags |= TRACE_ITER_LATENCY_FMT; + save_flags = trace_flags; + + /* non overwrite screws up the latency tracers */ + set_tracer_flag(TRACE_ITER_OVERWRITE, 1); + set_tracer_flag(TRACE_ITER_LATENCY_FMT, 1); tracing_max_latency = 0; irqsoff_trace = tr; @@ -573,10 +576,13 @@ static void irqsoff_tracer_reset(struct trace_array *tr) { + int lat_flag = save_flags & TRACE_ITER_LATENCY_FMT; + int overwrite_flag = save_flags & TRACE_ITER_OVERWRITE; + stop_irqsoff_tracer(tr, is_graph()); - if (!save_lat_flag) - trace_flags &= ~TRACE_ITER_LATENCY_FMT; + set_tracer_flag(TRACE_ITER_LATENCY_FMT, lat_flag); + set_tracer_flag(TRACE_ITER_OVERWRITE, overwrite_flag); } static void irqsoff_tracer_start(struct trace_array *tr) @@ -609,6 +615,7 @@ .print_line = irqsoff_print_line, .flags = &tracer_flags, .set_flag = irqsoff_set_flag, + .flag_changed = trace_keep_overwrite, #ifdef CONFIG_FTRACE_SELFTEST .selftest = trace_selftest_startup_irqsoff, #endif @@ -642,6 +649,7 @@ .print_line = irqsoff_print_line, .flags = &tracer_flags, .set_flag = irqsoff_set_flag, + .flag_changed = trace_keep_overwrite, #ifdef CONFIG_FTRACE_SELFTEST .selftest = trace_selftest_startup_preemptoff, #endif @@ -677,6 +685,7 @@ .print_line = irqsoff_print_line, .flags = &tracer_flags, .set_flag = irqsoff_set_flag, + .flag_changed = trace_keep_overwrite, #ifdef CONFIG_FTRACE_SELFTEST .selftest = trace_selftest_startup_preemptirqsoff, #endif --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_stack.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_stack.c @@ -20,13 +20,24 @@ #define STACK_TRACE_ENTRIES 500 +#ifdef CC_USING_FENTRY +# define fentry 1 +#else +# define fentry 0 +#endif + static unsigned long stack_dump_trace[STACK_TRACE_ENTRIES+1] = { [0 ... (STACK_TRACE_ENTRIES)] = ULONG_MAX }; static unsigned stack_dump_index[STACK_TRACE_ENTRIES]; +/* + * Reserve one entry for the passed in ip. This will allow + * us to remove most or all of the stack size overhead + * added by the stack tracer itself. + */ static struct stack_trace max_stack_trace = { - .max_entries = STACK_TRACE_ENTRIES, - .entries = stack_dump_trace, + .max_entries = STACK_TRACE_ENTRIES - 1, + .entries = &stack_dump_trace[1], }; static unsigned long max_stack_size; @@ -39,25 +50,34 @@ int stack_tracer_enabled; static int last_stack_tracer_enabled; -static inline void check_stack(void) +static inline void +check_stack(unsigned long ip, unsigned long *stack) { unsigned long this_size, flags; unsigned long *p, *top, *start; + static int tracer_frame; + int frame_size = ACCESS_ONCE(tracer_frame); int i; - this_size = ((unsigned long)&this_size) & (THREAD_SIZE-1); + this_size = ((unsigned long)stack) & (THREAD_SIZE-1); this_size = THREAD_SIZE - this_size; + /* Remove the frame of the tracer */ + this_size -= frame_size; if (this_size <= max_stack_size) return; /* we do not handle interrupt stacks yet */ - if (!object_is_on_stack(&this_size)) + if (!object_is_on_stack(stack)) return; local_irq_save(flags); arch_spin_lock(&max_stack_lock); + /* In case another CPU set the tracer_frame on us */ + if (unlikely(!frame_size)) + this_size -= tracer_frame; + /* a race could have already updated it */ if (this_size <= max_stack_size) goto out; @@ -70,10 +90,18 @@ save_stack_trace(&max_stack_trace); /* + * Add the passed in ip from the function tracer. + * Searching for this on the stack will skip over + * most of the overhead from the stack tracer itself. + */ + stack_dump_trace[0] = ip; + max_stack_trace.nr_entries++; + + /* * Now find where in the stack these are. */ i = 0; - start = &this_size; + start = stack; top = (unsigned long *) (((unsigned long)start & ~(THREAD_SIZE-1)) + THREAD_SIZE); @@ -97,6 +125,18 @@ found = 1; /* Start the search from here */ start = p + 1; + /* + * We do not want to show the overhead + * of the stack tracer stack in the + * max stack. If we haven't figured + * out what that is, then figure it out + * now. + */ + if (unlikely(!tracer_frame) && i == 1) { + tracer_frame = (p - stack) * + sizeof(unsigned long); + max_stack_size -= tracer_frame; + } } } @@ -113,6 +153,7 @@ stack_trace_call(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *op, struct pt_regs *pt_regs) { + unsigned long stack; int cpu; preempt_disable_notrace(); @@ -122,7 +163,26 @@ if (per_cpu(trace_active, cpu)++ != 0) goto out; - check_stack(); + /* + * When fentry is used, the traced function does not get + * its stack frame set up, and we lose the parent. + * The ip is pretty useless because the function tracer + * was called before that function set up its stack frame. + * In this case, we use the parent ip. + * + * By adding the return address of either the parent ip + * or the current ip we can disregard most of the stack usage + * caused by the stack tracer itself. + * + * The function tracer always reports the address of where the + * mcount call was, but the stack will hold the return address. + */ + if (fentry) + ip = parent_ip; + else + ip += MCOUNT_INSN_SIZE; + + check_stack(ip, &stack); out: per_cpu(trace_active, cpu)--; @@ -322,7 +382,7 @@ .open = stack_trace_filter_open, .read = seq_read, .write = ftrace_filter_write, - .llseek = ftrace_regex_lseek, + .llseek = ftrace_filter_lseek, .release = ftrace_regex_release, }; @@ -371,6 +431,8 @@ struct dentry *d_tracer; d_tracer = tracing_init_dentry(); + if (!d_tracer) + return 0; trace_create_file("stack_max_size", 0644, d_tracer, &max_stack_size, &stack_max_size_fops); --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_selftest.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_selftest.c @@ -452,7 +452,6 @@ char *func_name; int len; int ret; - int cnt; /* The previous test PASSED */ pr_cont("PASSED\n"); @@ -510,19 +509,10 @@ unregister_ftrace_function(&test_recsafe_probe); - /* - * If arch supports all ftrace features, and no other task - * was on the list, we should be fine. - */ - if (!ftrace_nr_registered_ops() && !FTRACE_FORCE_LIST_FUNC) - cnt = 2; /* Should have recursed */ - else - cnt = 1; - ret = -1; - if (trace_selftest_recursion_cnt != cnt) { - pr_cont("*callback not called expected %d times (%d)* ", - cnt, trace_selftest_recursion_cnt); + if (trace_selftest_recursion_cnt != 2) { + pr_cont("*callback not called expected 2 times (%d)* ", + trace_selftest_recursion_cnt); goto out; } @@ -712,8 +702,6 @@ /* Maximum number of functions to trace before diagnosing a hang */ #define GRAPH_MAX_FUNC_TEST 100000000 -static void -__ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode); static unsigned int graph_hang_thresh; /* Wrap the real function entry probe to avoid possible hanging */ @@ -723,8 +711,11 @@ if (unlikely(++graph_hang_thresh > GRAPH_MAX_FUNC_TEST)) { ftrace_graph_stop(); printk(KERN_WARNING "BUG: Function graph tracer hang!\n"); - if (ftrace_dump_on_oops) - __ftrace_dump(false, DUMP_ALL); + if (ftrace_dump_on_oops) { + ftrace_dump(DUMP_ALL); + /* ftrace_dump() disables tracing */ + tracing_on(); + } return 0; } --- linux-lts-raring-3.8.0.orig/kernel/trace/trace_stat.c +++ linux-lts-raring-3.8.0/kernel/trace/trace_stat.c @@ -307,6 +307,8 @@ struct dentry *d_tracing; d_tracing = tracing_init_dentry(); + if (!d_tracing) + return 0; stat_dir = debugfs_create_dir("trace_stat", d_tracing); if (!stat_dir) --- linux-lts-raring-3.8.0.orig/kernel/trace/trace.h +++ linux-lts-raring-3.8.0/kernel/trace/trace.h @@ -283,10 +283,14 @@ enum print_line_t (*print_line)(struct trace_iterator *iter); /* If you handled the flag setting, return 0 */ int (*set_flag)(u32 old_flags, u32 bit, int set); + /* Return 0 if OK with change, else return non-zero */ + int (*flag_changed)(struct tracer *tracer, + u32 mask, int set); struct tracer *next; struct tracer_flags *flags; bool print_max; bool use_max_tr; + bool enabled; }; @@ -835,6 +839,8 @@ void trace_printk_init_buffers(void); void trace_printk_start_comm(void); +int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set); +int set_tracer_flag(unsigned int mask, int enabled); #undef FTRACE_ENTRY #define FTRACE_ENTRY(call, struct_name, id, tstruct, print, filter) \ --- linux-lts-raring-3.8.0.orig/kernel/irq/manage.c +++ linux-lts-raring-3.8.0/kernel/irq/manage.c @@ -554,9 +554,9 @@ return 0; if (irq_settings_can_request(desc)) { - if (desc->action) - if (irqflags & desc->action->flags & IRQF_SHARED) - canrequest =1; + if (!desc->action || + irqflags & desc->action->flags & IRQF_SHARED) + canrequest = 1; } irq_put_desc_unlock(desc, flags); return canrequest; --- linux-lts-raring-3.8.0.orig/kernel/irq/spurious.c +++ linux-lts-raring-3.8.0/kernel/irq/spurious.c @@ -80,13 +80,11 @@ /* * All handlers must agree on IRQF_SHARED, so we test just the - * first. Check for action->next as well. + * first. */ action = desc->action; if (!action || !(action->flags & IRQF_SHARED) || - (action->flags & __IRQF_TIMER) || - (action->handler(irq, action->dev_id) == IRQ_HANDLED) || - !action->next) + (action->flags & __IRQF_TIMER)) goto out; /* Already running on another processor */ @@ -104,6 +102,7 @@ do { if (handle_irq_event(desc) == IRQ_HANDLED) ret = IRQ_HANDLED; + /* Make sure that there is still a valid action */ action = desc->action; } while ((desc->istate & IRQS_PENDING) && action); desc->istate &= ~IRQS_POLL_INPROGRESS; --- linux-lts-raring-3.8.0.orig/kernel/time/tick-sched.c +++ linux-lts-raring-3.8.0/kernel/time/tick-sched.c @@ -564,14 +564,17 @@ */ void tick_nohz_irq_exit(void) { + unsigned long flags; struct tick_sched *ts = &__get_cpu_var(tick_cpu_sched); if (!ts->inidle) return; - /* Cancel the timer because CPU already waken up from the C-states*/ - menu_hrtimer_cancel(); + local_irq_save(flags); + __tick_nohz_idle_enter(ts); + + local_irq_restore(flags); } /** @@ -666,8 +669,6 @@ ts->inidle = 0; - /* Cancel the timer because CPU already waken up from the C-states*/ - menu_hrtimer_cancel(); if (ts->idle_active || ts->tick_stopped) now = ktime_get(); @@ -898,7 +899,7 @@ hrtimer_cancel(&ts->sched_timer); # endif - ts->nohz_mode = NOHZ_MODE_INACTIVE; + memset(ts, 0, sizeof(*ts)); } #endif --- linux-lts-raring-3.8.0.orig/kernel/time/tick-common.c +++ linux-lts-raring-3.8.0/kernel/time/tick-common.c @@ -323,6 +323,7 @@ */ dev->mode = CLOCK_EVT_MODE_UNUSED; clockevents_exchange_device(dev, NULL); + dev->event_handler = clockevents_handle_noop; td->evtdev = NULL; } raw_spin_unlock_irqrestore(&tick_device_lock, flags); --- linux-lts-raring-3.8.0.orig/kernel/time/tick-broadcast.c +++ linux-lts-raring-3.8.0/kernel/time/tick-broadcast.c @@ -66,12 +66,17 @@ */ int tick_check_broadcast_device(struct clock_event_device *dev) { - if ((tick_broadcast_device.evtdev && + struct clock_event_device *cur = tick_broadcast_device.evtdev; + + if ((dev->features & CLOCK_EVT_FEAT_DUMMY) || + (tick_broadcast_device.evtdev && tick_broadcast_device.evtdev->rating >= dev->rating) || (dev->features & CLOCK_EVT_FEAT_C3STOP)) return 0; clockevents_exchange_device(tick_broadcast_device.evtdev, dev); + if (cur) + cur->event_handler = clockevents_handle_noop; tick_broadcast_device.evtdev = dev; if (!cpumask_empty(tick_get_broadcast_mask())) tick_broadcast_start_periodic(dev); @@ -395,7 +400,15 @@ if (cpumask_test_cpu(cpu, to_cpumask(tick_broadcast_oneshot_mask))) { struct tick_device *td = &per_cpu(tick_cpu_device, cpu); - clockevents_set_mode(td->evtdev, CLOCK_EVT_MODE_ONESHOT); + /* + * We might be in the middle of switching over from + * periodic to oneshot. If the CPU has not yet + * switched over, leave the device alone. + */ + if (td->mode == TICKDEV_MODE_ONESHOT) { + clockevents_set_mode(td->evtdev, + CLOCK_EVT_MODE_ONESHOT); + } } } --- linux-lts-raring-3.8.0.orig/arch/Kconfig +++ linux-lts-raring-3.8.0/arch/Kconfig @@ -373,4 +373,10 @@ help Architecture has the first two arguments of clone(2) swapped. +config CLONE_BACKWARDS3 + bool + help + Architecture has tls passed as the 3rd argument of clone(2), + not the 5th one. + source "kernel/gcov/Kconfig" --- linux-lts-raring-3.8.0.orig/arch/alpha/kernel/sys_nautilus.c +++ linux-lts-raring-3.8.0/arch/alpha/kernel/sys_nautilus.c @@ -188,6 +188,10 @@ extern void free_reserved_mem(void *, void *); extern void pcibios_claim_one_bus(struct pci_bus *); +static struct resource irongate_io = { + .name = "Irongate PCI IO", + .flags = IORESOURCE_IO, +}; static struct resource irongate_mem = { .name = "Irongate PCI MEM", .flags = IORESOURCE_MEM, @@ -209,6 +213,7 @@ irongate = pci_get_bus_and_slot(0, 0); bus->self = irongate; + bus->resource[0] = &irongate_io; bus->resource[1] = &irongate_mem; pci_bus_size_bridges(bus); --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/tsb.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/tsb.h @@ -157,17 +157,26 @@ andn REG2, 0x7, REG2; \ add REG1, REG2, REG1; - /* This macro exists only to make the PMD translator below easier - * to read. It hides the ELF section switch for the sun4v code - * patching. + /* These macros exists only to make the PMD translator below + * easier to read. It hides the ELF section switch for the + * sun4v code patching. */ -#define OR_PTE_BIT(REG, NAME) \ +#define OR_PTE_BIT_1INSN(REG, NAME) \ 661: or REG, _PAGE_##NAME##_4U, REG; \ .section .sun4v_1insn_patch, "ax"; \ .word 661b; \ or REG, _PAGE_##NAME##_4V, REG; \ .previous; +#define OR_PTE_BIT_2INSN(REG, TMP, NAME) \ +661: sethi %hi(_PAGE_##NAME##_4U), TMP; \ + or REG, TMP, REG; \ + .section .sun4v_2insn_patch, "ax"; \ + .word 661b; \ + mov -1, TMP; \ + or REG, _PAGE_##NAME##_4V, REG; \ + .previous; + /* Load into REG the PTE value for VALID, CACHE, and SZHUGE. */ #define BUILD_PTE_VALID_SZHUGE_CACHE(REG) \ 661: sethi %uhi(_PAGE_VALID|_PAGE_SZHUGE_4U), REG; \ @@ -214,12 +223,13 @@ andn REG1, PMD_HUGE_PROTBITS, REG2; \ sllx REG2, PMD_PADDR_SHIFT, REG2; \ /* REG2 now holds PFN << PAGE_SHIFT */ \ - andcc REG1, PMD_HUGE_EXEC, %g0; \ - bne,a,pt %xcc, 1f; \ - OR_PTE_BIT(REG2, EXEC); \ -1: andcc REG1, PMD_HUGE_WRITE, %g0; \ + andcc REG1, PMD_HUGE_WRITE, %g0; \ bne,a,pt %xcc, 1f; \ - OR_PTE_BIT(REG2, W); \ + OR_PTE_BIT_1INSN(REG2, W); \ +1: andcc REG1, PMD_HUGE_EXEC, %g0; \ + be,pt %xcc, 1f; \ + nop; \ + OR_PTE_BIT_2INSN(REG2, REG1, EXEC); \ /* REG1 can now be clobbered, build final PTE */ \ 1: BUILD_PTE_VALID_SZHUGE_CACHE(REG1); \ ba,pt %xcc, PTE_LABEL; \ --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/signal.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/signal.h @@ -26,5 +26,7 @@ void __user *ka_restorer; }; +#define __ARCH_HAS_SA_RESTORER + #endif /* !(__ASSEMBLY__) */ #endif /* !(__SPARC_SIGNAL_H) */ --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/page_64.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/page_64.h @@ -27,8 +27,8 @@ #ifndef __ASSEMBLY__ #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) -struct mm_struct; -extern void hugetlb_setup(struct mm_struct *mm); +struct pt_regs; +extern void hugetlb_setup(struct pt_regs *regs); #endif #define WANT_PAGE_VIRTUAL --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/switch_to_64.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/switch_to_64.h @@ -18,8 +18,7 @@ * and 2 stores in this critical code path. -DaveM */ #define switch_to(prev, next, last) \ -do { flush_tlb_pending(); \ - save_and_clear_fpu(); \ +do { save_and_clear_fpu(); \ /* If you are tempted to conditionalize the following */ \ /* so that ASI is only written if it changes, think again. */ \ __asm__ __volatile__("wr %%g0, %0, %%asi" \ --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/tlbflush_64.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/tlbflush_64.h @@ -11,24 +11,40 @@ struct tlb_batch { struct mm_struct *mm; unsigned long tlb_nr; + unsigned long active; unsigned long vaddrs[TLB_BATCH_NR]; }; extern void flush_tsb_kernel_range(unsigned long start, unsigned long end); extern void flush_tsb_user(struct tlb_batch *tb); +extern void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr); /* TLB flush operations. */ -extern void flush_tlb_pending(void); +static inline void flush_tlb_mm(struct mm_struct *mm) +{ +} + +static inline void flush_tlb_page(struct vm_area_struct *vma, + unsigned long vmaddr) +{ +} + +static inline void flush_tlb_range(struct vm_area_struct *vma, + unsigned long start, unsigned long end) +{ +} + +#define __HAVE_ARCH_ENTER_LAZY_MMU_MODE -#define flush_tlb_range(vma,start,end) \ - do { (void)(start); flush_tlb_pending(); } while (0) -#define flush_tlb_page(vma,addr) flush_tlb_pending() -#define flush_tlb_mm(mm) flush_tlb_pending() +extern void flush_tlb_pending(void); +extern void arch_enter_lazy_mmu_mode(void); +extern void arch_leave_lazy_mmu_mode(void); +#define arch_flush_lazy_mmu_mode() do {} while (0) /* Local cpu only. */ extern void __flush_tlb_all(void); - +extern void __flush_tlb_page(unsigned long context, unsigned long vaddr); extern void __flush_tlb_kernel_range(unsigned long start, unsigned long end); #ifndef CONFIG_SMP @@ -38,15 +54,24 @@ __flush_tlb_kernel_range(start,end); \ } while (0) +static inline void global_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr) +{ + __flush_tlb_page(CTX_HWBITS(mm->context), vaddr); +} + #else /* CONFIG_SMP */ extern void smp_flush_tlb_kernel_range(unsigned long start, unsigned long end); +extern void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr); #define flush_tlb_kernel_range(start, end) \ do { flush_tsb_kernel_range(start,end); \ smp_flush_tlb_kernel_range(start, end); \ } while (0) +#define global_flush_tlb_page(mm, vaddr) \ + smp_flush_tlb_page(mm, vaddr) + #endif /* ! CONFIG_SMP */ #endif /* _SPARC64_TLBFLUSH_H */ --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/pgtable_64.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/pgtable_64.h @@ -915,6 +915,7 @@ return remap_pfn_range(vma, from, phys_base >> PAGE_SHIFT, size, prot); } +#include #include /* We provide our own get_unmapped_area to cope with VA holes and --- linux-lts-raring-3.8.0.orig/arch/sparc/include/asm/hugetlb.h +++ linux-lts-raring-3.8.0/arch/sparc/include/asm/hugetlb.h @@ -12,7 +12,6 @@ static inline void hugetlb_prefault_arch_hook(struct mm_struct *mm) { - hugetlb_setup(mm); } static inline int is_hugepage_only_range(struct mm_struct *mm, --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/swift.S +++ linux-lts-raring-3.8.0/arch/sparc/mm/swift.S @@ -105,7 +105,7 @@ .globl swift_flush_cache_range swift_flush_cache_range: - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 sub %o2, %o1, %o2 sethi %hi(4096), %o3 cmp %o2, %o3 @@ -116,7 +116,7 @@ .globl swift_flush_cache_page swift_flush_cache_page: - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 70: ld [%o0 + AOFF_mm_context], %g2 cmp %g2, -1 @@ -219,7 +219,7 @@ .globl swift_flush_tlb_range .globl swift_flush_tlb_all swift_flush_tlb_range: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 swift_flush_tlb_mm: ld [%o0 + AOFF_mm_context], %g2 cmp %g2, -1 @@ -233,7 +233,7 @@ .globl swift_flush_tlb_page swift_flush_tlb_page: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 mov SRMMU_CTX_REG, %g1 ld [%o0 + AOFF_mm_context], %o3 andn %o1, (PAGE_SIZE - 1), %o1 --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/tlb.c +++ linux-lts-raring-3.8.0/arch/sparc/mm/tlb.c @@ -24,11 +24,17 @@ void flush_tlb_pending(void) { struct tlb_batch *tb = &get_cpu_var(tlb_batch); + struct mm_struct *mm = tb->mm; - if (tb->tlb_nr) { - flush_tsb_user(tb); + if (!tb->tlb_nr) + goto out; - if (CTX_VALID(tb->mm->context)) { + flush_tsb_user(tb); + + if (CTX_VALID(mm->context)) { + if (tb->tlb_nr == 1) { + global_flush_tlb_page(mm, tb->vaddrs[0]); + } else { #ifdef CONFIG_SMP smp_flush_tlb_pending(tb->mm, tb->tlb_nr, &tb->vaddrs[0]); @@ -37,12 +43,30 @@ tb->tlb_nr, &tb->vaddrs[0]); #endif } - tb->tlb_nr = 0; } + tb->tlb_nr = 0; + +out: put_cpu_var(tlb_batch); } +void arch_enter_lazy_mmu_mode(void) +{ + struct tlb_batch *tb = &__get_cpu_var(tlb_batch); + + tb->active = 1; +} + +void arch_leave_lazy_mmu_mode(void) +{ + struct tlb_batch *tb = &__get_cpu_var(tlb_batch); + + if (tb->tlb_nr) + flush_tlb_pending(); + tb->active = 0; +} + static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr, bool exec) { @@ -60,6 +84,12 @@ nr = 0; } + if (!tb->active) { + flush_tsb_user_page(mm, vaddr); + global_flush_tlb_page(mm, vaddr); + goto out; + } + if (nr == 0) tb->mm = mm; @@ -68,6 +98,7 @@ if (nr >= TLB_BATCH_NR) flush_tlb_pending(); +out: put_cpu_var(tlb_batch); } @@ -135,8 +166,15 @@ mm->context.huge_pte_count++; else mm->context.huge_pte_count--; - if (mm->context.huge_pte_count == 1) - hugetlb_setup(mm); + + /* Do not try to allocate the TSB hash table if we + * don't have one already. We have various locks held + * and thus we'll end up doing a GFP_KERNEL allocation + * in an atomic context. + * + * Instead, we let the first TLB miss on a hugepage + * take care of this. + */ } if (!pmd_none(orig)) { --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/hypersparc.S +++ linux-lts-raring-3.8.0/arch/sparc/mm/hypersparc.S @@ -74,7 +74,7 @@ /* The things we do for performance... */ hypersparc_flush_cache_range: - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 #ifndef CONFIG_SMP ld [%o0 + AOFF_mm_context], %g1 cmp %g1, -1 @@ -163,7 +163,7 @@ */ /* Verified, my ass... */ hypersparc_flush_cache_page: - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 ld [%o0 + AOFF_mm_context], %g2 #ifndef CONFIG_SMP cmp %g2, -1 @@ -284,7 +284,7 @@ sta %g5, [%g1] ASI_M_MMUREGS hypersparc_flush_tlb_range: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 mov SRMMU_CTX_REG, %g1 ld [%o0 + AOFF_mm_context], %o3 lda [%g1] ASI_M_MMUREGS, %g5 @@ -307,7 +307,7 @@ sta %g5, [%g1] ASI_M_MMUREGS hypersparc_flush_tlb_page: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 mov SRMMU_CTX_REG, %g1 ld [%o0 + AOFF_mm_context], %o3 andn %o1, (PAGE_SIZE - 1), %o1 --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/tsunami.S +++ linux-lts-raring-3.8.0/arch/sparc/mm/tsunami.S @@ -24,7 +24,7 @@ /* Sliiick... */ tsunami_flush_cache_page: tsunami_flush_cache_range: - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 tsunami_flush_cache_mm: ld [%o0 + AOFF_mm_context], %g2 cmp %g2, -1 @@ -46,7 +46,7 @@ /* More slick stuff... */ tsunami_flush_tlb_range: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 tsunami_flush_tlb_mm: ld [%o0 + AOFF_mm_context], %g2 cmp %g2, -1 @@ -65,7 +65,7 @@ /* This one can be done in a fine grained manner... */ tsunami_flush_tlb_page: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 mov SRMMU_CTX_REG, %g1 ld [%o0 + AOFF_mm_context], %o3 andn %o1, (PAGE_SIZE - 1), %o1 --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/init_64.c +++ linux-lts-raring-3.8.0/arch/sparc/mm/init_64.c @@ -314,16 +314,31 @@ struct tsb *tsb = mm->context.tsb_block[tsb_index].tsb; unsigned long tag; + if (unlikely(!tsb)) + return; + tsb += ((address >> tsb_hash_shift) & (mm->context.tsb_block[tsb_index].tsb_nentries - 1UL)); tag = (address >> 22UL); tsb_insert(tsb, tag, tte); } +#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) +static inline bool is_hugetlb_pte(pte_t pte) +{ + if ((tlb_type == hypervisor && + (pte_val(pte) & _PAGE_SZALL_4V) == _PAGE_SZHUGE_4V) || + (tlb_type != hypervisor && + (pte_val(pte) & _PAGE_SZALL_4U) == _PAGE_SZHUGE_4U)) + return true; + return false; +} +#endif + void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep) { - unsigned long tsb_index, tsb_hash_shift, flags; struct mm_struct *mm; + unsigned long flags; pte_t pte = *ptep; if (tlb_type != hypervisor) { @@ -335,25 +350,16 @@ mm = vma->vm_mm; - tsb_index = MM_TSB_BASE; - tsb_hash_shift = PAGE_SHIFT; - spin_lock_irqsave(&mm->context.lock, flags); #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) - if (mm->context.tsb_block[MM_TSB_HUGE].tsb != NULL) { - if ((tlb_type == hypervisor && - (pte_val(pte) & _PAGE_SZALL_4V) == _PAGE_SZHUGE_4V) || - (tlb_type != hypervisor && - (pte_val(pte) & _PAGE_SZALL_4U) == _PAGE_SZHUGE_4U)) { - tsb_index = MM_TSB_HUGE; - tsb_hash_shift = HPAGE_SHIFT; - } - } + if (mm->context.huge_pte_count && is_hugetlb_pte(pte)) + __update_mmu_tsb_insert(mm, MM_TSB_HUGE, HPAGE_SHIFT, + address, pte_val(pte)); + else #endif - - __update_mmu_tsb_insert(mm, tsb_index, tsb_hash_shift, - address, pte_val(pte)); + __update_mmu_tsb_insert(mm, MM_TSB_BASE, PAGE_SHIFT, + address, pte_val(pte)); spin_unlock_irqrestore(&mm->context.lock, flags); } @@ -1093,7 +1099,14 @@ m->size = *val; val = mdesc_get_property(md, node, "address-congruence-offset", NULL); - m->offset = *val; + + /* The address-congruence-offset property is optional. + * Explicity zero it be identifty this. + */ + if (val) + m->offset = *val; + else + m->offset = 0UL; numadbg("MBLOCK[%d]: base[%llx] size[%llx] offset[%llx]\n", count - 1, m->base, m->size, m->offset); @@ -2712,14 +2725,28 @@ load_secondary_context(mm); } -void hugetlb_setup(struct mm_struct *mm) +void hugetlb_setup(struct pt_regs *regs) { - struct tsb_config *tp = &mm->context.tsb_block[MM_TSB_HUGE]; + struct mm_struct *mm = current->mm; + struct tsb_config *tp; - if (likely(tp->tsb != NULL)) - return; + if (in_atomic() || !mm) { + const struct exception_table_entry *entry; + + entry = search_exception_tables(regs->tpc); + if (entry) { + regs->tpc = entry->fixup; + regs->tnpc = regs->tpc + 4; + return; + } + pr_alert("Unexpected HugeTLB setup in atomic context.\n"); + die_if_kernel("HugeTSB in atomic", regs); + } + + tp = &mm->context.tsb_block[MM_TSB_HUGE]; + if (likely(tp->tsb == NULL)) + tsb_grow(mm, MM_TSB_HUGE, 0); - tsb_grow(mm, MM_TSB_HUGE, 0); tsb_context_switch(mm); smp_tsb_sync(mm); --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/viking.S +++ linux-lts-raring-3.8.0/arch/sparc/mm/viking.S @@ -108,7 +108,7 @@ viking_flush_cache_page: viking_flush_cache_range: #ifndef CONFIG_SMP - ld [%o0 + 0x0], %o0 /* XXX vma->vm_mm, GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 #endif viking_flush_cache_mm: #ifndef CONFIG_SMP @@ -148,7 +148,7 @@ #endif viking_flush_tlb_range: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 mov SRMMU_CTX_REG, %g1 ld [%o0 + AOFF_mm_context], %o3 lda [%g1] ASI_M_MMUREGS, %g5 @@ -173,7 +173,7 @@ #endif viking_flush_tlb_page: - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 mov SRMMU_CTX_REG, %g1 ld [%o0 + AOFF_mm_context], %o3 lda [%g1] ASI_M_MMUREGS, %g5 @@ -239,7 +239,7 @@ tst %g5 bne 3f mov SRMMU_CTX_REG, %g1 - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 ld [%o0 + AOFF_mm_context], %o3 lda [%g1] ASI_M_MMUREGS, %g5 sethi %hi(~((1 << SRMMU_PGDIR_SHIFT) - 1)), %o4 @@ -265,7 +265,7 @@ tst %g5 bne 2f mov SRMMU_CTX_REG, %g1 - ld [%o0 + 0x00], %o0 /* XXX vma->vm_mm GROSS XXX */ + ld [%o0 + VMA_VM_MM], %o0 ld [%o0 + AOFF_mm_context], %o3 lda [%g1] ASI_M_MMUREGS, %g5 and %o1, PAGE_MASK, %o1 --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/fault_64.c +++ linux-lts-raring-3.8.0/arch/sparc/mm/fault_64.c @@ -472,8 +472,13 @@ #if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) mm_rss = mm->context.huge_pte_count; if (unlikely(mm_rss > - mm->context.tsb_block[MM_TSB_HUGE].tsb_rss_limit)) - tsb_grow(mm, MM_TSB_HUGE, mm_rss); + mm->context.tsb_block[MM_TSB_HUGE].tsb_rss_limit)) { + if (mm->context.tsb_block[MM_TSB_HUGE].tsb) + tsb_grow(mm, MM_TSB_HUGE, mm_rss); + else + hugetlb_setup(regs); + + } #endif return; --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/tsb.c +++ linux-lts-raring-3.8.0/arch/sparc/mm/tsb.c @@ -7,11 +7,10 @@ #include #include #include -#include -#include -#include #include +#include #include +#include #include extern struct tsb swapper_tsb[KERNEL_TSB_NENTRIES]; @@ -46,23 +45,27 @@ } } -static void __flush_tsb_one(struct tlb_batch *tb, unsigned long hash_shift, - unsigned long tsb, unsigned long nentries) +static void __flush_tsb_one_entry(unsigned long tsb, unsigned long v, + unsigned long hash_shift, + unsigned long nentries) { - unsigned long i; + unsigned long tag, ent, hash; - for (i = 0; i < tb->tlb_nr; i++) { - unsigned long v = tb->vaddrs[i]; - unsigned long tag, ent, hash; + v &= ~0x1UL; + hash = tsb_hash(v, hash_shift, nentries); + ent = tsb + (hash * sizeof(struct tsb)); + tag = (v >> 22UL); - v &= ~0x1UL; + tsb_flush(ent, tag); +} - hash = tsb_hash(v, hash_shift, nentries); - ent = tsb + (hash * sizeof(struct tsb)); - tag = (v >> 22UL); +static void __flush_tsb_one(struct tlb_batch *tb, unsigned long hash_shift, + unsigned long tsb, unsigned long nentries) +{ + unsigned long i; - tsb_flush(ent, tag); - } + for (i = 0; i < tb->tlb_nr; i++) + __flush_tsb_one_entry(tsb, tb->vaddrs[i], hash_shift, nentries); } void flush_tsb_user(struct tlb_batch *tb) @@ -90,6 +93,30 @@ spin_unlock_irqrestore(&mm->context.lock, flags); } +void flush_tsb_user_page(struct mm_struct *mm, unsigned long vaddr) +{ + unsigned long nentries, base, flags; + + spin_lock_irqsave(&mm->context.lock, flags); + + base = (unsigned long) mm->context.tsb_block[MM_TSB_BASE].tsb; + nentries = mm->context.tsb_block[MM_TSB_BASE].tsb_nentries; + if (tlb_type == cheetah_plus || tlb_type == hypervisor) + base = __pa(base); + __flush_tsb_one_entry(base, vaddr, PAGE_SHIFT, nentries); + +#if defined(CONFIG_HUGETLB_PAGE) || defined(CONFIG_TRANSPARENT_HUGEPAGE) + if (mm->context.tsb_block[MM_TSB_HUGE].tsb) { + base = (unsigned long) mm->context.tsb_block[MM_TSB_HUGE].tsb; + nentries = mm->context.tsb_block[MM_TSB_HUGE].tsb_nentries; + if (tlb_type == cheetah_plus || tlb_type == hypervisor) + base = __pa(base); + __flush_tsb_one_entry(base, vaddr, HPAGE_SHIFT, nentries); + } +#endif + spin_unlock_irqrestore(&mm->context.lock, flags); +} + #define HV_PGSZ_IDX_BASE HV_PGSZ_IDX_8K #define HV_PGSZ_MASK_BASE HV_PGSZ_MASK_8K @@ -314,7 +341,7 @@ retry_tsb_alloc: gfp_flags = GFP_KERNEL; if (new_size > (PAGE_SIZE * 2)) - gfp_flags = __GFP_NOWARN | __GFP_NORETRY; + gfp_flags |= __GFP_NOWARN | __GFP_NORETRY; new_tsb = kmem_cache_alloc_node(tsb_caches[new_cache_index], gfp_flags, numa_node_id()); --- linux-lts-raring-3.8.0.orig/arch/sparc/mm/ultra.S +++ linux-lts-raring-3.8.0/arch/sparc/mm/ultra.S @@ -53,6 +53,33 @@ nop .align 32 + .globl __flush_tlb_page +__flush_tlb_page: /* 22 insns */ + /* %o0 = context, %o1 = vaddr */ + rdpr %pstate, %g7 + andn %g7, PSTATE_IE, %g2 + wrpr %g2, %pstate + mov SECONDARY_CONTEXT, %o4 + ldxa [%o4] ASI_DMMU, %g2 + stxa %o0, [%o4] ASI_DMMU + andcc %o1, 1, %g0 + andn %o1, 1, %o3 + be,pn %icc, 1f + or %o3, 0x10, %o3 + stxa %g0, [%o3] ASI_IMMU_DEMAP +1: stxa %g0, [%o3] ASI_DMMU_DEMAP + membar #Sync + stxa %g2, [%o4] ASI_DMMU + sethi %hi(KERNBASE), %o4 + flush %o4 + retl + wrpr %g7, 0x0, %pstate + nop + nop + nop + nop + + .align 32 .globl __flush_tlb_pending __flush_tlb_pending: /* 26 insns */ /* %o0 = context, %o1 = nr, %o2 = vaddrs[] */ @@ -203,6 +230,31 @@ retl wrpr %g7, 0x0, %pstate +__cheetah_flush_tlb_page: /* 22 insns */ + /* %o0 = context, %o1 = vaddr */ + rdpr %pstate, %g7 + andn %g7, PSTATE_IE, %g2 + wrpr %g2, 0x0, %pstate + wrpr %g0, 1, %tl + mov PRIMARY_CONTEXT, %o4 + ldxa [%o4] ASI_DMMU, %g2 + srlx %g2, CTX_PGSZ1_NUC_SHIFT, %o3 + sllx %o3, CTX_PGSZ1_NUC_SHIFT, %o3 + or %o0, %o3, %o0 /* Preserve nucleus page size fields */ + stxa %o0, [%o4] ASI_DMMU + andcc %o1, 1, %g0 + be,pn %icc, 1f + andn %o1, 1, %o3 + stxa %g0, [%o3] ASI_IMMU_DEMAP +1: stxa %g0, [%o3] ASI_DMMU_DEMAP + membar #Sync + stxa %g2, [%o4] ASI_DMMU + sethi %hi(KERNBASE), %o4 + flush %o4 + wrpr %g0, 0, %tl + retl + wrpr %g7, 0x0, %pstate + __cheetah_flush_tlb_pending: /* 27 insns */ /* %o0 = context, %o1 = nr, %o2 = vaddrs[] */ rdpr %pstate, %g7 @@ -269,6 +321,20 @@ retl nop +__hypervisor_flush_tlb_page: /* 11 insns */ + /* %o0 = context, %o1 = vaddr */ + mov %o0, %g2 + mov %o1, %o0 /* ARG0: vaddr + IMMU-bit */ + mov %g2, %o1 /* ARG1: mmu context */ + mov HV_MMU_ALL, %o2 /* ARG2: flags */ + srlx %o0, PAGE_SHIFT, %o0 + sllx %o0, PAGE_SHIFT, %o0 + ta HV_MMU_UNMAP_ADDR_TRAP + brnz,pn %o0, __hypervisor_tlb_tl0_error + mov HV_MMU_UNMAP_ADDR_TRAP, %o1 + retl + nop + __hypervisor_flush_tlb_pending: /* 16 insns */ /* %o0 = context, %o1 = nr, %o2 = vaddrs[] */ sllx %o1, 3, %g1 @@ -339,6 +405,13 @@ call tlb_patch_one mov 19, %o2 + sethi %hi(__flush_tlb_page), %o0 + or %o0, %lo(__flush_tlb_page), %o0 + sethi %hi(__cheetah_flush_tlb_page), %o1 + or %o1, %lo(__cheetah_flush_tlb_page), %o1 + call tlb_patch_one + mov 22, %o2 + sethi %hi(__flush_tlb_pending), %o0 or %o0, %lo(__flush_tlb_pending), %o0 sethi %hi(__cheetah_flush_tlb_pending), %o1 @@ -397,10 +470,9 @@ nop nop - .globl xcall_flush_tlb_pending -xcall_flush_tlb_pending: /* 21 insns */ - /* %g5=context, %g1=nr, %g7=vaddrs[] */ - sllx %g1, 3, %g1 + .globl xcall_flush_tlb_page +xcall_flush_tlb_page: /* 17 insns */ + /* %g5=context, %g1=vaddr */ mov PRIMARY_CONTEXT, %g4 ldxa [%g4] ASI_DMMU, %g2 srlx %g2, CTX_PGSZ1_NUC_SHIFT, %g4 @@ -408,20 +480,16 @@ or %g5, %g4, %g5 mov PRIMARY_CONTEXT, %g4 stxa %g5, [%g4] ASI_DMMU -1: sub %g1, (1 << 3), %g1 - ldx [%g7 + %g1], %g5 - andcc %g5, 0x1, %g0 + andcc %g1, 0x1, %g0 be,pn %icc, 2f - - andn %g5, 0x1, %g5 + andn %g1, 0x1, %g5 stxa %g0, [%g5] ASI_IMMU_DEMAP 2: stxa %g0, [%g5] ASI_DMMU_DEMAP membar #Sync - brnz,pt %g1, 1b - nop stxa %g2, [%g4] ASI_DMMU retry nop + nop .globl xcall_flush_tlb_kernel_range xcall_flush_tlb_kernel_range: /* 25 insns */ @@ -656,15 +724,13 @@ membar #Sync retry - .globl __hypervisor_xcall_flush_tlb_pending -__hypervisor_xcall_flush_tlb_pending: /* 21 insns */ - /* %g5=ctx, %g1=nr, %g7=vaddrs[], %g2,%g3,%g4,g6=scratch */ - sllx %g1, 3, %g1 + .globl __hypervisor_xcall_flush_tlb_page +__hypervisor_xcall_flush_tlb_page: /* 17 insns */ + /* %g5=ctx, %g1=vaddr */ mov %o0, %g2 mov %o1, %g3 mov %o2, %g4 -1: sub %g1, (1 << 3), %g1 - ldx [%g7 + %g1], %o0 /* ARG0: virtual address */ + mov %g1, %o0 /* ARG0: virtual address */ mov %g5, %o1 /* ARG1: mmu context */ mov HV_MMU_ALL, %o2 /* ARG2: flags */ srlx %o0, PAGE_SHIFT, %o0 @@ -673,8 +739,6 @@ mov HV_MMU_UNMAP_ADDR_TRAP, %g6 brnz,a,pn %o0, __hypervisor_tlb_xcall_error mov %o0, %g5 - brnz,pt %g1, 1b - nop mov %g2, %o0 mov %g3, %o1 mov %g4, %o2 @@ -757,6 +821,13 @@ call tlb_patch_one mov 10, %o2 + sethi %hi(__flush_tlb_page), %o0 + or %o0, %lo(__flush_tlb_page), %o0 + sethi %hi(__hypervisor_flush_tlb_page), %o1 + or %o1, %lo(__hypervisor_flush_tlb_page), %o1 + call tlb_patch_one + mov 11, %o2 + sethi %hi(__flush_tlb_pending), %o0 or %o0, %lo(__flush_tlb_pending), %o0 sethi %hi(__hypervisor_flush_tlb_pending), %o1 @@ -788,12 +859,12 @@ call tlb_patch_one mov 21, %o2 - sethi %hi(xcall_flush_tlb_pending), %o0 - or %o0, %lo(xcall_flush_tlb_pending), %o0 - sethi %hi(__hypervisor_xcall_flush_tlb_pending), %o1 - or %o1, %lo(__hypervisor_xcall_flush_tlb_pending), %o1 + sethi %hi(xcall_flush_tlb_page), %o0 + or %o0, %lo(xcall_flush_tlb_page), %o0 + sethi %hi(__hypervisor_xcall_flush_tlb_page), %o1 + or %o1, %lo(__hypervisor_xcall_flush_tlb_page), %o1 call tlb_patch_one - mov 21, %o2 + mov 17, %o2 sethi %hi(xcall_flush_tlb_kernel_range), %o0 or %o0, %lo(xcall_flush_tlb_kernel_range), %o0 --- linux-lts-raring-3.8.0.orig/arch/sparc/kernel/tsb.S +++ linux-lts-raring-3.8.0/arch/sparc/kernel/tsb.S @@ -136,12 +136,43 @@ nop /* It is a huge page, use huge page TSB entry address we - * calculated above. + * calculated above. If the huge page TSB has not been + * allocated, setup a trap stack and call hugetlb_setup() + * to do so, then return from the trap to replay the TLB + * miss. + * + * This is necessary to handle the case of transparent huge + * pages where we don't really have a non-atomic context + * in which to allocate the hugepage TSB hash table. When + * the 'mm' faults in the hugepage for the first time, we + * thus handle it here. This also makes sure that we can + * allocate the TSB hash table on the correct NUMA node. */ TRAP_LOAD_TRAP_BLOCK(%g7, %g2) - ldx [%g7 + TRAP_PER_CPU_TSB_HUGE_TEMP], %g2 - cmp %g2, -1 - movne %xcc, %g2, %g1 + ldx [%g7 + TRAP_PER_CPU_TSB_HUGE_TEMP], %g1 + cmp %g1, -1 + bne,pt %xcc, 60f + nop + +661: rdpr %pstate, %g5 + wrpr %g5, PSTATE_AG | PSTATE_MG, %pstate + .section .sun4v_2insn_patch, "ax" + .word 661b + SET_GL(1) + nop + .previous + + rdpr %tl, %g3 + cmp %g3, 1 + bne,pn %xcc, winfix_trampoline + nop + ba,pt %xcc, etrap + rd %pc, %g7 + call hugetlb_setup + add %sp, PTREGS_OFF, %o0 + ba,pt %xcc, rtrap + nop + 60: #endif --- linux-lts-raring-3.8.0.orig/arch/sparc/kernel/smp_64.c +++ linux-lts-raring-3.8.0/arch/sparc/kernel/smp_64.c @@ -849,7 +849,7 @@ } extern unsigned long xcall_flush_tlb_mm; -extern unsigned long xcall_flush_tlb_pending; +extern unsigned long xcall_flush_tlb_page; extern unsigned long xcall_flush_tlb_kernel_range; extern unsigned long xcall_fetch_glob_regs; extern unsigned long xcall_fetch_glob_pmu; @@ -1074,22 +1074,55 @@ put_cpu(); } +struct tlb_pending_info { + unsigned long ctx; + unsigned long nr; + unsigned long *vaddrs; +}; + +static void tlb_pending_func(void *info) +{ + struct tlb_pending_info *t = info; + + __flush_tlb_pending(t->ctx, t->nr, t->vaddrs); +} + void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long *vaddrs) { u32 ctx = CTX_HWBITS(mm->context); + struct tlb_pending_info info; int cpu = get_cpu(); + info.ctx = ctx; + info.nr = nr; + info.vaddrs = vaddrs; + if (mm == current->mm && atomic_read(&mm->mm_users) == 1) cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); else - smp_cross_call_masked(&xcall_flush_tlb_pending, - ctx, nr, (unsigned long) vaddrs, - mm_cpumask(mm)); + smp_call_function_many(mm_cpumask(mm), tlb_pending_func, + &info, 1); __flush_tlb_pending(ctx, nr, vaddrs); put_cpu(); } + +void smp_flush_tlb_page(struct mm_struct *mm, unsigned long vaddr) +{ + unsigned long context = CTX_HWBITS(mm->context); + int cpu = get_cpu(); + + if (mm == current->mm && atomic_read(&mm->mm_users) == 1) + cpumask_copy(mm_cpumask(mm), cpumask_of(cpu)); + else + smp_cross_call_masked(&xcall_flush_tlb_page, + context, vaddr, 0, + mm_cpumask(mm)); + __flush_tlb_page(context, vaddr); + + put_cpu(); +} void smp_flush_tlb_kernel_range(unsigned long start, unsigned long end) { --- linux-lts-raring-3.8.0.orig/arch/sparc/kernel/asm-offsets.c +++ linux-lts-raring-3.8.0/arch/sparc/kernel/asm-offsets.c @@ -34,6 +34,8 @@ DEFINE(AOFF_task_thread, offsetof(struct task_struct, thread)); BLANK(); DEFINE(AOFF_mm_context, offsetof(struct mm_struct, context)); + BLANK(); + DEFINE(VMA_VM_MM, offsetof(struct vm_area_struct, vm_mm)); /* DEFINE(NUM_USER_SEGMENTS, TASK_SIZE>>28); */ return 0; --- linux-lts-raring-3.8.0.orig/arch/h8300/include/asm/signal.h +++ linux-lts-raring-3.8.0/arch/h8300/include/asm/signal.h @@ -29,6 +29,7 @@ void (*sa_restorer)(void); sigset_t sa_mask; /* mask last for extensibility */ }; +#define __ARCH_HAS_SA_RESTORER struct k_sigaction { struct sigaction sa; --- linux-lts-raring-3.8.0.orig/arch/mips/ath79/clock.c +++ linux-lts-raring-3.8.0/arch/mips/ath79/clock.c @@ -164,7 +164,7 @@ ath79_ahb_clk.rate = freq / t; } - ath79_wdt_clk.rate = ath79_ref_clk.rate; + ath79_wdt_clk.rate = ath79_ahb_clk.rate; ath79_uart_clk.rate = ath79_ref_clk.rate; } --- linux-lts-raring-3.8.0.orig/arch/mips/lib/bitops.c +++ linux-lts-raring-3.8.0/arch/mips/lib/bitops.c @@ -90,12 +90,12 @@ unsigned bit = nr & SZLONG_MASK; unsigned long mask; unsigned long flags; - unsigned long res; + int res; a += nr >> SZLONG_LOG; mask = 1UL << bit; raw_local_irq_save(flags); - res = (mask & *a); + res = (mask & *a) != 0; *a |= mask; raw_local_irq_restore(flags); return res; @@ -116,12 +116,12 @@ unsigned bit = nr & SZLONG_MASK; unsigned long mask; unsigned long flags; - unsigned long res; + int res; a += nr >> SZLONG_LOG; mask = 1UL << bit; raw_local_irq_save(flags); - res = (mask & *a); + res = (mask & *a) != 0; *a |= mask; raw_local_irq_restore(flags); return res; @@ -141,12 +141,12 @@ unsigned bit = nr & SZLONG_MASK; unsigned long mask; unsigned long flags; - unsigned long res; + int res; a += nr >> SZLONG_LOG; mask = 1UL << bit; raw_local_irq_save(flags); - res = (mask & *a); + res = (mask & *a) != 0; *a &= ~mask; raw_local_irq_restore(flags); return res; @@ -166,12 +166,12 @@ unsigned bit = nr & SZLONG_MASK; unsigned long mask; unsigned long flags; - unsigned long res; + int res; a += nr >> SZLONG_LOG; mask = 1UL << bit; raw_local_irq_save(flags); - res = (mask & *a); + res = (mask & *a) != 0; *a ^= mask; raw_local_irq_restore(flags); return res; --- linux-lts-raring-3.8.0.orig/arch/mips/include/asm/page.h +++ linux-lts-raring-3.8.0/arch/mips/include/asm/page.h @@ -31,7 +31,7 @@ #define PAGE_SHIFT 16 #endif #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE - 1)) +#define PAGE_MASK (~((1 << PAGE_SHIFT) - 1)) #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT #define HPAGE_SHIFT (PAGE_SHIFT + PAGE_SHIFT - 3) --- linux-lts-raring-3.8.0.orig/arch/mips/cavium-octeon/setup.c +++ linux-lts-raring-3.8.0/arch/mips/cavium-octeon/setup.c @@ -990,7 +990,7 @@ cvmx_bootmem_unlock(); /* Add the memory region for the kernel. */ kernel_start = (unsigned long) _text; - kernel_size = ALIGN(_end - _text, 0x100000); + kernel_size = _end - _text; /* Adjust for physical offset. */ kernel_start &= ~0xffffffff80000000ULL; --- linux-lts-raring-3.8.0.orig/arch/mips/kernel/mcount.S +++ linux-lts-raring-3.8.0/arch/mips/kernel/mcount.S @@ -46,10 +46,9 @@ PTR_L a5, PT_R9(sp) PTR_L a6, PT_R10(sp) PTR_L a7, PT_R11(sp) -#else - PTR_ADDIU sp, PT_SIZE #endif -.endm + PTR_ADDIU sp, PT_SIZE + .endm .macro RETURN_BACK jr ra @@ -68,7 +67,11 @@ .globl _mcount _mcount: b ftrace_stub - addiu sp,sp,8 +#ifdef CONFIG_32BIT + addiu sp,sp,8 +#else + nop +#endif /* When tracing is activated, it calls ftrace_caller+8 (aka here) */ lw t1, function_trace_stop --- linux-lts-raring-3.8.0.orig/arch/sh/include/asm/tlb.h +++ linux-lts-raring-3.8.0/arch/sh/include/asm/tlb.h @@ -36,10 +36,12 @@ } static inline void -tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned int full_mm_flush) +tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) { tlb->mm = mm; - tlb->fullmm = full_mm_flush; + tlb->start = start; + tlb->end = end; + tlb->fullmm = !(start | (end+1)); init_tlb_gather(tlb); } --- linux-lts-raring-3.8.0.orig/arch/cris/include/asm/signal.h +++ linux-lts-raring-3.8.0/arch/cris/include/asm/signal.h @@ -29,6 +29,7 @@ void (*sa_restorer)(void); sigset_t sa_mask; /* mask last for extensibility */ }; +#define __ARCH_HAS_SA_RESTORER struct k_sigaction { struct sigaction sa; --- linux-lts-raring-3.8.0.orig/arch/m68k/include/asm/div64.h +++ linux-lts-raring-3.8.0/arch/m68k/include/asm/div64.h @@ -15,16 +15,17 @@ unsigned long long n64; \ } __n; \ unsigned long __rem, __upper; \ + unsigned long __base = (base); \ \ __n.n64 = (n); \ if ((__upper = __n.n32[0])) { \ asm ("divul.l %2,%1:%0" \ - : "=d" (__n.n32[0]), "=d" (__upper) \ - : "d" (base), "0" (__n.n32[0])); \ + : "=d" (__n.n32[0]), "=d" (__upper) \ + : "d" (__base), "0" (__n.n32[0])); \ } \ asm ("divu.l %2,%1:%0" \ - : "=d" (__n.n32[1]), "=d" (__rem) \ - : "d" (base), "1" (__upper), "0" (__n.n32[1])); \ + : "=d" (__n.n32[1]), "=d" (__rem) \ + : "d" (__base), "1" (__upper), "0" (__n.n32[1])); \ (n) = __n.n64; \ __rem; \ }) --- linux-lts-raring-3.8.0.orig/arch/m68k/include/asm/signal.h +++ linux-lts-raring-3.8.0/arch/m68k/include/asm/signal.h @@ -29,6 +29,7 @@ __sigrestore_t sa_restorer; sigset_t sa_mask; /* mask last for extensibility */ }; +#define __ARCH_HAS_SA_RESTORER struct k_sigaction { struct sigaction sa; --- linux-lts-raring-3.8.0.orig/arch/m68k/emu/natfeat.c +++ linux-lts-raring-3.8.0/arch/m68k/emu/natfeat.c @@ -18,9 +18,11 @@ #include #include +extern long nf_get_id2(const char *feature_name); + asm("\n" -" .global nf_get_id,nf_call\n" -"nf_get_id:\n" +" .global nf_get_id2,nf_call\n" +"nf_get_id2:\n" " .short 0x7300\n" " rts\n" "nf_call:\n" @@ -29,12 +31,25 @@ "1: moveq.l #0,%d0\n" " rts\n" " .section __ex_table,\"a\"\n" -" .long nf_get_id,1b\n" +" .long nf_get_id2,1b\n" " .long nf_call,1b\n" " .previous"); -EXPORT_SYMBOL_GPL(nf_get_id); EXPORT_SYMBOL_GPL(nf_call); +long nf_get_id(const char *feature_name) +{ + /* feature_name may be in vmalloc()ed memory, so make a copy */ + char name_copy[32]; + size_t n; + + n = strlcpy(name_copy, feature_name, sizeof(name_copy)); + if (n >= sizeof(name_copy)) + return 0; + + return nf_get_id2(name_copy); +} +EXPORT_SYMBOL_GPL(nf_get_id); + void nfprint(const char *fmt, ...) { static char buf[256]; --- linux-lts-raring-3.8.0.orig/arch/m68k/kernel/head.S +++ linux-lts-raring-3.8.0/arch/m68k/kernel/head.S @@ -2752,11 +2752,9 @@ #ifdef CONFIG_MAC L(scc_initable_mac): - .byte 9,12 /* Reset */ .byte 4,0x44 /* x16, 1 stopbit, no parity */ .byte 3,0xc0 /* receiver: 8 bpc */ .byte 5,0xe2 /* transmitter: 8 bpc, assert dtr/rts */ - .byte 9,0 /* no interrupts */ .byte 10,0 /* NRZ */ .byte 11,0x50 /* use baud rate generator */ .byte 12,1,13,0 /* 38400 baud */ @@ -2899,6 +2897,7 @@ is_not_mac(L(serial_init_not_mac)) #ifdef SERIAL_DEBUG + /* You may define either or both of these. */ #define MAC_USE_SCC_A /* Modem port */ #define MAC_USE_SCC_B /* Printer port */ @@ -2908,9 +2907,21 @@ #define mac_scc_cha_b_data_offset 0x4 #define mac_scc_cha_a_data_offset 0x6 +#if defined(MAC_USE_SCC_A) || defined(MAC_USE_SCC_B) + movel %pc@(L(mac_sccbase)),%a0 + /* Reset SCC device */ + moveb #9,%a0@(mac_scc_cha_a_ctrl_offset) + moveb #0xc0,%a0@(mac_scc_cha_a_ctrl_offset) + /* Wait for 5 PCLK cycles, which is about 68 CPU cycles */ + /* 5 / 3.6864 MHz = approx. 1.36 us = 68 / 50 MHz */ + movel #35,%d0 +5: + subq #1,%d0 + jne 5b +#endif + #ifdef MAC_USE_SCC_A /* Initialize channel A */ - movel %pc@(L(mac_sccbase)),%a0 lea %pc@(L(scc_initable_mac)),%a1 5: moveb %a1@+,%d0 jmi 6f @@ -2922,9 +2933,6 @@ #ifdef MAC_USE_SCC_B /* Initialize channel B */ -#ifndef MAC_USE_SCC_A /* Load mac_sccbase only if needed */ - movel %pc@(L(mac_sccbase)),%a0 -#endif /* MAC_USE_SCC_A */ lea %pc@(L(scc_initable_mac)),%a1 7: moveb %a1@+,%d0 jmi 8f @@ -2933,6 +2941,7 @@ jra 7b 8: #endif /* MAC_USE_SCC_B */ + #endif /* SERIAL_DEBUG */ jra L(serial_init_done) @@ -3006,17 +3015,17 @@ #ifdef SERIAL_DEBUG -#ifdef MAC_USE_SCC_A +#if defined(MAC_USE_SCC_A) || defined(MAC_USE_SCC_B) movel %pc@(L(mac_sccbase)),%a1 +#endif + +#ifdef MAC_USE_SCC_A 3: btst #2,%a1@(mac_scc_cha_a_ctrl_offset) jeq 3b moveb %d0,%a1@(mac_scc_cha_a_data_offset) #endif /* MAC_USE_SCC_A */ #ifdef MAC_USE_SCC_B -#ifndef MAC_USE_SCC_A /* Load mac_sccbase only if needed */ - movel %pc@(L(mac_sccbase)),%a1 -#endif /* MAC_USE_SCC_A */ 4: btst #2,%a1@(mac_scc_cha_b_ctrl_offset) jeq 4b moveb %d0,%a1@(mac_scc_cha_b_data_offset) --- linux-lts-raring-3.8.0.orig/arch/avr32/configs/favr-32_defconfig +++ linux-lts-raring-3.8.0/arch/avr32/configs/favr-32_defconfig @@ -122,7 +122,6 @@ CONFIG_USB_CDC_COMPOSITE=m CONFIG_MMC=y CONFIG_MMC_ATMELMCI=y -CONFIG_MMC_ATMELMCI_DMA=y CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y CONFIG_LEDS_ATMEL_PWM=m --- linux-lts-raring-3.8.0.orig/arch/avr32/configs/merisc_defconfig +++ linux-lts-raring-3.8.0/arch/avr32/configs/merisc_defconfig @@ -102,7 +102,6 @@ CONFIG_LOGO=y CONFIG_MMC=y CONFIG_MMC_ATMELMCI=y -CONFIG_MMC_ATMELMCI_DMA=y CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y CONFIG_LEDS_ATMEL_PWM=y --- linux-lts-raring-3.8.0.orig/arch/avr32/include/asm/signal.h +++ linux-lts-raring-3.8.0/arch/avr32/include/asm/signal.h @@ -29,6 +29,7 @@ __sigrestore_t sa_restorer; sigset_t sa_mask; /* mask last for extensibility */ }; +#define __ARCH_HAS_SA_RESTORER struct k_sigaction { struct sigaction sa; --- linux-lts-raring-3.8.0.orig/arch/avr32/kernel/module.c +++ linux-lts-raring-3.8.0/arch/avr32/kernel/module.c @@ -264,7 +264,7 @@ break; case R_AVR32_GOT18SW: if ((relocation & 0xfffe0003) != 0 - && (relocation & 0xfffc0003) != 0xffff0000) + && (relocation & 0xfffc0000) != 0xfffc0000) return reloc_overflow(module, "R_AVR32_GOT18SW", relocation); relocation >>= 2; --- linux-lts-raring-3.8.0.orig/arch/x86/Kconfig +++ linux-lts-raring-3.8.0/arch/x86/Kconfig @@ -402,6 +402,12 @@ # Following is an alphabetically sorted list of 32 bit extended platforms # Please maintain the alphabetic order if and when there are additions +config X86_LPIA + bool "LPIA-compatible" + depends on X86_32 && X86_PC + help + Choose this option if your computer is an LPIA platform. + config X86_INTEL_CE bool "CE4100 TV platform" depends on PCI @@ -1253,10 +1259,6 @@ Specify the maximum number of NUMA Nodes available on the target system. Increases memory reserved to accommodate various tables. -config HAVE_ARCH_ALLOC_REMAP - def_bool y - depends on X86_32 && NUMA - config ARCH_HAVE_MEMORY_PRESENT def_bool y depends on X86_32 && DISCONTIGMEM @@ -2218,6 +2220,7 @@ config IA32_EMULATION bool "IA32 Emulation" depends on X86_64 + select BINFMT_ELF select COMPAT_BINFMT_ELF select HAVE_UID16 ---help--- @@ -2285,6 +2288,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "drivers/firmware/Kconfig" source "fs/Kconfig" --- linux-lts-raring-3.8.0.orig/arch/x86/lguest/boot.c +++ linux-lts-raring-3.8.0/arch/x86/lguest/boot.c @@ -7,8 +7,7 @@ * kernel and insert a module (lg.ko) which allows us to run other Linux * kernels the same way we'd run processes. We call the first kernel the Host, * and the others the Guests. The program which sets up and configures Guests - * (such as the example in Documentation/virtual/lguest/lguest.c) is called the - * Launcher. + * (such as the example in tools/lguest/lguest.c) is called the Launcher. * * Secondly, we only run specially modified Guests, not normal kernels: setting * CONFIG_LGUEST_GUEST to "y" compiles this file into the kernel so it knows @@ -1333,6 +1332,7 @@ pv_mmu_ops.read_cr3 = lguest_read_cr3; pv_mmu_ops.lazy_mode.enter = paravirt_enter_lazy_mmu; pv_mmu_ops.lazy_mode.leave = lguest_leave_lazy_mmu_mode; + pv_mmu_ops.lazy_mode.flush = paravirt_flush_lazy_mmu; pv_mmu_ops.pte_update = lguest_pte_update; pv_mmu_ops.pte_update_defer = lguest_pte_update; --- linux-lts-raring-3.8.0.orig/arch/x86/xen/time.c +++ linux-lts-raring-3.8.0/arch/x86/xen/time.c @@ -36,9 +36,8 @@ /* snapshots of runstate info */ static DEFINE_PER_CPU(struct vcpu_runstate_info, xen_runstate_snapshot); -/* unused ns of stolen and blocked time */ +/* unused ns of stolen time */ static DEFINE_PER_CPU(u64, xen_residual_stolen); -static DEFINE_PER_CPU(u64, xen_residual_blocked); /* return an consistent snapshot of 64-bit time/counter value */ static u64 get64(const u64 *p) @@ -115,7 +114,7 @@ { struct vcpu_runstate_info state; struct vcpu_runstate_info *snap; - s64 blocked, runnable, offline, stolen; + s64 runnable, offline, stolen; cputime_t ticks; get_runstate_snapshot(&state); @@ -125,7 +124,6 @@ snap = &__get_cpu_var(xen_runstate_snapshot); /* work out how much time the VCPU has not been runn*ing* */ - blocked = state.time[RUNSTATE_blocked] - snap->time[RUNSTATE_blocked]; runnable = state.time[RUNSTATE_runnable] - snap->time[RUNSTATE_runnable]; offline = state.time[RUNSTATE_offline] - snap->time[RUNSTATE_offline]; @@ -141,17 +139,6 @@ ticks = iter_div_u64_rem(stolen, NS_PER_TICK, &stolen); __this_cpu_write(xen_residual_stolen, stolen); account_steal_ticks(ticks); - - /* Add the appropriate number of ticks of blocked time, - including any left-overs from last time. */ - blocked += __this_cpu_read(xen_residual_blocked); - - if (blocked < 0) - blocked = 0; - - ticks = iter_div_u64_rem(blocked, NS_PER_TICK, &blocked); - __this_cpu_write(xen_residual_blocked, blocked); - account_idle_ticks(ticks); } /* Get the TSC speed from Xen */ @@ -497,7 +484,11 @@ { int cpu = smp_processor_id(); xen_setup_runstate_info(cpu); - xen_setup_timer(cpu); + /* + * xen_setup_timer(cpu) - snprintf is bad in atomic context. Hence + * doing it xen_hvm_cpu_notify (which gets called by smp_init during + * early bootup and also during CPU hotplug events). + */ xen_setup_cpu_clockevents(); } --- linux-lts-raring-3.8.0.orig/arch/x86/xen/spinlock.c +++ linux-lts-raring-3.8.0/arch/x86/xen/spinlock.c @@ -328,7 +328,6 @@ if (per_cpu(lock_spinners, cpu) == xl) { ADD_STATS(released_slow_kicked, 1); xen_send_IPI_one(cpu, XEN_SPIN_UNLOCK_VECTOR); - break; } } } --- linux-lts-raring-3.8.0.orig/arch/x86/xen/smp.c +++ linux-lts-raring-3.8.0/arch/x86/xen/smp.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -432,6 +433,13 @@ play_dead_common(); HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL); cpu_bringup(); + /* + * commit 4b0c0f294 (tick: Cleanup NOHZ per cpu data on cpu down) + * clears certain data that the cpu_idle loop (which called us + * and that we return from) expects. The only way to get that + * data back is to call: + */ + tick_nohz_idle_enter(); } #else /* !CONFIG_HOTPLUG_CPU */ @@ -658,6 +666,8 @@ unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu), NULL); unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu), NULL); unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); + xen_uninit_lock_cpu(cpu); + xen_teardown_timer(cpu); native_cpu_die(cpu); } --- linux-lts-raring-3.8.0.orig/arch/x86/xen/enlighten.c +++ linux-lts-raring-3.8.0/arch/x86/xen/enlighten.c @@ -67,6 +67,7 @@ #include #include #include +#include #ifdef CONFIG_ACPI #include @@ -155,6 +156,21 @@ BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info); + /* + * This path is called twice on PVHVM - first during bootup via + * smp_init -> xen_hvm_cpu_notify, and then if the VCPU is being + * hotplugged: cpu_up -> xen_hvm_cpu_notify. + * As we can only do the VCPUOP_register_vcpu_info once lets + * not over-write its result. + * + * For PV it is called during restore (xen_vcpu_restore) and bootup + * (xen_setup_vcpu_info_placement). The hotplug mechanism does not + * use this function. + */ + if (xen_hvm_domain()) { + if (per_cpu(xen_vcpu, cpu) == &per_cpu(xen_vcpu_info, cpu)) + return; + } if (cpu < MAX_VIRT_CPUS) per_cpu(xen_vcpu,cpu) = &HYPERVISOR_shared_info->vcpu_info[cpu]; @@ -1417,7 +1433,14 @@ */ acpi_numa = -1; #endif - +#ifdef CONFIG_X86_PAT + /* + * For right now disable the PAT. We should remove this once + * git commit 8eaffa67b43e99ae581622c5133e20b0f48bcef1 + * (xen/pat: Disable PAT support for now) is reverted. + */ + pat_enabled = 0; +#endif /* Don't do the full vcpu_info placement stuff until we have a possible map and a non-dummy shared_info. */ per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; @@ -1581,8 +1604,11 @@ switch (action) { case CPU_UP_PREPARE: xen_vcpu_setup(cpu); - if (xen_have_vector_callback) + if (xen_have_vector_callback) { xen_init_lock_cpu(cpu); + if (xen_feature(XENFEAT_hvm_safe_pvclock)) + xen_setup_timer(cpu); + } break; default: break; --- linux-lts-raring-3.8.0.orig/arch/x86/xen/mmu.c +++ linux-lts-raring-3.8.0/arch/x86/xen/mmu.c @@ -2190,6 +2190,7 @@ .lazy_mode = { .enter = paravirt_enter_lazy_mmu, .leave = xen_leave_lazy_mmu, + .flush = paravirt_flush_lazy_mmu, }, .set_fixmap = xen_set_fixmap, --- linux-lts-raring-3.8.0.orig/arch/x86/power/hibernate_32.c +++ linux-lts-raring-3.8.0/arch/x86/power/hibernate_32.c @@ -129,8 +129,6 @@ } } - resume_map_numa_kva(pgd_base); - return 0; } --- linux-lts-raring-3.8.0.orig/arch/x86/power/cpu.c +++ linux-lts-raring-3.8.0/arch/x86/power/cpu.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -228,6 +229,7 @@ do_fpu_end(); x86_platform.restore_sched_clock_state(); mtrr_bp_restore(); + perf_restore_debug_store(); } /* Needed by apm.c */ --- linux-lts-raring-3.8.0.orig/arch/x86/lib/usercopy_64.c +++ linux-lts-raring-3.8.0/arch/x86/lib/usercopy_64.c @@ -74,10 +74,10 @@ char c; unsigned zero_len; - for (; len; --len) { + for (; len; --len, to++) { if (__get_user_nocheck(c, from++, sizeof(char))) break; - if (__put_user_nocheck(c, to++, sizeof(char))) + if (__put_user_nocheck(c, to, sizeof(char))) break; } --- linux-lts-raring-3.8.0.orig/arch/x86/lib/csum-wrappers_64.c +++ linux-lts-raring-3.8.0/arch/x86/lib/csum-wrappers_64.c @@ -6,6 +6,7 @@ */ #include #include +#include /** * csum_partial_copy_from_user - Copy and checksum from user space. @@ -52,8 +53,10 @@ len -= 2; } } + stac(); isum = csum_partial_copy_generic((__force const void *)src, dst, len, isum, errp, NULL); + clac(); if (unlikely(*errp)) goto out_err; @@ -82,6 +85,8 @@ csum_partial_copy_to_user(const void *src, void __user *dst, int len, __wsum isum, int *errp) { + __wsum ret; + might_sleep(); if (unlikely(!access_ok(VERIFY_WRITE, dst, len))) { @@ -105,8 +110,11 @@ } *errp = 0; - return csum_partial_copy_generic(src, (void __force *)dst, - len, isum, NULL, errp); + stac(); + ret = csum_partial_copy_generic(src, (void __force *)dst, + len, isum, NULL, errp); + clac(); + return ret; } EXPORT_SYMBOL(csum_partial_copy_to_user); --- linux-lts-raring-3.8.0.orig/arch/x86/kvm/x86.c +++ linux-lts-raring-3.8.0/arch/x86/kvm/x86.c @@ -558,8 +558,6 @@ if (index != XCR_XFEATURE_ENABLED_MASK) return 1; xcr0 = xcr; - if (kvm_x86_ops->get_cpl(vcpu) != 0) - return 1; if (!(xcr0 & XSTATE_FP)) return 1; if ((xcr0 & XSTATE_YMM) && !(xcr0 & XSTATE_SSE)) @@ -573,7 +571,8 @@ int kvm_set_xcr(struct kvm_vcpu *vcpu, u32 index, u64 xcr) { - if (__kvm_set_xcr(vcpu, index, xcr)) { + if (kvm_x86_ops->get_cpl(vcpu) != 0 || + __kvm_set_xcr(vcpu, index, xcr)) { kvm_inject_gp(vcpu, 0); return 1; } @@ -1408,25 +1407,15 @@ unsigned long flags, this_tsc_khz; struct kvm_vcpu_arch *vcpu = &v->arch; struct kvm_arch *ka = &v->kvm->arch; - void *shared_kaddr; s64 kernel_ns, max_kernel_ns; u64 tsc_timestamp, host_tsc; - struct pvclock_vcpu_time_info *guest_hv_clock; + struct pvclock_vcpu_time_info guest_hv_clock; u8 pvclock_flags; bool use_master_clock; kernel_ns = 0; host_tsc = 0; - /* Keep irq disabled to prevent changes to the clock */ - local_irq_save(flags); - this_tsc_khz = __get_cpu_var(cpu_tsc_khz); - if (unlikely(this_tsc_khz == 0)) { - local_irq_restore(flags); - kvm_make_request(KVM_REQ_CLOCK_UPDATE, v); - return 1; - } - /* * If the host uses TSC clock, then passthrough TSC as stable * to the guest. @@ -1438,6 +1427,15 @@ kernel_ns = ka->master_kernel_ns; } spin_unlock(&ka->pvclock_gtod_sync_lock); + + /* Keep irq disabled to prevent changes to the clock */ + local_irq_save(flags); + this_tsc_khz = __get_cpu_var(cpu_tsc_khz); + if (unlikely(this_tsc_khz == 0)) { + local_irq_restore(flags); + kvm_make_request(KVM_REQ_CLOCK_UPDATE, v); + return 1; + } if (!use_master_clock) { host_tsc = native_read_tsc(); kernel_ns = get_kernel_ns(); @@ -1465,7 +1463,7 @@ local_irq_restore(flags); - if (!vcpu->time_page) + if (!vcpu->pv_time_enabled) return 0; /* @@ -1527,12 +1525,12 @@ */ vcpu->hv_clock.version += 2; - shared_kaddr = kmap_atomic(vcpu->time_page); - - guest_hv_clock = shared_kaddr + vcpu->time_offset; + if (unlikely(kvm_read_guest_cached(v->kvm, &vcpu->pv_time, + &guest_hv_clock, sizeof(guest_hv_clock)))) + return 0; /* retain PVCLOCK_GUEST_STOPPED if set in guest copy */ - pvclock_flags = (guest_hv_clock->flags & PVCLOCK_GUEST_STOPPED); + pvclock_flags = (guest_hv_clock.flags & PVCLOCK_GUEST_STOPPED); if (vcpu->pvclock_set_guest_stopped_request) { pvclock_flags |= PVCLOCK_GUEST_STOPPED; @@ -1545,12 +1543,9 @@ vcpu->hv_clock.flags = pvclock_flags; - memcpy(shared_kaddr + vcpu->time_offset, &vcpu->hv_clock, - sizeof(vcpu->hv_clock)); - - kunmap_atomic(shared_kaddr); - - mark_page_dirty(v->kvm, vcpu->time >> PAGE_SHIFT); + kvm_write_guest_cached(v->kvm, &vcpu->pv_time, + &vcpu->hv_clock, + sizeof(vcpu->hv_clock)); return 0; } @@ -1829,7 +1824,8 @@ return 0; } - if (kvm_gfn_to_hva_cache_init(vcpu->kvm, &vcpu->arch.apf.data, gpa)) + if (kvm_gfn_to_hva_cache_init(vcpu->kvm, &vcpu->arch.apf.data, gpa, + sizeof(u32))) return 1; vcpu->arch.apf.send_user_only = !(data & KVM_ASYNC_PF_SEND_ALWAYS); @@ -1839,10 +1835,7 @@ static void kvmclock_reset(struct kvm_vcpu *vcpu) { - if (vcpu->arch.time_page) { - kvm_release_page_dirty(vcpu->arch.time_page); - vcpu->arch.time_page = NULL; - } + vcpu->arch.pv_time_enabled = false; } static void accumulate_steal_time(struct kvm_vcpu *vcpu) @@ -1948,6 +1941,7 @@ break; case MSR_KVM_SYSTEM_TIME_NEW: case MSR_KVM_SYSTEM_TIME: { + u64 gpa_offset; kvmclock_reset(vcpu); vcpu->arch.time = data; @@ -1957,14 +1951,14 @@ if (!(data & 1)) break; - /* ...but clean it before doing the actual write */ - vcpu->arch.time_offset = data & ~(PAGE_MASK | 1); - - vcpu->arch.time_page = - gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT); + gpa_offset = data & ~(PAGE_MASK | 1); - if (is_error_page(vcpu->arch.time_page)) - vcpu->arch.time_page = NULL; + if (kvm_gfn_to_hva_cache_init(vcpu->kvm, + &vcpu->arch.pv_time, data & ~1ULL, + sizeof(struct pvclock_vcpu_time_info))) + vcpu->arch.pv_time_enabled = false; + else + vcpu->arch.pv_time_enabled = true; break; } @@ -1981,7 +1975,8 @@ return 1; if (kvm_gfn_to_hva_cache_init(vcpu->kvm, &vcpu->arch.st.stime, - data & KVM_STEAL_VALID_BITS)) + data & KVM_STEAL_VALID_BITS, + sizeof(struct kvm_steal_time))) return 1; vcpu->arch.st.msr_val = data; @@ -2967,7 +2962,7 @@ */ static int kvm_set_guest_paused(struct kvm_vcpu *vcpu) { - if (!vcpu->arch.time_page) + if (!vcpu->arch.pv_time_enabled) return -EINVAL; vcpu->arch.pvclock_set_guest_stopped_request = true; kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); @@ -6661,6 +6656,7 @@ goto fail_free_wbinvd_dirty_mask; vcpu->arch.ia32_tsc_adjust_msr = 0x0; + vcpu->arch.pv_time_enabled = false; kvm_async_pf_hash_reset(vcpu); kvm_pmu_init(vcpu); --- linux-lts-raring-3.8.0.orig/arch/x86/kvm/vmx.c +++ linux-lts-raring-3.8.0/arch/x86/kvm/vmx.c @@ -5059,6 +5059,12 @@ return 0; } + if (vcpu->arch.halt_request) { + vcpu->arch.halt_request = 0; + ret = kvm_emulate_halt(vcpu); + goto out; + } + if (signal_pending(current)) goto out; if (need_resched()) --- linux-lts-raring-3.8.0.orig/arch/x86/kvm/lapic.c +++ linux-lts-raring-3.8.0/arch/x86/kvm/lapic.c @@ -1781,7 +1781,7 @@ if (!pv_eoi_enabled(vcpu)) return 0; return kvm_gfn_to_hva_cache_init(vcpu->kvm, &vcpu->arch.pv_eoi.data, - addr); + addr, sizeof(u8)); } void kvm_lapic_init(void) --- linux-lts-raring-3.8.0.orig/arch/x86/kvm/emulate.c +++ linux-lts-raring-3.8.0/arch/x86/kvm/emulate.c @@ -4030,6 +4030,10 @@ break; case OpMem8: ctxt->memop.bytes = 1; + if (ctxt->memop.type == OP_REG) { + ctxt->memop.addr.reg = decode_register(ctxt, ctxt->modrm_rm, 1); + fetch_register_operand(&ctxt->memop); + } goto mem_common; case OpMem16: ctxt->memop.bytes = 2; --- linux-lts-raring-3.8.0.orig/arch/x86/ia32/ia32_signal.c +++ linux-lts-raring-3.8.0/arch/x86/ia32/ia32_signal.c @@ -467,7 +467,7 @@ else put_user_ex(0, &frame->uc.uc_flags); put_user_ex(0, &frame->uc.uc_link); - err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp); + compat_save_altstack_ex(&frame->uc.uc_stack, regs->sp); if (ka->sa.sa_flags & SA_RESTORER) restorer = ka->sa.sa_restorer; --- linux-lts-raring-3.8.0.orig/arch/x86/pci/xen.c +++ linux-lts-raring-3.8.0/arch/x86/pci/xen.c @@ -162,6 +162,9 @@ struct msi_desc *msidesc; int *v; + if (type == PCI_CAP_ID_MSI && nvec > 1) + return 1; + v = kzalloc(sizeof(int) * max(1, nvec), GFP_KERNEL); if (!v) return -ENOMEM; @@ -220,6 +223,9 @@ struct msi_desc *msidesc; struct msi_msg msg; + if (type == PCI_CAP_ID_MSI && nvec > 1) + return 1; + list_for_each_entry(msidesc, &dev->msi_list, list) { __read_msi_msg(msidesc, &msg); pirq = MSI_ADDR_EXT_DEST_ID(msg.address_hi) | @@ -263,6 +269,9 @@ int ret = 0; struct msi_desc *msidesc; + if (type == PCI_CAP_ID_MSI && nvec > 1) + return 1; + list_for_each_entry(msidesc, &dev->msi_list, list) { struct physdev_map_pirq map_irq; domid_t domid; --- linux-lts-raring-3.8.0.orig/arch/x86/pci/common.c +++ linux-lts-raring-3.8.0/arch/x86/pci/common.c @@ -618,7 +618,9 @@ pa_data = boot_params.hdr.setup_data; while (pa_data) { - data = phys_to_virt(pa_data); + data = ioremap(pa_data, sizeof(*rom)); + if (!data) + return -ENOMEM; if (data->type == SETUP_PCI) { rom = (struct pci_setup_rom *)data; @@ -635,6 +637,7 @@ } } pa_data = data->next; + iounmap(data); } return 0; } --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/paravirt.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/paravirt.h @@ -703,7 +703,10 @@ PVOP_VCALL0(pv_mmu_ops.lazy_mode.leave); } -void arch_flush_lazy_mmu_mode(void); +static inline void arch_flush_lazy_mmu_mode(void) +{ + PVOP_VCALL0(pv_mmu_ops.lazy_mode.flush); +} static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, phys_addr_t phys, pgprot_t flags) --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/syscall.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/syscall.h @@ -29,13 +29,13 @@ */ static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs) { - return regs->orig_ax & __SYSCALL_MASK; + return regs->orig_ax; } static inline void syscall_rollback(struct task_struct *task, struct pt_regs *regs) { - regs->ax = regs->orig_ax & __SYSCALL_MASK; + regs->ax = regs->orig_ax; } static inline long syscall_get_error(struct task_struct *task, --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/efi.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/efi.h @@ -102,7 +102,14 @@ extern void efi_unmap_memmap(void); extern void efi_memory_uc(u64 addr, unsigned long size); -#ifndef CONFIG_EFI +#ifdef CONFIG_EFI + +static inline bool efi_is_native(void) +{ + return IS_ENABLED(CONFIG_X86_64) == efi_enabled(EFI_64BIT); +} + +#else /* * IF EFI is not configured, have the EFI calls return -ENOSYS. */ --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/irq_remapping.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/irq_remapping.h @@ -23,6 +23,14 @@ #define __X86_IRQ_REMAPPING_H #include +#include + +struct IO_APIC_route_entry; +struct io_apic_irq_attr; +struct irq_chip; +struct msi_msg; +struct pci_dev; +struct irq_cfg; #ifdef CONFIG_IRQ_REMAP @@ -30,6 +38,7 @@ extern void setup_irq_remapping_ops(void); extern int irq_remapping_supported(void); +extern void set_irq_remapping_broken(void); extern int irq_remapping_prepare(void); extern int irq_remapping_enable(void); extern void irq_remapping_disable(void); @@ -58,6 +67,7 @@ static inline void setup_irq_remapping_ops(void) { } static inline int irq_remapping_supported(void) { return 0; } +static inline void set_irq_remapping_broken(void) { } static inline int irq_remapping_prepare(void) { return -ENODEV; } static inline int irq_remapping_enable(void) { return -ENODEV; } static inline void irq_remapping_disable(void) { } --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/kvm_host.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/kvm_host.h @@ -419,8 +419,8 @@ gpa_t time; struct pvclock_vcpu_time_info hv_clock; unsigned int hw_tsc_khz; - unsigned int time_offset; - struct page *time_page; + struct gfn_to_hva_cache pv_time; + bool pv_time_enabled; /* set guest stopped flag in pvclock flags field */ bool pvclock_set_guest_stopped_request; --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/tlb.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/tlb.h @@ -7,7 +7,7 @@ #define tlb_flush(tlb) \ { \ - if (tlb->fullmm == 0) \ + if (!tlb->fullmm && !tlb->need_flush_all) \ flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end, 0UL); \ else \ flush_tlb_mm_range(tlb->mm, 0UL, TLB_FLUSH_ALL, 0UL); \ --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/signal.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/signal.h @@ -31,6 +31,9 @@ #include #ifndef __ASSEMBLY__ extern void do_notify_resume(struct pt_regs *, void *, __u32); + +#define __ARCH_HAS_SA_RESTORER + #ifdef __i386__ struct old_sigaction { __sighandler_t sa_handler; --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/paravirt_types.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/paravirt_types.h @@ -91,6 +91,7 @@ /* Set deferred update mode, used for batching operations. */ void (*enter)(void); void (*leave)(void); + void (*flush)(void); }; struct pv_time_ops { @@ -679,6 +680,7 @@ void paravirt_enter_lazy_mmu(void); void paravirt_leave_lazy_mmu(void); +void paravirt_flush_lazy_mmu(void); void _paravirt_nop(void); u32 _paravirt_ident_32(u32); --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/checksum_32.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/checksum_32.h @@ -49,9 +49,15 @@ int len, __wsum sum, int *err_ptr) { + __wsum ret; + might_sleep(); - return csum_partial_copy_generic((__force void *)src, dst, - len, sum, err_ptr, NULL); + stac(); + ret = csum_partial_copy_generic((__force void *)src, dst, + len, sum, err_ptr, NULL); + clac(); + + return ret; } /* @@ -176,10 +182,16 @@ int len, __wsum sum, int *err_ptr) { + __wsum ret; + might_sleep(); - if (access_ok(VERIFY_WRITE, dst, len)) - return csum_partial_copy_generic(src, (__force void *)dst, - len, sum, NULL, err_ptr); + if (access_ok(VERIFY_WRITE, dst, len)) { + stac(); + ret = csum_partial_copy_generic(src, (__force void *)dst, + len, sum, NULL, err_ptr); + clac(); + return ret; + } if (len) *err_ptr = -EFAULT; --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/dma-mapping.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/dma-mapping.h @@ -163,8 +163,6 @@ { struct dma_map_ops *ops = get_dma_ops(dev); - WARN_ON(irqs_disabled()); /* for portability */ - if (dma_release_from_coherent(dev, get_order(size), vaddr)) return; --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/mmzone_32.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/mmzone_32.h @@ -14,12 +14,6 @@ #include -extern void resume_map_numa_kva(pgd_t *pgd); - -#else /* !CONFIG_NUMA */ - -static inline void resume_map_numa_kva(pgd_t *pgd) {} - #endif /* CONFIG_NUMA */ #ifdef CONFIG_DISCONTIGMEM --- linux-lts-raring-3.8.0.orig/arch/x86/include/asm/xen/hypercall.h +++ linux-lts-raring-3.8.0/arch/x86/include/asm/xen/hypercall.h @@ -382,14 +382,14 @@ return _hypercall3(int, console_io, cmd, count, str); } -extern int __must_check HYPERVISOR_physdev_op_compat(int, void *); +extern int __must_check xen_physdev_op_compat(int, void *); static inline int HYPERVISOR_physdev_op(int cmd, void *arg) { int rc = _hypercall2(int, physdev_op, cmd, arg); if (unlikely(rc == -ENOSYS)) - rc = HYPERVISOR_physdev_op_compat(cmd, arg); + rc = xen_physdev_op_compat(cmd, arg); return rc; } --- linux-lts-raring-3.8.0.orig/arch/x86/mm/numa_32.c +++ linux-lts-raring-3.8.0/arch/x86/mm/numa_32.c @@ -73,167 +73,6 @@ extern unsigned long highend_pfn, highstart_pfn; -#define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE) - -static void *node_remap_start_vaddr[MAX_NUMNODES]; -void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags); - -/* - * Remap memory allocator - */ -static unsigned long node_remap_start_pfn[MAX_NUMNODES]; -static void *node_remap_end_vaddr[MAX_NUMNODES]; -static void *node_remap_alloc_vaddr[MAX_NUMNODES]; - -/** - * alloc_remap - Allocate remapped memory - * @nid: NUMA node to allocate memory from - * @size: The size of allocation - * - * Allocate @size bytes from the remap area of NUMA node @nid. The - * size of the remap area is predetermined by init_alloc_remap() and - * only the callers considered there should call this function. For - * more info, please read the comment on top of init_alloc_remap(). - * - * The caller must be ready to handle allocation failure from this - * function and fall back to regular memory allocator in such cases. - * - * CONTEXT: - * Single CPU early boot context. - * - * RETURNS: - * Pointer to the allocated memory on success, %NULL on failure. - */ -void *alloc_remap(int nid, unsigned long size) -{ - void *allocation = node_remap_alloc_vaddr[nid]; - - size = ALIGN(size, L1_CACHE_BYTES); - - if (!allocation || (allocation + size) > node_remap_end_vaddr[nid]) - return NULL; - - node_remap_alloc_vaddr[nid] += size; - memset(allocation, 0, size); - - return allocation; -} - -#ifdef CONFIG_HIBERNATION -/** - * resume_map_numa_kva - add KVA mapping to the temporary page tables created - * during resume from hibernation - * @pgd_base - temporary resume page directory - */ -void resume_map_numa_kva(pgd_t *pgd_base) -{ - int node; - - for_each_online_node(node) { - unsigned long start_va, start_pfn, nr_pages, pfn; - - start_va = (unsigned long)node_remap_start_vaddr[node]; - start_pfn = node_remap_start_pfn[node]; - nr_pages = (node_remap_end_vaddr[node] - - node_remap_start_vaddr[node]) >> PAGE_SHIFT; - - printk(KERN_DEBUG "%s: node %d\n", __func__, node); - - for (pfn = 0; pfn < nr_pages; pfn += PTRS_PER_PTE) { - unsigned long vaddr = start_va + (pfn << PAGE_SHIFT); - pgd_t *pgd = pgd_base + pgd_index(vaddr); - pud_t *pud = pud_offset(pgd, vaddr); - pmd_t *pmd = pmd_offset(pud, vaddr); - - set_pmd(pmd, pfn_pmd(start_pfn + pfn, - PAGE_KERNEL_LARGE_EXEC)); - - printk(KERN_DEBUG "%s: %08lx -> pfn %08lx\n", - __func__, vaddr, start_pfn + pfn); - } - } -} -#endif - -/** - * init_alloc_remap - Initialize remap allocator for a NUMA node - * @nid: NUMA node to initizlie remap allocator for - * - * NUMA nodes may end up without any lowmem. As allocating pgdat and - * memmap on a different node with lowmem is inefficient, a special - * remap allocator is implemented which can be used by alloc_remap(). - * - * For each node, the amount of memory which will be necessary for - * pgdat and memmap is calculated and two memory areas of the size are - * allocated - one in the node and the other in lowmem; then, the area - * in the node is remapped to the lowmem area. - * - * As pgdat and memmap must be allocated in lowmem anyway, this - * doesn't waste lowmem address space; however, the actual lowmem - * which gets remapped over is wasted. The amount shouldn't be - * problematic on machines this feature will be used. - * - * Initialization failure isn't fatal. alloc_remap() is used - * opportunistically and the callers will fall back to other memory - * allocation mechanisms on failure. - */ -void __init init_alloc_remap(int nid, u64 start, u64 end) -{ - unsigned long start_pfn = start >> PAGE_SHIFT; - unsigned long end_pfn = end >> PAGE_SHIFT; - unsigned long size, pfn; - u64 node_pa, remap_pa; - void *remap_va; - - /* - * The acpi/srat node info can show hot-add memroy zones where - * memory could be added but not currently present. - */ - printk(KERN_DEBUG "node %d pfn: [%lx - %lx]\n", - nid, start_pfn, end_pfn); - - /* calculate the necessary space aligned to large page size */ - size = node_memmap_size_bytes(nid, start_pfn, end_pfn); - size += ALIGN(sizeof(pg_data_t), PAGE_SIZE); - size = ALIGN(size, LARGE_PAGE_BYTES); - - /* allocate node memory and the lowmem remap area */ - node_pa = memblock_find_in_range(start, end, size, LARGE_PAGE_BYTES); - if (!node_pa) { - pr_warning("remap_alloc: failed to allocate %lu bytes for node %d\n", - size, nid); - return; - } - memblock_reserve(node_pa, size); - - remap_pa = memblock_find_in_range(min_low_pfn << PAGE_SHIFT, - max_low_pfn << PAGE_SHIFT, - size, LARGE_PAGE_BYTES); - if (!remap_pa) { - pr_warning("remap_alloc: failed to allocate %lu bytes remap area for node %d\n", - size, nid); - memblock_free(node_pa, size); - return; - } - memblock_reserve(remap_pa, size); - remap_va = phys_to_virt(remap_pa); - - /* perform actual remap */ - for (pfn = 0; pfn < size >> PAGE_SHIFT; pfn += PTRS_PER_PTE) - set_pmd_pfn((unsigned long)remap_va + (pfn << PAGE_SHIFT), - (node_pa >> PAGE_SHIFT) + pfn, - PAGE_KERNEL_LARGE); - - /* initialize remap allocator parameters */ - node_remap_start_pfn[nid] = node_pa >> PAGE_SHIFT; - node_remap_start_vaddr[nid] = remap_va; - node_remap_end_vaddr[nid] = remap_va + size; - node_remap_alloc_vaddr[nid] = remap_va; - - printk(KERN_DEBUG "remap_alloc: node %d [%08llx-%08llx) -> [%p-%p)\n", - nid, node_pa, node_pa + size, remap_va, remap_va + size); -} - void __init initmem_init(void) { x86_numa_init(); --- linux-lts-raring-3.8.0.orig/arch/x86/mm/numa.c +++ linux-lts-raring-3.8.0/arch/x86/mm/numa.c @@ -193,7 +193,6 @@ static void __init setup_node_data(int nid, u64 start, u64 end) { const size_t nd_size = roundup(sizeof(pg_data_t), PAGE_SIZE); - bool remapped = false; u64 nd_pa; void *nd; int tnid; @@ -205,37 +204,28 @@ if (end && (end - start) < NODE_MIN_SIZE) return; - /* initialize remap allocator before aligning to ZONE_ALIGN */ - init_alloc_remap(nid, start, end); - start = roundup(start, ZONE_ALIGN); printk(KERN_INFO "Initmem setup node %d [mem %#010Lx-%#010Lx]\n", nid, start, end - 1); /* - * Allocate node data. Try remap allocator first, node-local - * memory and then any node. Never allocate in DMA zone. + * Allocate node data. Try node-local memory and then any node. + * Never allocate in DMA zone. */ - nd = alloc_remap(nid, nd_size); - if (nd) { - nd_pa = __pa(nd); - remapped = true; - } else { - nd_pa = memblock_alloc_nid(nd_size, SMP_CACHE_BYTES, nid); - if (!nd_pa) { - pr_err("Cannot find %zu bytes in node %d\n", - nd_size, nid); - return; - } - nd = __va(nd_pa); + nd_pa = memblock_alloc_nid(nd_size, SMP_CACHE_BYTES, nid); + if (!nd_pa) { + pr_err("Cannot find %zu bytes in node %d\n", + nd_size, nid); + return; } + nd = __va(nd_pa); /* report and initialize */ - printk(KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]%s\n", - nd_pa, nd_pa + nd_size - 1, remapped ? " (remapped)" : ""); + printk(KERN_INFO " NODE_DATA [mem %#010Lx-%#010Lx]\n", + nd_pa, nd_pa + nd_size - 1); tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT); - if (!remapped && tnid != nid) + if (tnid != nid) printk(KERN_INFO " NODE_DATA(%d) on node %d\n", nid, tnid); node_data[nid] = nd; --- linux-lts-raring-3.8.0.orig/arch/x86/mm/init.c +++ linux-lts-raring-3.8.0/arch/x86/mm/init.c @@ -45,11 +45,15 @@ int i; unsigned long puds = 0, pmds = 0, ptes = 0, tables; unsigned long start = 0, good_end; + unsigned long pgd_extra = 0; phys_addr_t base; for (i = 0; i < nr_range; i++) { unsigned long range, extra; + if ((mr[i].end >> PGDIR_SHIFT) - (mr[i].start >> PGDIR_SHIFT)) + pgd_extra++; + range = mr[i].end - mr[i].start; puds += (range + PUD_SIZE - 1) >> PUD_SHIFT; @@ -74,6 +78,7 @@ tables = roundup(puds * sizeof(pud_t), PAGE_SIZE); tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE); tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE); + tables += (pgd_extra * PAGE_SIZE); #ifdef CONFIG_X86_32 /* for fixmap */ --- linux-lts-raring-3.8.0.orig/arch/x86/mm/numa_internal.h +++ linux-lts-raring-3.8.0/arch/x86/mm/numa_internal.h @@ -21,12 +21,6 @@ void __init x86_numa_init(void); -#ifdef CONFIG_X86_64 -static inline void init_alloc_remap(int nid, u64 start, u64 end) { } -#else -void __init init_alloc_remap(int nid, u64 start, u64 end); -#endif - #ifdef CONFIG_NUMA_EMU void __init numa_emulation(struct numa_meminfo *numa_meminfo, int numa_dist_cnt); --- linux-lts-raring-3.8.0.orig/arch/x86/mm/mmap.c +++ linux-lts-raring-3.8.0/arch/x86/mm/mmap.c @@ -112,12 +112,14 @@ */ void arch_pick_mmap_layout(struct mm_struct *mm) { + mm->mmap_legacy_base = mmap_legacy_base(); + mm->mmap_base = mmap_base(); + if (mmap_is_legacy()) { - mm->mmap_base = mmap_legacy_base(); + mm->mmap_base = mm->mmap_legacy_base; mm->get_unmapped_area = arch_get_unmapped_area; mm->unmap_area = arch_unmap_area; } else { - mm->mmap_base = mmap_base(); mm->get_unmapped_area = arch_get_unmapped_area_topdown; mm->unmap_area = arch_unmap_area_topdown; } --- linux-lts-raring-3.8.0.orig/arch/x86/mm/pgtable.c +++ linux-lts-raring-3.8.0/arch/x86/mm/pgtable.c @@ -58,6 +58,13 @@ void ___pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd) { paravirt_release_pmd(__pa(pmd) >> PAGE_SHIFT); + /* + * NOTE! For PAE, any changes to the top page-directory-pointer-table + * entries need a full cr3 reload to flush. + */ +#ifdef CONFIG_X86_PAE + tlb->need_flush_all = 1; +#endif tlb_remove_page(tlb, virt_to_page(pmd)); } --- linux-lts-raring-3.8.0.orig/arch/x86/mm/fault.c +++ linux-lts-raring-3.8.0/arch/x86/mm/fault.c @@ -378,10 +378,12 @@ if (pgd_none(*pgd_ref)) return -1; - if (pgd_none(*pgd)) + if (pgd_none(*pgd)) { set_pgd(pgd, *pgd_ref); - else + arch_flush_lazy_mmu_mode(); + } else { BUG_ON(pgd_page_vaddr(*pgd) != pgd_page_vaddr(*pgd_ref)); + } /* * Below here mismatches are bugs because these lower tables --- linux-lts-raring-3.8.0.orig/arch/x86/boot/video.h +++ linux-lts-raring-3.8.0/arch/x86/boot/video.h @@ -80,7 +80,7 @@ u16 xmode_n; /* Size of unprobed mode range */ }; -#define __videocard struct card_info __attribute__((section(".videocards"))) +#define __videocard struct card_info __attribute__((used,section(".videocards"))) extern struct card_info video_cards[], video_cards_end[]; int mode_defined(u16 mode); /* video.c */ --- linux-lts-raring-3.8.0.orig/arch/x86/boot/compressed/eboot.c +++ linux-lts-raring-3.8.0/arch/x86/boot/compressed/eboot.c @@ -19,23 +19,28 @@ static efi_system_table_t *sys_table; +static void efi_char16_printk(efi_char16_t *str) +{ + struct efi_simple_text_output_protocol *out; + + out = (struct efi_simple_text_output_protocol *)sys_table->con_out; + efi_call_phys2(out->output_string, out, str); +} + static void efi_printk(char *str) { char *s8; for (s8 = str; *s8; s8++) { - struct efi_simple_text_output_protocol *out; efi_char16_t ch[2] = { 0 }; ch[0] = *s8; - out = (struct efi_simple_text_output_protocol *)sys_table->con_out; - if (*s8 == '\n') { efi_char16_t nl[2] = { '\r', 0 }; - efi_call_phys2(out->output_string, out, nl); + efi_char16_printk(nl); } - efi_call_phys2(out->output_string, out, ch); + efi_char16_printk(ch); } } @@ -709,7 +714,12 @@ if ((u8 *)p >= (u8 *)filename_16 + sizeof(filename_16)) break; - *p++ = *str++; + if (*str == '/') { + *p++ = '\\'; + *str++; + } else { + *p++ = *str++; + } } *p = '\0'; @@ -737,7 +747,9 @@ status = efi_call_phys5(fh->open, fh, &h, filename_16, EFI_FILE_MODE_READ, (u64)0); if (status != EFI_SUCCESS) { - efi_printk("Failed to open initrd file\n"); + efi_printk("Failed to open initrd file: "); + efi_char16_printk(filename_16); + efi_printk("\n"); goto close_handles; } @@ -980,18 +992,20 @@ efi_memory_desc_t *mem_map; efi_status_t status; __u32 desc_version; + bool called_exit = false; u8 nr_entries; int i; size = sizeof(*mem_map) * 32; again: - size += sizeof(*mem_map); + size += sizeof(*mem_map) * 2; _size = size; status = low_alloc(size, 1, (unsigned long *)&mem_map); if (status != EFI_SUCCESS) return status; +get_map: status = efi_call_phys5(sys_table->boottime->get_memory_map, &size, mem_map, &key, &desc_size, &desc_version); if (status == EFI_BUFFER_TOO_SMALL) { @@ -1017,8 +1031,20 @@ /* Might as well exit boot services now */ status = efi_call_phys2(sys_table->boottime->exit_boot_services, handle, key); - if (status != EFI_SUCCESS) - goto free_mem_map; + if (status != EFI_SUCCESS) { + /* + * ExitBootServices() will fail if any of the event + * handlers change the memory map. In which case, we + * must be prepared to retry, but only once so that + * we're guaranteed to exit on repeated failures instead + * of spinning forever. + */ + if (called_exit) + goto free_mem_map; + + called_exit = true; + goto get_map; + } /* Historic? */ boot_params->alt_mem_k = 32 * 1024; --- linux-lts-raring-3.8.0.orig/arch/x86/boot/compressed/Makefile +++ linux-lts-raring-3.8.0/arch/x86/boot/compressed/Makefile @@ -4,7 +4,7 @@ # create a compressed vmlinux image from the original vmlinux # -targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o +targets := vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 KBUILD_CFLAGS += -fno-strict-aliasing -fPIC @@ -29,7 +29,6 @@ $(obj)/piggy.o $(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone -$(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone ifeq ($(CONFIG_EFI_STUB), y) VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o @@ -43,7 +42,7 @@ $(obj)/vmlinux.bin: vmlinux FORCE $(call if_changed,objcopy) -targets += vmlinux.bin.all vmlinux.relocs +targets += $(patsubst $(obj)/%,%,$(VMLINUX_OBJS)) vmlinux.bin.all vmlinux.relocs CMD_RELOCS = arch/x86/tools/relocs quiet_cmd_relocs = RELOCS $@ --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/sys_x86_64.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/sys_x86_64.c @@ -101,7 +101,7 @@ *begin = new_begin; } } else { - *begin = TASK_UNMAPPED_BASE; + *begin = current->mm->mmap_legacy_base; *end = TASK_SIZE; } } --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/irq.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/irq.c @@ -165,10 +165,6 @@ u64 arch_irq_stat(void) { u64 sum = atomic_read(&irq_err_count); - -#ifdef CONFIG_X86_IO_APIC - sum += atomic_read(&irq_mis_count); -#endif return sum; } --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/setup.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/setup.c @@ -1135,8 +1135,7 @@ * mismatched firmware/kernel archtectures since there is no * support for runtime services. */ - if (efi_enabled(EFI_BOOT) && - IS_ENABLED(CONFIG_X86_64) != efi_enabled(EFI_64BIT)) { + if (efi_enabled(EFI_BOOT) && !efi_is_native()) { pr_info("efi: Setup done, disabling due to 32/64-bit mismatch\n"); efi_unmap_memmap(); } --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/signal.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/signal.c @@ -364,7 +364,7 @@ else put_user_ex(0, &frame->uc.uc_flags); put_user_ex(0, &frame->uc.uc_link); - err |= __save_altstack(&frame->uc.uc_stack, regs->sp); + save_altstack_ex(&frame->uc.uc_stack, regs->sp); /* Set up to return from userspace. */ restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); @@ -429,7 +429,7 @@ else put_user_ex(0, &frame->uc.uc_flags); put_user_ex(0, &frame->uc.uc_link); - err |= __save_altstack(&frame->uc.uc_stack, regs->sp); + save_altstack_ex(&frame->uc.uc_stack, regs->sp); /* Set up to return from userspace. If provided, use a stub already in userspace. */ @@ -496,7 +496,7 @@ else put_user_ex(0, &frame->uc.uc_flags); put_user_ex(0, &frame->uc.uc_link); - err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp); + compat_save_altstack_ex(&frame->uc.uc_stack, regs->sp); put_user_ex(0, &frame->uc.uc__pad0); if (ka->sa.sa_flags & SA_RESTORER) { --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/early-quirks.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/early-quirks.c @@ -18,6 +18,7 @@ #include #include #include +#include static void __init fix_hypertransport_config(int num, int slot, int func) { @@ -192,6 +193,29 @@ } #endif +static void __init intel_remapping_check(int num, int slot, int func) +{ + u8 revision; + u16 device; + + device = read_pci_config_16(num, slot, func, PCI_DEVICE_ID); + revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID); + + /* + * Revision 13 of all triggering devices id in this quirk have + * a problem draining interrupts when irq remapping is enabled, + * and should be flagged as broken. Additionally revisions 0x12 + * and 0x22 of device id 0x3405 has this problem. + */ + if (revision == 0x13) + set_irq_remapping_broken(); + else if ((device == 0x3405) && + ((revision == 0x12) || + (revision == 0x22))) + set_irq_remapping_broken(); + +} + #define QFLAG_APPLY_ONCE 0x1 #define QFLAG_APPLIED 0x2 #define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED) @@ -221,6 +245,12 @@ PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs }, { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs_contd }, + { PCI_VENDOR_ID_INTEL, 0x3403, PCI_CLASS_BRIDGE_HOST, + PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, + { PCI_VENDOR_ID_INTEL, 0x3405, PCI_CLASS_BRIDGE_HOST, + PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, + { PCI_VENDOR_ID_INTEL, 0x3406, PCI_CLASS_BRIDGE_HOST, + PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, {} }; --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/head.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/head.c @@ -5,8 +5,6 @@ #include #include -#define BIOS_LOWMEM_KILOBYTES 0x413 - /* * The BIOS places the EBDA/XBDA at the top of conventional * memory, and usually decreases the reported amount of @@ -16,17 +14,30 @@ * chipset: reserve a page before VGA to prevent PCI prefetch * into it (errata #56). Usually the page is reserved anyways, * unless you have no PS/2 mouse plugged in. + * + * This functions is deliberately very conservative. Losing + * memory in the bottom megabyte is rarely a problem, as long + * as we have enough memory to install the trampoline. Using + * memory that is in use by the BIOS or by some DMA device + * the BIOS didn't shut down *is* a big problem. */ + +#define BIOS_LOWMEM_KILOBYTES 0x413 +#define LOWMEM_CAP 0x9f000U /* Absolute maximum */ +#define INSANE_CUTOFF 0x20000U /* Less than this = insane */ + void __init reserve_ebda_region(void) { unsigned int lowmem, ebda_addr; - /* To determine the position of the EBDA and the */ - /* end of conventional memory, we need to look at */ - /* the BIOS data area. In a paravirtual environment */ - /* that area is absent. We'll just have to assume */ - /* that the paravirt case can handle memory setup */ - /* correctly, without our help. */ + /* + * To determine the position of the EBDA and the + * end of conventional memory, we need to look at + * the BIOS data area. In a paravirtual environment + * that area is absent. We'll just have to assume + * that the paravirt case can handle memory setup + * correctly, without our help. + */ if (paravirt_enabled()) return; @@ -37,19 +48,23 @@ /* start of EBDA area */ ebda_addr = get_bios_ebda(); - /* Fixup: bios puts an EBDA in the top 64K segment */ - /* of conventional memory, but does not adjust lowmem. */ - if ((lowmem - ebda_addr) <= 0x10000) - lowmem = ebda_addr; - - /* Fixup: bios does not report an EBDA at all. */ - /* Some old Dells seem to need 4k anyhow (bugzilla 2990) */ - if ((ebda_addr == 0) && (lowmem >= 0x9f000)) - lowmem = 0x9f000; - - /* Paranoia: should never happen, but... */ - if ((lowmem == 0) || (lowmem >= 0x100000)) - lowmem = 0x9f000; + /* + * Note: some old Dells seem to need 4k EBDA without + * reporting so, so just consider the memory above 0x9f000 + * to be off limits (bugzilla 2990). + */ + + /* If the EBDA address is below 128K, assume it is bogus */ + if (ebda_addr < INSANE_CUTOFF) + ebda_addr = LOWMEM_CAP; + + /* If lowmem is less than 128K, assume it is bogus */ + if (lowmem < INSANE_CUTOFF) + lowmem = LOWMEM_CAP; + + /* Use the lower of the lowmem and EBDA markers as the cutoff */ + lowmem = min(lowmem, ebda_addr); + lowmem = min(lowmem, LOWMEM_CAP); /* Absolute cap */ /* reserve all memory between lowmem and the 1MB mark */ memblock_reserve(lowmem, 0x100000 - lowmem); --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/pvclock.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/pvclock.c @@ -185,7 +185,7 @@ for (idx = 0; idx <= (PVCLOCK_FIXMAP_END-PVCLOCK_FIXMAP_BEGIN); idx++) { __set_fixmap(PVCLOCK_FIXMAP_BEGIN + idx, - __pa_symbol(i) + (idx*PAGE_SIZE), + __pa(i) + (idx*PAGE_SIZE), PAGE_KERNEL_VVAR); } --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/relocate_kernel_64.S +++ linux-lts-raring-3.8.0/arch/x86/kernel/relocate_kernel_64.S @@ -160,7 +160,7 @@ xorq %rbp, %rbp xorq %r8, %r8 xorq %r9, %r9 - xorq %r10, %r9 + xorq %r10, %r10 xorq %r11, %r11 xorq %r12, %r12 xorq %r13, %r13 --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/reboot.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/reboot.c @@ -423,6 +423,14 @@ DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"), }, }, + { /* 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 Latitude E6420. */ .callback = set_pci_reboot, .ident = "Dell Latitude E6420", @@ -447,6 +455,54 @@ DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), }, }, + { /* Handle problems with rebooting on the Dell PowerEdge C6100. */ + .callback = set_pci_reboot, + .ident = "Dell PowerEdge C6100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), + }, + }, + { /* Some C6100 machines were shipped with vendor being 'Dell'. */ + .callback = set_pci_reboot, + .ident = "Dell PowerEdge C6100", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell"), + DMI_MATCH(DMI_PRODUCT_NAME, "C6100"), + }, + }, + { /* 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 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-lts-raring-3.8.0.orig/arch/x86/kernel/i387.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/i387.c @@ -22,23 +22,19 @@ /* * Were we in an interrupt that interrupted kernel mode? * - * For now, with eagerfpu we will return interrupted kernel FPU - * state as not-idle. TBD: Ideally we can change the return value - * to something like __thread_has_fpu(current). But we need to - * be careful of doing __thread_clear_has_fpu() before saving - * the FPU etc for supporting nested uses etc. For now, take - * the simple route! - * * On others, we can do a kernel_fpu_begin/end() pair *ONLY* if that * pair does nothing at all: the thread must not have fpu (so * that we don't try to save the FPU state), and TS must * be set (so that the clts/stts pair does nothing that is * visible in the interrupted kernel thread). + * + * Except for the eagerfpu case when we return 1 unless we've already + * been eager and saved the state in kernel_fpu_begin(). */ static inline bool interrupted_kernel_fpu_idle(void) { if (use_eager_fpu()) - return 0; + return __thread_has_fpu(current); return !__thread_has_fpu(current) && (read_cr0() & X86_CR0_TS); @@ -78,8 +74,8 @@ struct task_struct *me = current; if (__thread_has_fpu(me)) { - __save_init_fpu(me); __thread_clear_has_fpu(me); + __save_init_fpu(me); /* We do 'stts()' in __kernel_fpu_end() */ } else if (!use_eager_fpu()) { this_cpu_write(fpu_owner_task, NULL); @@ -120,7 +116,7 @@ if (cpu_has_fxsr) { memset(&fx_scratch, 0, sizeof(struct i387_fxsave_struct)); - asm volatile("fxsave %0" : : "m" (fx_scratch)); + asm volatile("fxsave %0" : "+m" (fx_scratch)); mask = fx_scratch.mxcsr_mask; if (mask == 0) mask = 0x0000ffbf; --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/paravirt.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/paravirt.c @@ -263,6 +263,18 @@ leave_lazy(PARAVIRT_LAZY_MMU); } +void paravirt_flush_lazy_mmu(void) +{ + preempt_disable(); + + if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU) { + arch_leave_lazy_mmu_mode(); + arch_enter_lazy_mmu_mode(); + } + + preempt_enable(); +} + void paravirt_start_context_switch(struct task_struct *prev) { BUG_ON(preemptible()); @@ -292,18 +304,6 @@ return this_cpu_read(paravirt_lazy_mode); } -void arch_flush_lazy_mmu_mode(void) -{ - preempt_disable(); - - if (paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU) { - arch_leave_lazy_mmu_mode(); - arch_enter_lazy_mmu_mode(); - } - - preempt_enable(); -} - struct pv_info pv_info = { .name = "bare hardware", .paravirt_enabled = 0, @@ -475,6 +475,7 @@ .lazy_mode = { .enter = paravirt_nop, .leave = paravirt_nop, + .flush = paravirt_nop, }, .set_fixmap = native_set_fixmap, --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/kvmclock.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/kvmclock.c @@ -218,6 +218,9 @@ void __init kvmclock_init(void) { unsigned long mem; + int size; + + size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); if (!kvm_para_available()) return; @@ -231,16 +234,15 @@ printk(KERN_INFO "kvm-clock: Using msrs %x and %x", msr_kvm_system_time, msr_kvm_wall_clock); - mem = memblock_alloc(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS, - PAGE_SIZE); + mem = memblock_alloc(size, PAGE_SIZE); if (!mem) return; hv_clock = __va(mem); + memset(hv_clock, 0, size); if (kvm_register_clock("boot clock")) { hv_clock = NULL; - memblock_free(mem, - sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); + memblock_free(mem, size); return; } pv_time_ops.sched_clock = kvm_clock_read; @@ -275,7 +277,7 @@ struct pvclock_vcpu_time_info *vcpu_time; unsigned int size; - size = sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS; + size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); preempt_disable(); cpu = smp_processor_id(); --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/acpi/sleep.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/acpi/sleep.c @@ -48,9 +48,20 @@ #ifndef CONFIG_64BIT store_gdt((struct desc_ptr *)&header->pmode_gdt); + /* + * We have to check that we can write back the value, and not + * just read it. At least on 90 nm Pentium M (Family 6, Model + * 13), reading an invalid MSR is not guaranteed to trap, see + * Erratum X4 in "Intel Pentium M Processor on 90 nm Process + * with 2-MB L2 Cache and Intel® Processor A100 and A110 on 90 + * nm process with 512-KB L2 Cache Specification Update". + */ if (!rdmsr_safe(MSR_EFER, &header->pmode_efer_low, - &header->pmode_efer_high)) + &header->pmode_efer_high) && + !wrmsr_safe(MSR_EFER, + header->pmode_efer_low, + header->pmode_efer_high)) header->pmode_behavior |= (1 << WAKEUP_BEHAVIOR_RESTORE_EFER); #endif /* !CONFIG_64BIT */ @@ -61,7 +72,10 @@ } if (!rdmsr_safe(MSR_IA32_MISC_ENABLE, &header->pmode_misc_en_low, - &header->pmode_misc_en_high)) + &header->pmode_misc_en_high) && + !wrmsr_safe(MSR_IA32_MISC_ENABLE, + header->pmode_misc_en_low, + header->pmode_misc_en_high)) header->pmode_behavior |= (1 << WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE); header->realmode_flags = acpi_realmode_flags; --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/perf_event_intel_ds.c @@ -729,3 +729,13 @@ } } } + +void perf_restore_debug_store(void) +{ + struct debug_store *ds = __this_cpu_read(cpu_hw_events.ds); + + if (!x86_pmu.bts && !x86_pmu.pebs) + return; + + wrmsrl(MSR_IA32_DS_AREA, (unsigned long)ds); +} --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/perf_event_intel.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/perf_event_intel.c @@ -128,8 +128,14 @@ }; static struct extra_reg intel_snb_extra_regs[] __read_mostly = { - INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0x3fffffffffull, RSP_0), - INTEL_EVENT_EXTRA_REG(0xbb, MSR_OFFCORE_RSP_1, 0x3fffffffffull, RSP_1), + INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0x3f807f8fffull, RSP_0), + INTEL_EVENT_EXTRA_REG(0xbb, MSR_OFFCORE_RSP_1, 0x3f807f8fffull, RSP_1), + EVENT_EXTRA_END +}; + +static struct extra_reg intel_snbep_extra_regs[] __read_mostly = { + INTEL_EVENT_EXTRA_REG(0xb7, MSR_OFFCORE_RSP_0, 0x3fffff8fffull, RSP_0), + INTEL_EVENT_EXTRA_REG(0xbb, MSR_OFFCORE_RSP_1, 0x3fffff8fffull, RSP_1), EVENT_EXTRA_END }; @@ -2072,7 +2078,10 @@ x86_pmu.event_constraints = intel_snb_event_constraints; x86_pmu.pebs_constraints = intel_snb_pebs_event_constraints; x86_pmu.pebs_aliases = intel_pebs_aliases_snb; - x86_pmu.extra_regs = intel_snb_extra_regs; + if (boot_cpu_data.x86_model == 45) + x86_pmu.extra_regs = intel_snbep_extra_regs; + else + x86_pmu.extra_regs = intel_snb_extra_regs; /* all extra regs are per-cpu when HT is on */ x86_pmu.er_flags |= ERF_HAS_RSP_1; x86_pmu.er_flags |= ERF_NO_HT_SHARING; @@ -2098,7 +2107,10 @@ x86_pmu.event_constraints = intel_snb_event_constraints; x86_pmu.pebs_constraints = intel_ivb_pebs_event_constraints; x86_pmu.pebs_aliases = intel_pebs_aliases_snb; - x86_pmu.extra_regs = intel_snb_extra_regs; + if (boot_cpu_data.x86_model == 62) + x86_pmu.extra_regs = intel_snbep_extra_regs; + else + x86_pmu.extra_regs = intel_snb_extra_regs; /* all extra regs are per-cpu when HT is on */ x86_pmu.er_flags |= ERF_HAS_RSP_1; x86_pmu.er_flags |= ERF_NO_HT_SHARING; --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/mshyperv.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/mshyperv.c @@ -68,7 +68,8 @@ printk(KERN_INFO "HyperV: features 0x%x, hints 0x%x\n", ms_hyperv.features, ms_hyperv.hints); - clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100); + if (ms_hyperv.features & HV_X64_MSR_TIME_REF_COUNT_AVAILABLE) + clocksource_register_hz(&hyperv_cs, NSEC_PER_SEC/100); } const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = { --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/perf_event_intel_lbr.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/perf_event_intel_lbr.c @@ -310,7 +310,7 @@ * - in case there is no HW filter * - in case the HW filter has errata or limitations */ -static void intel_pmu_setup_sw_lbr_filter(struct perf_event *event) +static int intel_pmu_setup_sw_lbr_filter(struct perf_event *event) { u64 br_type = event->attr.branch_sample_type; int mask = 0; @@ -318,8 +318,11 @@ if (br_type & PERF_SAMPLE_BRANCH_USER) mask |= X86_BR_USER; - if (br_type & PERF_SAMPLE_BRANCH_KERNEL) + if (br_type & PERF_SAMPLE_BRANCH_KERNEL) { + if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN)) + return -EACCES; mask |= X86_BR_KERNEL; + } /* we ignore BRANCH_HV here */ @@ -339,6 +342,8 @@ * be used by fixup code for some CPU */ event->hw.branch_reg.reg = mask; + + return 0; } /* @@ -386,7 +391,9 @@ /* * setup SW LBR filter */ - intel_pmu_setup_sw_lbr_filter(event); + ret = intel_pmu_setup_sw_lbr_filter(event); + if (ret) + return ret; /* * setup HW LBR filter, if any @@ -442,8 +449,18 @@ return X86_BR_NONE; addr = buf; - } else - addr = (void *)from; + } else { + /* + * The LBR logs any address in the IP, even if the IP just + * faulted. This means userspace can control the from address. + * Ensure we don't blindy read any address by validating it is + * a known text address. + */ + if (kernel_text_address(from)) + addr = (void *)from; + else + return X86_BR_NONE; + } /* * decoder needs to know the ABI especially --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/perf_event_intel_uncore.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/perf_event_intel_uncore.c @@ -315,8 +315,8 @@ static struct uncore_event_desc snbep_uncore_qpi_events[] = { INTEL_UNCORE_EVENT_DESC(clockticks, "event=0x14"), INTEL_UNCORE_EVENT_DESC(txl_flits_active, "event=0x00,umask=0x06"), - INTEL_UNCORE_EVENT_DESC(drs_data, "event=0x02,umask=0x08"), - INTEL_UNCORE_EVENT_DESC(ncb_data, "event=0x03,umask=0x04"), + INTEL_UNCORE_EVENT_DESC(drs_data, "event=0x102,umask=0x08"), + INTEL_UNCORE_EVENT_DESC(ncb_data, "event=0x103,umask=0x04"), { /* end: all zeroes */ }, }; @@ -2428,7 +2428,7 @@ static int __init uncore_type_init(struct intel_uncore_type *type) { struct intel_uncore_pmu *pmus; - struct attribute_group *events_group; + struct attribute_group *attr_group; struct attribute **attrs; int i, j; @@ -2455,19 +2455,19 @@ while (type->event_descs[i].attr.attr.name) i++; - events_group = kzalloc(sizeof(struct attribute *) * (i + 1) + - sizeof(*events_group), GFP_KERNEL); - if (!events_group) + attr_group = kzalloc(sizeof(struct attribute *) * (i + 1) + + sizeof(*attr_group), GFP_KERNEL); + if (!attr_group) goto fail; - attrs = (struct attribute **)(events_group + 1); - events_group->name = "events"; - events_group->attrs = attrs; + attrs = (struct attribute **)(attr_group + 1); + attr_group->name = "events"; + attr_group->attrs = attrs; for (j = 0; j < i; j++) attrs[j] = &type->event_descs[j].attr.attr; - type->events_group = events_group; + type->events_group = attr_group; } type->pmu_group = &uncore_pmu_attr_group; @@ -2853,6 +2853,7 @@ msr_uncores = nhm_msr_uncores; break; case 42: /* Sandy Bridge */ + case 58: /* Ivy Bridge */ if (snb_uncore_cbox.num_boxes > max_cores) snb_uncore_cbox.num_boxes = max_cores; msr_uncores = snb_msr_uncores; --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/mcheck/therm_throt.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/mcheck/therm_throt.c @@ -181,11 +181,6 @@ this_cpu, level == CORE_LEVEL ? "Core" : "Package", state->count); - else - printk(KERN_CRIT "CPU%d: %s power limit notification (total events = %lu)\n", - this_cpu, - level == CORE_LEVEL ? "Core" : "Package", - state->count); return 1; } if (old_event) { @@ -193,10 +188,6 @@ printk(KERN_INFO "CPU%d: %s temperature/speed normal\n", this_cpu, level == CORE_LEVEL ? "Core" : "Package"); - else - printk(KERN_INFO "CPU%d: %s power limit normal\n", - this_cpu, - level == CORE_LEVEL ? "Core" : "Package"); return 1; } @@ -219,6 +210,15 @@ return 1; } +static bool int_pln_enable; +static int __init int_pln_enable_setup(char *s) +{ + int_pln_enable = true; + + return 1; +} +__setup("int_pln_enable", int_pln_enable_setup); + #ifdef CONFIG_SYSFS /* Add/Remove thermal_throttle interface for CPU device: */ static __cpuinit int thermal_throttle_add_dev(struct device *dev, @@ -231,7 +231,7 @@ if (err) return err; - if (cpu_has(c, X86_FEATURE_PLN)) + if (cpu_has(c, X86_FEATURE_PLN) && int_pln_enable) err = sysfs_add_file_to_group(&dev->kobj, &dev_attr_core_power_limit_count.attr, thermal_attr_group.name); @@ -239,7 +239,7 @@ err = sysfs_add_file_to_group(&dev->kobj, &dev_attr_package_throttle_count.attr, thermal_attr_group.name); - if (cpu_has(c, X86_FEATURE_PLN)) + if (cpu_has(c, X86_FEATURE_PLN) && int_pln_enable) err = sysfs_add_file_to_group(&dev->kobj, &dev_attr_package_power_limit_count.attr, thermal_attr_group.name); @@ -352,7 +352,7 @@ CORE_LEVEL) != 0) mce_log_therm_throt_event(msr_val); - if (this_cpu_has(X86_FEATURE_PLN)) + if (this_cpu_has(X86_FEATURE_PLN) && int_pln_enable) therm_throt_process(msr_val & THERM_STATUS_POWER_LIMIT, POWER_LIMIT_EVENT, CORE_LEVEL); @@ -362,7 +362,7 @@ therm_throt_process(msr_val & PACKAGE_THERM_STATUS_PROCHOT, THERMAL_THROTTLING_EVENT, PACKAGE_LEVEL); - if (this_cpu_has(X86_FEATURE_PLN)) + if (this_cpu_has(X86_FEATURE_PLN) && int_pln_enable) therm_throt_process(msr_val & PACKAGE_THERM_STATUS_POWER_LIMIT, POWER_LIMIT_EVENT, @@ -470,9 +470,13 @@ apic_write(APIC_LVTTHMR, h); rdmsr(MSR_IA32_THERM_INTERRUPT, l, h); - if (cpu_has(c, X86_FEATURE_PLN)) + if (cpu_has(c, X86_FEATURE_PLN) && !int_pln_enable) + wrmsr(MSR_IA32_THERM_INTERRUPT, + (l | (THERM_INT_LOW_ENABLE + | THERM_INT_HIGH_ENABLE)) & ~THERM_INT_PLN_ENABLE, h); + else if (cpu_has(c, X86_FEATURE_PLN) && int_pln_enable) wrmsr(MSR_IA32_THERM_INTERRUPT, - l | (THERM_INT_LOW_ENABLE + l | (THERM_INT_LOW_ENABLE | THERM_INT_HIGH_ENABLE | THERM_INT_PLN_ENABLE), h); else wrmsr(MSR_IA32_THERM_INTERRUPT, @@ -480,9 +484,14 @@ if (cpu_has(c, X86_FEATURE_PTS)) { rdmsr(MSR_IA32_PACKAGE_THERM_INTERRUPT, l, h); - if (cpu_has(c, X86_FEATURE_PLN)) + if (cpu_has(c, X86_FEATURE_PLN) && !int_pln_enable) + wrmsr(MSR_IA32_PACKAGE_THERM_INTERRUPT, + (l | (PACKAGE_THERM_INT_LOW_ENABLE + | PACKAGE_THERM_INT_HIGH_ENABLE)) + & ~PACKAGE_THERM_INT_PLN_ENABLE, h); + else if (cpu_has(c, X86_FEATURE_PLN) && int_pln_enable) wrmsr(MSR_IA32_PACKAGE_THERM_INTERRUPT, - l | (PACKAGE_THERM_INT_LOW_ENABLE + l | (PACKAGE_THERM_INT_LOW_ENABLE | PACKAGE_THERM_INT_HIGH_ENABLE | PACKAGE_THERM_INT_PLN_ENABLE), h); else --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/mtrr/main.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/mtrr/main.c @@ -305,7 +305,8 @@ return -EINVAL; } - if (base & size_or_mask || size & size_or_mask) { + if ((base | (base + size - 1)) >> + (boot_cpu_data.x86_phys_bits - PAGE_SHIFT)) { pr_warning("mtrr: base or size exceeds the MTRR width\n"); return -EINVAL; } @@ -583,6 +584,7 @@ int __initdata changed_by_mtrr_cleanup; +#define SIZE_OR_MASK_BITS(n) (~((1ULL << ((n) - PAGE_SHIFT)) - 1)) /** * mtrr_bp_init - initialize mtrrs on the boot CPU * @@ -600,7 +602,7 @@ if (cpu_has_mtrr) { mtrr_if = &generic_mtrr_ops; - size_or_mask = 0xff000000; /* 36 bits */ + size_or_mask = SIZE_OR_MASK_BITS(36); size_and_mask = 0x00f00000; phys_addr = 36; @@ -619,7 +621,7 @@ boot_cpu_data.x86_mask == 0x4)) phys_addr = 36; - size_or_mask = ~((1ULL << (phys_addr - PAGE_SHIFT)) - 1); + size_or_mask = SIZE_OR_MASK_BITS(phys_addr); size_and_mask = ~size_or_mask & 0xfffff00000ULL; } else if (boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR && boot_cpu_data.x86 == 6) { @@ -627,7 +629,7 @@ * VIA C* family have Intel style MTRRs, * but don't support PAE */ - size_or_mask = 0xfff00000; /* 32 bits */ + size_or_mask = SIZE_OR_MASK_BITS(32); size_and_mask = 0; phys_addr = 32; } @@ -637,21 +639,21 @@ if (cpu_has_k6_mtrr) { /* Pre-Athlon (K6) AMD CPU MTRRs */ mtrr_if = mtrr_ops[X86_VENDOR_AMD]; - size_or_mask = 0xfff00000; /* 32 bits */ + size_or_mask = SIZE_OR_MASK_BITS(32); size_and_mask = 0; } break; case X86_VENDOR_CENTAUR: if (cpu_has_centaur_mcr) { mtrr_if = mtrr_ops[X86_VENDOR_CENTAUR]; - size_or_mask = 0xfff00000; /* 32 bits */ + size_or_mask = SIZE_OR_MASK_BITS(32); size_and_mask = 0; } break; case X86_VENDOR_CYRIX: if (cpu_has_cyrix_arr) { mtrr_if = mtrr_ops[X86_VENDOR_CYRIX]; - size_or_mask = 0xfff00000; /* 32 bits */ + size_or_mask = SIZE_OR_MASK_BITS(32); size_and_mask = 0; } break; --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/cpu/mtrr/generic.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/cpu/mtrr/generic.c @@ -510,8 +510,9 @@ static void generic_get_mtrr(unsigned int reg, unsigned long *base, unsigned long *size, mtrr_type *type) { - unsigned int mask_lo, mask_hi, base_lo, base_hi; - unsigned int tmp, hi; + u32 mask_lo, mask_hi, base_lo, base_hi; + unsigned int hi; + u64 tmp, mask; /* * get_mtrr doesn't need to update mtrr_state, also it could be called @@ -532,18 +533,18 @@ rdmsr(MTRRphysBase_MSR(reg), base_lo, base_hi); /* Work out the shifted address mask: */ - tmp = mask_hi << (32 - PAGE_SHIFT) | mask_lo >> PAGE_SHIFT; - mask_lo = size_or_mask | tmp; + tmp = (u64)mask_hi << (32 - PAGE_SHIFT) | mask_lo >> PAGE_SHIFT; + mask = size_or_mask | tmp; /* Expand tmp with high bits to all 1s: */ - hi = fls(tmp); + hi = fls64(tmp); if (hi > 0) { - tmp |= ~((1<<(hi - 1)) - 1); + tmp |= ~((1ULL<<(hi - 1)) - 1); - if (tmp != mask_lo) { + if (tmp != mask) { printk(KERN_WARNING "mtrr: your BIOS has configured an incorrect mask, fixing it.\n"); add_taint(TAINT_FIRMWARE_WORKAROUND); - mask_lo = tmp; + mask = tmp; } } @@ -551,8 +552,8 @@ * This works correctly if size is a power of two, i.e. a * contiguous range: */ - *size = -mask_lo; - *base = base_hi << (32 - PAGE_SHIFT) | base_lo >> PAGE_SHIFT; + *size = -mask; + *base = (u64)base_hi << (32 - PAGE_SHIFT) | base_lo >> PAGE_SHIFT; *type = base_lo & 0xff; out_put_cpu: --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/apic/ipi.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/apic/ipi.c @@ -106,7 +106,7 @@ unsigned long mask = cpumask_bits(cpumask)[0]; unsigned long flags; - if (WARN_ONCE(!mask, "empty IPI mask")) + if (!mask) return; local_irq_save(flags); --- linux-lts-raring-3.8.0.orig/arch/x86/kernel/apic/apic.c +++ linux-lts-raring-3.8.0/arch/x86/kernel/apic/apic.c @@ -131,7 +131,7 @@ { if (config_enabled(CONFIG_X86_32) && !arg) force_enable_local_apic = 1; - else if (!strncmp(arg, "notscdeadline", 13)) + else if (arg && !strncmp(arg, "notscdeadline", 13)) setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER); return 0; } --- linux-lts-raring-3.8.0.orig/arch/x86/platform/efi/efi.c +++ linux-lts-raring-3.8.0/arch/x86/platform/efi/efi.c @@ -51,6 +51,13 @@ #define EFI_DEBUG 1 +#define EFI_MIN_RESERVE 5120 + +#define EFI_DUMMY_GUID \ + EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9) + +static efi_char16_t efi_dummy_name[6] = { 'D', 'U', 'M', 'M', 'Y', 0 }; + struct efi __read_mostly efi = { .mps = EFI_INVALID_TABLE_ADDR, .acpi = EFI_INVALID_TABLE_ADDR, @@ -69,11 +76,6 @@ static struct efi efi_phys __initdata; static efi_system_table_t efi_systab __initdata; -static inline bool efi_is_native(void) -{ - return IS_ENABLED(CONFIG_X86_64) == efi_enabled(EFI_64BIT); -} - unsigned long x86_efi_facility; /* @@ -85,9 +87,10 @@ } EXPORT_SYMBOL(efi_enabled); +static bool disable_runtime = false; static int __init setup_noefi(char *arg) { - clear_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility); + disable_runtime = true; return 0; } early_param("noefi", setup_noefi); @@ -102,6 +105,15 @@ } early_param("add_efi_memmap", setup_add_efi_memmap); +static bool efi_no_storage_paranoia; + +static int __init setup_storage_paranoia(char *arg) +{ + efi_no_storage_paranoia = true; + return 0; +} +early_param("efi_no_storage_paranoia", setup_storage_paranoia); + static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc) { @@ -734,7 +746,7 @@ if (!efi_is_native()) pr_info("No EFI runtime due to 32/64-bit mismatch with kernel\n"); else { - if (efi_runtime_init()) + if (disable_runtime || efi_runtime_init()) return; set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility); } @@ -888,10 +900,13 @@ for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { md = p; - if (!(md->attribute & EFI_MEMORY_RUNTIME) && - md->type != EFI_BOOT_SERVICES_CODE && - md->type != EFI_BOOT_SERVICES_DATA) - continue; + if (!(md->attribute & EFI_MEMORY_RUNTIME)) { +#ifdef CONFIG_X86_64 + if (md->type != EFI_BOOT_SERVICES_CODE && + md->type != EFI_BOOT_SERVICES_DATA) +#endif + continue; + } size = md->num_pages << EFI_PAGE_SHIFT; end = md->phys_addr + size; @@ -967,6 +982,13 @@ runtime_code_page_mkexec(); kfree(new_memmap); + + /* clean DUMMY object */ + efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + 0, NULL); } /* @@ -1004,3 +1026,85 @@ } return 0; } + +/* + * Some firmware has serious problems when using more than 50% of the EFI + * variable store, i.e. it triggers bugs that can brick machines. Ensure that + * we never use more than this safe limit. + * + * Return EFI_SUCCESS if it is safe to write 'size' bytes to the variable + * store. + */ +efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) +{ + efi_status_t status; + u64 storage_size, remaining_size, max_size; + + if (!(attributes & EFI_VARIABLE_NON_VOLATILE)) + return 0; + + status = efi.query_variable_info(attributes, &storage_size, + &remaining_size, &max_size); + if (status != EFI_SUCCESS) + return status; + + /* + * Some firmware implementations refuse to boot if there's insufficient + * space in the variable store. We account for that by refusing the + * write if permitting it would reduce the available space to under + * 5KB. This figure was provided by Samsung, so should be safe. + */ + if ((remaining_size - size < EFI_MIN_RESERVE) && + !efi_no_storage_paranoia) { + + /* + * Triggering garbage collection may require that the firmware + * generate a real EFI_OUT_OF_RESOURCES error. We can force + * that by attempting to use more space than is available. + */ + unsigned long dummy_size = remaining_size + 1024; + void *dummy = kzalloc(dummy_size, GFP_ATOMIC); + + if (!dummy) + return EFI_OUT_OF_RESOURCES; + + status = efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + dummy_size, dummy); + + if (status == EFI_SUCCESS) { + /* + * This should have failed, so if it didn't make sure + * that we delete it... + */ + efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + 0, dummy); + } + + kfree(dummy); + + /* + * The runtime code may now have triggered a garbage collection + * run, so check the variable info again + */ + status = efi.query_variable_info(attributes, &storage_size, + &remaining_size, &max_size); + + if (status != EFI_SUCCESS) + return status; + + /* + * There still isn't enough room, so return an error + */ + if (remaining_size - size < EFI_MIN_RESERVE) + return EFI_OUT_OF_RESOURCES; + } + + return EFI_SUCCESS; +} +EXPORT_SYMBOL_GPL(efi_query_variable_store); --- linux-lts-raring-3.8.0.orig/arch/x86/crypto/crc32c-pcl-intel-asm_64.S +++ linux-lts-raring-3.8.0/arch/x86/crypto/crc32c-pcl-intel-asm_64.S @@ -42,6 +42,8 @@ * SOFTWARE. */ +#include + ## ISCSI CRC 32 Implementation with crc32 and pclmulqdq Instruction .macro LABEL prefix n @@ -224,10 +226,10 @@ movdqa (bufp), %xmm0 # 2 consts: K1:K2 movq crc_init, %xmm1 # CRC for block 1 - pclmulqdq $0x00,%xmm0,%xmm1 # Multiply by K2 + PCLMULQDQ 0x00,%xmm0,%xmm1 # Multiply by K2 movq crc1, %xmm2 # CRC for block 2 - pclmulqdq $0x10, %xmm0, %xmm2 # Multiply by K1 + PCLMULQDQ 0x10, %xmm0, %xmm2 # Multiply by K1 pxor %xmm2,%xmm1 movq %xmm1, %rax --- linux-lts-raring-3.8.0.orig/arch/arm/Kconfig.debug +++ linux-lts-raring-3.8.0/arch/arm/Kconfig.debug @@ -291,6 +291,13 @@ Say Y here if you want kernel low-level debugging support on MVEBU based platforms. + config DEBUG_OMAP2PLUS_UART + bool "Kernel low-level debugging messages via OMAP2PLUS UART" + depends on ARCH_OMAP2PLUS + help + Say Y here if you want kernel low-level debugging support + on OMAP2PLUS based platforms. + config DEBUG_PICOXCELL_UART depends on ARCH_PICOXCELL bool "Use PicoXcell UART for low-level debug" @@ -461,6 +468,54 @@ choice prompt "Low-level debug console UART" + depends on DEBUG_OMAP2PLUS_UART + + config DEBUG_OMAP2UART1 + bool "OMAP2/3/4 UART1 (omap2/3 sdp boards and some omap3 boards)" + help + This covers at least h4, 2430sdp, 3430sdp, 3630sdp, + omap3 torpedo and 3530 lv som. + + config DEBUG_OMAP2UART2 + bool "OMAP2/3/4 UART2" + + config DEBUG_OMAP2UART3 + bool "OMAP2 UART3 (n8x0)" + + config DEBUG_OMAP3UART3 + bool "OMAP3 UART3 (most omap3 boards)" + help + This covers at least cm_t3x, beagle, crane, devkit8000, + igep00x0, ldp, n900, n9(50), pandora, overo, touchbook, + and 3517evm. + + config DEBUG_OMAP4UART3 + bool "OMAP4/5 UART3 (omap4 blaze, panda, omap5 sevm)" + + config DEBUG_OMAP3UART4 + bool "OMAP36XX UART4" + + config DEBUG_OMAP4UART4 + bool "OMAP4/5 UART4" + + config DEBUG_TI81XXUART1 + bool "TI81XX UART1 (ti8148evm)" + + config DEBUG_TI81XXUART2 + bool "TI81XX UART2" + + config DEBUG_TI81XXUART3 + bool "TI81XX UART3 (ti8168evm)" + + config DEBUG_AM33XXUART1 + bool "AM33XX UART1" + + config DEBUG_ZOOM_UART + bool "Zoom2/3 UART" +endchoice + +choice + prompt "Low-level debug console UART" depends on DEBUG_LL && DEBUG_TEGRA_UART config TEGRA_DEBUG_UART_AUTO_ODMDATA @@ -501,6 +556,7 @@ DEBUG_IMX6Q_UART default "debug/highbank.S" if DEBUG_HIGHBANK_UART default "debug/mvebu.S" if DEBUG_MVEBU_UART + default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART default "debug/socfpga.S" if DEBUG_SOCFPGA_UART default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1 --- linux-lts-raring-3.8.0.orig/arch/arm/Kconfig +++ linux-lts-raring-3.8.0/arch/arm/Kconfig @@ -17,7 +17,6 @@ select GENERIC_STRNCPY_FROM_USER select GENERIC_STRNLEN_USER select HARDIRQS_SW_RESEND - select HAVE_AOUT select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL select HAVE_ARCH_KGDB select HAVE_ARCH_SECCOMP_FILTER @@ -190,7 +189,8 @@ default DRAM_BASE if REMAP_VECTORS_TO_RAM default 0x00000000 help - The base address of exception vectors. + The base address of exception vectors. This must be two pages + in size. config ARM_PATCH_PHYS_VIRT bool "Patch physical to virtual translations at runtime" if EMBEDDED @@ -937,17 +937,24 @@ help Support for TI's DaVinci platform. -config ARCH_OMAP - bool "TI OMAP" +config ARCH_OMAP1 + bool "TI OMAP1" depends on MMU select ARCH_HAS_CPUFREQ select ARCH_HAS_HOLES_MEMORYMODEL + select ARCH_OMAP select ARCH_REQUIRE_GPIOLIB + select CLKDEV_LOOKUP select CLKSRC_MMIO select GENERIC_CLOCKEVENTS + select GENERIC_IRQ_CHIP select HAVE_CLK + select HAVE_IDE + select IRQ_DOMAIN + select NEED_MACH_IO_H if PCCARD + select NEED_MACH_MEMORY_H help - Support for TI's OMAP platform (OMAP1/2/3/4). + Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx) config ARCH_VT8500_SINGLE bool "VIA/WonderMedia 85xx" @@ -1294,6 +1301,16 @@ is not correctly implemented in PL310 as clean lines are not invalidated as a result of these operations. +config ARM_ERRATA_643719 + bool "ARM errata: LoUIS bit field in CLIDR register is incorrect" + depends on CPU_V7 && SMP + help + This option enables the workaround for the 643719 Cortex-A9 (prior to + r1p0) erratum. On affected cores the LoUIS bit field of the CLIDR + register returns zero when it should return one. The workaround + corrects this value, ensuring cache maintenance operations which use + it behave as intended and avoiding data corruption. + config ARM_ERRATA_720789 bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID" depends on CPU_V7 @@ -2313,6 +2330,8 @@ source "drivers/Kconfig" +source "ubuntu/Kconfig" + source "fs/Kconfig" source "arch/arm/Kconfig.debug" --- linux-lts-raring-3.8.0.orig/arch/arm/mach-shmobile/setup-emev2.c +++ linux-lts-raring-3.8.0/arch/arm/mach-shmobile/setup-emev2.c @@ -287,14 +287,14 @@ static struct resource gio3_resources[] = { [0] = { .name = "GIO_096", - .start = 0xe0050100, - .end = 0xe005012b, + .start = 0xe0050180, + .end = 0xe00501ab, .flags = IORESOURCE_MEM, }, [1] = { .name = "GIO_096", - .start = 0xe0050140, - .end = 0xe005015f, + .start = 0xe00501c0, + .end = 0xe00501df, .flags = IORESOURCE_MEM, }, [2] = { --- linux-lts-raring-3.8.0.orig/arch/arm/xen/enlighten.c +++ linux-lts-raring-3.8.0/arch/arm/xen/enlighten.c @@ -237,7 +237,7 @@ xen_init_IRQ(); if (request_percpu_irq(xen_events_irq, xen_arm_callback, - "events", xen_vcpu)) { + "events", &xen_vcpu)) { pr_err("Error requesting IRQ %d\n", xen_events_irq); return -EINVAL; } --- linux-lts-raring-3.8.0.orig/arch/arm/configs/at91sam9g45_defconfig +++ linux-lts-raring-3.8.0/arch/arm/configs/at91sam9g45_defconfig @@ -173,7 +173,6 @@ # CONFIG_MMC_BLOCK_BOUNCE is not set CONFIG_SDIO_UART=m CONFIG_MMC_ATMELMCI=y -CONFIG_MMC_ATMELMCI_DMA=y CONFIG_LEDS_ATMEL_PWM=y CONFIG_LEDS_GPIO=y CONFIG_LEDS_TRIGGER_TIMER=y --- linux-lts-raring-3.8.0.orig/arch/arm/configs/mxs_defconfig +++ linux-lts-raring-3.8.0/arch/arm/configs/mxs_defconfig @@ -118,6 +118,7 @@ CONFIG_FONTS=y CONFIG_LOGO=y CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y CONFIG_USB_CHIPIDEA=y CONFIG_USB_CHIPIDEA_HOST=y CONFIG_USB_STORAGE=y --- linux-lts-raring-3.8.0.orig/arch/arm/configs/omap2plus_defconfig +++ linux-lts-raring-3.8.0/arch/arm/configs/omap2plus_defconfig @@ -20,9 +20,10 @@ CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_BLK_DEV_BSG is not set -CONFIG_ARCH_OMAP=y +CONFIG_ARCH_OMAP2PLUS=y CONFIG_OMAP_RESET_CLOCKS=y CONFIG_OMAP_MUX_DEBUG=y +CONFIG_ARCH_VEXPRESS_CA9X4=y CONFIG_ARM_THUMBEE=y CONFIG_ARM_ERRATA_411920=y CONFIG_NO_HZ=y @@ -121,6 +122,8 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_DETECT_IRQ=y CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_I2C_CHARDEV=y CONFIG_SPI=y @@ -194,6 +197,7 @@ CONFIG_MMC=y CONFIG_MMC_UNSAFE_RESUME=y CONFIG_SDIO_UART=y +CONFIG_MMC_ARMMMCI=y CONFIG_MMC_OMAP=y CONFIG_MMC_OMAP_HS=y CONFIG_RTC_CLASS=y --- linux-lts-raring-3.8.0.orig/arch/arm/mach-exynos/common.c +++ linux-lts-raring-3.8.0/arch/arm/mach-exynos/common.c @@ -299,6 +299,7 @@ void exynos5_restart(char mode, const char *cmd) { + struct device_node *np; u32 val; void __iomem *addr; @@ -306,8 +307,9 @@ val = 0x1; addr = EXYNOS_SWRESET; } else if (of_machine_is_compatible("samsung,exynos5440")) { - val = (0x10 << 20) | (0x1 << 16); - addr = EXYNOS5440_SWRESET; + np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock"); + addr = of_iomap(np, 0) + 0xcc; + val = (0xfff << 20) | (0x1 << 16); } else { pr_err("%s: cannot support non-DT\n", __func__); return; --- linux-lts-raring-3.8.0.orig/arch/arm/mach-exynos/pmu.c +++ linux-lts-raring-3.8.0/arch/arm/mach-exynos/pmu.c @@ -227,6 +227,7 @@ { EXYNOS5_DIS_IRQ_ISP_ARM_CENTRAL_SYS_PWR_REG, { 0x0, 0x0, 0x0} }, { EXYNOS5_ARM_COMMON_SYS_PWR_REG, { 0x0, 0x0, 0x2} }, { EXYNOS5_ARM_L2_SYS_PWR_REG, { 0x3, 0x3, 0x3} }, + { EXYNOS5_ARM_L2_OPTION, { 0x10, 0x10, 0x0 } }, { EXYNOS5_CMU_ACLKSTOP_SYS_PWR_REG, { 0x1, 0x0, 0x1} }, { EXYNOS5_CMU_SCLKSTOP_SYS_PWR_REG, { 0x1, 0x0, 0x1} }, { EXYNOS5_CMU_RESET_SYS_PWR_REG, { 0x1, 0x1, 0x0} }, @@ -352,11 +353,9 @@ /* * SKIP_DEACTIVATE_ACEACP_IN_PWDN_BITFIELD Enable - * MANUAL_L2RSTDISABLE_CONTROL_BITFIELD Enable */ tmp = __raw_readl(EXYNOS5_ARM_COMMON_OPTION); - tmp |= (EXYNOS5_MANUAL_L2RSTDISABLE_CONTROL | - EXYNOS5_SKIP_DEACTIVATE_ACEACP_IN_PWDN); + tmp |= EXYNOS5_SKIP_DEACTIVATE_ACEACP_IN_PWDN; __raw_writel(tmp, EXYNOS5_ARM_COMMON_OPTION); /* --- linux-lts-raring-3.8.0.orig/arch/arm/mach-exynos/include/mach/regs-pmu.h +++ linux-lts-raring-3.8.0/arch/arm/mach-exynos/include/mach/regs-pmu.h @@ -344,6 +344,7 @@ #define EXYNOS5_FSYS_ARM_OPTION S5P_PMUREG(0x2208) #define EXYNOS5_ISP_ARM_OPTION S5P_PMUREG(0x2288) #define EXYNOS5_ARM_COMMON_OPTION S5P_PMUREG(0x2408) +#define EXYNOS5_ARM_L2_OPTION S5P_PMUREG(0x2608) #define EXYNOS5_TOP_PWR_OPTION S5P_PMUREG(0x2C48) #define EXYNOS5_TOP_PWR_SYSMEM_OPTION S5P_PMUREG(0x2CC8) #define EXYNOS5_JPEG_MEM_OPTION S5P_PMUREG(0x2F48) --- linux-lts-raring-3.8.0.orig/arch/arm/plat-omap/Kconfig +++ linux-lts-raring-3.8.0/arch/arm/plat-omap/Kconfig @@ -5,36 +5,6 @@ config ARCH_OMAP_OTG bool -choice - prompt "OMAP System Type" - default ARCH_OMAP2PLUS - -config ARCH_OMAP1 - bool "TI OMAP1" - select CLKDEV_LOOKUP - select CLKSRC_MMIO - select GENERIC_IRQ_CHIP - select HAVE_IDE - select IRQ_DOMAIN - select NEED_MACH_IO_H if PCCARD - select NEED_MACH_MEMORY_H - help - "Systems based on omap7xx, omap15xx or omap16xx" - -config ARCH_OMAP2PLUS - bool "TI OMAP2/3/4" - select CLKDEV_LOOKUP - select GENERIC_IRQ_CHIP - select OMAP_DM_TIMER - select PINCTRL - select PROC_DEVICETREE if PROC_FS - select SPARSE_IRQ - select USE_OF - help - "Systems based on OMAP2, OMAP3, OMAP4 or OMAP5" - -endchoice - comment "OMAP Feature Selections" config OMAP_DEBUG_DEVICES @@ -118,7 +88,7 @@ config OMAP_MBOX_FWK tristate "Mailbox framework support" - depends on ARCH_OMAP + depends on ARCH_OMAP && !ARCH_MULTIPLATFORM help Say Y here if you want to use OMAP Mailbox framework support for DSP, IVA1.0 and IVA2 in OMAP1/2/3. --- linux-lts-raring-3.8.0.orig/arch/arm/plat-omap/i2c.c +++ linux-lts-raring-3.8.0/arch/arm/plat-omap/i2c.c @@ -68,7 +68,7 @@ * Register busses defined in command line but that are not registered with * omap_register_i2c_bus from board initialization code. */ -static int __init omap_register_i2c_bus_cmdline(void) +int __init omap_register_i2c_bus_cmdline(void) { int i, err = 0; @@ -83,7 +83,6 @@ out: return err; } -subsys_initcall(omap_register_i2c_bus_cmdline); /** * omap_register_i2c_bus - register I2C bus with device descriptors --- linux-lts-raring-3.8.0.orig/arch/arm/plat-omap/Makefile +++ linux-lts-raring-3.8.0/arch/arm/plat-omap/Makefile @@ -2,6 +2,8 @@ # Makefile for the linux kernel. # +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/arch/arm/plat-omap/include + # Common support obj-y := sram.o dma.o counter_32k.o obj-m := --- linux-lts-raring-3.8.0.orig/arch/arm/plat-omap/include/plat/i2c.h +++ linux-lts-raring-3.8.0/arch/arm/plat-omap/include/plat/i2c.h @@ -32,6 +32,7 @@ extern int omap_register_i2c_bus(int bus_id, u32 clkrate, struct i2c_board_info const *info, unsigned len); +extern int omap_register_i2c_bus_cmdline(void); #else static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, struct i2c_board_info const *info, @@ -39,6 +40,11 @@ { return 0; } + +static inline int omap_register_i2c_bus_cmdline(void) +{ + return 0; +} #endif struct omap_hwmod; --- linux-lts-raring-3.8.0.orig/arch/arm/lib/delay.c +++ linux-lts-raring-3.8.0/arch/arm/lib/delay.c @@ -77,6 +77,7 @@ arm_delay_ops.delay = __timer_delay; arm_delay_ops.const_udelay = __timer_const_udelay; arm_delay_ops.udelay = __timer_udelay; + arm_delay_ops.const_clock = true; delay_calibrated = true; } else { pr_info("Ignoring duplicate/late registration of read_current_timer delay\n"); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-ixp4xx/vulcan-setup.c +++ linux-lts-raring-3.8.0/arch/arm/mach-ixp4xx/vulcan-setup.c @@ -163,6 +163,7 @@ static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = { .pin = 14, + .ext_pullup_enable_pin = -EINVAL, }; static struct platform_device vulcan_w1_gpio = { --- linux-lts-raring-3.8.0.orig/arch/arm/mach-cns3xxx/core.c +++ linux-lts-raring-3.8.0/arch/arm/mach-cns3xxx/core.c @@ -22,19 +22,9 @@ static struct map_desc cns3xxx_io_desc[] __initdata = { { - .virtual = CNS3XXX_TC11MP_TWD_BASE_VIRT, - .pfn = __phys_to_pfn(CNS3XXX_TC11MP_TWD_BASE), - .length = SZ_4K, - .type = MT_DEVICE, - }, { - .virtual = CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT, - .pfn = __phys_to_pfn(CNS3XXX_TC11MP_GIC_CPU_BASE), - .length = SZ_4K, - .type = MT_DEVICE, - }, { - .virtual = CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT, - .pfn = __phys_to_pfn(CNS3XXX_TC11MP_GIC_DIST_BASE), - .length = SZ_4K, + .virtual = CNS3XXX_TC11MP_SCU_BASE_VIRT, + .pfn = __phys_to_pfn(CNS3XXX_TC11MP_SCU_BASE), + .length = SZ_8K, .type = MT_DEVICE, }, { .virtual = CNS3XXX_TIMER1_2_3_BASE_VIRT, --- linux-lts-raring-3.8.0.orig/arch/arm/mach-cns3xxx/include/mach/cns3xxx.h +++ linux-lts-raring-3.8.0/arch/arm/mach-cns3xxx/include/mach/cns3xxx.h @@ -94,10 +94,10 @@ #define RTC_INTR_STS_OFFSET 0x34 #define CNS3XXX_MISC_BASE 0x76000000 /* Misc Control */ -#define CNS3XXX_MISC_BASE_VIRT 0xFFF07000 /* Misc Control */ +#define CNS3XXX_MISC_BASE_VIRT 0xFB000000 /* Misc Control */ #define CNS3XXX_PM_BASE 0x77000000 /* Power Management Control */ -#define CNS3XXX_PM_BASE_VIRT 0xFFF08000 +#define CNS3XXX_PM_BASE_VIRT 0xFB001000 #define PM_CLK_GATE_OFFSET 0x00 #define PM_SOFT_RST_OFFSET 0x04 @@ -109,7 +109,7 @@ #define PM_PLL_HM_PD_OFFSET 0x1C #define CNS3XXX_UART0_BASE 0x78000000 /* UART 0 */ -#define CNS3XXX_UART0_BASE_VIRT 0xFFF09000 +#define CNS3XXX_UART0_BASE_VIRT 0xFB002000 #define CNS3XXX_UART1_BASE 0x78400000 /* UART 1 */ #define CNS3XXX_UART1_BASE_VIRT 0xFFF0A000 @@ -130,7 +130,7 @@ #define CNS3XXX_I2S_BASE_VIRT 0xFFF10000 #define CNS3XXX_TIMER1_2_3_BASE 0x7C800000 /* Timer */ -#define CNS3XXX_TIMER1_2_3_BASE_VIRT 0xFFF10800 +#define CNS3XXX_TIMER1_2_3_BASE_VIRT 0xFB003000 #define TIMER1_COUNTER_OFFSET 0x00 #define TIMER1_AUTO_RELOAD_OFFSET 0x04 @@ -227,16 +227,16 @@ * Testchip peripheral and fpga gic regions */ #define CNS3XXX_TC11MP_SCU_BASE 0x90000000 /* IRQ, Test chip */ -#define CNS3XXX_TC11MP_SCU_BASE_VIRT 0xFF000000 +#define CNS3XXX_TC11MP_SCU_BASE_VIRT 0xFB004000 #define CNS3XXX_TC11MP_GIC_CPU_BASE 0x90000100 /* Test chip interrupt controller CPU interface */ -#define CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT 0xFF000100 +#define CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT (CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x100) #define CNS3XXX_TC11MP_TWD_BASE 0x90000600 -#define CNS3XXX_TC11MP_TWD_BASE_VIRT 0xFF000600 +#define CNS3XXX_TC11MP_TWD_BASE_VIRT (CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x600) #define CNS3XXX_TC11MP_GIC_DIST_BASE 0x90001000 /* Test chip interrupt controller distributor */ -#define CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT 0xFF001000 +#define CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT (CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x1000) #define CNS3XXX_TC11MP_L220_BASE 0x92002000 /* L220 registers */ #define CNS3XXX_TC11MP_L220_BASE_VIRT 0xFF002000 --- linux-lts-raring-3.8.0.orig/arch/arm/mach-u300/include/mach/u300-regs.h +++ linux-lts-raring-3.8.0/arch/arm/mach-u300/include/mach/u300-regs.h @@ -95,7 +95,7 @@ #define U300_SPI_BASE (U300_FAST_PER_PHYS_BASE+0x6000) /* Fast UART1 on U335 only */ -#define U300_UART1_BASE (U300_SLOW_PER_PHYS_BASE+0x7000) +#define U300_UART1_BASE (U300_FAST_PER_PHYS_BASE+0x7000) /* * SLOW peripherals --- linux-lts-raring-3.8.0.orig/arch/arm/mach-versatile/pci.c +++ linux-lts-raring-3.8.0/arch/arm/mach-versatile/pci.c @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -42,9 +43,9 @@ #define PCI_IMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0) #define PCI_IMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4) #define PCI_IMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8) -#define PCI_SMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10) -#define PCI_SMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14) -#define PCI_SMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18) +#define PCI_SMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14) +#define PCI_SMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18) +#define PCI_SMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x1c) #define PCI_SELFID __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc) #define DEVICE_ID_OFFSET 0x00 @@ -169,8 +170,8 @@ .write = versatile_write_config, }; -static struct resource io_mem = { - .name = "PCI I/O space", +static struct resource unused_mem = { + .name = "PCI unused", .start = VERSATILE_PCI_MEM_BASE0, .end = VERSATILE_PCI_MEM_BASE0+VERSATILE_PCI_MEM_BASE0_SIZE-1, .flags = IORESOURCE_MEM, @@ -194,9 +195,9 @@ { int ret = 0; - ret = request_resource(&iomem_resource, &io_mem); + ret = request_resource(&iomem_resource, &unused_mem); if (ret) { - printk(KERN_ERR "PCI: unable to allocate I/O " + printk(KERN_ERR "PCI: unable to allocate unused " "memory region (%d)\n", ret); goto out; } @@ -204,7 +205,7 @@ if (ret) { printk(KERN_ERR "PCI: unable to allocate non-prefetchable " "memory region (%d)\n", ret); - goto release_io_mem; + goto release_unused_mem; } ret = request_resource(&iomem_resource, &pre_mem); if (ret) { @@ -224,8 +225,8 @@ release_non_mem: release_resource(&non_mem); - release_io_mem: - release_resource(&io_mem); + release_unused_mem: + release_resource(&unused_mem); out: return ret; } @@ -245,7 +246,7 @@ goto out; } - ret = pci_ioremap_io(0, VERSATILE_PCI_MEM_BASE0); + ret = pci_ioremap_io(0, VERSATILE_PCI_IO_BASE); if (ret) goto out; @@ -294,6 +295,19 @@ __raw_writel(PHYS_OFFSET, local_pci_cfg_base + PCI_BASE_ADDRESS_2); /* + * For many years the kernel and QEMU were symbiotically buggy + * in that they both assumed the same broken IRQ mapping. + * QEMU therefore attempts to auto-detect old broken kernels + * so that they still work on newer QEMU as they did on old + * QEMU. Since we now use the correct (ie matching-hardware) + * IRQ mapping we write a definitely different value to a + * PCI_INTERRUPT_LINE register to tell QEMU that we expect + * real hardware behaviour and it need not be backwards + * compatible for us. This write is harmless on real hardware. + */ + __raw_writel(0, VERSATILE_PCI_VIRT_BASE+PCI_INTERRUPT_LINE); + + /* * Do not to map Versatile FPGA PCI device into memory space */ pci_slot_ignore |= (1 << myslot); @@ -326,13 +340,13 @@ { int irq; - /* slot, pin, irq - * 24 1 27 - * 25 1 28 - * 26 1 29 - * 27 1 30 + /* + * Slot INTA INTB INTC INTD + * 31 PCI1 PCI2 PCI3 PCI0 + * 30 PCI0 PCI1 PCI2 PCI3 + * 29 PCI3 PCI0 PCI1 PCI2 */ - irq = 27 + ((slot - 24 + pin - 1) & 3); + irq = IRQ_SIC_PCI0 + ((slot + 2 + pin - 1) & 3); return irq; } --- linux-lts-raring-3.8.0.orig/arch/arm/mach-versatile/core.c +++ linux-lts-raring-3.8.0/arch/arm/mach-versatile/core.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -65,16 +66,28 @@ #define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE) #define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE) +/* These PIC IRQs are valid in each configuration */ +#define PIC_VALID_ALL BIT(SIC_INT_KMI0) | BIT(SIC_INT_KMI1) | \ + BIT(SIC_INT_SCI3) | BIT(SIC_INT_UART3) | \ + BIT(SIC_INT_CLCD) | BIT(SIC_INT_TOUCH) | \ + BIT(SIC_INT_KEYPAD) | BIT(SIC_INT_DoC) | \ + BIT(SIC_INT_USB) | BIT(SIC_INT_PCI0) | \ + BIT(SIC_INT_PCI1) | BIT(SIC_INT_PCI2) | \ + BIT(SIC_INT_PCI3) #if 1 #define IRQ_MMCI0A IRQ_VICSOURCE22 #define IRQ_AACI IRQ_VICSOURCE24 #define IRQ_ETH IRQ_VICSOURCE25 #define PIC_MASK 0xFFD00000 +#define PIC_VALID PIC_VALID_ALL #else #define IRQ_MMCI0A IRQ_SIC_MMCI0A #define IRQ_AACI IRQ_SIC_AACI #define IRQ_ETH IRQ_SIC_ETH #define PIC_MASK 0 +#define PIC_VALID PIC_VALID_ALL | BIT(SIC_INT_MMCI0A) | \ + BIT(SIC_INT_MMCI1A) | BIT(SIC_INT_AACI) | \ + BIT(SIC_INT_ETH) #endif /* Lookup table for finding a DT node that represents the vic instance */ @@ -102,7 +115,7 @@ VERSATILE_SIC_BASE); fpga_irq_init(VA_SIC_BASE, "SIC", IRQ_SIC_START, - IRQ_VICSOURCE31, ~PIC_MASK, np); + IRQ_VICSOURCE31, PIC_VALID, np); /* * Interrupts on secondary controller from 0 to 8 are routed to --- linux-lts-raring-3.8.0.orig/arch/arm/mach-versatile/include/mach/platform.h +++ linux-lts-raring-3.8.0/arch/arm/mach-versatile/include/mach/platform.h @@ -231,12 +231,14 @@ /* PCI space */ #define VERSATILE_PCI_BASE 0x41000000 /* PCI Interface */ #define VERSATILE_PCI_CFG_BASE 0x42000000 +#define VERSATILE_PCI_IO_BASE 0x43000000 #define VERSATILE_PCI_MEM_BASE0 0x44000000 #define VERSATILE_PCI_MEM_BASE1 0x50000000 #define VERSATILE_PCI_MEM_BASE2 0x60000000 /* Sizes of above maps */ #define VERSATILE_PCI_BASE_SIZE 0x01000000 #define VERSATILE_PCI_CFG_BASE_SIZE 0x02000000 +#define VERSATILE_PCI_IO_BASE_SIZE 0x01000000 #define VERSATILE_PCI_MEM_BASE0_SIZE 0x0c000000 /* 32Mb */ #define VERSATILE_PCI_MEM_BASE1_SIZE 0x10000000 /* 256Mb */ #define VERSATILE_PCI_MEM_BASE2_SIZE 0x10000000 /* 256Mb */ --- linux-lts-raring-3.8.0.orig/arch/arm/mach-imx/src.c +++ linux-lts-raring-3.8.0/arch/arm/mach-imx/src.c @@ -43,6 +43,18 @@ src_base + SRC_GPR1 + cpu * 8); } +u32 imx_get_cpu_arg(int cpu) +{ + cpu = cpu_logical_map(cpu); + return readl_relaxed(src_base + SRC_GPR1 + cpu * 8 + 4); +} + +void imx_set_cpu_arg(int cpu, u32 arg) +{ + cpu = cpu_logical_map(cpu); + writel_relaxed(arg, src_base + SRC_GPR1 + cpu * 8 + 4); +} + void imx_src_prepare_restart(void) { u32 val; --- linux-lts-raring-3.8.0.orig/arch/arm/mach-imx/hotplug.c +++ linux-lts-raring-3.8.0/arch/arm/mach-imx/hotplug.c @@ -46,11 +46,23 @@ void imx_cpu_die(unsigned int cpu) { cpu_enter_lowpower(); + /* + * We use the cpu jumping argument register to sync with + * imx_cpu_kill() which is running on cpu0 and waiting for + * the register being cleared to kill the cpu. + */ + imx_set_cpu_arg(cpu, ~0); cpu_do_idle(); } int imx_cpu_kill(unsigned int cpu) { + unsigned long timeout = jiffies + msecs_to_jiffies(50); + + while (imx_get_cpu_arg(cpu) == 0) + if (time_after(jiffies, timeout)) + return 0; imx_enable_cpu(cpu, false); + imx_set_cpu_arg(cpu, 0); return 1; } --- linux-lts-raring-3.8.0.orig/arch/arm/mach-imx/clk-imx6q.c +++ linux-lts-raring-3.8.0/arch/arm/mach-imx/clk-imx6q.c @@ -436,6 +436,9 @@ for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) clk_prepare_enable(clk[clks_init_on[i]]); + if (IS_ENABLED(CONFIG_SATA_AHCI_PLATFORM)) + clk_prepare_enable(clk[sata_ref_100m]); + /* Set initial power mode */ imx6q_set_lpm(WAIT_CLOCKED); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-imx/clk-imx25.c +++ linux-lts-raring-3.8.0/arch/arm/mach-imx/clk-imx25.c @@ -224,6 +224,9 @@ clk_prepare_enable(clk[emi_ahb]); + /* Clock source for gpt must be derived from AHB */ + clk_set_parent(clk[per5_sel], clk[ahb]); + clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-imx/clk-imx35.c +++ linux-lts-raring-3.8.0/arch/arm/mach-imx/clk-imx35.c @@ -257,6 +257,7 @@ clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0"); clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); + clk_register_clkdev(clk[admux_gate], "audmux", NULL); clk_prepare_enable(clk[spba_gate]); clk_prepare_enable(clk[gpio1_gate]); @@ -264,6 +265,8 @@ clk_prepare_enable(clk[gpio3_gate]); clk_prepare_enable(clk[iim_gate]); clk_prepare_enable(clk[emi_gate]); + clk_prepare_enable(clk[max_gate]); + clk_prepare_enable(clk[iomuxc_gate]); /* * SCC is needed to boot via mmc after a watchdog reset. The clock code --- linux-lts-raring-3.8.0.orig/arch/arm/mach-imx/common.h +++ linux-lts-raring-3.8.0/arch/arm/mach-imx/common.h @@ -116,6 +116,8 @@ extern void imx_enable_cpu(int cpu, bool enable); extern void imx_set_cpu_jump(int cpu, void *jump_addr); +extern u32 imx_get_cpu_arg(int cpu); +extern void imx_set_cpu_arg(int cpu, u32 arg); #ifdef CONFIG_DEBUG_LL extern void imx_lluart_map_io(void); #else --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap1/i2c.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap1/i2c.c @@ -91,3 +91,9 @@ return platform_device_register(pdev); } + +static int __init omap_i2c_cmdline(void) +{ + return omap_register_i2c_bus_cmdline(); +} +subsys_initcall(omap_i2c_cmdline); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap1/dma.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap1/dma.c @@ -24,7 +24,7 @@ #include #include #include - +#include #include #include @@ -270,11 +270,17 @@ return errata; } +static const struct platform_device_info omap_dma_dev_info = { + .name = "omap-dma-engine", + .id = -1, + .dma_mask = DMA_BIT_MASK(32), +}; + static int __init omap1_system_dma_init(void) { struct omap_system_dma_plat_info *p; struct omap_dma_dev_attr *d; - struct platform_device *pdev; + struct platform_device *pdev, *dma_pdev; int ret; pdev = platform_device_alloc("omap_dma_system", 0); @@ -380,8 +386,16 @@ dma_common_ch_start = CPC; dma_common_ch_end = COLOR; + dma_pdev = platform_device_register_full(&omap_dma_dev_info); + if (IS_ERR(dma_pdev)) { + ret = PTR_ERR(dma_pdev); + goto exit_release_pdev; + } + return ret; +exit_release_pdev: + platform_device_del(pdev); exit_release_chan: kfree(d->chan); exit_release_d: --- linux-lts-raring-3.8.0.orig/arch/arm/mach-footbridge/dc21285.c +++ linux-lts-raring-3.8.0/arch/arm/mach-footbridge/dc21285.c @@ -276,8 +276,6 @@ sys->mem_offset = DC21285_PCI_MEM; - pci_ioremap_io(0, DC21285_PCI_IO); - pci_add_resource_offset(&sys->resources, &res[0], sys->mem_offset); pci_add_resource_offset(&sys->resources, &res[1], sys->mem_offset); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-integrator/integrator_ap.c +++ linux-lts-raring-3.8.0/arch/arm/mach-integrator/integrator_ap.c @@ -613,7 +613,6 @@ static void __init ap_map_io_atag(void) { iotable_init(ap_io_desc_atag, ARRAY_SIZE(ap_io_desc_atag)); - ap_syscon_base = __io_address(INTEGRATOR_SC_BASE); ap_map_io(); } @@ -685,6 +684,7 @@ platform_device_register(&cfi_flash_device); + ap_syscon_base = __io_address(INTEGRATOR_SC_BASE); sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET); for (i = 0; i < 4; i++) { struct lm_device *lmdev; --- linux-lts-raring-3.8.0.orig/arch/arm/mach-at91/board-stamp9g20.c +++ linux-lts-raring-3.8.0/arch/arm/mach-at91/board-stamp9g20.c @@ -188,6 +188,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = { .pin = AT91_PIN_PA29, .is_open_drain = 1, + .ext_pullup_enable_pin = -EINVAL, }; static struct platform_device w1_device = { --- linux-lts-raring-3.8.0.orig/arch/arm/mach-at91/setup.c +++ linux-lts-raring-3.8.0/arch/arm/mach-at91/setup.c @@ -333,7 +333,7 @@ of_id = of_match_node(rstc_ids, np); if (!of_id) - panic("AT91: rtsc no restart function availlable\n"); + panic("AT91: rtsc no restart function available\n"); arm_pm_restart = of_id->data; --- linux-lts-raring-3.8.0.orig/arch/arm/mach-at91/board-foxg20.c +++ linux-lts-raring-3.8.0/arch/arm/mach-at91/board-foxg20.c @@ -176,6 +176,7 @@ /* If you choose to use a pin other than PB16 it needs to be 3.3V */ .pin = AT91_PIN_PB16, .is_open_drain = 1, + .ext_pullup_enable_pin = -EINVAL, }; static struct platform_device w1_device = { --- linux-lts-raring-3.8.0.orig/arch/arm/mach-highbank/hotplug.c +++ linux-lts-raring-3.8.0/arch/arm/mach-highbank/hotplug.c @@ -28,13 +28,11 @@ */ void __ref highbank_cpu_die(unsigned int cpu) { - flush_cache_all(); - highbank_set_cpu_jump(cpu, phys_to_virt(0)); - highbank_set_core_pwr(); - cpu_do_idle(); + flush_cache_louis(); + highbank_set_core_pwr(); - /* We should never return from idle */ - panic("highbank: cpu %d unexpectedly exit from shutdown\n", cpu); + while (1) + cpu_do_idle(); } --- linux-lts-raring-3.8.0.orig/arch/arm/mach-highbank/Kconfig +++ linux-lts-raring-3.8.0/arch/arm/mach-highbank/Kconfig @@ -1,5 +1,7 @@ config ARCH_HIGHBANK bool "Calxeda ECX-1000/2000 (Highbank/Midway)" if ARCH_MULTI_V7 + select ARCH_HAS_CPUFREQ + select ARCH_HAS_OPP select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_GIC @@ -11,5 +13,7 @@ select GENERIC_CLOCKEVENTS select HAVE_ARM_SCU select HAVE_SMP + select MAILBOX + select PL320_MBOX select SPARSE_IRQ select USE_OF --- linux-lts-raring-3.8.0.orig/arch/arm/mach-highbank/highbank.c +++ linux-lts-raring-3.8.0/arch/arm/mach-highbank/highbank.c @@ -147,6 +147,7 @@ { struct resource *res; int reg = -1; + u32 val; struct device *dev = __dev; if (event != BUS_NOTIFY_ADD_DEVICE) @@ -173,10 +174,10 @@ return NOTIFY_DONE; if (of_property_read_bool(dev->of_node, "dma-coherent")) { - writel(0xff31, sregs_base + reg); + val = readl(sregs_base + reg); + writel(val | 0xff01, sregs_base + reg); set_dma_ops(dev, &arm_coherent_dma_ops); - } else - writel(0, sregs_base + reg); + } return NOTIFY_OK; } --- linux-lts-raring-3.8.0.orig/arch/arm/mach-highbank/Makefile +++ linux-lts-raring-3.8.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-lts-raring-3.8.0.orig/arch/arm/mach-omap2/smartreflex-class3.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/smartreflex-class3.c @@ -58,4 +58,4 @@ pr_info("SmartReflex Class3 initialized\n"); return sr_register_class(&class3_data); } -late_initcall(sr_class3_init); +omap_late_initcall(sr_class3_init); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap2/serial.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/serial.c @@ -254,7 +254,7 @@ return 0; } -core_initcall(omap_serial_early_init); +omap_core_initcall(omap_serial_early_init); /** * omap_serial_init_port() - initialize single serial port --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap2/fb.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/fb.c @@ -89,7 +89,7 @@ return 0; } -arch_initcall(omap_init_vrfb); +omap_arch_initcall(omap_init_vrfb); #endif #if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) @@ -113,6 +113,6 @@ return platform_device_register(&omap_fb_device); } -arch_initcall(omap_init_fb); +omap_arch_initcall(omap_init_fb); #endif --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap2/io.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/io.c @@ -55,6 +55,12 @@ #include "prm44xx.h" /* + * omap_clk_init: points to a function that does the SoC-specific + * clock initializations + */ +int (*omap_clk_init)(void); + +/* * The machine specific code may provide the extra mapping besides the * default mapping provided here. */ @@ -397,7 +403,7 @@ omap242x_clockdomains_init(); omap2420_hwmod_init(); omap_hwmod_init_postsetup(); - omap2420_clk_init(); + omap_clk_init = omap2420_clk_init; } void __init omap2420_init_late(void) @@ -427,7 +433,7 @@ omap243x_clockdomains_init(); omap2430_hwmod_init(); omap_hwmod_init_postsetup(); - omap2430_clk_init(); + omap_clk_init = omap2430_clk_init; } void __init omap2430_init_late(void) @@ -462,7 +468,7 @@ omap3xxx_clockdomains_init(); omap3xxx_hwmod_init(); omap_hwmod_init_postsetup(); - omap3xxx_clk_init(); + omap_clk_init = omap3xxx_clk_init; } void __init omap3430_init_early(void) @@ -500,7 +506,7 @@ omap3xxx_clockdomains_init(); omap3xxx_hwmod_init(); omap_hwmod_init_postsetup(); - omap3xxx_clk_init(); + omap_clk_init = omap3xxx_clk_init; } void __init omap3_init_late(void) @@ -568,7 +574,7 @@ am33xx_clockdomains_init(); am33xx_hwmod_init(); omap_hwmod_init_postsetup(); - am33xx_clk_init(); + omap_clk_init = am33xx_clk_init; } #endif @@ -593,7 +599,7 @@ omap44xx_clockdomains_init(); omap44xx_hwmod_init(); omap_hwmod_init_postsetup(); - omap4xxx_clk_init(); + omap_clk_init = omap4xxx_clk_init; } void __init omap4430_init_late(void) --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap2/board-omap4panda.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/board-omap4panda.c @@ -47,6 +47,16 @@ #include "common-board-devices.h" #include "dss-common.h" +/* + * These device paths represent the onboard USB <-> Ethernet bridge, and + * the WLAN module on Panda, both of which need their random or all-zeros + * mac address replacing with a per-cpu stable generated one + */ +static const char * const panda_fixup_mac_device_paths[] = { + "usb1/1-1/1-1.1/1-1.1:1.0", + "mmc1:0001:2", +}; + #define GPIO_HUB_POWER 1 #define GPIO_HUB_NRESET 62 #define GPIO_WIFI_PMENA 43 @@ -435,6 +445,10 @@ omap4_mux_init(board_mux, NULL, package); omap_panda_wlan_data.irq = gpio_to_irq(GPIO_WIFI_IRQ); + + omap_register_mac_device_fixup_paths(panda_fixup_mac_device_paths, + ARRAY_SIZE(panda_fixup_mac_device_paths)); + ret = wl12xx_set_platform_data(&omap_panda_wlan_data); if (ret) pr_err("error setting wl12xx data: %d\n", ret); --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap2/Kconfig +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/Kconfig @@ -1,3 +1,26 @@ +config ARCH_OMAP + bool + +config ARCH_OMAP2PLUS + bool "TI OMAP2/3/4/5 SoCs with device tree support" if (ARCH_MULTI_V6 || ARCH_MULTI_V7) + select ARCH_HAS_CPUFREQ + select ARCH_HAS_HOLES_MEMORYMODEL + select ARCH_OMAP + select ARCH_REQUIRE_GPIOLIB + select CLKDEV_LOOKUP + select CLKSRC_MMIO + select GENERIC_CLOCKEVENTS + select GENERIC_IRQ_CHIP + select HAVE_CLK + select OMAP_DM_TIMER + select PINCTRL + select PROC_DEVICETREE if PROC_FS + select SPARSE_IRQ + select USE_OF + help + Systems based on OMAP2, OMAP3, OMAP4 or OMAP5 + + if ARCH_OMAP2PLUS menu "TI OMAP2/3/4 Specific Features" @@ -397,7 +420,7 @@ config OMAP4_ERRATA_I688 bool "OMAP4 errata: Async Bridge Corruption" - depends on ARCH_OMAP4 + depends on ARCH_OMAP4 && !ARCH_MULTIPLATFORM select ARCH_HAS_BARRIERS help If a data is stalled inside asynchronous bridge because of back --- linux-lts-raring-3.8.0.orig/arch/arm/mach-omap2/board-rx51-video.c +++ linux-lts-raring-3.8.0/arch/arm/mach-omap2/board-rx51-video.c @@ -18,6 +18,7 @@ #include